diff options
author | Benjamin Drung <bdrung@ubuntu.com> | 2010-06-29 10:01:17 +0200 |
---|---|---|
committer | Benjamin Drung <bdrung@ubuntu.com> | 2010-06-29 10:01:17 +0200 |
commit | e8b98d4a2a505405b6380e206cc1e0f553753794 (patch) | |
tree | 4f7745e028b087f2d770b39ad20d90adac1af063 /src | |
parent | 42318926e1c1585ccc266c4607cb1d6e855bd0b9 (diff) |
Imported Upstream version 2.4~alpha2
Diffstat (limited to 'src')
67 files changed, 2463 insertions, 2690 deletions
diff --git a/src/audacious/Makefile b/src/audacious/Makefile index 7b19c5c..5ad9f81 100644 --- a/src/audacious/Makefile +++ b/src/audacious/Makefile @@ -79,20 +79,15 @@ DATA = images/about-logo.png \ images/playback.png \ images/playlist.png \ images/plugins.png \ - images/replay_gain.png \ - ui/equalizer.ui \ - ui/mainwin.ui \ - ui/player.ui \ - ui/playlist.ui \ - ui/carbon-menubar.ui + images/replay_gain.png CLEAN = build_stamp.c dbus-client-bindings.h dbus-server-bindings.h EXT_DEPS = ../libguess/libguess.a ifeq ($(USE_EGGSM),yes) EXT_DEPS += ../libeggsmclient/libeggsmclient.a -EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS} -EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS} +EGGSM_LIBS = ../libeggsmclient/libeggsmclient.a ${SM_LIBS} ${ICE_LIBS} +EGGSM_CFLAGS = -I../libeggsmclient ${SM_CFLAGS} ${ICE_CFLAGS} endif include ../../buildsys.mk @@ -125,6 +120,7 @@ CPPFLAGS += -DHAVE_CONFIG_H \ -I../libaudtag LIBS += ${LDADD} \ + -lm \ -L../libaudcore -laudcore \ -L../libaudgui -laudgui \ -L../libaudtag -laudtag \ @@ -141,15 +137,6 @@ LIBS += ${LDADD} \ LDFLAGS += ${PROG_IMPLIB_LDFLAGS} ${AUDLDFLAGS} -build_stamp.c: - echo "#include <glib.h>" > build_stamp.c ; \ - if test -d ../../.hg ; then \ - revh=`hg tip --template 'const gchar *build_stamp = "{rev}:{node|short}";\n' 2>/dev/null`; \ - [ -z "$$revh" ] || echo "$$revh" >> build_stamp.c; \ - else \ - echo "const gchar *build_stamp = \"UNSUPPORTED VERSION\";" >> build_stamp.c; \ - fi - DBUS_BINDINGS_SOURCES = objects.xml \ mpris_root.xml \ mpris_tracklist.xml \ diff --git a/src/audacious/auddrct.c b/src/audacious/auddrct.c index fc190cb..de6cd8f 100644 --- a/src/audacious/auddrct.c +++ b/src/audacious/auddrct.c @@ -104,7 +104,10 @@ void drct_play (void) if (playback_get_playing () && playback_get_paused ()) playback_pause (); else + { + playlist_set_playing (playlist_get_active ()); playback_initiate (); + } return; } @@ -116,15 +119,6 @@ drct_pause ( void ) return; } -void -drct_stop ( void ) -{ - ip_data.stop = TRUE; - playback_stop(); - ip_data.stop = FALSE; - return; -} - gboolean drct_get_playing ( void ) { diff --git a/src/audacious/auddrct.h b/src/audacious/auddrct.h index 7a62bcf..25a7480 100644 --- a/src/audacious/auddrct.h +++ b/src/audacious/auddrct.h @@ -42,7 +42,6 @@ void drct_activate(void); void drct_initiate ( void ); void drct_play ( void ); void drct_pause ( void ); -void drct_stop ( void ); gboolean drct_get_playing ( void ); gboolean drct_get_paused ( void ); gboolean drct_get_stopped ( void ); diff --git a/src/audacious/chardet.c b/src/audacious/chardet.c index bc6ae22..f4720a9 100644 --- a/src/audacious/chardet.c +++ b/src/audacious/chardet.c @@ -17,6 +17,7 @@ * Audacious or using our public API to be a derived work. */ +#define DEBUG #include "config.h" #include "chardet.h" #include "audstrings.h" @@ -95,12 +96,31 @@ cd_chardet_to_utf8(const gchar * str, gssize len, gsize * arg_bytes_read, g_return_val_if_fail(str != NULL, NULL); #ifdef USE_CHARDET + if (dfa_validate_utf8(str, len)) + { + if (len < 0) + len = strlen (str); + + ret = g_malloc (len + 1); + memcpy (ret, str, len); + ret[len] = 0; + + if (arg_bytes_read != NULL) + * arg_bytes_read = len; + if (arg_bytes_write != NULL) + * arg_bytes_write = len; + + return ret; + } + if (cfg.chardet_detector) det = cfg.chardet_detector; if (det) { - encoding = (gchar *) guess_encoding(str, strlen(str), det); + AUDDBG("guess encoding (%s) %s\n", det, str); + encoding = (gchar *) guess_encoding(str, len, det); + AUDDBG("encoding = %s\n", encoding); if (encoding == NULL) goto fallback; @@ -150,7 +170,4 @@ void chardet_init(void) { str_to_utf8 = cd_str_to_utf8; chardet_to_utf8 = cd_chardet_to_utf8; -#ifdef USE_CHARDET - guess_init(); -#endif } diff --git a/src/audacious/credits.c b/src/audacious/credits.c index 7f6b135..9f5d816 100644 --- a/src/audacious/credits.c +++ b/src/audacious/credits.c @@ -98,11 +98,12 @@ static const gchar *credit_text[] = { "Mark Glines", "Hans de Goede", "Jussi Judin", - "Teru KAMOGASHIRA", + "Teru Kamogashira", "Chris Kehler", "Mark Loeser", "Alex Maclean", "Michael Hanselmann", + "Juho Heikkinen", "Joseph Jezak", "Henrik Johansson", "Rodrigo Martins de Matos Ventura", diff --git a/src/audacious/dbus-service.h b/src/audacious/dbus-service.h index 249f5b1..0475e1b 100644 --- a/src/audacious/dbus-service.h +++ b/src/audacious/dbus-service.h @@ -221,4 +221,7 @@ gboolean audacious_rc_set_eq_preamp(RemoteObject *obj, gdouble preamp, GError ** gboolean audacious_rc_set_eq_band(RemoteObject *obj, gint band, gdouble value, GError **error); gboolean audacious_rc_equalizer_activate(RemoteObject *obj, gboolean active, GError **error); +/* new in 2.4 */ +gboolean audacious_rc_get_active_playlist_name(RemoteObject *obj, gchar **title, GError **error); + #endif /* AUDACIOUS_DBUS_SERVICE_H */ diff --git a/src/audacious/dbus.c b/src/audacious/dbus.c index c75d7a6..a0b790c 100644 --- a/src/audacious/dbus.c +++ b/src/audacious/dbus.c @@ -59,7 +59,7 @@ struct InfoRequest { gint playlist; /* -1 = active, -2 = playing */ gint entry; /* -1 = current */ - gchar *filename, *title; + gchar *filename, *title, *pltitle; gint length; }; @@ -386,7 +386,7 @@ static void get_position(struct PositionRequest *request) static gboolean get_info_cb(void *data) { struct InfoRequest *request = data; - const gchar *filename, *title; + const gchar *filename, *title, *pltitle; g_mutex_lock(info_mutex); @@ -396,6 +396,8 @@ static gboolean get_info_cb(void *data) title = playlist_entry_get_title(request->playlist, request->entry); request->title = (title == NULL) ? NULL : g_strdup(title); request->length = playlist_entry_get_length(request->playlist, request->entry); + pltitle = playlist_get_title(request->playlist); + request->pltitle = (pltitle == NULL) ? NULL : g_strdup(pltitle); g_cond_signal(info_cond); g_mutex_unlock(info_mutex); @@ -737,7 +739,7 @@ gboolean mpris_player_get_status(MprisPlayer * obj, GValueArray * *status, GErro gboolean mpris_player_get_metadata(MprisPlayer * obj, GHashTable * *metadata, GError * *error) { - struct MprisMetadataRequest request = {.playlist = -2,.entry = -1 }; + struct MprisMetadataRequest request = {.playlist = -1,.entry = -1 }; get_mpris_metadata(&request); *metadata = request.metadata; @@ -1125,6 +1127,7 @@ gboolean audacious_rc_song_title(RemoteObject * obj, guint pos, gchar * *title, get_info(&request); g_free(request.filename); + g_free(request.pltitle); *title = request.title; return TRUE; } @@ -1136,6 +1139,7 @@ gboolean audacious_rc_song_filename(RemoteObject * obj, guint pos, gchar * *file get_info(&request); *filename = request.filename; g_free(request.title); + g_free(request.pltitle); return TRUE; } @@ -1153,6 +1157,7 @@ gboolean audacious_rc_song_frames(RemoteObject * obj, guint pos, gint * length, get_info(&request); g_free(request.filename); g_free(request.title); + g_free(request.pltitle); *length = request.length; return TRUE; } @@ -1466,6 +1471,16 @@ gboolean audacious_rc_equalizer_activate(RemoteObject * obj, gboolean active, GE return TRUE; } +gboolean audacious_rc_get_active_playlist_name(RemoteObject * obj, gchar * *title, GError * *error) +{ + struct InfoRequest request = {.playlist = -2 }; + + get_info(&request); + g_free(request.title); + g_free(request.filename); + *title = request.pltitle; + return TRUE; +} DBusGProxy *audacious_get_dbus_proxy(void) { diff --git a/src/audacious/input.c b/src/audacious/input.c index c5a6025..df1c9e2 100644 --- a/src/audacious/input.c +++ b/src/audacious/input.c @@ -34,27 +34,6 @@ #include "output.h" #include "plugin-registry.h" -PlaybackData ip_data = -{ - NULL, - FALSE, - FALSE, - FALSE, - NULL -}; - -InputPlayback * -get_current_input_playback(void) -{ - return ip_data.current_input_playback; -} - -void -set_current_input_playback(InputPlayback * ip) -{ - ip_data.current_input_playback = ip; -} - static gboolean plugin_list_func (void * plugin, void * data) { GList * * list = data; @@ -76,9 +55,8 @@ GList * get_input_list (void) void input_get_volume(gint * l, gint * r) { - if (ip_data.playing && ip_data.current_input_playback && - ip_data.current_input_playback->plugin->get_volume && - ip_data.current_input_playback->plugin->get_volume (l, r)) + if (current_playback && current_playback->plugin->get_volume && + current_playback->plugin->get_volume (l, r)) return; output_get_volume (l, r); @@ -87,15 +65,12 @@ input_get_volume(gint * l, gint * r) void input_set_volume(gint l, gint r) { - gint h_vol[2]; + gint h_vol[2] = {l, r}; - h_vol[0] = l; - h_vol[1] = r; hook_call("volume set", h_vol); - if (ip_data.playing && ip_data.current_input_playback && - ip_data.current_input_playback->plugin->set_volume && - ip_data.current_input_playback->plugin->set_volume (l, r)) + if (current_playback && current_playback->plugin->set_volume && + current_playback->plugin->set_volume (l, r)) return; output_set_volume (l, r); diff --git a/src/audacious/input.h b/src/audacious/input.h index 2ca35f5..f973961 100644 --- a/src/audacious/input.h +++ b/src/audacious/input.h @@ -28,16 +28,6 @@ #include "plugin.h" -typedef struct -{ - InputPlayback *current_input_playback; - gboolean playing; - gboolean paused; - gboolean stop; - GMutex *playback_mutex; -} -PlaybackData; - struct _VisNode { gint time; gint nch; @@ -48,13 +38,10 @@ struct _VisNode { typedef struct _VisNode VisNode; GList *get_input_list(void); -InputPlayback *get_current_input_playback(void); -void set_current_input_playback(InputPlayback * ip); -void set_current_input_data(void * data); void input_get_volume(gint * l, gint * r); void input_set_volume(gint l, gint r); -extern PlaybackData ip_data; +extern InputPlayback * current_playback; #endif /* AUDACIOUS_INPUT_H */ diff --git a/src/audacious/objects.xml b/src/audacious/objects.xml index 988c397..527171e 100644 --- a/src/audacious/objects.xml +++ b/src/audacious/objects.xml @@ -523,5 +523,8 @@ <arg type="b" name="active"/> </method> + <method name="GetActivePlaylistName"> + <arg type="s" direction="out" name="plname" /> + </method> </interface> </node> diff --git a/src/audacious/playback.c b/src/audacious/playback.c index e19a38a..d09ad15 100644 --- a/src/audacious/playback.c +++ b/src/audacious/playback.c @@ -55,9 +55,13 @@ static void set_gain_from_playlist (InputPlayback * playback); static gboolean playback_segmented_end(gpointer data); +static void playback_free (InputPlayback * playback); static gboolean playback_play_file (gint playlist, gint entry); -static gboolean pause_when_ready; +InputPlayback * current_playback = NULL; + +static gboolean paused; +static gboolean stopping; static gint seek_when_ready; static gint ready_source; static gint failed_entries; @@ -110,18 +114,19 @@ static void read_gain_from_tuple (Tuple * tuple) } } -static gboolean ready_cb (void * data) +static gboolean ready_cb (void * unused) { - InputPlayback * playback = data; - - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - g_mutex_lock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); ready_source = 0; - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (pause_when_ready) + if (paused) + { + paused = ! paused; /* playback_pause toggles it */ playback_pause (); + } if (seek_when_ready > 0) playback_seek (seek_when_ready); @@ -130,15 +135,15 @@ static gboolean ready_cb (void * data) return FALSE; } -static gboolean playback_is_ready (InputPlayback * playback) +static gboolean playback_is_ready (void) { gboolean ready; - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - g_mutex_lock (playback->pb_ready_mutex); - ready = (playback->pb_ready_val && ! ready_source); - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); + ready = (current_playback->pb_ready_val && ! ready_source); + g_mutex_unlock (current_playback->pb_ready_mutex); return ready; } @@ -147,7 +152,7 @@ playback_set_pb_ready(InputPlayback *playback) { g_mutex_lock(playback->pb_ready_mutex); playback->pb_ready_val = 1; - ready_source = g_timeout_add (0, ready_cb, playback); + ready_source = g_timeout_add (0, ready_cb, NULL); g_cond_signal(playback->pb_ready_cond); g_mutex_unlock(playback->pb_ready_mutex); return 0; @@ -163,15 +168,13 @@ playback_set_pb_change(InputPlayback *playback) static void update_cb (void * hook_data, void * user_data) { - InputPlayback * playback; - gint playlist, entry; + gint playlist, entry, length; const gchar * title; - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + g_return_if_fail (current_playback != NULL); if (GPOINTER_TO_INT (hook_data) < PLAYLIST_UPDATE_METADATA || - ! playback_is_ready (playback)) + ! playback_is_ready ()) return; playlist = playlist_get_playing (); @@ -180,32 +183,35 @@ static void update_cb (void * hook_data, void * user_data) if ((title = playlist_entry_get_title (playlist, entry)) == NULL) title = playlist_entry_get_filename (playlist, entry); - g_free (playback->title); - playback->title = g_strdup (title); - playback->length = playlist_entry_get_length (playlist, entry); + length = playlist_entry_get_length (playlist, entry); + if (! strcmp (title, current_playback->title) && length == + current_playback->length) + return; + + g_free (current_playback->title); + current_playback->title = g_strdup (title); + current_playback->length = length; hook_call ("title change", NULL); } static gint playback_get_time_real(void) { - InputPlayback * playback; gint time = -1; - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - if (! playback_is_ready (playback)) + if (! playback_is_ready ()) return seek_when_ready; - if (! playback->playing || playback->eof || playback->error) + if (! current_playback->playing || current_playback->error) return 0; - if (playback->plugin->get_time != NULL) - time = playback->plugin->get_time (playback); + if (current_playback->plugin->get_time != NULL) + time = current_playback->plugin->get_time (current_playback); - if (time == -1) + if (time < 0) time = get_output_time (); return time; @@ -213,13 +219,10 @@ playback_get_time_real(void) gint playback_get_time (void) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - if (playback->start > 0) - return playback_get_time_real () - playback->start; + if (current_playback->start > 0) + return playback_get_time_real () - current_playback->start; else return playback_get_time_real (); } @@ -260,28 +263,20 @@ void playback_initiate (void) void playback_pause (void) { - InputPlayback * playback; - gboolean paused; + g_return_if_fail (current_playback != NULL); - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + paused = ! paused; - if (playback_is_ready (playback)) + if (playback_is_ready ()) { - paused = ! ip_data.paused; - - if (playback->end_timeout) - g_source_remove(playback->end_timeout); - - g_return_if_fail (playback->plugin->pause != NULL); - playback->plugin->pause (playback, paused); + if (current_playback->end_timeout) + { + g_source_remove(current_playback->end_timeout); + current_playback->end_timeout = 0; + } - ip_data.paused = paused; - } - else - { - paused = ! pause_when_ready; - pause_when_ready = paused; + g_return_if_fail (current_playback->plugin->pause != NULL); + current_playback->plugin->pause (current_playback, paused); } if (paused) @@ -290,20 +285,21 @@ void playback_pause (void) { hook_call("playback unpause", NULL); - if (playback->end > 0) - playback->end_timeout = g_timeout_add (playback->end - - playback_get_time_real (), playback_segmented_end, playback); + if (current_playback->end > 0) + current_playback->end_timeout = g_timeout_add (current_playback->end + - playback_get_time_real (), playback_segmented_end, NULL); } } -static void playback_finalize (InputPlayback * playback) +static void playback_finalize (void) { hook_dissociate ("playlist update", update_cb); - g_mutex_lock (playback->pb_ready_mutex); + g_mutex_lock (current_playback->pb_ready_mutex); - while (! playback->pb_ready_val) - g_cond_wait (playback->pb_ready_cond, playback->pb_ready_mutex); + while (! current_playback->pb_ready_val) + g_cond_wait (current_playback->pb_ready_cond, + current_playback->pb_ready_mutex); if (ready_source) { @@ -311,36 +307,45 @@ static void playback_finalize (InputPlayback * playback) ready_source = 0; } - g_mutex_unlock (playback->pb_ready_mutex); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (playback->playing) - playback->plugin->stop (playback); + if (current_playback->playing) + current_playback->plugin->stop (current_playback); /* some plugins do this themselves */ - if (playback->thread != NULL) - g_thread_join (playback->thread); + if (current_playback->thread != NULL) + g_thread_join (current_playback->thread); - playback_free (playback); - ip_data.current_input_playback = NULL; cancel_set_tuple (); - if (playback->end_timeout) - g_source_remove(playback->end_timeout); + if (current_playback->end_timeout) + g_source_remove (current_playback->end_timeout); + + playback_free (current_playback); + current_playback = NULL; } -void playback_stop (void) +static void complete_stop (void) { - g_return_if_fail (ip_data.current_input_playback != NULL); + output_drain (); + hook_call ("playback stop", NULL); - ip_data.stop = TRUE; + if (cfg.stopaftersong) + { + cfg.stopaftersong = FALSE; + hook_call ("toggle stop after song", NULL); + } +} - playback_finalize (ip_data.current_input_playback); +void playback_stop (void) +{ + g_return_if_fail (current_playback != NULL); - ip_data.playing = FALSE; - ip_data.stop = FALSE; + stopping = TRUE; + playback_finalize (); + stopping = FALSE; - output_drain (); - hook_call ("playback stop", NULL); + complete_stop (); } static gboolean playback_ended (void * user_data) @@ -348,14 +353,14 @@ static gboolean playback_ended (void * user_data) gint playlist = playlist_get_playing (); gboolean play; - g_return_val_if_fail (ip_data.current_input_playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - if (ip_data.current_input_playback->error) + if (current_playback->error) failed_entries ++; else failed_entries = 0; - playback_finalize (ip_data.current_input_playback); + playback_finalize (); while (1) { @@ -375,8 +380,7 @@ static gboolean playback_ended (void * user_data) if (! play) { - output_drain (); - hook_call ("playback stop", NULL); + complete_stop (); break; } @@ -389,8 +393,7 @@ static gboolean playback_ended (void * user_data) return FALSE; } -static gboolean -playback_segmented_end(gpointer data) +static gboolean playback_segmented_end (void * unused) { if (playlist_next_song (playlist_get_playing (), cfg.repeat)) playback_initiate (); @@ -398,18 +401,20 @@ playback_segmented_end(gpointer data) return FALSE; } -static gboolean -playback_segmented_start(gpointer data) +static gboolean playback_segmented_start (void * unused) { - InputPlayback *playback = (InputPlayback *) data; + g_return_val_if_fail (current_playback != NULL, FALSE); - if (playback->plugin->mseek != NULL) - playback->plugin->mseek (playback, playback->start); - else if (playback->plugin->seek != NULL) - playback->plugin->seek (playback, playback->start / 1000); + if (current_playback->plugin->mseek != NULL) + current_playback->plugin->mseek (current_playback, + current_playback->start); + else if (current_playback->plugin->seek != NULL) + current_playback->plugin->seek (current_playback, + current_playback->start / 1000); - if (playback->end > 0) - playback->end_timeout = g_timeout_add(playback->end - playback->start, playback_segmented_end, playback); + if (current_playback->end > 0) + current_playback->end_timeout = g_timeout_add (current_playback->end - + current_playback->start, playback_segmented_end, current_playback); return FALSE; } @@ -417,16 +422,13 @@ playback_segmented_start(gpointer data) static gpointer playback_monitor_thread(gpointer data) { - InputPlayback *playback = (InputPlayback *) data; + if (current_playback->segmented) + g_idle_add (playback_segmented_start, current_playback); - if (playback->segmented) - g_idle_add(playback_segmented_start, playback); + current_playback->plugin->play_file (current_playback); - plugin_set_current((Plugin *)(playback->plugin)); - playback->plugin->play_file(playback); - - g_mutex_lock (playback->pb_ready_mutex); - playback->pb_ready_val = TRUE; + g_mutex_lock (current_playback->pb_ready_mutex); + current_playback->pb_ready_val = TRUE; if (ready_source != 0) { @@ -434,10 +436,10 @@ playback_monitor_thread(gpointer data) ready_source = 0; } - g_cond_signal (playback->pb_ready_cond); - g_mutex_unlock (playback->pb_ready_mutex); + g_cond_signal (current_playback->pb_ready_cond); + g_mutex_unlock (current_playback->pb_ready_mutex); - if (! ip_data.stop) + if (! stopping) g_timeout_add (0, playback_ended, NULL); return NULL; @@ -470,8 +472,7 @@ static void playback_pass_audio (InputPlayback * playback, AFormat format, gint playback->output->write_audio (data, size); } -InputPlayback * -playback_new(void) +static InputPlayback * playback_new (void) { InputPlayback *playback = (InputPlayback *) g_slice_new0(InputPlayback); @@ -505,7 +506,7 @@ playback_new(void) * other sources for allocated playback data (like filename and title) * and this tries to deallocate all that data. */ -void playback_free(InputPlayback *playback) +static void playback_free (InputPlayback * playback) { g_free(playback->filename); g_free(playback->title); @@ -519,18 +520,19 @@ void playback_free(InputPlayback *playback) g_slice_free(InputPlayback, playback); } -void -playback_run(InputPlayback *playback) +static void playback_run (void) { - playback->playing = 0; - playback->eof = 0; - playback->error = 0; + current_playback->playing = FALSE; + current_playback->eof = FALSE; + current_playback->error = FALSE; - pause_when_ready = FALSE; + paused = FALSE; + stopping = FALSE; seek_when_ready = 0; ready_source = 0; - playback->thread = g_thread_create(playback_monitor_thread, playback, TRUE, NULL); + current_playback->thread = g_thread_create (playback_monitor_thread, + current_playback, TRUE, NULL); } static gboolean playback_play_file (gint playlist, gint entry) @@ -539,7 +541,8 @@ static gboolean playback_play_file (gint playlist, gint entry) const gchar * title = playlist_entry_get_title (playlist, entry); InputPlugin * decoder = playlist_entry_get_decoder (playlist, entry); Tuple * tuple = (Tuple *) playlist_entry_get_tuple (playlist, entry); - InputPlayback *playback; + + g_return_val_if_fail (current_playback == NULL, FALSE); if (decoder == NULL) decoder = file_find_decoder (filename, FALSE); @@ -563,85 +566,70 @@ static gboolean playback_play_file (gint playlist, gint entry) read_gain_from_tuple (tuple); /* even if tuple == NULL */ - ip_data.playing = TRUE; - ip_data.paused = FALSE; - ip_data.stop = FALSE; - - playback = playback_new(); - - playback->plugin = decoder; - playback->filename = g_strdup (filename); - playback->title = g_strdup ((title != NULL) ? title : filename); - playback->length = playlist_entry_get_length (playlist, entry); - playback->segmented = playlist_entry_is_segmented (playlist, entry); - playback->start = playlist_entry_get_start_time (playlist, entry); - playback->end = playlist_entry_get_end_time (playlist, entry); + current_playback = playback_new (); + current_playback->plugin = decoder; + current_playback->filename = g_strdup (filename); + current_playback->title = g_strdup ((title != NULL) ? title : filename); + current_playback->length = playlist_entry_get_length (playlist, entry); + current_playback->segmented = playlist_entry_is_segmented (playlist, entry); + current_playback->start = playlist_entry_get_start_time (playlist, entry); + current_playback->end = playlist_entry_get_end_time (playlist, entry); - set_current_input_playback(playback); - - playback_run(playback); + playback_run (); #ifdef USE_DBUS mpris_emit_track_change(mpris); #endif hook_associate ("playlist update", update_cb, NULL); - hook_call ("playback begin", playback); + hook_call ("playback begin", NULL); return TRUE; } gboolean playback_get_playing (void) { - return (ip_data.current_input_playback != NULL); + return (current_playback != NULL); } gboolean playback_get_paused (void) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, FALSE); + g_return_val_if_fail (current_playback != NULL, FALSE); - if (playback_is_ready (playback)) - return ip_data.paused; - else - return pause_when_ready; + return paused; } void playback_seek (gint time) { - InputPlayback * playback; + g_return_if_fail (current_playback != NULL); - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); - - if (playback->length <= 0) + if (current_playback->length <= 0) return; - time = CLAMP (time, 0, playback->length); + time = CLAMP (time, 0, current_playback->length); - if (playback_is_ready (playback)) + if (playback_is_ready ()) { - if (playback->start > 0) - time += playback->start; + if (current_playback->start > 0) + time += current_playback->start; - if (playback->plugin->mseek != NULL) - playback->plugin->mseek (playback, time); - else if (playback->plugin->seek != NULL) - playback->plugin->seek (playback, time / 1000); + if (current_playback->plugin->mseek != NULL) + current_playback->plugin->mseek (current_playback, time); + else if (current_playback->plugin->seek != NULL) + current_playback->plugin->seek (current_playback, time / 1000); - if (playback->end > 0) + if (current_playback->end > 0) { - if (playback->end_timeout) - g_source_remove(playback->end_timeout); + if (current_playback->end_timeout) + g_source_remove (current_playback->end_timeout); - playback->end_timeout = g_timeout_add(playback->end - time, playback_segmented_end, playback); + current_playback->end_timeout = g_timeout_add (current_playback->end + - time, playback_segmented_end, NULL); } } else seek_when_ready = time; - hook_call ("playback seek", playback); + hook_call ("playback seek", NULL); } static void set_params (InputPlayback * playback, const gchar * title, gint @@ -658,21 +646,31 @@ static gboolean set_tuple_cb (void * unused) { gint playlist = playlist_get_playing (); + g_return_val_if_fail (current_playback != NULL, FALSE); + g_mutex_lock (current_playback->pb_ready_mutex); + playlist_entry_set_tuple (playlist, playlist_get_position (playlist), tuple_to_be_set); set_tuple_source = 0; tuple_to_be_set = NULL; + + g_mutex_unlock (current_playback->pb_ready_mutex); + return FALSE; } static void set_tuple (InputPlayback * playback, Tuple * tuple) { + g_mutex_lock (playback->pb_ready_mutex); + /* playlist_entry_set_tuple must execute in main thread */ cancel_set_tuple (); set_tuple_source = g_timeout_add (0, set_tuple_cb, NULL); tuple_to_be_set = tuple; read_gain_from_tuple (tuple); + + g_mutex_unlock (playback->pb_ready_mutex); } static void set_gain_from_playlist (InputPlayback * playback) @@ -682,24 +680,23 @@ static void set_gain_from_playlist (InputPlayback * playback) gchar * playback_get_title (void) { - InputPlayback * playback; gchar * suffix, * title; - playback = ip_data.current_input_playback; - g_return_val_if_fail (playback != NULL, NULL); + g_return_val_if_fail (current_playback != NULL, NULL); - if (! playback_is_ready (playback)) + if (! playback_is_ready ()) return g_strdup (_("Buffering ...")); - suffix = (playback->length > 0) ? g_strdup_printf (" (%d:%02d)", - playback->length / 60000, playback->length / 1000 % 60) : NULL; + suffix = (current_playback->length > 0) ? g_strdup_printf (" (%d:%02d)", + current_playback->length / 60000, current_playback->length / 1000 % 60) : + NULL; if (cfg.show_numbers_in_pl) title = g_strdup_printf ("%d. %s%s", 1 + playlist_get_position - (playlist_get_playing ()), playback->title, (suffix != NULL) ? suffix : - ""); + (playlist_get_playing ()), current_playback->title, (suffix != NULL) ? + suffix : ""); else - title = g_strdup_printf ("%s%s", playback->title, (suffix != + title = g_strdup_printf ("%s%s", current_playback->title, (suffix != NULL) ? suffix : ""); g_free (suffix); @@ -708,19 +705,16 @@ gchar * playback_get_title (void) gint playback_get_length (void) { - g_return_val_if_fail (ip_data.current_input_playback != NULL, 0); + g_return_val_if_fail (current_playback != NULL, 0); - return ip_data.current_input_playback->length; + return current_playback->length; } void playback_get_info (gint * bitrate, gint * samplerate, gint * channels) { - InputPlayback * playback; - - playback = ip_data.current_input_playback; - g_return_if_fail (playback != NULL); + g_return_if_fail (current_playback != NULL); - * bitrate = playback->rate; - * samplerate = playback->freq; - * channels = playback->nch; + * bitrate = current_playback->rate; + * samplerate = current_playback->freq; + * channels = current_playback->nch; } diff --git a/src/audacious/playback.h b/src/audacious/playback.h index a745ac4..9093240 100644 --- a/src/audacious/playback.h +++ b/src/audacious/playback.h @@ -37,14 +37,6 @@ void playback_stop(void); gboolean playback_get_playing(void); gboolean playback_get_paused(void); void playback_seek(gint time); -InputPlayback *playback_new(void); -void playback_free(InputPlayback *); -void playback_run(InputPlayback *); - -/* deprecated */ -void ip_set_info (const gchar * title, gint length, gint bitrate, gint - samplerate, gint channels); -void ip_set_info_text (const gchar * title); gchar * playback_get_title (void); gint playback_get_length (void); diff --git a/src/audacious/playlist-new.c b/src/audacious/playlist-new.c index 635039f..a377705 100644 --- a/src/audacious/playlist-new.c +++ b/src/audacious/playlist-new.c @@ -33,6 +33,8 @@ #include "plugin.h" #include "probe.h" +#define SCAN_DEBUG(...) + #define STATE_FILE "playlist-state" #define DECLARE_PLAYLIST \ @@ -139,6 +141,7 @@ static GCond * scan_cond; static const gchar * scan_filename; static InputPlugin * scan_decoder; static Tuple * scan_tuple; +static gboolean scan_quit; static GThread * scan_thread; static gint scan_position, updated_ago; @@ -366,6 +369,7 @@ void scan_receive (void) { struct entry * entry = index_get (active_playlist->entries, scan_position); + SCAN_DEBUG ("scan_receive\n"); entry_set_tuple (active_playlist, entry, scan_tuple); if (scan_tuple == NULL) @@ -380,7 +384,9 @@ static gboolean scan_next (void * unused) { gint entries; + SCAN_DEBUG ("scan_next: locking...\n"); g_mutex_lock (scan_mutex); + SCAN_DEBUG (" ...ok\n"); if (scan_filename != NULL) { @@ -403,6 +409,7 @@ static gboolean scan_next (void * unused) if (! entry->failed) { + SCAN_DEBUG (" ...waking scanner\n"); scan_filename = entry->filename; scan_decoder = entry->decoder; g_cond_signal (scan_cond); @@ -412,10 +419,12 @@ static gboolean scan_next (void * unused) if (updated_ago >= 10 || (scan_position == entries && updated_ago > 0)) { + SCAN_DEBUG (" ...queueing update\n"); queue_update (PLAYLIST_UPDATE_METADATA); updated_ago = 0; } + SCAN_DEBUG (" ...unlocking\n"); scan_source = 0; g_mutex_unlock (scan_mutex); return FALSE; @@ -423,11 +432,13 @@ static gboolean scan_next (void * unused) static void scan_continue (void) { + SCAN_DEBUG ("scan_continue\n"); scan_source = g_idle_add_full (G_PRIORITY_LOW, scan_next, NULL, NULL); } static void scan_reset (void) { + SCAN_DEBUG ("scan_reset\n"); scan_position = 0; updated_ago = 0; scan_continue (); @@ -435,7 +446,9 @@ static void scan_reset (void) static void scan_stop (void) { + SCAN_DEBUG ("scan_stop: locking...\n"); g_mutex_lock (scan_mutex); + SCAN_DEBUG (" ...ok\n"); if (scan_source != 0) { @@ -446,6 +459,7 @@ static void scan_stop (void) if (scan_filename != NULL) scan_receive (); + SCAN_DEBUG (" ...unlocking\n"); g_mutex_unlock (scan_mutex); } @@ -454,11 +468,22 @@ static void * scanner (void * unused) { for (;;) { + SCAN_DEBUG ("scanner: waiting...\n"); g_cond_wait (scan_cond, scan_mutex); - if (scan_filename == NULL) + if (scan_quit) + { + SCAN_DEBUG (" ...exiting\n"); return NULL; + } + + if (scan_filename == NULL) + { + SCAN_DEBUG (" ...nothing to scan\n"); + continue; + } + SCAN_DEBUG (" ...scanning\n"); scan_tuple = file_read_tuple (scan_filename, scan_decoder); scan_continue (); } @@ -508,6 +533,7 @@ void playlist_init (void) scan_tuple = NULL; scan_source = 0; g_mutex_lock (scan_mutex); + scan_quit = FALSE; scan_thread = g_thread_create (scanner, NULL, TRUE, NULL); scan_reset (); } @@ -518,7 +544,7 @@ void playlist_end(void) scan_stop (); g_mutex_lock (scan_mutex); - scan_filename = NULL; /* tell scanner to quit */ + scan_quit = TRUE; g_cond_signal (scan_cond); g_mutex_unlock (scan_mutex); g_thread_join (scan_thread); @@ -627,12 +653,12 @@ void playlist_set_filename(gint playlist_num, const gchar * filename) DECLARE_PLAYLIST; LOOKUP_PLAYLIST; - METADATA_WILL_CHANGE; + PLAYLIST_WILL_CHANGE; g_free(playlist->filename); playlist->filename = g_strdup(filename); - METADATA_HAS_CHANGED; + PLAYLIST_HAS_CHANGED; } const gchar *playlist_get_filename(gint playlist_num) @@ -649,12 +675,12 @@ void playlist_set_title(gint playlist_num, const gchar * title) DECLARE_PLAYLIST; LOOKUP_PLAYLIST; - METADATA_WILL_CHANGE; + PLAYLIST_WILL_CHANGE; g_free(playlist->title); playlist->title = g_strdup(title); - METADATA_HAS_CHANGED; + PLAYLIST_HAS_CHANGED; } const gchar *playlist_get_title(gint playlist_num) diff --git a/src/audacious/plugin.h b/src/audacious/plugin.h index 01bc054..b65755e 100644 --- a/src/audacious/plugin.h +++ b/src/audacious/plugin.h @@ -172,7 +172,7 @@ struct _AudaciousFuncTableV1 { /* VFS */ #ifdef __GNUC__ -#define WARN_RETURN __attribute__ ((warn_unused_result)) +#define WARN_RETURN /* __attribute__ ((warn_unused_result)) */ #else #define WARN_RETURN #endif diff --git a/src/audacious/pluginenum.c b/src/audacious/pluginenum.c index 9790648..37b0d2c 100644 --- a/src/audacious/pluginenum.c +++ b/src/audacious/pluginenum.c @@ -258,7 +258,7 @@ static struct _AudaciousFuncTableV1 _aud_papi_v1 = { .drct_initiate = drct_initiate, .drct_play = drct_play, .drct_pause = drct_pause, - .drct_stop = drct_stop, + .drct_stop = playback_stop, .drct_get_playing = drct_get_playing, .drct_get_paused = drct_get_paused, .drct_get_stopped = drct_get_stopped, @@ -838,12 +838,8 @@ void plugin_system_cleanup(void) if (ep->cleanup) ep->cleanup(); - - g_free (ep->filename); - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); + g_free (ep->filename); } } @@ -864,10 +860,6 @@ void plugin_system_cleanup(void) gp->cleanup(); g_free (gp->filename); - - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); } } @@ -888,10 +880,6 @@ void plugin_system_cleanup(void) vp->cleanup(); g_free (vp->filename); - - GDK_THREADS_LEAVE(); - while (g_main_context_iteration(NULL, FALSE)); - GDK_THREADS_ENTER(); } } diff --git a/src/audacious/probe.c b/src/audacious/probe.c index 17c4b13..bc48f3f 100644 --- a/src/audacious/probe.c +++ b/src/audacious/probe.c @@ -21,6 +21,7 @@ #include <libaudcore/audstrings.h> #include <libaudcore/vfs.h> +#include <libaudcore/vfs_buffered_file.h> #include <stdio.h> #include <string.h> @@ -36,6 +37,8 @@ typedef struct } ProbeState; +// #define XXX_USE_BUFFERING + static gboolean check_opened (ProbeState * state) { if (state->handle != NULL) @@ -43,8 +46,13 @@ static gboolean check_opened (ProbeState * state) AUDDBG ("Opening %s.\n", state->filename); +#ifndef XXX_USE_BUFFERING if ((state->handle = vfs_fopen (state->filename, "r")) != NULL) return TRUE; +#else + if ((state->handle = vfs_buffered_file_new_from_uri(state->filename)) != NULL) + return TRUE; +#endif AUDDBG ("FAILED.\n"); return FALSE; diff --git a/src/audacious/ui/carbon-menubar.ui b/src/audacious/ui/carbon-menubar.ui deleted file mode 100644 index 2d1e11b..0000000 --- a/src/audacious/ui/carbon-menubar.ui +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="carbon-menubar"> - <menu action="dummy" name="main-menu"> - <menu action="file"> - <menuitem action="play file" /> - <menuitem action="play location" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save default" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="view"> - <menuitem action="show player" /> - <menuitem action="show playlist editor" /> - <menuitem action="show equalizer" /> - <separator /> - <menuitem action="view time elapsed" /> - <menuitem action="view time remaining" /> - <separator /> - <menuitem action="view always on top" /> - <menuitem action="view put on all workspaces" /> - <menuitem action="autoscroll songname" /> - <separator /> - <menuitem action="roll up player" /> - <menuitem action="roll up playlist editor" /> - <menuitem action="roll up equalizer" /> - <separator /> - <menuitem action="view scaled" /> - <menuitem action="view easy move" /> - </menu> - <menu action="visualization"> - <menu action="vismode"> - <menuitem action="vismode analyzer" /> - <menuitem action="vismode scope" /> - <menuitem action="vismode voiceprint" /> - <menuitem action="vismode off" /> - </menu> - <menu action="anamode"> - <menuitem action="anamode normal" /> - <menuitem action="anamode fire" /> - <menuitem action="anamode vertical lines" /> - <separator /> - <menuitem action="anatype lines" /> - <menuitem action="anatype bars" /> - <separator /> - <menuitem action="anamode peaks" /> - </menu> - <menu action="scomode"> - <menuitem action="scomode dot" /> - <menuitem action="scomode line" /> - <menuitem action="scomode solid" /> - </menu> - <menu action="vprmode"> - <menuitem action="vprmode normal" /> - <menuitem action="vprmode fire" /> - <menuitem action="vprmode ice" /> - </menu> - <menu action="wshmode"> - <menuitem action="wshmode normal" /> - <menuitem action="wshmode smooth" /> - </menu> - <menu action="anafoff"> - <menuitem action="anafoff slowest" /> - <menuitem action="anafoff slow" /> - <menuitem action="anafoff medium" /> - <menuitem action="anafoff fast" /> - <menuitem action="anafoff fastest" /> - </menu> - <menu action="peafoff"> - <menuitem action="peafoff slowest" /> - <menuitem action="peafoff slow" /> - <menuitem action="peafoff medium" /> - <menuitem action="peafoff fast" /> - <menuitem action="peafoff fastest" /> - </menu> - </menu> - <menu action="help"> - <menuitem action="about audacious" /> - </menu> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/equalizer.ui b/src/audacious/ui/equalizer.ui deleted file mode 100644 index 3d70c1b..0000000 --- a/src/audacious/ui/equalizer.ui +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="equalizer-menus"> - <menu action="dummy" name="preset-menu"> - <menu action="equ preset load menu"> - <menuitem action="equ load preset" /> - <menuitem action="equ load auto preset" /> - <menuitem action="equ load default preset" /> - <separator /> - <menuitem action="equ zero preset" /> - <separator /> - <menuitem action="equ load preset file" /> - <menuitem action="equ load preset eqf" /> - </menu> - - <menu action="equ preset import menu"> - <menuitem action="equ import winamp presets" /> - </menu> - - <menu action="equ preset save menu"> - <menuitem action="equ save preset" /> - <menuitem action="equ save auto preset" /> - <menuitem action="equ save default preset" /> - <separator /> - <menuitem action="equ save preset file" /> - <menuitem action="equ save preset eqf" /> - </menu> - - <menu action="equ preset delete menu"> - <menuitem action="equ delete preset" /> - <menuitem action="equ delete auto preset" /> - </menu> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/mainwin.ui b/src/audacious/ui/mainwin.ui deleted file mode 100644 index 2d078ad..0000000 --- a/src/audacious/ui/mainwin.ui +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="mainwin-menus"> - <menu action="dummy" name="songname-menu"> - <menuitem action="current track info" /> - <separator /> - <menuitem action="autoscroll songname" /> - <menuitem action="stop after current song" /> - </menu> - - <menu action="dummy" name="main-menu"> - <menuitem action="about audacious" /> - <separator /> - <menuitem action="play file" /> - <menuitem action="play location" /> - <separator /> - <menu action="visualization"> - <menu action="vismode"> - <menuitem action="vismode analyzer" /> - <menuitem action="vismode scope" /> - <menuitem action="vismode voiceprint" /> - <menuitem action="vismode off" /> - </menu> - <menu action="anamode"> - <menuitem action="anamode normal" /> - <menuitem action="anamode fire" /> - <menuitem action="anamode vertical lines" /> - <separator /> - <menuitem action="anatype lines" /> - <menuitem action="anatype bars" /> - <separator /> - <menuitem action="anamode peaks" /> - </menu> - <menu action="scomode"> - <menuitem action="scomode dot" /> - <menuitem action="scomode line" /> - <menuitem action="scomode solid" /> - </menu> - <menu action="vprmode"> - <menuitem action="vprmode normal" /> - <menuitem action="vprmode fire" /> - <menuitem action="vprmode ice" /> - </menu> - <menu action="wshmode"> - <menuitem action="wshmode normal" /> - <menuitem action="wshmode smooth" /> - </menu> - <menu action="anafoff"> - <menuitem action="anafoff slowest" /> - <menuitem action="anafoff slow" /> - <menuitem action="anafoff medium" /> - <menuitem action="anafoff fast" /> - <menuitem action="anafoff fastest" /> - </menu> - <menu action="peafoff"> - <menuitem action="peafoff slowest" /> - <menuitem action="peafoff slow" /> - <menuitem action="peafoff medium" /> - <menuitem action="peafoff fast" /> - <menuitem action="peafoff fastest" /> - </menu> - </menu> - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="view"> - <menuitem action="show player" /> - <menuitem action="show playlist editor" /> - <menuitem action="show equalizer" /> - <separator /> - <menuitem action="view time elapsed" /> - <menuitem action="view time remaining" /> - <separator /> - <menuitem action="view always on top" /> - <menuitem action="view put on all workspaces" /> - <menuitem action="autoscroll songname" /> - <separator /> - <menuitem action="roll up player" /> - <menuitem action="roll up playlist editor" /> - <menuitem action="roll up equalizer" /> - <separator /> - <menuitem action="view scaled" /> - <menuitem action="view easy move" /> - </menu> - <separator /> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/player.ui b/src/audacious/ui/player.ui deleted file mode 100644 index de6800f..0000000 --- a/src/audacious/ui/player.ui +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="mainwin-menus"> - <menu action="file"> - <menuitem action="play file" /> - <menuitem action="play location" /> - <menuitem action="playlist add files" /> - <menuitem action="playlist add url" /> - <separator /> - <menuitem action="preferences" /> - <menuitem action="quit" /> - </menu> - - <menu action="playback"> - <menuitem action="playback repeat" /> - <menuitem action="playback shuffle" /> - <menuitem action="playback no playlist advance" /> - <menuitem action="stop after current song" /> - <separator /> - <menuitem action="playback play" /> - <menuitem action="playback pause" /> - <menuitem action="playback stop" /> - <menuitem action="playback previous" /> - <menuitem action="playback next" /> - <separator /> - <menuitem action="jump to playlist start" /> - <separator /> - <menuitem action="ab set" /> - <menuitem action="ab clear" /> - <separator /> - <menuitem action="jump to file" /> - <menuitem action="jump to time" /> - <separator /> - <menuitem action="current track info" /> - </menu> - <menu action="playlist"> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - <separator /> -<!-- <menuitem action="playlist delete" /> --> - </menu> - <menu action="plugins-menu" /> - - <menu action="help"> - <menuitem action="about audacious" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui/playlist.ui b/src/audacious/ui/playlist.ui deleted file mode 100644 index 93b87b9..0000000 --- a/src/audacious/ui/playlist.ui +++ /dev/null @@ -1,96 +0,0 @@ -<?xml version="1.0" standalone="yes" encoding="utf-8" ?> - -<ui> - <menubar name="playlist-menus"> - <menu action="dummy" name="playlist-rightclick-menu"> - <menuitem action="playlist track info" /> - <separator /> - <menuitem action="playlist remove selected" /> - <menuitem action="playlist remove unselected" /> - <menuitem action="playlist remove all" /> - <separator /> - <menuitem action="queue toggle" /> - <separator /> - <menuitem action="plugins-menu" /> - </menu> - - <menu action="dummy" name="add-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist add url" /> - <menuitem action="playlist add files" /> - </menu> - - <menu action="dummy" name="del-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist remove all" /> - <menuitem action="playlist clear queue" /> - <separator /> - <menuitem action="playlist remove unavailable" /> - <menu action="playlist remove dups menu"> - <menuitem action="playlist remove dups by title" /> - <menuitem action="playlist remove dups by filename" /> - <menuitem action="playlist remove dups by full path" /> - </menu> - <separator /> - <menuitem action="playlist remove unselected" /> - <menuitem action="playlist remove selected" /> - </menu> - - <menu action="dummy" name="select-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist search and select" /> - <separator /> - <menuitem action="playlist invert selection" /> - <separator /> - <menuitem action="playlist select none" /> - <menuitem action="playlist select all" /> - </menu> - - <menu action="dummy" name="misc-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist randomize list" /> - <menuitem action="playlist reverse list" /> - <separator /> - <menu action="playlist sort menu"> - <menuitem action="playlist sort by title" /> - <menuitem action="playlist sort by album" /> - <menuitem action="playlist sort by artist" /> - <menuitem action="playlist sort by filename" /> - <menuitem action="playlist sort by full path" /> - <menuitem action="playlist sort by date" /> - <menuitem action="playlist sort by track number" /> - </menu> - <menu action="playlist sort selected menu"> - <menuitem action="playlist sort selected by title" /> - <menuitem action="playlist sort selected by album" /> - <menuitem action="playlist sort selected by artist" /> - <menuitem action="playlist sort selected by filename" /> - <menuitem action="playlist sort selected by full path" /> - <menuitem action="playlist sort selected by date" /> - <menuitem action="playlist sort selected by track number" /> - </menu> - </menu> - - <menu action="dummy" name="playlist-menu"> - <menuitem action="plugins-menu" /> - <separator /> - <menuitem action="playlist new" /> - <menuitem action="playlist delete" /> - <separator /> - <menuitem action="playlist select next" /> - <menuitem action="playlist select previous" /> - <separator /> - <menuitem action="playlist load" /> - <menuitem action="playlist save" /> - <menuitem action="playlist save all" /> - <separator /> - <menuitem action="playlist manager" /> - <separator /> - <menuitem action="playlist refresh" /> - </menu> - </menubar> -</ui> diff --git a/src/audacious/ui_albumart.c b/src/audacious/ui_albumart.c index 940ceed..8bb6c75 100644 --- a/src/audacious/ui_albumart.c +++ b/src/audacious/ui_albumart.c @@ -29,6 +29,7 @@ #include <string.h> #include "audconfig.h" +#include <libaudcore/audstrings.h> static gboolean has_front_cover_extension(const gchar *name) @@ -123,6 +124,9 @@ static gchar * fileinfo_recursive_get_image (const gchar * path, const gchar * if (cfg.recurse_for_cover && depth > cfg.recurse_for_cover_depth) return NULL; + if (str_has_prefix_nocase(path, "file://")) + path += 7; + d = g_dir_open(path, 0, NULL); if (d) { diff --git a/src/audacious/vis_runner.c b/src/audacious/vis_runner.c index 57cb592..3a4403d 100644 --- a/src/audacious/vis_runner.c +++ b/src/audacious/vis_runner.c @@ -111,6 +111,8 @@ static void flush_locked (void) } vis_tail = NULL; + + clear_source = g_timeout_add (0, send_clear, NULL); } void vis_runner_init (void) @@ -147,14 +149,9 @@ void vis_runner_start_stop (gboolean new_playing, gboolean new_paused) } if (! active) - { flush_locked (); - clear_source = g_timeout_add (0, send_clear, NULL); - } else if (! paused) - { send_source = g_timeout_add (INTERVAL, send_audio, NULL); - } g_mutex_unlock (mutex); } @@ -236,7 +233,6 @@ void vis_runner_time_offset (gint offset) void vis_runner_flush (void) { - g_mutex_lock (mutex); flush_locked (); g_mutex_unlock (mutex); diff --git a/src/audtool/audtool.h b/src/audtool/audtool.h index c5653fb..f21808b 100644 --- a/src/audtool/audtool.h +++ b/src/audtool/audtool.h @@ -95,6 +95,7 @@ extern void playlist_tuple_field_data(gint, gchar **argv); extern void playlist_show(gint, gchar **); extern void playlist_enqueue_to_temp(gint argc, gchar **argv); extern void playlist_ins_url_string(gint argc, gchar **argv); +extern void playlist_title(gint, gchar **); extern void playqueue_add(gint, gchar **); extern void playqueue_remove(gint, gchar **); diff --git a/src/audtool/handlers_playlist.c b/src/audtool/handlers_playlist.c index 04cfd6b..c30d3e0 100644 --- a/src/audtool/handlers_playlist.c +++ b/src/audtool/handlers_playlist.c @@ -139,6 +139,13 @@ void playlist_song(gint argc, gchar **argv) audtool_report("%s", song); } +void playlist_title(gint argc, gchar **argv) +{ + gchar *title; + + title = audacious_remote_playlist_get_active_name(dbus_proxy); + audtool_report("%s", title); +} void playlist_song_length(gint argc, gchar **argv) { diff --git a/src/audtool/main.c b/src/audtool/main.c index 7e7d83b..1666d41 100644 --- a/src/audtool/main.c +++ b/src/audtool/main.c @@ -78,7 +78,7 @@ struct commandhandler handlers[] = { {"playlist-shuffle-status", playlist_shuffle_status, "returns the status of playlist shuffle", 0}, {"playlist-shuffle-toggle", playlist_shuffle_toggle, "toggles playlist shuffle", 0}, {"playlist-tuple-data", playlist_tuple_field_data, "returns the value of a tuple field for a song in the playlist", 2}, - + {"current-playlist-name", playlist_title, "returns the playlist title of the active playlist", 0}, {"<sep>", NULL, "Playqueue manipulation", 0}, {"playqueue-add", playqueue_add, "adds a song to the playqueue", 1}, diff --git a/src/libaudclient/audctrl.c b/src/libaudclient/audctrl.c index 8fd66c5..1e3ca07 100644 --- a/src/libaudclient/audctrl.c +++ b/src/libaudclient/audctrl.c @@ -1024,3 +1024,14 @@ gchar **audacious_remote_get_tuple_fields(DBusGProxy *proxy) { g_clear_error(&error); return res; } + +/** + * Returns the active playlist name. + */ +gchar *audacious_remote_playlist_get_active_name(DBusGProxy *proxy) { + char *string = NULL; + org_atheme_audacious_get_active_playlist_name (proxy, &string, &error); + g_clear_error(&error); + + return (string ? string : NULL); +} diff --git a/src/libaudclient/audctrl.h b/src/libaudclient/audctrl.h index e2a26fb..6942976 100644 --- a/src/libaudclient/audctrl.h +++ b/src/libaudclient/audctrl.h @@ -133,6 +133,9 @@ void audacious_remote_playlist_open_list (DBusGProxy * proxy, GList * list); void audacious_remote_playlist_open_list_to_temp (DBusGProxy * proxy, GList * list); +/* Added in Audacious 2.4 */ +gchar *audacious_remote_playlist_get_active_name(DBusGProxy *proxy); + G_END_DECLS #endif /* AUDACIOUS_AUDCTRL_H */ diff --git a/src/libaudcore/audstrings.h b/src/libaudcore/audstrings.h index 5baf067..0f3144b 100644 --- a/src/libaudcore/audstrings.h +++ b/src/libaudcore/audstrings.h @@ -44,6 +44,8 @@ gboolean str_has_suffixes_nocase(const gchar * str, gchar * const *suffixes); gchar *str_assert_utf8(const gchar *str); extern gchar *(*str_to_utf8)(const gchar * str); gchar *str_to_utf8_fallback(const gchar * str); +extern gchar * (* chardet_to_utf8) (const gchar * string, gssize length, gsize * + bytes_read, gsize * bytes_written, GError * * error); gchar *filename_to_utf8(const gchar * filename); gchar *uri_to_display_basename(const gchar * uri); diff --git a/src/libaudcore/tuple.c b/src/libaudcore/tuple.c index ef360be..4962b0c 100644 --- a/src/libaudcore/tuple.c +++ b/src/libaudcore/tuple.c @@ -273,6 +273,8 @@ tuple_copy(const Tuple *src) mowgli_dictionary_iteration_state_t state; gint i; + g_return_val_if_fail(src != NULL, NULL); + TUPLE_LOCK_WRITE(); dst = tuple_new_unlocked(); @@ -547,8 +549,8 @@ tuple_disassociate(Tuple *tuple, const gint cnfield, const gchar *field) * @param[in] field String acting as key name or NULL if nfield is used. * @return #TupleValueType of the field or TUPLE_UNKNOWN if there was an error. */ -TupleValueType -tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field) +TupleValueType tuple_get_value_type (const Tuple * tuple, gint cnfield, + const gchar * field) { TupleValueType type = TUPLE_UNKNOWN; gint nfield = cnfield; @@ -584,8 +586,8 @@ tuple_get_value_type(Tuple *tuple, const gint cnfield, const gchar *field) * @return Pointer to string or NULL if the field/key did not exist. * The returned string is const, and must not be freed or modified. */ -const gchar * -tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field) +const gchar * tuple_get_string (const Tuple * tuple, gint cnfield, const gchar * + field) { TupleValue *value; gint nfield = cnfield; @@ -626,8 +628,7 @@ tuple_get_string(Tuple *tuple, const gint cnfield, const gchar *field) * * @bug There is no way to distinguish error situations if the associated value is zero. */ -gint -tuple_get_int(Tuple *tuple, const gint cnfield, const gchar *field) +gint tuple_get_int (const Tuple * tuple, gint cnfield, const gchar * field) { TupleValue *value; gint nfield = cnfield; diff --git a/src/libaudcore/tuple.h b/src/libaudcore/tuple.h index 4823cb2..3ef8ca4 100644 --- a/src/libaudcore/tuple.h +++ b/src/libaudcore/tuple.h @@ -133,9 +133,11 @@ gboolean tuple_associate_string(Tuple *tuple, const gint nfield, const gchar *fi gboolean tuple_associate_int(Tuple *tuple, const gint nfield, const gchar *field, gint integer); void tuple_disassociate(Tuple *tuple, const gint nfield, const gchar *field); void tuple_disassociate_now(TupleValue *value); -TupleValueType tuple_get_value_type(Tuple *tuple, const gint nfield, const gchar *field); -const gchar *tuple_get_string(Tuple *tuple, const gint nfield, const gchar *field); -gint tuple_get_int(Tuple *tuple, const gint nfield, const gchar *field); +TupleValueType tuple_get_value_type (const Tuple * tuple, gint nfield, + const gchar * field); +const gchar * tuple_get_string (const Tuple * tuple, gint nfield, const gchar * + field); +gint tuple_get_int (const Tuple * tuple, gint nfield, const gchar * field); #define tuple_free(x) mowgli_object_unref(x); G_END_DECLS diff --git a/src/libaudcore/vfs.h b/src/libaudcore/vfs.h index fc97884..3aab16c 100644 --- a/src/libaudcore/vfs.h +++ b/src/libaudcore/vfs.h @@ -95,7 +95,7 @@ struct _VFSConstructor { }; #ifdef __GNUC__ -#define WARN_RETURN __attribute__ ((warn_unused_result)) +#define WARN_RETURN /* __attribute__ ((warn_unused_result)) */ #else #define WARN_RETURN #endif diff --git a/src/libaudcore/vfs_buffer.c b/src/libaudcore/vfs_buffer.c index ef2ad8f..a977fc7 100644 --- a/src/libaudcore/vfs_buffer.c +++ b/src/libaudcore/vfs_buffer.c @@ -108,7 +108,7 @@ buffer_vfs_ungetc_impl(gint c, VFSFile *stream) static gint buffer_vfs_fseek_impl(VFSFile * file, - glong offset, + gint64 offset, gint whence) { VFSBuffer *handle; @@ -148,7 +148,7 @@ buffer_vfs_rewind_impl(VFSFile * file) handle->iter = handle->data; } -static glong +static gint64 buffer_vfs_ftell_impl(VFSFile * file) { VFSBuffer *handle; @@ -175,12 +175,12 @@ buffer_vfs_feof_impl(VFSFile * file) } static gint -buffer_vfs_truncate_impl(VFSFile * file, glong size) +buffer_vfs_truncate_impl (VFSFile * file, gint64 size) { return 0; } -static off_t +static gint64 buffer_vfs_fsize_impl(VFSFile * file) { VFSBuffer *handle; diff --git a/src/libaudcore/vfs_buffered_file.c b/src/libaudcore/vfs_buffered_file.c index f34a0e9..963754f 100644 --- a/src/libaudcore/vfs_buffered_file.c +++ b/src/libaudcore/vfs_buffered_file.c @@ -103,7 +103,7 @@ buffered_file_vfs_ungetc_impl(gint c, VFSFile *stream) gint buffered_file_vfs_fseek_impl(VFSFile * file, - glong offset, + gint64 offset, gint whence) { VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; @@ -117,11 +117,19 @@ buffered_file_vfs_fseek_impl(VFSFile * file, vfs_fseek(handle->fd, offset, whence); break; case SEEK_CUR: - if (vfs_ftell(handle->buffer) + offset > ((VFSBuffer *) handle->buffer->handle)->size) + if (vfs_ftell(handle->buffer) + offset >= ((VFSBuffer *) handle->buffer->handle)->size) { handle->which = TRUE; vfs_fseek(handle->fd, offset, whence); } + else + { + gint64 noff; + + handle->which = FALSE; + noff = ((VFSBuffer *) handle->buffer->handle)->size - (vfs_ftell(handle->buffer) + offset); + vfs_fseek(handle->buffer, noff, whence); + } break; case SEEK_SET: default: @@ -146,10 +154,11 @@ buffered_file_vfs_rewind_impl(VFSFile * file) VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; vfs_rewind(handle->buffer); + vfs_rewind(handle->fd); handle->which = FALSE; } -glong +gint64 buffered_file_vfs_ftell_impl(VFSFile * file) { VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; @@ -166,12 +175,12 @@ buffered_file_vfs_feof_impl(VFSFile * file) } gint -buffered_file_vfs_truncate_impl(VFSFile * file, glong size) +buffered_file_vfs_truncate_impl (VFSFile * file, gint64 size) { return 0; } -off_t +gint64 buffered_file_vfs_fsize_impl(VFSFile * file) { VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; diff --git a/src/libaudgui/Makefile b/src/libaudgui/Makefile index 9c88651..afa654a 100644 --- a/src/libaudgui/Makefile +++ b/src/libaudgui/Makefile @@ -4,6 +4,7 @@ LIB_MINOR = 0 SRCS = confirm.c \ effects-menu.c \ + equalizer.c \ infopopup.c \ infowin.c \ init.c \ @@ -17,6 +18,7 @@ SRCS = confirm.c \ ui_about.c \ ui_credits.c \ ui_playlist_manager.c \ + urilist.c \ util.c INCLUDES = libaudgui.h \ @@ -30,4 +32,4 @@ includesubdir = libaudgui CPPFLAGS += -DHAVE_CONFIG_H ${LIB_CPPFLAGS} -D_AUDACIOUS_CORE -I.. -I../.. -I../libaudcore -I../audacious ${GLIB_CFLASG} ${GTK_CFLAGS} ${DBUS_CFLAGS} ${LIBMCS_CFLAGS} ${AUDACIOUS_DEFINES} ${REGEX_CFLAGS} CFLAGS += ${LIB_CFLAGS} LDFLAGS += $(AUDLDFLAGS) -LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} ${GTK_LIBS} ${REGEX_LIBS} -L../libaudcore -laudcore +LIBS += -lm ${GLIB_LIBS} ${MOWGLI_LIBS} ${GTK_LIBS} ${REGEX_LIBS} -L../libaudcore -laudcore diff --git a/src/libaudgui/effects-menu.c b/src/libaudgui/effects-menu.c index 86ac6c2..3582c65 100644 --- a/src/libaudgui/effects-menu.c +++ b/src/libaudgui/effects-menu.c @@ -26,15 +26,6 @@ #include "libaudgui-gtk.h" -static GtkWidget * create_title (void) -{ - GtkWidget * title = gtk_menu_item_new_with_label (_("Effects")); - - gtk_widget_set_sensitive (title, FALSE); - gtk_widget_show (title); - return title; -} - static void effect_item_toggled (GtkCheckMenuItem * item, void * data) { aud_enable_effect (data, gtk_check_menu_item_get_active (item)); @@ -71,9 +62,6 @@ GtkWidget * audgui_create_effects_menu (void) GList * list = aud_get_effect_list (); GList * node; - gtk_menu_shell_append ((GtkMenuShell *) menu, create_title ()); - gtk_menu_shell_append ((GtkMenuShell *) menu, gtk_separator_menu_item_new ()); - for (node = list; node != NULL; node = node->next) { EffectPlugin * effect = node->data; diff --git a/src/libaudgui/equalizer.c b/src/libaudgui/equalizer.c new file mode 100644 index 0000000..c3b1f56 --- /dev/null +++ b/src/libaudgui/equalizer.c @@ -0,0 +1,189 @@ +/* + * libaudgui/equalizer.c + * Copyright 2010 John Lindgren + * + * This file is part of Audacious. + * + * Audacious 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, version 2 or version 3 of the License. + * + * Audacious 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 + * Audacious. If not, see <http://www.gnu.org/licenses/>. + * + * The Audacious team does not consider modular code linking to Audacious or + * using our public API to be a derived work. + */ + +/* + * Note: Because some GTK developer had the bright idea to put the minimum at + * the top of a GtkVScale and the maximum at the bottom, we have to reverse the + * sign of the values we get. + */ + +#include <math.h> + +#include <audacious/i18n.h> +#include <audacious/plugin.h> + +#include "libaudgui-gtk.h" + +#define DB_RANGE 12 + +typedef struct +{ + GtkWidget * slider; + gfloat * setting; +} +SliderPair; + +static void on_off_cb (GtkToggleButton * on_off, void * unused) +{ + gboolean active = gtk_toggle_button_get_active (on_off); + + if (aud_cfg->equalizer_active != active) + { + aud_cfg->equalizer_active = active; + aud_hook_call ("equalizer changed", NULL); + } +} + +static void on_off_update (void * unused, GtkWidget * on_off) +{ + gboolean active = gtk_toggle_button_get_active ((GtkToggleButton *) on_off); + + if (active != aud_cfg->equalizer_active) + gtk_toggle_button_set_active ((GtkToggleButton *) on_off, + aud_cfg->equalizer_active); +} + +static GtkWidget * create_on_off (void) +{ + GtkWidget * on_off; + + on_off = gtk_check_button_new_with_mnemonic (_("_Enable")); + g_signal_connect ((GObject *) on_off, "toggled", (GCallback) on_off_cb, NULL); + aud_hook_associate ("equalizer changed", (HookFunction) on_off_update, on_off); + + on_off_update (NULL, on_off); + return on_off; +} + +static void slider_cb (GtkRange * slider, gfloat * setting) +{ + gint old = rintf (* setting); + gint new = rint (-gtk_range_get_value (slider)); + + if (old != new) + { + * setting = new; + aud_hook_call ("equalizer changed", NULL); + } +} + +static void slider_update (void * unused, SliderPair * pair) +{ + gint old = rint (-gtk_range_get_value ((GtkRange *) pair->slider)); + gint new = rintf (* pair->setting); + + if (old != new) + gtk_range_set_value ((GtkRange *) pair->slider, -new); +} + +static void set_slider_update (GtkWidget * slider, gfloat * setting) +{ + SliderPair * pair = g_slice_new (SliderPair); + + pair->slider = slider; + pair->setting = setting; + + aud_hook_associate ("equalizer changed", (HookFunction) slider_update, pair); + slider_update (NULL, pair); +} + +static gchar * format_value (GtkScale * slider, gdouble value, void * unused) +{ + return g_strdup_printf ("%d", (gint) -value); +} + +static GtkWidget * create_slider (const gchar * name, gfloat * setting) +{ + GtkWidget * vbox, * slider, * label; + + vbox = gtk_vbox_new (FALSE, 6); + + label = gtk_label_new (name); + gtk_label_set_angle ((GtkLabel *) label, 90); + gtk_box_pack_start ((GtkBox *) vbox, label, TRUE, FALSE, 0); + + slider = gtk_vscale_new_with_range (-DB_RANGE, DB_RANGE, 1); + gtk_scale_set_draw_value ((GtkScale *) slider, TRUE); + gtk_scale_set_value_pos ((GtkScale *) slider, GTK_POS_BOTTOM); + gtk_widget_set_size_request (slider, -1, 120); + g_signal_connect ((GObject *) slider, "format-value", (GCallback) + format_value, NULL); + g_signal_connect ((GObject *) slider, "value-changed", (GCallback) + slider_cb, setting); + set_slider_update (slider, setting); + gtk_box_pack_start ((GtkBox *) vbox, slider, FALSE, FALSE, 0); + + return vbox; +} + +static GtkWidget * create_window (void) +{ + static const gchar * names[AUD_EQUALIZER_NBANDS] = {N_("60 Hz"), + N_("170 Hz"), N_("310 Hz"), N_("600 Hz"), N_("1 kHz"), N_("3 kHz"), + N_("6 kHz"), N_("12 kHz"), N_("14 kHz"), N_("16 kHz")}; + GtkWidget * window, * vbox, * hbox; + gint i; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title ((GtkWindow *) window, _("Equalizer")); + gtk_window_set_type_hint ((GtkWindow *) window, GDK_WINDOW_TYPE_HINT_DIALOG); + gtk_window_set_resizable ((GtkWindow *) window, FALSE); + gtk_container_set_border_width ((GtkContainer *) window, 6); + g_signal_connect ((GObject *) window, "delete-event", (GCallback) + gtk_widget_hide_on_delete, NULL); + audgui_hide_on_escape (window); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_container_add ((GtkContainer *) window, vbox); + + gtk_box_pack_start ((GtkBox *) vbox, create_on_off (), FALSE, FALSE, 0); + + hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start ((GtkBox *) vbox, hbox, FALSE, FALSE, 0); + + gtk_box_pack_start ((GtkBox *) hbox, create_slider (_("Preamp"), + & aud_cfg->equalizer_preamp), FALSE, FALSE, 0); + + gtk_box_pack_start ((GtkBox *) hbox, gtk_vseparator_new (), FALSE, FALSE, 0); + + for (i = 0; i < AUD_EQUALIZER_NBANDS; i ++) + gtk_box_pack_start ((GtkBox *) hbox, create_slider (_(names[i]), + & aud_cfg->equalizer_bands[i]), FALSE, FALSE, 0); + + gtk_widget_show_all (vbox); + return window; +} + +static GtkWidget * equalizer_window = NULL; + +void audgui_show_equalizer_window (void) +{ + if (equalizer_window == NULL) + equalizer_window = create_window (); + + gtk_window_present ((GtkWindow *) equalizer_window); +} + +void audgui_hide_equalizer_window (void) +{ + if (equalizer_window != NULL) + gtk_widget_hide (equalizer_window); +} diff --git a/src/libaudgui/infowin.c b/src/libaudgui/infowin.c index ef58480..4dcaf74 100644 --- a/src/libaudgui/infowin.c +++ b/src/libaudgui/infowin.c @@ -114,8 +114,6 @@ static const gchar * genre_table[] = N_("Anime"), N_("JPop"), N_("Synthpop") }; -static GList * genre_list = NULL; - static void set_entry_str_from_field (GtkWidget * widget, Tuple * tuple, gint fieldn, gboolean editable) { @@ -353,6 +351,24 @@ static GdkPixbuf * mime_icon_lookup (gint size, const gchar * mime_type) return icon; } +gboolean genre_fill (GtkWidget * combo) +{ + GList * list = NULL; + GList * node; + gint i; + + for (i = 0; i < G_N_ELEMENTS (genre_table); i ++) + list = g_list_prepend (list, _(genre_table[i])); + + list = g_list_sort (list, (GCompareFunc) strcmp); + + for (node = list; node != NULL; node = node->next) + gtk_combo_box_append_text ((GtkComboBox *) combo, node->data); + + g_list_free (list); + return FALSE; +} + void create_infowin (void) { GtkWidget * hbox; @@ -383,7 +399,6 @@ void create_infowin (void) GtkWidget * scrolledwindow; GtkTreeViewColumn * column; GtkCellRenderer * renderer; - gint i; infowin = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width ((GtkContainer *) infowin, 6); @@ -533,21 +548,9 @@ void create_infowin (void) gtk_alignment_set_padding ((GtkAlignment *) alignment, 0, 6, 0, 0); entry_genre = gtk_combo_box_entry_new_text (); - if (genre_list == NULL) - { - GList * iter; - - for (i = 0; i < G_N_ELEMENTS (genre_table); i ++) - genre_list = g_list_prepend (genre_list, _(genre_table[i])); - - genre_list = g_list_sort (genre_list, (GCompareFunc) g_utf8_collate); - - for (iter = genre_list; iter != NULL; iter = iter->next) - gtk_combo_box_append_text ((GtkComboBox *) entry_genre, iter->data); - } - gtk_container_add ((GtkContainer *) alignment, entry_genre); g_signal_connect (entry_genre, "changed", (GCallback) entry_changed, NULL); + g_idle_add ((GSourceFunc) genre_fill, entry_genre); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_box_pack_start ((GtkBox *) vbox2, alignment, FALSE, FALSE, 0); @@ -861,7 +864,7 @@ void audgui_infowin_show (gint playlist, gint entry) { const gchar * filename = aud_playlist_entry_get_filename (playlist, entry); InputPlugin * decoder = aud_playlist_entry_get_decoder (playlist, entry); - Tuple * tuple; + Tuple * tuple = (Tuple *) aud_playlist_entry_get_tuple (playlist, entry); g_return_if_fail (filename != NULL); @@ -876,23 +879,25 @@ void audgui_infowin_show (gint playlist, gint entry) if (aud_custom_infowin (filename, decoder)) return; - tuple = aud_file_read_tuple (filename, decoder); - if (tuple == NULL) { - gchar * message = g_strdup_printf (_("No info available for %s.\n"), - filename); + tuple = aud_file_read_tuple (filename, decoder); - aud_hook_call ("interface show error", message); - g_free (message); - return; + if (tuple == NULL) + { + gchar * message = g_strdup_printf (_("No info available for %s.\n"), + filename); + + aud_hook_call ("interface show error", message); + g_free (message); + return; + } + + aud_playlist_entry_set_tuple (playlist, entry, tuple); } infowin_show (filename, tuple, decoder, aud_file_can_write_tuple (filename, decoder)); - - aud_playlist_entry_set_tuple (playlist, entry, tuple); - /* We do not unref the tuple, as the playlist takes ownership. */ } void audgui_infowin_show_current (void) diff --git a/src/libaudgui/libaudgui.h b/src/libaudgui/libaudgui.h index 828fafd..6611a87 100644 --- a/src/libaudgui/libaudgui.h +++ b/src/libaudgui/libaudgui.h @@ -46,6 +46,10 @@ void audgui_hide_about_window(void); /* confirm.c */ void audgui_confirm_playlist_delete (gint playlist); +/* equalizer.c */ +void audgui_show_equalizer_window (void); +void audgui_hide_equalizer_window (void); + /* infopopup.c */ void audgui_infopopup_show (gint playlist, gint entry); void audgui_infopopup_show_current (void); @@ -55,4 +59,9 @@ void audgui_infopopup_hide (void); void audgui_infowin_show (gint playlist, gint entry); void audgui_infowin_show_current (void); +/* urilist.c */ +void audgui_urilist_open (const gchar * list); +void audgui_urilist_insert (gint playlist, gint position, const gchar * list); +gchar * audgui_urilist_create_from_selected (gint playlist); + #endif /* LIBAUDGUI_H */ diff --git a/src/libaudgui/ui_gtk.c b/src/libaudgui/ui_gtk.c index 6142eba..fa8d4e8 100644 --- a/src/libaudgui/ui_gtk.c +++ b/src/libaudgui/ui_gtk.c @@ -18,15 +18,9 @@ */ #include <gtk/gtk.h> -#include "audacious/images/audacious_player.xpm" -void -audgui_set_default_icon(void) +void audgui_set_default_icon (void) { - GdkPixbuf *icon; - - icon = gdk_pixbuf_new_from_xpm_data((const gchar **) audacious_player_xpm); - gtk_window_set_default_icon(icon); - g_object_unref(icon); + gtk_window_set_default_icon_name ("audacious"); } diff --git a/src/libaudgui/urilist.c b/src/libaudgui/urilist.c new file mode 100644 index 0000000..a8197ed --- /dev/null +++ b/src/libaudgui/urilist.c @@ -0,0 +1,149 @@ +/* + * libaudgui/urilist.c + * Copyright 2010 John Lindgren + * + * This file is part of Audacious. + * + * Audacious 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, version 2 or version 3 of the License. + * + * Audacious 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 + * Audacious. If not, see <http://www.gnu.org/licenses/>. + * + * The Audacious team does not consider modular code linking to Audacious or + * using our public API to be a derived work. + */ + +#include <string.h> +#include <glib.h> +#include <audacious/plugin.h> +#include "util.h" + +typedef void (* ForEachFunc) (gchar *, void *); + +typedef struct +{ + gint playlist, at; + struct index * index; +} +AddState; + +static gchar * check_uri (gchar * name) +{ + gchar * new; + + if (strstr (name, "://") || ! (new = g_filename_to_uri (name, NULL, NULL))) + return name; + + g_free (name); + return new; +} + +static void urilist_for_each (const gchar * list, ForEachFunc func, void * user) +{ + const gchar * end, * next; + + while (list[0]) + { + if ((end = strstr (list, "\r\n"))) + next = end + 2; + else if ((end = strchr (list, '\n'))) + next = end + 1; + else + next = end = strchr (list, 0); + + func (check_uri (g_strndup (list, end - list)), user); + list = next; + } +} + +static void add_to_glist (gchar * name, GList * * listp) +{ + * listp = g_list_prepend (* listp, name); +} + +void audgui_urilist_open (const gchar * list) +{ + GList * glist = NULL; + + urilist_for_each (list, (ForEachFunc) add_to_glist, & glist); + glist = g_list_reverse (glist); + + audacious_drct_pl_open_list (glist); + + g_list_foreach (glist, (GFunc) g_free, NULL); + g_list_free (glist); +} + +static void add_full (gchar * name, AddState * state) +{ + if (aud_vfs_file_test (name, G_FILE_TEST_IS_DIR)) + { + aud_playlist_insert_folder (state->playlist, state->at, name); + g_free (name); + } + else if (aud_filename_is_playlist (name)) + { + gint entries = aud_playlist_entry_count (state->playlist); + aud_playlist_insert_playlist (state->playlist, state->at, name); + state->at += aud_playlist_entry_count (state->playlist) - entries; + } + else + index_append (state->index, name); +} + +void audgui_urilist_insert (gint playlist, gint at, const gchar * list) +{ + AddState state = {playlist, at, index_new ()}; + + urilist_for_each (list, (ForEachFunc) add_full, & state); + aud_playlist_entry_insert_batch (playlist, state.at, state.index, NULL); +} + +gchar * audgui_urilist_create_from_selected (gint playlist) +{ + gint entries = aud_playlist_entry_count (playlist); + gint space = 0; + gint count, length; + const gchar * name; + gchar * buffer, * set; + + for (count = 0; count < entries; count ++) + { + if (! aud_playlist_entry_get_selected (playlist, count)) + continue; + + name = aud_playlist_entry_get_filename (playlist, count); + g_return_val_if_fail (name != NULL, NULL); + space += strlen (name) + 1; + } + + if (! space) + return NULL; + + buffer = g_malloc (space); + set = buffer; + + for (count = 0; count < entries; count ++) + { + if (! aud_playlist_entry_get_selected (playlist, count)) + continue; + + name = aud_playlist_entry_get_filename (playlist, count); + g_return_val_if_fail (name != NULL, NULL); + length = strlen (name); + g_return_val_if_fail (length + 1 <= space, NULL); + memcpy (set, name, length); + set += length; + * set ++ = '\n'; + space -= length + 1; + } + + * -- set = 0; /* last newline replaced with null */ + return buffer; +} diff --git a/src/libaudtag/Makefile b/src/libaudtag/Makefile index 127c8c7..a440424 100644 --- a/src/libaudtag/Makefile +++ b/src/libaudtag/Makefile @@ -5,7 +5,9 @@ LIB_MINOR = 0 SRCS = audtag.c \ util.c \ tag_module.c \ + id3/id3-common.c \ id3/id3v1.c \ + id3/id3v22.c \ id3/id3v24.c \ ape/ape.c @@ -16,4 +18,4 @@ include ../../extra.mk CPPFLAGS += ${LIB_CPPFLAGS} ${GLIB_CFLAGS} ${MOWGLI_CFLAGS} -D_AUDACIOUS_CORE -I.. -I../.. CFLAGS += ${LIB_CFLAGS} -LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} +LIBS += ${GLIB_LIBS} ${MOWGLI_LIBS} -L../libaudcore -laudcore diff --git a/src/libaudtag/aac/aac.c b/src/libaudtag/aac/aac.c index 87f63f9..0053cd5 100644 --- a/src/libaudtag/aac/aac.c +++ b/src/libaudtag/aac/aac.c @@ -37,7 +37,7 @@ static const char *ID3v1GenreList[] = { "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret", - "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", + "New Wave", "Psychedelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing", "Fast-Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", diff --git a/src/libaudtag/id3/id3-common.c b/src/libaudtag/id3/id3-common.c new file mode 100644 index 0000000..9a07ba6 --- /dev/null +++ b/src/libaudtag/id3/id3-common.c @@ -0,0 +1,102 @@ +/* + * id3-common.c + * Copyright 2010 John Lindgren + * + * This file is part of Audacious. + * + * Audacious 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, version 2 or version 3 of the License. + * + * Audacious 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 + * Audacious. If not, see <http://www.gnu.org/licenses/>. + * + * The Audacious team does not consider modular code linking to Audacious or + * using our public API to be a derived work. + */ + +#include <string.h> + +#include <glib.h> + +#include <libaudcore/audstrings.h> + +#include "../util.h" +#include "id3-common.h" + +gchar * convert_text (const gchar * text, gint length, gint encoding, gboolean + nulled, gint * _converted, const gchar * * after) +{ + gchar * buffer = NULL; + gsize converted = 0; + + AUDDBG ("length = %d, encoding = %d, nulled = %d\n", length, encoding, + nulled); + + if (nulled) + { + const guchar null16[] = {0, 0}; + const gchar * null; + + switch (encoding) + { + case 0: + case 3: + if ((null = memchr (text, 0, length)) == NULL) + return NULL; + + length = null - text; + AUDDBG ("length before null = %d\n", length); + + if (after != NULL) + * after = null + 1; + + break; + case 1: + case 2: + if ((null = memfind (text, length, null16, 2)) == NULL) + return NULL; + + length = null - text; + AUDDBG ("length before null = %d\n", length); + + if (after != NULL) + * after = null + 2; + + break; + } + } + + switch (encoding) + { + case 0: + case 3: + buffer = chardet_to_utf8 (text, length, NULL, & converted, NULL); + break; + case 1: + if (text[0] == (gchar) 0xff) + buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL, + & converted, NULL); + else + buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL, + & converted, NULL); + + break; + case 2: + buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL, + & converted, NULL); + break; + } + + AUDDBG ("length converted: %d\n", (gint) converted); + AUDDBG ("string: %s\n", buffer); + + if (_converted != NULL) + * _converted = converted; + + return buffer; +} diff --git a/src/libaudtag/id3/id3-common.h b/src/libaudtag/id3/id3-common.h new file mode 100644 index 0000000..b3e53e5 --- /dev/null +++ b/src/libaudtag/id3/id3-common.h @@ -0,0 +1,48 @@ +/* + * id3-common.h + * Copyright 2010 John Lindgren + * + * This file is part of Audacious. + * + * Audacious 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, version 2 or version 3 of the License. + * + * Audacious 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 + * Audacious. If not, see <http://www.gnu.org/licenses/>. + * + * The Audacious team does not consider modular code linking to Audacious or + * using our public API to be a derived work. + */ + +#ifndef AUDTAG_ID3_COMMON_H +#define AUDTAG_ID3_COMMON_H + +#include <glib.h> + +/* + * text: A pointer to the text data to be converted. + * length: The size in bytes of the text data. + * encoding: 0 = ISO-8859-1 or a similar 8-bit character set, 1 = UTF-16 with + * BOM, 2 = UTF-16BE without BOM, 3 = UTF-8. + * nulled: Whether the text data is null-terminated. If this flag is set and no + * null character is found, an error occurs. If this flag is not set, any null + * characters found are included in the converted text. + * converted: A location in which to store the number of bytes converted, or + * NULL. This count does not include the null character appended to the + * converted text, but may include null characters present in the text data. + * This count is undefined if an error occurs. + * after: A location in which to store a pointer to the next character after a + * terminating null character, or NULL. This pointer is undefined if the + * "nulled" flag is not used or if an error occurs. + * returns: A pointer to the converted text with a null character appended, or + * NULL if an error occurs. The text must be freed when no longer needed. + */ +gchar * convert_text (const gchar * text, gint length, gint encoding, gboolean + nulled, gint * _converted, const gchar * * after); + +#endif diff --git a/src/libaudtag/id3/id3v22.c b/src/libaudtag/id3/id3v22.c index 4699bf7..0bc1490 100644 --- a/src/libaudtag/id3/id3v22.c +++ b/src/libaudtag/id3/id3v22.c @@ -2,6 +2,7 @@ * Copyright 2009 Paula Stanciu * Copyright 2010 John Lindgren * Copyright 2010 Tony Vroon + * Copyright 2010 William Pitcock * * This file is part of Audacious. * @@ -24,6 +25,7 @@ #include <libaudcore/audstrings.h> +#include "id3-common.h" #include "id3v22.h" #include "../util.h" @@ -44,11 +46,12 @@ enum ID3_ENCODER, ID3_TXX, ID3_RVA, + ID3_FUCKO_ARTIST, ID3_TAGS_NO }; static const gchar * id3_frames[ID3_TAGS_NO] = {"TAL", "TT2", "TCM", "TCR", -"TDA", "TIM", "TLE", "TPE", "TRK", "TYE", "TCO", "COM", "TSS", "TXX", "RVA"}; +"TDA", "TIM", "TLE", "TPE", "TRK", "TYE", "TCO", "COM", "TSS", "TXX", "RVA", "TP1"}; #pragma pack(push) /* must be byte-aligned */ #pragma pack(1) @@ -65,7 +68,7 @@ ID3v2Header; typedef struct { gchar key[3]; - guint32 size; + gchar size[3]; } ID3v2FrameHeader; #pragma pack(pop) @@ -83,22 +86,19 @@ GenericFrame; #define TAG_SIZE 1 -static mowgli_dictionary_t * frames = NULL; -static mowgli_list_t * frameIDs = NULL; - #define write_syncsafe_int32(x) vfs_fput_be32 (syncsafe32 (x)) -static gboolean validate_header (ID3v2Header * header, gboolean is_footer) +static gboolean validate_header (ID3v2Header * header) { - if (memcmp (header->magic, is_footer ? "3DI" : "ID3", 3)) + if (memcmp (header->magic, "ID3", 3)) return FALSE; - if ((header->version != 2) || header->revision != 0) + if ((header->version != 2)) return FALSE; - header->size = unsyncsafe32 (GUINT32_FROM_BE (header->size)); + header->size = GUINT32_FROM_BE (header->size); - AUDDBG ("Found ID3v2 %s:\n", is_footer ? "footer" : "header"); + AUDDBG ("Found ID3v2 header:\n"); AUDDBG (" magic = %.3s\n", header->magic); AUDDBG (" version = %d\n", (gint) header->version); AUDDBG (" revision = %d\n", (gint) header->revision); @@ -108,10 +108,9 @@ static gboolean validate_header (ID3v2Header * header, gboolean is_footer) } static gboolean read_header (VFSFile * handle, gint * version, gboolean * - syncsafe, gsize * offset, gint * header_size, gint * data_size, gint * - footer_size) + syncsafe, gsize * offset, gint * header_size, gint * data_size) { - ID3v2Header header, footer; + ID3v2Header header; if (vfs_fseek (handle, 0, SEEK_SET)) return FALSE; @@ -120,78 +119,28 @@ static gboolean read_header (VFSFile * handle, gint * version, gboolean * (ID3v2Header)) return FALSE; - if (validate_header (& header, FALSE)) + if (validate_header (& header)) { * offset = 0; * version = header.version; * header_size = sizeof (ID3v2Header); * data_size = header.size; - } - else - { - gsize end = vfs_fsize (handle); - - if (end < 0) - return FALSE; - - if (vfs_fseek (handle, end - sizeof (ID3v2Header), SEEK_SET)) - return FALSE; - - if (vfs_fread (& footer, 1, sizeof (ID3v2Header), handle) != sizeof - (ID3v2Header)) - return FALSE; - - if (! validate_header (& footer, TRUE)) - return FALSE; - - * offset = end - 2 * sizeof (ID3v2Header) - footer.size; - * version = footer.version; - * header_size = sizeof (ID3v2Header); - * data_size = footer.size; - * footer_size = sizeof (ID3v2Header); - - if (vfs_fseek (handle, * offset, SEEK_SET)) - return FALSE; - - if (vfs_fread (& header, 1, sizeof (ID3v2Header), handle) != sizeof - (ID3v2Header)) - return FALSE; - - if (! validate_header (& header, FALSE)) - return FALSE; - } + } else return FALSE; * syncsafe = (header.flags & ID3_HEADER_SYNCSAFE) ? TRUE : FALSE; - AUDDBG ("Offset = %d, header size = %d, data size = %d, footer size = " - "%d.\n", (gint) * offset, * header_size, * data_size, * footer_size); + AUDDBG ("Offset = %d, header size = %d, data size = %d\n", + (gint) * offset, * header_size, * data_size); return TRUE; } -static gint unsyncsafe (guchar * data, gint size) -{ - guchar * get = data, * set = data; - - while (size --) - { - guchar c = * set ++ = * get ++; - - if (c == 0xff && size && ! get[0]) - { - size --; - get ++; - } - } - - return set - data; -} - static gboolean read_frame (VFSFile * handle, gint max_size, gint version, gboolean syncsafe, gint * frame_size, gchar * key, guchar * * data, gint * size) { ID3v2FrameHeader header; gint skip = 0; + guint32 hdrsz; if ((max_size -= sizeof (ID3v2FrameHeader)) < 0) return FALSE; @@ -203,119 +152,32 @@ static gboolean read_frame (VFSFile * handle, gint max_size, gint version, if (! header.key[0]) /* padding */ return FALSE; - header.size = (version == 3) ? GUINT32_FROM_BE (header.size) : unsyncsafe32 - (GUINT32_FROM_BE (header.size)); - header.flags = GUINT16_FROM_BE (header.flags); + hdrsz = (header.size[2] << 24 | header.size[1] << 16 | header.size[0] << 8); + hdrsz = GUINT32_FROM_BE(hdrsz); - if (header.size > max_size) + if (hdrsz > max_size || hdrsz == 0) return FALSE; AUDDBG ("Found frame:\n"); - AUDDBG (" key = %.4s\n", header.key); - AUDDBG (" size = %d\n", (gint) header.size); - AUDDBG (" flags = %x\n", (gint) header.flags); - - * frame_size = sizeof (ID3v2FrameHeader) + header.size; - sprintf (key, "%.4s", header.key); - - if (header.flags & (ID3_FRAME_COMPRESSED | ID3_FRAME_ENCRYPTED)) - { - AUDDBG ("Hit compressed/encrypted frame %s.\n", key); - return FALSE; - } + AUDDBG (" key = %.3s\n", header.key); + AUDDBG (" size = %d\n", (gint) hdrsz); - if (header.flags & ID3_FRAME_HAS_GROUP) - skip ++; - if (header.flags & ID3_FRAME_HAS_LENGTH) - skip += 4; + * frame_size = sizeof (ID3v2FrameHeader) + hdrsz; + sprintf (key, "%.3s", header.key); if (skip > 0 && vfs_fseek (handle, skip, SEEK_CUR)) return FALSE; - * size = header.size - skip; + * size = hdrsz - skip; * data = g_malloc (* size); if (vfs_fread (* data, 1, * size, handle) != * size) return FALSE; - if (syncsafe || (header.flags & ID3_FRAME_SYNCSAFE)) - * size = unsyncsafe (* data, * size); - AUDDBG ("Data size = %d.\n", * size); return TRUE; } -static gchar * convert_text (const gchar * text, gint length, gint encoding, - gboolean nulled, gint * _converted, const gchar * * after) -{ - gchar * buffer = NULL; - gsize converted = 0; - - if (nulled) - { - const guchar null16[] = {0, 0}; - const gchar * null; - - switch (encoding) - { - case 0: - case 3: - if ((null = memchr (text, 0, length)) == NULL) - return NULL; - - length = null - text; - - if (after != NULL) - * after = null + 1; - - break; - case 1: - case 2: - if ((null = memfind (text, length, null16, 2)) == NULL) - return NULL; - - length = null - text; - - if (after != NULL) - * after = null + 2; - - break; - } - } - - switch (encoding) - { - case 0: - buffer = g_convert (text, length, "UTF-8", "ISO-8859-1", NULL, - & converted, NULL); - break; - case 1: - if (text[0] == (gchar) 0xff) - buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL, - & converted, NULL); - else - buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL, - & converted, NULL); - - break; - case 2: - buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL, - & converted, NULL); - break; - case 3: - buffer = g_malloc (length + 1); - memcpy (buffer, text, length); - buffer[length] = 0; - converted = length; - break; - } - - if (_converted != NULL) - * _converted = converted; - - return buffer; -} - static gchar * decode_text_frame (const guchar * data, gint size) { return convert_text ((const gchar *) data + 1, size - 1, data[0], FALSE, @@ -342,96 +204,6 @@ static gboolean decode_comment_frame (const guchar * _data, gint size, gchar * * return TRUE; } -static void free_generic_frame (GenericFrame * frame) -{ - g_free (frame->data); - g_free (frame); -} - -static void read_all_frames (VFSFile * handle, gint version, gboolean syncsafe, - gint data_size) -{ - gint pos; - - for (pos = 0; pos < data_size; ) - { - gint frame_size, size; - gchar key[5]; - guchar * data; - GenericFrame * frame; - - if (! read_frame (handle, data_size - pos, version, syncsafe, - & frame_size, key, & data, & size)) - break; - - frame = g_malloc (sizeof (GenericFrame)); - strcpy (frame->key, key); - frame->data = data; - frame->size = size; - - mowgli_dictionary_add (frames, frame->key, frame); - mowgli_node_add (frame->key, mowgli_node_create (), frameIDs); - - pos += frame_size; - } -} - -static gboolean write_frame (VFSFile * handle, GenericFrame * frame, gint * - frame_size) -{ - ID3v2FrameHeader header; - - memcpy (header.key, frame->key, 4); - header.size = syncsafe32 (frame->size); - header.size = GUINT32_TO_BE (header.size); - header.flags = 0; - - if (vfs_fwrite (& header, 1, sizeof (ID3v2FrameHeader), handle) != sizeof - (ID3v2FrameHeader)) - return FALSE; - - if (vfs_fwrite (frame->data, 1, frame->size, handle) != frame->size) - return FALSE; - - * frame_size = sizeof (ID3v2FrameHeader) + frame->size; - return TRUE; -} - -static guint32 writeAllFramesToFile (VFSFile * fd) -{ - guint32 size = 0; - mowgli_node_t *n, *tn; - MOWGLI_LIST_FOREACH_SAFE(n, tn, frameIDs->head) - { - GenericFrame *frame = (GenericFrame *) mowgli_dictionary_retrieve(frames, (gchar *) (n->data)); - if (frame) - { - gint frame_size; - - if (! write_frame (fd, frame, & frame_size)) - break; - - size += frame_size; - } - } - return size; -} - -static gboolean write_header (VFSFile * handle, gint size, gboolean is_footer) -{ - ID3v2Header header; - - memcpy (header.magic, is_footer ? "3DI" : "ID3", 3); - header.version = 4; - header.revision = 0; - header.flags = ID3_HEADER_HAS_FOOTER; - header.size = syncsafe32 (size); - header.size = GUINT32_TO_BE (header.size); - - return vfs_fwrite (& header, 1, sizeof (ID3v2Header), handle) == sizeof - (ID3v2Header); -} - static gint get_frame_id (const gchar * key) { gint id; @@ -651,78 +423,29 @@ static void decode_genre (Tuple * tuple, const guchar * data, gint size) return; } -static GenericFrame * add_generic_frame (gint id, gint size) -{ - GenericFrame * frame = mowgli_dictionary_retrieve (frames, id3_frames[id]); - - if (frame == NULL) - { - frame = g_malloc (sizeof (GenericFrame)); - strcpy (frame->key, id3_frames[id]); - mowgli_dictionary_add (frames, frame->key, frame); - mowgli_node_add (frame->key, mowgli_node_create (), frameIDs); - } - else - g_free (frame->data); - - frame->data = g_malloc (size); - frame->size = size; - return frame; -} - -static void add_text_frame (gint id, const gchar * text) -{ - gint length = strlen (text); - GenericFrame * frame = add_generic_frame (id, length + 1); - - frame->data[0] = 3; /* UTF-8 encoding */ - memcpy (frame->data + 1, text, length); -} - -static void add_comment_frame (const gchar * text) -{ - gint length = strlen (text); - GenericFrame * frame = add_generic_frame (ID3_COMMENT, length + 5); - - frame->data[0] = 3; /* UTF-8 encoding */ - strcpy ((gchar *) frame->data + 1, "eng"); /* well, it *might* be English */ - memcpy (frame->data + 5, text, length); -} - -static void add_frameFromTupleStr (Tuple * tuple, int field, int id3_field) -{ - add_text_frame (id3_field, tuple_get_string (tuple, field, NULL)); -} - -static void add_frameFromTupleInt (Tuple * tuple, int field, int id3_field) -{ - gchar scratch[16]; - - snprintf (scratch, sizeof scratch, "%d", tuple_get_int (tuple, field, NULL)); - add_text_frame (id3_field, scratch); -} - static gboolean id3v22_can_handle_file (VFSFile * handle) { - gint version, header_size, data_size, footer_size; + gint version, header_size, data_size; gboolean syncsafe; gsize offset; return read_header (handle, & version, & syncsafe, & offset, & header_size, - & data_size, & footer_size); + & data_size); } -static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle) +gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle) { - gint version, header_size, data_size, footer_size; + gint version, header_size, data_size; gboolean syncsafe; gsize offset; gint pos; if (! read_header (handle, & version, & syncsafe, & offset, & header_size, - & data_size, & footer_size)) + & data_size)) return FALSE; + AUDDBG("Reading tags from %i bytes of ID3 data in %s\n", data_size, handle->uri); + for (pos = 0; pos < data_size; ) { gint frame_size, size, id; @@ -731,7 +454,10 @@ static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle) if (! read_frame (handle, data_size - pos, version, syncsafe, & frame_size, key, & data, & size)) + { + AUDDBG("read_frame failed at pos %i\n", pos); break; + } id = get_frame_id (key); @@ -758,6 +484,7 @@ static gboolean id3v22_read_tag (Tuple * tuple, VFSFile * handle) case ID3_LENGTH: associate_int (tuple, FIELD_LENGTH, NULL, data, size); break; + case ID3_FUCKO_ARTIST: case ID3_ARTIST: associate_string (tuple, FIELD_ARTIST, NULL, data, size); break; @@ -820,13 +547,13 @@ static gboolean parse_pic (const guchar * data, gint size, gchar * * mime, static gboolean id3v22_read_image (VFSFile * handle, void * * image_data, gint * image_size) { - gint version, header_size, data_size, footer_size, parsed; + gint version, header_size, data_size, parsed; gboolean syncsafe; gsize offset; gboolean found = FALSE; if (! read_header (handle, & version, & syncsafe, & offset, & header_size, - & data_size, & footer_size)) + & data_size)) return FALSE; for (parsed = 0; parsed < data_size && ! found; ) @@ -864,23 +591,12 @@ static gboolean id3v22_read_image (VFSFile * handle, void * * image_data, gint * return found; } -static void free_frame_cb (mowgli_dictionary_elem_t * element, void * unused) -{ - free_generic_frame (element->data); -} - -static void free_frame_dictionary (void) -{ - mowgli_dictionary_destroy (frames, free_frame_cb, NULL); - frames = NULL; -} - static gboolean id3v22_write_tag (Tuple * tuple, VFSFile * f) { return FALSE; } -tag_module_t id3v24 = +tag_module_t id3v22 = { .name = "ID3v2.2", .can_handle_file = id3v22_can_handle_file, diff --git a/src/libaudtag/id3/id3v24.c b/src/libaudtag/id3/id3v24.c index 499048d..ed93264 100644 --- a/src/libaudtag/id3/id3v24.c +++ b/src/libaudtag/id3/id3v24.c @@ -23,6 +23,7 @@ #include <libaudcore/audstrings.h> +#include "id3-common.h" #include "id3v24.h" #include "../util.h" @@ -344,77 +345,6 @@ static gboolean read_frame (VFSFile * handle, gint max_size, gint version, return TRUE; } -static gchar * convert_text (const gchar * text, gint length, gint encoding, - gboolean nulled, gint * _converted, const gchar * * after) -{ - gchar * buffer = NULL; - gsize converted = 0; - - if (nulled) - { - const guchar null16[] = {0, 0}; - const gchar * null; - - switch (encoding) - { - case 0: - case 3: - if ((null = memchr (text, 0, length)) == NULL) - return NULL; - - length = null - text; - - if (after != NULL) - * after = null + 1; - - break; - case 1: - case 2: - if ((null = memfind (text, length, null16, 2)) == NULL) - return NULL; - - length = null - text; - - if (after != NULL) - * after = null + 2; - - break; - } - } - - switch (encoding) - { - case 0: - buffer = g_convert (text, length, "UTF-8", "ISO-8859-1", NULL, - & converted, NULL); - break; - case 1: - if (text[0] == (gchar) 0xff) - buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16LE", NULL, - & converted, NULL); - else - buffer = g_convert (text + 2, length - 2, "UTF-8", "UTF-16BE", NULL, - & converted, NULL); - - break; - case 2: - buffer = g_convert (text, length, "UTF-8", "UTF-16BE", NULL, - & converted, NULL); - break; - case 3: - buffer = g_malloc (length + 1); - memcpy (buffer, text, length); - buffer[length] = 0; - converted = length; - break; - } - - if (_converted != NULL) - * _converted = converted; - - return buffer; -} - static gchar * decode_text_frame (const guchar * data, gint size) { return convert_text ((const gchar *) data + 1, size - 1, data[0], FALSE, diff --git a/src/libaudtag/tag_module.c b/src/libaudtag/tag_module.c index e8c8b3f..cc860a7 100644 --- a/src/libaudtag/tag_module.c +++ b/src/libaudtag/tag_module.c @@ -27,6 +27,7 @@ #include "tag_module.h" #include "wma/module.h" #include "id3/id3v1.h" +#include "id3/id3v22.h" #include "id3/id3v24.h" #include "ape/ape.h" /* #include "aac/aac.h" */ @@ -34,6 +35,7 @@ void init_tag_modules(void) { mowgli_node_add((void *)&id3v24, &id3v24.node, &tag_modules); + mowgli_node_add((void *)&id3v22, &id3v22.node, &tag_modules); mowgli_node_add((void *)&ape, &ape.node, &tag_modules); mowgli_node_add((void *)&id3v1, &id3v1.node, &tag_modules); } diff --git a/src/libaudtag/util.c b/src/libaudtag/util.c index d1c0bea..0cd4a75 100644 --- a/src/libaudtag/util.c +++ b/src/libaudtag/util.c @@ -389,7 +389,7 @@ gchar *convert_numericgenre_to_text(gint numericgenre) {GENRE_NATIVE_AMERICAN, "Native American"}, {GENRE_CABARET, "Cabaret"}, {GENRE_NEW_WAVE, "New Wave"}, - {GENRE_PSYCHADELIC, "Psychadelic"}, + {GENRE_PSYCHEDELIC, "Psychedelic"}, {GENRE_RAVE, "Rave"}, {GENRE_SHOWTUNES, "Showtunes"}, {GENRE_TRAILER, "Trailer"}, diff --git a/src/libaudtag/util.h b/src/libaudtag/util.h index 0e6a4f3..5a2919b 100644 --- a/src/libaudtag/util.h +++ b/src/libaudtag/util.h @@ -96,7 +96,7 @@ enum { GENRE_NATIVE_AMERICAN, GENRE_CABARET, GENRE_NEW_WAVE, - GENRE_PSYCHADELIC, + GENRE_PSYCHEDELIC, GENRE_RAVE, GENRE_SHOWTUNES, GENRE_TRAILER, diff --git a/src/libeggsmclient/Makefile b/src/libeggsmclient/Makefile index b124d60..fbe40e7 100644 --- a/src/libeggsmclient/Makefile +++ b/src/libeggsmclient/Makefile @@ -18,4 +18,4 @@ include ../../buildsys.mk include ../../extra.mk CPPFLAGS += ${INCLUDES} ${GLIB_CFLAGS} ${GTK_CFLAGS} -I../.. -I. -I../audacious/platform ${platform_defines} -LIBS += ${GLIB_LIBS} ${GTK_LIBS} ${ICE_LIBS} ${platform_libs} +LIBS += ${GLIB_LIBS} ${GTK_LIBS} ${platform_libs} diff --git a/src/libguess/Makefile b/src/libguess/Makefile index e2f6937..98061bb 100644 --- a/src/libguess/Makefile +++ b/src/libguess/Makefile @@ -1,5 +1,6 @@ STATIC_LIB_NOINST = libguess.a SRCS = guess.c \ + dfa.c \ arabic_impl.c \ cjk_impl.c \ greek_impl.c \ diff --git a/src/libguess/arabic_impl.c b/src/libguess/arabic_impl.c index 24b5608..9cb64c6 100644 --- a/src/libguess/arabic_impl.c +++ b/src/libguess/arabic_impl.c @@ -1,28 +1,55 @@ #include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" -static const char *_guess_ar(const unsigned char *ptr, int size) +/* precedence order */ +#define ORDER &utf8, &iso8859_6, &cp1256 + +const char *guess_ar(const char *buf, int buflen) { int i; + const char *rv = NULL; - for (i = 0; i < size; i++) - { - if ((ptr[i] >= 0x80 && ptr[i] <= 0x9F) || - ptr[i] == 0xA1 || ptr[i] == 0xA2 || ptr[i] == 0xA3 || - (ptr[i] >= 0xA5 && ptr[i] <= 0xAB) || - (ptr[i] >= 0xAE && ptr[i] <= 0xBA) || - ptr[i] == 0xBC || ptr[i] == 0xBD || - ptr[i] == 0xBE || ptr[i] == 0xC0 || - (ptr[i] >= 0xDB && ptr[i] <= 0xDF) || (ptr[i] >= 0xF3)) - return "CP1256"; - } + /* encodings */ + guess_dfa cp1256 = DFA_INIT(guess_cp1256_st, guess_cp1256_ar, "CP1256"); + guess_dfa iso8859_6 = DFA_INIT(guess_iso8859_6_st, guess_iso8859_6_ar, "ISO-8859-6"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); - return "ISO-8859-6"; -} + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; -const char *guess_ar(const char *ptr, int size) -{ - if (dfa_validate_utf8(ptr, size)) - return "UTF-8"; + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; + + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } + } + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } + } + + rv = dfa_process(order, c); + if(rv) + return rv; + + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } + } - return _guess_ar((const unsigned char *)ptr, size); + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } diff --git a/src/libguess/cjk_impl.c b/src/libguess/cjk_impl.c index d8937c0..37a996e 100644 --- a/src/libguess/cjk_impl.c +++ b/src/libguess/cjk_impl.c @@ -4,14 +4,14 @@ */ /* - * guess.c - guessing character encoding + * guess.c - guessing character encoding * * Copyright (c) 2000-2003 Shiro Kawai, All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * @@ -38,6 +38,9 @@ */ #include "libguess.h" +#include "dfa.h" + +#include <stdio.h> /* take precedence if scores are same. you can customize the order as: */ /* ORDER_** &highest, &second, ... &lowest */ @@ -46,62 +49,13 @@ #define ORDER_CN &utf8, &gb2312, &gb18030 #define ORDER_KR &utf8, &euck, &johab -/* workaround for that glib's g_convert can't convert - properly from UCS-2BE/LE trailing after BOM. */ -#define WITH_G_CONVERT 1 -/* #undef WITH_G_CONVERT */ - -#ifdef WITH_G_CONVERT -const char UCS_2BE[] = "UTF-16"; -const char UCS_2LE[] = "UTF-16"; -#else -const char UCS_2BE[] = "UCS-2BE"; -const char UCS_2LE[] = "UCS-2LE"; -#endif - -/* data types */ -typedef struct guess_arc_rec -{ - unsigned int next; /* next state */ - double score; /* score */ -} guess_arc; - -typedef struct guess_dfa_rec -{ - signed char (*states)[256]; - guess_arc *arcs; - int state; - double score; -} guess_dfa; - -/* macros */ -#define DFA_INIT(st, ar) \ - { st, ar, 0, 1.0 } - -#define DFA_NEXT(dfa, ch) \ - do { \ - int arc__; \ - if (dfa.state >= 0) { \ - arc__ = dfa.states[dfa.state][ch]; \ - if (arc__ < 0) { \ - dfa.state = -1; \ - } else { \ - dfa.state = dfa.arcs[arc__].next; \ - dfa.score *= dfa.arcs[arc__].score; \ - } \ - } \ - } while (0) - -#define DFA_ALIVE(dfa) (dfa.state >= 0) - /* include DFA table generated by guess.scm */ #include "guess_tab.c" - int dfa_validate_utf8(const char *buf, int buflen) { int i; - guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); for (i = 0; i < buflen; i++) { int c = (unsigned char) buf[i]; @@ -116,16 +70,17 @@ int dfa_validate_utf8(const char *buf, int buflen) if(DFA_ALIVE(utf8)) return 1; - else + else return 0; } const char *guess_jp(const char *buf, int buflen) { int i; - guess_dfa eucj = DFA_INIT(guess_eucj_st, guess_eucj_ar); - guess_dfa sjis = DFA_INIT(guess_sjis_st, guess_sjis_ar); - guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar); + const char *rv = NULL; + guess_dfa eucj = DFA_INIT(guess_eucj_st, guess_eucj_ar, "EUC-JP"); + guess_dfa sjis = DFA_INIT(guess_sjis_st, guess_sjis_ar, "SJIS"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); guess_dfa *top = NULL; guess_dfa *order[] = { ORDER_JP, NULL }; @@ -158,51 +113,29 @@ const char *guess_jp(const char *buf, int buflen) } } - if (DFA_ALIVE(eucj)) { - if (!DFA_ALIVE(sjis) && !DFA_ALIVE(utf8)) - return "EUC-JP"; - DFA_NEXT(eucj, c); - } - if (DFA_ALIVE(sjis)) { - if (!DFA_ALIVE(eucj) && !DFA_ALIVE(utf8)) - return "SJIS"; - DFA_NEXT(sjis, c); - } - if (DFA_ALIVE(utf8)) { - if (!DFA_ALIVE(sjis) && !DFA_ALIVE(eucj)) - return "UTF-8"; - DFA_NEXT(utf8, c); - } + rv = dfa_process(order, c); + if(rv) + return rv; - if (!DFA_ALIVE(eucj) && !DFA_ALIVE(sjis) && !DFA_ALIVE(utf8)) { + if (dfa_none(order)) { /* we ran out the possibilities */ return NULL; } } - /* Now, we have ambigous code. Pick the highest score. If more than - one candidate tie, pick the default encoding. */ - for (i = 0; order[i] != NULL; i++) { - if (order[i]->state >= 0) { //DFA_ALIVE() - if (top == NULL || order[i]->score > top->score) - top = order[i]; - } - } - - if (top == &eucj) - return "EUC-JP"; - if (top == &utf8) - return "UTF-8"; - if (top == &sjis) - return "SJIS"; - return NULL; + top = dfa_top(order); + if(top) + return top->name; + else + return NULL; } const char *guess_tw(const char *buf, int buflen) { int i; - guess_dfa big5 = DFA_INIT(guess_big5_st, guess_big5_ar); - guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar); + const char *rv = NULL; + guess_dfa big5 = DFA_INIT(guess_big5_st, guess_big5_ar, "BIG5"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); guess_dfa *top = NULL; guess_dfa *order[] = { ORDER_TW, NULL }; @@ -235,45 +168,30 @@ const char *guess_tw(const char *buf, int buflen) } } - if (DFA_ALIVE(big5)) { - if (!DFA_ALIVE(utf8)) - return "BIG5"; - DFA_NEXT(big5, c); - } - if (DFA_ALIVE(utf8)) { - if (!DFA_ALIVE(big5)) - return "UTF-8"; - DFA_NEXT(utf8, c); - } + rv = dfa_process(order, c); + if(rv) + return rv; - if (!DFA_ALIVE(big5) && !DFA_ALIVE(utf8)) { + if (dfa_none(order)) { /* we ran out the possibilities */ return NULL; } } - /* Now, we have ambigous code. Pick the highest score. If more than - one candidate tie, pick the default encoding. */ - for (i = 0; order[i] != NULL; i++) { - if (order[i]->state >= 0) { //DFA_ALIVE() - if (top == NULL || order[i]->score > top->score) - top = order[i]; - } - } - - if (top == &big5) - return "BIG5"; - if (top == &utf8) - return "UTF-8"; - return NULL; + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } const char *guess_cn(const char *buf, int buflen) { int i; - guess_dfa gb2312 = DFA_INIT(guess_gb2312_st, guess_gb2312_ar); - guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar); - guess_dfa gb18030 = DFA_INIT(guess_gb18030_st, guess_gb18030_ar); + const char *rv = NULL; + guess_dfa gb2312 = DFA_INIT(guess_gb2312_st, guess_gb2312_ar, "GB2312"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); + guess_dfa gb18030 = DFA_INIT(guess_gb18030_st, guess_gb18030_ar, "GB18030"); guess_dfa *top = NULL; guess_dfa *order[] = { ORDER_CN, NULL }; @@ -308,52 +226,30 @@ const char *guess_cn(const char *buf, int buflen) } } - if (DFA_ALIVE(gb2312)) { - if (!DFA_ALIVE(utf8) && !DFA_ALIVE(gb18030)) - return "GB2312"; - DFA_NEXT(gb2312, c); - } - if (DFA_ALIVE(utf8)) { - if (!DFA_ALIVE(gb2312) && !DFA_ALIVE(gb18030)) - return "UTF-8"; - DFA_NEXT(utf8, c); - } - if (DFA_ALIVE(gb18030)) { - if (!DFA_ALIVE(utf8) && !DFA_ALIVE(gb2312)) - return "GB18030"; - DFA_NEXT(gb18030, c); - } + rv = dfa_process(order, c); + if(rv) + return rv; - if (!DFA_ALIVE(gb2312) && !DFA_ALIVE(utf8) && !DFA_ALIVE(gb18030)) { + if (dfa_none(order)) { /* we ran out the possibilities */ return NULL; } } - /* Now, we have ambigous code. Pick the highest score. If more than - one candidate tie, pick the default encoding. */ - for (i = 0; order[i] != NULL; i++) { - if (order[i]->state >= 0) { //DFA_ALIVE() - if (top == NULL || order[i]->score > top->score) - top = order[i]; - } - } - - if (top == &gb2312) - return "GB2312"; - if (top == &utf8) - return "UTF-8"; - if (top == &gb18030) - return "GB18030"; - return NULL; + top = dfa_top(order); + if(top) + return top->name; + else + return NULL; } const char *guess_kr(const char *buf, int buflen) { int i; - guess_dfa euck = DFA_INIT(guess_euck_st, guess_euck_ar); - guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar); - guess_dfa johab = DFA_INIT(guess_johab_st, guess_johab_ar); + const char *rv = NULL; + guess_dfa euck = DFA_INIT(guess_euck_st, guess_euck_ar, "EUC-KR"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); + guess_dfa johab = DFA_INIT(guess_johab_st, guess_johab_ar, "JOHAB"); guess_dfa *top = NULL; guess_dfa *order[] = { ORDER_KR, NULL }; @@ -388,42 +284,19 @@ const char *guess_kr(const char *buf, int buflen) } } - if (DFA_ALIVE(euck)) { - if (!DFA_ALIVE(johab) && !DFA_ALIVE(utf8)) - return "EUC-KR"; - DFA_NEXT(euck, c); - } - if (DFA_ALIVE(johab)) { - if (!DFA_ALIVE(euck) && !DFA_ALIVE(utf8)) - return "JOHAB"; - DFA_NEXT(johab, c); - } - if (DFA_ALIVE(utf8)) { - if (!DFA_ALIVE(euck) && !DFA_ALIVE(johab)) - return "UTF-8"; - DFA_NEXT(utf8, c); - } + rv = dfa_process(order, c); + if(rv) + return rv; - if (!DFA_ALIVE(euck) && !DFA_ALIVE(johab) && !DFA_ALIVE(utf8)) { + if (dfa_none(order)) { /* we ran out the possibilities */ return NULL; } } - /* Now, we have ambigous code. Pick the highest score. If more than - one candidate tie, pick the default encoding. */ - for (i = 0; order[i] != NULL; i++) { - if (order[i]->state >= 0) { //DFA_ALIVE() - if (top == NULL || order[i]->score > top->score) - top = order[i]; - } - } - - if (top == &euck) - return "EUC-KR"; - if (top == &utf8) - return "UTF-8"; - if (top == &johab) - return "JOHAB"; - return NULL; + top = dfa_top(order); + if(top) + return top->name; + else + return NULL; } diff --git a/src/libguess/dfa.c b/src/libguess/dfa.c new file mode 100644 index 0000000..a7d5943 --- /dev/null +++ b/src/libguess/dfa.c @@ -0,0 +1,62 @@ +#include "libguess.h" +#include "dfa.h" + +boolean +dfa_alone(guess_dfa *dfa, guess_dfa *order[]) +{ + int i; + + if (dfa->state < 0) + return FALSE; + + for (i = 0; order[i] != NULL; i++) { + if (order[i] != dfa && order[i]->state >= 0) { //DFA_ALIVE() + return FALSE; + } + } + + return TRUE; +} + +boolean +dfa_none(guess_dfa *order[]) +{ + int i; + + for (i = 0; order[i] != NULL; i++) { + if (order[i]->state >= 0) { //DFA_ALIVE() + return FALSE; + } + } + + return TRUE; +} + +guess_dfa * +dfa_top(guess_dfa *order[]) +{ + int i; + guess_dfa *top = NULL; + for (i = 0; order[i] != NULL; i++) { + if (order[i]->state >= 0) { //DFA_ALIVE() + if (top == NULL || order[i]->score > top->score) + top = order[i]; + } + } + return top; +} + +const char * +dfa_process(guess_dfa *order[], int c) +{ + int i; + for (i = 0; order[i] != NULL; i++) { + if (DFA_ALIVE_P(order[i])) { + if (dfa_alone(order[i], order)) + return order[i]->name; + DFA_NEXT_P(order[i], c); + } + } + + return NULL; +} diff --git a/src/libguess/dfa.h b/src/libguess/dfa.h new file mode 100644 index 0000000..122db0c --- /dev/null +++ b/src/libguess/dfa.h @@ -0,0 +1,79 @@ +#ifndef __DFA_H__ +#define __DFA_H__ + +typedef int boolean; +#define TRUE 1 +#define FALSE 0 + +/* workaround for that glib's g_convert can't convert + properly from UCS-2BE/LE trailing after BOM. */ +#define WITH_G_CONVERT 1 +/* #undef WITH_G_CONVERT */ + +#ifdef WITH_G_CONVERT +#define UCS_2BE "UTF-16" +#define UCS_2LE "UTF-16" +#else +#define UCS_2BE "UCS_2BE" +#define UCS_2LE "UCS_2LE" +#endif + +/* data types */ +typedef struct guess_arc_rec +{ + unsigned int next; /* next state */ + double score; /* score */ +} guess_arc; + +typedef struct guess_dfa_rec +{ + signed char (*states)[256]; + guess_arc *arcs; + int state; + double score; + char *name; +} guess_dfa; + +/* macros */ +#define DFA_INIT(st, ar, name) \ + { st, ar, 0, 1.0 ,name} + +#define DFA_NEXT(dfa, ch) \ + do { \ + int arc__; \ + if (dfa.state >= 0) { \ + arc__ = dfa.states[dfa.state][ch]; \ + if (arc__ < 0) { \ + dfa.state = -1; \ + } else { \ + dfa.state = dfa.arcs[arc__].next; \ + dfa.score *= dfa.arcs[arc__].score; \ + } \ + } \ + } while (0) + +#define DFA_ALIVE(dfa) (dfa.state >= 0) + +#define DFA_NEXT_P(dfa, ch) \ + do { \ + int arc__; \ + if (dfa->state >= 0) { \ + arc__ = dfa->states[dfa->state][ch]; \ + if (arc__ < 0) { \ + dfa->state = -1; \ + } else { \ + dfa->state = dfa->arcs[arc__].next; \ + dfa->score *= dfa->arcs[arc__].score; \ + } \ + } \ + } while (0) + +#define DFA_ALIVE_P(dfa) (dfa->state >= 0) + +/* prototypes */ +boolean dfa_alone(guess_dfa *dfa, guess_dfa *order[]); +boolean dfa_none(guess_dfa *order[]); +guess_dfa *dfa_top(guess_dfa *order[]); +const char *dfa_process(guess_dfa *order[], int c); + +#endif diff --git a/src/libguess/greek_impl.c b/src/libguess/greek_impl.c index ae9d148..0117a4a 100644 --- a/src/libguess/greek_impl.c +++ b/src/libguess/greek_impl.c @@ -1,22 +1,56 @@ -static const char *_guess_gr(const unsigned char *ptr, int size) +#include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" + +/* precedence order */ +#define ORDER &utf8, &iso8859_7, &cp1253 + +/* common */ +const char *guess_gr(const char *buf, int buflen) { int i; + const char *rv = NULL; - for (i = 0; i < size; i++) - { - if (ptr[i] == 0x80 || - (ptr[i] >= 0x82 && ptr[i] <= 0x87) || - ptr[i] == 0x89 || ptr[i] == 0x8B || - (ptr[i] >= 0x91 && ptr[i] <= 0x97) || - ptr[i] == 0x99 || ptr[i] == 0x9B || ptr[i] == 0xA4 || - ptr[i] == 0xA5 || ptr[i] == 0xAE) - return "CP1253"; - } + /* encodings */ + guess_dfa cp1253 = DFA_INIT(guess_cp1253_st, guess_cp1253_ar, "CP1253"); + guess_dfa iso8859_7 = DFA_INIT(guess_iso8859_7_st, guess_iso8859_7_ar, "ISO-8859-7"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); - return "ISO-8859-7"; -} + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; -const char *guess_gr(const char *ptr, int size) -{ - return _guess_gr((const unsigned char *) ptr, size); + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; + + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } + } + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } + } + + rv = dfa_process(order, c); + if(rv) + return rv; + + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } + } + + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } diff --git a/src/libguess/guess.c b/src/libguess/guess.c index 847972e..fd50397 100644 --- a/src/libguess/guess.c +++ b/src/libguess/guess.c @@ -8,8 +8,9 @@ typedef struct _guess_impl { static guess_impl *guess_impl_list = NULL; -void guess_impl_register(const char *lang, - const char *(*impl)(const char *buf, int len)) +static void +guess_impl_register(const char *lang, + const char *(*impl)(const char *buf, int len)) { guess_impl *iptr = calloc(sizeof(guess_impl), 1); @@ -20,7 +21,8 @@ void guess_impl_register(const char *lang, guess_impl_list = iptr; } -void guess_init(void) +static void +guess_init(void) { /* check if already initialized */ if (guess_impl_list != NULL) @@ -38,7 +40,8 @@ void guess_init(void) guess_impl_register(GUESS_REGION_PL, guess_pl); } -const char *guess_encoding(const char *inbuf, int buflen, const char *lang) +const char * +guess_encoding(const char *inbuf, int buflen, const char *lang) { guess_impl *iter; diff --git a/src/libguess/guess.scm b/src/libguess/guess.scm index 363d6c4..acdf7a1 100644 --- a/src/libguess/guess.scm +++ b/src/libguess/guess.scm @@ -5,24 +5,24 @@ ;;; ;;; Auxiliary script to generate japanese code guessing table -;;; +;;; ;;; Copyright (c) 2000-2003 Shiro Kawai, All rights reserved. -;;; +;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: -;;; +;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. -;;; +;;; ;;; 2. 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. -;;; +;;; ;;; 3. Neither the name of the authors 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 @@ -34,10 +34,27 @@ ;;; 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. -;;; +;;; ;;; $Id: guess.scm,v 1.3 2003/07/05 03:29:10 shirok Exp $ ;;; +;;; +;;; To rebuild DFA tables, install Gauche and run the following in +;;; the libguess source directory: +;;; +;;; $ gosh guess.scm guess_tab.c +;;; +;;; DFAs are defined such as: +;;; +;;; (define-dfa c-prefix-name +;;; (init +;;; (((byte sequence)) step-name confidence-score) +;;; (((byte sequence)) step-name confidence-score))) +;;; +;;; DFAs can have infinite steps, the table defines how the DFA behaves. +;;; 'init' is the name of the first step. +;;; + (use srfi-1) (use gauche.sequence) @@ -156,6 +173,8 @@ (lambda () (print "/* State transition table for character code guessing */") (print "/* This file is automatically generated by guess.scm */") + (print "") + (print "#include \"dfa.h\"") (newline) (for-each emit-dfa-table (all-dfas)))) 0) @@ -174,19 +193,16 @@ (((#x00 #x7f)) init 1.0) ; ASCII range ((#x8e) jis0201_kana 0.8) ; JISX 0201 kana ((#x8f) jis0213_2 0.95) ; JISX 0213 plane 2 - (((#xa1 #xfe)) jis0213_1 1.0) ; JISX 0213 plane 1 - ) + (((#xa1 #xfe)) jis0213_1 1.0)) ; JISX 0213 plane 1 ;; jis x 0201 kana (jis0201_kana - (((#xa1 #xdf)) init 1.0) - ) + (((#xa1 #xdf)) init 1.0)) ;; jis x 0208 and jis x 0213 plane 1 (jis0213_1 (((#xa1 #xfe)) init 1.0)) ;; jis x 0213 plane 2 (jis0213_2 - (((#xa1 #xfe)) init 1.0)) - ) + (((#xa1 #xfe)) init 1.0))) ;;; ;;; Shift_JIS @@ -201,8 +217,7 @@ (((#xf0 #xfc)) jis0213 0.95) ;jisx0213 plane 2 (((#xfd #xff)) init 0.8)) ;vendor extension (jis0213 - (((#x40 #x7e) (#x80 #xfc)) init 1.0)) - ) + (((#x40 #x7e) (#x80 #xfc)) init 1.0))) ;;; ;;; UTF-8 @@ -225,42 +240,57 @@ (4byte_more (((#x80 #xbf)) 3byte_more 1.0)) (5byte_more - (((#x80 #xbf)) 4byte_more 1.0)) - ) + (((#x80 #xbf)) 4byte_more 1.0))) ;;; ;;; UCS-2LE ;;; -; (define-dfa ucs2le -; (init -; ((#xff) le 1.0) -; (((#x00 #x7f)) ascii 1.0) -; (((#x00 #xff)) multi 1.0)) -; (le -; ((#xfe) init 1.0)) -; (ascii -; ((#x00) init 1.0)) -; (multi -; (((#x00 #xff)) init 1.0))) +(define-dfa ucs2le + (init + ((#xfe) bom-be 1.0) + ((#xff) bom-le 1.0) + (((#x00 #xfd)) byte2 1.0)) + (bom-le + (((#x00 #xff)) init 1.0)) + (bom-be + (((#x00 #xfe)) init 1.0)) ;; if be (0xfeff), die. + (byte2 + (((#x00 #xff)) init 1.0))) ;;; ;;; UCS-2BE ;;; -; (define-dfa ucs2be -; (init -; ((#xfe) be 1.0) -; ((#x00) ascii 1.0) -; (((#x00 #xff)) multi 1.0)) -; (be -; ((#xff) init 1.0)) -; (ascii -; (((#x00 #x7f)) init 1.0)) -; (multi -; (((#x00 #xff)) init 1.0))) +(define-dfa ucs2be + (init + ((#xfe) bom-be 1.0) + ((#xff) bom-le 1.0) + (((#x00 #xfd)) byte2 1.0)) + (bom-le + (((#x00 #xfd)) init 1.0) + ((#xff) init 1.0)) ;; if le (0xfffe), die. + (bom-be + (((#x00 #xff)) init 1.0)) + (byte2 + (((#x00 #xff)) init 1.0))) +;;; +;;; UTF-16 +;;; +(define-dfa utf16 + (init + ((#xfe) bom-be 1.0) + ((#xff) bom-le 1.0)) + (init1 + (((#x00 #xff)) byte2 1.0)) + (bom-be + ((#xff) init1 1.0)) + (bom-le + ((#xfe) init1 1.0)) + (byte2 + (((#x00 #xff)) init1 1.0))) ;;; -;;; JIS (ISO2022JP) +;;; ISO2022JP (JIS) ;;; ;; NB: for now, we just check the sequence of <ESC> $ or <ESC> '('. @@ -269,22 +299,18 @@ ((#x1b) esc 1.0) (((#x00 #x1a) (#x1c #x1f)) init 1.0) ;C0 (((#x20 #x7f)) init 1.0) ;ASCII - (((#xa1 #xdf)) init 0.7) ;JIS8bit kana - ) + (((#xa1 #xdf)) init 0.7)) ;JIS8bit kana (esc ((#x0d #x0a) init 0.9) ;cancel ((#\( ) esc-paren 1.0) ((#\$ ) esc-$ 1.0) - ((#\& ) esc-& 1.0) - ) + ((#\& ) esc-& 1.0)) (esc-paren ((#\B #\J #\H) init 1.0) - ((#\I) jis0201kana 0.8) - ) + ((#\I) jis0201kana 0.8)) (esc-$ ((#\@ #\B) kanji 1.0) - ((#\( ) esc-$-paren 1.0) - ) + ((#\( ) esc-$-paren 1.0)) (esc-$-paren ((#\D #\O #\P) kanji 1.0)) (esc-& @@ -296,8 +322,7 @@ ((#x1b) esc 1.0) (((#x21 #x7e)) kanji-2 1.0)) (kanji-2 - (((#x21 #x7e)) kanji 1.0)) - ) + (((#x21 #x7e)) kanji 1.0)) ) ;;; ;;; Big5 @@ -306,12 +331,10 @@ (define-dfa big5 ;; first byte (init - (((#x00 #x7f)) init 1.0) ;ascii - (((#xa1 #xfe)) 2byte 1.0) ;big5-2byte - ) + (((#x00 #x7f)) init 1.0) ;ascii + (((#xa1 #xfe)) 2byte 1.0)) ;big5-2byte (2byte - (((#x40 #x7e) (#xa1 #xfe)) init 1.0)) - ) + (((#x40 #x7e) (#xa1 #xfe)) init 1.0))) ;;; ;;; GB2312 (EUC-CN?) @@ -320,12 +343,10 @@ (define-dfa gb2312 ;; first byte (init - (((#x00 #x7f)) init 1.0) ;ascii - (((#xa1 #xfe)) 2byte 1.0) ;gb2312 2byte - ) + (((#x00 #x7f)) init 1.0) ;ascii + (((#xa1 #xfe)) 2byte 1.0)) ;gb2312 2byte (2byte - (((#xa1 #xfe)) init 1.0)) - ) + (((#xa1 #xfe)) init 1.0))) ;;; ;;; GB18030 @@ -336,8 +357,7 @@ (init (((#x00 #x80)) init 1.0) ;ascii (((#x81 #xfe)) 2byte 1.0) ;gb18030 2byte - (((#x81 #xfe)) 4byte2 1.0) ;gb18030 2byte - ) + (((#x81 #xfe)) 4byte2 1.0)) ;gb18030 2byte (2byte (((#x40 #x7e) (#x80 #xfe)) init 1.0)) (4byte2 @@ -345,8 +365,7 @@ (4byte3 (((#x81 #xfe)) 4byte4 1.0)) (4byte4 - (((#x30 #x39)) init 1.0)) - ) + (((#x30 #x39)) init 1.0)) ) ;;; ;;; EUC-KR @@ -356,12 +375,10 @@ ;; first byte (init (((#x00 #x7f)) init 1.0) ; ASCII range - (((#xa1 #xfe)) ks1001 1.0) ; KSX 1001 - ) + (((#xa1 #xfe)) ks1001 1.0)) ; KSX 1001 ;; ks x 1001 (ks1001 - (((#xa1 #xfe)) init 1.0)) - ) + (((#xa1 #xfe)) init 1.0))) ;;; ;;; Johab @@ -372,12 +389,191 @@ (init (((#x00 #x7f)) init 1.0) ; ASCII range (((#x84 #xd3)) jamo51 1.0) ; jamo51 - (((#xd8 #xde) (#xe0 #xf9)) jamo42 0.95) ; jamo42 - ) + (((#xd8 #xde) (#xe0 #xf9)) jamo42 0.95)) ; jamo42 ;; second byte (jamo51 (((#x41 #x7e) (#x81 #xfe)) init 1.0)) (jamo42 - (((#x31 #x7e) (#x91 #xfe)) init 1.0)) - ) + (((#x31 #x7e) (#x91 #xfe)) init 1.0))) + + + + + + +;;; +;;; arabic +;;; + +(define-dfa iso8859_6 + (init + (((#x00 #x7f)) init 1.0) ;ascii + ((#xa0) init 1.0) + ((#xa4) init 1.0) + ((#xac) init 1.0) + ((#xad) init 1.0) ;SHY xxx + ((#xbb) init 1.0) + ((#xbf) init 1.0) + (((#xc1 #xda)) init 1.0) + (((#xe0 #xf2)) init 1.0))) + +(define-dfa cp1256 + (init + (((#x00 #x7f)) init 1.0) ;ascii + (((#x80 #xff)) init 1.0))) ;high bit + + +;;; +;;; greek +;;; + +(define-dfa iso8859_7 + (init + (((#x00 #x7f)) init 1.0) ;ascii + (((#xa0 #xad)) init 1.0) + (((#xaf #xd1)) init 1.0) + (((#xd3 #xfe)) init 1.0))) + +(define-dfa cp1253 + (init + (((#x00 #x7f)) init 1.0) ;ascii + ((#x80) init 1.0) + (((#x82 #x87)) init 1.0) + ((#x89) init 1.0) + ((#x8b) init 1.0) + (((#x91 #x97)) init 1.0) + ((#x99) init 1.0) + ((#x9b) init 1.0) + (((#xa0 #xa9)) init 1.0) + (((#xab #xd1)) init 1.0) + (((#xd3 #xfe)) init 1.0))) + +;;; +;;; hebrew +;;; + +(define-dfa iso8859_8 + (init + (((#x00 #x7f)) init 1.0) ;ascii + ((#xa0) init 1.0) + (((#xa2 #xbe)) init 1.0) + (((#xdf #xfa)) init 1.0) + (((#xfd #xfe)) init 1.0))) + +(define-dfa cp1255 + (init + (((#x00 #x7f)) init 1.0) ;ascii + ((#x80) init 1.0) + (((#x82 #x89)) init 1.0) + ((#x8b) init 1.0) + (((#x91 #x99)) init 1.0) + ((#x9b) init 1.0) + (((#xa0 #xc9)) init 1.0) + (((#xcb #xd8)) init 1.0) + (((#xe0 #xfa)) init 1.0) + (((#xfd #xfe)) init 1.0))) + +;;; +;;; turkish +;;; + +(define-dfa iso8859_9 + (init + (((#x00 #x7f)) init 1.0) ;ascii + (((#xa0 #xff)) init 1.0))) + +(define-dfa cp1254 + (init + (((#x00 #x7f)) init 1.0) ;ascii + ((#x80) init 1.0) + (((#x82 #x8c)) init 1.0) + (((#x91 #x9c)) init 1.0) + (((#x9f #xff)) init 1.0))) + +;;; +;;; russian +;;; + +(define-dfa iso8859_5 + (init + (((#x00 #x7f)) init 1.0) ; ascii + (((#xa0 #xff)) init 1.0))) + +(define-dfa koi8_r + (init + (((#x20 #x7f)) init 1.0) ; ascii + ((#xa3) init 1.0) + ((#xb3) init 1.0) + (((#xc0 #xff)) init 1.0))) + +(define-dfa koi8_u + (init + (((#x20 #x7f)) init 1.0) ; ascii + (((#xa3 #xa4)) init 1.0) + (((#xa6 #xa7)) init 1.0) + ((#xad) init 1.0) + (((#xb3 #xb4)) init 1.0) + (((#xb6 #xb7)) init 1.0) + ((#xbd) init 1.0) + (((#xc0 #xff)) init 1.0))) + +(define-dfa cp866 + (init + (((#x00 #x7f)) init 1.0) ; ascii + (((#x80 #xaf)) init 1.0) + (((#xe0 #xf7)) init 1.0))) + +(define-dfa cp1251 + (init + (((#x00 #x7f)) init 1.0) ; ascii + (((#x80 #x81)) init 1.0) + ((#x83) init 1.0) + ((#x8a) init 1.0) + (((#x8c #x90)) init 1.0) + ((#x9a) init 1.0) + (((#x9c #xa3)) init 1.0) + ((#xa5) init 1.0) + ((#xa8) init 1.0) + ((#xaa) init 1.0) + ((#xaf) init 1.0) + (((#xb2 #xb4)) init 1.0) + ((#xb8) init 1.0) + ((#xba) init 1.0) + (((#xbc #xff)) init 1.0))) + +;;; +;;; polish +;;; + +(define-dfa iso8859_2 + (init + (((#x20 #x7e)) init 1.0) + ((#xa1) init 1.0) + ((#xa3) init 1.0) + (((#xa5 #xa6)) init 1.0) + (((#xa9 #xac)) init 1.0) + (((#xae #xaf)) init 1.0) + ((#xb1) init 1.0) + ((#xb3) init 1.0) + (((#xb5 #xb6)) init 1.0) + (((#xb9 #xbc)) init 1.0) + (((#xbe #xbf)) init 1.0) + (((#xc0 #xd6)) init 1.0) + (((#xd8 #xf6)) init 1.0) + (((#xf8 #xfe)) init 1.0))) + +(define-dfa cp1250 + (init + (((#x20 #x7e)) init 1.0) + ((#xa3) init 1.0) + ((#xa5) init 1.0) + ((#xaa) init 1.0) + ((#xaf) init 1.0) + ((#xb3) init 1.0) + (((#xb9 #xba)) init 1.0) + ((#xbc) init 1.0) + (((#xbe #xbf)) init 1.0) + (((#xc0 #xd6)) init 1.0) + (((#xd8 #xf6)) init 1.0) + (((#xf8 #xfe)) init 1.0))) diff --git a/src/libguess/guess_tab.c b/src/libguess/guess_tab.c index 02941b5..a260dff 100644 --- a/src/libguess/guess_tab.c +++ b/src/libguess/guess_tab.c @@ -1,6 +1,8 @@ /* State transition table for character code guessing */ /* This file is automatically generated by guess.scm */ +#include "dfa.h" + static signed char guess_eucj_st[][256] = { { /* state init */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -259,6 +261,277 @@ static guess_arc guess_utf8_ar[] = { { 4, 1.0 }, /* 5byte_more -> 4byte_more */ }; +static signed char guess_ucs2le_st[][256] = { + { /* state init */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, + }, + { /* state bom-le */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + }, + { /* state bom-be */ + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, + }, + { /* state byte2 */ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + }, +}; + +static guess_arc guess_ucs2le_ar[] = { + { 2, 1.0 }, /* init -> bom-be */ + { 1, 1.0 }, /* init -> bom-le */ + { 3, 1.0 }, /* init -> byte2 */ + { 0, 1.0 }, /* bom-le -> init */ + { 0, 1.0 }, /* bom-be -> init */ + { 0, 1.0 }, /* byte2 -> init */ +}; + +static signed char guess_ucs2be_st[][256] = { + { /* state init */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, + }, + { /* state bom-le */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, 4, + }, + { /* state bom-be */ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + }, + { /* state byte2 */ + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + }, +}; + +static guess_arc guess_ucs2be_ar[] = { + { 2, 1.0 }, /* init -> bom-be */ + { 1, 1.0 }, /* init -> bom-le */ + { 3, 1.0 }, /* init -> byte2 */ + { 0, 1.0 }, /* bom-le -> init */ + { 0, 1.0 }, /* bom-le -> init */ + { 0, 1.0 }, /* bom-be -> init */ + { 0, 1.0 }, /* byte2 -> init */ +}; + +static signed char guess_utf16_st[][256] = { + { /* state init */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, + }, + { /* state init1 */ + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + }, + { /* state bom-be */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, + }, + { /* state bom-le */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, -1, + }, + { /* state byte2 */ + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + }, +}; + +static guess_arc guess_utf16_ar[] = { + { 2, 1.0 }, /* init -> bom-be */ + { 3, 1.0 }, /* init -> bom-le */ + { 4, 1.0 }, /* init1 -> byte2 */ + { 1, 1.0 }, /* bom-be -> init1 */ + { 1, 1.0 }, /* bom-le -> init1 */ + { 1, 1.0 }, /* byte2 -> init1 */ +}; + static signed char guess_big5_st[][256] = { { /* state init */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -562,3 +835,469 @@ static guess_arc guess_johab_ar[] = { { 0, 1.0 }, /* jamo42 -> init */ }; +static signed char guess_iso8859_6_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, 3, 4, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, -1, -1, 6, + -1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, -1, -1, -1, -1, -1, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + }, +}; + +static guess_arc guess_iso8859_6_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1256_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, +}; + +static guess_arc guess_cp1256_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_iso8859_7_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, + }, +}; + +static guess_arc guess_iso8859_7_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1253_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, 2, 2, 2, 2, 2, 2, -1, 3, -1, 4, -1, -1, -1, -1, + -1, 5, 5, 5, 5, 5, 5, 5, -1, 6, -1, 7, -1, -1, -1, -1, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, -1, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, -1, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -1, + }, +}; + +static guess_arc guess_cp1253_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_iso8859_8_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, -1, 4, 4, -1, + }, +}; + +static guess_arc guess_iso8859_8_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1255_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, 2, 2, 2, 2, 2, 2, 2, 2, -1, 3, -1, -1, -1, -1, + -1, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, 5, -1, -1, -1, -1, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, -1, -1, 9, 9, -1, + }, +}; + +static guess_arc guess_cp1255_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_iso8859_9_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, +}; + +static guess_arc guess_iso8859_9_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1254_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, + -1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -1, -1, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + }, +}; + +static guess_arc guess_cp1254_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_iso8859_5_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + }, +}; + +static guess_arc guess_iso8859_5_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_koi8_r_st[][256] = { + { /* state init */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + }, +}; + +static guess_arc guess_koi8_r_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_koi8_u_st[][256] = { + { /* state init */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, 1, -1, 2, 2, -1, -1, -1, -1, -1, 3, -1, -1, + -1, -1, -1, 4, 4, -1, 5, 5, -1, -1, -1, -1, -1, 6, -1, -1, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + }, +}; + +static guess_arc guess_koi8_u_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp866_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, + }, +}; + +static guess_arc guess_cp866_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1251_st[][256] = { + { /* state init */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, -1, 2, -1, -1, -1, -1, -1, -1, 3, -1, 4, 4, 4, 4, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, -1, 6, 6, 6, 6, + 6, 6, 6, 6, -1, 7, -1, -1, 8, -1, 9, -1, -1, -1, -1, 10, + -1, -1, 11, 11, 11, -1, -1, -1, 12, -1, 13, -1, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + }, +}; + +static guess_arc guess_cp1251_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_iso8859_2_st[][256] = { + { /* state init */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1, -1, 2, -1, 3, 3, -1, -1, 4, 4, 4, 4, -1, 5, 5, + -1, 6, -1, 7, -1, 8, 8, -1, -1, 9, 9, 9, 9, -1, 10, 10, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, -1, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, -1, 13, 13, 13, 13, 13, 13, 13, -1, + }, +}; + +static guess_arc guess_iso8859_2_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + +static signed char guess_cp1250_st[][256] = { + { /* state init */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, -1, 2, -1, -1, -1, -1, 3, -1, -1, -1, -1, 4, + -1, -1, -1, 5, -1, -1, -1, -1, -1, 6, 6, -1, 7, -1, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, -1, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, -1, 11, 11, 11, 11, 11, 11, 11, -1, + }, +}; + +static guess_arc guess_cp1250_ar[] = { + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ + { 0, 1.0 }, /* init -> init */ +}; + diff --git a/src/libguess/hebrew_impl.c b/src/libguess/hebrew_impl.c index b3d5327..8e45ed7 100644 --- a/src/libguess/hebrew_impl.c +++ b/src/libguess/hebrew_impl.c @@ -1,23 +1,56 @@ -const char *_guess_hw(const unsigned char *ptr, int size) +#include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" + +/* precedence order */ +#define ORDER &utf8, &iso8859_8, &cp1255 + +/* common */ +const char *guess_hw(const char *buf, int buflen) { int i; + const char *rv = NULL; - for (i = 0; i < size; i++) - { - if (ptr[i] == 0x80 || (ptr[i] >= 0x82 && ptr[i] <= 0x89) || ptr[i] == 0x8B || - (ptr[i] >= 0x91 && ptr[i] <= 0x99) || ptr[i] == 0x9B || ptr[i] == 0xA1 || - (ptr[i] >= 0xBF && ptr[i] <= 0xC9) || - (ptr[i] >= 0xCB && ptr[i] <= 0xD8)) - return "CP1255"; + /* encodings */ + guess_dfa cp1255 = DFA_INIT(guess_cp1255_st, guess_cp1255_ar, "CP1255"); + guess_dfa iso8859_8 = DFA_INIT(guess_iso8859_8_st, guess_iso8859_8_ar, "ISO-8859-8-I"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); - if (ptr[i] == 0xDF) - return "ISO-8859-8-I"; - } + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; - return "ISO-8859-8-I"; -} + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; -const char *guess_hw(const char *ptr, int size) -{ - return _guess_hw((const unsigned char *) ptr, size); + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } + } + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } + } + + rv = dfa_process(order, c); + if(rv) + return rv; + + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } + } + + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } diff --git a/src/libguess/libguess.h b/src/libguess/libguess.h index 1528f0a..d7755f4 100644 --- a/src/libguess/libguess.h +++ b/src/libguess/libguess.h @@ -5,11 +5,11 @@ /* * Copyright (c) 2000-2003 Shiro Kawai, All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * @@ -66,8 +66,5 @@ int dfa_validate_utf8(const char *buf, int buflen); #define GUESS_REGION_PL "polish" const char *guess_encoding(const char *buf, int buflen, const char *lang); -void guess_init(void); -void guess_impl_register(const char *name, - const char *(impl)(const char *buf, int buflen)); #endif diff --git a/src/libguess/polish_impl.c b/src/libguess/polish_impl.c index b72cfcb..d194a64 100644 --- a/src/libguess/polish_impl.c +++ b/src/libguess/polish_impl.c @@ -1,53 +1,56 @@ -/* - * Copyright 2010 Michał Lipski <tallica@o2.pl> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * 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, see <http://www.gnu.org/licenses/>. - * - */ - -static const char *_guess_pl(const unsigned char *ptr, int size) +#include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" + +/* precedence order */ +#define ORDER &utf8, &cp1250, &iso8859_2 + +/* common */ +const char *guess_pl(const char *buf, int buflen) { int i; + const char *rv = NULL; - for (i = 0; i < size; i++) - { - if (ptr[i] == 0xB9 || //ą - ptr[i] == 0xE6 || //ć - ptr[i] == 0xEA || //ę - ptr[i] == 0xB3 || //ł - ptr[i] == 0xF1 || //ń - ptr[i] == 0xF3 || //ó - ptr[i] == 0x9C || //ś - ptr[i] == 0x9F || //ź - ptr[i] == 0xBF || //ż - ptr[i] == 0xA5 || //Ą - ptr[i] == 0xC6 || //Ć - ptr[i] == 0xCA || //Ę - ptr[i] == 0xA3 || //Ł - ptr[i] == 0xD1 || //Ń - ptr[i] == 0xD3 || //Ó - ptr[i] == 0x8C || //Ś - ptr[i] == 0x8F || //Ź - ptr[i] == 0xAF) //Ż - - return "CP1250"; - } + /* encodings */ + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); + guess_dfa cp1250 = DFA_INIT(guess_cp1250_st, guess_cp1250_ar, "CP1250"); + guess_dfa iso8859_2 = DFA_INIT(guess_iso8859_2_st, guess_iso8859_2_ar, "ISO-8859-2"); - return "ISO-8859-2"; -} + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; -const char *guess_pl(const char *ptr, int size) -{ - return _guess_pl((const unsigned char *) ptr, size); + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; + + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } + } + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } + } + + rv = dfa_process(order, c); + if(rv) + return rv; + + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } + } + + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } diff --git a/src/libguess/russian_impl.c b/src/libguess/russian_impl.c index 5f329a2..487c4d4 100644 --- a/src/libguess/russian_impl.c +++ b/src/libguess/russian_impl.c @@ -1,218 +1,60 @@ -/* - * This code is derivitive of librcd. - * No copyright notice was found. - */ - -#include <stdio.h> -#include <string.h> - #include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" -#define NF_VALUE -2 -#define max(a,b) ((a>b)?a:b) -#define min(a,b) ((a<b)?a:b) -#define bit(i) (1<<i) - -typedef struct lng_stat2 { - unsigned char a; - unsigned char b; - double rate; - double srate; - double erate; -} lng_stat2; - -#include "russian_tab.c" - +/* precedence order */ +#define ORDER &utf8, &cp1251, &koi8_u, &koi8_r, &cp866, &iso8859_2, &iso8859_5 -static int end_symbol(char ch) { - if (ch=='\r'||ch=='\n'||ch==0||ch==' '||ch=='\t'||ch==','||ch=='.'||ch=='!'||ch=='?'||ch==';'||ch=='-'||ch==':'||ch=='"'||ch=='\''||ch==')') return 1; - return 0; -} - -static int start_symbol(char ch) { - if ((ch=='\t')||ch=='\r'||ch=='\n'||(ch==' ')||(ch=='(')||(ch=='"')||(ch=='\'')) return 1; - return 0; -} - -typedef const struct lng_stat2 *lng_stat2_ptr; - -static void bfind(const unsigned char *a, lng_stat2_ptr *w, lng_stat2_ptr *k, lng_stat2_ptr *al) { - const struct lng_stat2 *winptr, *koiptr,*altptr; - int ki,wi,ai,d,ws=0,ks=0,as=0; - d=npow2>>1; - wi=d; - ki=d; - ai=d; - winptr=0; - koiptr=0; - altptr=0; - do{ - d>>=1; - - if(!ws){ - if (wi>indexes2) wi-=d; - else { - winptr=enc_win+wi-1; - if(a[0]==winptr->a){ - if(a[1]==winptr->b){ - ws=1; - }else if(a[1]<winptr->b){ - wi-=d; - }else{ //b>win[wi].b - wi+=d; - } - }else if(a[0]<winptr->a){ - wi-=d; - }else{ //a>win[wi].a - wi+=d; - } - } - } - if(!ks){ - if (ki>indexes2) ki-=d; - else { - koiptr=enc_koi+ki-1; - if(a[0]==koiptr->a){ - if(a[1]==koiptr->b){ - ks=1; - }else if(a[1]<koiptr->b){ - ki-=d; - }else{ //b>win[wi].b - ki+=d; - } - }else if(a[0]<koiptr->a){ - ki-=d; - }else{ //a>win[wi].a - ki+=d; +/* common */ +const char *guess_ru(const char *buf, int buflen) +{ + int i; + const char *rv = NULL; + + /* encodings */ + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); + guess_dfa cp1251 = DFA_INIT(guess_cp1251_st, guess_cp1251_ar, "CP1251"); + guess_dfa cp866 = DFA_INIT(guess_cp866_st, guess_cp866_ar, "CP866"); + guess_dfa koi8_u = DFA_INIT(guess_koi8_u_st, guess_koi8_u_ar, "KOI8-U"); + guess_dfa koi8_r = DFA_INIT(guess_koi8_r_st, guess_koi8_r_ar, "KOI8-R"); + guess_dfa iso8859_2 = DFA_INIT(guess_iso8859_2_st, guess_iso8859_2_ar, "ISO-8859-2"); + guess_dfa iso8859_5 = DFA_INIT(guess_iso8859_5_st, guess_iso8859_5_ar, "ISO-8859-5"); + + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; + + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; + + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } } - } - } - if(!as){ - if (ai>indexes2) ai-=d; - else { - altptr=enc_alt+ai-1; - if(a[0]==altptr->a){ - if(a[1]==altptr->b){ - as=1; - }else if(a[1]<altptr->b){ - ai-=d; - }else{ //b>win[wi].b - ai+=d; - } - }else if(a[0]<altptr->a){ - ai-=d; - }else{ //a>win[wi].a - ai+=d; + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } } - } - } - }while(d); - if (ws) *w=winptr; - else *w=NULL; - if (ks) *k=koiptr; - else *k=NULL; - if (as) *al=altptr; - else *al=NULL; -} -static double calculate(double s, double m, double e) { - return s+m+e; -} + rv = dfa_process(order, c); + if(rv) + return rv; -static const char *is_win_charset2(const unsigned char *txt, int len){ - const struct lng_stat2 *winptr, *koiptr,*altptr; - double winstep,koistep,altstep,winestep,koiestep,altestep,winsstep,koisstep,altsstep; - double winstat=0,koistat=0,altstat=0,winestat=0,koiestat=0,altestat=0,winsstat=0,koisstat=0,altsstat=0; - long j; - -#ifdef _AUTO_DEBUG - fprintf(stderr,"Word: %s\n",txt); -#endif - for(j=0;j<len-1;j++){ - //skip bottom half of table - if(txt[j]<128 || txt[j+1]<128) continue; -#ifdef _AUTO_DEBUG - fprintf(stderr,"Pair: %c%c",txt[j],txt[j+1]); -#endif - bfind(txt+j,&winptr,&koiptr,&altptr); - - if ((j==0)||(start_symbol(txt[j-1]))) { - if (winptr) winsstep=winptr->srate; - else winsstep=NF_VALUE; - if (koiptr) koisstep=koiptr->srate; - else koisstep=NF_VALUE; - if (altptr) altsstep=altptr->srate; - else altsstep=NF_VALUE; - winestep=0; - koiestep=0; - altestep=0; - winstep=0; - koistep=0; - altstep=0; -#ifdef _AUTO_DEBUG - fprintf(stderr,", Win %lf, Koi %lf, Alt: %lf\n",winsstep,koisstep,altsstep); -#endif - } else if ((j==len-2)||(end_symbol(txt[j+2]))) { - if (winptr) winestep=winptr->erate; - else winestep=NF_VALUE; - if (koiptr) koiestep=koiptr->erate; - else koiestep=NF_VALUE; - if (altptr) altestep=altptr->erate; - else altestep=NF_VALUE; - winsstep=0; - koisstep=0; - altsstep=0; - winstep=0; - koistep=0; - altstep=0; -#ifdef _AUTO_DEBUG - fprintf(stderr,", Win %lf, Koi %lf, Alt %lf\n",winestep,koiestep,altestep); -#endif - } else { - if (winptr) winstep=winptr->rate; - else winstep=NF_VALUE; - if (koiptr) koistep=koiptr->rate; - else koistep=NF_VALUE; - if (altptr) altstep=altptr->rate; - else altstep=NF_VALUE; - winsstep=0; - winestep=0; - koisstep=0; - koiestep=0; - altsstep=0; - altestep=0; -#ifdef _AUTO_DEBUG - fprintf(stderr,", Win %lf, Koi %lf, Alt %lf\n",winstep,koistep,altstep); -#endif + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } } - - winstat+=winstep; - koistat+=koistep; - altstat+=altstep; - winsstat+=winsstep; - koisstat+=koisstep; - altsstat+=altsstep; - winestat+=winestep; - koiestat+=koiestep; - altestat+=altestep; - } - -#ifdef _AUTO_DEBUG - fprintf(stderr,"Start. Win: %lf, Koi: %lf, Alt: %lf\n",winsstat,koisstat,altsstat); - fprintf(stderr,"Middle. Win: %lf, Koi: %lf, Alt: %lf\n",winstat,koistat,altstat); - fprintf(stderr,"End. Win: %lf, Koi: %lf, Alt: %lf\n",winestat,koiestat,altestat); - fprintf(stderr,"Final. Win: %lf, Koi: %lf, Alt: %lf\n",calculate(winsstat,winstat,winestat),calculate(koisstat,koistat,koiestat),calculate(altsstat,altstat,altestat)); -#endif - if ((calculate(altsstat,altstat,altestat)>calculate(koisstat,koistat,koiestat))&&(calculate(altsstat,altstat,altestat)>calculate(winsstat,winstat,winestat))) return "CP866"; - if (calculate(koisstat,koistat,koiestat)>calculate(winsstat,winstat,winestat)) return "KOI8-R"; - return "CP1251"; -} - -const char *guess_ru(const char *buf, int len) -{ - if (dfa_validate_utf8(buf, len)) - return "UTF-8"; - return is_win_charset2((const unsigned char *) buf, len); + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } - diff --git a/src/libguess/russian_tab.c b/src/libguess/russian_tab.c deleted file mode 100644 index 6b9fd10..0000000 --- a/src/libguess/russian_tab.c +++ /dev/null @@ -1,899 +0,0 @@ -static const lng_stat2 enc_koi[]={ -{'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970}, -{'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, -{'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000}, {'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120}, -{'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128}, -{'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, -{'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397}, -{'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000}, {'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',0.778151,1.041393,-2.000000}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, -{'','',1.672098,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, -{'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, -{'','',2.071882,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, -{'','',1.568202,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, -{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000}, -{'','',0.602060,-2.000000,0.845098}, {'','',2.093422,1.518514,2.846955}, {'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, -{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, -{'','',1.716003,3.116940,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, -{'','',1.462398,-2.000000,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394}, -{'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, -{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188}, -{'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000}, -{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, -{'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, -{'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000}, -{'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.181844,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, -{'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.406881,1.079181,2.103804}, -{'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, -{'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, -{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426}, {'','',3.360593,1.568202,1.079181}, -{'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121}, -{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, -{'','',-2.000000,-2.000000,0.301030}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.792392,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, -{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121}, -{'','',1.732394,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966}, -{'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568}, -{'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000}, -{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785}, {'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, -{'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, -{'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000}, -{'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',2.315970,0.954243,2.600973}, -{'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000}, -{'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374}, -{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071}, -{'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',2.866287,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',1.146128,0.000000,0.602060}, -{'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273}, {'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063}, {'','',3.363424,0.000000,2.735599}, -{'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',3.244772,-2.000000,2.688420}, -{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485}, {'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.539452,2.184691,1.579784}, -{'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, -{'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784}, {'','',2.907949,2.474216,1.944483}, -{'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',1.944483,-2.000000,1.707570}, -{'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, -{'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, -{'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.527630,0.000000,1.954243}, {'','',2.247973,1.113943,2.540329}, {'','',4.153266,3.863620,3.359835}, -{'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970}, {'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181}, {'','',4.150449,2.653213,3.242293}, -{'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422}, {'','',2.164353,-2.000000,-2.000000}, -{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000}, {'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018}, {'','',2.193125,0.000000,0.477121}, -{'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, -{'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, -{'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',-2.000000,3.283527,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, -{'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, -{'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000}, -{'','',1.431364,-2.000000,0.000000}, {'','',2.584331,1.518514,3.410440}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940}, -{'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, -{'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078}, -{'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784}, {'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000}, {'','',3.448242,2.468347,1.301030}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, -{'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, -{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',1.591065,0.698970,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',1.812913,1.431364,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, -{'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',0.477121,1.857332,-2.000000}, -{'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742}, -{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, -{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.509203,-2.000000,0.301030}, -{'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000}, -{'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970}, {'','',3.412124,-2.000000,1.812913}, -{'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',0.602060,-2.000000,2.361728}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, -{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, -{'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000}, {'','',3.361161,2.567026,0.301030}, -{'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000}, -{'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.000000,2.056905,0.903090}, -{'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, -{'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, -{'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.255273,-2.000000,1.903090}, -{'','',3.780389,2.989450,2.786751}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, -{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560}, -{'','',2.752048,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970}, {'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.544068,0.778151,0.698970}, {'','',1.949390,-2.000000,0.698970}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',2.187521,0.698970,-2.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.505150,-2.000000,0.477121}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, -{'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128}, {'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, -{'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305}, -{'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397}, {'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000}, -{'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',3.235528,-2.000000,3.228144}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',2.884795,1.301030,0.602060}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, -{'','',2.269513,1.973128,2.103804}, {'','',3.408749,2.796574,1.973128}, {'','',3.176959,2.136721,3.241546}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, -{'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',2.975432,-2.000000,3.740994}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, -{'','',3.684756,1.591065,1.612784}, {'','',3.977312,1.838849,2.736397}, {'','',3.967501,1.698970,3.025715}, {'','',3.457125,-2.000000,2.478566}, {'','',2.012837,-2.000000,-2.000000}, {'','',2.847573,-2.000000,1.322219}, {'','',3.496653,-2.000000,1.939519}, {'','',0.778151,1.041393,-2.000000}, -{'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, -{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, -{'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.071882,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, -{'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',0.954243,-2.000000,-2.000000}, {'','',2.064458,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, -{'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',2.448706,-2.000000,3.211654}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.071882,-2.000000,-2.000000}, -{'','',2.123852,-2.000000,-2.000000}, {'','',2.068186,1.724276,1.113943}, {'','',3.068186,3.948217,3.158965}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, -{'','',2.625312,-2.000000,-2.000000}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',2.882525,1.785330,0.954243}, -{'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000}, {'','',0.602060,-2.000000,0.845098}, -{'','',2.093422,1.518514,2.846955}, {'','',1.113943,-2.000000,0.301030}, {'','',3.072985,1.939519,3.070038}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.966142,2.863323,2.898176}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',2.882525,1.785330,0.954243}, -{'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',-2.000000,0.477121,0.778151}, {'','',1.568202,0.477121,2.597695}, {'','',1.662758,2.060698,0.000000}, {'','',0.602060,-2.000000,0.845098}, -{'','',2.093422,1.518514,2.846955}, {'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.431364,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, -{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',1.716003,3.116940,-2.000000}, -{'','',2.831230,3.243782,-2.000000}, {'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, -{'','',2.149219,2.079181,0.954243}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, -{'','',2.204120,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, -{'','',2.378398,-2.000000,-2.000000}, {'','',2.678518,2.453318,2.550228}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',1.716003,3.116940,-2.000000}, {'','',2.831230,3.243782,-2.000000}, -{'','',2.887054,1.579784,3.237795}, {'','',2.993436,2.401401,2.866878}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.330414,1.204120,2.632457}, -{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394}, {'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011}, -{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, -{'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188}, {'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370}, -{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.330414,1.204120,2.632457}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',2.627366,0.301030,3.066326}, {'','',3.936262,2.687529,2.945469}, -{'','',2.977266,3.058046,3.325926}, {'','',1.819544,0.000000,1.732394}, {'','',3.832445,3.449324,2.363612}, {'','',2.981366,2.565848,2.936011}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, -{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',2.841359,-2.000000,2.127105}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, -{'','',2.637490,-2.000000,-2.000000}, {'','',3.389166,2.158362,2.212188}, {'','',3.679610,2.413300,2.906335}, {'','',3.492621,1.716003,3.151370}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',3.590396,-2.000000,1.799341}, {'','',2.772322,2.448706,2.578639}, -{'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, -{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.105169,-2.000000,-2.000000}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',2.477121,0.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',-2.000000,1.462398,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126}, -{'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, -{'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',2.181844,-2.000000,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, {'','',0.301030,0.000000,0.000000}, {'','',3.289589,2.103804,2.824126}, -{'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, -{'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',1.000000,1.579784,-2.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',1.397940,0.845098,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',2.181844,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, -{'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, -{'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, -{'','',0.301030,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, -{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',2.630428,2.725912,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, -{'','',3.406881,1.079181,2.103804}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, -{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389}, -{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426}, -{'','',3.360593,1.568202,1.079181}, {'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',1.342423,0.954243,2.897077}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.406881,1.079181,2.103804}, -{'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.743510,-2.000000,1.812913}, {'','',3.038223,2.281033,2.232996}, {'','',3.008600,2.872156,3.443263}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, -{'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',2.866878,-2.000000,3.425208}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, -{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.949878,1.146128,0.778151}, {'','',3.806994,2.618048,2.845718}, {'','',-2.000000,-2.000000,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.402089,3.567497,2.037426}, {'','',3.360593,1.568202,1.079181}, -{'','',1.079181,-2.000000,-2.000000}, {'','',2.721811,1.724276,1.518514}, {'','',3.547405,-2.000000,2.677607}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121}, -{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, -{'','',-2.000000,-2.000000,0.301030}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.792392,-2.000000,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, {'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, -{'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.792392,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, -{'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121}, {'','',1.732394,-2.000000,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.964919,3.984122,3.731830}, {'','',1.886491,-2.000000,-2.000000}, -{'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, -{'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, -{'','',3.261501,3.144574,3.448088}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.547775,2.082785,0.477121}, {'','',1.732394,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000}, -{'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, -{'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785}, -{'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',4.028083,2.858537,3.912966}, -{'','',1.732394,1.602060,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',0.903090,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',0.698970,-2.000000,0.477121}, {'','',3.966892,3.456366,4.024568}, -{'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.571592,1.690196,3.195069}, {'','',3.772835,-2.000000,-2.000000}, -{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',2.894870,1.477121,-2.000000}, {'','',2.017033,-2.000000,-2.000000}, {'','',4.066214,1.732394,3.082785}, {'','',3.395501,1.857332,2.587711}, {'','',1.924279,-2.000000,1.176091}, {'','',1.505150,-2.000000,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, -{'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, -{'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000}, -{'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',3.729813,3.633771,3.109241}, -{'','',1.819544,-2.000000,0.477121}, {'','',1.690196,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',1.322219,-2.000000,0.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',3.206826,3.250664,3.673113}, -{'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.530200,2.227887,2.985875}, {'','',2.475671,2.089905,-2.000000}, -{'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.531479,-2.000000,-2.000000}, {'','',1.991226,-2.000000,2.130334}, {'','',3.191171,3.276462,2.357935}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784}, -{'','',3.885700,4.392978,3.638689}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, -{'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, -{'','',1.690196,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071}, {'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, -{'','',2.866287,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, -{'','',2.021189,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',1.000000,-2.000000,-2.000000}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, -{'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.719331,1.505150,3.569374}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',1.690196,-2.000000,-2.000000}, -{'','',1.255273,-2.000000,-2.000000}, {'','',3.227887,0.301030,3.521269}, {'','',3.922622,1.875061,3.260071}, {'','',1.778151,-2.000000,0.477121}, {'','',1.414973,-2.000000,-2.000000}, {'','',0.000000,0.477121,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',2.866287,-2.000000,-2.000000}, -{'','',-2.000000,-2.000000,0.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273}, -{'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, -{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',3.244772,-2.000000,2.688420}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485}, -{'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.539452,2.184691,1.579784}, {'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',2.107210,-2.000000,3.054613}, -{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',2.514548,1.732394,-2.000000}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',2.885361,1.748188,1.255273}, {'','',4.169674,2.836957,2.929419}, {'','',3.269980,2.445604,2.318063}, -{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, -{'','',3.244772,-2.000000,2.688420}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',3.853941,2.320146,1.908485}, {'','',4.293738,1.707570,3.375846}, {'','',0.000000,-2.000000,-2.000000}, -{'','',3.539452,2.184691,1.579784}, {'','',3.478278,2.245513,1.556303}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.756636,2.149219,0.000000}, {'','',3.779813,3.175222,0.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, -{'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784}, -{'','',2.907949,2.474216,1.944483}, {'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',3.467312,3.637189,2.209515}, {'','',2.387390,-2.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, -{'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',2.786041,2.619093,0.903090}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',1.826075,2.093422,1.612784}, -{'','',2.907949,2.474216,1.944483}, {'','',0.778151,1.176091,-2.000000}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, -{'','',1.944483,-2.000000,1.707570}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, -{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, -{'','',0.903090,-2.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.527630,0.000000,1.954243}, {'','',2.396199,-2.000000,2.143015}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',1.944483,-2.000000,1.707570}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.588832,0.845098,1.000000}, {'','',1.913814,0.000000,2.650308}, {'','',2.029384,0.602060,0.301030}, -{'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',1.826075,-2.000000,2.336460}, {'','',2.155336,2.988559,1.176091}, -{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',3.467904,2.214844,0.477121}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, -{'','',2.527630,0.000000,1.954243}, {'','',2.247973,1.113943,2.540329}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970}, -{'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, -{'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000}, -{'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018}, {'','',2.193125,0.000000,0.477121}, {'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',2.247973,1.113943,2.540329}, -{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',2.240549,-2.000000,-2.000000}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',2.187521,-2.000000,2.315970}, {'','',2.633468,-2.000000,1.812913}, {'','',2.423246,-2.000000,2.079181}, -{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',3.447778,2.491362,2.760422}, -{'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',3.033021,1.342423,0.301030}, {'','',3.130977,1.959041,-2.000000}, {'','',2.853090,0.000000,3.227115}, {'','',3.478566,2.406540,2.940018}, -{'','',2.193125,0.000000,0.477121}, {'','',2.892651,-2.000000,1.000000}, {'','',0.778151,0.301030,0.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',2.527630,-2.000000,0.778151}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, -{'','',1.939519,1.591065,-2.000000}, {'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, -{'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, -{'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000}, -{'','',-2.000000,3.283527,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',1.000000,1.763428,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',2.693727,2.298853,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, -{'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',3.035830,1.278754,4.148757}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, -{'','',2.924279,3.172311,2.450249}, {'','',-2.000000,2.004321,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',2.944483,-2.000000,3.992465}, {'','',2.578639,2.701568,2.563481}, {'','',-2.000000,1.591065,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',-2.000000,3.283527,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, -{'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, -{'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, -{'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000}, -{'','',1.431364,-2.000000,0.000000}, {'','',1.968483,1.845098,1.079181}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.954243,-2.000000,-2.000000}, -{'','',1.322219,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, -{'','',2.574031,-2.000000,-2.000000}, {'','',2.966142,2.569374,2.804139}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, -{'','',3.614686,1.977724,4.250152}, {'','',3.296007,3.418301,2.948413}, {'','',1.301030,-2.000000,-2.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',2.584331,1.518514,3.410440}, -{'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940}, {'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200}, -{'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, -{'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078}, {'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784}, -{'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000}, {'','',3.448242,2.468347,1.301030}, {'','',2.584331,1.518514,3.410440}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',1.176091,1.361728,-2.000000}, -{'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.121231,-2.000000,1.397940}, {'','',3.296884,2.769377,3.048053}, {'','',2.843855,2.580925,2.530200}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, -{'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',1.806180,1.255273,1.838849}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, -{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.366983,3.468938,1.919078}, {'','',2.942008,2.998695,2.117271}, {'','',2.585461,2.642465,1.579784}, {'','',3.348500,2.309630,1.819544}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.998695,1.146128,0.000000}, -{'','',3.448242,2.468347,1.301030}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000}, -{'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, -{'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',1.591065,0.698970,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.204120,1.255273,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, -{'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, -{'','',1.591065,0.698970,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, -{'','',1.812913,1.431364,-2.000000}, {'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, -{'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, -{'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000}, -{'','',0.477121,1.857332,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',1.812913,1.431364,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',2.361728,1.230449,-2.000000}, {'','',-2.000000,2.017033,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.812913,1.653213,1.113943}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, -{'','',3.110253,1.681241,2.832509}, {'','',-2.000000,0.903090,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.396199,1.477121,2.558709}, {'','',3.355068,3.777717,2.657056}, {'','',1.591065,3.207096,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',0.477121,1.857332,-2.000000}, -{'','',1.342423,0.602060,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742}, -{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, -{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.484300,-2.000000,0.477121}, {'','',2.539076,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, {'','',3.015779,-2.000000,2.685742}, -{'','',1.633468,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, -{'','',1.845098,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',2.612784,-2.000000,2.849419}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.685742,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',0.698970,-2.000000,-2.000000}, {'','',1.602060,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.509203,-2.000000,0.301030}, -{'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000}, -{'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970}, {'','',3.412124,-2.000000,1.812913}, -{'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',2.943495,-2.000000,0.000000}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, -{'','',2.509203,-2.000000,0.301030}, {'','',2.816241,0.000000,3.393224}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',1.653213,-2.000000,0.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.149219,-2.000000,0.698970}, -{'','',3.412124,-2.000000,1.812913}, {'','',2.315970,-2.000000,0.301030}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',2.858537,-2.000000,1.845098}, {'','',0.602060,-2.000000,2.361728}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, -{'','',1.000000,-2.000000,-2.000000}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, -{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000}, -{'','',3.361161,2.567026,0.301030}, {'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',0.602060,-2.000000,2.361728}, -{'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',3.019532,-2.000000,1.255273}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, -{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.797268,0.903090,2.796574}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, -{'','',3.008174,2.149219,2.641474}, {'','',2.359835,-2.000000,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',2.257679,-2.000000,3.261263}, {'','',2.983626,0.903090,2.212188}, {'','',1.755875,-2.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, -{'','',1.832509,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474}, -{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.903090,-2.000000,0.000000}, {'','',3.643749,2.823474,3.224792}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',1.176091,2.017033,-2.000000}, -{'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.000000,2.056905,0.903090}, -{'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, -{'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.477121,1.255273,-2.000000}, {'','',0.301030,1.662758,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, -{'','',0.000000,2.056905,0.903090}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, -{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',-2.000000,1.204120,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.000000,1.113943,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, -{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000}, -{'','',1.255273,-2.000000,1.903090}, {'','',3.025306,1.079181,1.897627}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.255273,-2.000000,1.903090}, {'','',3.780389,2.989450,2.786751}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',2.752048,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.780389,2.989450,2.786751}, -{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, -{'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.698970,0.477121,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',2.752048,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000} -}; - -static const lng_stat2 enc_win[]={ -{'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, -{'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, -{'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, -{'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, -{'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, -{'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, -{'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, -{'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, -{'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, -{'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, -{'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, {'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',3.068557,3.068928,2.720986}, -{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, -{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, -{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, -{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, -{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, -{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, {'','',2.727541,2.992995,-2.000000}, -{'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030}, -{'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,2.017033,-2.000000}, -{'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, {'','',0.477121,1.857332,-2.000000}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000}, -{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000}, -{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, -{'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, -{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, -{'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, -{'','',2.678518,2.453318,2.550228}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, -{'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, -{'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, -{'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, -{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, -{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, -{'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, -{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, -{'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, -{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, -{'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, -{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, -{'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, -{'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, -{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, -{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, -{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, -{'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, -{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, -{'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, -{'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, -{'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, -{'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, -{'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',2.439333,1.414973,0.000000}, -{'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, -{'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, -{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, -{'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, -{'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.158362,-2.000000,0.698970}, {'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000}, -{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, -{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, -{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, -{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, -{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, -{'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, -{'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, -{'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, -{'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, -{'','',3.571592,1.690196,3.195069}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, -{'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, -{'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, -{'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, -{'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, -{'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, -{'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, -{'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, -{'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, -{'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, -{'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, -{'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, -{'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, -{'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, -{'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, -{'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, -{'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, -{'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, -{'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, -{'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, -{'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, -{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, -{'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, -{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, -{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, -{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, -{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, -{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, -{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, -{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, -{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, -{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, -{'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, {'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, -{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, -{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, -{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, -{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, -{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, -{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, -{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',0.301030,2.826075,-2.000000}, -{'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, -{'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, {'','',2.693727,2.298853,-2.000000}, -{'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, {'','',-2.000000,3.283527,-2.000000}, -{'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, -{'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, -{'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, -{'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, -{'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, -{'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, -{'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, -{'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, -{'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, -{'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, -{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, -{'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, -{'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, -{'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, -{'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, -{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, -{'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, -{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, -{'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, -{'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, -{'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, -{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, -{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, -{'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, -{'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, -{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, -{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, -{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, -{'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, {'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.149219,-2.000000,0.698970}, -{'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000}, -{'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.858537,-2.000000,1.845098}, -{'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, -{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, -{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000}, -{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, -{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, -{'','',0.477121,1.255273,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, -{'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, -{'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, -{'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, -{'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, -{'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, -{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, -{'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, -{'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, -{'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, -{'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, -{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, -{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, -{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, -{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, -{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, -{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, -{'','',2.638489,3.002166,2.585461}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',1.397940,0.845098,0.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, -{'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, -{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, -{'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, -{'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, -{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, -{'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, -{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, -{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, -{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, -{'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, -{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, -{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, -{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000}, -{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, -{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, -{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, -{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, -{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, -{'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, -{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, -{'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, -{'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, -{'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, -{'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, -{'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, -{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, -{'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, -{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, -{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, -{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, -{'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, -{'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, -{'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, -{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, -{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, -{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, -{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, -{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, -{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, -{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, -{'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, -{'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, -{'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, -{'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, -{'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, -{'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, -{'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, -{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, -{'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, -{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, {'','',2.966142,2.863323,2.898176}, -{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, -{'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, -{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, -{'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, -{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, -{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000}, -{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, -{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',0.778151,0.698970,0.477121}, -{'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000}, -{'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.949390,-2.000000,0.698970}, -{'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, -{'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, -{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460} -}; - -static const lng_stat2 enc_alt[]={ -{'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, -{'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, -{'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, -{'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, -{'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, {'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, -{'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, {'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, -{'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, {'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, -{'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, -{'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, {'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, -{'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, {'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, -{'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, {'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',3.068557,3.068928,2.720986}, -{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, -{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, -{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, -{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, -{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, -{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, {'','',2.727541,2.992995,-2.000000}, -{'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, {'','',1.397940,2.607455,0.301030}, -{'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, {'','',-2.000000,2.017033,-2.000000}, -{'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, {'','',0.477121,1.857332,-2.000000}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000}, -{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, {'','',2.638489,3.002166,2.585461}, -{'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.397940,0.845098,0.000000}, -{'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, -{'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, -{'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, -{'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, -{'','',2.678518,2.453318,2.550228}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, {'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, -{'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, {'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, -{'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, -{'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, {'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, -{'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, -{'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, -{'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, -{'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, -{'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, {'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, -{'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, {'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, -{'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, {'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, -{'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, -{'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, {'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, -{'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, -{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, -{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, -{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, -{'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, {'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, -{'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, {'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, -{'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, -{'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, -{'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, -{'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, -{'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',2.439333,1.414973,0.000000}, -{'','',3.192567,1.929419,1.342423}, {'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, -{'','',2.622214,-2.000000,3.564548}, {'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, -{'','',3.790778,3.201943,1.462398}, {'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, -{'','',2.721811,1.724276,1.518514}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',2.861534,-2.000000,-2.000000}, {'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, -{'','',1.380211,1.845098,0.602060}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.158362,-2.000000,0.698970}, {'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000}, -{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, -{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, -{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, -{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, -{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, -{'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, {'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, -{'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, -{'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, -{'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, -{'','',3.571592,1.690196,3.195069}, {'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, -{'','',1.924279,-2.000000,1.176091}, {'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, -{'','',3.772835,-2.000000,-2.000000}, {'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, -{'','',0.778151,-2.000000,-2.000000}, {'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, -{'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, -{'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, -{'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, {'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, -{'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, {'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, -{'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, {'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, -{'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, -{'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, -{'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, -{'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, -{'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, {'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, -{'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, -{'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, -{'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, -{'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, -{'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, -{'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, -{'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, {'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, -{'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, {'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, -{'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, {'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, -{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, -{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, -{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, -{'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, -{'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, {'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, -{'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, -{'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, {'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, -{'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, {'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, -{'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, {'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, -{'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, {'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, -{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, -{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, -{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, -{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, -{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, -{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, -{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, {'','',0.301030,2.826075,-2.000000}, -{'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, {'','',3.431364,3.030195,-2.000000}, -{'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, {'','',2.693727,2.298853,-2.000000}, -{'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, {'','',-2.000000,3.283527,-2.000000}, -{'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, -{'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, -{'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, -{'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, -{'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, {'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, -{'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, {'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, -{'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, -{'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, {'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, -{'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, -{'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, -{'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, -{'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, -{'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, {'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, -{'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, {'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, -{'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, {'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, -{'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, -{'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, {'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, -{'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, {'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, -{'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, -{'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',3.066326,2.742725,2.705008}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, -{'','',2.313867,2.056905,-2.000000}, {'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, -{'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, -{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, -{'','',2.966142,2.863323,2.898176}, {'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, -{'','',0.845098,-2.000000,-2.000000}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, -{'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, -{'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, -{'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, -{'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, {'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, {'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, -{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, -{'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, {'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, {'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.332438,-2.000000,-2.000000}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, {'','',2.149219,-2.000000,0.698970}, -{'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, {'','',0.000000,-2.000000,0.000000}, -{'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, {'','',2.858537,-2.000000,1.845098}, -{'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, -{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, -{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000}, -{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, -{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, -{'','',0.477121,1.255273,-2.000000}, {'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, -{'','',2.683047,0.903090,3.158664}, {'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, -{'','',0.778151,0.698970,0.477121}, {'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, -{'','',1.602060,0.602060,-2.000000}, {'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.949390,-2.000000,0.698970}, {'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, -{'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, -{'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, -{'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, {'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, -{'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, {'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, -{'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, {'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, -{'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460}, {'','',1.000000,0.301030,-2.000000}, {'','',3.413300,1.875061,1.361728}, {'','',3.977312,1.838849,2.736397}, {'','',3.408749,2.796574,1.973128}, {'','',3.763802,2.344392,2.903090}, {'','',3.633468,-2.000000,2.471292}, -{'','',3.684756,1.591065,1.612784}, {'','',3.967501,1.698970,3.025715}, {'','',2.733197,1.278754,1.903090}, {'','',3.228144,1.414973,2.965672}, {'','',3.958277,1.959041,3.930847}, {'','',4.249565,2.519828,3.943939}, {'','',3.908163,2.198657,3.569023}, {'','',4.014100,2.487138,3.176959}, -{'','',2.056905,-2.000000,-2.000000}, {'','',3.446848,1.863323,1.278754}, {'','',3.877717,2.579784,2.348305}, {'','',4.081671,1.806180,3.422590}, {'','',4.141356,1.763428,2.619093}, {'','',2.565848,0.903090,0.954243}, {'','',2.269513,1.973128,2.103804}, {'','',3.176959,2.136721,3.241546}, -{'','',2.884795,1.301030,0.602060}, {'','',3.496653,-2.000000,1.939519}, {'','',3.457125,-2.000000,2.478566}, {'','',2.847573,-2.000000,1.322219}, {'','',2.012837,-2.000000,-2.000000}, {'','',3.235528,-2.000000,3.228144}, {'','',2.975432,-2.000000,3.740994}, {'','',3.068557,3.068928,2.720986}, -{'','',1.477121,-2.000000,-2.000000}, {'','',2.123852,-2.000000,-2.000000}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.602060,0.698970,-2.000000}, {'','',3.472756,3.539452,3.207634}, {'','',2.071882,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',3.395326,2.294466,1.602060}, -{'','',2.525045,-2.000000,-2.000000}, {'','',3.181558,3.016197,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',3.094471,-2.000000,-2.000000}, {'','',3.536558,3.511349,2.667453}, {'','',3.399328,3.090258,0.698970}, {'','',2.815578,-2.000000,0.301030}, {'','',1.041393,-2.000000,-2.000000}, -{'','',3.124504,3.405176,2.411620}, {'','',2.064458,-2.000000,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, {'','',1.414973,-2.000000,-2.000000}, {'','',2.859739,-2.000000,-2.000000}, {'','',2.625312,-2.000000,-2.000000}, {'','',3.068186,3.948217,3.158965}, -{'','',2.068186,1.724276,1.113943}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.778151,1.041393,-2.000000}, {'','',2.448706,-2.000000,3.211654}, {'','',4.074999,3.519040,3.453318}, {'','',0.000000,1.322219,-2.000000}, {'','',0.698970,2.017033,-2.000000}, {'','',2.361728,1.230449,-2.000000}, -{'','',2.727541,2.992995,-2.000000}, {'','',4.066699,3.660581,2.998259}, {'','',-2.000000,0.903090,-2.000000}, {'','',1.591065,3.207096,-2.000000}, {'','',3.863739,3.320977,2.247973}, {'','',-2.000000,0.602060,-2.000000}, {'','',2.778151,2.184691,-2.000000}, {'','',3.317854,2.462398,0.000000}, -{'','',1.397940,2.607455,0.301030}, {'','',3.605197,2.956649,0.000000}, {'','',4.082642,3.811642,3.265525}, {'','',1.518514,3.107549,-2.000000}, {'','',2.837588,3.180986,0.845098}, {'','',3.298198,3.904445,-2.000000}, {'','',2.639486,2.374748,-2.000000}, {'','',3.110253,1.681241,2.832509}, -{'','',-2.000000,2.017033,-2.000000}, {'','',1.812913,1.431364,-2.000000}, {'','',1.973128,2.292256,-2.000000}, {'','',3.294466,0.301030,-2.000000}, {'','',1.342423,0.602060,-2.000000}, {'','',-2.000000,1.255273,0.000000}, {'','',3.355068,3.777717,2.657056}, {'','',2.396199,1.477121,2.558709}, -{'','',0.477121,1.857332,-2.000000}, {'','',0.000000,-2.000000,0.000000}, {'','',2.812913,1.653213,1.113943}, {'','',3.366236,2.911690,2.912222}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.000000,1.579784,-2.000000}, {'','',0.301030,0.000000,0.000000}, {'','',3.451633,2.836957,-2.000000}, -{'','',2.638489,3.002166,2.585461}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.289589,2.103804,2.824126}, {'','',2.510545,-2.000000,-2.000000}, {'','',3.471438,3.350442,1.000000}, {'','',1.880814,1.462398,-2.000000}, {'','',2.914343,2.181844,-2.000000}, {'','',3.696706,3.788734,4.167495}, -{'','',0.000000,-2.000000,-2.000000}, {'','',2.974512,3.319730,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',2.863323,2.681241,2.950365}, {'','',2.181844,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, -{'','',1.397940,0.845098,0.000000}, {'','',-2.000000,1.342423,-2.000000}, {'','',-2.000000,0.698970,-2.000000}, {'','',3.694078,3.769673,3.751818}, {'','',1.959041,-2.000000,-2.000000}, {'','',2.831230,3.243782,-2.000000}, {'','',1.431364,-2.000000,-2.000000}, {'','',1.991226,-2.000000,-2.000000}, -{'','',3.952889,3.690728,3.209515}, {'','',1.716003,3.116940,-2.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',3.807332,2.691965,3.193959}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.114944,-2.000000,-2.000000}, {'','',2.863917,3.046105,0.301030}, {'','',2.235528,1.113943,-2.000000}, -{'','',3.762978,2.660865,-2.000000}, {'','',3.771587,3.825621,2.952308}, {'','',2.378398,-2.000000,-2.000000}, {'','',3.305136,3.258637,0.778151}, {'','',2.974972,-2.000000,-2.000000}, {'','',2.758155,-2.000000,0.602060}, {'','',3.369772,3.279895,3.253822}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.204120,-2.000000,-2.000000}, {'','',2.900367,-2.000000,-2.000000}, {'','',2.161368,-2.000000,-2.000000}, {'','',2.451786,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.462398,-2.000000,-2.000000}, {'','',2.993436,2.401401,2.866878}, {'','',2.887054,1.579784,3.237795}, -{'','',2.149219,2.079181,0.954243}, {'','',2.678518,2.453318,2.550228}, {'','',2.008600,-2.000000,0.301030}, {'','',3.706206,-2.000000,1.623249}, {'','',3.679610,2.413300,2.906335}, {'','',3.832445,3.449324,2.363612}, {'','',3.936262,2.687529,2.945469}, {'','',2.977266,3.058046,3.325926}, -{'','',3.389166,2.158362,2.212188}, {'','',3.492621,1.716003,3.151370}, {'','',2.385606,-2.000000,1.724276}, {'','',3.347915,2.645422,3.588272}, {'','',3.484727,1.079181,2.975432}, {'','',4.184351,1.924279,3.542452}, {'','',3.766859,3.035830,3.818885}, {'','',4.348130,1.897627,3.212454}, -{'','',2.852480,-2.000000,-2.000000}, {'','',3.529430,2.190332,1.041393}, {'','',4.286007,1.908485,2.958564}, {'','',4.055417,3.351023,2.356026}, {'','',4.011105,-2.000000,3.914713}, {'','',2.637490,-2.000000,-2.000000}, {'','',1.819544,0.000000,1.732394}, {'','',2.981366,2.565848,2.936011}, -{'','',2.627366,0.301030,3.066326}, {'','',3.590396,-2.000000,1.799341}, {'','',3.600428,1.000000,1.176091}, {'','',2.873902,3.317854,-2.000000}, {'','',2.330414,1.204120,2.632457}, {'','',2.841359,-2.000000,2.127105}, {'','',3.521661,2.713491,2.460898}, {'','',2.230449,0.477121,-2.000000}, -{'','',-2.000000,0.000000,-2.000000}, {'','',1.204120,1.255273,-2.000000}, {'','',3.317854,2.593286,1.113943}, {'','',3.702086,3.590507,3.659155}, {'','',1.591065,0.698970,-2.000000}, {'','',3.510947,3.211121,2.501059}, {'','',2.484300,-2.000000,-2.000000}, {'','',1.838849,-2.000000,-2.000000}, -{'','',1.322219,0.845098,-2.000000}, {'','',3.432328,0.845098,-2.000000}, {'','',2.380211,0.845098,0.301030}, {'','',1.079181,1.414973,-2.000000}, {'','',1.672098,-2.000000,-2.000000}, {'','',1.748188,-2.000000,-2.000000}, {'','',3.165541,1.982271,2.728354}, {'','',0.000000,-2.000000,-2.000000}, -{'','',1.812913,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.995635,-2.000000,1.707570}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.704236,4.057514,2.970812}, {'','',2.653213,1.491362,-2.000000}, {'','',3.361161,2.567026,0.301030}, {'','',3.019532,-2.000000,1.255273}, -{'','',3.275542,2.953760,1.431364}, {'','',2.728354,2.808211,1.740363}, {'','',2.359835,-2.000000,-2.000000}, {'','',1.755875,-2.000000,-2.000000}, {'','',3.002166,1.748188,1.623249}, {'','',2.604226,-2.000000,-2.000000}, {'','',2.723456,2.518514,0.698970}, {'','',2.970347,1.518514,1.792392}, -{'','',3.494711,3.455454,0.477121}, {'','',3.147985,2.626340,1.857332}, {'','',2.833147,2.190332,-2.000000}, {'','',1.397940,-2.000000,-2.000000}, {'','',1.556303,0.000000,-2.000000}, {'','',3.008174,2.149219,2.641474}, {'','',1.000000,-2.000000,-2.000000}, {'','',1.591065,0.000000,-2.000000}, -{'','',1.230449,-2.000000,-2.000000}, {'','',1.832509,-2.000000,-2.000000}, {'','',2.983626,0.903090,2.212188}, {'','',2.257679,-2.000000,3.261263}, {'','',0.602060,-2.000000,2.361728}, {'','',2.797268,0.903090,2.796574}, {'','',2.439333,1.414973,0.000000}, {'','',3.192567,1.929419,1.342423}, -{'','',3.806994,2.618048,2.845718}, {'','',3.038223,2.281033,2.232996}, {'','',3.607777,2.783904,2.264818}, {'','',3.116276,1.924279,3.639088}, {'','',2.949878,1.146128,0.778151}, {'','',3.402089,3.567497,2.037426}, {'','',1.591065,0.000000,3.152594}, {'','',2.622214,-2.000000,3.564548}, -{'','',3.709948,1.397940,3.285107}, {'','',4.013932,3.042576,3.735200}, {'','',3.569842,3.169086,3.479575}, {'','',3.980776,3.046495,3.440594}, {'','',2.838849,1.255273,2.526339}, {'','',3.032619,2.332438,1.724276}, {'','',3.342028,2.133539,2.628389}, {'','',3.790778,3.201943,1.462398}, -{'','',4.052348,1.819544,3.426999}, {'','',1.690196,1.342423,0.000000}, {'','',2.743510,-2.000000,1.812913}, {'','',3.008600,2.872156,3.443263}, {'','',3.406881,1.079181,2.103804}, {'','',3.547405,-2.000000,2.677607}, {'','',3.360593,1.568202,1.079181}, {'','',2.721811,1.724276,1.518514}, -{'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',1.079181,-2.000000,-2.000000}, {'','',1.342423,0.954243,2.897077}, {'','',2.866878,-2.000000,3.425208}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',2.861534,-2.000000,-2.000000}, -{'','',0.778151,0.477121,-2.000000}, {'','',1.230449,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',2.390935,-2.000000,-2.000000}, {'','',1.681241,-2.000000,-2.000000}, {'','',2.204120,-2.000000,0.000000}, {'','',3.106191,-2.000000,1.278754}, {'','',1.380211,1.845098,0.602060}, -{'','',0.477121,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.235023,-2.000000,-2.000000}, {'','',2.955207,-2.000000,1.462398}, {'','',-2.000000,0.301030,-2.000000}, {'','',0.301030,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.158362,-2.000000,0.698970}, -{'','',2.792392,-2.000000,-2.000000}, {'','',2.662758,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.301030}, {'','',3.964919,3.984122,3.731830}, {'','',2.547775,2.082785,0.477121}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.568202,-2.000000,-2.000000}, -{'','',2.348305,2.626340,3.137671}, {'','',1.414973,-2.000000,-2.000000}, {'','',1.724276,-2.000000,-2.000000}, {'','',3.637990,2.773055,3.561101}, {'','',1.732394,-2.000000,-2.000000}, {'','',3.312600,2.755875,0.301030}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.108565,3.451326,0.000000}, -{'','',4.159627,3.917138,3.643156}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.417638,3.466571,0.698970}, {'','',2.821514,2.103804,2.885926}, {'','',2.846337,2.907411,1.954243}, {'','',3.261501,3.144574,3.448088}, {'','',1.819544,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, -{'','',1.886491,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',1.732394,-2.000000,-2.000000}, {'','',0.301030,0.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, -{'','',4.028083,2.858537,3.912966}, {'','',1.732394,1.602060,0.477121}, {'','',2.017033,-2.000000,-2.000000}, {'','',2.738781,1.361728,1.255273}, {'','',2.255273,-2.000000,-2.000000}, {'','',3.988247,3.382557,3.306211}, {'','',2.894870,1.477121,-2.000000}, {'','',1.924279,-2.000000,1.176091}, -{'','',3.966892,3.456366,4.024568}, {'','',3.082785,-2.000000,1.633468}, {'','',2.858537,-2.000000,1.230449}, {'','',1.838849,-2.000000,0.698970}, {'','',2.988559,-2.000000,0.000000}, {'','',4.113107,3.205475,3.793162}, {'','',2.257679,-2.000000,0.698970}, {'','',3.772835,-2.000000,-2.000000}, -{'','',2.397940,-2.000000,1.255273}, {'','',3.568788,2.906335,2.778151}, {'','',0.903090,-2.000000,-2.000000}, {'','',0.698970,-2.000000,0.477121}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.869232,-2.000000,-2.000000}, {'','',1.505150,-2.000000,-2.000000}, {'','',0.778151,-2.000000,-2.000000}, -{'','',3.395501,1.857332,2.587711}, {'','',4.066214,1.732394,3.082785}, {'','',-2.000000,0.000000,-2.000000}, {'','',3.045714,3.207096,2.748188}, {'','',3.571592,1.690196,3.195069}, {'','',3.729813,3.633771,3.109241}, {'','',1.819544,-2.000000,0.477121}, {'','',1.531479,-2.000000,-2.000000}, -{'','',0.778151,2.201397,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.929317,3.782974,2.762679}, {'','',0.845098,-2.000000,-2.000000}, {'','',3.206826,3.250664,3.673113}, {'','',2.544068,-2.000000,-2.000000}, {'','',2.775974,2.303196,-2.000000}, {'','',1.959041,-2.000000,1.113943}, -{'','',3.406881,3.586475,-2.000000}, {'','',3.767823,3.867585,2.830589}, {'','',2.552668,-2.000000,0.000000}, {'','',2.475671,2.089905,-2.000000}, {'','',2.620136,1.204120,0.000000}, {'','',1.716003,-2.000000,-2.000000}, {'','',2.914343,2.822822,3.715084}, {'','',1.322219,-2.000000,0.000000}, -{'','',-2.000000,0.301030,0.000000}, {'','',1.690196,-2.000000,-2.000000}, {'','',2.269513,0.778151,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, {'','',0.903090,0.845098,-2.000000}, {'','',3.191171,3.276462,2.357935}, {'','',1.991226,-2.000000,2.130334}, {'','',0.000000,-2.000000,-2.000000}, -{'','',2.530200,2.227887,2.985875}, {'','',3.928549,4.264794,3.813714}, {'','',1.724276,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',2.394452,-2.000000,1.477121}, {'','',2.908485,-2.000000,1.579784}, {'','',3.885700,4.392978,3.638689}, {'','',1.690196,-2.000000,-2.000000}, -{'','',1.778151,-2.000000,0.477121}, {'','',4.199042,3.678609,3.404320}, {'','',3.127429,-2.000000,0.602060}, {'','',2.641474,-2.000000,-2.000000}, {'','',0.903090,-2.000000,-2.000000}, {'','',3.932322,-2.000000,0.477121}, {'','',4.194570,3.766562,4.142202}, {'','',-2.000000,0.000000,-2.000000}, -{'','',2.093422,2.187521,0.301030}, {'','',3.021189,0.000000,1.672098}, {'','',3.141763,-2.000000,2.294466}, {'','',3.881556,3.212454,3.188366}, {'','',2.021189,-2.000000,-2.000000}, {'','',1.000000,-2.000000,-2.000000}, {'','',2.898176,-2.000000,1.113943}, {'','',2.866287,-2.000000,-2.000000}, -{'','',1.414973,-2.000000,-2.000000}, {'','',2.589950,-2.000000,-2.000000}, {'','',-2.000000,-2.000000,0.000000}, {'','',3.922622,1.875061,3.260071}, {'','',3.227887,0.301030,3.521269}, {'','',0.000000,0.477121,-2.000000}, {'','',2.315970,0.954243,2.600973}, {'','',3.719331,1.505150,3.569374}, -{'','',1.146128,0.000000,0.602060}, {'','',3.844664,3.655810,2.542825}, {'','',4.293738,1.707570,3.375846}, {'','',4.169674,2.836957,2.929419}, {'','',4.049489,3.417139,3.062582}, {'','',3.400883,-2.000000,3.684127}, {'','',3.853941,2.320146,1.908485}, {'','',3.539452,2.184691,1.579784}, -{'','',3.363424,0.000000,2.735599}, {'','',3.186391,1.959041,4.042260}, {'','',3.667173,3.072985,3.165541}, {'','',4.262949,1.681241,2.503791}, {'','',3.898451,1.556303,4.000911}, {'','',3.892707,3.879841,2.799341}, {'','',2.912753,-2.000000,-2.000000}, {'','',3.524785,3.064458,1.724276}, -{'','',4.208065,2.631444,2.874482}, {'','',4.229451,3.424555,2.734800}, {'','',4.078457,3.811575,3.498586}, {'','',2.448706,-2.000000,0.903090}, {'','',2.885361,1.748188,1.255273}, {'','',3.269980,2.445604,2.318063}, {'','',2.514548,1.732394,-2.000000}, {'','',3.779813,3.175222,0.000000}, -{'','',3.478278,2.245513,1.556303}, {'','',2.756636,2.149219,0.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.155336,-2.000000,-2.000000}, {'','',2.107210,-2.000000,3.054613}, {'','',3.244772,-2.000000,2.688420}, {'','',3.467312,3.637189,2.209515}, {'','',0.301030,-2.000000,-2.000000}, -{'','',3.575072,3.529302,1.819544}, {'','',3.294246,2.858537,1.770852}, {'','',2.494155,-2.000000,-2.000000}, {'','',3.021189,3.231979,-2.000000}, {'','',2.696356,0.845098,-2.000000}, {'','',3.748110,4.432617,1.991226}, {'','',2.863917,0.000000,0.301030}, {'','',3.667173,4.227475,0.301030}, -{'','',1.518514,1.740363,0.698970}, {'','',2.305351,2.296665,0.845098}, {'','',3.163758,3.064083,1.863323}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, {'','',2.387390,-2.000000,-2.000000}, {'','',1.977724,0.845098,-2.000000}, {'','',0.778151,1.176091,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',2.907949,2.474216,1.944483}, {'','',1.826075,2.093422,1.612784}, {'','',-2.000000,1.301030,-2.000000}, {'','',0.602060,0.301030,-2.000000}, {'','',2.786041,2.619093,0.903090}, {'','',4.153266,3.863620,3.359835}, {'','',2.582063,-2.000000,1.000000}, -{'','',3.130977,1.959041,-2.000000}, {'','',2.633468,-2.000000,1.812913}, {'','',3.213783,0.000000,1.113943}, {'','',4.201452,3.255031,2.961895}, {'','',3.033021,1.342423,0.301030}, {'','',2.193125,0.000000,0.477121}, {'','',4.150449,2.653213,3.242293}, {'','',3.053078,-2.000000,1.612784}, -{'','',2.485721,-2.000000,0.000000}, {'','',2.865104,-2.000000,0.845098}, {'','',3.480007,-2.000000,0.000000}, {'','',4.323293,3.246499,3.211921}, {'','',2.448706,-2.000000,-2.000000}, {'','',2.164353,-2.000000,-2.000000}, {'','',2.796574,0.698970,0.477121}, {'','',3.285332,1.778151,2.130334}, -{'','',3.701222,3.349666,2.875640}, {'','',2.187521,-2.000000,2.315970}, {'','',2.423246,-2.000000,2.079181}, {'','',2.240549,-2.000000,-2.000000}, {'','',2.527630,-2.000000,0.778151}, {'','',2.892651,-2.000000,1.000000}, {'','',2.079181,-2.000000,0.477121}, {'','',3.478566,2.406540,2.940018}, -{'','',2.853090,0.000000,3.227115}, {'','',0.778151,0.301030,0.000000}, {'','',2.247973,1.113943,2.540329}, {'','',3.447778,2.491362,2.760422}, {'','',3.278754,3.606596,2.835056}, {'','',0.903090,2.252853,-2.000000}, {'','',2.582063,3.634779,-2.000000}, {'','',0.301030,2.217484,-2.000000}, -{'','',0.301030,2.826075,-2.000000}, {'','',3.637990,3.666331,3.451940}, {'','',-2.000000,2.004321,-2.000000}, {'','',-2.000000,1.591065,-2.000000}, {'','',3.467756,3.235023,1.886491}, {'','',3.823279,3.562531,1.949390}, {'','',3.732474,3.664642,1.278754}, {'','',3.136403,3.402777,-2.000000}, -{'','',3.431364,3.030195,-2.000000}, {'','',3.380211,3.852419,1.447158}, {'','',3.541579,3.508530,-2.000000}, {'','',1.939519,2.773055,-2.000000}, {'','',3.262451,1.447158,1.380211}, {'','',4.418749,3.867939,2.510545}, {'','',2.924279,3.172311,2.450249}, {'','',1.000000,1.763428,-2.000000}, -{'','',2.693727,2.298853,-2.000000}, {'','',1.939519,1.591065,-2.000000}, {'','',2.837588,2.746634,-2.000000}, {'','',2.453318,0.778151,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',0.301030,1.968483,-2.000000}, {'','',2.578639,2.701568,2.563481}, {'','',2.944483,-2.000000,3.992465}, -{'','',-2.000000,3.283527,-2.000000}, {'','',1.913814,2.414973,2.413300}, {'','',3.035830,1.278754,4.148757}, {'','',4.056524,3.849051,3.357363}, {'','',1.929419,-2.000000,-2.000000}, {'','',3.817631,2.945961,2.017033}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.552668,-2.000000,-2.000000}, -{'','',3.929266,3.701654,3.580126}, {'','',0.301030,-2.000000,-2.000000}, {'','',1.301030,-2.000000,-2.000000}, {'','',3.849911,2.593286,3.589167}, {'','',3.285332,1.748188,-2.000000}, {'','',2.938520,0.845098,-2.000000}, {'','',1.995635,0.000000,0.602060}, {'','',3.668572,-2.000000,-2.000000}, -{'','',4.169469,3.974650,4.307582}, {'','',2.574031,-2.000000,-2.000000}, {'','',3.831614,3.288473,1.944483}, {'','',3.675137,0.000000,-2.000000}, {'','',2.564666,-2.000000,0.000000}, {'','',3.249932,3.153510,3.082785}, {'','',0.954243,-2.000000,-2.000000}, {'','',1.477121,-2.000000,-2.000000}, -{'','',2.262451,-2.000000,-2.000000}, {'','',2.705864,-2.000000,0.000000}, {'','',1.544068,-2.000000,-2.000000}, {'','',0.301030,1.785330,-2.000000}, {'','',1.431364,-2.000000,0.000000}, {'','',3.296007,3.418301,2.948413}, {'','',3.614686,1.977724,4.250152}, {'','',1.968483,1.845098,1.079181}, -{'','',2.966142,2.569374,2.804139}, {'','',2.143015,-2.000000,0.845098}, {'','',3.198657,2.869232,1.491362}, {'','',2.942008,2.998695,2.117271}, {'','',3.296884,2.769377,3.048053}, {'','',3.725667,3.130012,1.929419}, {'','',2.790285,1.913814,0.301030}, {'','',3.366983,3.468938,1.919078}, -{'','',2.585461,2.642465,1.579784}, {'','',1.707570,0.000000,0.698970}, {'','',2.161368,2.096910,2.281033}, {'','',3.323665,2.454845,2.276462}, {'','',3.574494,2.953276,3.309417}, {'','',3.549494,3.042182,1.949390}, {'','',2.825426,2.110590,1.934498}, {'','',0.845098,0.602060,-2.000000}, -{'','',3.218536,2.687529,1.832509}, {'','',3.388811,2.049218,1.716003}, {'','',3.356408,3.254548,1.778151}, {'','',3.512684,2.753583,3.243782}, {'','',1.838849,-2.000000,0.000000}, {'','',3.121231,-2.000000,1.397940}, {'','',2.843855,2.580925,2.530200}, {'','',1.176091,1.361728,-2.000000}, -{'','',3.448242,2.468347,1.301030}, {'','',3.348500,2.309630,1.819544}, {'','',2.998695,1.146128,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',2.584331,1.518514,3.410440}, {'','',1.806180,1.255273,1.838849}, {'','',2.772322,2.448706,2.578639}, {'','',2.342423,2.450249,1.579784}, -{'','',3.168203,2.825426,1.819544}, {'','',1.869232,1.491362,-2.000000}, {'','',0.477121,-2.000000,-2.000000}, {'','',1.322219,-2.000000,-2.000000}, {'','',2.250420,2.303196,-2.000000}, {'','',1.342423,2.000000,0.000000}, {'','',1.477121,-2.000000,0.301030}, {'','',1.041393,-2.000000,1.000000}, -{'','',1.623249,1.812913,1.973128}, {'','',3.105169,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',0.477121,0.903090,1.361728}, {'','',2.477121,0.000000,-2.000000}, {'','',-2.000000,1.462398,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.066326,2.742725,2.705008}, -{'','',0.301030,-2.000000,-2.000000}, {'','',2.630428,2.725912,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.414973,1.672098,2.149219}, {'','',2.618048,2.220108,2.615950}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.431364,2.698970,-2.000000}, {'','',2.313867,2.056905,-2.000000}, -{'','',3.050380,0.602060,-2.000000}, {'','',3.528402,3.602494,2.803457}, {'','',1.380211,-2.000000,-2.000000}, {'','',2.212188,2.515874,-2.000000}, {'','',2.021189,-2.000000,0.301030}, {'','',1.681241,0.301030,0.000000}, {'','',1.690196,2.396199,2.406540}, {'','',0.000000,-2.000000,-2.000000}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.255273,-2.000000,-2.000000}, {'','',0.602060,-2.000000,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',3.072985,1.939519,3.070038}, {'','',1.662758,2.060698,0.000000}, {'','',2.966142,2.863323,2.898176}, -{'','',2.882525,1.785330,0.954243}, {'','',2.657056,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.021189,-2.000000,-2.000000}, {'','',2.513218,0.477121,2.598791}, {'','',1.568202,0.477121,2.597695}, {'','',-2.000000,0.000000,-2.000000}, {'','',0.845098,-2.000000,-2.000000}, -{'','',1.342423,-2.000000,-2.000000}, {'','',2.093422,1.518514,2.846955}, {'','',0.602060,-2.000000,0.845098}, {'','',1.113943,-2.000000,0.301030}, {'','',-2.000000,0.477121,0.778151}, {'','',3.780389,2.989450,2.786751}, {'','',0.698970,0.477121,-2.000000}, {'','',-2.000000,0.000000,-2.000000}, -{'','',3.875235,3.684307,2.656098}, {'','',3.683047,2.659916,2.625312}, {'','',3.149835,-2.000000,-2.000000}, {'','',1.732394,1.447158,-2.000000}, {'','',0.954243,0.602060,-2.000000}, {'','',3.469233,-2.000000,-2.000000}, {'','',2.372912,2.401401,1.913814}, {'','',0.301030,2.584331,-2.000000}, -{'','',0.477121,-2.000000,-2.000000}, {'','',3.026533,4.056829,-2.000000}, {'','',2.737987,3.153205,2.791691}, {'','',0.000000,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.752048,-2.000000,-2.000000}, {'','',2.475671,2.071882,2.809560}, {'','',3.279211,2.887054,2.691081}, -{'','',0.000000,-2.000000,-2.000000}, {'','',1.176091,2.017033,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.643749,2.823474,3.224792}, {'','',3.631342,2.372912,2.641474}, {'','',3.269746,2.053078,-2.000000}, {'','',3.163758,2.348305,-2.000000}, {'','',2.053078,1.819544,-2.000000}, -{'','',3.232488,1.531479,-2.000000}, {'','',2.582063,1.681241,2.579784}, {'','',1.431364,1.462398,-2.000000}, {'','',0.778151,1.278754,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.612784,2.155336,-2.000000}, {'','',2.481443,2.763428,2.596597}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.113943,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.406540,0.301030,3.395326}, {'','',0.000000,-2.000000,-2.000000}, {'','',3.025306,1.079181,1.897627}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.372728,2.374748,3.407901}, {'','',3.316599,1.602060,2.278754}, -{'','',0.301030,0.000000,-2.000000}, {'','',2.238046,-2.000000,-2.000000}, {'','',1.230449,0.903090,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.204120,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.487138,1.204120,1.869232}, {'','',1.255273,-2.000000,1.903090}, -{'','',2.332438,-2.000000,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',2.649335,-2.000000,-2.000000}, {'','',2.943495,-2.000000,0.000000}, {'','',3.412124,-2.000000,1.812913}, {'','',2.509203,-2.000000,0.301030}, {'','',2.640481,-2.000000,0.954243}, {'','',1.556303,-2.000000,3.483730}, -{'','',2.149219,-2.000000,0.698970}, {'','',2.315970,-2.000000,0.301030}, {'','',1.544068,-2.000000,-2.000000}, {'','',2.100371,-2.000000,3.749350}, {'','',2.876218,-2.000000,2.082785}, {'','',3.609488,-2.000000,3.273927}, {'','',2.942504,-2.000000,3.455302}, {'','',2.800029,-2.000000,2.385606}, -{'','',0.000000,-2.000000,0.000000}, {'','',2.677607,-2.000000,-2.000000}, {'','',2.948902,-2.000000,0.477121}, {'','',3.303196,-2.000000,0.477121}, {'','',3.392873,-2.000000,1.716003}, {'','',1.361728,-2.000000,-2.000000}, {'','',2.816241,0.000000,3.393224}, {'','',1.913814,-2.000000,-2.000000}, -{'','',2.858537,-2.000000,1.845098}, {'','',3.165838,-2.000000,1.698970}, {'','',2.238046,-2.000000,0.301030}, {'','',1.653213,-2.000000,0.000000}, {'','',2.484300,-2.000000,0.477121}, {'','',1.342423,-2.000000,-2.000000}, {'','',2.225309,-2.000000,-2.000000}, {'','',1.959041,-2.000000,0.698970}, -{'','',3.015779,-2.000000,2.685742}, {'','',2.685742,-2.000000,-2.000000}, {'','',1.897627,-2.000000,2.413300}, {'','',0.477121,-2.000000,-2.000000}, {'','',3.671265,-2.000000,-2.000000}, {'','',2.960946,-2.000000,0.954243}, {'','',3.675778,-2.000000,-2.000000}, {'','',1.845098,-2.000000,-2.000000}, -{'','',0.602060,-2.000000,-2.000000}, {'','',3.559548,-2.000000,-2.000000}, {'','',2.530200,-2.000000,0.000000}, {'','',1.633468,-2.000000,-2.000000}, {'','',0.000000,-2.000000,-2.000000}, {'','',2.539076,-2.000000,-2.000000}, {'','',2.499687,-2.000000,-2.000000}, {'','',3.202488,-2.000000,-2.000000}, -{'','',1.602060,-2.000000,-2.000000}, {'','',0.698970,-2.000000,-2.000000}, {'','',1.963788,-2.000000,3.079543}, {'','',2.612784,-2.000000,2.849419}, {'','',0.000000,-2.000000,-2.000000}, {'','',-2.000000,1.204120,-2.000000}, {'','',-2.000000,1.477121,-2.000000}, {'','',0.477121,1.255273,-2.000000}, -{'','',0.845098,0.000000,-2.000000}, {'','',0.477121,1.698970,1.875061}, {'','',0.903090,2.220108,0.000000}, {'','',2.107210,1.977724,0.000000}, {'','',0.477121,1.230449,0.301030}, {'','',1.477121,1.643453,-2.000000}, {'','',-2.000000,1.875061,-2.000000}, {'','',2.683047,0.903090,3.158664}, -{'','',0.000000,1.113943,-2.000000}, {'','',2.214844,3.899437,1.397940}, {'','',0.301030,1.662758,-2.000000}, {'','',0.000000,2.056905,0.903090}, {'','',0.000000,1.113943,-2.000000}, {'','',0.301030,-2.000000,-2.000000}, {'','',3.050766,0.954243,0.000000}, {'','',0.778151,0.698970,0.477121}, -{'','',1.544068,0.778151,0.698970}, {'','',3.061075,2.643453,0.903090}, {'','',1.113943,-2.000000,-2.000000}, {'','',2.187521,0.698970,-2.000000}, {'','',1.505150,-2.000000,0.477121}, {'','',0.602060,-2.000000,0.477121}, {'','',2.240549,-2.000000,1.732394}, {'','',1.602060,0.602060,-2.000000}, -{'','',1.806180,1.278754,1.000000}, {'','',2.082785,1.845098,0.000000}, {'','',0.602060,0.000000,-2.000000}, {'','',2.093422,1.380211,0.301030}, {'','',2.803457,0.301030,0.477121}, {'','',2.645422,0.602060,2.965672}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.949390,-2.000000,0.698970}, -{'','',1.230449,-2.000000,-2.000000}, {'','',2.603144,-2.000000,1.204120}, {'','',1.863323,0.301030,-2.000000}, {'','',2.984077,-2.000000,0.000000}, {'','',0.602060,-2.000000,1.959041}, {'','',0.000000,-2.000000,-2.000000}, {'','',1.505150,1.633468,0.000000}, {'','',2.806858,2.477121,1.505150}, -{'','',2.588832,0.845098,1.000000}, {'','',3.294687,1.785330,2.336460}, {'','',2.583199,0.000000,0.000000}, {'','',2.716838,-2.000000,0.000000}, {'','',3.467904,2.214844,0.477121}, {'','',2.029384,0.602060,0.301030}, {'','',2.096910,0.477121,1.518514}, {'','',2.847573,1.690196,1.826075}, -{'','',3.255996,-2.000000,3.047275}, {'','',2.892095,1.322219,2.460898}, {'','',3.323458,1.322219,1.875061}, {'','',1.963788,0.477121,0.477121}, {'','',2.155336,2.988559,1.176091}, {'','',3.192846,2.487138,1.698970}, {'','',3.615740,0.301030,2.925828}, {'','',0.903090,-2.000000,0.000000}, -{'','',1.913814,0.000000,2.650308}, {'','',1.944483,-2.000000,1.707570}, {'','',2.527630,0.000000,1.954243}, {'','',1.886491,0.301030,-2.000000}, {'','',2.798651,1.278754,-2.000000}, {'','',2.396199,-2.000000,2.143015}, {'','',1.826075,-2.000000,2.336460} -}; - -static unsigned int indexes2=2367; -static unsigned int npow2=4096; diff --git a/src/libguess/test.c b/src/libguess/test.c new file mode 100644 index 0000000..8af51d8 --- /dev/null +++ b/src/libguess/test.c @@ -0,0 +1,34 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "libguess.h" + +int main(int argc, char **argv) +{ + FILE *fp; + char buf[1024 * 1024]; + + if (argc != 2) + exit(1); + + fp = fopen(*(argv + 1), "r"); + if (!fp) { + printf("cannot open file \"%s\"\n", *(argv + 1)); + exit(1); + } + + while (fgets(buf, 1024 * 1024 - 1, fp)) { +// printf("%s\n", buf); + printf("length = %d\n", strlen(buf)); + printf("jp = %s\n", guess_jp(buf, strlen(buf))); + printf("tw = %s\n", guess_tw(buf, strlen(buf))); + printf("cn = %s\n", guess_cn(buf, strlen(buf))); + printf("kr = %s\n", guess_kr(buf, strlen(buf))); + printf("ru = %s\n", guess_ru(buf, strlen(buf))); + printf("ar = %s\n", guess_ar(buf, strlen(buf))); + printf("tr = %s\n", guess_tr(buf, strlen(buf))); + printf("gr = %s\n", guess_gr(buf, strlen(buf))); + printf("hw = %s\n", guess_hw(buf, strlen(buf))); + } + fclose(fp); +} diff --git a/src/libguess/turkish_impl.c b/src/libguess/turkish_impl.c index 4ef3419..5c2bf81 100644 --- a/src/libguess/turkish_impl.c +++ b/src/libguess/turkish_impl.c @@ -1,25 +1,56 @@ #include "libguess.h" +#include "dfa.h" +#include "guess_tab.c" -static const char *_guess_tr(const unsigned char *ptr, int size) +/* precedence order */ +#define ORDER &utf8, &iso8859_9, &cp1254 + +/* common */ +const char *guess_tr(const char *buf, int buflen) { int i; + const char *rv = NULL; - for (i = 0; i < size; i++) - { - if (ptr[i] == 0x80 || - (ptr[i] >= 0x82 && ptr[i] <= 0x8C) || - (ptr[i] >= 0x91 && ptr[i] <= 0x9C) || - ptr[ i ] == 0x9F) - return "CP1254"; - } + /* encodings */ + guess_dfa cp1254 = DFA_INIT(guess_cp1253_st, guess_cp1253_ar, "CP1254"); + guess_dfa iso8859_9 = DFA_INIT(guess_iso8859_9_st, guess_iso8859_9_ar, "ISO-8859-9"); + guess_dfa utf8 = DFA_INIT(guess_utf8_st, guess_utf8_ar, "UTF-8"); - return "ISO-8859-9"; -} + guess_dfa *top = NULL; + guess_dfa *order[] = { ORDER, NULL }; -const char *guess_tr(const char *ptr, int size) -{ - if (dfa_validate_utf8(ptr, size)) - return "UTF-8"; + for (i = 0; i < buflen; i++) { + int c = (unsigned char) buf[i]; + + /* special treatment of BOM */ + if (i == 0 && c == 0xff) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xfe) + return UCS_2LE; + } + } + if (i == 0 && c == 0xfe) { + if (i < buflen - 1) { + c = (unsigned char) buf[i + 1]; + if (c == 0xff) + return UCS_2BE; + } + } + + rv = dfa_process(order, c); + if(rv) + return rv; + + if (dfa_none(order)) { + /* we ran out the possibilities */ + return NULL; + } + } - return _guess_tr((const unsigned char *)ptr, size); + top = dfa_top(order); + if (top) + return top->name; + else + return NULL; } |