From 4ee1266711b695852ec88f06784fd84400cd70bb Mon Sep 17 00:00:00 2001 From: short <> Date: Sun, 25 Nov 2001 22:00:37 +0000 Subject: [PATCH 1/1] :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 --- COPYING | 30 + Docs/Bugs | 16 + Docs/CREDITS | 127 + Docs/CodingStyle | 209 + Docs/DataCalls-QuickStart | 76 + Docs/FAQ | 114 + Docs/Makefile | 54 + Docs/README | 459 + Docs/README-2110 | 27 + Docs/README-3810 | 93 + Docs/README-6110 | 57 + Docs/README-WIN32 | 144 + Docs/README-dancall | 20 + Docs/gettext-howto | 102 + Docs/gnokii-6210-7110-IrDA | 87 + Docs/gnokii-ir-howto | 594 + Docs/gnokii.nol | Bin 0 -> 1028 bytes Docs/gnokii.xpm | 303 + Docs/logos.txt | 54 + Docs/man/gnokii.1 | 196 + Docs/man/gnokiid.8 | 63 + Docs/man/mgnokiidev.8 | 49 + Docs/man/todologo.1 | 56 + Docs/man/xgnokii.1x | 39 + Docs/packaging-howto | 142 + Docs/protocol/nk2110.txt | 200 + Docs/protocol/nk3110.txt | 231 + Docs/protocol/nk6110.txt | 664 + Docs/protocol/nk6160.txt | 98 + Docs/protocol/nk6185.txt | 52 + Docs/protocol/nk640.txt | 33 + Docs/protocol/nk7110.txt | 527 + Docs/protocol/nokia.txt | 280 + Docs/sample/gnokiirc | 34 + Docs/sample/options | 7 + Docs/sample/pap-secrets | 1 + Docs/sample/ppp-6210-modem | 11 + Docs/sample/ppp-gnokii | 9 + Docs/sample/ppp-on | 9 + Docs/test.vcs | 33 + INSTALL | 54 + Makefile | 182 + Makefile.global.in | 77 + TODO | 45 + VERSION | 1 + common/Makefile | 71 + common/cfgreader.c | 322 + common/data/Makefile | 50 + common/data/at-emulator.c | 747 + common/data/datapump.c | 181 + common/data/rlp-common.c | 2091 +++ common/data/rlp-crc24.c | 116 + common/data/virtmodem.c | 380 + common/device.c | 196 + common/devices/Makefile | 49 + common/devices/tekram.c | 147 + common/devices/unixirda.c | 205 + common/devices/unixserial.c | 296 + common/fbus-6110-auth.c | 132 + common/fbus-6110-ringtones.c | 571 + common/fbus-6110.c | 4102 ++++++ common/gsm-api.c | 153 + common/gsm-bitmaps.c | 253 + common/gsm-common.c | 100 + common/gsm-encoding.c | 217 + common/gsm-error.c | 77 + common/gsm-filetypes.c | 1384 ++ common/gsm-networks.c | 445 + common/gsm-ringtones.c | 620 + common/gsm-sms.c | 782 ++ common/gsm-statemachine.c | 251 + common/links/Makefile | 47 + common/links/atbus.c | 197 + common/links/cbus.c | 423 + common/links/fbus-phonet.c | 312 + common/links/fbus.c | 587 + common/links/utils.c | 79 + common/mbus-2110.c | 1179 ++ common/mbus-6160.c | 1139 ++ common/mbus-640.c | 857 ++ common/misc.c | 129 + common/phones/Makefile | 52 + common/phones/atgen.c | 675 + common/phones/dc2711.c | 284 + common/phones/generic.c | 95 + common/phones/nk2110.c | 1313 ++ common/phones/nk3110.c | 1187 ++ common/phones/nk6100.c | 511 + common/phones/nk7110.c | 1638 +++ common/phones/nokia.c | 58 + common/vcal.lx | 188 + config/config.guess | 1298 ++ config/config.sub | 1375 ++ config/install-sh | 251 + configure.in | 526 + getopt/Makefile | 28 + getopt/getopt.c | 753 + getopt/getopt.h | 133 + getopt/getopt1.c | 184 + gnokii/Makefile | 69 + gnokii/gnokii.c | 3020 ++++ gnokiid/Makefile | 61 + gnokiid/gnokiid.c | 140 + include/cfgreader.h | 55 + include/config.h.in.in | 71 + include/data/at-emulator.h | 111 + include/data/datapump.h | 48 + include/data/rlp-common.h | 198 + include/data/rlp-crc24.h | 39 + include/data/virtmodem.h | 47 + include/device.h | 49 + include/devices/tekram.h | 77 + include/devices/unixirda.h | 71 + include/devices/unixserial.h | 57 + include/fbus-6110-auth.h | 38 + include/fbus-6110-ringtones.h | 142 + include/fbus-6110.h | 243 + include/gnokii.h | 257 + include/gsm-api.h | 57 + include/gsm-bitmaps.h | 48 + include/gsm-common.h | 715 + include/gsm-encoding.h | 41 + include/gsm-error.h | 84 + include/gsm-filetypes.h | 91 + include/gsm-networks.h | 49 + include/gsm-ringtones.h | 140 + include/gsm-sms.h | 387 + include/gsm-statemachine.h | 44 + include/links/atbus.h | 42 + include/links/cbus.h | 57 + include/links/fbus-phonet.h | 73 + include/links/fbus.h | 162 + include/links/utils.h | 5 + include/linuxirda.h | 223 + include/mbus-2110.h | 37 + include/mbus-6160.h | 203 + include/mbus-640.h | 128 + include/misc.h | 179 + include/phones/generic.h | 67 + include/phones/nk2110.h | 40 + include/phones/nk3110.h | 86 + include/phones/nk6100.h | 76 + include/phones/nk7110.h | 242 + include/phones/nokia.h | 40 + include/win32/getopt.h | 127 + include/win32/winserial.h | 10 + mkinstalldirs | 40 + packaging/Debian/README.debian | 7 + packaging/Debian/changelog | 50 + packaging/Debian/conffiles | 1 + packaging/Debian/control | 14 + packaging/Debian/copyright | 30 + packaging/Debian/docs | 13 + packaging/Debian/examples | 5 + packaging/Debian/files | 1 + packaging/Debian/manpages | 5 + packaging/Debian/menu | 1 + packaging/Debian/postinst | 8 + packaging/Debian/postinst.debhelper | 10 + packaging/Debian/postrm | 27 + packaging/Debian/postrm.debhelper | 3 + packaging/Debian/preinst | 11 + packaging/Debian/prerm.debhelper | 5 + packaging/Debian/rules | 90 + packaging/Debian/substvars | 1 + packaging/RedHat/gnokii.spec.in | 147 + packaging/Slackware/SlackBuild.in | 81 + packaging/Slackware/disk | 6 + packaging/make_dist | 38 + patches/IR-Dongles/README-Tekram_IRmate_210 | 20 + patches/IR-Dongles/device_tekram_irmate_210.c | 118 + po/Makefile.in.in | 217 + po/POTFILES.in | 34 + po/cs.po | 2554 ++++ po/de.po | 3185 +++++ po/et.po | 4112 ++++++ po/fi.po | 2559 ++++ po/it.po | 4052 ++++++ po/nl.po | 2643 ++++ po/pl.po | 3310 +++++ po/sk.po | 3579 +++++ po/sl.po | 4292 ++++++ smsd/ChangeLog | 3 + smsd/Makefile | 53 + smsd/README | 48 + smsd/db.c | 162 + smsd/db.h | 28 + smsd/lowlevel.c | 352 + smsd/lowlevel.h | 72 + smsd/sms.tables.sql | 15 + smsd/smsd.c | 286 + smsd/smsd.h | 33 + utils/Makefile | 50 + utils/mgnokiidev.c | 110 + utils/todologo | 102 + win32/Makefile | 31 + win32/getopt.c | 755 + win32/winserial.c | 545 + xgnokii/ChangeLog | 244 + xgnokii/Makefile | 188 + xgnokii/README.vcard | 12 + xgnokii/VERSION | 1 + xgnokii/docs/help/en_US/cables/cables.html | 25 + xgnokii/docs/help/en_US/config.html | 180 + xgnokii/docs/help/en_US/faq.html | 371 + xgnokii/docs/help/en_US/firmware/firmware.html | 1206 ++ xgnokii/docs/help/en_US/index.html | 39 + xgnokii/docs/help/en_US/irda/irda.html | 25 + xgnokii/docs/help/en_US/netmon/faq_net0.html | 593 + xgnokii/docs/help/en_US/netmon/faq_net1.html | 459 + xgnokii/docs/help/en_US/netmon/faq_net2.html | 2208 +++ xgnokii/docs/help/en_US/netmon/faq_net3.html | 1752 +++ xgnokii/docs/help/en_US/netmon/faq_net4.html | 1908 +++ xgnokii/docs/help/en_US/netmon/faq_net5.html | 1941 +++ xgnokii/docs/help/en_US/netmon/faq_net6.html | 1577 +++ xgnokii/docs/help/en_US/netmon/net_mon1.gif | Bin 0 -> 702 bytes xgnokii/docs/help/en_US/netmon/net_mon2.gif | Bin 0 -> 154 bytes xgnokii/docs/help/en_US/netmon/net_mon3.gif | Bin 0 -> 152 bytes xgnokii/docs/help/en_US/netmon/nm2_5110.gif | Bin 0 -> 228 bytes xgnokii/docs/help/en_US/netmon/nm_3210.gif | Bin 0 -> 392 bytes xgnokii/docs/help/en_US/netmon/nm_5110.gif | Bin 0 -> 374 bytes xgnokii/docs/help/en_US/netmon/nm_9110.gif | Bin 0 -> 392 bytes xgnokii/docs/help/en_US/netmon/tip.gif | Bin 0 -> 268 bytes xgnokii/docs/help/en_US/styl.css | 46 + .../docs/help/en_US/windows/calendar/index.html | 18 + .../docs/help/en_US/windows/contacts/index.html | 18 + xgnokii/docs/help/en_US/windows/dtmf/index.html | 18 + xgnokii/docs/help/en_US/windows/main/index.html | 18 + xgnokii/docs/help/en_US/windows/netmon/index.html | 26 + xgnokii/docs/help/en_US/windows/sms/index.html | 18 + .../docs/help/en_US/windows/speeddial/index.html | 18 + xgnokii/docs/help/en_US/windows/xkeyb/index.html | 18 + xgnokii/docs/help/pl_PL/calendar.html | 12 + xgnokii/docs/help/pl_PL/contacts.html | 12 + xgnokii/docs/help/pl_PL/dtmf.html | 12 + xgnokii/docs/help/pl_PL/index.html | 12 + xgnokii/docs/help/pl_PL/netmon.html | 20 + xgnokii/docs/help/pl_PL/netmon/dir0.gif | Bin 0 -> 123 bytes xgnokii/docs/help/pl_PL/netmon/dir1.gif | Bin 0 -> 142 bytes xgnokii/docs/help/pl_PL/netmon/glowna.htm | 71 + xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus.gif | Bin 0 -> 1576 bytes xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus2.gif | Bin 0 -> 1409 bytes xgnokii/docs/help/pl_PL/netmon/gsm/faq_loga.htm | 1061 ++ xgnokii/docs/help/pl_PL/netmon/gsm/faq_net0.htm | 709 + xgnokii/docs/help/pl_PL/netmon/gsm/faq_net1.htm | 611 + xgnokii/docs/help/pl_PL/netmon/gsm/faq_net2.htm | 2301 ++++ xgnokii/docs/help/pl_PL/netmon/gsm/faq_net3.htm | 1778 +++ xgnokii/docs/help/pl_PL/netmon/gsm/faq_net4.htm | 1922 +++ xgnokii/docs/help/pl_PL/netmon/gsm/faq_net5.htm | 1994 +++ xgnokii/docs/help/pl_PL/netmon/gsm/faq_net6.htm | 1618 +++ xgnokii/docs/help/pl_PL/netmon/gsm/faqkable.htm | 273 + xgnokii/docs/help/pl_PL/netmon/gsm/firmware.htm | 1206 ++ xgnokii/docs/help/pl_PL/netmon/gsm/index.htm | 20 + xgnokii/docs/help/pl_PL/netmon/gsm/net_mon1.gif | Bin 0 -> 702 bytes xgnokii/docs/help/pl_PL/netmon/gsm/net_mon2.gif | Bin 0 -> 154 bytes xgnokii/docs/help/pl_PL/netmon/gsm/net_mon3.gif | Bin 0 -> 152 bytes xgnokii/docs/help/pl_PL/netmon/gsm/net_spis.htm | 130 + xgnokii/docs/help/pl_PL/netmon/gsm/nm2_5110.gif | Bin 0 -> 228 bytes xgnokii/docs/help/pl_PL/netmon/gsm/nm_3210.gif | Bin 0 -> 392 bytes xgnokii/docs/help/pl_PL/netmon/gsm/nm_5110.gif | Bin 0 -> 374 bytes xgnokii/docs/help/pl_PL/netmon/gsm/nm_9110.gif | Bin 0 -> 392 bytes xgnokii/docs/help/pl_PL/netmon/gsm/tip.gif | Bin 0 -> 268 bytes xgnokii/docs/help/pl_PL/netmon/htm.gif | Bin 0 -> 130 bytes xgnokii/docs/help/pl_PL/netmon/index.htm | 18 + xgnokii/docs/help/pl_PL/netmon/konw.js | 20 + xgnokii/docs/help/pl_PL/netmon/spis.htm | 126 + xgnokii/docs/help/pl_PL/netmon/spis_d.htm | 17 + xgnokii/docs/help/pl_PL/netmon/spis_d2.htm | 17 + xgnokii/docs/help/pl_PL/netmon/spis_g.htm | 108 + xgnokii/docs/help/pl_PL/netmon/styl.css | 47 + xgnokii/docs/help/pl_PL/sms.html | 12 + xgnokii/docs/help/pl_PL/speeddial.html | 12 + xgnokii/docs/help/pl_PL/xkeyb.html | 12 + xgnokii/xgnokii.c | 2491 ++++ xgnokii/xgnokii.h | 68 + xgnokii/xgnokii_calendar.c | 1529 +++ xgnokii/xgnokii_calendar.h | 23 + xgnokii/xgnokii_cfg.c | 226 + xgnokii/xgnokii_cfg.h | 33 + xgnokii/xgnokii_common.c | 338 + xgnokii/xgnokii_common.h | 78 + xgnokii/xgnokii_contacts.c | 3459 +++++ xgnokii/xgnokii_contacts.h | 191 + xgnokii/xgnokii_data.c | 134 + xgnokii/xgnokii_data.h | 25 + xgnokii/xgnokii_dtmf.c | 342 + xgnokii/xgnokii_dtmf.h | 23 + xgnokii/xgnokii_logos.c | 1729 +++ xgnokii/xgnokii_logos.h | 39 + xgnokii/xgnokii_lowlevel.c | 1104 ++ xgnokii/xgnokii_lowlevel.h | 216 + xgnokii/xgnokii_netmon.c | 585 + xgnokii/xgnokii_netmon.h | 33 + xgnokii/xgnokii_sms.c | 1730 +++ xgnokii/xgnokii_sms.h | 27 + xgnokii/xgnokii_speed.c | 668 + xgnokii/xgnokii_speed.h | 23 + xgnokii/xgnokii_xkeyb.c | 302 + xgnokii/xgnokii_xkeyb.h | 23 + xgnokii/xpm/5110.xpm | 691 + xgnokii/xpm/6110.xpm | 682 + xgnokii/xpm/6110mini.xpm | 68 + xgnokii/xpm/6150.xpm | 663 + xgnokii/xpm/BCard.xpm | 26 + xgnokii/xpm/Black_point.xpm | 13 + xgnokii/xpm/Caller.xpm | 50 + xgnokii/xpm/Caller_logo.xpm | 31 + xgnokii/xpm/Check.xpm | 25 + xgnokii/xpm/Delete.xpm | 36 + xgnokii/xpm/Dial.xpm | 34 + xgnokii/xpm/Display.xpm | 115 + xgnokii/xpm/Duplicate.xpm | 36 + xgnokii/xpm/Edit.xpm | 37 + xgnokii/xpm/Edit_flip_horizontal.xpm | 26 + xgnokii/xpm/Edit_flip_vertical.xpm | 26 + xgnokii/xpm/Edit_invert.xpm | 26 + xgnokii/xpm/Flip.xpm | 24 + xgnokii/xpm/Forward.xpm | 24 + xgnokii/xpm/Green_pixel.xpm | 6 + xgnokii/xpm/Green_point.xpm | 13 + xgnokii/xpm/Invert.xpm | 46 + xgnokii/xpm/Names.xpm | 21 + xgnokii/xpm/New.xpm | 45 + xgnokii/xpm/NewBD.xpm | 47 + xgnokii/xpm/NewCall.xpm | 41 + xgnokii/xpm/NewMeet.xpm | 41 + xgnokii/xpm/NewRem.xpm | 43 + xgnokii/xpm/Op.xpm | 50 + xgnokii/xpm/Open.xpm | 47 + xgnokii/xpm/Operator_logo.xpm | 27 + xgnokii/xpm/Preview_3210.xpm | 510 + xgnokii/xpm/Preview_3310.xpm | 556 + xgnokii/xpm/Preview_5110.xpm | 420 + xgnokii/xpm/Preview_6110.xpm | 1609 +++ xgnokii/xpm/Preview_6150.xpm | 1546 +++ xgnokii/xpm/Preview_6210.xpm | 13746 +++++++++++++++++++ xgnokii/xpm/Preview_6250.xpm | 460 + xgnokii/xpm/Preview_7110.xpm | 1285 ++ xgnokii/xpm/Read.xpm | 41 + xgnokii/xpm/Reply.xpm | 24 + xgnokii/xpm/Save.xpm | 45 + xgnokii/xpm/Send.xpm | 50 + xgnokii/xpm/SendSMS.xpm | 24 + xgnokii/xpm/Startup.xpm | 50 + xgnokii/xpm/Startup_logo.xpm | 32 + xgnokii/xpm/Tool_brush.xpm | 26 + xgnokii/xpm/Tool_filled_rectangle.xpm | 24 + xgnokii/xpm/Tool_line.xpm | 24 + xgnokii/xpm/Tool_rectangle.xpm | 24 + xgnokii/xpm/alarm.xpm | 36 + xgnokii/xpm/background.xpm | 247 + xgnokii/xpm/info.xpm | 73 + xgnokii/xpm/logo.xpm | 369 + xgnokii/xpm/phone.xpm | 27 + xgnokii/xpm/quest.xpm | 86 + xgnokii/xpm/sim.xpm | 27 + xgnokii/xpm/sms.xpm | 159 + xgnokii/xpm/stop.xpm | 85 + 358 files changed, 144437 insertions(+) create mode 100644 COPYING create mode 100644 Docs/Bugs create mode 100644 Docs/CREDITS create mode 100644 Docs/CodingStyle create mode 100644 Docs/DataCalls-QuickStart create mode 100644 Docs/FAQ create mode 100644 Docs/Makefile create mode 100644 Docs/README create mode 100644 Docs/README-2110 create mode 100644 Docs/README-3810 create mode 100644 Docs/README-6110 create mode 100644 Docs/README-WIN32 create mode 100644 Docs/README-dancall create mode 100644 Docs/gettext-howto create mode 100644 Docs/gnokii-6210-7110-IrDA create mode 100644 Docs/gnokii-ir-howto create mode 100755 Docs/gnokii.nol create mode 100644 Docs/gnokii.xpm create mode 100644 Docs/logos.txt create mode 100644 Docs/man/gnokii.1 create mode 100644 Docs/man/gnokiid.8 create mode 100644 Docs/man/mgnokiidev.8 create mode 100644 Docs/man/todologo.1 create mode 100644 Docs/man/xgnokii.1x create mode 100644 Docs/packaging-howto create mode 100644 Docs/protocol/nk2110.txt create mode 100644 Docs/protocol/nk3110.txt create mode 100644 Docs/protocol/nk6110.txt create mode 100644 Docs/protocol/nk6160.txt create mode 100644 Docs/protocol/nk6185.txt create mode 100644 Docs/protocol/nk640.txt create mode 100644 Docs/protocol/nk7110.txt create mode 100644 Docs/protocol/nokia.txt create mode 100644 Docs/sample/gnokiirc create mode 100644 Docs/sample/options create mode 100644 Docs/sample/pap-secrets create mode 100755 Docs/sample/ppp-6210-modem create mode 100644 Docs/sample/ppp-gnokii create mode 100644 Docs/sample/ppp-on create mode 100644 Docs/test.vcs create mode 100644 INSTALL create mode 100644 Makefile create mode 100644 Makefile.global.in create mode 100644 TODO create mode 100644 VERSION create mode 100644 common/Makefile create mode 100644 common/cfgreader.c create mode 100644 common/data/Makefile create mode 100644 common/data/at-emulator.c create mode 100644 common/data/datapump.c create mode 100644 common/data/rlp-common.c create mode 100644 common/data/rlp-crc24.c create mode 100644 common/data/virtmodem.c create mode 100644 common/device.c create mode 100644 common/devices/Makefile create mode 100644 common/devices/tekram.c create mode 100644 common/devices/unixirda.c create mode 100644 common/devices/unixserial.c create mode 100644 common/fbus-6110-auth.c create mode 100644 common/fbus-6110-ringtones.c create mode 100644 common/fbus-6110.c create mode 100644 common/gsm-api.c create mode 100644 common/gsm-bitmaps.c create mode 100644 common/gsm-common.c create mode 100644 common/gsm-encoding.c create mode 100644 common/gsm-error.c create mode 100644 common/gsm-filetypes.c create mode 100644 common/gsm-networks.c create mode 100644 common/gsm-ringtones.c create mode 100644 common/gsm-sms.c create mode 100644 common/gsm-statemachine.c create mode 100644 common/links/Makefile create mode 100644 common/links/atbus.c create mode 100644 common/links/cbus.c create mode 100644 common/links/fbus-phonet.c create mode 100644 common/links/fbus.c create mode 100644 common/links/utils.c create mode 100644 common/mbus-2110.c create mode 100644 common/mbus-6160.c create mode 100644 common/mbus-640.c create mode 100644 common/misc.c create mode 100644 common/phones/Makefile create mode 100644 common/phones/atgen.c create mode 100644 common/phones/dc2711.c create mode 100644 common/phones/generic.c create mode 100644 common/phones/nk2110.c create mode 100644 common/phones/nk3110.c create mode 100644 common/phones/nk6100.c create mode 100644 common/phones/nk7110.c create mode 100644 common/phones/nokia.c create mode 100644 common/vcal.lx create mode 100755 config/config.guess create mode 100755 config/config.sub create mode 100755 config/install-sh create mode 100644 configure.in create mode 100644 getopt/Makefile create mode 100644 getopt/getopt.c create mode 100644 getopt/getopt.h create mode 100644 getopt/getopt1.c create mode 100644 gnokii/Makefile create mode 100644 gnokii/gnokii.c create mode 100644 gnokiid/Makefile create mode 100644 gnokiid/gnokiid.c create mode 100644 include/cfgreader.h create mode 100644 include/config.h.in.in create mode 100644 include/data/at-emulator.h create mode 100644 include/data/datapump.h create mode 100644 include/data/rlp-common.h create mode 100644 include/data/rlp-crc24.h create mode 100644 include/data/virtmodem.h create mode 100644 include/device.h create mode 100644 include/devices/tekram.h create mode 100644 include/devices/unixirda.h create mode 100644 include/devices/unixserial.h create mode 100644 include/fbus-6110-auth.h create mode 100644 include/fbus-6110-ringtones.h create mode 100644 include/fbus-6110.h create mode 100644 include/gnokii.h create mode 100644 include/gsm-api.h create mode 100644 include/gsm-bitmaps.h create mode 100644 include/gsm-common.h create mode 100644 include/gsm-encoding.h create mode 100644 include/gsm-error.h create mode 100644 include/gsm-filetypes.h create mode 100644 include/gsm-networks.h create mode 100644 include/gsm-ringtones.h create mode 100644 include/gsm-sms.h create mode 100644 include/gsm-statemachine.h create mode 100644 include/links/atbus.h create mode 100644 include/links/cbus.h create mode 100644 include/links/fbus-phonet.h create mode 100644 include/links/fbus.h create mode 100644 include/links/utils.h create mode 100644 include/linuxirda.h create mode 100644 include/mbus-2110.h create mode 100644 include/mbus-6160.h create mode 100644 include/mbus-640.h create mode 100644 include/misc.h create mode 100644 include/phones/generic.h create mode 100644 include/phones/nk2110.h create mode 100644 include/phones/nk3110.h create mode 100644 include/phones/nk6100.h create mode 100644 include/phones/nk7110.h create mode 100644 include/phones/nokia.h create mode 100644 include/win32/getopt.h create mode 100644 include/win32/winserial.h create mode 100644 mkinstalldirs create mode 100644 packaging/Debian/README.debian create mode 100644 packaging/Debian/changelog create mode 100644 packaging/Debian/conffiles create mode 100644 packaging/Debian/control create mode 100644 packaging/Debian/copyright create mode 100644 packaging/Debian/docs create mode 100644 packaging/Debian/examples create mode 100644 packaging/Debian/files create mode 100644 packaging/Debian/manpages create mode 100644 packaging/Debian/menu create mode 100644 packaging/Debian/postinst create mode 100644 packaging/Debian/postinst.debhelper create mode 100644 packaging/Debian/postrm create mode 100644 packaging/Debian/postrm.debhelper create mode 100644 packaging/Debian/preinst create mode 100644 packaging/Debian/prerm.debhelper create mode 100755 packaging/Debian/rules create mode 100644 packaging/Debian/substvars create mode 100644 packaging/RedHat/gnokii.spec.in create mode 100644 packaging/Slackware/SlackBuild.in create mode 100644 packaging/Slackware/disk create mode 100755 packaging/make_dist create mode 100644 patches/IR-Dongles/README-Tekram_IRmate_210 create mode 100644 patches/IR-Dongles/device_tekram_irmate_210.c create mode 100644 po/Makefile.in.in create mode 100644 po/POTFILES.in create mode 100644 po/cs.po create mode 100644 po/de.po create mode 100644 po/et.po create mode 100644 po/fi.po create mode 100644 po/it.po create mode 100644 po/nl.po create mode 100644 po/pl.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 smsd/ChangeLog create mode 100644 smsd/Makefile create mode 100644 smsd/README create mode 100644 smsd/db.c create mode 100644 smsd/db.h create mode 100644 smsd/lowlevel.c create mode 100644 smsd/lowlevel.h create mode 100644 smsd/sms.tables.sql create mode 100644 smsd/smsd.c create mode 100644 smsd/smsd.h create mode 100644 utils/Makefile create mode 100644 utils/mgnokiidev.c create mode 100644 utils/todologo create mode 100644 win32/Makefile create mode 100644 win32/getopt.c create mode 100644 win32/winserial.c create mode 100644 xgnokii/ChangeLog create mode 100644 xgnokii/Makefile create mode 100644 xgnokii/README.vcard create mode 100644 xgnokii/VERSION create mode 100644 xgnokii/docs/help/en_US/cables/cables.html create mode 100644 xgnokii/docs/help/en_US/config.html create mode 100644 xgnokii/docs/help/en_US/faq.html create mode 100644 xgnokii/docs/help/en_US/firmware/firmware.html create mode 100644 xgnokii/docs/help/en_US/index.html create mode 100644 xgnokii/docs/help/en_US/irda/irda.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net0.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net1.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net2.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net3.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net4.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net5.html create mode 100644 xgnokii/docs/help/en_US/netmon/faq_net6.html create mode 100644 xgnokii/docs/help/en_US/netmon/net_mon1.gif create mode 100644 xgnokii/docs/help/en_US/netmon/net_mon2.gif create mode 100644 xgnokii/docs/help/en_US/netmon/net_mon3.gif create mode 100644 xgnokii/docs/help/en_US/netmon/nm2_5110.gif create mode 100644 xgnokii/docs/help/en_US/netmon/nm_3210.gif create mode 100644 xgnokii/docs/help/en_US/netmon/nm_5110.gif create mode 100644 xgnokii/docs/help/en_US/netmon/nm_9110.gif create mode 100644 xgnokii/docs/help/en_US/netmon/tip.gif create mode 100644 xgnokii/docs/help/en_US/styl.css create mode 100644 xgnokii/docs/help/en_US/windows/calendar/index.html create mode 100644 xgnokii/docs/help/en_US/windows/contacts/index.html create mode 100644 xgnokii/docs/help/en_US/windows/dtmf/index.html create mode 100644 xgnokii/docs/help/en_US/windows/main/index.html create mode 100644 xgnokii/docs/help/en_US/windows/netmon/index.html create mode 100644 xgnokii/docs/help/en_US/windows/sms/index.html create mode 100644 xgnokii/docs/help/en_US/windows/speeddial/index.html create mode 100644 xgnokii/docs/help/en_US/windows/xkeyb/index.html create mode 100644 xgnokii/docs/help/pl_PL/calendar.html create mode 100644 xgnokii/docs/help/pl_PL/contacts.html create mode 100644 xgnokii/docs/help/pl_PL/dtmf.html create mode 100644 xgnokii/docs/help/pl_PL/index.html create mode 100644 xgnokii/docs/help/pl_PL/netmon.html create mode 100644 xgnokii/docs/help/pl_PL/netmon/dir0.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/dir1.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/glowna.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus2.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_loga.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net0.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net1.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net2.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net3.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net4.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net5.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faq_net6.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/faqkable.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/firmware.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/index.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/net_mon1.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/net_mon2.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/net_mon3.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/net_spis.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/nm2_5110.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/nm_3210.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/nm_5110.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/nm_9110.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/gsm/tip.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/htm.gif create mode 100644 xgnokii/docs/help/pl_PL/netmon/index.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/konw.js create mode 100644 xgnokii/docs/help/pl_PL/netmon/spis.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/spis_d.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/spis_d2.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/spis_g.htm create mode 100644 xgnokii/docs/help/pl_PL/netmon/styl.css create mode 100644 xgnokii/docs/help/pl_PL/sms.html create mode 100644 xgnokii/docs/help/pl_PL/speeddial.html create mode 100644 xgnokii/docs/help/pl_PL/xkeyb.html create mode 100644 xgnokii/xgnokii.c create mode 100644 xgnokii/xgnokii.h create mode 100644 xgnokii/xgnokii_calendar.c create mode 100644 xgnokii/xgnokii_calendar.h create mode 100644 xgnokii/xgnokii_cfg.c create mode 100644 xgnokii/xgnokii_cfg.h create mode 100644 xgnokii/xgnokii_common.c create mode 100644 xgnokii/xgnokii_common.h create mode 100644 xgnokii/xgnokii_contacts.c create mode 100644 xgnokii/xgnokii_contacts.h create mode 100644 xgnokii/xgnokii_data.c create mode 100644 xgnokii/xgnokii_data.h create mode 100644 xgnokii/xgnokii_dtmf.c create mode 100644 xgnokii/xgnokii_dtmf.h create mode 100644 xgnokii/xgnokii_logos.c create mode 100644 xgnokii/xgnokii_logos.h create mode 100644 xgnokii/xgnokii_lowlevel.c create mode 100644 xgnokii/xgnokii_lowlevel.h create mode 100644 xgnokii/xgnokii_netmon.c create mode 100644 xgnokii/xgnokii_netmon.h create mode 100644 xgnokii/xgnokii_sms.c create mode 100644 xgnokii/xgnokii_sms.h create mode 100644 xgnokii/xgnokii_speed.c create mode 100644 xgnokii/xgnokii_speed.h create mode 100644 xgnokii/xgnokii_xkeyb.c create mode 100644 xgnokii/xgnokii_xkeyb.h create mode 100644 xgnokii/xpm/5110.xpm create mode 100644 xgnokii/xpm/6110.xpm create mode 100644 xgnokii/xpm/6110mini.xpm create mode 100644 xgnokii/xpm/6150.xpm create mode 100644 xgnokii/xpm/BCard.xpm create mode 100644 xgnokii/xpm/Black_point.xpm create mode 100644 xgnokii/xpm/Caller.xpm create mode 100644 xgnokii/xpm/Caller_logo.xpm create mode 100644 xgnokii/xpm/Check.xpm create mode 100644 xgnokii/xpm/Delete.xpm create mode 100644 xgnokii/xpm/Dial.xpm create mode 100644 xgnokii/xpm/Display.xpm create mode 100644 xgnokii/xpm/Duplicate.xpm create mode 100644 xgnokii/xpm/Edit.xpm create mode 100644 xgnokii/xpm/Edit_flip_horizontal.xpm create mode 100644 xgnokii/xpm/Edit_flip_vertical.xpm create mode 100644 xgnokii/xpm/Edit_invert.xpm create mode 100644 xgnokii/xpm/Flip.xpm create mode 100644 xgnokii/xpm/Forward.xpm create mode 100644 xgnokii/xpm/Green_pixel.xpm create mode 100644 xgnokii/xpm/Green_point.xpm create mode 100644 xgnokii/xpm/Invert.xpm create mode 100644 xgnokii/xpm/Names.xpm create mode 100644 xgnokii/xpm/New.xpm create mode 100644 xgnokii/xpm/NewBD.xpm create mode 100644 xgnokii/xpm/NewCall.xpm create mode 100644 xgnokii/xpm/NewMeet.xpm create mode 100644 xgnokii/xpm/NewRem.xpm create mode 100644 xgnokii/xpm/Op.xpm create mode 100644 xgnokii/xpm/Open.xpm create mode 100644 xgnokii/xpm/Operator_logo.xpm create mode 100644 xgnokii/xpm/Preview_3210.xpm create mode 100644 xgnokii/xpm/Preview_3310.xpm create mode 100644 xgnokii/xpm/Preview_5110.xpm create mode 100644 xgnokii/xpm/Preview_6110.xpm create mode 100644 xgnokii/xpm/Preview_6150.xpm create mode 100644 xgnokii/xpm/Preview_6210.xpm create mode 100644 xgnokii/xpm/Preview_6250.xpm create mode 100644 xgnokii/xpm/Preview_7110.xpm create mode 100644 xgnokii/xpm/Read.xpm create mode 100644 xgnokii/xpm/Reply.xpm create mode 100644 xgnokii/xpm/Save.xpm create mode 100644 xgnokii/xpm/Send.xpm create mode 100644 xgnokii/xpm/SendSMS.xpm create mode 100644 xgnokii/xpm/Startup.xpm create mode 100644 xgnokii/xpm/Startup_logo.xpm create mode 100644 xgnokii/xpm/Tool_brush.xpm create mode 100644 xgnokii/xpm/Tool_filled_rectangle.xpm create mode 100644 xgnokii/xpm/Tool_line.xpm create mode 100644 xgnokii/xpm/Tool_rectangle.xpm create mode 100644 xgnokii/xpm/alarm.xpm create mode 100644 xgnokii/xpm/background.xpm create mode 100644 xgnokii/xpm/info.xpm create mode 100644 xgnokii/xpm/logo.xpm create mode 100644 xgnokii/xpm/phone.xpm create mode 100644 xgnokii/xpm/quest.xpm create mode 100644 xgnokii/xpm/sim.xpm create mode 100644 xgnokii/xpm/sms.xpm create mode 100644 xgnokii/xpm/stop.xpm diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..99a8ab6 --- /dev/null +++ b/COPYING @@ -0,0 +1,30 @@ +GNOKII - A Linux/Unix toolset and driver for the Nokia 3x10/8110/51x0/61x0 + Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA. + +You can contact authors by mail at + +hugh@blemings.org Pavel.Janik@suse.cz +Hugh Blemings Mgr. Pavel Janík, SuSE CR, s.r.o. +PO Box 234 Pod Pekárnami 338/12 +Belconnen ACT 2616 190 00 Praha 9 +Australia Czech Republic + +We would be delighted to receive a postcard from you if you use gnokii but +this is not a requirement of these licence terms! :) + +Any trademarks in this or other gnokii documents/files are the property of +their respective owners. diff --git a/Docs/Bugs b/Docs/Bugs new file mode 100644 index 0000000..4a43bbe --- /dev/null +++ b/Docs/Bugs @@ -0,0 +1,16 @@ +When you report some problems with gnokii please attach the following information: + - phone model + - connection type (irda/cable with its type) + - gnokii version (gnokii --version) along with source for it: cvs, +tarball, binary package + - if you can, compile gnokii with --enable-debug option for configure and +attach gzipped output to the email: +(x)gnokii(d) [parameters] 2>errfile + +It would be good if you name the problem in the subject if possible and +name if it meets gnokii, xgnokii or gnokiid binaries or gnokii as a whole. + +(from Pawel Kot's mailing to gnokii mailing list). + +Send resulting report to gnokii@net.lut.ac.uk. + diff --git a/Docs/CREDITS b/Docs/CREDITS new file mode 100644 index 0000000..820c4af --- /dev/null +++ b/Docs/CREDITS @@ -0,0 +1,127 @@ +- Credits - + +Thank you to, in no particular order... + +* Everyone on the gnokii mailing list for their interest + and input into the project. + +* Pavel Janík ml. for the majority of work on gnokii 6110 series + support, spelling corrections and miscellaneous code cleanups. + +* Serge Odinokov for 6110 series authentication protocol and + example Delphi RLP code. Many thanks... + +* Nick Lamb for operator logos, CLI uploading and AT*C command support. + +* Francois Dessart, Brendan O'Dea, Tony Lindstrom, Steffan Henke + and Cobus Van Eeden for dumps (and in some cases interpretation!) + of unknown messages, bug reports and prompt feedback of being + able to build new releases. + +* Staffan Ulfberg for taking care of the website and for instigating + the 6110 project which has now been merged with the gnokii effort. + +* Martin Hamilton for looking after the mailing list. + +* Tim Potter for some of the ideas that are now incorporated in gnokii + to provide multiple model support and config file code. + +* Paul Mackerras and Andrew Tridgell for discussions about pseudo + ttys, setuid programs and such. Tridge kindly reviewed the + mgnokiidev.c code. + +* Richard Kalton for his excellent page about Nokia 6110 protocol. + +* Colin Paton for his mail with subject "Dumps of phone<>PC traffic". + It helped a lot. + +* Juan Altmayer Pizzorno for his help with MBUS/FBUS and other + debugging. + +* Gary Reuter for his help when looking for a bug in phone numbers, + for the set-time function debugging. + +* Jiri Meloun for voice calling. + +* Emilio Brambilla for SMS notification fixes, setdatetime implementation + and typing GSM_Default_Alphabet. + +* Pawe³ Kot for EnterPIN on 6110 Series changes and other things. + +* Konstantinos Agouros for gnokii-perl module. + +* Czech Linux Users' group for it's CVS server which hosted our + development repository. + +* Goran Dokic, Samuli Sorvakko and anonymous for gettext files for + Dutch, Finnish and German translations. + +* Marcel Holtmann for RLP FCS code, the irda code and other misc stuff. + +* Chris Kemp for logo stuff and a big part of the RLP code. + +* Andrew Kozin for the model 640 support (NMT 450 network). + +* Karel Zak for his enthusiasm (and patches) for the autoconf stuff. + +* Harri Yli-Torkko for investigative work & code on the 3810/8110. + +* Stano Meduna for misc code and build process work. + +* Alfred Nurnberger for some information on the 5160/6160 MBUS + protocol. + +* Alessandro Zummo for reset and getopts code. + +* Manfred Jonsson for his manufacturer and windows patch, and AT command + support. + +* Mark Looi for Cell Broadcast code - based on protocol decoded by + Colin Paton. + +* Sebastian Zagrodzki and Jacek Fiok for Polish .po file. + +* Marcin Wi±cek for all his work and tons of patches. + +* Gabriele Zappi for testing, general help and bug fixes. + +* Erik Rossen for help with documentation and debian packaging support. + +* Marian Jancar for patches on 7110 series. + +* Tamar Bondar for updates on SMS handling on 3810 series. + +* Marek Rogoziñski for help in tracing some nasty bugs. + +* Pavel Machek for developing 2110 and Duncall support and many clever + hints. + +* Bo¹tjan Müller for Slovenian translation and other things. + +* Hans Motshärg for Estonian translation. + +* Marcin P³awiñski for preview logos. + +* Martin Lucina for any kind of help he is providing ;-) + +* Gabriele Stella for Italian translation. + +* Andrea Scopece for bug reports and other help. + +* Panagiotis Astithas, Daniel O'Connor, Sheldon Hearn for help with FreeBSD. + +* Artur Kubiak for help with Solaris. + +* Markus Plail for work on 7110 support. + +* Simon Huggins for help with 6210 and IrDA. + +* Lucy for making pizza and putting up with Hugh disappearing to + work on this. Rachael for new parent induced insomnia... + +* Last not least: Mirka for allowing Pavel to work on gnokii + and for _great_ gnokii operator logos... + +We tried to mentioned everyone who contributed to gnokii project but we +might to forgot someone. If anyone does feel that we missed him and his +name should be mentioned here do not hesitate to contact us :-) diff --git a/Docs/CodingStyle b/Docs/CodingStyle new file mode 100644 index 0000000..179984a --- /dev/null +++ b/Docs/CodingStyle @@ -0,0 +1,209 @@ + + Gnokii coding style + + (derived from Linux kernel coding style) + +First off, I'd suggest printing out a copy of the GNU coding standards, +and NOT read it. Burn them, it's a great symbolic gesture. + +Anyway, here goes: + + + Chapter 1: Indentation + +Tabs are 8 characters, and thus indentations are also 8 characters. +There are heretic movements that try to make indentations 4 (or even 2!) +characters deep, and that is akin to trying to define the value of PI to +be 3. + +Rationale: The whole idea behind indentation is to clearly define where +a block of control starts and ends. Especially when you've been looking +at your screen for 20 straight hours, you'll find it a lot easier to see +how the indentation works if you have large indentations. + +Now, some people will claim that having 8-character indentations makes +the code move too far to the right, and makes it hard to read on a +80-character terminal screen. The answer to that is that if you need +more than 3 levels of indentation, you're screwed anyway, and should fix +your program. + +In short, 8-char indents make things easier to read, and have the added +benefit of warning you when you're nesting your functions too deep. +Heed that warning. + + + Chapter 2: Placing Braces + +The other issue that always comes up in C styling is the placement of +braces. Unlike the indent size, there are few technical reasons to +choose one placement strategy over the other, but the preferred way, as +shown to us by the prophets Kernighan and Ritchie, is to put the opening +brace last on the line, and put the closing brace first, thusly: + + if (x is true) { + we do y + } + +However, there is one special case, namely functions: they have the +opening brace at the beginning of the next line, thus: + + int function(int x) + { + body of function + } + +Heretic people all over the world have claimed that this inconsistency +is ... well ... inconsistent, but all right-thinking people know that +(a) K&R are _right_ and (b) K&R are right. Besides, functions are +special anyway (you can't nest them in C). + +Note that the closing brace is empty on a line of its own, _except_ in +the cases where it is followed by a continuation of the same statement, +ie a "while" in a do-statement or an "else" in an if-statement, like +this: + + do { + body of do-loop + } while (condition); + +and + + if (x == y) { + .. + } else if (x > y) { + ... + } else { + .... + } + +Rationale: K&R. + +Also, note that this brace-placement also minimizes the number of empty +(or almost empty) lines, without any loss of readability. Thus, as the +supply of new-lines on your screen is not a renewable resource (think +25-line terminal screens here), you have more empty lines to put +comments on. + + + Chapter 3: Naming + +C is a Spartan language, and so should your naming be. Unlike Modula-2 +and Pascal programmers, C programmers do not use cute names like +ThisVariableIsATemporaryCounter. A C programmer would call that +variable "tmp", which is much easier to write, and not the least more +difficult to understand. + +HOWEVER, while mixed-case names are frowned upon, descriptive names for +global variables are a must. To call a global function "foo" is a +shooting offense. + +GLOBAL variables (to be used only if you _really_ need them) need to +have descriptive names, as do global functions. If you have a function +that counts the number of active users, you should call that +"count_active_users()" or similar, you should _not_ call it "cntusr()". + +Encoding the type of a function into the name (so-called Hungarian +notation) is brain damaged - the compiler knows the types anyway and can +check those, and it only confuses the programmer. No wonder MicroSoft +makes buggy programs. + +LOCAL variable names should be short, and to the point. If you have +some random integer loop counter, it should probably be called "i". +Calling it "loop_counter" is non-productive, if there is no chance of it +being mis-understood. Similarly, "tmp" can be just about any type of +variable that is used to hold a temporary value. + +If you are afraid to mix up your local variable names, you have another +problem, which is called the function-growth-hormone-imbalance syndrome. +See next chapter. + + + Chapter 4: Functions + +Functions should be short and sweet, and do just one thing. They should +fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24, +as we all know), and do one thing and do that well. + +The maximum length of a function is inversely proportional to the +complexity and indentation level of that function. So, if you have a +conceptually simple function that is just one long (but simple) +case-statement, where you have to do lots of small things for a lot of +different cases, it's OK to have a longer function. + +However, if you have a complex function, and you suspect that a +less-than-gifted first-year high-school student might not even +understand what the function is all about, you should adhere to the +maximum limits all the more closely. Use helper functions with +descriptive names (you can ask the compiler to in-line them if you think +it's performance-critical, and it will probably do a better job of it +that you would have done). + +Another measure of the function is the number of local variables. They +shouldn't exceed 5-10, or you're doing something wrong. Re-think the +function, and split it into smaller pieces. A human brain can +generally easily keep track of about 7 different things, anything more +and it gets confused. You know you're brilliant, but maybe you'd like +to understand what you did 2 weeks from now. + + + Chapter 5: Commenting + +Comments are good, but there is also a danger of over-commenting. NEVER +try to explain HOW your code works in a comment: it's much better to +write the code so that the _working_ is obvious, and it's a waste of +time to explain badly written code. + +Generally, you want your comments to tell WHAT your code does, not HOW. +Also, try to avoid putting comments inside a function body: if the +function is so complex that you need to separately comment parts of it, +you should probably go back to chapter 4 for a while. You can make +small comments to note or warn about something particularly clever (or +ugly), but try to avoid excess. Instead, put the comments at the head +of the function, telling people what it does, and possibly WHY it does +it. + + + Chapter 6: You've made a mess of it + +That's OK, we all do. You've probably been told by your long-time Unix +user helper that "GNU emacs" automatically formats the C sources for +you, and you've noticed that yes, it does do that, but the defaults it +uses are less than desirable (in fact, they are worse than random +typing - a infinite number of monkeys typing into GNU emacs would never +make a good program). + +So, you can either get rid of GNU emacs, or change it to use saner +values. To do the latter, you can stick the following in your .emacs file: + +(defun linux-c-mode () + "C mode with adjusted defaults for use with the Linux kernel." + (interactive) + (c-mode) + (c-set-style "K&R") + (setq c-basic-offset 8)) + +This will define the M-x linux-c-mode command. When hacking on a +module, if you put the string -*- linux-c -*- somewhere on the first +two lines, this mode will be automatically invoked. Also, you may want +to add + +(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode) + auto-mode-alist)) + +to your .emacs file if you want to have linux-c-mode switched on +automagically when you edit source files under /usr/src/linux. + +But even if you fail in getting emacs to do sane formatting, not +everything is lost: use "indent". + +Now, again, GNU indent has the same brain dead settings that GNU emacs +has, which is why you need to give it a few command line options. +However, that's not too bad, because even the makers of GNU indent +recognize the authority of K&R (the GNU people aren't evil, they are +just severely misguided in this matter), so you just give indent the +options "-kr -i8" (stands for "K&R, 8 character indents"). + +"indent" has a lot of options, and especially when it comes to comment +re-formatting you may want to take a look at the manual page. But +remember: "indent" is not a fix for bad programming. + diff --git a/Docs/DataCalls-QuickStart b/Docs/DataCalls-QuickStart new file mode 100644 index 0000000..04b16b5 --- /dev/null +++ b/Docs/DataCalls-QuickStart @@ -0,0 +1,76 @@ + + QUICK-START GUIDE TO RLP DATA CALLS USING GNOKII + +(1) Compile and install gnokii as per instructions in the INSTALL file. + +e.g. + + cd /usr/src + tar xvfz /tmp/gnokii-0.3.3pre10.tar.gz + cd gnokii-0.3.3pre10 + ./configure --enable-nls --with-x + make + groupadd gnokii + make install + +(2) Create /etc/gnokiirc or ~/.gnokiirc + + cp Docs/sample/gnokiirc /etc/gnokiirc + + or + + cp Docs/sample/gnokiirc ~/.gnokiirc + + Edit to suit; in my case: + + [global] + port = /dev/ttyS2 + model = 6150 + initlength = default + connection = serial + bindir = /usr/local/sbin/ + +(3) Connect your phone to your PC and then run gnokiid: + + # gnokiid + + If successful, you should see a message saying that mgnokiidev has been + run to create /dev/gnokii. If you're using a 5110/6110 series phone + you should hear a beep and see an "accessory connected" message on + the phone. If you're using a 3810 series phone you won't see anything + on the phones LCD. + + I run gnokiid as root; it will also work for another user who is + in group gnokii, as long as the serial port is accessible to that + user as well. It's not recommended that you run gnokiid as root + permanently however - it is better to put yourself in group gnokii + + +(4) Use /dev/gnokii as a modem: + +e.g. ppp session +--------------- /etc/ppp/peers/demon-gnokii --------------------- +/dev/gnokii 115200 +modem crtscts defaultroute +connect 'chat -v ABORT BUSY ABORT ERROR ABORT "NO CARRIER" "" AT OK-AT-OK ATD02083389666 CONNECT' +user XXXX.demon.co.uk +noauth +mtu 296 +debug +---------------------------------------------------------------- +--------------- /etc/ppp/pap-secrets --------------------------- +XXXX.demon.co.uk demon-gnokii +---------------------------------------------------------------- + + Then "pppd call demon-gnokii" should connect + ('tail -f /var/log/messages' to see what is happening) + +(5) If a call terminates you should get 'NO CARRIER' and gnokiid should + continue to work, but this is early code and you may find you have to + Ctrl-C and restart gnokiid (especially if the phone says the terminal + connection has been lost) + +(6) As gnokiid is still under development, ensure your data call has + hung up by checking your phone display at the end of the call. + +(7) See also example files in Docs/sample directory. diff --git a/Docs/FAQ b/Docs/FAQ new file mode 100644 index 0000000..f140e5d --- /dev/null +++ b/Docs/FAQ @@ -0,0 +1,114 @@ +GNOKII FAQ +Pawe³ Kot, pkot@linuxnews.pl +Hugh Blemings, hugh@blemings.org + +$Id$ + +------------------------------------------------------------------------------- +Q. What is gnokii ? + +A. It is a name of project. The aim of it is to develop tools and drivers +for Nokia mobile phones. Of course, I think in this moment about really +different tools - for example, modem drivers, console tools, etc. +All created here software is released under the GNU +General Public License. Please see COPYING file for more details on +license/copying issues, the lack of warranty and where to send a postcard +if you like gnokii :-). Anyway, our software works on many software +(Linux, Free BSD, etc.) and hardware (Intel, etc.) platforms... + +------------------------------------------------------------------------------- +Q. How do you pronounce gnokii ? + +A. You can pronounce gnokii as "gnooki" or "gnocki" at your option :-) + +------------------------------------------------------------------------------- +Q. What models are supported ? + +A. Currently supported phone models are: + + 6110|6130|6150|6190|5110|5130|5190|3310|3210 + + 3110|3810|8110|8110i + + 2110|2140|6080 + + 640 + + 5160|6160|6185 + + 6210|7110 + Support for these models is planned: + + Dancall 2711 + + 8210|8250 + + Ericsson GA628 and similiar + +------------------------------------------------------------------------------- +Q. I get "Hmmm... GSM_LinkOK never went true. Quitting." message when + running gnokii. What's wrong ? + +A. Gnokii cannot connect to the phone. Possible reasons are: + - wrong serial port is defined in gnokii config file, + - you are using the wrong cable, + - you are using not supported phone model, + - you don't have permission to write to /dev/ttySX device. + +------------------------------------------------------------------------------- +Q. Does mgnokiidev need to be suid root ? + +A. Yes. gnokiid needs to create a symbolic link in the /dev directory. + mgnokiidev is the program which does this and hence it must be suid + root so it can write to the directory. mgnokiidev is executable only + for gnokii group members (and root) so it presents minimal security + problems. + +------------------------------------------------------------------------------- +Q. Should any other gnokii binary be installed suid root? + +A. No. There's no need for it. + +------------------------------------------------------------------------------- +Q. Does gnokii support Nokia 3210/3310/6210/7110 phone ? + +A. Yes it does. Support is not as full as with 6110 series but it is improving +almost every day now. + +------------------------------------------------------------------------------- +Q: Can I use IrDA with 6210/7110 and gnokii ? + +A: Yes. Just put: +connection = irda +line into your config file. + +------------------------------------------------------------------------------- +Q. Can I get a copy of the protocol for the ? + +A. We don't have any formal documentation of the protocols in use. + The best source we can give you now is all our knowlegde assembled + together by Nagy Balazs and Marcin Wiacek. You can find result of their + work in Docs/protocol/ subdirectory in gnokii sources. Note that not all + known protocol is already implemented in gnokii. + + Alternatively there are some web sites that have collated some + information: + + Nokia 3110/3810/8110 + http://www.tec.puv.fi/~s98114/GSM/FBUS.html + + Nokia 5110/6110 + http://www.gadgets.demon.co.uk/nokia61xx/protocol.html + + Marcin Wiacek's pages are also useful; + http://www.fkn.pl/marcinw/ + + Nagy Balazs' pages: + http://www.lsc.hu/dl/ + +------------------------------------------------------------------------------- +Q. Does gnokii work under Sun's Solaris ? + +A. Generally yes, but in fact it depends on hardware -- your serial port +must support at least 115200 baud rate. Sun Enterprise 250 machine is known +to work with gnokii. + +------------------------------------------------------------------------------- +Q. I get "Sorry, phone has not yet been converted to new style. + Phone.Functions == NULL!" message. What's wrong? + +A. Don't worry. Nothing's wrong with your phone. Gnokii internal structure is + changing to be more flexible. It is quite complex process so it may take + some time to get everything to work. You may help us to do it -- you'll get + more functionality sooner. diff --git a/Docs/Makefile b/Docs/Makefile new file mode 100644 index 0000000..d5666ac --- /dev/null +++ b/Docs/Makefile @@ -0,0 +1,54 @@ +# +# Makefile for the GNOKII tool suite's documentation directory +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +TOPDIR=../ +include ${TOPDIR}/Makefile.global + +# +# Documentation for gnokii (xgnokii install documentation files itself). +# + +INSTALL_DOCS = README \ + README-3810 \ + README-6110 \ + CREDITS \ + DataCalls-QuickStart \ + README-WIN32 \ + gettext-howto \ + gnokii.nol \ + gnokii-ir-howto \ + packaging-howto \ + sample.gnokiirc + +GNOKII1_MAN = "man/gnokii.1 man/todologo.1" +GNOKII8_MAN = "man/gnokiid.8 man/mgnokiidev.8" +XGNOKII_MAN = man/xgnokii.1x + +all: + @echo + +install: + $(INSTALL) -d $(docdir) + @for xxx in $(INSTALL_DOCS); do \ + if [ -e $$xxx ]; then \ + $(INSTALL) -m 0444 $$xxx $(docdir)/$$xxx; \ + fi; \ + done + $(INSTALL) $(GNOKII1_MAN) $(man1dir) + $(INSTALL) $(GNOKII8_MAN) $(man8dir) + if [ "x$HAVE_XGNOKII" = xyes ]; then \ + $(INSTALL) $(XGNOKII_MAN) $(xmandir) \ + fi + @echo "done" + +clean: + $(RM) *~ + +depend dep: + @echo + +.PHONY: all install clean dep depend diff --git a/Docs/README b/Docs/README new file mode 100644 index 0000000..78a1087 --- /dev/null +++ b/Docs/README @@ -0,0 +1,459 @@ + - G N O K I I - + (C) 1999, 2000, 2001 Hugh Blemings & Pavel Janík ml. + (C) 2001 Pawe³ Kot + Last update 27 Sep 2001 Version 0.3.3 + +- Contents - + +1.0 Introduction +2.0 About the applications +3.0 Notes for specific model phones +4.0 Installation from source +5.0 Installation of pre-built binaries +6.0 Configuration +7.0 Known Bugs +8.0 Gnokii and Perl +9.0 How to help +10.0 gnokii by CVS +11.0 Protocol Details +12.0 References +13.0 Handsets/Networks tested +14.0 Credits +15.0 Release Notes + + +- 1.0 Introduction - + +This is version 0.3.3 of gnokii, a Linux/Unix tool suite and modem +driver for Nokia mobile phones, released under the GPL. Please +see COPYING for more details on license/copying issues, the lack of +warranty and where to send a postcard if you like gnokii :). This +release provides the much awaited ability to place data calls for +all platforms except Win32. Fax calls are not supported. + +gnokii supports most phones from the 3810/8110, 5110/6110, and 2110 +series, details including bugs specific to each series appear in the +files README-3810, README-6110 and README-2110 respectively. + +In the early stages of the project there were indications that +Nokia would provide some support for the project. Regrettably, these +negotiations stalled over the issue of binary versus open source +releases and the project has proceeded without official or unofficial +assistance. + +We have a web site at http://gnokii.org which amongst other things +gives information on how to join the gnokii mailing list, retrieving +bleeding edge releases through CVS and more! + +If you haven't already done so, please indicate your interest in +the gnokii project by adding yourself to the user database +at http://gnokii.org/users + + +- 2.0 About the applications - + +gnokii now consists of three main executables and a fourth "helper" +application that is run suid root. To get the most from gnokii it +is worth understanding the details of them and how they interact. +It is important to note that at present you cannot run more than +one of gnokii, xgnokii or gnokiid at a time. + +The first application, gnokii, is a command line utility that was +originally provided to assist developers and interested users in +working with the low level API functions that were being developed. + +From these rather humble beginnings, it has evolved into a the main +command line tool of the suite. Many people now use it for +reading/writing phone book entries, sending and receiving SMS messages +etc. Ultimately it is intended that it will become a utility that +communicates with gnokiid to provide a command line interface to +the functionality provided by the gnokiid daemon. + +The second application provided is xgnokii which as the name suggests +is a X-windows based application that provides a graphical interface +to your phone. Amongst other things, xgnokii allows you to read and +write phone book entries, read, write and send SMS messages, monitor +battery and received signal strength. + +At present xgnokii works directly with the phone, however in the +future it will more likely use the "side" interface of gnokiid. + +The third part of the suite is gnokiid. gnokiid provides a +virtual modem interface, /dev/gnokii that looks like a regular +Hayes-AT compatible modem with the ETSI defined extensions for +GSM phones. What this means in practical terms is that you can +treat the /dev/gnokii device like an ordinary modem and use it +to make data calls from pppd or a terminal application like +minicom. + +gnokiid is still under development, it's ultimate aim being to +act as a "master" daemon that interfaces with your phone on one +side and gnokii or xgnokii on the other. This "side" code is still +under discussion, particularly with respect to the most appropriate +choice of communication method (IPC, TCP/IP etc.) + +The last application provided with the suite is mgnokiidev which is +used by gnokiid to create on demand a symbolic link between +/dev/gnokii and the pseudo tty used by gnokiid for the virtual +modem interface. It's operation is transparent under normal +usage as gnokiid takes care of calling it when required. + +You should be aware of a minor security hole in mgnokiidev - +members of the 'gnokii' group may be able to use it as a way +to access pseudottys in use by other users on the system. If +you are the only user on your system, or you trust anyone that +you put into group gnokii you have no problem. If this isn't +the case contact one of the authors who will try and suggest +a workaround. It is expected that this problem will be fixed +in the next release of gnokii. + + +- 3.0 Notes for specific model phones - + +Please see the README-3810 file for notes specific to the +3810/8110 series, README-6110 for notes on the 5110/6110 +series and README-2110 for notes on 2110 series. + + +- 4.0 Installation from source - + +gnokii makes use of autoconf/automake which allows you to configure +the source tree for your system by typing + +./configure + +You can also run configure with the --help flag to get a list of +available options. There are about a dozen or so that are specific +to gnokii. + +Once you've run ./configure successfully, you should be able to +simply do a make and make install to compile and install your +binaries respectively. + +make + +make install + +With this done you've built and installed your binaries, and +should proceed to the configuration section below. + + +- 5.0 Installation of pre-built binaries - + +If you downloaded gnokii as a pre-built binary you should install +it in the conventional manner for the package type in question. +For example if you downloaded a .rpm file you can install it by +running the following as root. + +rpm -i gnokii-0.3.3-i386.rpm + +If you are using a Debian based system, you can use dpackage +to do the installation. On Slackware you use installpkg or pkgtool. + + +- 6.0 Configuration - + +Once you have installed the binaries, you should copy the +sample/gnokiirc file from the Docs directory to your home +directory and name it .gnokiirc Using your favorite editor +ensure that the settings are correct for your system, the sample +file has details of the various options available. + +If you used a pre-built version of gnokii (.rpm, .deb etc) it +may have installed a /etc/gnokiirc file. If it has, the +settings in this file will be used in the absence of a +.gnokiirc file in your home directory. + +Note that you will need read/write permissions on whatever +serial port you specify in .gnokiirc. You can now use gnokii +and xgnokii. + +Review the notes specific to your model of phone in either +README-6110 or README-3810 as appropriate. These files +also provide information about what functionality is +available for each model. + +In order to make use of the AT emulator provided by gnokiid +through /dev/gnokii, you must read the documentation file +DataCalls-QuickStart. + +A simple test to confirm that your cable/IR link is working +is to run gnokii with the --monitor flag e.g. + + foobar$ gnokii --monitor + +This will attempt to connect to your phone and display +information such as signal strength, battery level etc. + +If you get an error along the lines of + + Hmmm... GSM_LinkOK never went true. Quitting. + +this indicates that gnokii could not communicate with your phone +for some reason and you will need to do some troubleshooting. + + +- 7.0 Known Bugs - + +Review the bugs section in the README for your series of phone. + +Note the possible security hole in mgnokiidev discussed above. + + +- 8.0 Gnokii and Perl - + +There is a perlmodule available for gnokii. It gives access to all +the routines that are defined in gsm-common.h from a perl-program. It +is intended for application developers who want to use their favorite +language in interfacing the phone data with databases, ldap-directories +and (in the future) different calendar applications. It is written by +Konstantin Agouros (konstantin@agouros.de) and support starts with +revision 0.2.6-pre3 of gnokii. + +The homepage of this module is http://www.agouros.de/gnokii + + +- 9.0 How to help - + +There are a number of ways you can help out. + +Code specific to each model is contained within fbus-3810.[ch] and +fbus-6110.[ch] and other [fm]bus-*.[ch] files. All command handlers +will dump information to stderr when they encounter a message they don't +understand. If this happens to you, try and work out what is going on. + +Suggestions on changes to the code are welcome, the preference is that +they be aired on the mailing list so that a consensus can be reached +when appropriate. This is particularly important if you intend making +large changes and/or submitting big patches. + +- 10.0 gnokii by CVS - + +The gnokii project has a new CVS server thanks to Andrew Tridgell +and the Samba team. The server's address is pserver.samba.org. If you +are already familiar with CVS, set the CVSROOT to + + :pserver:cvs@pserver.samba.org:/cvsroot + +and use the password cvs for checking out the repository with the name +gnokii. + +If you are not familiar with cvs, don't worry. It's very simple. +Just install the cvs package for your distribution and follow these steps: + + 1. set your environmental variable CVSROOT. If you have bash (Bourne + Again Shell): + + export CVSROOT=:pserver:cvs@pserver.samba.org:/cvsroot + + If you have different shell, use different command (e.g. setenv). + + + 2. Log in to the CVS server as anonymous reader by typing + + cvs login + + Use 'cvs' as your password. + + + 3. If you are logged in you are ready to checkout the latest sources: + + cvs co gnokii + +If you prefer, there is a WWW interface to the CVS server at + +http://pserver.samba.org/cgi-bin/cvsweb/gnokii/ + +Once you have the sources, you will need to run the following commands + + autoconf + ./configure + make + +to build the sources. + +Now you are on your own - you have the current sources on your disk +in the directory gnokii. If you are going to make substantial changes +and feel that they should be included into gnokii please mention it +on the list first to avoid duplicated effort. + +If you would like to receive email when updates are made to the CVS +repository, just send Hugh and email to that effect (hugh@blemings.org) +and you'll be added to the recipients list. + +Our thanks go to the Czech Linux Users Group for hosting the original +CVS repository at cvs.linux.cz. + +- 11.0 Protocol Details - + +3810 Series + +The protocol used between the phone and the PC has been worked out +by a mixture of trial and error, monitoring the data that goes between +the 3810 and its Windows 95 software and a few snippets of information +found on the 'net relating to older Nokia models. Feedback from +people who played with the first release of gnokii was invaluable. + + +6110 Series + +The same applies for 6110 Series (but I use Windows NT 4.0 for +monitoring). The protocol of 6110 Series is somewhat different from 3810 +Series. Perhaps the first draft of the protocol for communication between +Nokia mobile phones and PCs was not so general to support the newest features +of Nokia's phones. + +You'll find the detailed protocol description in Docs/protocol directory/ + +- 12.0 References - + +The web site for this project is at; + + http://gnokii.org + +The mailing list devoted to the gnokii project is + + + +You can subscribe by sending an email to + + + +with the word subscribe in the body. + +The serial programming how-to was valuable in cobbling together +serial code for both monitoring and the tools themselves. This +is the Australian mirror, there will be one nearby to you too :) + + + + +- 13.0 Handsets/Networks tested - + +3810 Series + +3110/Sonera (Finland) +3110/Telefonica (Spain) +3810/Telstra (Australia) +3810/Optus [Actually Hutchison] (Australia) +3810/Mobile One (Singapore) +3810/SingTel Mobile (Singapore) +8110/Proximus (Belgium) +8110/D2 Privat (Germany) +8110i/MTN (South Africa) +8110/Beeline Vympelkom (Russia) +8110i/A1 Mobilkom (Austria) + +6110 Series + +6190/Microcel (Canada) (GSM 1900) +6150/Viag Interkom (Germany) (GSM 1800) +6150/Omnitel (Italy) +6150/Beeline (Vympelkom) (Moscow, Russia) +6150/MTS (Moscow, Russia) +6150/NWGSM (St. Petersburg, Russia) +6150/NetCom GSM (Norway) +6130/IDEA Centertel (Poland) (GSM 1800) +6110/Paegas (Czech Republic) +6110/Panafon (Greece) +6110/Telstra Mobilenet (Australia) +5110/Omnitel (Italy) +5110/Paegas (Czech Republic) +5110/ERA GSM (Poland) +5110/Plus GSM (Poland) +5130/IDEA Centertel (Poland) +5190/Microcel (Canada) (GSM 1900) + +3210 (some functions does not not work yet) + +2110 Series + +6160 Series + +640 Series + + +- 14.0 Credits - + +Please take a moment to read the CREDITS file which endeavors +to recognise those who have helped so far! + + +- 15.0 Release Notes - +20010627 Version 0.3.3 +Many 6110 series updates: mainly in SMS, bitmaps and ringtones handling. +Better localization. Integrated xlogos with xgnokii. Documentation updates. +Probably the last 0.3 series release. + +20000520 Version 0.3.2 +We have data calls and autoconf. Nuff said :) + +19991222 Version 0.3.1 +Interim release to bring released code into line with latest CVS +offerings. + +19990824 Version 0.3.0 +6110 functionality has increased again, details of which are +in the 6110 specific readme. Few minor tweaks on the 3810 +side but we've just about run out of things the 3810 can do +(data and fax calls aside of course!) + +This release is the first to include xgnokii - an X based +interface to your phone and gnokiid - the makings of a +virtual modem/AT emulator interface. Details of these +two apps appear above. + +19990519 Version 0.2.5 +Little has changed on the 3810 side - mostly adding stub functions +to stay current with the 6110 code. A no-brainer bug was found in +the SMS send routines which is now corrected - could have caused +multiple messages to be sent. + +6110 support has moved ahead in leaps and bounds, SMS sending is +now in there along with many other new function. + +19990328 Version 0.2.4 +Largely a synchronisation release to incorporate Pavel's numerous +patches for 6110 support and internationalisation (such a long +word, i18n is better :-). + +Added SMS delete function for 3810 series. + +19990305 Version 0.2.3 +Added gsm-api.c/.h and gsm-common.h as a standard interface and +set of datatypes that can be used across multiple models. This +API is still a work in progress. + +Changed references to "handset" to "phone" to ensure a consistent +nomenclature. + +Phonebook is now dumped with words int or sim for memory type +rather than a numeric value. + +19990219 Version 0.2.2 +Fixed bug and added support to display bytes returned when +the link is initialised. If you see something other than the +values noted in fbus.c, please let me know and include +your phone type and software version. + +Added initial cut of SMS send capability. Caveats are +discussed above. + +Added two different default values for length of phonebook +name and numbers. These are selected according to whether +internal or SIM memory is specified. + +Fixed bugs reported in 0.2.1 (errno.h and reversal of message +center and sender fields) + +19990216 Version 0.2.1 +Fixed bug that caused phone book entries containing spaces to be +mangled. Added retrieve SMS message function. + +19990213 Version 0.2.0 +First version that looks more like the finished product - supports +command line options etc. + +19990126 Version 0.1.0 +Initial release of monitoring tool - first rough incarnation of +gnokii - what will ultimately be the monitoring and programming tool. diff --git a/Docs/README-2110 b/Docs/README-2110 new file mode 100644 index 0000000..32ab315 --- /dev/null +++ b/Docs/README-2110 @@ -0,0 +1,27 @@ +-- README-2110 -- +-- Notes, bugs and a todo list for the 2110 series -- + +* Notes * + +Code for the 2110 phones has been tested with home-built cable. It +should work well with any sort of cable. + +* Known Bugs * + +- Nokia protocol is not followed. We use hacks instead of collision + detection protocol nokia suggests. + +- Many. Look at code, needs cleanup, etc. Contact pavel@ucw.cz + if you want to help. + +- When periodically fetching messages, it gets to state where protocol + breaks with "bad checksum". + +* To-do * + +- SMS sending. + +- Implement functionanlity such as reading internal A/D convertors and + ability to turn on netmon. [Not sure if all 2110s even have netmon.] + + diff --git a/Docs/README-3810 b/Docs/README-3810 new file mode 100644 index 0000000..c4aaefa --- /dev/null +++ b/Docs/README-3810 @@ -0,0 +1,93 @@ +-- README-3810 -- +-- Notes, bugs and a todo list for the 3810 series -- + +* Notes * + +Phones in the 3810 series that have been tested to date are +3110, 3810, 8110, 8110i with either the DAU-4F cable or in +one or two cases a home made cable. Specific phone/ +network combinations appear in the main README file. + +After some digging in to the protocol it has become apparent +that there aren't many more functions we can support, compared +to our 5110/6110 cousins! Remaining functionality which I would +like to add appears in the To-do section below, suggestions +are welcome. + +The code for reading/writing phonebook entries has had limited testing +but the read code is believed to be solid. It has been observed +that the write code occasionally fails to write a location for +reasons as yet unknown. The format of the input to the write +option is relatively unforgiving and does only very basic parsing. +This format should be compatible with the output from the Windows +NCDS software. + +Routines for retrieving SMS messages have been tested and appear +to be bug free. The 3810 used for testing appears to ignore the +memory type field however. + +Sending SMS is still something of "black art". This has been tested +on a 3810 on the Australian Optus/Hutchison network. Most of the +time the messages are sent as expected but occasionally they +fail for no apparent reason. The code is designed to re-try up +to four times before giving up if a 0x65 0x26 response is received. + +Sometimes however error codes are seen 0x65 0xYY, the meaning +of which is unknown. Any light you can cast on this is welcome. +It is possible that switching off the phone and switching +on again may help but this may be just a coincidence. + +It should also be noted that the SMS header message sent by +FB38_TX_Send0x23_SendSMSHeader code has no less than 10 bytes +in it that aren't understood. The values used are simply those +that have been observed. They may have to be totally different +on your network :( They may inadvertently route the message to +a distant land or just not work at all. + +Having said all of the above about SMS sending, a number of people +have now tested SMS sending on various networks around the world and +in the main have found it to work correctly. + +* Functionality * + +The following functions/facilities are available for the 3810 series +phones. + +- Retrieving and writing single or multiple phone book entries from + either SIM or (in the case of the 8110s) internal memory. + +- Retrieving and deleting single or multiple stored SMS messages from + either SIM or (again in the case of 8110s) internal memory. + +- Sending an SMS message to a specified recipient via a specified + message center number. + +- By way of a message in --monitor mode, receive notification + of the following occuring; + + + Incoming call being received, answered and hung up. + + Outgoing call being made, answered and hung up. + + Incoming SMS message + + Current phone status (connected to network, call progress etc.) + +- Retrieve current RF and battery level + +- Retrieve IMEI, Model and Revision information + + +* Known Bugs * + +fbus-3810 code cannot (yet) automatically determine the maximum +length of the name and phone number fields in the SIM. Similarly +it cannot yet determine the maximum number of SIM locations. +These are defined in fbus-3810.h + +The status (read or unread, sent or unsent) of SMS messages +retrieved from memory is not known so these flags are always +set to read / sent. + +* To-do * +Add support to automatically determine the maximum number of SIM +entries and lengths of phonebook and name fields. + +Try building under Win32 and report success/failure to the list. diff --git a/Docs/README-6110 b/Docs/README-6110 new file mode 100644 index 0000000..cb20ed3 --- /dev/null +++ b/Docs/README-6110 @@ -0,0 +1,57 @@ +-- README-6110 -- +-- Notes, bugs and a todo list for the 6110 series -- + +* Notes * + +Code for the 6110 phones has been tested with the DAU-9P MBus Cable NSE-3. + +Phones of 6110 Series have somewhat different protocol and that +is the main reason for having the 3810 Series and 6110 Series. +These phones also provide more features so hacking on it is +greater fun. + +The current code allows you to enter PIN from the PC (gnokii asks +you for the PIN, you enter it and gnokii sends it to the phone +without touching the phone's keyboard). The code also allows you +to monitor the status of the mobile phone - it recognizes +network signal strength, your GSM provider network and battery +level, the clock, date and alarm setting of your phone (if the phone +supports it - e.g. 5110 doesn't seem to support date so the date is +bogus on it). + +The newest feature is that gnokii can read your mobile phone's +preferred SMS Center so in the future you will not need to enter +the SMS Message Center number for SMS messages to be sent. +Gnokii will read it automatically. + +There are some problems with the newest firmwares (V 05.24). It +seems that this firmware is weird. If you have a Nokia with this +firmware, it accepts the PIN request (displays Code Accepted message) +but nothing is returned to the PC. The communication is only in +one direction :-( I do not know why. If you can help with this, +please let me know. + +* Known Bugs * + +- None, we write quality software here... :) + +* To-do * + +- writing documentation of the protocol + +- check out errors when reading and writing phonebook entries!!! + +- delete all FIXME from the sources + +- implement calendar notes infrastructure and --getcalendarnote, --writecalendarnote + +- implement function FB61_GetStatus which should return {"Waiting for PIN", + "Registered within the network", "Call in progress" ...} + +- X interface :-) + +- how NCDS saves names with ";" in it? + +- make util directory with support utilities, clean up the source tree... + +- Wait for ack of Auth message diff --git a/Docs/README-WIN32 b/Docs/README-WIN32 new file mode 100644 index 0000000..66eff84 --- /dev/null +++ b/Docs/README-WIN32 @@ -0,0 +1,144 @@ + +README-WIN32 +============ + +The Win32 port of Gnokii currently supports only Gnokii for the Nokia 6110 +phone. Other phones in the 51xx and 61xx familie are likely to work also with +this version. The graphical X version, the AT-emulater and virtual device are +not ported to Win32. This might change in the future but as far as I know no +work is in progress. Ofcourse the effort of porting only makes sense if there is +a need. Do you have the need for extended Win32 functionality don't ask me but +let us all know on the Gnokii mailing list. + +Update: Allthough not finished I did explore the possibility to compile Xgnokii +using the Win32 port of GTK+. It seems to compile fine but right after the +splash screen the program crashes. This means no luck since I do not have time +to go into detail (aka debugging). + +The following sections describe what I did to compile Gnokii on Win32 using two +(completely) different tools. I am aware of the fact that more ways may lead to +the same result. I just think these two are two most logical methods. The first +method is the graphical Windows way of working with M$ software tools. The +second option is the freaky Unix command prompt way utilizing a GPL'ed software +development environment. + + * Microsoft Visual Studio and Visual C++ + * Cygwin B20 + + +Compile using Microsoft Visual Studio and Visual C++ +==================================================== + +Below a description of how I compiled Gnokii with the Microsoft Visual Studio +6.0 and Visual C++ 6.0. It is not the only solution but it is how I typically +work with Visual Studio. I also think this method relates more to the average +Windows programmer. It is assumed you have some basic knowledge about workspaces +and projects in Microsoft Visual Studio. If not, please go back to the +documentation as this page has no intention to learn you the details about this. + +0. Put the Gnokii sources somewhere. + +Put the Gnokii source in \gnokii\gnokii src. Please do not use a version +in the path. This wil cause problems as you have to modify the project any time +you get new sources. In case you want to use CVS you need to check out the +sources in \gnokii\gnokii src. + +1. First create a blank workspace called Gnokii. + +Visual Studio appends the the workspace name to the location, please keep this +default. As location is assumed. The combined location should now read +\gnokii. + +2. Create project 'Gnokii lib'. + +The project has to be of type 'win32 static library'. Add this project to the +current workspace, this is the one you just created. The location will now be +\gnokii\gnokii lib. Do not check 'pre-compiled header' and 'MFC support' +in the window appearing next. Click finish and Ok to create the project. +Add the files below to the project. (Menu: Project -> Add To Project -> Files +...) Open the directory gnokii src and select the files below, click OK to add +the files to the project. + + cfgreader.c + cfgreader.h + fbus-3810.c + fbus-3810.h + fbus-6110-auth.c + fbus-6110-auth.h + fbus-6110-ringtones.c + fbus-6110-ringtones.h + fbus-6110.c + fbus-6110.h + win32\getopt.c + win32\getopt.h + gsm-api.c + gsm-api.h + gsm-common.h + gsm-filetypes.c + gsm-filetypes.h + gsm-networks.c + gsm-networks.h + mbus-2110.c + mbus-2110.h + win32\winserial.c + win32\winserial.h + +To really finish the project change it's settings (Menu: Project -> Settings +...). On the tab C/C++ the box with 'Preprocessor definitions:' should be +changed to: +WIN32,_DEBUG,_CONSOLE,_MBCS,VERSION=\"win32\",MODEL=\"6110\",PORT=\"COM1\",DEBUG +for the Win32 Debug version. For the Win 32 Release version leave out the DEBUG. +This way the version is fixed to win32 and there is no easy way to automate +this. Please change the version after you have installed new sources. + +3. Project Gnokii rlp (win32 static library). + +Repeat step 2 but now for the following files. +(location: \gnokii\gnokii rlp). + + rlp-common.c + rlp-common.h + rlp-crc24.c + rlp-crc24.h + +4. Project Gnokii. + +This step is simular to the previous steps but instead make this project a win32 +console application. (location: \gnokii\gnokii) + + gnokii.c + gnokii.h + +The project has to be dependent on 'Gnokii lib' and 'Gnokii rlp'. + +5. The final step. + +The last step is to make 'Gnokii' the 'active project'. Now building Gnokii will +also build the library and rlp stuff because of the dependencies. The final +result is an executable file with the name gnokii.exe. + + +Compile with Cygwin (B20) +========================= + +This is in fact the easiest option. Because Cygwin implements a GNU (Unix style) +environment on your PC you can almost compile Gnokii 'as is' out of the box. + +There are just a few steps extra needed to tweak the Makefile. Read the comments +in the Makefile. Actually you might want to keep the '-s' in the LDFLAGS since +this strips debug information and keeps your executable lean. + + +Disclaimer +========== + +No warranty, you are on your own. If you have questions or remarks, please let me +know on my email address mentioned below. + +Author: Feico de Boer (mailto:feico.de.boer@hetnet.nl) +Date: December 6th, 1999 + +Pre-compiled Gnokii binaries are available on: + http://www.homepages.hetnet.nl/~fdboerhetnet/ + +Here you will also find the latest edition of the README-WIN32. diff --git a/Docs/README-dancall b/Docs/README-dancall new file mode 100644 index 0000000..6f8a700 --- /dev/null +++ b/Docs/README-dancall @@ -0,0 +1,20 @@ +-- README-dancall -- +-- Notes, bugs and a todo list for the Dancall phones -- + +* Notes * + +Dancalls are crappy telephones, commonly found in czech republic. In +bazaar, you can find good phones on one table, bad phones on another +table, and dancalls in nearby trashcan. Dancall for $10 is too +expensive, in fact it is $10 more than it is worth. + +OTOH, dancalls try to speak something like AT-commands over serial +cable, which made their decoding pretty easy. And they include netmon +by default (just type *#9993#). + +You *need* setserial /dev/ttyS0 low_latency in order for dancall +support to work. + +* Known Bugs * + +* To-do * diff --git a/Docs/gettext-howto b/Docs/gettext-howto new file mode 100644 index 0000000..c24e67d --- /dev/null +++ b/Docs/gettext-howto @@ -0,0 +1,102 @@ +1. What do I need? + +- a reasonably recent version of GNU gettext (e.g. 0.10.35) + Check the version using e.g. msgfmt -V + +- autoconf + +- gnokii distribution :-) + +- if you have the variable LINGUAS in the environment + (most Red Hats have, no idea about other distributions), + unset it + + +2. How to make gnokii.pot file? + +gnokii.pot file is a collection of all localizable strings +in the gnokii package. It will be generated automagically +and is included in the standard distribution package. + +If you need to regenerate it, goto "po" directory, +remove gnokii.pot and say + + make gnokii.pot + + +3.1 How to start translating for a new language? + +First, you would like to contact the authors or write +to the mailing list - maybe there already is someone +working on this translation. + +If you get the OK from the maintainer, there are several +steps to do: + +- add the code of your language to the ALL_LINGUAS line + in the configure.in file + + Caution: the language code may differ from the country + code, e.g. czech language is cs, Czech Republic is cz + +- run autoconf to recreate configure script + +- reconfigure the package (./configure) + +- in the po directory, copy gnokii.pot to .po + +- start translating + + +3.2 How to merge existing translations with the updated gnokii.pot? + +This is simple. Rename the old file and use msgmerge to create +an updated one: + + mv cs.po cs.po.bak + msgmerge -o cs.po cs.po.bak gnokii.pot + + +4. How to generate a .mo file + +When you say make in the po directory, all existing +translations will be generated. The suffix will be .gmo. + +If you want to do this manually, use the msgfmt utility, e.g. + + msgfmt -o cs.mo -v cs.po + + +5. How to install the files + +Again, the makefile takes care of this. Simply use (as root) + + make install + +in the po directory. If you want to do this manually (and/or +for your language only), move the .mo file to +/usr/share/locale//LC_MESSAGES/gnokii.mo + + +I'm from Czech republic, so I did (well, I did not, but if you would +like to localize gnokii, you should :-): + + cd po + make gnokii.pot + cp gnokii.pot cs.po + + msgfmt -o cs.mo -v cs.po + make + make install + +And now: + +SnowWhite:/tmp/gnokii$ export LC_MESSAGES=cs_CZ +SnowWhite:/tmp/gnokii$ ./gnokii --version +GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. + Kompilace: 19:09:02 Mar 13 1999 pro model 6110 na portu /dev/ttyS0 +SnowWhite:/tmp/gnokii$ + +The second line is in czech language :-) There are some problems - for +example with "Mar" which is substitute by the C preprocessor. + diff --git a/Docs/gnokii-6210-7110-IrDA b/Docs/gnokii-6210-7110-IrDA new file mode 100644 index 0000000..73b23aa --- /dev/null +++ b/Docs/gnokii-6210-7110-IrDA @@ -0,0 +1,87 @@ +Getting gnokii to work with a 6210 under linux +============================================== + +- Compile your kernel with IrDA support for your chipset. + +For me on my VAIO this was: +CONFIG_IRDA=m +CONFIG_IRCOMM=m +CONFIG_IRDA_OPTIONS=y +CONFIG_IRDA_DEBUG=y + +CONFIG_IRTTY_SIR=m + Use the emulation of serial port part of your IrDA chipset or... +CONFIG_NSC_FIR=m + Specify the one you have (I have a NSC 87338) + +- Reboot onto new kernel etc. +- Check your serial devices don't conflict with the ioport/irq that your + chipset driver will try to use: + setserial /dev/ttySX (where X is 0 -> 3) should give you the information + you need. + If you have a device that conflicts with your ioport/irq then you will + need to remove the serial driver's control over it with: + setserial /dev/ttySX uart none port 0 irq 0 + (where X is there relevant port mine is /dev/ttyS2) +- I used the chipset way to get IrDA working. + I needed: + options nsc-ircc dongle_id=0x09 + alias irda0 nsc-ircc + in /etc/modules.conf + Then just irattach irda0 -s 1 which *should* load all the modules you need + and start it doing irda discovery. + The modules I have loaded at this point are: nsc-ircc and irda. +- Run irdadump to see that it is indeed attempting to discover something. + You should see messages like: +15:24:07.380360 xid:cmd 0c57083d > ffffffff S=6 s=0 (14) +15:24:07.470333 xid:cmd 0c57083d > ffffffff S=6 s=1 (14) +15:24:07.560310 xid:cmd 0c57083d > ffffffff S=6 s=2 (14) +15:24:07.650283 xid:cmd 0c57083d > ffffffff S=6 s=3 (14) +15:24:07.740279 xid:cmd 0c57083d > ffffffff S=6 s=4 (14) +15:24:07.830279 xid:cmd 0c57083d > ffffffff S=6 s=5 (14) +15:24:07.920311 xid:cmd 0c57083d > ffffffff S=6 s=* langly hint=0400 [ Computer +] (22) +- Place the phone in front of it, enable the Infrared parts of it (Menu 90) + then it should change to be like: +15:26:07.380336 xid:cmd 0c57083d > ffffffff S=6 s=0 (14) +15:26:07.470288 xid:cmd 0c57083d > ffffffff S=6 s=1 (14) +15:26:07.560284 xid:cmd 0c57083d > ffffffff S=6 s=2 (14) +15:26:07.650281 xid:cmd 0c57083d > ffffffff S=6 s=3 (14) +15:26:07.740280 xid:cmd 0c57083d > ffffffff S=6 s=4 (14) +15:26:07.847192 xid:rsp 0c57083d < d10e0000 S=6 s=4 Nokia 6210 hint=b125 [ PnP Modem Fax Telephony IrCOMM IrOBEX ] (27) +15:26:07.830293 xid:cmd 0c57083d > ffffffff S=6 s=5 (14) +15:26:07.920283 xid:cmd 0c57083d > ffffffff S=6 s=* langly hint=0400 [ Computer +] (22) +- Now try using ircomm to talk to the phone. Try minicom /dev/ircomm0 (you + may need to setup a default profile for this port as the root user with + minicom -s /dev/ircomm0). +- This depends on your distribution having the right lines in modules.conf + for ircomm to be loaded: +alias tty-ldisc-11 irtty +alias char-major-160 irda0 +alias char-major-161 ircomm-tty + And your /dev/ircomm0 should be character device 161,0. + Debian testing/unstable gets this right. + If these don't work you may need to load ircomm and ircomm-tty manually. +- minicom /dev/ircomm0 should now work and AT commands should function. +- With a .gnokiirc modified as follows: + port = /dev/ircomm0 + model = 6210 + connection = irda + gnokii --monitor should now function. + + [huggie@langly ~]$ gnokii --monitor + Entering monitor mode... + RFLevel: 100 + Battery: 100 + SIM: Used 5, Free 85 + etc. + + Not all the functions for 6210 work yet seemingly. + +- If instead gnokii hangs then you may have a version of gnokii that still + has recv() in irda_open of common/devices/unixirda.c. Just comment out + that line, recompile and try again. + + +Simon Huggins diff --git a/Docs/gnokii-ir-howto b/Docs/gnokii-ir-howto new file mode 100644 index 0000000..35ce339 --- /dev/null +++ b/Docs/gnokii-ir-howto @@ -0,0 +1,594 @@ + Gnokii-Infrared-HowTo + Thomas Schneider, ts-ml@dev-thomynet.de + Version: 1.04, 04 Aug 1999 + + This document describes how to use the infrared-function of gnokii + ______________________________________________________________________ + + Table of Contents + + + 1. Preamble + + 1.1 Copyright + 1.2 Credits + 1.3 Comments + 1.4 Latest version of this document + + 2. Introduction + + 3. Installation + + 3.1 What Gnokii needs for communication over infrared + 3.2 Installing and Configuring the Software + + 4. Mobiles and their software-version + + 4.1 Get software-version of your phone + 4.2 Tested phone-software-version + + 5. PC-Hardware and Configuration + + 5.1 Laptops - who work with gnokii + 5.1.1 DELL Inspiron 7000 A366LT + 5.1.2 DELL Latitude LM 166 + 5.1.3 DELL Latitude D266XT w/ C/Dock + 5.1.4 Fujitsu Lifebook B110 'Biblo' Laptop + 5.1.5 Gericom (Network) Notebook with SIR-Infrared + 5.1.6 IBM Thinkpad 390 + 5.1.7 IBM Thinkpad 600 + 5.1.8 Toshiba Libretto 70CT + 5.2 Laptops - who don't work + 5.3 Mainboards - who work with gnokii + 5.3.1 ASUS ???? + 5.4 Mainboards - who don't work with gnokii + 5.5 External Adapters - who work with gnokii + 5.6 External Adapters - who don't work with gnokii + 5.6.1 Tekram IR210B + + 6. Gnokii over infrared versus LINUX-IRDA + + 7. FAQ + + 8. Appendix A: COM-Port-Table + + + + ______________________________________________________________________ + + 1. Preamble + + 1.1. Copyright + + Copyright Thomas Schneider 1999 + + You may redistribute and/or modify this document as long as you comply + with the terms of the GNU General Public Licence, version 2 or later. + 1.2. Credits + + Special thanks go to Hugh Blemings and Pavel Janik, they are the + maintainer of gnokii, for the good work. Also to Colin Paton for his + mail with description connection establishment over infrared. + + + 1.3. Comments + + Do not hesitate to tell me any thing you think will help make this + document better. I will examine your critics thoroughly. Do not + hesitate as well to ask me any questions related to topics discussed + here. I will be more than happy to answer them, as they may help me + further improve this document. (-- Translator note: If the English is + ugly, well then that goes to me!--) + + Note:If you have any big problems or other questions to gnokii - + please mail to gnokii-mailinglist and not to me! For more details: + http://www.gnokii.org/ + + + 1.4. Latest version of this document + + You can find the latest version of this document in the gnokii- + distribution under: http://www.gnokii.org/ or in the web on + http://www.dev-thomynet.de/nokworld/gnokii-infrared-howto/ . + + + 2. Introduction + + Gnokii is a suite of programs what deal with some mobilephones from + NOKIA (http://www.nokia.com ). + + This document is the guide to use gnokii over infrared. It is not the + general gnokii-userguide and contains no part of protocol. + + + 3. Installation + + You can get gnokii from gnokiis-homepage: + + o http://www.gnokii.org/ + + Gnokii-package is available in some different formats: rpm and tgz. + To install the tgz unpack the package with + + tar xvzf filename + + + The first address after unpack is file README in dir gnokii - all + important parts you can read in it. + + + 3.1. What Gnokii needs for communication over infrared + + Since version **FIX_ME** gnokii contains everything that you need in + software for infrared-communication. + + On the other side you need some hardware: + + 1. nokia mobile phone with infrared-port. Some phones are: 6110, 6150 + + 2. infrared-port on your pc or notebook. In moment only SIR works + with gnokii, because phones are limmited to 115200 bps. + + + 3.2. Installing and Configuring the Software + + All steps needed to install and configure gnokii are described in + README. Here is the short way for configure infrared with gnokii: + + + 1. Copy the file sample/gnokiirc as .gnokiirc in your homedir. + + + cp Docs/sample/gnokiirc ~/.gnokiirc + + + + + 2. Edit the ~/.gnokiirc file: + + + port = /dev/ttyS1 # Set this to the port where you infrared-equipment is connected. + model = 6150 # Set up to your model. + connection = infrared # If you want connection over cable set this to serial. + + + + + 3. Make the complete gnokii-software with make in gnokii-dir. + + Thats all! If you use infrared in ~/.gnokiirc all parts of the gnokii- + distribution use communication over infrared! This parts are in + moment: + + 1. gnokii + + 2. xgnokii + + 3. gnokiid + + + 4. Mobiles and their software-version + + In all tested situations the software from your phone is not the + problem if you can't connect it over infrared. The problem in such + situations was the pc-equipment or the pc-configuration. If you have + problems please look first in ``pc-section''. + + + 4.1. Get software-version of your phone + + To get the software-version from your phone press in idle-mode: + + + *#0000# + + + + + + 4.2. Tested phone-software-version + + + 1. 6100 + + o V 4.73, 22-04-98, NSE-3 + + o V 5.24, 14-09-98, NSE-3 + + + 2. 6150 + + o V 4.01, 23-09-98 + + o V 4.12, 02-12-98, NSM-1 + + o V 5.02, 02-02-99, NSM-1 + + + 5. PC-Hardware and Configuration + + This is the most cause for some problems. In moment gnokii works only + with SIR- equipment and not with FIR-eqipment. One reason for this is, + what phone-speed is limited to 115200 bps. If you have any problems + with your equipment read the following parts. Adapters can be the + following: + + o Internal Adapters + + o Serial Adapters + + o SIR + + o FIR + + o Parallel Adapters + + o SIR + + o FIR + + o External Adapters + + o Serial Adapters + + o SIR + + o FIR + + o Parallel Adapters + + o SIR + + o FIR + + Mosts laptops have an internal infrared-port. Some motherboards - ASUS + for example - have also a infrared-connector. On this boards you must + buy a little infrared-transmitter to use infrared-connections. + + It is very difficult to describe all parts of configuration. On this + reason this HowTo list all tested laptops and other hardware in each + section. + + + 5.1. Laptops - who work with gnokii + + Short list: + + o ``DELL Inspiron 7000 A366LT'' + + o ``DELL Latitude LM 166'' + + o ``DELL Latitude D266XT w/ C/Dock'' + + o ``Fujitsu Lifebook B110 'Biblo' Laptop'' + + o ``Gericom (Network) Notebook with SIR-Infrared'' + + o ``IBM Thinkpad 390'' + + o ``IBM Thinkpad 600'' + + o ``Toshiba Libretto 70CT'' + + + 5.1.1. DELL Inspiron 7000 A366LT + + + o BIOS-Version : Phoenix BIOS 4.0, Release: 6.0 + + o CPU : Mobile Pentium II, MMX, 366MHz, BIOS Rev A10 (037A) + + o Memory : 256 MByte + + o Kernel : 2.2.5 + + o Distibution : SuSE 6.1 (german version) + + o reported from : Thomas Schneider < ts-ml@dev-thomynet.de > + + o BIOS-Menu : System Devices: Infrared Port: Customized: SIR, + 2F8, IRQ3 + + o Configuration : In BIOS you can configure many thinks for the + internal-infrared-port. First you have some choices: SIR or FIR or + AUTO. All kinds are tested and works - also FIR! For the COM-Port + you must set address in hex and irq. For FIR and AUTO you must also + DMA. If you have problems with address/irq look in ``COM-PORT- + Table''. Tested with all possibillity com-port from 1 to 4 and + their default irqs - no problems. DMA was set in all test to: 3. + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.2. DELL Latitude LM 166 + + + o BIOS-Version : Phoenix NoteBIOS 4.0 + + o CPU : Mobile Pentium, MMX, 166MHz + + o Memory : 40 MByte + + o Kernel : 2.2.5 + + o Distibution : SuSE 6.1 (german version) + + o reported from : Thomas Schneider < ts-ml@dev-thomynet.de > + + o BIOS-Menu : Peripherals: Integrated Peripherals: Infrared: COM2 + + o Configuration : You must enable in BIOS the internal-infrared-port + and must setup the COM-Port on which the internal ir-adapter should + work. If you want what infrared use COM2 you must set it here for + example. + + o Known Problems: no problems known yet + + o Note : - + + 5.1.3. DELL Latitude D266XT w/ C/Dock + + + o BIOS-Version : ???? + + o CPU : ???? + + o Memory : ???? + + o Kernel : ???? + + o Distibution : ???? + + o reported from : Stig-rjan Smelror < Stig.Orjan.Smelror@winther.net + > on 26. July to gnokii-ml + + o BIOS-Menu : Peripherals: Integrated Peripherals: Infrared: COM2 + + o Configuration : You must enable in BIOS the internal-infrared-port + and must setup the COM-Port on which the internal ir-adapter should + work. If you want what infrared use COM2 you must set it here for + example. + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.4. Fujitsu Lifebook B110 'Biblo' Laptop + + + o BIOS-Version : PhoenixBIOS v1.09 10/28/1998 + + o CPU : 233 MMX + + o Memory : 32 MByte + + o Kernel : 2.2.5-15 + + o Distibution : Redhat 6.0 + + o reported from : Tuomas Salo < tuomas@optinet.fi > on 28. July to + gnokii-ml + + o BIOS-Menu : ???? + + o Configuration : Serial B: Mode IrDA (not FIR), 3F8 IRQ 4 + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.5. Gericom (Network) Notebook with SIR-Infrared + + + o BIOS-Version : SystemSoft SCU For Intel 430TX/440BX + + o CPU : 233 MMX + + o Memory : ???? + + o Kernel : ???? + + o Distibution : ???? + + o reported from : Marcel Holtmann < marcel@rvs.uni-bielefeld.de > on + 22. July to gnokii-ml + + o BIOS-Menu : Components/COM Ports + + o Configuration : COM A: COM1, 3F8, IRQ4 (Standard Serial for + Cable or somthing else) COM B: COM2, 2F8, IRQ3 (Bulit in IR + Port) Mode for COM B: IrDA (HPSIR) + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.6. IBM Thinkpad 390 + + + o BIOS-Version : V1.0 R01-A7 + + o CPU : 233 MMX + + o Memory : 32 MByte + + o Kernel : 2.2.5-15 + + o Distibution : Redhat 6.0 + + o reported from : Mario Viljac < Mario.Viljac@znanost.hr > on 22. + July to gnokii-ml + + o BIOS-Menu : Config->Advanced Setup + + o Configuration : IR-port must be enabled, set also COM-Address and + IRQ. If you have problems with address/irq look in ``COM-PORT- + Table''. + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.7. IBM Thinkpad 600 + + + o BIOS-Version : ???? + + o CPU : ???? + + o Memory : ???? + + o Kernel : ???? + + o Distibution : ???? + + o reported from : Tuomas Mttnen < maattanen@iki.fi > on 06. July to + gnokii-ml + + o BIOS-Menu : ???? + + o Configuration : ???? + + o Known Problems: no problems known yet + + o Note : - + + + 5.1.8. Toshiba Libretto 70CT + + + o BIOS-Version : 6.20 + + o CPU : Intel P120MMX + + o Memory : 32 MByte + + o Kernel : 2.0.36 + + o Distibution : Red Hat 5.2 + + o reported from : Patrick Robbe < probbe@mail.dotcom.fr > on 30. July + to gnokii-ml + + o BIOS-Menu : ???? + + o Configuration : Infrared port (COM2) 2F8h / IRQ3, mode IrDA + compatible. + + o Known Problems: no problems known yet + + o Note : - + + + 5.2. Laptops - who don't work + + No mails for this part in moment. + + + 5.3. Mainboards - who work with gnokii + + Short list: + + o ``ASUS ????'' + + + 5.3.1. ASUS ???? + + + o BIOS-Version : ???? + + o CPU : ???? + + o Memory : ???? + + o Kernel : ???? + + o Distibution : ???? + + o reported from : mail from Victor L. Belov on 06. July to gnokii-ml + + o BIOS-Menu : ???? + + o Configuration : ???? + + o Known Problems: no problems known yet + + o Note : - + + + 5.4. Mainboards - who don't work with gnokii + + No mails for this part in moment. + + 5.5. External Adapters - who work with gnokii + + No mails for this part in moment. + + + 5.6. External Adapters - who don't work with gnokii + + Short list: + + o ``Tekram IR210B'' + + + 5.6.1. Tekram IR210B + + + o BIOS-Version : ???? + + o CPU : ???? + + o Memory : ???? + + o Kernel : ???? + + o Distibution : ???? + + o reported from : Any mails from some peopel. + + o BIOS-Menu : ???? + + o Configuration : ???? + + o Known Problems: don't work + + o Note : selfpowered over com-port Must be tested - mail to + gnokii-ml. + + + 6. Gnokii over infrared versus LINUX-IRDA + + You can not use gnokii over infrared and linux-irda at the same time. + If you want use gnokiis ir-communication you must put linux-irda off. + If you want use linux-irda you must close all gnokii-applications what + use the infrared-port in moment. + + + 7. FAQ + + No FAQ is available in moment. + + + 8. Appendix A: COM-Port-Table + + Here you find the default addresses and irq's from com1 up to com4 - + or ttyS0 up to ttyS3. + + + o ttyS0: 3F8, IRQ: 4, COM1 + + o ttyS1: 2F8, IRQ: 3, COM2 + + o ttyS2: 3E8, IRQ: 4, COM3 + + o ttyS3: 2E8, IRQ: 3, COM4 + + + diff --git a/Docs/gnokii.nol b/Docs/gnokii.nol new file mode 100755 index 0000000000000000000000000000000000000000..98859424f2e38d4689eecc5b391381a95b446877 GIT binary patch literal 1028 zcmb7B+Y!Pr3`-Yama+vOT>0z%U!4P4wnEy*$&ow!kR`>T+vi=Da^UwW55%SHWxbrI zoeOqqeTq1w(PqLh+qus=z3H@G*0k^P7gj`VEHmC3BrL>R!hi`#JjGKq`8MEF@(Ym2 z!*dHHMn=J5QfOtUeM=UJN$Bar9jb)JA@%f!kKgQH4>G&OBPugy*I!8^R~Sb~pP!(T k+k1jii$v0cO-{WE c #9A9A8A", +", c #A2B2A4", +"' c #DADEDC", +") c #524E4E", +"! c #869E85", +"~ c #8E7666", +"{ c #506250", +"] c #324A46", +"^ c #8F9080", +"/ c #6A626A", +"( c #ADBAAE", +"_ c #7B7A7B", +": c #7E967E", +"< c #667E66", +"[ c #CED2D0", +"} c #566653", +"| c #444244", +"1 c #293E38", +"2 c #878A77", +"3 c #566A56", +"4 c #424A44", +"5 c #121A16", +"6 c #B8C1BA", +"7 c #122E2A", +"8 c #0E0E10", +"9 c #26628E", +"0 c #D6DADA", +"a c #5A82A6", +"b c #768E76", +"c c #373E3A", +"d c #566E86", +"e c #757773", +"f c #E2E2E2", +"g c #545C59", +"h c #6A826A", +"i c #EEEEEF", +"j c #5E725E", +"k c #9EAE9C", +"l c #252D2B", +"m c #9AB2C2", +"n c #A2A692", +"o c #8F9A8F", +"p c #425650", +"q c #7E856D", +"r c #A6B4A6", +"s c #7C8A98", +"t c #BEC6BE", +"u c #AEAEAE", +"v c #1A322E", +"w c #666C68", +"x c #36423C", +"y c #6D6E6E", +"z c #494A49", +"A c #869EB2", +"B c #373A38", +"C c #828676", +"D c #262223", +"E c #4E6682", +"F c #828A72", +"G c #626A68", +"H c #0E0909", +"I c #151E1A", +"J c #9AA28A", +"K c #6E786E", +"L c #666666", +"M c #8E8E8E", +"N c #929E8A", +"O c #92A6B6", +"P c #828F7D", +"Q c #29342F", +"R c #DAD6DA", +"S c #464F46", +"T c #8E968A", +"U c #AEB5B0", +"V c #827A72", +"W c #768574", +"X c #B2BABA", +"Y c #7A8E77", +"Z c #3E423E", +"` c #D2D6D5", +" . c #5A655E", +".. c #82967F", +"+. c #F1F2F2", +"@. c #6E866E", +"#. c #9AAA99", +"$. c #BEBEBF", +"%. c #466686", +"&. c #7A927B", +"*. c #7C7F7B", +"=. c #767E7A", +"-. c #C9CECC", +";. c #1E2626", +">. c #787068", +",. c #9EA28E", +"'. c #0A0507", +"). c #687671", +"!. c #8AA288", +"~. c #829A81", +"{. c #E2E6E3", +"]. c #364644", +"^. c #667A65", +"/. c #5A6E5A", +"(. c #263A36", +"_. c #171615", +":. c #898A8A", +"<. c #5B5A5A", +"[. c #555654", +"}. c #A6A6A6", +"|. c #1C1E1C", +"1. c #7C867E", +"2. c #B2B2B2", +"3. c #BEC2C0", +"4. c #362E32", +"5. c #2E3631", +"6. c #889692", +"7. c #32463E", +"8. c #364A46", +"9. c #9EA292", +"0. c #060708", +"a. c #313E3C", +"b. c #667267", +"c. c #96A795", +"d. c #4D4E4C", +"e. c #889284", +"f. c #9A9A99", +"g. c #828671", +"h. c #3E524E", +"i. c #727E76", +"j. c #2E3A33", +"k. c #B6B6B6", +"l. c #A9AAAA", +"m. c #5A6A6A", +"n. c #646C70", +"o. c #3A4A45", +"p. c #D2D2D2", +"q. c #8C827E", +"r. c #929292", +"s. c #F5F6F6", +"t. c #768A86", +"u. c #7E8E84", +"v. c #6E826C", +"w. c #BABABA", +"x. c #9E9E8E", +"y. c #A2B2BE", +"z. c #616262", +"A. c #728A72", +"B. c #2E2D2D", +"C. c #526262", +"D. c #9AA296", +"E. c #8A9E87", +"F. c #828A84", +"G. c #5B5656", +"H. c #4C524E", +"I. c #060204", +"J. c #7E927B", +"K. c #3A463E", +"L. c #4D564D", +"M. c #4B5A57", +"N. c #828282", +"O. c #869A83", +"P. c #323A34", +"Q. c #728278", +"R. c #6A6662", +"S. c #454645", +"T. c #32423E", +"U. c #969697", +"V. c #625C56", +"W. c #526652", +"X. c #6A869A", +"Y. c #6A726D", +"Z. c #5E6A5E", +"`. c #5A5054", +" + c #CECECE", +".+ c #8A8E7E", +"++ c #768A73", +"@+ c #92AA90", +"#+ c #6A7E69", +"$+ c #C2C6C4", +"%+ c #6A7A68", +"&+ c #726A6A", +"*+ c #272627", +"=+ c #707270", +"-+ c #728670", +";+ c #1A221E", +">+ c #858685", +",+ c #9EA2A4", +"'+ c #D6D6D6", +")+ c #DEDEDE", +"!+ c #191A19", +"~+ c #8EA28A", +"{+ c #9E9E9E", +"]+ c #4E4E56", +"^+ c #DEDADE", +"/+ c #5E5E5E", +"(+ c #56665E", +"_+ c #667272", +":+ c #859686", +"<+ c #CACACA", +"[+ c #121616", +"}+ c #3E3E3E", +"|+ c #AAB2BE", +"1+ c #6E7E6F", +"2+ c #92A690", +"3+ c #4E4A4B", +"4+ c #323631", +"5+ c #5A6A62", +"6+ c #E6E6E6", +"7+ c #929A98", +"8+ c #7C8E7E", +"9+ c #C2C2C2", +"0+ c #3E4E4E", +"a+ c #424E44", +"b+ c #888E8B", +"c+ c #8E9296", +"d+ c #9EAEAA", +"e+ c #3A423D", +"f+ c #3E3A3E", +"g+ c #5F6661", +"h+ c #3A4643", +"i+ c #16221F", +"j+ c #627266", +"k+ c #5A6A5B", +"l+ c #E6E2E6", +"m+ c #969A8A", +"n+ c #1E221E", +"o+ c #C6C6C7", +"p+ c #0A0A0A", +"q+ c #525252", +"r+ c #3E4640", +"s+ c #4A4647", +"t+ c #121211", +"u+ c #4E5E4E", +"v+ c #4A5E56", +"w+ c #465252", +"x+ c #2C3A3A", +"y+ c #6B6A6A", +"z+ c #323A3A", +"A+ c #3E4A42", +"B+ c #A2A2A2", +"C+ c #93A196", +"D+ c #7A7276", +"E+ c #626E65", +"F+ c #DADADA", +"G+ c #BEBABE", +" J V d.q.) x z G.q+S.e+L.Y.1.o l.k.$+ +p.'+p.p.<+$.u {+b+=.G a+x+a.a.a.K.d.h+7 T.- H ", +" v+,.>.G.~ 4 x 4 e 7+3.f = 6+l+f )+)+)+' F+R F+R '+'+p.'+^+^+' )+` 2.e._+A+S | v x+(.H ", +" M.; &+S V.K 2.= i i i = = 6+l+0 R '+p.9+9+<+'+9+o+'+9+'+0 ' ' ^+' F+)+' F+3.b+7.x+(.H ", +" h.; R.e.i F+F+= = = 6+6+6+f {.R.c >+) y q+3+/+:.<.}.B.B+'+F+^+F+^+)+F+)+^+= 6+9+].1 8 ", +" p ,.z.X i '+F+= 6+= 6+f {.)+)+y f.;.q+/+z q+_ y+<.H./+z +F+F+F+)+)+^+)+F+6+= <+0+a.8 ", +" v+; <.$+= '+F+6+6+6+6+6+f f )+R ^+p.p.<+<+ +'+-. + +p. +'+'+F+F+F+F+' F+F+f i +h.T.8 ", +" u+,.G.[ 6+p.'+6+{.{.f l+)+^+'+[ <+o+9+$.w.X G+k.G+G+9+9+$+-.` '+F+F+)+F+F+f i p.M.7.% ", +" C.,.+ F+f +w.P 1.K b. .u+v++ + u+{ { 3 j j+$ ^.^.< %+^.1+1+Q.%+1+W u.e.T [ +.p.C.T.8 ", +" (+x.H.)+' <+E+{ W.W.3 3 3 /./.j j+$ $ $ ^.< #+#+#+h v.@.-+-+A.++Y b &.8+J.( s.p. .].t+ ", +" } x.p {.R $. .{ W.W.W.} 3 3 k+/.j $ $ $ ^.$ < #+#+#+h v.@.A.++A.++Y Y &.J.U +.F+G ].[+D ", +" .> S {.p.$.{ { { W.3 3 /././.j /.j $ $ ^.^.< #+#+#+h -+-+-+++b ++b J.&.J.r s.0 E+7.[+q+ ", +" 3 > h.= +2.} { W.} 3 3 3 /././.$ $ $ $ $ ^.^.#+#+v.v.-+A.Y ++J.J...J.J.: , s.F+Y.h+[+3+ ", +" k+> A+6+<+u W.W.W.W.3 /././.j j j $ ^.^.%+%+#+h h -+v.-+-+++E+:+-+F.: : ..k +.F+Y.].5 s+ ", +" E+^ 4 {.$+}.W.3 3 3 k+/./.j j j $ $ $ ^.< #+#+#+H.!++ ++++b j+l e.;.1+....#.s.^+=+].!+| ", +" E+^ a+{.9+{+{ 3 3 } P.A+r+S g+r+r+P.+ v.u+c r+^.a+I.) Z.S Q.j+_.F n+K ....#.s.^+=+x !+| ", +" j+^ K.l+6 {+W.3 3 P.. D . 8 d.. |.I.'.g+. *+'.p+) . z _.I.e.y I 1.Q *...O.c.s.' y 7.!+| ", +" j ^ o.f $.f.W.k+k+B . >.8 8 3+. H._.0.q+I.w !+. `.. I . 4+N C.|.).l *...~.C++.F+).].I | ", +" b..+r+F+6 U.W././.B . R.8 8 z . [.[+0.q+. R._.I.[.. . . _ : T.l /+% :+! O.2++.0 y 7.i+S. ", +" Q.^ r+p.$.c+W././.B . n.8 8 3+. G.t+'.3+I.y+_.. G.I.. . g+:+n+}+]+8 D.! O.c.i '+n.].i+S. ", +" t..+K.<+3.M W././.4+. _+8 8 3+. [._.'.3+I.y+!+I.<.I.. . *+E.8 S.c _.c.! ! C+s.` m.8.|.| ", +" ++2 r+3.$+:.3 j j B . e 8 8 z . [._.'.]+I.y+_.. G.. e+0.. 1.% }+a.t+D.!.! C+s.[ C.8.& s+ ", +" J.2 4 U <+b+W./.j B I.*+0.8 3+. [._.0./ . D 0.0.V.. H.4+. B I l H.'.o E.!.c.+.<+M.].i+z ", +" A.F r+#.-.:./.j $ K 4 s+. 8 Q.w F.Y.K T E+s+q+>+1.w F.Q.&+D+*._+O. .#.~+!.#.s.<+h.].i+3+ ", +" &.>+e+7+p.:./.j j .p+p+I.B P v.v.v.Q.-+++++++Y Y Y J.....~.~.! O.E.!.!.!.d+s.9+o.].i+d. ", +" : C ].s ` >+b.j $ %+%+Y.K P h h v.@.-+-+++Y Y Y J.&.J.......~.! ! !.!.~+~+r +.w.x 8.i+]+ ", +" 8+g.Z i.^+N.^.j j ^.^.%+%+#+v.v.@.-+-+A.++b b &.&.: : : O.! O.! E.E.~+# # U +.2.x+h+& ) ", +" ..g.Z E+)+N.%+/./.$ ^.< #+#+v.v.-+A.++++++Y Y J.J.......~.! E.!.~+~+~+# @+6 i }.a.8.& q+ ", +" ..g.e++ )+>+%+j $ $ ^.#+#+v.v.-+@.-+++b b Y &.&.J.: ..~.O.E.! E.!.!.# # 2+t = U.a.h+;+q+ ", +" ..g.T.o.)+:.K j $ ^.^.#+#+v.v.-+-+-+++++b Y Y &.J.: ..~.~.O.! ! !.~+# @+@+ +)+N.T.7.;+[. ", +" 6.q a.c +r.y j $ $ < #+h #+v.v.-+A.A.Y ++Y &.J.&.: ~...O.! ! E.E.!.# # @+' ' ).T.o.& G. ", +" e.q a.x 2.}.w j $ $ < #+h v.-+@.-+++A.Y b Y &.J.: : ~.~.O.! !.!.~+~+# 2+# {.[ g 7.].& <. ", +" ..q P.T.{+$._ i.v.Q.v.v.v.@.@.A.++A.++b &.J.J.: ....O.! ! E.! ~+# 2+c.@+, s.$+h.].h+n+<. ", +" o g.P.P.1. +w. +{.= {.' ` -.6 ( #.C+T ..J.J.J...E.~+#.U 6 $+-.-.[ p.p.'++.= X ] ].].n+D ", +" q j.P.G R $.p.f f )+F+[ <+ +<+p.'+' )+f {.6+6+6+6+f ' p.[ <+ +<+<+ +'+F+-.u 1 e+K.n+ ", +" q 5.4+A+R w.X G+$.3.o+<+-.p.p.p. +p. +p.'+R ^+)+f )+F+'+` + +-.<+o+<+o+o+M j.h+].n+ ", +" g.j.j.P.G+k.u 2.u u u u l.u l.2.k.$.o+o+ + +<+<+9+$.$.9+9+o+o+o+o+o+9+$.k.g+x K.K.;+ ", +" F j.P.a.B.| <.z._ {+}.l.}.l.}.}.}.}.l.l.x.{+l.2.w.$.$.$.$.$.$.$.l._ q+S.Q [+x e+e+n+ ", +" q 5.5.4+l -.)+<+B+e /+>+B+B+B+B+B+}.f.<.e e q+U.2.k.w.$.$.G+r.q+/ r.G+o+{+;.x x o.;+ ", +" q 5.5.5.P.l.[ |+p.R p.M <.M {+B+{+{+<. + + +9+[.x.k.k.w.}.[.N.$+<+o+u r.e B.x x K.;+ ", +" q j.j.Q B w '+O a @ F+'+<+R.U.{+B+z.w.9+2.l.G+2.<.u w.k.L o+ + +$+s d ,+| T.].e+e+;+ ", +" g.5.P.5.5.B $+p.m 9 A 9+3.{+:.f.U._ 2.B+4.;.U.u _ M 2.u B+3.3.k.%.E ,+:.l e+].h+r+;+ ", +" q 4+Q Q 4+a._ ` -.d+X.l.{+_ f.{+L u }.U.C M :.B+2.z.2.w.r.B+l.l.s }.{+]+a.].h+h+K.|. ", +" F P.5.5.4+5.c G+o+w.B+b+y {+f.f.y $.2.u l.u 2.u k.y+}.k.G+>+:.f.{+{+>+Q Z h+h+h+h+;+ ", +" F B Q 4+4+4+j.z.9+2.>+*.{+r.r.M :.$.o+<+ + +<+o+9+r.N.u k.w.c+*.f.U.| x e+e+r+r+A+I "}; diff --git a/Docs/logos.txt b/Docs/logos.txt new file mode 100644 index 0000000..04a8c5a --- /dev/null +++ b/Docs/logos.txt @@ -0,0 +1,54 @@ +$Id$ + +------------------------[ Tutorial about logos files ]------------------------- +nol (operator logo) and ngg (caller logo) files include the header as few +first bytes of their content. That is 16 or 20 bytes structure. Header +contains type of the file, netcode, width and height of icon. But width and +height of icon is very important. Why? Because in NOKIA 7110, width = 72 bytes +and height = 28 lines, and in other NOKIA phones witdh = 72 bytes, but height +is only 14 lines ( thx for that info to Gabriele Zappi ). + +[1] NOL header + + 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + N O L 0 1 0 x 0 1 0 x 0 x 0 1 0 1 0 x 0 + + so : + first 3 bytes that's type of file + next 3 bytes (4,5,6) - nothing important + next 4 (7,8,9,10) - network code : + sprintf(netcode, "%d %02d", header[7] + 256 * header[8], header[9]); + <<<<<<<<<<< this line is from common/gsm-common.h >>>>>>>>>>> + + next 3 (11,12,13) - very important bytes : + width of icon = header[11] + height of icon = header[13] + another 7 bytes (14,15,..,20) - I think that's nothing special + +[2] NGG header + + 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + N G G 0 1 0 x 0 x 0 1 0 1 0 x 0 + + so : + first 3 bytes that's type of file + next 3 bytes (4,5,6) - nothing important + next 3 (7,8,9) - very important + width of icon = header[7] + height of icon = header[9] + another 7 bytes (10,11,..,16) - nothing special + +[3] icon's bytes + +To show icon on terminal you can read (height) times 72 bytes line and print +these lines in the terminal: + + ... + for (i = 0; i < heigth; i++) { + read(buffer, 1, width, fd); + printf("%s\n", buffer); + } + ... + +------------------[ 2001 crayola <--> szuflandia corporation ]----------------- + crayola@polbox.com klepacz@juni.gliwice.pl diff --git a/Docs/man/gnokii.1 b/Docs/man/gnokii.1 new file mode 100644 index 0000000..1c9e4a2 --- /dev/null +++ b/Docs/man/gnokii.1 @@ -0,0 +1,196 @@ +.TH "gnokii" "1" "July 15, 2000" "" "Gnokii" +.SH "NAME" +gnokii \- modem/fax driver for Nokia mobile phones +.SH "SYNOPSIS" +.B gnokii +\fIOPTION\fR [\fIARGUMENT\fR]... +.SH "DESCRIPTION" +.PP +.B gnokii +is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL. +.PP +.B gnokii +supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively. + +.SH "OPTIONS" +The options that are recognized by +.B gnokii +can be divided into several different groups. + +.SS GENERAL +.TP +.BR "\-\-help" +display usage information. +.TP +.BR "\-\-version" +displays version and copyright information. +.TP +.BR "\-\-monitor" +continually updates phone status to stderr. + +.SS DIALING +.TP +.BR "\-\-getspeeddial \fIn\fP" +reads speed dial from the specified location. +.TP +.BR "\-\-setspeeddial \fInumber\fP \fImemory_type\fP \fIlocation\fP" +specify speed dial. +.TP +.BR "\-\-dialvoice \fInumber\fP" +initiate voice call. +.TP +.BR "\-\-senddtmf \fIstring\fP" +send DTMF sequence. + +.SS PHONE SETTINGS +.TP +.BR "\-\-getdisplaystatus" +shows what icons are displayed. +.TP +.BR "\-\-displayoutput" +show texts displayed in phone's screen. +.TP +.BR "\-\-getprofile [\fInumber\fP]" +show settings for selected(all) profile(s). +.TP +.BR "\-\-netmonitor {\fIreset\fP|\fIoff\fP|\fIfield\fP|\fIdevel\fP|\fInext\fP|\fInr\fP}" +setting/querying netmonitor mode. +.TP +.BR "\-\-reset [\fIsoft\fP|\fIhard\fP]" +resets the phone. + +.SS CALENDAR +.TP +.BR "\-\-getcalendarnote \fIstart\fP [\fIsend\fP] [\-v]" +get the note with numbers from \fIstart\fR to \fIend\fR from calendar. +.PP +[\-v] \- output in vCalendar 1.0 format +.TP +.BR "\-\-writecalendarnote" +write the note to calendar. +.TP +.BR "\-\-deletecalendarnote \fIstart\fP [\fIend\fP]" +delete the note with numbers from \fIstart\fR to \fIend\fR from calendar. + +.SS SMS +.TP +.BR "\-\-getsms \fImemory_type\fR \fIstart\fP [\fIend\fP] [\-f \fIfile\fP] [\-d]" +gets SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR]. +If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read. +If [\-f \fIfile\fR] is used entries are saved in \fIfile\fR. +Otherwise they are dumped to stdout. +If [\-d] switch is used, a message is deleted after reading. +.TP +.BR "\-\-deletesms \fImemory_type\fP \fIstart\fP [\fIend\fP]" +deletes SMS messages from specified \fImemory type\fR starting at entry [\fIstart\fR] and ending at [\fIend\fR]. +If [\fIend\fI] is not specified only one location \- [\fIstart\fR] is read. +.TP +.BR "\-\-sendsms \fIdestination\fP [\-\-smsc \fImessage_center_number\fP | \-\-smscno \fImessage_center_index\fP] [\-r] [\-C \fIn\fP] [\-v \fIn\fP] [\-\-long \fIn\fP]" +sends an SMS message to \fIdestination\fR via \fImessage_center_number\fR or SMSC number taken from phone memory from address \fImessage_center_index\fR. +If this argument is ommited SMSC number is taken from phone memory from location 1. +Message text is taken from STDIN. +This function has had limited testing and may not work at all on your network. +Meaning of other optional parameters: +.PP +[\-r] \- request for delivery report +.PP +[\-C \fIn\fR] \- Class Message \fIn\fR, where \fIn\fR can be 0..3 +.PP +[\-v \fIn\fR] \- validity in minutes +.PP +[\-\-long \fIn\fR] \- send no more then \fIn\fR characters, default is 160 +.TP +.BR "\-\-savesms [\-m] [\-l \fIn\fP] [\-i]" +saves SMS messages to the Outbox. Messages are read from STDIN. You can specify the following optional arguments: +.PP +[\-m] \- mark the message as sent +[\-l \fIn\fR] \- save the message at location \fIn\fR on the SIM card +[\-i] \- ask before overwriting specified location +.TP +.BR "\-\-getsmsc \fInumber\fP" +show the SMSC number from location \fInumber\fR. + +.SS LOGOS +.TP +.BR "\-\-sendlogo {\fIcaller\fP|\fIop\fP} \fIdestination\fP \fIlogofile\fP [\fInetwork_code\fP]" +send the \fIlogofile\fR to \fIdestination\fR as operator or CLI logo. +.TP +.BR "\-\-setlogo \fIlogofile\fP [\fInetwork_code\fP]" +.TP +.BR "\-\-setlogo \fIlogofile\fP [\fIcaller_group_number\fP] [\fIgroup_name\fP]" +.TP +.BR "\-\-setlogo \fItext\fP [\fIstartup_text\fP]" +.TP +.BR "\-\-setlogo \fIdealer\fP [\fIdealer_startup_text\fP]" +set caller, startup or operator logo. +.TP +.BR "\-\-getlogo \fIlogofile\fP {\fIcaller\fP|\fIop\fP|\fIstartup\fP} [\fIcaller_group_number\fP]" +get caller, startup or operator logo. + +.SS RINGTONES +.TP +.BR "\-\-sendringtone \fIdestination\fI \fIrtttlfile\fP" +send the \fIrtttlfile\fR to \fIdestination\fR as ringtone. +.TP +.BR "\-\-setringtone \fIrtttlfile\fP" +set the \fIrtttlfile\fR as ringtone (on 6110). + +.SS PHONEBOOK +.TP +.BR "\-\-getmemory \fImemory_type\fP \fIstart\fP [\fIend\fP]" +reads specificed memory location from phone. +If [\fIend\fR] is not specified only one location \- [\fIstart\fR] is read. +Valid \fImemory types\fR are: ME, SM, FD, ON, EN, DC, RC, MC, LD. +.TP +.BR "\-\-writephonebook [\-i]" +reads data from stdin and writes to phonebook +When \-i option is used, refuses to overwrite existing entries. +Uses the same format as provided by the output of the getphonebook command. + +.SS DATE, TIME AND ALARM +.TP +.BR "\-\-setdatetime [\fIYYY\fP [\fIMM\fP [\fIDD\fP [\fIHH\fP [\fIMM\fP]]]]]" +set the date and the time of the phone. +.TP +.BR "\-\-getdatetime" +shows current date and time in the phone. +.TP +.BR "\-\-setalarm \fIHH\fP \fIMM\fP" +set the alarm of the phone. +.TP +.BR "\-\-getalarm" +shows current alarm. + +.SS SECURITY +.TP +.BR "\-\-identify" +get IMEI, model and revision. +.TP +.BR "\-\-entersecuritycode {\fIPIN\fP|\fIPIN2\fP|\fIPUK\fP|\fIPUK2\fP}" +asks for the code and sends it to the phone. +.TP +.BR "\-\-getsecuritycodestatus" +show if a security code is needed. + +.SH "DIAGNOSTICS" +Various error messages are printed to standard error. The exit code +is 0 for correct functioning. Errors which appear to be caused by +invalid or abused command line parameters cause an exit code of 2, and +other errors cause an exit code of 1. + +.SH "BUGS" +.PP +We write quality software here ;) + +.SH "AUTHOR" +Hugh Blemings and Pavel Janik ml. + +Manual page written by Dag Wieers and Pawel Kot + +See also Docs/CREDITS from Gnokii sources. + +.SH "COPYING" +This program is distributed under the GNU Public License. + +.SH "SEE ALSO" +gnokiid, xgnokii diff --git a/Docs/man/gnokiid.8 b/Docs/man/gnokiid.8 new file mode 100644 index 0000000..99c2b90 --- /dev/null +++ b/Docs/man/gnokiid.8 @@ -0,0 +1,63 @@ +.TH "gnokiid" "8" "May 27, 2001" "" "Gnokii" +.SH "NAME" +gnokiid \- create a virtual modem for Nokia portable phones +.SH "SYNOPSIS" +.B gnokiid + +.B gnokiid +[\fB\-\-help\fR|\fB\-\-version\fR|\fB\-\-debug\fR] + +.SH "DESCRIPTION" +.PP +.B gnokiid +is a tool from the Gnokii tool suite used to create a virtual modem device with a Nokia portable telephone. The virtual modem device is usually accessed via a symbolic link called /dev/gnokii (created automatically by \fBmgnokiidev\fR(8)). + +.PP +After +.B gnokiid +has created the virtual modem, it can be accessed like any other Hayes\-compatible modem by such programs as the terminal program \fBminicom\fR(1) or the PPP daemon \fBpppd\fR(8) to make standard data connections to remote computers. + +.PP +The full range of portable telephone functions (SMS messaging, phone book, operator logos, etc.) are accessed using the command\-line program \fBgnokii\fR(1) or the graphical interface program \fBxgnokii\fR(1x). + + +.PP +Gnokii +is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL. +.PP +Gnokii +supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively. + +.SH "OPTIONS" +.PP +If called without any options, \fBgnokiid\fR will set up a virtual modem device using the settings in /etc/gnokiirc or in the user's ~/.gnokiirc (if it exists). Otherwise, + +.TP +\fB\-\-help\fR +print out a short usage message +.TP +\fB\-\-version\fR +print out version, copyright, phone, and serial device info +.TP +\fB\-\-debug\fR +uses STDIN/STDOUT for a virtual modem +.SH "DIAGNOSTICS" +Various error messages are printed to STDERR. +.SH "BUGS" +.PP +Hmmm... + + +.SH "AUTHOR" +Hugh Blemings and Pavel Janik ml. are the authors of the +Gnokii +tool suite. + +This manual page was written by Erik Rossen . + +See also Docs/CREDITS from the Gnokii sources. +.SH "COPYING" +This program is distributed under the GNU Public License. + +.SH "SEE ALSO" +gnokii, xgnokii, mgnokiidev diff --git a/Docs/man/mgnokiidev.8 b/Docs/man/mgnokiidev.8 new file mode 100644 index 0000000..03db0aa --- /dev/null +++ b/Docs/man/mgnokiidev.8 @@ -0,0 +1,49 @@ +.TH "mgnokiidev" "8" "May 27, 2001" "" "Gnokii" +.SH "NAME" +mgnokiidev \- links /dev/gnokii to a virtual modem +.SH "SYNOPSIS" +.B mgnokiidev \fI/dev/pts/?\fR + +.SH "DESCRIPTION" +.PP +.B mgnokiidev +is a tool from the Gnokii tool suite used to create the link /dev/gnokii that points to a pseudo\-tty (/dev/pts/?). + +.PP +It is called after +.B gnokiid +has created a virtual modem that is attached to the pty. It's operation is transparent under normal usage as gnokiid takes care of calling it when required. + +.PP +Since +.B mgnokiidev +must modifiy files in /dev, it must be either run as root or SUID root. The latter is the preferred method. Normally the +.B mgnokiidev +binary is chmod 4750 and owned by root.gnokii. + +.PP +Gnokii +is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL. +.PP +Gnokii +supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively. + +.SH "DIAGNOSTICS" +Various error messages are printed to STDERR. +.SH "BUGS" +.PP +None reported. + + +.SH "AUTHOR" +Hugh Blemings and Pavel Janik ml. are the authors of the +Gnokii tool suite. + +This manual page was written by Erik Rossen . + +See also Docs/CREDITS from the Gnokii sources. +.SH "COPYING" +This program is distributed under the GNU Public License. + +.SH "SEE ALSO" +gnokiid, gnokii diff --git a/Docs/man/todologo.1 b/Docs/man/todologo.1 new file mode 100644 index 0000000..db9b969 --- /dev/null +++ b/Docs/man/todologo.1 @@ -0,0 +1,56 @@ +.TH todologo 8 "January 3, 2001" "GNOKII Tools" "GNOKII Tools" + +.SH NAME +todologo \- Create operator logo that contains 3 lines of text + +.SH SYNOPSIS +.B todologo +\fI - - \fR + +.SH DESCRIPTION +The +.B todologo +program is used to create three lines of text +that fits to the standard Nokia operator logo space (i.e. 72x14 +pixel space). This is achieved by using a proportional tiny font +which most elements have size of 3x4 pixels (some are thinner). + +The name comes from an original intention that this program is +used to create todo entries to one's mobile phone screen so that +those are always visible and thus in user's memory. But the tool +can just be used to print arbitrary text to the space provided +by an operator logo. + +The hand-crafted font currently supports the following characters: +abcdefghijklmnopqrstuvwxyz and 0123456789 + +.SH OUTPUT +The standard `.nol' formatted operator logo is printed to +standard output. The header information of that output is taken +from \fIgnokii.nol\fR that is distributed with +.B GNOKII +-- so you most probably need to give your operator code when uploading it to your +mobile phone. Use +.B gnokii +or +.B xgnokii +to do the uploading. + +.SH EXAMPLES +First example writes some todo entries to todo.nol: +.IP +\fCtodologo pick up kids - call wife - order chinese >todo.nol\fP +.LP +This last example writes some wisdom to the stdout: +.IP +\fCtodologo Never underestimate - the power of the dark - side of the force\fP +.LP +.SH AUTHOR +Tomi Ollila + +.SH COPYING +This program is distributed under the GNU Public License. + +.SH SEE ALSO +.BR gnokii(1), xgnokii(1x) + diff --git a/Docs/man/xgnokii.1x b/Docs/man/xgnokii.1x new file mode 100644 index 0000000..16f1037 --- /dev/null +++ b/Docs/man/xgnokii.1x @@ -0,0 +1,39 @@ +.TH "xgnokii" "1x" "May 27, 2001" "" "Gnokii" +.SH "NAME" +xgnokii \- graphical interface of the Gnokii telephone toolkit +.SH "SYNOPSIS" +.B xgnokii + +.SH "DESCRIPTION" +.PP +.B xgnokii +is a fancy graphical interface for Gnokii. It has on\-line help and plenty of doo\-dads. +.PP +Gnokii +is a Linux/Unix tool suite and (eventually) modem/fax driver for Nokia mobile phones, released under the GPL. +.PP +Gnokii +supports most phones from the 3810/8110 and 5110/6110 series, details including bugs specific to each series appear in the files Docs/README\-3810 and Docs/README\-6110 respectively. + +.SH "DIAGNOSTICS" +Various error messages are printed to STDERR. +.SH "BUGS" +.PP +This man page is too short. The only excuse is that the online help in xgnokii is extensive. Click and see for yourself. + +.SH "AUTHOR" +Jan Derfinak is the author of the +.B xgnokii +. + +Hugh Blemings and Pavel Janik ml. are the authors of the +Gnokii tool suite. + +This manual page was written by Erik Rossen . + +See also Docs/CREDITS from the Gnokii sources. +.SH "COPYING" +This program is distributed under the GNU Public License. + +.SH "SEE ALSO" +gnokii, gnokiid diff --git a/Docs/packaging-howto b/Docs/packaging-howto new file mode 100644 index 0000000..04725f2 --- /dev/null +++ b/Docs/packaging-howto @@ -0,0 +1,142 @@ +$Id$ + +The gnokii Packaging HOWTO + + +PURPOSE + +Read this document if you want to build gnokii binary packages for your +system or repackage gnokii for a system that is not yet supported. + + +GENERAL POLICY + +For more install/compilation information see the INSTALL file. + +Makefiles support 'make install prefix=' for package +building. For example, in .spec: + + ./configure --prefix=/usr + + make install prefix=$RPM_BUILD_ROOT/usr + +(You do not need to create any directories - just 'make && make install'.) + +For installation procedures use 'make install' or 'make install prefix=', +and verify that all outputs from the procedure are correct. + +Please, DO NOT make any corrections using your package-specific build +system (for example, using 'cp' in packaging scripts like .spec). +Installation is a job for Makefiles. Writing different installation +procedures for different packaging systems is the road to hell... + +The only exception to the above rule is documentation. 'make install' +does not install documentation - one should use each distributions' +packaging routines for this job. If you want to install docs via a +Makefile use 'make install-docs'. + + +SYSTEM-SPECIFIC INFORMATION + +Debian: + +1) Add new lines to Debian/changelog and set the correct version number +in this file. + +2) Check the following files: + + rules, menu, docs, *.manpages + +3) Since gnokii's debian directory is in the subdirectory 'packaging' +which is totally non-standard for the Debian package building system, +you must first 'cd' to the top gnokii directory and type: + + ln -s packaging/Debian debian + +4) In the top gnokii directory type: + + fakeroot debian/rules binary + +5) And then clean up: + + fakeroot debian/rules clean + + rm debian + +The .deb packages will appear in the directory ABOVE the top gnokii +directory. + +Alternatively, if you want to build everything including sources (.tar.gz, +.dsc, and .changes files), go to the top gnokii directory and type: + + dpkg-buildpackage -rfakeroot + +instead of invoking "debian/rules binary" directly. Note that you will +need the fakeroot package installed, but are there any Debian developers +that don't have that one installed? Nope. If you want to sign the +packages with your own PGP key, you will need to make a new first entry +in the Debian changelog. + + +RedHat: + +Just type: + + rpm -ta gnokii-$VERSION.tar.gz + +where $VERSION is the version of the gnokii distribution that you are +packaging. + + +Slackware: + +1) Create a gnokii directory and put the gnokii tarball there: + + mkdir gnokii + + cp gnokii-X.Y.Z.tar.gz gnokii + +2) Extract SlackBuild from the tarball and copy it into the gnokii +directory, eg.: + + tar xzf gnokii-X.Y.Z.tar.gz + + cp gnokii-X.Y.Z/packaging/Slackware/SlackBuild gnokii + +3) Run SlackBuild: + + cd gnokii + + chmod 755 ./SlackBuild ; ./SlackBuild + +4) A Slackware package is now located in /tmp/gnokii.tgz. + + +FreeBSD: + + +Win32: + + +DOCUMENT HISTORY + +2001-06-18 + +Erik Rossen + +* fixing Debian notes to mention 'fakeroot' and 'dpkg-buildpackage' + +2001-04-20 + +Erik Rossen + +* fixing English grammar and spelling errors, but no change of information + +* changing to a flatter format for easier editing: sections separated +by double spacing and only system commands indented with a tab + +* file is always treated with GNU 'fmt' with no options + +Pawel Kot + +* Slackware build instructions added diff --git a/Docs/protocol/nk2110.txt b/Docs/protocol/nk2110.txt new file mode 100644 index 0000000..b7137eb --- /dev/null +++ b/Docs/protocol/nk2110.txt @@ -0,0 +1,200 @@ +$Id$ + +Assembled by + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + Pavel Machek + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in GSM Nokia 2110 and derivatives: +Correct format is MBUS version 1 (see nokia.txt for protocol details): + + List: + +0x12: + r Display {+?, ?, ?, x, y, string, 0x00 } +0x19: + s Enable display status {+0x03, 0x03, 0x00, 0x00, 0x01} +0x1f: phonebook + s Get mem location {+0x1a, memtype, location } + where: memtype: + 0x03: telephone phonebook + 0x04: SIM phonebook + s Set mem location {+0x1b, memtype, location, name, 0x00, number, 0x00 } + where: memtype: see 0x1f/0x1a +0x2f: + r Status {+?, byte1, byte2, byte3, byte4, byte5} + where byte1 (for N2110): + bit 0 - "d", bit 2 - "b", bit 4 - "a", bit 6 - "lights" + byte2 (for N2110): + bit 0 - "service",bit 2 - "scroll_up",bit 4 - "scroll_down",bit 6 - "ABC" + byte3 (for N2110): + bit 0 - "2.>", bit 2 - "1.>", bit 4 - "roam", bit 6 - "handset" + byte4 (for N2110): + bit 0 - "vmail", bit 2 - "envelope", bit 4 - "battery bar",bit 6 - "3.>" + byte5 (for N2110): + bit 4 - "fieldbar", bit 6 - "ring" +0x37: SMS + r SendSMS/GetSMS/DelSMS/{+0x10, code, frame } + SetSMSC/GetSMSC where: + code: 0x08 - SMS send OK + frame: + 0x1d 0x24 0x25 (latter 2 in order) + 0x0b - SMS get OK + Frame: + memtype, location, msgstatus, unknown2, unknown2, 0x00, date(7 bytes) in BCD, msglen, msgtext, recipient, + 0x00, smsc, 0x00 + Where: + memtype, msglen, msgtext: see 0x38/0x1002 frame + msgstatus, unknown2, unknown3: see 0x37/0x21 + Note: This frame used only, when FrameLength < 0x75 + 0x0d - SMS delete OK + 0x0f - SMS delete failed + 0x10 - SMS send failed + frame: + 0x1d 0x24 0x25 (latter 2 in order) + 0x10 - SMS get failed + 0x1a - SMS message received (by phone). + Frame: + memtype, location, unknown1, unknown2, 0x00, date(7 bytes) in BCD, msglen, sender, + 0x00, smsc, 0x00 + where + memtype: see 0x38/0x1002 frame + unknown1: 0x00 0x00 0x04 more messages? + true:0x00 + false:0x04 + unknown2: 0x20 0x20 0x20 + 0x1c - SMSC set OK + 0x1d - SMSC set failed + 0x2f - SMSC get OK + Frame: + 0x00, 0x00, unknown1, unknown2, 0x00, 0x00, unknown3, unknown4, unknown5, + 0x00, smsc, 0x00 + Where: + unknown1: 0x05 0x08 + last memtype location used or number of messages?? + unknown2: 0x02 0x00 + unread messages indicator?? + unknown3: 0xff + validity period? + unknown4: accept reply costs? + no:0x01 + yes:0x02 + unknown5: status reports + no:0x01 + yes:0x02 + 0x30 - SMSC get failed + r Get SMS part 2 {+0x20, ... continuation of 0x37/0x21 frame } + r Get SMS part 1 {+0x21, 0x0b, memtype, location, msgstatus, unknown2, unknown3, 0x00, date(7 bytes) in BCD, msglen, msgtext} + where memtype: see 0x38/0x1002 + msgstatus: + message status + not sent: 0x07 + sent: 0x05 + unread: 0x03: + read: 0x01 + unknown2: more messages ? + true: 0x00 + false: 0x04 + this flag seems to be set by locust when a message (e.g. tv) is split across more than 1 sms + unknown3: 0x20 +0x38: SMS + s Send SMS message {+0x1000, unknown, pr, 0x00, validity, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + msglen, msgtxt, recipient, 0x00, smsc, 0x00} + where: unknown: 0x11 or 0x91 parameter mask? + (data, data coding, protocol but 0x80?) + pr: 0x00 or protocol id + 0x20 + validity: 0x0b: 1 hour + 0x47: 6 hours + 0xa7: 24 hours + 0xad: 1 week + 0xff: max.time + msglen: SMS message length + msgtext: message string (unterminated) + recipient: receipient`s number string + smsc: SMS centre number string + Note: Used when FrameLength < 0x75 + s Get SMS message {+0x1002, memtype, location } + where: memtype: + 0x01: default + 0x02: SIM + 0x03: phone + s Delete SMS message {+0x1003, memtype, location } + where: memtype: see 0x38/0x1002 + r ??? {+0x1006...} + s Reserve SMS {+0x1012, } + s Enable cell broadcast {+0x1013, ...} + s Kill reserve SMS {+0x1014} + r New msg from network ?{+0x1015...} + r Reserve SMS OK {+0x1016} + r Reserve SMS err {+0x1017, error} + s Set SMSC {+0x101b, unknown, pr, 0x00, validity, reply, report, 0x00, smsc, 0x00, 0x00 } + where: + pr: protocol id + 0x20 + validity: 0x0b: 1 hour + 0x47: 6 hours + 0xa7: 24 hours + 0xad: 1 week + 0xff: max.time + reply: reply via same SMSC: + 0x01: no + 0x02: yes + report: delivery reports: + 0x01: no + 0x02: yes + unknown: 0x74, 0x75 parameter mask ?? + s Get SMSC {+0x101e, 0x09, 0xe9} + s Send SMS message 2part{+0x20, continuation of 0x38/0x21 frame } + Note: Used when FrameLength >= 0x75 + Format the same to 0x38/0x1000 frame + s Send SMS message 1part{+0x21, unknown, pr, 0x00, validity, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + msglen, msgtext } + Note: Used when FrameLength >= 0x75 + Format the same to 0x38/0x1000 frame +0xc9: phonebook + r Get mem location {+0a1a, memtype, location, code, {name}, 0x00, {number}, 0x00 } + where: memtype: see 0x1f/0x1a + code: + 0x64 - invalid location + 0x65 - device failure + 0x66 - device not available + 0x67 - entry locked + 0x68 - communication error + 0x69 - update impossible + 0x6a - number too long + 0x6b - name too long + 0x82 - store ok + 0x83 - read ok + 0x84 - number overflow + name: name string, only present on "read ok" code + number: phone number string, only present on "read ok" code + r Set mem location {+0a1a, memtype, location, code } + where: memtype: see 0x1f/0x1a + code: see "Get mem location" +0xe9: + s Start connection {+0x00, 0x02, 0x1c, 0x00, 0x1c} + Note: this is message with SrcDEV = 0xf8 ! + ACK frame for it is (DestDEV = 0xf8 too) 0x1c, 0x01, 0x1c + According to http://www.gadgets.demon.co.uk/nokia21xx/protocol.html + s Start connection {+0x01, 0x01, 0x0f, 0x01, 0x0f} + Note: frame according to mbus-2110.c from gnokii (Normal DestDEV) +0xcd: + r Enable display status {+0x01} +0xe5: + s Phone ID request {+0x11, 0x03, 0x00} + s Get RF level {+0x84, 0x02, 0x00} + s Get battery level {+0x85, 0x02, 0x00} + s Press key {+press: ?; release: ?; 0x00, 0x01, keycode } + where keycode: +0xe6: + r Phone ID request {+0x11, 0x03, "revision", "\n", "revision_date", "\n", "model"} + r Get RF level {+0x84, 0x02, 0x00, ?, value} + r Get battery level {+0x85, 0x02, 0x00, ?, value} diff --git a/Docs/protocol/nk3110.txt b/Docs/protocol/nk3110.txt new file mode 100644 index 0000000..5c1d19b --- /dev/null +++ b/Docs/protocol/nk3110.txt @@ -0,0 +1,231 @@ +$Id$ + +Assembled by + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +GSM Nokia 3110 and derivatives (3810,8110,8110i): +Correct format is FBUS version 1/MBUS version 1 (?) +(see nokia.txt for protocol details): + + List: + +0x02: + r RLP ? {....} +0x0a: + s Make call {+type of call, type of number?, numlen, number, uk1, uk2, uk3 } + where type of call: see 0x0b + Note: If destination number is "1" - "9", + call for number in corresponding memory location is made. +0x0b: + r Incoming call {+type of call, 0x00, namelen, name } + where type of call: + 0x01 Data + 0x02 ?? + 0x03 ?? + 0x04 ?? + 0x05 Voice +0x0c: + s Answer incoming call {} +0x0d: + r Incoming call answered{} + from ME +0x0e: + r Call established {+type of call, 0x00, 0x00 } + where type of call: see 0x0b +0x0f: + s Call hang up {} +0x10: + r Call hanged up from ME{} + seq1 +0x11: + r CallClosed-by other end{+unknown, reason} + where: + unknown reason + 0x65 0x10 Hanged up by other end + 0x1c virheellinen numero + 0x65 0x1f Number is not in use + 0x65 0x4f Check operator services + 0x65 0xa6 No destination number (sms sending) + 0x65 0xe4 --''-- + 0x6f 0x6f + 0x7d 0x7d + 0x7f 0x7f + 0x83 0x83 +0x12: + r Call hanged up from ME{} + seq2 +0x13: + r Power ON seq {} +0x15: + s Initialization {} +0x16: + r Initialization OK {+simstate } + where simstate: + 0x01 No SIM present, or waiting for PIN + 0x02 SIM present and ready. +0x17: + r Initialization err {+error } +0x20: + s Send DTMF {+length,string} +0x21: + r Send DTMF OK {} +0x22: + r Send DTMF err {+error } + where error: + 0x70: invalid location +0x23: + s Send SMS Header {+first octet, PID, DCS, validity(7 bytes), UDL, SMSClen, SMSC, receiverlen, receiver} +0x24: + s Save SMS Header {+memtype,status(2bytes),PID, DCS, validity(7 bytes), UDL, SMSClen, SMSC, receiverlen, receiver, receivertype } + where: memtype: + 2=SIM + 3=ME + status: see 0x2c +0x25: + s Get SMS message {+memtype, location } + where: memtype - see 0x30 + Note: In successful request, phone sends one "SMS Header" and one or more "SMS Data" packets. + In failure, phone sends "Get SMS message err" packet +0x26: + s Delete SMS message {+memtype, location } + where: memtype - see 0x30 +0x27: + r SMS Data {+seq,block} + where: seq: starts from 0x01 and is increased by 1 after each block transmitted. + block: Block of User Data (max 55 chars) + s Send/Save SMS Data {+seq,block} +0x28: + r SMS sent OK {+reference?} +0x29: + r SMS sent error {+error1, error2} +0x2a: + r SMS saved OK {+memtype} + where: memtype - memory, where SMS was saved +0x2b: + r SMS saving err {+error} +0x2c: + r SMS Header {+memtype, location, status(2 bytes), PID, DCS, date (7 bytes), UDL, senderlen, sender, SMSClen, SMSC, sendertype} + where: + memtype, PID, DCS, date, UDL, sender, SMSC, sendertype - see 0x30 + status: 0701: Saved, not sent + 0501: Sent + 0304: Received, unread + 0204: Unread + 0104: Received, read +0x2d: + r Get SMS message err {+error} +0x2e: + r Delere SMS message OK {} +0x2f: + r Delete SMS message err{+error} +0x30: + r SMS message received {+memtype, location, unknown, PID, DCS, date(7 bytes), UDL, senderlen, sender, SMSClen, SMSC, sendertype} + where: memtype: + 0x01 Phone Selected + 0x02 SIM + 0x03 ME + location: Memory location (1...) + unknown: most of time 0x04 + PID: Protocol Identifier + DCS: Data Coding Scheme + date: sending date in BCD + UDL: User Data Length + sender: sender number + SMSC: SMSC number + sendertype: type of sender number: + 0x31 International without leading '+' ??? + 0x91 International +0x32: + r Delivery report receiv{+unknown,delivery time(7 bytes),report time(7 bytes),0x00,MR, + destinationlen,destination,SMSClen,SMSC,destinationtype} +0x3c: + s Set SMSC {+bitmask,format,unknown1,validity,reply,reports,unusedlen,unused,SMSClen,SMSC} + where: + bitmask: info, what we change + 7 ?? + 6 reports + 5 reply + 4 SMSC number + 3 unused + 2 validity + 1 unknown + 0 format + format: + 0x00 Text + 0x22 Fax + 0x24 Voice + 0x25 ERMES + 0x26 Paging + 0x2d E-mail + 0x31 X.400 + validity: + 0 to 143 (validity + 1) * 5 minutes (i.e. 5 minutes intervals up to 12 hours) + 144 to 167 12 hours + ((validity - 143) * 30 minutes) + 168 to 196 (validity - 166) * 1 day + 197 to 255 (validity - 192) * 1 week +0x3d: + r Set SMSC OK {} +0x3e: + r Set SMSC err {} +0x3f: + s Get SMSC {} +0x40: + r Get SMSC {+memory,AllSMSphone,unreadSMSphone,AllSMSSIM,unreadSMSSIM, + format,unknown1,validity,reply,reports,unusedlen,unused,SMSClen,SMSC} + where: format,unknown1,validity,reply,reports,unusedlen,unused,SMSClen,SMSC - see 0x3c + memory: selected memory + AllSMSphone: number of all SMS in phone + unreadSMSphone: number of unread SMS in phone + AllSMSSIM: number of all SMS on SIM + unreadSMSSIM: number of unread SMS on SIM +0x42: + s Set mem location {+memtype, location, namelen, name, numlen, number } + where memtype: see 0x43 +0x43: + s Get mem location {+memtype, location } + where: memtype: + 0x01 Phone Selected + 0x02 SIM + 0x03 ME + 0x04 Own numbers (at SIM) +0x44: + r Set mem location OK {} +0x45: + r Set mem location err {+error } +0x46: + r Get mem location OK {+namelen, name, numlen, number } +0x47: + r Get mem location err {+error } +0x48: + r PIN entered {} +0x49: + r Power OFF seq {} +0x4a: + s Status request {} +0x4b: + r Status request {+status, network, battery } + where status: + 0x01 Idle + 0x02 Network interworking + 0x03 Call open + 0x04 No Network Access (Waiting for PIN or + Unaccessable Operator selected) + network and battery - signal level +0x4c: + s Get phone info {} +0x4d: + r Get phone info {+IMEI, 0x00, Code, 0x00, HW, 0x00 } + where IMEI: IMEI Code + CODE: Same as Code in phones back side + HW: hardware version diff --git a/Docs/protocol/nk6110.txt b/Docs/protocol/nk6110.txt new file mode 100644 index 0000000..a4f35ed --- /dev/null +++ b/Docs/protocol/nk6110.txt @@ -0,0 +1,664 @@ +$Id$ + +Assembled by + Balazs Nagy (js@lsc.hu) + Alfred R. Nurnberger + Hugh Blemings + Mike Bradley + Odinokov Serge + Pavel Janik + Pawel Kot + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +GSM/PCN Nokia 6110 and derivatives (Nokia 6130, 6150, 6190, 5110, 5130, 5150, +5190, 3210, 3310) +Correct format is FBUS version 2/Direct IRDA/MBUS version 2 +(see nokia.txt for protocol details): + + List: + +0x00: Monitoring values + r monitoring value {+0x01, 0x01, block... } + where block: 0x5e, 0x05, 0x7a(?), 0xd0(?), 0x85(?), 0x02, percentHI, percentLO + Battery percent level + 0x5e, 0x0c, 0x52(?), 0x4b(?), 0x6f(?), 0x02, voltageHI, voltageLO + Battery standby voltage + ............ +0x01: Call Information + s Make call { 0x0001, "number", type, block } + where type: + 0x01 - data call + 0x05 - voice call + block: + data call (non digital lines): + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00 + data call (digital lines): + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + 0x88,0x90,0x21,0x48,0x40,0xbb + voice call: + 0x01, 0x01, 0x05, 0x81/0x00, sendnum, 0x00, 0x00, 0x01 + where: + sendnum (own number sending): + 0x01: preset (depends on network) + 0x03: on + 0x02: off + r Call going msg { 0x0002 } + r Call in progress { 0x0003, seqnr } + r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } + r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } + s Answer call part 2 { 0x0006, seqnr, 0x00 } + r answered call { 0x0007, seqnr } + s Hang up { 0x0008, seqnr, 0x85 } + r terminated call { 0x0009, seqnr } + r call msg { 0x000a, seqnr } + r Send DTMF/voice call { 0x0040} + s Answer call part 1 { 0x0042,0x05,0x01,0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 } + s Sent after issuing { 0x0042,0x05,0x81,0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + data call 0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3, + (digital lines) 0xb8,0x81,0x20,0x15,0x63,0x80 } + s Sent after issuing { 0x0042,0x05,0x01,0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + data call 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80, + (non digital lines) 0x01,0x60 } + s Send DTMF { 0x0050, length, {ascii codes for DTMF}, 0x01 } + + Note: + to make data call (non digital lines): + 1.send "Make call" for non digital lines + 2.send "Sent after issuing data call (non digital lines)" + to make data call (digital lines): + 1.send "Answer call part 1" + 2.send "Sent after issuing data call (digital lines)" + 3.send "Make call" for digital lines + to answer call: + 1.send "Answer call part 1" + 2.send "Answer call part 2" + +0x02: SMS handling + s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } + r Message sent { 0x0002 } + r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} + s Get SMS message { 0x0007, 0x02, location, 0x01, 0x64 } + s Initiate connection { 0x000d, 0x00, 0x00, 0x02 } + r Initiate ACK { 0x000e, 0x01 } + r SMS message received { 0x0010, ...... } (whole message) + s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } + for enable cell broadcast ? + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + for disable cell broadcast ? + r Set CellBroadcast OK { 0x0021, 0x01 } + r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? + s Set SMS center { 0x0030, 0x64, priority, checksum? ,0?, format, + validity, {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + where tel.no.[12]: {len, type, {number(BCD)}} + type: 0x81: normal + 0x91: + (international) + 0xd0: alphanumeric + format: 0x00: text + 0x22: fax + 0x24: voice + 0x25: ERMES + 0x26: paging + 0x31: X.400 + 0x32: email + validity: 0x0b: 1 hour + 0x47: 6 hours + 0xa7: 24 hours + 0xa9: 72 hours + 0xad: 1 week + 0xff: max.time + r Set SMS center OK { 0x0031 } + r Set SMS center error { 0x0032, reason } + s Get SMS center { 0x0033, 0x64, priority } + r SMS center received { 0x0034, priority, checksum?, format, 0x00?, + validity, {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + tel.no[12]: {len, type, {number(BCD)}} + where priority, checksum, type, validity, + tel.no.[12]: see 0x02/0x0030 + r SMS center error recv { 0x0035, reason } +0x03: Phonebook functions + s Get mem location { 0x0001, memtype, location, 0 } + where memory: + 0x01: telephone and SIM phonebook (in one) + 0x02: telephone phonebook + 0x03: SIM phonebook + 0x04: SIM fixdialling-phonebook (?) + 0x05: Own numbers + 0x07: Dialled numbers + 0x08: Missed calls + 0x09: Received calls + 0x0b: voice mailbox (location not important) + r mem location recvd { 0x0002, 0x00,namelen,"name",numlen,"number",groupID, 0x01?, yearLO, yearHI, month, day, hour, minute, sec. } + Note: in 3310 all entries have null name ("feature" of bug ?) + r mem loc error recvd { 0x0003, errtype } + where errtype: 0x7d: invalid memory type + s Set mem location { 0x0004, memtype,location,namelen,"Name",numlen,"number",groupID } + r mem set OK { 0x0005 } + r mem set error { 0x0006, errtype } + where errtype: 0x7d: name is too long + s Mem status request { 0x0007, memtype } + r Mem status recvd { 0x0008, memtype, free, used } + r Mem status error recv { 0x0009, errtype } + where errtype: 0x6f: mem status error + 0x7d: invalid memory type + 0x8d: waiting for pin + s Get caller group data { 0x0010, groupID } + r Get caller group data { 0x0011, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } + r Get call.group error { 0x0012, reason } + where reason: 0x7d: invalid location + s Set caller group data { 0x0013, groupID, size, "Name", ringtoneID, graphic_on?1:0, lenHI, lenLO, OTABitmap (72x14 logo) } + r Set caller group OK { 0x0014 } + r Set call.group error { 0x0015, reason } + where reason: 0x7d: invalid location + s Get speed dial { 0x0016, index(1-9) } + r Get speed dial OK { 0x0017, mem.type, location } + where mem.type: 0x02: ME (== 0 if not stored) + 0x03: SIM + location: memory location (== 0 if not stored) + r Get speed dial error { 0x0018 } + s Set speed dial { 0x0019, index(1-9), mem.type, location } + r Set speed dial OK { 0x001a } + r Set speed dial error { 0x001b } +0x04: Phone Status + s Phone status { 0x0001 } + r Phone status { 0x0002, mode, signal str, ???, pwr, batt.level } + where mode: 1: registered within the network + 2: call in progress + 3: waiting for pin + 4: powered off + pwr: 1: AC/DC + 2: battery + s Request Phone ID { 0x0003 } + r RequestPhone ID { 0x0004, 0x01,"NOKIA""imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", 0x00, 0x01 } +0x05: Profile settings + s Set profile feature { 0x0010, 1, nr, feature, a, 1 } + where nr: see 0x05/0x0013 + feature: see 0x05/0x0014 + a: see 0x05/0x0014 + r Set profile feat. OK { 0x0011, 1 } + s Get profile feature { 0x0013, 1, nr, feature, 1 } + where nr is profile number (general=0, silent, meeting, outdoor, pager, car, headset=6) + feature: see 0x05/0x0014 + r Get profile feature { 0x0014, 1, nr, feature, 4, a, b, c, d, 1 } + Features and answers (in a, b, c, d form): + 0x00: keypad notes (in Nokia 3310 feature 0x00) + xx, 1, 0, 2 + xx: 0xff: off + 0x00: level 1 + 0x01: level 2 + 0x02: level 3 + 0x01: lights (? only in car profile) (what number in Nokia 3310 ?) + xx, 0, 0, 1 + xx: 0x00: off + 0x??: on (maybe 0x01) + 0x02: incoming call alert (in Nokia 3310 feature 0x01) + xx, 1, 0, 7 + xx: 1: ringing, + 2: beep once, + 3: unknown + 4: off + 5: ring once + 6: ascending + 7: caller groups (see feature #0x08) + 0x03: ringing tone (in Nokia 3310 feature 0x02) + xx, 0, 0, 0 + xx: 0x12: ring ring + 0x13: low + etc + 0x04: ringing volume (in Nokia 3310 feature 0x03) + xx, 0, 0, 0 + xx: level 1 (0x06) - level 5 (0x0a) + 0x05: message alert tone (in Nokia 3310 feature 0x04) + xx, 1, 0, 4 + xx: 0: no tone + 1: standard + 2: special + 3: beep once + 4: ascending + 0x06: vibration (in Nokia 3310 feature 0x05) + xx: 0: off + 1: on + 0x07: warning and game tones (in Nokia 3310 feature 0x06 called warning tones) + xx, 4, 0, 4 + xx: 0xff: off + 0x04: on + 0x07: screen saver - Nokia 3310 + xx: 1: on + 0: off + 0x08: incoming caller groups (what number in Nokia 3310 ?) + xx, 0, 0, 0 + xx: 1: family + 2: VIP + 4: friends + 8: collegues + 16: other + 0x09: automatic answer (what number in Nokia 3310 ?) + xx, 0, 0, 1 + xx: 0x00: off + 0x01: on + s Get welcome message { 0x0016 } + r Get welcome message { 0x0017, no.of blocks, { block } * } + where block: { id, {blockspecific} } + id: 1: startup logo { y, x, picture (coding?) } + 2: welcome note { len, "message" } + 3: operator msg { len, "message" } + s Set welcome message { 0x0018, no.of blocks, { block } * } + where block: see 0x05/0x0017 + r Set welcome OK { 0x0019, 0x01 } + s Get profile name { 0x001a, nr } + where nr: see 0x05/0x0013 + r Profile name { 0x001b, 1, 1, 3, flen, nr, len, {text} } + where nr: see 0x05/0x0013 + len: text length + flen len + len(nr, len) = len + 2 + Note: in Nokia 3310 name is in Unicode + s ??? { 0x001c } + r ??? { 0x001d, 0x93 } + s Set oplogo { 0x0030, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } + r Set oplogo OK { 0x0031 } + r Set oplogo error { 0x0032, reason } + where reason: 0x7d invalid location + s Get oplogo { 0x0033, location } + where location: 1 (doesn't seem to matter) + r Get oplogo { 0x0034, location, MCC1, MCC2, MNC, lenhi=0x00, lenlo=0x82, OTABitmap } + r Get oplogo error { 0x0035, reason } + where reason: 0x7d invalid location + s Set ringtone { 0x0036, location,0x00,0x78, ringtone packed according to SM2.0} + r Set ringtone OK { 0x0037 } + r Set ringtone error { 0x0038, reason } + where reason=0x7d, when not supported location + s Get services settings { 0x0080, setting (2 bytes) } + where: setting: 0x02,0x00=Nokia access number 1 + 0x02,0x01=Operator access number 1 + 0x01,0x00=Personal bookmark 1 settings (name only ?) + 0x01,0x01=? + 0x02,0x02=? + r Get services sett.OK { 0x0081, .... } + r Get services sett.err { 0x0082, 0x7b } +0x06: Calling line restriction/Call forwarding etc + s Set call divert { 0x0001, 0x03, 0x00, divtype, calltype, 0x01, number(packed like in SMS), 0x00, 0x00...,timeout} + NOTE: msglen=0x37 + where timeout: + 0x00: not set ? + 0x05: 5 second + 0x0a: 10 second + 0x0f: 15 second + 0x1e: 20 second + 0x14: 25 second + 0x19: 30 second + where divtype: + 0x02: all diverts for all call types ? + Found only, when deactivate all diverts for all call types (with call type 0x00) + 0x15: all calls + 0x43: when busy + 0x3d: when not answered + 0x3e: if not reached + calltype: + 0x00: all calls (data, voice, fax) + 0x0b: voice calls + 0x0d: fax calla + 0x19: data calls + s Deactivate calldiverts{ 0x0001, 0x04, 0x00, divtype, calltype, 0x00 } + where divtype, calltype: see above + s Get call diverts { 0x0001, 0x05, 0x00, divtype, calltype, 0x00 } + where divtype, calltype: see above + r Get prepaid(?) info { 0x0005, ?,?,?,length,message(packed like in 7bit SMS)} +0x07: + s ??? { 0x0022, ? (1&2 sounds OK) } + r ??? OK { 0x0023, ?,?,? } + r ??? error { 0x0024, reason } + s ??? { 0x0025, ??? } + r ??? OK { 0x0026, ??? } + r ??? error { 0x0027, reason } +0x08: Security codes + s Change code { 0x0004, code, "current", 0x00, "new", 0x00 } + where code: 1: security code (5 chars) + 2: PIN (4 chars) + 3: PIN2 (4 chars) + 4: PUK (8 chars) + 5: PUK2 (8 chars) + s Status request { 0x0007, 0x01 } + r pin recvd { 0x0008, accepted } + where accepted: 0x0c (or 0x06): OK + code: waiting for (0x08/0x0004) code + s entering code { 0x000a, code, "code", 0x00 } + where code: see 0x08/0x0004 +0x09: SIM login + r login { 0x0080 } + r logout { 0x0081 } +0x0a: Network status + s Key duplication on/off{ 0x0044, on? 0x01: 0x02 } + s get used network { 0x0070 } + r network registration { 0x0071, ?,?,?,length,netstatus,netsel,cellIDH,cellIDL,lacH,lacL,netcode,netcode,netcode } +0x0c: Keys + s Get key assignments { 0x0040, 0x01 } + r Get key assignments { 0x0041, {key '1'}, 0x00, {key '2'} ... {key '0'}, 0,0,0, {symbols}, 0 } + where {key '0'} => ' ', '0' + s Press key { 0x0042, press: 0x01; release: 0x02, button, 0x01 } + where button: 0x01 - 0x09: 1-9 + 0x0a: 0 + 0x0b: # + 0x0c: * + 0x0d: Power + 0x0e: Pick up phone + 0x0f: Hang + 0x10: Volume + + 0x11: Volume - + 0x17: Up + 0x18: Down + 0x19: Menu + 0x1a: Names + 0x1B onwards: don't know but they do produce + a beep and light up the keypad as if + a key had been pressed. + r Press key ack { 0x0043, press/release/error(0x05) } + s ??? { 0x0044 } + r ??? ack { 0x0045, 0x01 } +0x0d: Status + r Display { 0x0050, 0x01, y, x, len, "string"(unicode) } + s Status request { 0x0051 } + r Status { 0x0052, no. of byte pairs, {byte pair} } + where {byte pair}: {cmd, 1:off 2:on} + cmd: 1: call in progress + 2: ??? + 3: have unread sms + 4: voice call active + 5: fax call active + 6: data call active + 7: key lock active + 8: is SMS storage full + s Display status { 0x0053, 1:on 2:off } + (will send displayed messages with x,y coordinates) + r Display status ack { 0x0054, 1 } +0x11: Phone clock & alarm + s set date and time { 0x0060, 1,1,7,yearh,yearl,month,mday,hour,min,0x00 } + r date and time set { 0x0061 } + s get date and time { 0x0062 } + r date and time recvd { 0x0063,date_set?,time_set?,?,?,yearh,yearl,month,mday,hour,min,second } + where: date_set & time_set==0x01 - set + 0x00 - not set, ?,?,yearh,yearl,month,mday,hour,min,second + not available in frame + s set alarm { 0x006b, 1,32,3,0x02(on-off),hour,min,0x00 } + r alarm set { 0x006c } + s get alarm { 0x006d } + r alarm received { 0x006e,?,?,?,?,alrm(==2:on),hour,min } +0x12: Connect to NBS port (61xx only ?) + s Send {+0x0c, 0x01, UDH header, data} + (without 0,1 header -- for oplogo, cli, ringtone etc upload) + where: UDH header = 0x06, 0x05, 0x04,destporth,destportl,srcporth,srcportl + Seems not to work in MBUS! +0x13: Calendar notes + s Write calendar note { 0x0064, 0x01, 0x10, length, type, yearH, yearL, month, day, hour, timezone, + alarm?(alarm yearH, yearL, month, day, hour, timezone): (0,0,0,0,0,0), + textlen, "text" } + r Write cal.note report { 0x0065, return } + where return: 0x01: ok + 0x73: failure + 0x81: calendar functions busy. Exit Calendar menu and try again + s Calendar notes set { 0x0066... } + r Calendar note recvd { 0x0067, 0x01, ?, length, type, yrH,yrL,mon,day,hr,tz,alrm yrH,yrL,mon,day,hr,tz,textlen, "text" } + r Cal.note recvd error { 0x0067, err } + where err: 0x93: not available + (0x01: OK) + other: error + s Delete cal.note { 0x0068, location } + r Del. cal.note report { 0x0069, err } + where err: 0x01: OK + 0x93: cannot delete +0x14: SMS funcs + s Write SMS to SIM { 0x0004, .... } + s Mark SMS as read { 0x0007, 0x02, location, 0x00, 0x64 } + r SMS message frame rcv { 0x0008,subtype,?,num,?,BCD(smscenter)...} 20->type, 22->status + where type: 0x06: delivery report + status: 0x00: delivered + 0x30: pending + 0x46: failed + 0x09: reading failed + subtype: 0x02: invalid mem type + 0x07: empty SMS location + 0x0c: no access to memory (no PIN in card, etc.) + s Delete SMS message { 0x000a, 0x02, location } + r Delete OK { 0x000b } + s SMS status request { 0x0036, 0x64 } + r SMS status { 0x0037,?,?,?,?,?,?,msgnumber,unread } + r SMS status error { 0x0038 } +0x40: Security commands + s ??? {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00} + This frame hangs phone (N3310 4.02). Meaning unknown ! + s Open simlock 1 { 0x02, 0x03, 0x1f, 0x11, 0x01, 0x01, 0x10, 0x00} + r Open simlock 1 { 0x02 } + s ???(N6150) { 0x08, 0x00 } + r ???(N6150) { 0x08 } + s Enable extended cmds { 0x64, cmd } + where cmd: 0x00: off + 0x01: on + 0x02: enter service mode ? + 0x03: reset (doesn't ask for PIN again) + 0x04: reset (PIN is requested) + In 5110 makes reset without PIN + 0x06: CONTACT SERVICE!!! Don't try it! + s Reset phone settings { 0x65, value, 0x00 } + where value: 0x08 - reset UI (User Interface) settings + 0x38 - reset UI, SCM and call counters + r Reset phone settings { 0x65, 0x00 } + s Get IMEI { 0x66 } + r Get IMEI { 0x66, 0x01, IMEI, 0x00} + s (ACD Readings)?(N6150 { 0x68 } + r (ACD Readings)?(N6150 { 0x68, ... } + s Get Product Profile + Settings { 0x6a} + r Get Product Profile + Settings { 0x6a, 4bytes with Product Profile Settings } + s Set Product Profile + Settings { 0x6b, 4bytes with Product Profile Settings } + r Set Product Profile + Settings OK ? { 0x6b } + s Get code { 0x6e, code } + where code: see 0x08/0x0004 (only sec.code is allowed) + r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } + where code: see 0x08/0x0004 + allowed: 0: no + 1: yes + s Set code { 0x6f, code, sec code(text), 0x00 } + where code: see 0x08/0x0004 + s Start monitoring { 0x70, block } + where block(N6150): + 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xf9,0x76,0x65,0x20,0x00, + 0x00,0x00,0x00,0x00,0x18,0x26,0x15,0x7d,0x0a,0x00, + 0xf5,0x82,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x77,0x80, + 0x77,0x80,0xf2,0x82,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20 + This block enables probably all possible monitorred parameters. + After it phone sends 0x00 message type values + s Break monitoring { 0x71 } + r Break monitoring { 0x71 } + s Reset Permanent + Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } + r Reset Permanent + Counters (nm->test36) { 0x74 } + s Call commands { 0x7c, block } + where where: command, (values) + command: 0x01 + values: number(ASCII), 0x00 - makes voice call + command: 0x02 - answer call + command: 0x03 - release call + r Call commands { 0x7c, command } + s Netmonitor { 0x7e, field } + where: field: 00: next + F0: reset + F1: off + F2: field test menus + F3: developer menus + s Open simlock 2 { 0x81, 0x01, locknumber, 0x10, 0x10, 0x10, 0x10, 0x10 } + Note: sets simlock type to factory? + where locknumber: 1,2,4,8 + s Open simlock 2 { 0x81, 0x01, locknumber } + where locknumber: 1,2,4,8 + s Close simlock { 0x82, 0x01, locknumber, 0x00, 0x00, locksinfo(lock1,4,2,3), 0x00 } + where locknumber: 1,2,4,8 + r Close simlock { 0x82, the rest like in 0x40/0x8a } + s Get simlock info { 0x8a, 0x00} + r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } + where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock + locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed + counter1 - counter4: counters for locks + s Set downloaded OpName { 0x8b, 0x00, MCC1, MCC2, MNC, Name, 0x00 } + r SetdownloadedOpNameOK?{ 0x8b, 0x00, 0x01 } + s Get downloaded OpName { 0x8c, 0x00 } + r Get downloaded OpName { 0x8c, 0x00, 0x01, MCC1, MCC2, MNC, Name, 0x00,...} + s Buzzer pitch { 0x8f, volume, hzLO, hzHI } + if volume and hz is 0, it's off + r Buzzer pitch { 0x8f} + s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } + r ACD Readings ? { 0x91, parameter?, value? } + s Sleep mode test { 0x92, 0x00, 0x00, howlong(2 bytes), enable } + where: enable == 0x01 - enable after test + 0x00 - don't enable after test + howlong (ms) = 0x07, 0xd0 = 2000 + s ???(N6150) { 0x98, 0x00 } + r ???(N6150) { 0x98, 0x00, 0x04 } + s Get bin ringtone { 0x9e, location } + where: location=0,1,etc. + r Get bin ringtone { 0x9e, location, error, contents... } + where location=0,1,etc. + error=0x0a, ringtone NOT available + 0x00, OK + s Set bin ringtone { 0xa0, location, 0x00, contenst... } + where: location=0,1,etc. + r Set bin ringtone { 0xa0, location, error } + where location=0,1,etc. + error=0x0a, ringtone NOT set + 0x00, ringtone set OK + r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } + s Get info about phone { 0xc8, 0x01 } + r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get MCU SW Checksum { 0xc8, 0x02 } + r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } + s DPS External SW { 0xc7, 0x03 } + r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } + s Get HW { 0xc8, 0x05 } + r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } + s Get "Made" Date { 0xc8, 0x05 } + r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } + s Get DSP Internal SW { 0xc8, 0x09 } + r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } + s Get PCI version { 0xc8, 0x0b } + r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } + s Get system ASIC { 0xc8, 0x0c } + r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } + s Get COBBA { 0xc8, 0x0d } + r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } + s Get PLUSSA { 0xc8, 0x0e } + r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } + where available: 0x01: not available + s Get CCONT { 0xc8, 0x0f } + r Get CCONT { 0xc8, 0x0f, available, 0x00 } + where available: 0x01: not available + s Get PPM version { 0xc8, 0x10 } + r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get PPM info { 0xc8, 0x12 } + r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } + s Set HW version { 0xc9, 0x05, version, 0x00 } + s Get Product Code { 0xca, 0x01 } + r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } + s Get Order Number { 0xca, 0x02 } + r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } + s Get Prod.Ser.Number { 0xca, 0x03 } + r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } + s Get Basic Prod.Code { 0xca, 0x04 } + r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } + s Set Product Code { 0xcb, 0x01, product code, 0x00 } + s Set Order Number { 0xcb, 0x02, number, 0x00 } + s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } + s Get (original ?)IMEI { 0xcc, 0x01 } + r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } + s Get Manufacture Month { 0xcc, 0x02 } + r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } + s Get Purchare date { 0xcc, 0x04 } + r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } + s Set "Made" date { 0xcd, 0x02, string, 0x00 } + s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} + s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} + Where num1-num4: 0x02,0x00,0x00,0x00; + 0x04,0x00,0x00,0x00; + 0x08,0x00,0x00,0x00; + 0x10,0x00,0x00,0x00; + 0x20,0x00,0x00,0x00; + 0x40,0x00,0x00,0x00; + 0x80,0x00,0x00,0x00; + 0x00,0x01,0x00,0x00; + 0x00,0x02,0x00,0x00; + 0x00,0x04,0x00,0x00; - "Power off" + No test for "Security data" + 0x00,0x10,0x00,0x00; + 0x00,0x20,0x00,0x00; + 0x00,0x40,0x00,0x00; + 0x00,0x80,0x00,0x00; + 0x00,0x00,0x01,0x00; + .... + 0x00,0x00,0x10,0x00; + s Result of phone tests { 0xcf } + r Result of phone tests { 0xcf, number of tests, results of next tests } + s ??? { 0xd1 } + r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } + s LCD Test { 0xd3, value } + where value: 0x03, 0x02 - 1'st test + 0x03, 0x01 - 2'nd test + 0x02, 0x03 - clears screen + s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} + r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} + s Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes } + where: numofbytes - how many bytes to read + Note: Works ONLY in MBUS + r Get EEPROM { 0xd4, 0x02, 0x00, 0xa0, locationLo, locationHi, numofbytes, contest... } + where numofbytes - how many bytes available + contest - bytes with contests (if numofbytes != 0) +0x41: Snake game ? +0x47: + s Get Picture Image { 0x0001, location } + r Get Picture Image when contains sender number + { 0x0002, location, number(like in SMS), 0x00, len, text, 0x00, width, height, 0x01, bitmap } + NOTE: + Supports only 0x81 and 0x91 coding (NOT alphanumeric numbers!) + in sender without sender number + { 0x0002, location, 0x00, 0x00, 0x00, len, text, 0x00, width, height, 0x01, bitmap } + s Set Picture Image { 0x0003, frame...} + where frame: see 0x47/0x0002 + r Get/Set PictureImageOK{ 0x0004 } + r Set Picture Image err { 0x0005, error? } + where error=0x74 - wrong location ? +0x64: + s Phone ID request { 0x0010 } + r Phone ID recvd { 0x0011, "NOKIA", "imei", 0, "model", 0, "prod.code", 0, "HW", 0, "firmware", magic bytes x 4 ... } + s Accessory connection { 0x0012, 16x0x00, 'NOKIA&NOKIA accessory', 3x0x00 } (45 bytes) +0x7f: Acknowledge(FBUS/IRDA){+type, seq } + Acknowledge(MBUS)... +0xd0: + s Power on message seq1 {+04 } + r Power on message seq1 {+05 } +0xd1: + s Get HW&SW version { 0x0003, 0x00 } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } +0xda: ? (during playing 2 player snake) +0xf0: + s Send RLP frame {+0x00, 0xd9, ... } +0xf4: Power on message seq 2 diff --git a/Docs/protocol/nk6160.txt b/Docs/protocol/nk6160.txt new file mode 100644 index 0000000..574a318 --- /dev/null +++ b/Docs/protocol/nk6160.txt @@ -0,0 +1,98 @@ +$Id$ + +Assembled by + + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +TDMA NOKIA 5120 / 5160 / 6120 / 6160 + +TDMA phones support simultaneously both MBUS protocols +(see nokia.txt for protocol details) +the old one (version1) and the new (version2). Both protocols can be used +at the same time on the MBUS. The phone will decode both and react accordingly. + +Correct format is MBUS version 1: + + List: + +0x17: + s Release key {+0x00, keynum } + s Press key {+0x01, keynum } +0xe9: + s Start connection {+0x01 0x01 0x1c 0x01 0x1c} + (3Com cell modem card)Note: this is message with SrcDEV = 0xf8 ! + ACK frame for it is (DestDEV = 0xf8 too) 0x1c, 0x01, 0x1c + s Start connection {+0x00 0x02 0x1d 0x00 0x1d} + Note: this is message with SrcDEV = 0xf8 ! + +Other frames from 3Com cell modem card (MBUS version 1): + unknown purpose : 00 E0 00 1D SQ CS + probably request + Alive response from cellmodem + UC_RESERVE_REQ: 00 E0 05 19 00 00 01 01 00 SQ CS + register system state info presentation + UC_RESERVE_REQ: E0 00 01 CD 01 SQ CS + phone tries to register some info from cellmodem + + Dialing as cellmodem forces the phone into analoge AMPS mode, + answering a call as cellmodem answers in AMPS mode + This allows transparent transmission of the analoge modem tones since + digital TDMA won't transmit them transparently. + It also switches audio to the XEAR , XMIC pins automatically. + + LN_ALIVE_REQ: E0 00 00 1E SQ CS + checks if cellmodem is still present (sent 1 /sec.) + SYS_STATE_IND: FF 02 07 CA 1C Con 02 01 0E 0F 00 SQ CS + sytems state information + Con holds the connection state + 00 = idle + 01 = ringing + 02 = connecting + 03 = talk + 04 = ringing / alternating with 01 + the destignation is the Global object and the source + is subaddress 02 of the Nokia phone. + +Correct format is MBUS version 2: + + List: + +0x40: + s Read phonebook(2way) {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, location } + Note: works also on CDMA 6185 + s Read phonebook(1way) { 0x1F, 0x01, 0x04, 0x86, location } + s Write phonebook { 0x1f, 0x01, 0x04, 0x87, number, 0x00, name, 0x00 } + s Enable extended cmds { 0x64, cmd } + where + cmd(probably): 0x00: off + 0x01: on + 0x03: reset (doesn't ask for PIN again) + 0x04: reset (PIN is requested) + In 5110 makes reset without PIN + 0x06: CONTACT SERVICE!!! Don't try it! +0xd1: + s Registration request? {+0x00, 0xF8, 0x05, 0xE9, 0x00, 0x02, 0x1D, 0x00, 0x1D} + s Get HW&SW version { 0x0003, 0x00 } + s Get phone version? { 0x000D, 0x00, 0x00, 0x02} + s ??? { 0x47, 0x00, 0x00} + s ??? { 0x47, 0x00, 0x05} + s Key release(1way) { 0x50, 0x00, 0x00, KEY } + s Key press { 0x50, 0x00, 0x01, KEY } + dials in digital TDMA default mode ? + s Key release(2way) { 0x51, 0x00, 0x01, KEY } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } + r Get phone version { 0x000D, "V " "firmware\n" "firmware date\n" } + r Key press {+0x01, 0x00, 0x50, 0x00} + r ??? {+0x01, 0x00, 0x47, 0x00} diff --git a/Docs/protocol/nk6185.txt b/Docs/protocol/nk6185.txt new file mode 100644 index 0000000..bd8ec88 --- /dev/null +++ b/Docs/protocol/nk6185.txt @@ -0,0 +1,52 @@ +$Id$ + +Assembled by + + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +CDMA Nokia 6185. +Correct format is MBUS version 2 +(see nokia.txt for protocol details): + + List: + +0x07: Phonebook functions ? + s Set mem location {0x0710, 0x00, memory, 0x00, location, length, number(each byte contains two digits), 0x00, ..., name[23], 0x00 } + where: memory 0x22 - internal phonebook + max. length for name 15 + max. length for number 15 bytes (30 digits) + s Get mem location {0x0711, 0x00, memory, 0x00, location } + where: memory 0x22 - internal phonebook +0x40: +? s Read phonebook {+0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, location } + s Get phone memory ? {+0x00, 0x01, 0xc8, 0xXX} +0xd1: +? s Registration request? {+0x00, 0xF8, 0x05, 0xE9, 0x00, 0x02, 0x1D, 0x00, 0x1D} + s Get HW&SW version { 0x0003, 0x00 } +? s Get phone version? { 0x000D, 0x00, 0x00, 0x02} +? s ??? { 0x47, 0x00, 0x00} +? s ??? { 0x47, 0x00, 0x05} + s Press key { 0x51, 0x00, 0x01, KEY } + dials in digital CDMA default mode? + s Key release { 0x52, 0x00, 0x01, KEY } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } +? r Get phone version { 0x000D, "V " "firmware\n" "firmware date\n"} +? r ??? {+0x01, 0x00, 0x47, 0x00} +0xdd: Phonebook functions ? + r Get mem location {+0x01, 0x00, block, length, number(each byte contains two digits), 0x00, ..., name[23], 0x00 } + where: block: 0x11, 0x00, memory, 0x00, location (bytes like in 0x07/0x0711) + memory 0x22 - internal phonebook + max. length for name 15 + max. length for number 15 bytes (30 digits) diff --git a/Docs/protocol/nk640.txt b/Docs/protocol/nk640.txt new file mode 100644 index 0000000..9818fd1 --- /dev/null +++ b/Docs/protocol/nk640.txt @@ -0,0 +1,33 @@ +$Id$ + +Assembled by + Andrew Kozin + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in NMT Nokia 640 and derivatives: +Correct format is MBUS version 1 (see nokia.txt for protocol details): + + List: + +0x0f: + r Get serial number {+0x19, 0x03, 0x00, 0x01, 0x0b, 0x00, 0x00} + s Get mem location {+0x2d, 0x03, 0x00, 0x07, 0x1f, 0x7f, 0xf0, 0x00, location?, 0x00, 0x00} + s Get startup logo {+0x60, 0x03, 0x00, 0x07, 0x3A, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00} +0x10: + s Set startup logo {+0x08,0x03,0x00,0x07,0x3A,0x7F,0xF0,0x00,0x00,0x00,0x00,0x54, bitmap } + s Set mem location {+0x10,0x08,0x03,0x00,0x07,0x1F,0x7F,0xF0,0x00, + location,0x00,0x00,0x00,0x21,numlen,number,name[starts on 30 byte],0x00,0x05[starts on 46 byte]} +0x19: + s Get RF level {+0x02,0x01,0x07} + s Get battery level {+0x02,0x01,0x00} +0x43: + s Reset {+0x00, 0x00} diff --git a/Docs/protocol/nk7110.txt b/Docs/protocol/nk7110.txt new file mode 100644 index 0000000..c95d9b9 --- /dev/null +++ b/Docs/protocol/nk7110.txt @@ -0,0 +1,527 @@ +$Id$ + +Assembled by + Balazs Nagy (js@lsc.hu) + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + Jens Bennfors + Michael Hund + Jay Bertrand + Gabriele Zappi + Markus Plail + ... and other members of gnokii mailing list + and authors of some WWW pages. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + +Document describing frames used in +GSM Nokia 6210 and derivatives (7110) +Correct format is FBUS version 2/Infrared/MBUS version 2 +(see nokia.txt for protocol details): + + List: + +0x00: Connect to NBS port ? + r Set ringtone {+0x7c,0x01,0x00,0x0d,0x06[6],0x78,ringtone packed according to SM2.0} + Seems not to work in MBUS! +0x01: Communication Status +? r Call msg { 0x0002 } +? r Call in progress { 0x0003, seqnr } +? r Remote end hang up { 0x0004, seqnr, ?, error (like in netmon in 39) } +? r incoming call alert { 0x0005, seqnr, numlen, "number", namelen, "name" } +? r answered call { 0x0007, seqnr } +? r terminated call { 0x0009, seqnr } +? r call msg { 0x000a, seqnr } + Note: in 6210 4.27 all msg from 0x01 seems to be unavailable +0x02: SMS handling + s Send SMS message { 0x0001, 0x02, 0x00 (SEND REQUEST), ... } + r Message sent { 0x0002 } + r Send failed { 0x0003, ?, ?, error (like in netmon in 65)} + r SMS message received { 0x0010, ...... } (whole message) + s Set CellBroadcast { 0x0020, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 } + for enable cell broadcast ? + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + for disable cell broadcast ? + r Set CellBroadcast OK { 0x0021, 0x01 } + r Read CellBroadcast { 0x0023, ?, ?, ?, channel, ?, message... } ? + s Set SMS center { 0x0030, 0x64, priority, checksum?, format, + validity[2], {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00} + where tel.no.[12]: {len, type, {number(BCD)}} + type: 0x81: normal + 0x91: + (international) + 0xd0: alphanumeric + format: 0x00: text + 0x22: fax + 0x24: voice + 0x25: ERMES + 0x26: paging + 0x31: X.400 + 0x32: email + validity: 0x000b: 1 hour + 0x0047: 6 hours + 0x00a7: 24 hours + 0x00a9: 72 hours + 0x00ad: 1 week + 0x00ff: max.time + r Set SMS center OK { 0x0031 } + r Set SMS center error { 0x0032, reason } + s Get SMS center { 0x0033, 0x64, priority } + r SMS center received { 0x0034, priority, checksum?, type, + validity[2], {DefaultRecipient no.}[12], + {SMScenter no.}[12], {SMSC name}, 0x00 } + where priority, checksum, type, validity, + tel.no.[12]: see 0x02/0x0030 + r SMS center error recv { 0x0035, reason } + s?? { 0x0074} + r?? { 0x0075, 0xFF, 0x11, 0x98} + s?? { 0x008C} + r?? { 0x008D, 0x00} +0x03: Phonebook functions + s Get memory status { 0x0103, 0x02, memory type } + where: memory type - see 0x03/0x0107 + r Get memory status { 0x0104, 0x00, xL, 0x00[2], y1H, y1L, 0x10, + 0x00[2], z?, ymaxH, ymaxL, y2H, y2L, + 0x0d?, xH?, 0x00[2]? } + where y1: location (lowermost) + y2: no. of locations + ymax: maximum location no. + s Read memory { 0x0107, 0x01, 0x01, 0x00, 0x01, xH, xL, + yH, yL, 0x00, 0x00} + where x: memory type + 0x01: (256) Dialled numbers + 0x02: (512) Missed calls + 0x03: (768) Received calls + 0x05: (500) telephone phonebook + 0x06: (160) SIM phonebook + 0x07: (10/0) + 0x08: (1/0) + 0x09: (4) voice mailbox + 0x0e: (10) speed dials + 0x10: (5) caller groups + y: location + r Read memory { 0x0108, 0x00, 0x01, + code,0x00, 0x00, z, xH, xL, yH, yL, 0x00, 0x00, 0x00, no.of blocks, { block } * } + where if code==0x0f && xH==0x34 - phonebook location not found + y: location + z: generic block size + block: {id, 0, 0, blocksize, block no., + {contents}, 0x00} + id: 0x04 pointer to another memory location { 0xff?, yH, yL, xL,0x00[3] } + 0x07 name {len, (unicode)}, + 0x08 email + 0x09 postal + 0x0a note {len, (unicode)} + 0x0b number {type, 0x00[3], len, (unicode)} + 0x0c ringtone {ringtone no., 0, 0} + 0x13 date for a called list (DC, RC, etc.) + 0x1b caller group graphic {width, height, 0, 0 {bitmap}} + 0x1c caller group graphic on? {(1: yes, 0: no), 0, 0} + 0x1e caller group number {number, 0, 0} + type: 0x0a: General, + 0x03: Mobile (office ?), + 0x06: Work, + 0x04: Fax, + 0x02: Home (mobile ?) + s Set mem location { 0x010b, 0x00, 0x01, 0x01, 0x00, 0x00, z, + xH, xL, yH, yL, 0x00, 0x00, 0x00, + no.of blocks, { block }[no.of blocks] } + r Set mem location { 0x010c, 0?, 1?, code, 0?, 0?, z?, 0?, 0?, + yH, yL, xL } + where code: + 0x3d - wrong entry type + 0x3e - too much entries +0x0a: Network status + s get used network { 0x0070 } + r get used network { 0x0071, available,?,?,length,netstatus,netsel,cellIDH, + cellIDL,lacH,lacL,MCC+MNC[3],{Opstr}, 4?, + len, xlen(78), ylen(21), 0, {bitmap} } + where {Opstr}: namelen, {operator name(unicode)} + len: {xlen, ylen, 0, {bitmap} + 2 + {bitmap}: bitmaplen, 0, 0, {OTA bitmap} + available: 0x02 if the logo following is valid, + 0x01 for no operator logo following + s get network status { 0x0081 } + r get network status { 0x0082, network%, 0x14? } + s set operator logo { 0x01a3 0x01, oplogo?, MCC+MNC[3], 0?,4?,len, + xlen(78),ylen(21), 0 (frames?), + {bitmap}*?, 0x00(padding) } + where len, {bitmap}: see 0x0a/0x0071 + r set operator logo OK { 0x01a4 } +0x13: Calendar notes + s Add meeting note { 0x0001, body like in subtype 0x001a...} + r Add meeting note { 0x0002, location (2 bytes), status (2 bytes)} + s Add call note { 0x0003, body like in subtype 0x001a...} + r Add call note { 0x0004, location (2 bytes), status (2 bytes)} + s Add birthday note { 0x0005, body like in subtype 0x001a...} + r Add birthday note { 0x0006, location (2 bytes), status (2 bytes)} + s Add reminder note { 0x0007, body like in subtype 0x001a...} + r Add reminder note { 0x0008, location (2 bytes), status (2 bytes)} + s Delete calendar note { 0x000b, location (2 bytes) } + r Delete calendar note { 0x000c, location (2 bytes), ?, ?, ?, ? } + s Get calendar note { 0x0019, location (2 bytes) } + r Calendar note recvd { 0x001a, location (2 bytes), entry type, 0x00, year (2 bytes), Month, Day, block} + where: entry type - 0x01 - Meeting, 0x02 - Call, 0x04 - Birthday, 0x08 - Reminder + block: for Meeting:{hour,minute,alarm (two bytes),recurrance (two bytes),len,0x00,string(unicode)} + where alarm=Number of minutes before the time of the meeting + that the alarm should be triggered: + For meetings with "No alarm"=0xFFFF (-1). + For "On time"=0x0000 + half an hour=0x001E, and so on. + Recurrance=in hours, between future occurances of this meeting. + If there is no repeat, this value is 0x0000. The special value 0xffff + means 1 Year! + for Call:{Hour,Minute,Alarm (as above),Recurrance (as above),namelen,numberlen, + name(unicode),number(unicode)} + for Reminder:{Recurrance (as above),len,0x00,string(unicode)} + for Birthday:{byte1,byte2,alarm(4 bytes),yearofbirth,alarmtype,len,string(unicode)} + byte1 and byte2 may vary (???). Usually are 0x00 both (but not always) + In Birthday, the Year in the common part, usually contains a strange year. + So, don't consider it as Year of note, neither year of BirthDay (for Year of + Birthday use the value described below). + where alarm=32-bit integer that is the number of seconds between the desired + alarm time and 11:59:58pm on the birthday.For "No Alarm", the value is + 0x0000FFFF (65535). + YearOfBirth=used instead of the one in the common part of the entry (see above) + but only when reading birthday entries. For storing entries, this field does + not exist. + AlarmType: 0x00 - Tone, 0x01 - Silent +? s??? { 0x0021 } +? r??? { 0x0022, 0x5A, 0x00 } +? s??? { 0x0025 } +? r??? { 0x0026, 0x04, 0x00 } +? s { 0x0029 } +? r { 0x002A, 0x04, 0x00 } + s Get first free pos { 0x0031 } + r Get first free pos { 0x0032, location (2bytes) } + s Get notes info { 0x003a, 0xFF, 0xFE} + r Get notes info { 0x003b, how many notes used (2 bytes), 0x01, 0x07, { two bytes with location for each note} *} +? s Get calendar note?? { 0x003E, location (2 bytes) } +? r Get calendar note?? { 0x003F, location (2bytes), ... } +0x14: + s Get Picture Image { 0x0007, location, number[2 bytes], 0x00, 0x64 } + where location: 0x21 (always ?) + r Get Picture Image { 0x0008, 0x07, location, number[2 bytes], 0x07, ??[38], + width, height, lenH, lenL, {bitmap}} + where location: 0x21 (always ?) + s Set Picture Image { 0x0050, 0x07, location, number[2 bytes], 0x07, ??[38], + width, height, lenH, lenL, {bitmap}} + std. size: 72x28 + where location: 0x21 (always ?) + r Set Picture Image { 0x0051, location, number[2 bytes], 0x07 } + where location: 0x21 (always ?) + + s List Picture Images { 0x0096, FolderID, 0x0f, 0x07 } + where: FolderID - see 0x14/0x017B + r List Picture Images { 0x0097, number of pictures[2 bytes], number1[2 bytes], number2[2 bytes], ..., } + + s Get SMS from folder { 0x0107, folderID, 0x00, location, 0x01, 0x65, 0x01} + where: folderID - see 0x14/0x017B + r Get SMS from folder { 0x0108, status, folderID, 0x00, location, type, sender number,...} + + where: status=0x01 - reveived/read + 0x03 - received/unread + 0x05 - stored/sent + 0x07 - stored/not sent + + where: folderID - see 0x14/0x017B + + where: type=0x00 - received SMS + 0x01 - delivery report + 0x02 - stored SMS + 0x07 - picture message + s Get folder status { 0x016b, folderID, 0x0F, 0x01} + where: folderID - see 0x14/0x017B + r Get folder status { 0x016c, number of entries (2 bytes), entry1number (2 bytes), entry2number(2 bytes), ....} + s Get folder names { 0x017A, 0x00, 0x00} + r Get folder names { 0x017B, number of strings, folderID, name1, 0x00, folderID, name2, 0x00, name3, 0x00,...} + where: folderID=0x08 - Inbox + 0x10 - Outbox + 0x18 - Archive + 0x20 - Templates + 0x29 - first "My folders" + 0x31 - second "My folders" + 0x39 - third -"- + and so on +0x17: + s Get Battery info { 0x0002 } + r Get Battery info { 0x0003, 0x0b, batt%, 0x14?, 0x01? } +0x19: Date & time +? s Get date time ? { 0x0062 } +? r Get date time ? { 0x0063, 0x01, 0x01, 0x01, 0x07, 0x07,0xD1(year==2001) 0x05(month?) 0x02(day?) 0x00,0x1D,0x0D(hour:minute:second?) + +? s Get alarm ? { 0x006D } +? r Get alarm ? { 0x006E 0x01, 0x01, 0x20, 0x03, 0x01, 0x0B, 0x14 } + +? s ?? { 0x0083, id } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x00 } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x00, 0x01 } +? r ?? { 0x0084, 0x01, 0x40, 0x03, id, 0x01, 0x00 } + where: id=0x27,0x2a,0x32,0x28,0x40 +0x1b: + s Get IMEI { 0x0001 } + r Get IMEI { 0x0002, {IMEI(ASCII)}, 0x00 } + s get HW&SW version { 0x0003, 0x01, 0x32 } + r get HW&SW version { 0x0004, "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." 0x00 0xff[14] } +0x1f: + s ??? { 0x0010, 0x02, 0x00, 0xff, 0xff } + r ??? { 0x0011, length, 0x00, {block}[length] } + where block: { unicode letter[2], 0x0000, + 0x00, 0x55, ??, ?? } + s Set ringtone { 0x011f, 0x00, location, 0x00, name(Unicode), + ringtone(format the same to 0x40/0x019e and 0x40/0x01a0) } + where: location: 0x87 to 0x8b on N6210 + 0x74 to ... on N7110 +? s Get ringtone { 0x0122, 0x00, location} +? r Get ringtone { 0x0123, 0x00, location, name(Unicode), 0x00,...,0x00, 0x02,0xFC,0x09(ringtone contenst)} +0x39: + s get profile feature ? { 0x0101, 0x01, 0x01, 0x01, number1, number2} + where number1: from 0x00 to 0x07 (for each profile ?) + number2: 0x00 - 0x09, 0x0A, 0x16 - 0x19, 0x1a - 0x1f, 0x20 - 0x29, 0x2a - 0x2c, 0xff + r get profile feature ? { 0x0102, 0x01, number1, number2, block...} + for number2==0xff: block: 0x01, 0x01, length, name(Unicode), 0x00, 0x00 + + s ??? { 0x0101, 0x04, 0x01, 0x01, 0xff, 0x03 } + r ??? { 0x0102, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x85/0x087 } + + s ? { 0x0105} + r ? { 0x0106, 0x01, 0x04} +0x3f: WAP + s { 0x0000} + r { 0x0001, 0x01} + s ?? { 0x0003} + r ?? { 0x0004} + s Get WAP bookmark { 0x0006, 0x00, location} + where location: 0 - 14 + r Get WAP bookmark { 0x0007, 0x00, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7]} + r Get WAP bookmark err { 0x0008, error } + where error: + 0x00 invalid position + 0x02 no more bookmark stored + s Set WAP bookmark { 0x0009, 0xff, 0xff, name_len, name(unicode), + url_len, url(unicode), 0x01,0x80,0x00[7] } + Note: bookmark is added to the first free location. + +? r Set WAP bookmark err {+0x01, 0x36, 0x0b, error } + where error: + 0x04 - memory is full + 0x01 - we are in the bookmark menu + 0x00 - unknown reason for now ;( +? r Set WAP bookmark OK {+0x01, 0x36, 0x00, block } + where block: + 0x0a, location_of_just_written_bookmark(?), + 0x00, next_free_location(?) + + s Delete WAP bookmark { 0x000c, 0x00, location } + where: location = 0-14 + r Delete WAR bookmark OK{ 0x000d } + r Delete WAPbookmark err{ 0x000e, 0x02 } + s ?? { 0x000F} + r ?? { 0x0010, 0x00} + s Get WAP settings { 0x0015, location} + where location: 0x00 - 0x05 + r Get WAP settings OK { 0x0016, location } + r Get WAP settings err { 0x0017, error } + s ??? { 0x001b, location} + where location: 0x00 - 0x1d + r ??? { 0x001c,...} + r ??? err { 0x001d,error} + where: error=0x05 +0x40: Security commands +? s ???(N6150) { 0x08, 0x00 } +? r ???(N6150) { 0x08 } + s Enable extended cmds { 0x64, cmd } + where cmd: 0x00: off + 0x01: on + 0x03: reset (doesn't ask for PIN again) + 0x04: reset (PIN is requested) + In 5110 makes reset without PIN + 0x06: CONTACT SERVICE!!! Don't try it! + s Get IMEI { 0x66 } + r Get IMEI { 0x66, 0x01, IMEI, 0x00} + s (ACD Readings)?(N6150 { 0x68 } + r (ACD Readings)?(N6150 { 0x68, ... } + s Get Product Profile + Settings { 0x6a} + r Get Product Profile + Settings { 0x6a, 4bytes with Product Profile Settings } + s Set Product Profile + Settings { 0x6b, 4bytes with Product Profile Settings } + r Set Product Profile + Settings OK ? { 0x6b } + s Get code { 0x6e, code } + where code: see 0x08/0x0004 (no allowed code !) + r Get code { 0x6e, code, allowed, allowed? (sec code (text)) } + where code: see 0x08/0x0004 + allowed: 0: no + 1: yes +? s Reset Permanent +? Counters (nm->test36) { 0x74, 0x01, 0x01, 0x0e } +? r Reset Permanent +? Counters (nm->test36) { 0x74 } + s Call commands { 0x7c, block } + where where: command, (values) + command: 0x01 + values: number(ASCII), 0x00 - makes voice call + command: 0x02 - answer call + command: 0x03 - release call + r Call commands { 0x7c, command } + s Netmonitor { 0x7e, field } + where: field: 00: next + F0: reset + F1: off + F2: field test menus + F3: developer menus + s Get simlock info { 0x8a, 0x00} + r Get simlock info { 0x8a, 0x00, 0x01, lockstype, locksclosed, 0x00, 0x00, locksinfo(lock1,4,2,3), counter1,counter2,counter4,counter4,0x00 } + where: lockstype: bit1,bit2,bit3,bit4 - if set, selected lock is user lock + locksclosed: bit1,bit2,bit3,bit4 - if set, selected lock is closed + counter1 - counter4: counters for locks + s Buzzer pitch { 0x8f, volume, hzLO, hzHI } + if volume and hz is 0, it's off + r Buzzer pitch { 0x8f} + s ACD Readings ? { 0x91, parameter?(0x02,0x03,0x04,0x05,0x07) } + r ACD Readings ? { 0x91, parameter?, value? } +? s ???(N6150) { 0x98, 0x00 } +? r ???(N6150) { 0x98, 0x00, 0x04 } + s Get bin ringtone { 0x9e, location } + where: location=0,1,etc. + r Get bin ringtone { 0x9e, location, error, contents... } + where location=0,1,etc. + error=0x0a, ringtone NOT available + 0x00, OK + s Set bin ringtone { 0xa0, location, 0x00, contenst... } + where: location=0,1,etc. + r Set bin ringtone { 0xa0, location, error } + where location=0,1,etc. + error=0x0a, ringtone NOT set + 0x00, ringtone set OK +? r Get MSid { 0xb5, 0x01, 0x2f, msid, 0x25 } + s Get info about phone { 0xc8, 0x01 } + r Get info about phone { 0xc8, 0x01, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get MCU SW Checksum { 0xc8, 0x02 } + r Get MCU SW Checksum { 0xc8, 0x02, 0x00, checksum (4 bytes),0x00 } + s DPS External SW { 0xc7, 0x03 } + r DSP External SW { 0xc7, 0x03, 0x00, string,0x00 } + s Get HW { 0xc8, 0x05 } + r Get HW { 0xc8, 0x05, 0x00, HW version (4 bytes), 0x00 } + s Get "Made" Date { 0xc8, 0x05 } + r Get "Made" Date { 0xc8, 0x05, 0x00, date(4 bytes), 0x00 } + s Get DSP Internal SW { 0xc8, 0x09 } + r Get DSP Internal SW { 0xc8, 0x09, 0x00, version (1 bytes), 0x00 } + s Get PCI version { 0xc8, 0x0b } + r Get PCI version { 0xc8, 0x0b, 0x00, version, 0x00 } + s Get system ASIC { 0xc8, 0x0c } + r Get system ASIC { 0xc8, 0x0c, 0x00, string, 0x00 } + s Get COBBA { 0xc8, 0x0d } + r Get COBBA { 0xc8, 0x0d, 0x00, string, 0x00 } + s Get PLUSSA { 0xc8, 0x0e } + r Get PLUSSA { 0xc8, 0x0e, available, 0x00 } + where available: 0x01: not available + s Get CCONT { 0xc8, 0x0f } + r Get CCONT { 0xc8, 0x0f, available, 0x00 } + where available: 0x01: not available + s Get PPM version { 0xc8, 0x10 } + r Get PPM version { 0xc8, 0x10, 0x00, "V ", "firmware", 0x0a, "firmware date", 0x0a, "model", 0x0a, "(c) NMP.", 0x00 } + s Get PPM info { 0xc8, 0x12 } + r Get PPM info { 0xc8, 0x12, 0x00, PPM version ("B", "C", etc.), 0x00 } + s Set HW version { 0xc9, 0x05, version, 0x00 } + s Get Product Code { 0xca, 0x01 } + r Get Product Code { 0xca, 0x01, 0x00, number, 0x00 } + s Get Order Number { 0xca, 0x02 } + r Get Order Number { 0xca, 0x02, 0x00, string, 0x00 } + s Get Prod.Ser.Number { 0xca, 0x03 } + r Get Prod.Ser.Number { 0xca, 0x03, 0x00, number, 0x00 } + s Get Basic Prod.Code { 0xca, 0x04 } + r Get Basic Prod.Code { 0xca, 0x04, 0x00, number, 0x00 } + s Set Product Code { 0xcb, 0x01, product code, 0x00 } + s Set Order Number { 0xcb, 0x02, number, 0x00 } + s Set Prod.Ser.Number { 0xcb, 0x03, number, 0x00 } + s Get (original ?)IMEI { 0xcc, 0x01 } + r Get (original ?)IMEI { 0xcc, 0x01, IMEI, 0x00 } + s Get Manufacture Month { 0xcc, 0x02 } + r Get Manufacture Month { 0xcc, 0x02, 0x00, string, 0x00 } + s Get Purchare date { 0xcc, 0x04 } + r Get Purchare date { 0xcc, 0x04, 0x00, string, 0x00 } + s Set "Made" date { 0xcd, 0x02, string, 0x00 } + s Make "all" phone tests{ 0xce,0x1d,0xfe,0x23,0x00,0x00} + s Make one phone test { 0xce,0x1d,num1,num2,num3,num4} + Where num1-num4: 0x02,0x00,0x00,0x00; + 0x04,0x00,0x00,0x00; + 0x08,0x00,0x00,0x00; + 0x10,0x00,0x00,0x00; + 0x20,0x00,0x00,0x00; + 0x40,0x00,0x00,0x00; + 0x80,0x00,0x00,0x00; + 0x00,0x01,0x00,0x00; + 0x00,0x02,0x00,0x00; + 0x00,0x04,0x00,0x00; - "Power off" + No test for "Security data" + 0x00,0x10,0x00,0x00; + 0x00,0x20,0x00,0x00; + 0x00,0x40,0x00,0x00; + 0x00,0x80,0x00,0x00; + 0x00,0x00,0x01,0x00; + .... + 0x00,0x00,0x10,0x00; + s Result of phone tests { 0xcf } + r Result of phone tests { 0xcf, number of tests, results of next tests } +? s ??? { 0xd1 } +? r ???(N5110) { 0xd1, 0x00, 0x1d, 0x00, 0x01, 0x08, 0x00 } + s LCD Test { 0xd3, value } + where value: 0x03, 0x02 - 1'st test + 0x03, 0x01 - 2'nd test + 0x02, 0x03 - clears screen + s ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01} + r ACD Readings(N6150)? { 0xd4, 0x02, 0x00, 0x02, 0x00, 0x0e, 0x01, ?} + r Function of { 0xff, 0x8c } + 0x40 msgtype not + supported ? +0x78: + s Status confirm { 0x0201, 0x03 } + r Incoming call seq1 { 0x0102 0x0e 0x03 } + r Incoming call seq2 { 0x0102 0x7e 0x01 } +0x79: + s CarKit enable { 0x0201 0x01 0x62 0x00 } + r CarKit enabled { 0x0201 0x02 0x06 0x00 "V " {version} "\nHFU" + 0x00 } +0x7a: settings + r Set setting { 0x01eb, number, 0x00 } + s Set setting { 0x01ec, number, contents } + where for number: + 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, + 0xc0, 0x04, 0x03, 0x00, {bitmap} } + where width, height, {bitmap}: see 0x7a/0x01ed 0x15 + s Get setting { 0x01ee, number} + where number: 0x01 - 0x1e + 0x15: startup logo + 0x1c: security code + r Get setting { 0x01ed,number, 0x00, contents} + where for number: + 0x15 (startup logo) : 0x00, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, height, 0xc0, 0x03, 0x00, width, + 0xc0, 0x04, 0x03, 0x00, {bitmap} } + where height: 60 (0x3c) or 65 + width: 96 (0x60) + {bitmap}: like other bitmaps but pixels + placed vertically. + 0x1c (security code): {code(ascii)}, 0x00 +0x7f: Acknowledge(FBUS/IRDA){+type, seq } + Acknowledge(MBUS)... +0xd0: + s Power on message seq1 {+04 } + r Power on message seq1 {+05 } +0xd1: + s Get HW&SW version { 0x0003, 0x00 } +0xd2: + r Get HW&SW version { 0x0003 "V " "firmware\n" "firmware date\n" + "model\n" "(c) NMP." } +0xf4: Power on message seq 2 diff --git a/Docs/protocol/nokia.txt b/Docs/protocol/nokia.txt new file mode 100644 index 0000000..1f28639 --- /dev/null +++ b/Docs/protocol/nokia.txt @@ -0,0 +1,280 @@ +$Id$ + +Document describing protocol used in Nokia phones. + +The data provided is for information purposes only. +Some of the frames might be hazardous to your phone. Be careful!!! +We do not take any responsibility or liability for damages, etc. + +Last update 01.03.2001 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Assembled by + Balazs Nagy (js@lsc.hu) + Alfred R. Nurnberger + Hugh Blemings + Mike Bradley + Odinokov Serge + Pavel Janik + Pawe³ Kot + Marcin Wiacek (Marcin-Wiacek@TOPNET.PL) + Jens Bennfors + Michael Hund + Jay Bertrand + + Andrew Kozin + Pavel Machek + Diego Betancor + ... and other members of gnokii mailing list + and authors of some WWW pages. + +NOTE: this information isn't (and can't be) complete. If you know anything +about features not listed here or you noticed a bug in this list, please +notify us via e-mail. Thank you. + + Frame format for MBUS version 1: + + Request from Computer/Answer from Phone: + + { DestDEV, SrcDEV, FrameLength, MsgType, {block}, id, ChkSum } + + where DestDEV, SrcDEV: 0x00: phone + 0xf8: PC (wakeup msg) + 0xe4: PC (normal msg) + FrameLength: length of data frame. Maximal 0x78. Longer + frames are divided into smaller. + MsgType: see List + {block}: main frame + id: request identity number 1..n, incremented after + the request is accepted + ChkSum: XOR on frame's all numbers + + Ack from Phone: + + { DestDEV, 0x00, FrameLength, MsgType, {block} , id, ChkSum } + + where DestDEV: taken from original request packet + FrameLength: 0x7f, when DestDEV = 0xe4 + 0x7e, when DestDEV = 0xf8 + MsgType: see List. Present only, when DestDEV = 0xf8 + {block}: main frame. Present only, when DestDEV = 0xf8 + id: request identity number 1..?, corresponding + to the original request packet id + the request is accepted + ChkSum: XOR on frame's all numbers + + Update: description above according to the + http://www.gadgets.demon.co.uk/nokia21xx/protocol.html. + + Pavel Machek wrote: + 0x7e is actually registration acknowledge. Both have nothing to do + with DestDEV, except that special device needs to be used for + registration. + + Ack from Computer: + + { 0x00, SrcDEV, 0x7f, id, ChkSum } + + where SrcDEV: taken from response packet + id: request identity number 1..?, corresponding + to the response packet id + the request is accepted + ChkSum: XOR on frame's all numbers + + Port settings: + Speed 9600 bps, Bits 8, ParityOdd, Stop Bits 1, DTR and RTS logic 0 + + In the MBUS bus, the phone has only one connector for transmition and + reception. + + Because of this characteristics of the phone connector, every time that the + PC writes into the phone it is writing as well into its own Rx. So every + time the PC sends info into the phone it finds that same information in its + own Rx buffers, like a mirror copy. This should be discarded. + + The communications is made like an old cb radio, only one + talking at a time. Many transmission are made this way: + + + + + + + Some frames are sent from phone without asking for them + + You have to implement collision protocol. IE. you should listen for + what you are transmitting, and if it does not come back, you have + collision. + + You should wait for bus to be free for 3 miliseconds before normal + message, and for 2.5 miliseconds before acknowledge. You should wait + for acknowledge for 200 miliseconds, then retransmit. + + Frame format for FBUS version 1: + + { FrameID, FrameLength, MsgType, {block}, SeqNo, ChkSum } + + where FrameID: 0x01 Command frame from computer to Nokia + 0x02 ??? - Data call frame from computer to Nokia - ??? + 0x03 Data call frame from Nokia to computer + 0x04 Command frame from Nokia to computer + FrameLength: {block} + 2 + MsgType: see List + SeqNum: Sequence number of command in case where direction is + from ME to computer, the sequence number is + counting from 0x30 to 0x37 and resetting back to 0x30. + When direction is from computer to ME, + sequence number counts from 0x08 to 0x0f and resets back to 0x08. + It may not be required to be this way. + Sequence numbers are used in acknowledging commands. + ChkSum1: CRC = 0; + for (i = 0; i < (2 + CMD_LEN); i++) + CRC ^= frame[i]; + + Frame format for FBUS version 2/Direct IRDA: + + { FrameID, DestDEV, SrcDEV, MsgType, 0x00, FrameLength, {block}, FramesToGo, + SeqNo, PaddingByte?, ChkSum1, ChkSum2 } + + where FrameID: 0x1c: IR / FBUS + 0x1e: Serial / FBUS + DestDev, SrcDev: 0x00: mobile phone + 0x0c: TE (FBUS) [eg. PC] + MsgType: see List + FrameLength: {block} + 2 (+ 1 if PaddingByte exists) + FramesToGo: 0x01 means the last frame + SeqNo: [0xXY] + X: 4: first block + 0: continuing block + Y: sequence number + PaddingByte: 0x00 if FrameLength would be an odd number + anyways it doesn't exists + ChkSum1: XOR on frame's odd numbers + ChkSum2?: XOR on frame's even numbers + + Frame format for MBUS version 2: + + { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLO, FrameLengthHI, {block}, + SeqNo, ChkSum } + + where FrameID: 0x1f: Serial / M2BUS + DestDev, SrcDev: 0x00: mobile phone + 0x1d: TE (M2BUS) + 0x10: TE (M2BUS) (Service Software ?) + 0x04: Carkit? + 0x48: DLR3 cable? + 0xF8: unknown target? + 0xFF: global target? + MsgType: see List + FrameLength: {block} + SeqNo: sequence number + ChkSum: XOR on frame's all numbers + + Please note that M2BUS has only one checksum: XOR on frame[FrameID..SeqNo] + + Ack: + + { FrameID, DestDEV, SrcDEV, 0x7f, Id_SeqNo, ChkSum } + + where Id_SeqNo: Is the sequence number that you are + acknowleging (from the other part). + + Frame format for Infrared: + + { FrameID, DestDEV, SrcDEV, MsgType, FrameLengthLo, FrameLengthHi, {block}} + + where FrameID: 0x14 + DestDev, SrcDev: 0x00: mobile phone + 0x0c: TE [eg. PC] + MsgType: see List + FrameLength: {block} + + Frames list format: + + hex: Short description + x msg desc { ... } + 0xXX -> one byte + 0xXXYY -> two bytes (== 0xXX, 0xYY) + + where hex: message type + x: s=send (eg. to mobile), r=receive + { ... }: data after 0x00, 0x01 header + {+... }: raw data (without header) + +------------------------------------------------------------------------------- + +Misc (about MBUS version 2): + +0x4E commands: + (sent from a 5160i TDMA / 6160i TDMA / 6185 CDMA or 7110 GSM + phone to the uC in the DLR-3 cable) +DLR-3 req: + 1F 48 00 4E 00 02 01 XX SQ CS + frame sent from the phone to the DLR-3 cable + (after 15kOhm resistor detected betw. XMIC (3) and DGND (9).) + DSR,DCD,CTS flow control data is coded into the 2nd databyte + XX: bit.0=/CTS + bit.1=/DCD + bit.2=CMD/DATA + bit.3=DSR + bit.4-7=0 + +0x78 / 0x79 commands: + (used by handsfree carkit) Works also on GSM phones (5110 / 6110 / etc) +These commands are used by the Nokia Carkits to switch the phone audio path to +XMiC and XEAR , turn the phone on/off according to the car ignition, and +control the PA loudspeaker amplifier in the carkit and the car radio mute +output which silences the car radio during a call +mute status tone: + 1F 04 00 78 00 04 01 02 0E 00 SQ CS + status indication = disable carkit audio amplifier (no audio / no tone) +mute status tone: + 1F 04 00 78 00 04 01 02 0E 03 SQ CS + status indication = enable carkit audio amplifier (audio / tone present) +mute status call: + 1F 04 00 78 00 04 01 02 07 00 SQ CS + status indication = disable radio mute output (no call) +mute status call: + 1F 04 00 78 00 04 01 02 07 01 SQ CS + status indication = enable radio mute output (call active) +enable ???: + 1F 04 00 78 00 04 01 02 08 01 SQ CS + status indication = enable ??? sent to HFU-2 on power on + byte 9 (07,08,0E) seems to be a pointer to a memory location, + byte 10 is the data at this memeory location. +response from HFU: + 1F 00 04 78 00 03 02 01 03 SQ CS + response message from HFU-2 (use unknown) +go HF and IGN on: + 1F 00 04 79 00 05 02 01 01 63 00 SQ CS + enables carkit mode + turns phone on + req. mute status +go HF and IGN off: + 1F 00 04 79 00 05 02 01 01 61 00 SQ CS + enables carkit mode + powers phone off (1 min delay) + req. mute status +ext. HS Offhk: + 1F 00 04 79 00 05 02 01 01 23 00 SQ CS + enables carkit mode + external handset lifted (OFF-Hook) +ext. HS Onhk: + 1F 00 04 79 00 05 02 01 01 63 00 SQ CS + enables carkit mode + external handset put back (ON-Hook) + Ignition and Hook are coded into one byte + bit.0 = 0:on power on 1:when in operation + bit.1 = IGNITION STATUS + bit.2 = x can be 1 or 0 + bit.3 = 0 + bit.4 = 0 + bit.5 = 1 + bit.6 = Hook (inverted) + bit.7 = 0 +HFU-2 version: + 1F 00 04 79 00 12 02 01 02 06 00 56 20 30 36 2E 30 30 0A 48 46 55 32 00 SQ CS +for HFU-2: + 1F 04 00 DA 00 02 00 02 SQ CS + function unknown - sent from Nokia phone to HFU-2mute output (call active ) + +0xD0 commands: +init: + 1F 00 1D D0 00 01 04 SQ CS + sent by the Service Software or HFU-2 on startup +init resp: + 1F 1D 00 D0 00 01 05 SQ CS + response from phone to above frame diff --git a/Docs/sample/gnokiirc b/Docs/sample/gnokiirc new file mode 100644 index 0000000..845aca8 --- /dev/null +++ b/Docs/sample/gnokiirc @@ -0,0 +1,34 @@ +# This is a sample ~/.gnokiirc file. Copy it into your +# home directory and name it .gnokiirc. +# + +[global] + +# Set port to the physical serial port used to connect to your phone +port = /dev/ttyS0 + +# Set model to the model number of your phone +model = 6110 + +# Initlength controls the number of characters sent to the +# phone during initialisation. You can either set it to +# the word "default" or a positive integer. +# +# You can try setting this value if you want to connect +# to the phone quicker. If you've never noticed the +# connection to be slow, it is suggested that you +# leave this alone. Read the initialisation code in fbus-xxxx +# to understand what this changes if you're curious. +initlength = default + +# The type of the connection, for IR set this to infrared or irda. +# If you have 6210/6250/7110 phone and dau9p cable (the one you can +# use with 6100 series and cannot use hardware modem from the phone) +# you may want to use 'dau9p' value to get faster initialization. +connection = serial + +# Set bindir to point to the location of the various gnokii binaries. +# In particular ensure that mgnokiidev is in this location, with +# permissions 4750, owned by root, group gnokii. Ensure you +# are in the gnokii group and that the group exists... +bindir = /usr/local/sbin/ diff --git a/Docs/sample/options b/Docs/sample/options new file mode 100644 index 0000000..63e0eb6 --- /dev/null +++ b/Docs/sample/options @@ -0,0 +1,7 @@ +modem +crtscts +defaultroute +asyncmap 0 +mtu 1500 +mru 1500 +user ppp diff --git a/Docs/sample/pap-secrets b/Docs/sample/pap-secrets new file mode 100644 index 0000000..96d459b --- /dev/null +++ b/Docs/sample/pap-secrets @@ -0,0 +1 @@ +ppp * ppp diff --git a/Docs/sample/ppp-6210-modem b/Docs/sample/ppp-6210-modem new file mode 100755 index 0000000..3111a52 --- /dev/null +++ b/Docs/sample/ppp-6210-modem @@ -0,0 +1,11 @@ +#!/bin/sh +/usr/sbin/chat -v \ + TIMEOUT 30 \ + ABORT '\nBUSY\r' \ + ABORT '\nNO ANSWER\r' \ + ABORT '\nRINGING\r\n\r\nRINGING\r' \ + ABORT '\nNO CARRIER\r' \ + '' '\r\dATZ' \ + TIMEOUT 60 \ + OK ATDT$TELEPHONE \ + CONNECT '' diff --git a/Docs/sample/ppp-gnokii b/Docs/sample/ppp-gnokii new file mode 100644 index 0000000..2b12aaf --- /dev/null +++ b/Docs/sample/ppp-gnokii @@ -0,0 +1,9 @@ +#!/bin/sh +/usr/sbin/chat -v \ + TIMEOUT 30 \ + ABORT '\nBUSY\r' \ + ABORT '\nNO ANSWER\r' \ + ABORT '\nRINGING\r\n\r\nRINGING\r' \ + ABORT '\nNO CARRIER\r' \ + '' ATDT$TELEPHONE \ + CONNECT '' diff --git a/Docs/sample/ppp-on b/Docs/sample/ppp-on new file mode 100644 index 0000000..3774465 --- /dev/null +++ b/Docs/sample/ppp-on @@ -0,0 +1,9 @@ +#!/bin/sh +TELEPHONE=501808080 +LOCAL_IP=0.0.0.0 +REMOTE_IP=0.0.0.0 +NETMASK=255.255.255.0 +DIALER_SCRIPT=/etc/ppp/ppp-gnokii +export $TELEPHONE +exec /usr/sbin/pppd debug /dev/gnokii 115200 $LOCAL_IP:$REMOTE_IP connect $DIALER_SCRIPT + diff --git a/Docs/test.vcs b/Docs/test.vcs new file mode 100644 index 0000000..9f6a1d8 --- /dev/null +++ b/Docs/test.vcs @@ -0,0 +1,33 @@ +BEGIN:VCALENDAR +VERSION:1.0 + +BEGIN:VEVENT: +CATEGORIES:PHONE CALL +SUMMARY: 0123456789 +DTSTART:20000623T194400 +AALARM:20000623T194300 +END:VEVENT + +BEGIN:VEVENT: +CATEGORIES:MISCELLANEOUS +SUMMARY:Gnokii Reminder +DTSTART:20000623T204400 +AALARM:20000623T204300 +END:VEVENT + +BEGIN:VEVENT: +CATEGORIES:MEETING +SUMMARY:Gnokii Meeting +DTSTART:20000623T204400 +AALARM:20000623T204300 +END:VEVENT + +BEGIN:VEVENT: +CATEGORIES:SPECIAL OCASSION +SUMMARY:Marcels Birthday +DTSTART:19790806T031000 +AALARM:20000806T100000 +END:VEVENT + +END:VCALENDAR + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..3551ce2 --- /dev/null +++ b/INSTALL @@ -0,0 +1,54 @@ + + TODO: write me! + + For package building see the 'Docs/packaging-howto' file. + +0/ If you got an CVS version + + autoconf + +1/ + ./configure [ option ] + + where basic options: + + --prefix=DIR + Install path prefix. Default /usr/local/ + + --without-x + Compile without GTK (Xwin) programs + + --disable-nls + Set if you don't have/want GNU gettext support + + --enable-security + Set if you want to enable all security features + + --enable-debug + Set if you want debug code in gnokii + + --help + show all options + + + Good default (example): + + ./configure --prefix=/usr \ + --enable-gettext + +2/ + compilation: + + make + groupadd gnokii - it is really needed + (make dep - if you want/need) + make install + make install-docs + + clean source: + + make clean - standard clean + make distclean - clean all ./configure outputs + (after this command you must run + ./configure again if you need use + any Makefile) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cfef684 --- /dev/null +++ b/Makefile @@ -0,0 +1,182 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +TOPDIR=. + +# +# Makefile.global contains gnokii global settings +# +include ${TOPDIR}/Makefile.global + +BIN_DIRS = gnokii + +ifndef WIN32 +BIN_DIRS += gnokiid utils +endif + +DIRS = common/phones \ + common/links \ + common/devices \ + common/data \ + common \ + $(BIN_DIRS) + +GTK_DIRS = xgnokii + +PO_DIR = po +DOCS_DIR = Docs + +all: $(DIRS) + @if [ "x$(USE_NLS)" = xyes ]; then \ + $(MAKE) -C $(PO_DIR); \ + fi + + @if [ "$(GTK_LIBS)" ]; then \ + for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir; \ + fi; \ + done \ + fi + @echo "done" + +dummy: + +$(DIRS): dummy + $(MAKE) -C $@ + +clean: + $(RM) *~ *.orig *.rej include/*~ include/*.orig include/*.rej + @for dir in $(DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir clean; \ + fi; \ + done + @if [ "x$(USE_NLS)" = xyes ]; then \ + $(MAKE) -C $(PO_DIR) clean; \ + fi + +ifdef OWN_GETOPT + $(MAKE) -C getopt clean +endif + + @if [ "$(GTK_LIBS)" ]; then \ + for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir clean; \ + fi; \ + done \ + fi + + $(MAKE) -C Docs clean + + @echo "done" + +distclean: clean + @if [ -e $(PO_DIR)/Makefile ]; then \ + $(MAKE) -C $(PO_DIR) distclean; \ + fi + $(RM) Makefile.global config.cache config.log config.status \ + include/config.h \ + include/config.h.in \ + packaging/RedHat/gnokii.spec \ + packaging/Slackware/SlackBuild \ + po/Makefile.in \ + debian + $(RM) `$(FIND) . -name "*~"` + @echo "done" + +dep: + @for dir in $(DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir dep; \ + fi; \ + done + + @if [ "$(GTK_LIBS)" ]; then \ + for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir dep; \ + fi; \ + done \ + fi + @echo "done" + +install: all + @for dir in $(DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install; \ + fi; \ + done + @if [ "x$(USE_NLS)" = xyes ]; then \ + $(MAKE) -C $(PO_DIR) install; \ + fi + + @if [ "$(GTK_LIBS)" ]; then \ + for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install; \ + fi; \ + done \ + fi + @echo "done" + +install-docs: + $(MAKE) -C $(DOCS_DIR) install + @echo "done" + +install-strip: + @for dir in $(BIN_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-strip; \ + fi; \ + done + + @if [ "$(GTK_LIBS)" ]; then \ + @for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-strip; \ + fi; \ + done \ + fi + @echo "done" + +install-suid: + @for dir in $(BIN_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-suid; \ + fi; \ + done + @if [ "$(GTK_LIBS)" ]; then \ + @for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-suid; \ + fi; \ + done \ + fi + @echo "done" + +install-ss: + @for dir in $(BIN_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-ss; \ + fi; \ + done + + @if [ "$(GTK_LIBS)" ]; then \ + for dir in $(GTK_DIRS); do \ + if [ -e $$dir/Makefile ]; then \ + $(MAKE) -C $$dir install-ss; \ + fi; \ + done \ + fi + @echo "done" + +.PHONY: all install clean distclean dep depend install-docs diff --git a/Makefile.global.in b/Makefile.global.in new file mode 100644 index 0000000..05f4a5a --- /dev/null +++ b/Makefile.global.in @@ -0,0 +1,77 @@ + +# +# $Id$ +# +# Global Makefiles configuration for the GNOKII. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + + + +SHELL = @SHELL@ + +LD = @CC@ -Xlinker -r -nostdlib -nodefaultlibs -o + +PACKAGE = gnokii + +srcdir = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +xbindir = ${prefix}/X11R6/bin/ +libdir = @libdir@ +xgnokii_libdir = @XGNOKIIDIR@/@XPACKAGE@ +man1dir = @mandir@/man1/ +man8dir = @mandir@/man8/ +xmandir = ${prefix}/X11R6/man/man1/ +docdir = ${prefix}/doc/${PACKAGE} +locdir = @datadir@/locale + +BIN_MODE = 0755 +TEXT_MODE = 0444 + +INSTALL = @INSTALL@ +RM = @RM@ -f +FIND = @FIND@ +MAKE = @MAKE@ +XGETTEXT = @XGETTEXT@ +MSGFMT = @MSGFMT@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LIBS = @LIBS@ +LEX = @LEX@ + +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +XPM_LIBS = @XPM_LIBS@ +XPM_CFLAGS = @XPM_CFLAGS@ +OWN_GETOPT = @OWN_GETOPT@ + +USE_NLS = @USE_NLS@ +HAVE_XGNOKII = @HAVE_XGNOKII@ + +# +# Global include directory +# ($TOPDIR is defined in Makefile) +# +GNOKII_INCLUDE = $(TOPDIR)/include + +# +# Win32 option +# +ifdef WIN32 + WIN32 += -I$(TOPDIR)/win32 +endif + + +CFLAGS += -I$(GNOKII_INCLUDE) +LDFLAGS = $(LIBS) -Wl,--rpath -Wl,$(libdir) + diff --git a/TODO b/TODO new file mode 100644 index 0000000..137e153 --- /dev/null +++ b/TODO @@ -0,0 +1,45 @@ +0.4.0 THINGS: + += Documentation: + - update spec file for instalation of manual page + - write some docs about gnokiid -- beeing written + +- --disable-debug should really disable debug :-) +- FreeBSD build and work - is it done already? +- 6160 support (is this useful: http://www.venia.net/tdma/? - yes it was -HAB) + Please email Hugh before delving into x160 support. +- 7110 support (fbus and/or plain AT commands) +- integrate xlogos into xgnokii +- incoming RLP calls (will anyone actually use this?) +- other mobile phones (Ericsson, Siemens? - any support from vendor? Are they + better then Nokia? in this? Any programs already existing?) +- getsecuritycode patch (I have it in ~/ so if there is anyone interested... We + must include it in ---with-security). +- international characters in SMS messages and phonebooks - see the mailing + list messages in archive -- almost done for SMS +- Business card sending via SMS (I do not know if it is already implemented or + not) +- if GNU getopt is not available in the system, use compile getopt from + source tree (move it from win32/) +- gnokiid and other AT commands. +- we should report back to xgnokii what functions are and which are not + supported so xgnokii can disable some GUI stuff on phones which do not + support this functions. (Should be an extension to existing GSM_Information + structure - HAB) +- multiframed packets +- how can we read the name of the uploaded tune? Can we do that? +- SMS errors (Gary reported them on Fri, 25 Feb 2000 15:55:58 -0500 (EST)) +- storing of SMS messages into INBOX (Pavel already sent the dump of such + message) -- done, not applied +- Marcin's setprofile patch +- --getdisplaystatus and Alarm sign? Is there any indication of it? +- gnokii --setlogo logofile [caller group number] [group name] is not + working correctly as is +- --netmonitor field/devel should not report the menu (which contains + useless data)... Try it. +- integrate Marcin's patches + +Additional things +================= + +- ringtone editor diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..b790e70 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.4.0pre2 diff --git a/common/Makefile b/common/Makefile new file mode 100644 index 0000000..9b44ad1 --- /dev/null +++ b/common/Makefile @@ -0,0 +1,71 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +# +# For this common directory is used "subsystem.o" .o files concept. +# (the list of object files to be linked together (to COMMON.o), +# and other dirs is used this _one_ file (instead of all OBJS) +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +OBJS = cfgreader.o \ + device.o \ + gsm-ringtones.o \ + gsm-api.o \ + gsm-networks.o \ + vcal.o \ + misc.o \ + gsm-sms.o \ + gsm-bitmaps.o \ + gsm-common.o \ + gsm-encoding.o \ + gsm-error.o \ + gsm-statemachine.o + +all: libgnokii.so gsm-filetypes.o + +phones/PHONES.o: + $(MAKE) -C phones PHONES.o + +links/LINKS.o: + $(MAKE) -C links LINKS.o + +devices/DEVICES.o: + $(MAKE) -C devices DEVICES.o + +libgnokii.so: $(OBJS) phones/PHONES.o links/LINKS.o devices/DEVICES.o + $(CC) -shared -o libgnokii.so $(OBJS) phones/PHONES.o links/LINKS.o devices/DEVICES.o + +gsm-filetypes.o: gsm-filetypes.c + $(CC) $(CFLAGS) $(CPPFLAGS) $(XPM_CFLAGS) -c gsm-filetypes.c + +vcal.c: vcal.lx + $(LEX) -ovcal.c vcal.lx + +clean: + $(RM) $(OBJS) *~ depend libgnokii.so gsm-filetypes.o vcal.c phones/PHONES.o links/LINKS.o devices/DEVICES.o + +install: + $(INSTALL) -d $(libdir) + $(INSTALL) libgnokii.so $(libdir) + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/common/cfgreader.c b/common/cfgreader.c new file mode 100644 index 0000000..1b18760 --- /dev/null +++ b/common/cfgreader.c @@ -0,0 +1,322 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Config file (/etc/gnokiirc and ~/.gnokiirc) reader. + + Modified from code by Tim Potter. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:58 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.16 2001/11/14 10:46:12 pkot + Small cleanup with __unices__ + + Revision 1.15 2001/06/10 11:24:57 machek + Kill "slash star" inside comment. + + Revision 1.14 2001/03/19 23:43:45 pkot + Solaris/ *BSD '#if defined' cleanup + + Revision 1.13 2001/03/13 01:21:38 pkot + *BSD updates (Bert Driehuis) + + Revision 1.12 2001/01/08 15:11:36 pkot + Documentation updates. + Fixed some bugs and removed FIXMEs. + We need to move some stuff from configure.in to aclocal.m4 + + Revision 1.11 2001/01/02 09:09:07 pkot + Misc fixes and updates. + + Revision 1.10 2000/12/19 16:18:15 pkot + configure script updates and added shared function for configfile reading + + +*/ + +#include "misc.h" + +#include +#include +#include +#include +#include + +#include "cfgreader.h" + +/* Read configuration information from a ".INI" style file */ +struct CFG_Header *CFG_ReadFile(char *filename) +{ + FILE *handle; + char *line; + char *buf; + struct CFG_Header *cfg_info = NULL, *cfg_head = NULL; + + /* Error check */ + if (filename == NULL) { + return NULL; + } + + /* Initialisation */ + if ((buf = (char *)malloc(255)) == NULL) { + return NULL; + } + + /* Open file */ + if ((handle = fopen(filename, "r")) == NULL) { +#ifdef DEBUG + fprintf( stderr, "CFG_ReadFile - open %s: %s\n", filename, strerror(errno)); +#endif /* DEBUG */ + return NULL; + } +#ifdef DEBUG + else + fprintf( stderr, "Opened configuration file %s\n", filename ); +#endif /* DEBUG */ + + /* Iterate over lines in the file */ + while (fgets(buf, 255, handle) != NULL) { + + line = buf; + + /* Strip leading, trailing whitespace */ + while(isspace((int) *line)) + line++; + + while((strlen(line) > 0) && isspace((int) line[strlen(line) - 1])) + line[strlen(line) - 1] = '\0'; + + /* Ignore blank lines and comments */ + if ((*line == '\n') || (*line == '\0') || (*line == '#')) + continue; + + /* Look for "headings" enclosed in square brackets */ + if ((line[0] == '[') && (line[strlen(line) - 1] == ']')) { + struct CFG_Header *heading; + + /* Allocate new heading entry */ + if ((heading = (struct CFG_Header *)malloc(sizeof(*heading))) == NULL) { + return NULL; + } + + /* Fill in fields */ + memset(heading, '\0', sizeof(*heading)); + + line++; + line[strlen(line) - 1] = '\0'; + + /* FIXME: strdup is not ANSI C compliant. */ + heading->section = strdup(line); + + /* Add to tail of list */ + heading->prev = cfg_info; + + if (cfg_info != NULL) { + cfg_info->next = heading; + } else { + /* Store copy of head of list for return value */ + cfg_head = heading; + } + + cfg_info = heading; + +#ifdef DEBUG + fprintf(stderr, "Added new section %s\n", heading->section); +#endif + /* Go on to next line */ + + continue; + } + + /* Process key/value line */ + + if ((strchr(line, '=') != NULL) && cfg_info != NULL) { + struct CFG_Entry *entry; + char *value; + + /* Allocate new entry */ + if ((entry = (struct CFG_Entry *)malloc(sizeof(*entry))) == NULL) { + return NULL; + } + + /* Fill in fields */ + memset(entry, '\0', sizeof(*entry)); + + value = strchr(line, '='); + *value = '\0'; /* Split string */ + value++; + + while(isspace((int) *value)) { /* Remove leading white */ + value++; + } + + entry->value = strdup(value); + + while((strlen(line) > 0) && isspace((int) line[strlen(line) - 1])) { + line[strlen(line) - 1] = '\0'; /* Remove trailing white */ + } + + /* FIXME: strdup is not ANSI C compliant. */ + entry->key = strdup(line); + + /* Add to head of list */ + + entry->next = cfg_info->entries; + + if (cfg_info->entries != NULL) { + cfg_info->entries->prev = entry; + } + + cfg_info->entries = entry; + +#ifdef DEBUG + fprintf(stderr, "Adding key/value %s/%s\n", entry->key, entry->value); +#endif + /* Go on to next line */ + continue; + } + + /* Line not part of any heading */ + fprintf(stderr, "Orphaned line: %s\n", line); + } + + /* Return pointer to configuration information */ + return cfg_head; +} + +/* Write configuration information to a config file */ + +int CFG_WriteFile(struct CFG_Header *cfg, char *filename) +{ + /* Not implemented - tricky to do and preserve comments */ + + return 0; +} + +/* + * Find the value of a key in a config file. Return value associated + * with key or NULL if no such key exists. + */ + +char *CFG_Get(struct CFG_Header *cfg, char *section, char *key) +{ + struct CFG_Header *h; + struct CFG_Entry *e; + + if ((cfg == NULL) || (section == NULL) || (key == NULL)) { + return NULL; + } + + /* Search for section name */ + for (h = cfg; h != NULL; h = h->next) { + if (strcmp(section, h->section) == 0) { + /* Search for key within section */ + for (e = h->entries; e != NULL; e = e->next) { + if (strcmp(key, e->key) == 0) { + /* Found! */ + return e->value; + } + } + } + } + /* Key not found in section */ + return NULL; +} + +/* Set the value of a key in a config file. Return the new value if + the section/key can be found, else return NULL. */ + +char *CFG_Set(struct CFG_Header *cfg, char *section, char *key, + char *value) +{ + struct CFG_Header *h; + struct CFG_Entry *e; + + if ((cfg == NULL) || (section == NULL) || (key == NULL) || + (value == NULL)) { + return NULL; + } + + /* Search for section name */ + for (h = cfg; h != NULL; h = h->next) { + if (strcmp(section, h->section) == 0) { + /* Search for key within section */ + for (e = h->entries; e != NULL; e = e->next) { + if ((e->key != NULL) && strcmp(key, e->key) == 0) { + /* Found - set value */ + free(e->key); + /* FIXME: strdup is not ANSI C compliant. */ + e->key = strdup(value); + return e->value; + } + } + } + } + /* Key not found in section */ + return NULL; +} + +int readconfig(char **model, char **port, char **initlength, + char **connection, char **bindir) +{ + struct CFG_Header *cfg_info; + char *homedir; + char rcfile[200]; + char *DefaultConnection = "serial"; + char *DefaultBindir = "/usr/local/sbin/"; + +#ifdef WIN32 + homedir = getenv("HOMEDRIVE"); + strncpy(rcfile, homedir ? homedir : "", 200); + homedir = getenv("HOMEPATH"); + strncat(rcfile, homedir ? homedir : "", 200); + strncat(rcfile, "\\_gnokiirc", 200); +#else + homedir = getenv("HOME"); + if (homedir) strncpy(rcfile, homedir, 200); + strncat(rcfile, "/.gnokiirc", 200); +#endif + + /* Try opening .gnokirc from users home directory first */ + if ((cfg_info = CFG_ReadFile(rcfile)) == NULL) { + /* It failed so try for /etc/gnokiirc */ + if ((cfg_info = CFG_ReadFile("/etc/gnokiirc")) == NULL) { + /* That failed too so exit */ + fprintf(stderr, _("Couldn't open %s or /etc/gnokiirc. Exiting now...\n"), rcfile); + return -1; + } + } + + (char *)*model = CFG_Get(cfg_info, "global", "model"); + if (!*model) { + fprintf(stderr, _("Config error - no model specified. Exiting now...\n")); + return -2; + } + + (char *)*port = CFG_Get(cfg_info, "global", "port"); + if (!*port) { + fprintf(stderr, _("Config error - no port specified. Exiting now...\n")); + return -3; + } + + (char *)*initlength = CFG_Get(cfg_info, "global", "initlength"); + if (!*initlength) (char *)*initlength = "default"; + + (char *)*connection = CFG_Get(cfg_info, "global", "connection"); + if (!*connection) (char *)*connection = DefaultConnection; + + (char *)*bindir = CFG_Get(cfg_info, "global", "bindir"); + if (!*bindir) (char *)*bindir = DefaultBindir; + + return 0; +} diff --git a/common/data/Makefile b/common/data/Makefile new file mode 100644 index 0000000..3ffc901 --- /dev/null +++ b/common/data/Makefile @@ -0,0 +1,50 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +# +# For this common directory is used "subsystem.o" .o files concept. +# (the list of object files to be linked together (to COMMON.o), +# and other dirs is used this _one_ file (instead of all OBJS) +# + +TOPDIR=../.. +include $(TOPDIR)/Makefile.global + +CFLAGS += $(PTHREAD_CFLAGS) + +OBJS = at-emulator.o \ + datapump.o \ + rlp-common.o \ + rlp-crc24.o \ + virtmodem.o + + + +all: DATA.o + +DATA.o: $(OBJS) + $(LD) DATA.o $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend DATA.o + +install: + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/common/data/at-emulator.c b/common/data/at-emulator.c new file mode 100644 index 0000000..de23c4c --- /dev/null +++ b/common/data/at-emulator.c @@ -0,0 +1,747 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides a virtual modem or "AT" interface to the GSM phone by + calling code in gsm-api.c. Inspired by and in places copied from the Linux + kernel AT Emulator IDSN code by Fritz Elfert and others. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:07 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.4 2001/07/03 15:27:03 pkot + AT commands for SMS handling support (Tamas Bondar) + Small at-emulator code cleanup (me) + + Revision 1.3 2001/02/21 19:56:59 chris + More fiddling with the directory layout + + +*/ + +#define __data_at_emulator_c + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 + + #include + +#endif + +#include "config.h" +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "data/at-emulator.h" +#include "data/virtmodem.h" +#include "data/datapump.h" + +#define MAX_LINE_LENGTH 256 + + /* Global variables */ +bool ATEM_Initialised = false; /* Set to true once initialised */ +extern bool CommandMode; +extern int ConnectCount; + +char ModelName[80]; /* This seems to be needed to avoid seg-faults */ +char PortName[80]; + + + /* Local variables */ +int PtyRDFD; /* File descriptor for reading and writing to/from */ +int PtyWRFD; /* pty interface - only different in debug mode. */ + +u8 ModemRegisters[MAX_MODEM_REGISTERS]; +char CmdBuffer[MAX_CMD_BUFFERS][CMD_BUFFER_LENGTH]; +int CurrentCmdBuffer; +int CurrentCmdBufferIndex; +bool VerboseResponse; /* Switch betweek numeric (4) and text responses (ERROR) */ +char IncomingCallNo; +int MessageFormat; /* Message Format (text or pdu) */ + + /* Current command parser */ +void (*Parser)(char *); +//void (*Parser)(char *) = ATEM_ParseAT; /* Current command parser */ + +GSM_MemoryType SMSType; +int SMSNumber; + + /* If initialised in debug mode, stdin/out is used instead + of ptys for interface. */ +bool ATEM_Initialise(int read_fd, int write_fd, char *model, char *port) +{ + PtyRDFD = read_fd; + PtyWRFD = write_fd; + + strncpy(ModelName,model,80); + strncpy(PortName,port,80); + + /* Initialise command buffer variables */ + CurrentCmdBuffer = 0; + CurrentCmdBufferIndex = 0; + + /* Default to verbose reponses */ + VerboseResponse = true; + + /* Initialise registers */ + ATEM_InitRegisters(); + + /* Initial parser is AT routine */ + Parser = ATEM_ParseAT; + + /* Setup defaults for AT*C interpreter. */ + SMSNumber = 1; + SMSType = GMT_ME; + + /* Default message format is PDU */ + MessageFormat = PDU_MODE; + + /* Set the call passup so that we get notified of incoming calls */ + GSM->DialData(NULL,-1,&ATEM_CallPassup); + + /* We're ready to roll... */ + ATEM_Initialised = true; + return (true); +} + + /* Initialise the "registers" used by the virtual modem. */ +void ATEM_InitRegisters(void) +{ + + ModemRegisters[REG_RINGATA] = 0; + ModemRegisters[REG_RINGCNT] = 2; + ModemRegisters[REG_ESC] = '+'; + ModemRegisters[REG_CR] = 10; + ModemRegisters[REG_LF] = 13; + ModemRegisters[REG_BS] = 8; + ModemRegisters[S35]=7; + ModemRegisters[REG_ECHO] = BIT_ECHO; + +} + + +/* This gets called to indicate an incoming call */ + +void ATEM_CallPassup(char c) +{ + if ((c >= 0) && (c < 9)) { + ATEM_ModemResult(MR_RING); + IncomingCallNo = c; + } +} + + + /* Handler called when characters received from serial port. + calls state machine code to process it. */ + +void ATEM_HandleIncomingData(char *buffer, int length) +{ + int count; + unsigned char out_buf[3]; + + for (count = 0; count < length ; count++) { + /* Echo character if appropriate. */ + if (ModemRegisters[REG_ECHO] & BIT_ECHO) { + out_buf[0] = buffer[count]; + out_buf[1] = 0; + ATEM_StringOut(out_buf); + } + + /* If it's a command terminator character, parse what + we have so far then go to next buffer. */ + if (buffer[count] == ModemRegisters[REG_CR] || + buffer[count] == ModemRegisters[REG_LF]) { + + CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = 0x00; + Parser(CmdBuffer[CurrentCmdBuffer]); + + CurrentCmdBuffer++; + if (CurrentCmdBuffer >= MAX_CMD_BUFFERS) { + CurrentCmdBuffer = 0; + } + CurrentCmdBufferIndex = 0; + } else { + CmdBuffer[CurrentCmdBuffer][CurrentCmdBufferIndex] = buffer[count]; + CurrentCmdBufferIndex++; + if (CurrentCmdBufferIndex >= CMD_BUFFER_LENGTH) { + CurrentCmdBufferIndex = CMD_BUFFER_LENGTH; + } + } + } +} + + + /* Parser for standard AT commands. cmd_buffer must be null terminated. */ +void ATEM_ParseAT(char *cmd_buffer) +{ + char *buf; + char number[30]; + + if (strncasecmp (cmd_buffer, "AT", 2) != 0) { + ATEM_ModemResult(MR_ERROR); + return; + } + + for (buf = &cmd_buffer[2]; *buf;) { + switch (toupper(*buf)) { + + case 'Z': + buf++; + break; + case 'A': + buf++; + /* For now we'll also initialise the datapump + rlp code again */ + DP_Initialise(PtyRDFD, PtyWRFD); + GSM->DialData(NULL, -1, &DP_CallPassup); + GSM->AnswerCall(IncomingCallNo); + CommandMode = false; + return; + break; + case 'D': + /* Dial Data :-) */ + /* FIXME - should parse this better */ + /* For now we'll also initialise the datapump + rlp code again */ + DP_Initialise(PtyRDFD, PtyWRFD); + buf++; + if (toupper(*buf) == 'T') buf++; + if (*buf == ' ') buf++; + strncpy(number, buf, 30); + if (ModemRegisters[S35] == 0) GSM->DialData(number, 1, &DP_CallPassup); + else GSM->DialData(number, 0, &DP_CallPassup); + ATEM_StringOut("\n\r"); + CommandMode = false; + return; + break; + case 'H': + /* Hang Up */ + buf++; + RLP_SetUserRequest(Disc_Req, true); + GSM->CancelCall(); + break; + case 'S': + /* Change registers - only no. 35 for now */ + buf++; + if (memcmp(buf, "35=", 3) == 0) { + buf += 3; + ModemRegisters[S35] = *buf - '0'; + buf++; + } + break; + /* E - Turn Echo on/off */ + case 'E': + buf++; + switch (ATEM_GetNum(&buf)) { + case 0: + ModemRegisters[REG_ECHO] &= ~BIT_ECHO; + break; + case 1: + ModemRegisters[REG_ECHO] |= BIT_ECHO; + break; + default: + ATEM_ModemResult(MR_ERROR); + return; + } + break; + + /* Handle AT* commands (Nokia proprietary I think) */ + case '*': + buf++; + if (!strcasecmp(buf, "NOKIATEST")) { + ATEM_ModemResult(MR_OK); /* FIXME? */ + return; + } else { + if (!strcasecmp(buf, "C")) { + ATEM_ModemResult(MR_OK); + Parser = ATEM_ParseSMS; + return; + } + } + break; + + /* + is the precursor to another set of commands +CSQ, +FCLASS etc. */ + case '+': + buf++; + switch (toupper(*buf)) { + case 'C': + buf++; + /* Returns true if error occured */ + if (ATEM_CommandPlusC(&buf) == true) { + return; + } + break; + + case 'G': + buf++; + /* Returns true if error occured */ + if (ATEM_CommandPlusG(&buf) == true) { + return; + } + break; + + default: + ATEM_ModemResult(MR_ERROR); + return; + } + break; + + default: + ATEM_ModemResult(MR_ERROR); + return; + } + } + + ATEM_ModemResult(MR_OK); +} + +static GSM_Error ATEM_ReadSMS(int number, GSM_MemoryType type, GSM_SMSMessage *message) +{ + GSM_Error error; + + message->MemoryType = type; + message->Number = number; + error = GSM->GetSMSMessage(message); + + return error; +} + +static void ATEM_PrintSMS(char *line, GSM_SMSMessage *message, int mode) +{ + switch (mode) { + case INTERACT_MODE: + gsprintf(line, MAX_LINE_LENGTH, _("\n\rDate/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n\rText: %s\n\r"), message->Time.Day, message->Time.Month, message->Time.Year, message->Time.Hour, message->Time.Minute, message->Time.Second, message->RemoteNumber.number, message->MessageCenter.Number, message->MessageText); + break; + case TEXT_MODE: + if ((message->DCS.Type == SMS_GeneralDataCoding) && + (message->DCS.u.General.Alphabet == SMS_8bit)) + gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->RemoteNumber.number, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, _("")); + else + gsprintf(line, MAX_LINE_LENGTH, _("\"%s\",\"%s\",,\"%02d/%02d/%02d,%02d:%02d:%02d+%02d\"\n\r%s"), (message->Status ? _("REC READ") : _("REC UNREAD")), message->RemoteNumber.number, message->Time.Year, message->Time.Month, message->Time.Day, message->Time.Hour, message->Time.Minute, message->Time.Second, message->Time.Timezone, message->MessageText); + break; + case PDU_MODE: + gsprintf(line, MAX_LINE_LENGTH, _("")); + break; + default: + gsprintf(line, MAX_LINE_LENGTH, _("")); + break; + } +} + +static void ATEM_EraseSMS(int number, GSM_MemoryType type) +{ + GSM_SMSMessage message; + message.MemoryType = type; + message.Number = number; + if (GSM->DeleteSMSMessage(&message) == GE_NONE) { + ATEM_ModemResult(MR_OK); + } else { + ATEM_ModemResult(MR_ERROR); + } +} + + +static void ATEM_HandleSMS() +{ + GSM_SMSMessage message; + GSM_Error error; + char buffer[MAX_LINE_LENGTH]; + + error = ATEM_ReadSMS(SMSNumber, SMSType, &message); + switch (error) { + case GE_NONE: + ATEM_PrintSMS(buffer, &message, INTERACT_MODE); + ATEM_StringOut(buffer); + break; + default: + gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rNo message under number %d\n\r"), SMSNumber); + ATEM_StringOut(buffer); + break; + } + return; +} + + /* Parser for SMS interactive mode */ +void ATEM_ParseSMS(char *buff) +{ + if (!strcasecmp(buff, "HELP")) { + ATEM_StringOut(_("\n\rThe following commands work...\n\r")); + ATEM_StringOut("DIR\n\r"); + ATEM_StringOut("EXIT\n\r"); + ATEM_StringOut("HELP\n\r"); + return; + } + + if (!strcasecmp(buff, "DIR")) { + SMSNumber = 1; + ATEM_HandleSMS(); + Parser = ATEM_ParseDIR; + return; + } + if (!strcasecmp(buff, "EXIT")) { + Parser = ATEM_ParseAT; + ATEM_ModemResult(MR_OK); + return; + } + ATEM_ModemResult(MR_ERROR); +} + + /* Parser for DIR sub mode of SMS interactive mode. */ +void ATEM_ParseDIR(char *buff) +{ + switch (toupper(*buff)) { + case 'P': + SMSNumber--; + ATEM_HandleSMS(); + return; + case 'N': + SMSNumber++; + ATEM_HandleSMS(); + return; + case 'D': + ATEM_EraseSMS(SMSNumber, SMSType); + return; + case 'Q': + Parser= ATEM_ParseSMS; + ATEM_ModemResult(MR_OK); + return; + } + ATEM_ModemResult(MR_ERROR); +} + + /* Handle AT+C commands, this is a quick hack together at this + stage. */ +bool ATEM_CommandPlusC(char **buf) +{ + float rflevel; + GSM_RFUnits rfunits = GRF_CSQ; + char buffer[MAX_LINE_LENGTH], buffer2[MAX_LINE_LENGTH]; + int status, index; + GSM_Error error; + GSM_SMSMessage message; + + if (strncasecmp(*buf, "SQ", 2) == 0) { + buf[0] += 2; + + if (GSM->GetRFLevel(&rfunits, &rflevel) == GE_NONE) { + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CSQ: %0.0f, 99", rflevel); + ATEM_StringOut(buffer); + return (false); + } else { + return (true); + } + } + /* AT+CGMI is Manufacturer information for the ME (phone) so + it should be Nokia rather than gnokii... */ + if (strncasecmp(*buf, "GMI", 3) == 0) { + buf[0] += 3; + ATEM_StringOut(_("\n\rNokia Mobile Phones")); + return (false); + } + + /* AT+CGSN is IMEI */ + if (strncasecmp(*buf, "GSN", 3) == 0) { + buf[0] += 3; + if (GSM->GetIMEI(buffer2) == GE_NONE) { + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2); + ATEM_StringOut(buffer); + return (false); + } else { + return (true); + } + } + + /* AT+CGMR is Revision (hardware) */ + if (strncasecmp(*buf, "GMR", 3) == 0) { + buf[0] += 3; + if (GSM->GetRevision(buffer2) == GE_NONE) { + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2); + ATEM_StringOut(buffer); + return (false); + } else { + return (true); + } + } + + /* AT+CGMM is Model code */ + if (strncasecmp(*buf, "GMM", 3) == 0) { + buf[0] += 3; + if (GSM->GetModel(buffer2) == GE_NONE) { + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s", buffer2); + ATEM_StringOut(buffer); + return (false); + } else { + return (true); + } + } + + /* AT+CMGF is mode selection for message format */ + if (strncasecmp(*buf, "MGF", 3) == 0) { + buf[0] += 3; + switch (**buf) { + case '=': + buf[0]++; + switch (**buf) { + case '0': + buf[0]++; + MessageFormat = PDU_MODE; + break; + case '1': + buf[0]++; + MessageFormat = TEXT_MODE; + break; + default: + return (true); + } + break; + case '?': + buf[0]++; + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGF: %d", MessageFormat); + ATEM_StringOut(buffer); + break; + default: + return (true); + } + return (false); + } + + /* AT+CMGR is reading a message */ + if (strncasecmp(*buf, "MGR", 3) == 0) { + buf[0] += 3; + switch (**buf) { + case '=': + buf[0]++; + sscanf(*buf, "%d", &index); + buf[0] += strlen(*buf); + + error = ATEM_ReadSMS(index, SMSType, &message); + switch (error) { + case GE_NONE: + ATEM_PrintSMS(buffer2, &message, MessageFormat); + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGR: %s", buffer2); + ATEM_StringOut(buffer); + break; + default: + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error); + ATEM_StringOut(buffer); + return (true); + } + break; + default: + return (true); + } + return (false); + } + + /* AT+CMGL is listing messages */ + if (strncasecmp(*buf, "MGL", 3) == 0) { + buf[0]+=3; + status = -1; + + switch (**buf) { + case 0: + case '=': + buf[0]++; + /* process parameter */ + if (*(*buf-1) == 0 || /* i.e. no parameter given */ + strcasecmp(*buf, "1") == 0 || + strcasecmp(*buf, "3") == 0 || + strcasecmp(*buf, "\"REC READ\"") == 0 || + strcasecmp(*buf, "\"STO SENT\"") == 0) { + status = SMS_Sent; + } else if (strcasecmp(*buf, "0") == 0 || + strcasecmp(*buf, "2") == 0 || + strcasecmp(*buf, "\"REC UNREAD\"") == 0 || + strcasecmp(*buf, "\"STO UNSENT\"") == 0) { + status = SMS_Unsent; + } else if (strcasecmp(*buf, "4") == 0 || + strcasecmp(*buf, "\"ALL\"") == 0) { + status = 4; /* ALL */ + } else { + return true; + } + buf[0] += strlen(*buf); + + /* check all message storages */ + for (index = 1; index <= 20; index++) { + error = ATEM_ReadSMS(index, SMSType, &message); + switch (error) { + case GE_NONE: + /* print messsage if it has the required status */ + if (message.Status == status || status == 4 /* ALL */) { + ATEM_PrintSMS(buffer2, &message, MessageFormat); + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMGL: %d,%s", index, buffer2); + ATEM_StringOut(buffer); + } + break; + case GE_EMPTYSMSLOCATION: + /* don't care if this storage is empty */ + break; + default: + /* print other error codes and quit */ + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r+CMS ERROR: %d\n\r", error); + ATEM_StringOut(buffer); + return (true); + } + } + break; + default: + return (true); + } + return (false); + } + + return (true); +} + + /* AT+G commands. Some of these responses are a bit tongue in cheek... */ +bool ATEM_CommandPlusG(char **buf) +{ + char buffer[MAX_LINE_LENGTH]; + + /* AT+GMI is Manufacturer information for the TA (Terminal Adaptor) */ + if (strncasecmp(*buf, "MI", 3) == 0) { + buf[0] += 2; + + ATEM_StringOut(_("\n\rHugh Blemings, Pavel Janík ml. and others...")); + return (false); + } + + /* AT+GMR is Revision information for the TA (Terminal Adaptor) */ + if (strncasecmp(*buf, "MR", 3) == 0) { + buf[0] += 2; + gsprintf(buffer, MAX_LINE_LENGTH, "\n\r%s %s %s", VERSION, __TIME__, __DATE__); + + ATEM_StringOut(buffer); + return (false); + } + + /* AT+GMM is Model information for the TA (Terminal Adaptor) */ + if (strncasecmp(*buf, "MM", 3) == 0) { + buf[0] += 2; + + gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rgnokii configured for %s on %s"), ModelName, PortName); + ATEM_StringOut(buffer); + return (false); + } + + /* AT+GSN is Serial number for the TA (Terminal Adaptor) */ + if (strncasecmp(*buf, "SN", 3) == 0) { + buf[0] += 2; + + gsprintf(buffer, MAX_LINE_LENGTH, _("\n\rnone built in, choose your own")); + ATEM_StringOut(buffer); + return (false); + } + + return (true); +} + + /* Send a result string back. There is much work to do here, see + the code in the isdn driver for an idea of where it's heading... */ +void ATEM_ModemResult(int code) +{ + char buffer[16]; + + if (VerboseResponse == false) { + sprintf(buffer, "\n\r%d\n\r", code); + ATEM_StringOut(buffer); + } else { + switch (code) { + case MR_OK: + ATEM_StringOut("\n\rOK\n\r"); + break; + + case MR_ERROR: + ATEM_StringOut("\n\rERROR\n\r"); + break; + + case MR_CARRIER: + ATEM_StringOut("\n\rCARRIER\n\r"); + break; + + case MR_CONNECT: + ATEM_StringOut("\n\rCONNECT\n\r"); + break; + + case MR_NOCARRIER: + ATEM_StringOut("\n\rNO CARRIER\n\r"); + break; + case MR_RING: + ATEM_StringOut("RING\n\r"); + break; + default: + ATEM_StringOut(_("\n\rUnknown Result Code!\n\r")); + break; + } + } + +} + + + /* Get integer from char-pointer, set pointer to end of number + stolen basically verbatim from ISDN code. */ +int ATEM_GetNum(char **p) +{ + int v = -1; + + while (*p[0] >= '0' && *p[0] <= '9') { + v = ((v < 0) ? 0 : (v * 10)) + (int) ((*p[0]++) - '0'); + } + + return v; +} + + /* Write string to virtual modem port, either pty or + STDOUT as appropriate. This function is only used during + command mode - data pump is used when connected. */ +void ATEM_StringOut(char *buffer) +{ + int count = 0; + char out_char; + + while (count < strlen(buffer)) { + + /* Translate CR/LF/BS as appropriate */ + switch (buffer[count]) { + case '\r': + out_char = ModemRegisters[REG_CR]; + break; + case '\n': + out_char = ModemRegisters[REG_LF]; + break; + case '\b': + out_char = ModemRegisters[REG_BS]; + break; + default: + out_char = buffer[count]; + break; + } + + write(PtyWRFD, &out_char, 1); + count ++; + } + +} diff --git a/common/data/datapump.c b/common/data/datapump.c new file mode 100644 index 0000000..969091a --- /dev/null +++ b/common/data/datapump.c @@ -0,0 +1,181 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides routines to handle processing of data when connected in + fax or data mode. Converts data from/to GSM phone to virtual modem + interface. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:07 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/11/17 16:41:35 pkot + Cleanup + + Revision 1.3 2001/02/21 19:57:00 chris + More fiddling with the directory layout + + Revision 1.2 2001/02/17 22:40:51 chris + ATA support + + +*/ + +#define __data_datapump_c + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "data/at-emulator.h" +#include "data/virtmodem.h" +#include "data/datapump.h" +#include "data/rlp-common.h" + +/* Global variables */ +extern bool CommandMode; + +/* Local variables */ +int PtyRDFD; /* File descriptor for reading and writing to/from */ +int PtyWRFD; /* pty interface - only different in debug mode. */ +struct pollfd ufds; +u8 pluscount; +bool connected; + +bool DP_Initialise(int read_fd, int write_fd) +{ + PtyRDFD = read_fd; + PtyWRFD = write_fd; + ufds.fd = PtyRDFD; + ufds.events = POLLIN; + RLP_Initialise(GSM->SendRLPFrame, DP_CallBack); + RLP_SetUserRequest(Attach_Req, true); + pluscount = 0; + connected = false; + return true; +} + + +int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length) +{ + int temp; + + switch(ind) { + case Data: + if (CommandMode == false) write(PtyWRFD, buffer, length); + break; + case Conn_Ind: + if (CommandMode == false) ATEM_ModemResult(MR_CARRIER); + RLP_SetUserRequest(Conn_Req, true); + break; + case StatusChange: + if (buffer[0] == 0) { + connected = true; + if (CommandMode == false) ATEM_ModemResult(MR_CONNECT); + } + break; + case Disc_Ind: + if (CommandMode == false) ATEM_ModemResult(MR_NOCARRIER); + connected = false; + /* Set the call passup back to the at emulator */ + GSM->DialData(NULL, -1, &ATEM_CallPassup); + CommandMode = true; + break; + case Reset_Ind: + RLP_SetUserRequest(Reset_Resp, true); + break; + case GetData: + if (poll(&ufds, 1, 0)) { + + /* Check if the program has closed */ + /* Return to command mode */ + /* Note that the call will still be in progress, */ + /* as with a normal modem (I think) */ + + if (ufds.revents != POLLIN) { + CommandMode = true; + /* Set the call passup back to the at emulator */ + GSM->DialData(NULL, -1, &ATEM_CallPassup); + return 0; + } + + temp = read(PtyRDFD, buffer, length); + + if (temp < 0) return 0; /* FIXME - what do we do now? */ + + /* This will only check +++ and the beginning of a read */ + /* But there should be a pause before it anyway */ + + if (buffer[0] == '+') { + pluscount++; + if (temp > 1) { + if (buffer[1] == '+') pluscount++; + else pluscount = 0; + if (temp > 2) { + if (buffer[2] == '+') pluscount++; + else pluscount = 0; + if (temp > 3) pluscount = 0; + } + } + } else pluscount = 0; + + if (pluscount == 3) { + CommandMode = true; + /* Set the call passup back to the at emulator */ + GSM->DialData(NULL, -1, &ATEM_CallPassup); + ATEM_ModemResult(MR_OK); + break; + } + + return temp; + } + break; + default: + break; + } + return 0; +} + +void DP_CallPassup(char c) +{ + switch (c) { + case 'D': + if (CommandMode == false) ATEM_ModemResult(MR_CARRIER); + RLP_SetUserRequest(Conn_Req, true); + connected = true; + break; + case ' ': + CommandMode = true; + /* Set the call passup back to the at emulator */ + GSM->DialData(NULL, -1, &ATEM_CallPassup); + ATEM_ModemResult(MR_NOCARRIER); + RLP_SetUserRequest(Disc_Req, true); + connected = false; + break; + default: + break; + } +} diff --git a/common/data/rlp-common.c b/common/data/rlp-common.c new file mode 100644 index 0000000..599ab6a --- /dev/null +++ b/common/data/rlp-common.c @@ -0,0 +1,2091 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + The development of RLP protocol is sponsored by SuSE CR, s.r.o. (Pavel use + the SIM card from SuSE for testing purposes). + + Actual implementation of RLP protocol. Based on GSM 04.22 version 7.1.0, + downloadable from www.etsi.org (if you register with them) + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:08 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/03/26 23:39:36 pkot + Minor updates: + - Windows INLINE patch (Manfred Jonsson) + - patch to configure.in to compile under FreeBSD (Panagiotis Astithas) + - other cleanups (me) + + Revision 1.4 2001/03/13 01:23:18 pkot + Windows updates (Manfred Jonsson) + + Revision 1.3 2001/02/21 19:57:00 chris + More fiddling with the directory layout + + Revision 1.2 2001/02/17 22:40:51 chris + ATA support + + +*/ + +#include +#include +#include +#include + +#include "data/rlp-common.h" +#include "data/rlp-crc24.h" +#include "gsm-common.h" /* For GSM error and RLP send function. */ +#include "misc.h" /* For u8, u32 etc. */ + +#ifdef WIN32 +#define INLINE __inline +#else +#define INLINE inline +#endif + +/* Our state machine which handles all of nine possible states of RLP + machine. */ +void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header); + +/* This is the type we are just handling. */ +RLP_FrameTypes CurrentFrameType; + +/* Current state of RLP state machine. */ +RLP_State CurrentState=RLP_S0; /* We start at ADM and Detached */ + +/* Next state of RLP state machine. */ +RLP_State NextState; + +/* Pointer to Send function that sends frame to phone. */ +bool (*RLPSendFunction)(RLP_F96Frame *frame, bool out_dtx); + +/* Pointer to Passup function which returns data/inds */ +int (*RLP_Passup)(RLP_UserInds ind, u8 *buffer, int length); + + +/* State variables - see GSM 04.22, Annex A, section A.1.2 */ + +RLP_StateVariable UA_State; +RLP_StateVariable UI_State; +RLP_StateVariable Ackn_State; +RLP_StateVariable Poll_State; +RLP_StateVariable Poll_xchg; +RLP_StateVariable SABM_State; +RLP_StateVariable DISC_State; +RLP_StateVariable DM_State; /* FIXME - not handled */ +RLP_StateVariable XI_R_State; +RLP_StateVariable XID_C_State; +RLP_StateVariable XID_R_State; +RLP_StateVariable TEST_R_State; + +u8 VR=0; +u8 VA=0; +u8 VS=0; +u8 VD=0; +u8 DISC_Count; + +u8 DTX_VR; +RLP_FrameTypes DTX_SF; + +#define RLP_M 62 + +RLP_Data R[RLP_M]; +RLP_Data S[RLP_M]; + +RLP_StateVariable SABM_State; +int SABM_Count; + +RLP_UserRequestStore UserRequests; + +u8 Poll_Count=0; + +/* For now timing is done based on a frame reception rate of 20ms */ +/* Serge has measured it as 18.4ms */ +#define RLP_T_Scaling 2 + +/* Timers - a value of -1 means not set */ +/* To set, timer is loaded with RLP_Timeout1_Limit/RLP_T_Scaling. */ +/* Each received frame (including NULLS / errors) any >0 timer is decrease */ + +int T; +int T_RCVS[RLP_M]; + +bool UA_FBit=true; +bool Ackn_FBit=false; +bool DM_FBit=false; /* FIXME - not handled */ +bool RRReady=false; +bool LRReady=true; /* FIXME - not handled (as if we couldn't keep up with 9600bps :-) */ +bool DISC_PBit=false; + +u8 LastStatus=0xff; /* Last Status byte */ + + +/* RLP Parameters. FIXME: Reset these - e.g. when entering state 0 */ + +u8 RLP_SEND_WS = RLP_M-1; +u8 RLP_RCV_WS = RLP_M-1; +u8 RLP_Timeout1_Limit = 55; +u8 RLP_N2 = 15; /* Maximum number of retransmisions. GSM spec says 6 here, but + Nokia will XID this. */ +u8 RLP_T2=0; +u8 RLP_VersionNumber=0; + + + +/****** Externally called functions ********/ +/*******************************************/ + + +/* Function to initialise RLP code. Main purpose for now is + to set the address of the RLP send function in the API code. */ + +void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length)) +{ + int i; + + RLPSendFunction = rlp_send_function; + RLP_Passup=rlp_passup; + UserRequests.Conn_Req=false; + UserRequests.Attach_Req=false; + UserRequests.Conn_Req_Neg=false; + UserRequests.Reset_Resp=false; + UserRequests.Disc_Req=false; + CurrentState=RLP_S0; + T=-1; + for (i=0;i= 0) ? result : result + RLP_M; + * } +*/ + +/* Check value is within range */ +static bool InWindow(u8 val, u8 lower, u8 upper) +{ + /* allow for one level of wrapping round */ + if (lower>=RLP_M) lower-=RLP_M; + if (upper>=RLP_M) upper-=RLP_M; + if (val>=RLP_M) val-=RLP_M; + + /* .......L*****U....... */ + if (lower <= upper) + return (val >= lower) && (val <= upper); + + /* ******U.........L***** */ + return (val <= upper) || (val >= lower); +} + +void RLP_Init_link_vars(void) +{ + int i; + + Ackn_State=_idle; + Poll_State=_idle; + Poll_Count=0; + Poll_xchg=_idle; + SABM_State=_idle; + DISC_State=_idle; + RRReady=true; /* This seems a bit strange but it's what the spec says... */ + VA=0; + VR=0; + VS=0; + VD=0; + LastStatus=0xff; + + for(i=0;i23) { + S[VD].Data[0]=0x1e; + size=24; + } + else S[VD].Data[0]=size; + + memcpy(&S[VD].Data[1],buffer,size); + + if (size!=24) S[VD].Data[size+1]=0x1f; + + S[VD].State=_send; + VD=Incr(VD); + } +} + + +/* FIXME: Remove this after finishing. */ + +void X(RLP_F96Frame *frame) { + + int i; + + for (i=0; i<30; i++) + printf("byte[%2d]: %02x\n", i, *( (u8 *)frame+i)); + +} + + + +void ResetAllT_RCVS(void) +{ + + int i; + for (i=0;i>5); + + switch (FrameType) { + + /* Unnumbered frames. Be careful - some commands are used as commands + only, so we have to set C/R bit later. We should not allow user for + example to send SABM as response because in the spec is: The SABM + encoding is used as command only. */ + + case RLPFT_U_SABM: + + frame.Header[0]|=0xf8; /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */ + frame.Header[1]|=0x01; /* 1 P/F M1 M2 M3 M4 M5 X */ + + SetCRBit; /* The SABM encoding is used as a command only. */ + SetPFBit; /* It is always used with the P-bit set to "1". */ + + PackM(RLPU_SABM); + + break; + + case RLPFT_U_UA: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + ClearCRBit; /* The UA encoding is used as a response only. */ + + PackM(RLPU_UA); + + break; + + case RLPFT_U_DISC: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + SetCRBit; /* The DISC encoding is used as a command only. */ + + PackM(RLPU_DISC); + + break; + + case RLPFT_U_DM: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + ClearCRBit; /* The DM encoding is used as a response only. */ + + PackM(RLPU_DM); + + break; + + case RLPFT_U_NULL: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + PackM(RLPU_NULL); + + break; + + case RLPFT_U_UI: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + PackM(RLPU_UI); + + break; + + case RLPFT_U_XID: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + SetPFBit; /* XID frames are always used with the P/F-bit set to "1". */ + + PackM(RLPU_XID); + + break; + + case RLPFT_U_TEST: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + PackM(RLPU_TEST); + + break; + + case RLPFT_U_REMAP: + + frame.Header[0]|=0xf8; + frame.Header[1]|=0x01; + + ClearPFBit; /* REMAP frames are always used with P/F-bit set to "0". */ + + PackM(RLPU_REMAP); + + break; + + case RLPFT_S_RR: + + frame.Header[0]|=0xf0; /* See page 11 of the GSM 04.22 spec - 0 X X 1 1 1 1 1 */ + frame.Header[1]|=0x01; /* 1 P/F ...N(R)... */ + + PackNR; + + PackS(RLPS_RR); + + break; + + case RLPFT_S_REJ: + + frame.Header[0]|=0xf0; + frame.Header[1]|=0x01; + + PackNR; + + PackS(RLPS_REJ); + + break; + + case RLPFT_S_RNR: + + frame.Header[0]|=0xf0; + frame.Header[1]|=0x01; + + PackNR; + + PackS(RLPS_RNR); + + break; + + case RLPFT_S_SREJ: + + frame.Header[0]|=0xf0; + frame.Header[1]|=0x01; + + PackNR; + + PackS(RLPS_SREJ); + + break; + + case RLPFT_SI_RR: + + PackNR; + PackNS; + + PackS(RLPS_RR); + + break; + + case RLPFT_SI_REJ: + PackNR; + PackNS; + + PackS(RLPS_REJ); + + break; + + case RLPFT_SI_RNR: + + PackNR; + PackNS; + + PackS(RLPS_RNR); + + break; + + case RLPFT_SI_SREJ: + PackNR; + PackNS; + + PackS(RLPS_SREJ); + + break; + + default: + break; + } + + + /* Store FCS in the frame. */ + RLP_CalculateCRC24Checksum((u8 *)&frame, 27, frame.FCS); + + // X(&frame); + + if (RLPSendFunction) + RLPSendFunction(&frame, OutDTX); + +} + +/* Check_input_PDU in Serge's code. */ + +void RLP_DisplayF96Frame(RLP_F96Frame *frame) +{ + int count; + RLP_F96Header header; + + if (T>=0) T--; + for (count=0;count=0) T_RCVS[count]--; + + CurrentFrameType=RLPFT_BAD; + + if (!frame) { + /* no frame provided, drop through to state machine anyway */ + } else if (RLP_CheckCRC24FCS((u8 *)frame, 30) == true) { + + /* Here we have correct RLP frame so we can parse the field of the header + to out structure. */ + + RLP_DecodeF96Header(frame, &header); + + switch (header.Type) { + + case RLPFT_U: /* Unnumbered frames. */ + +#ifdef RLP_DEBUG + fprintf(stdout, "Unnumbered Frame [$%02x%02x] M=%02x ", frame->Header[0], + frame->Header[1], + header.M); +#endif + + switch (header.M) { + + case RLPU_SABM : + if (header.CR == 0 || header.PF == 0) break; + +#ifdef RLP_DEBUG + fprintf(stdout, "Set Asynchronous Balanced Mode (SABM) "); +#endif + + CurrentFrameType=RLPFT_U_SABM; + + break; + + case RLPU_UA: + if (header.CR == 1) break; + +#ifdef RLP_DEBUG + fprintf(stdout, "Unnumbered Acknowledge (UA) "); +#endif + + CurrentFrameType=RLPFT_U_UA; + + break; + + case RLPU_DISC: + if (header.CR == 0) break; + +#ifdef RLP_DEBUG + fprintf(stdout, "Disconnect (DISC) "); +#endif + + CurrentFrameType=RLPFT_U_DISC; + + break; + + case RLPU_DM: + if (header.CR == 1) break; + +#ifdef RLP_DEBUG + fprintf(stdout, "Disconnected Mode (DM) "); +#endif + CurrentFrameType=RLPFT_U_DM; + + break; + + case RLPU_UI: + +#ifdef RLP_DEBUG + fprintf(stdout, "Unnumbered Information (UI) "); +#endif + + CurrentFrameType=RLPFT_U_UI; + + break; + + case RLPU_XID: + +#ifdef RLP_DEBUG + fprintf(stdout, "Exchange Information (XID) \n"); + RLP_DisplayXID(frame->Data); +#endif + + CurrentFrameType=RLPFT_U_XID; + + break; + + case RLPU_TEST: + +#ifdef DEBUG + fprintf(stdout, "Test (TEST) "); +#endif + + CurrentFrameType=RLPFT_U_TEST; + + break; + + case RLPU_NULL: + +#ifdef DEBUG + fprintf(stdout, "Null information (NULL) "); +#endif + + CurrentFrameType=RLPFT_U_NULL; + + break; + + case RLPU_REMAP: + +#ifdef DEBUG + fprintf(stdout, "Remap (REMAP) "); +#endif + + CurrentFrameType=RLPFT_U_REMAP; + + break; + + default : + +#ifdef RLP_DEBUG + fprintf(stdout, _("Unknown!!! ")); +#endif + + CurrentFrameType=RLPFT_BAD; + + break; + + } + break; + + case RLPFT_S: /* Supervisory frames. */ + +#ifdef RLP_DEBUG + fprintf(stdout, "Supervisory Frame [$%02x%02x] S=0x%x N(R)=%d ", + frame->Header[0], + frame->Header[1], + header.S, + header.Nr); +#endif + + switch (header.S) { + + case RLPS_RR: + +#ifdef RLP_DEBUG + fprintf(stdout, "RR"); +#endif + + CurrentFrameType=RLPFT_S_RR; + + break; + + case RLPS_REJ: + +#ifdef RLP_DEBUG + fprintf(stdout, "REJ"); +#endif + + CurrentFrameType=RLPFT_S_REJ; + + break; + + case RLPS_RNR: + +#ifdef RLP_DEBUG + fprintf(stdout, "RNR"); +#endif + + CurrentFrameType=RLPFT_S_RNR; + + break; + + case RLPS_SREJ: + +#ifdef RLP_DEBUG + fprintf(stdout, "SREJ"); +#endif + + CurrentFrameType=RLPFT_S_SREJ; + + break; + + default: + +#ifdef DEBUG + fprintf(stdout, _("BAD")); +#endif + + CurrentFrameType=RLPFT_BAD; + + break; + + } + + break; + + default: + +#ifdef RLP_DEBUG + fprintf(stdout, "Info+Supervisory Frame [$%02x%02x] S=0x%x N(S)=%d N(R)=%d ", + frame->Header[0], + frame->Header[1], + header.S, + header.Ns, + header.Nr); +#endif + + switch (header.S) { + + case RLPS_RR: + +#ifdef RLP_DEBUG + fprintf(stdout, "RR"); +#endif + + CurrentFrameType=RLPFT_SI_RR; + + break; + + case RLPS_REJ: + +#ifdef RLP_DEBUG + fprintf(stdout, "REJ"); +#endif + + CurrentFrameType=RLPFT_SI_REJ; + + break; + + case RLPS_RNR: + +#ifdef RLP_DEBUG + fprintf(stdout, "RNR"); +#endif + + CurrentFrameType=RLPFT_SI_RNR; + + break; + + case RLPS_SREJ: + +#ifdef RLP_DEBUG + fprintf(stdout, "SREJ"); +#endif + + CurrentFrameType=RLPFT_SI_SREJ; + + break; + + default: + +#ifdef DEBUG + fprintf(stdout, "BAD"); +#endif + + CurrentFrameType=RLPFT_BAD; + + break; + } + + break; + } + +#ifdef RLP_DEBUG + + /* Command/Response and Poll/Final bits. */ + + fprintf(stdout, " C/R=%d P/F=%d", header.CR, header.PF); +#endif + +#ifdef DEBUG + + /* Information. */ + + if (CurrentFrameType!=RLPFT_U_NULL) { + + fprintf(stdout, "\n"); + + for (count = 0; count < 25; count ++) { + + if (isprint(frame->Data[count])) + fprintf(stdout, "[%02x%c]", frame->Data[count], frame->Data[count]); + else + fprintf(stdout, "[%02x ]", frame->Data[count]); + + if (count == 15) + fprintf(stdout, "\n"); + } + } + +#endif +#ifdef RLP_DEBUG + /* FCS. */ + + fprintf (stdout, " FCS: %02x %02x %02x\n\n", frame->FCS[0], + frame->FCS[1], + frame->FCS[2]); + + fflush(stdout); + +#endif + + } + else { + + /* RLP Checksum failed - don't we need some statistics about these + failures? Nothing is printed, because in the first stage of connection + there are too many bad RLP frames... */ + +#ifdef DEBUG + fprintf(stdout, _("Frame FCS is bad. Ignoring...\n")); +#endif + + } + + MAIN_STATE_MACHINE(frame, &header); + + /* + Y:= outblock(); + */ + + return; +} + +/* FIXME: real TEST_Handling - we do not handle TEST yet. */ + +void TEST_Handling() { +} + + + +/* FIXME: better XID_handling - but this will answer a XID command. */ + +bool XID_Handling (RLP_F96Frame *frame, RLP_F96Header *header) { + + u8 count; + u8 type; + u8 length; + + if (CurrentFrameType == RLPFT_U_XID) { + + count=0; + + while (frame->Data[count] !=0) { + + type=frame->Data[count] >> 4; + length=frame->Data[count] & 0x0f; + count++; + + switch (type) { + + case 0x01: /* RLP Version Number */ + RLP_VersionNumber=frame->Data[count]; + count+=length; + break; + case 0x02: /* Interworking Function (IWF) to Mobile Station (MS) window size */ + if (frame->Data[count]>=1 && frame->Data[count]Data[count]; + count+=length; + break; + case 0x03: /* MS to IWF window size */ + if (frame->Data[count]>=1 && frame->Data[count]Data[count]; + count+=length; + break; + case 0x04: /* Acknowledgement Timer (T1). */ + RLP_Timeout1_Limit=frame->Data[count]; + count+=length; + break; + case 0x05: /* Retransmission attempts (N2). */ + RLP_N2=frame->Data[count]; + count+=length; + break; + case 0x06: /* Reply delay (T2). */ + RLP_T2=frame->Data[count]; + count+=length; + break; + case 0x07: /* Compression - not yet! */ + break; + default: + count+=length; + break; + } + } + + /* Now reassemble a reply */ + + count=0; + memset(frame->Data,0x00,25); /* Makes debugging easier */ + + /* Version Number - force to 0 for now */ + RLP_VersionNumber=0; + frame->Data[count++]=0x11; + frame->Data[count++]=RLP_VersionNumber; + + /* Window sizes */ + frame->Data[count++]=0x21; + frame->Data[count++]=RLP_RCV_WS; + frame->Data[count++]=0x31; + frame->Data[count++]=RLP_SEND_WS; + + /* Acknowledgement Timer (T1). */ + frame->Data[count++]=0x41; + frame->Data[count++]=RLP_Timeout1_Limit; + + /* Retransmission attempts (N2). */ + frame->Data[count++]=0x51; + frame->Data[count++]=RLP_N2; + + /* Reply delay (T2). */ + frame->Data[count++]=0x61; + frame->Data[count++]=RLP_T2; + + XID_R_State = _send; + + return true; + } + + return false; +} + + +bool Send_TXU(RLP_F96Frame *frame, RLP_F96Header *header) { + +#ifdef DEBUG + // fprintf(stdout, _("Send_TXU()\n")); + // fprintf(stdout, _("XID_R_State=%d\n"), XID_R_State); +#endif + + /* + + if (RLP_UserEvent(TEST_R_State)) { + RLP_SendF96Frame(RLPFT_U_TEST, false, TEST_R_FBit, 0, 0, TEST_R_Data, false); + return true; + } + else + + */ + + if (XID_R_State == _send && frame) { + RLP_SendF96Frame(RLPFT_U_XID, false, true, 0, 0, frame->Data, false); + XID_R_State = _idle; + return true; + } + + /* + + else if ((XID_C_State == _send ) && (Poll_xchg == _idle)) { + RLP_SendF96Frame(RLPFT_U_XID, true, true, 0, 0, XID_C_Data, false); + XID_C_State = _wait; + T_XID = 1; + Poll_xchg = _wait; + return true; + } else if (RLP_UserEvent(UI_State)) { + RLP_SendF96Frame(RLPFT_U_UI, true, false, 0, 0, NULL, false); + return true; + } + + */ + + return false; +} + + +/* Deliver data */ + +void RLP_DeliverAllInSeqIF() +{ + int i,j; + + do { + + if ((R[VR].Data[0] & 0xE0)!=LastStatus) { + LastStatus=(R[VR].Data[0] & 0xE0); + RLP_Passup(StatusChange,&LastStatus,0); + } + + j=0; + i=R[VR].Data[0] & 0x1f; + if (i==0x1e) j=24; + if (i<0x18) j=i; + + /* FIXME - should check for more data in the frame */ + + RLP_Passup(Data,R[VR].Data+1,j); + + R[VR].State=_idle; + VR=Incr(VR); + + } while (R[VR].State==_rcvd); +} + + +/* Mark any missing information frames between VR and Ns*/ +void RLP_MarkMissingIF(u8 Ns) +{ + u8 i; + for (i=VR; i!=Ns; i=Incr(i)) { + if (R[i].State==_idle) R[i].State=_srej; /* bug in spec, fig A.23 */ + } +} + + +/* Information frame handler */ + +bool RLP_I_Handler(RLP_F96Frame *frame, RLP_F96Header *header) +{ + + if ((header->CR) && (header->PF)) + return true; + + /* If the window size is 61, a received frame must have a sequence + number between VR and VR+60 */ + + if (!InWindow(header->Ns,VR,VR+RLP_RCV_WS-1)) + return true; + + if (header->Ns==VR) { + /* This is not in the spec but I think it is necessary */ + if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1; + R[VR].State=_rcvd; + memcpy(R[VR].Data,frame->Data,25); + RLP_DeliverAllInSeqIF(); + Ackn_State=_send; + } + else { /* Out of sequence, cause a SREJ */ + if (R[header->Ns].State==_wait) T_RCVS[header->Ns]=-1; + R[header->Ns].State=_rcvd; + memcpy(R[header->Ns].Data,frame->Data,25); + RLP_MarkMissingIF(header->Ns); + } + + return false; +} + + +/* Mark acknowledged send frames */ + +void RLP_AdvanceVA(u8 Nr) +{ + while (VA!=Nr) { + S[VA].State=_idle; + VA=Incr(VA); + } +} + + +/* Decrease VS back down to Nr since these have not been acknowledged */ + +void RLP_DecreaseVS(u8 Nr) +{ + while (VS!=Nr) { + VS=Decr(VS); + S[VS].State=_send; + } +} + +/* Supervisory frame handling */ + +void RLP_S_Handler(RLP_F96Frame *frame, RLP_F96Header *header) +{ + u8 i; + + if ((header->CR) && (header->PF)) { + /* Special exchange (ie. error) - counter? */ +#ifdef RLP_DEBUG + fprintf(stdout, "Got Poll command\n"); +#endif + Ackn_State=_send; + Ackn_FBit=true; + for (i=0; iPF==0) return; + if ((CurrentFrameType==RLPFT_S_SREJ) || (CurrentFrameType==RLPFT_S_REJ) || + (CurrentFrameType==RLPFT_SI_SREJ) || (CurrentFrameType==RLPFT_SI_REJ)) return; + RLP_DecreaseVS(header->Nr); + Poll_State=_idle; + Poll_xchg=_idle; + } + switch (CurrentFrameType){ + + case RLPFT_S_RR: + case RLPFT_SI_RR: + RLP_AdvanceVA(header->Nr); + RRReady=true; + break; + case RLPFT_S_RNR: + case RLPFT_SI_RNR: + RLP_AdvanceVA(header->Nr); + RRReady=false; + break; + case RLPFT_S_REJ: + case RLPFT_SI_REJ: + RLP_AdvanceVA(header->Nr); + RRReady=true; + RLP_DecreaseVS(header->Nr); + break; + case RLPFT_S_SREJ: + case RLPFT_SI_SREJ: + S[header->Nr].State=_send; + T=-1; + return; + default: + break; + } + + if (VA==VS) T=-1; + +} + + +/* Find the first SREJ frame */ + +bool RLP_SREJSlot(u8 *x) +{ + u8 i; + + for (i=Incr(VR); i!=VR; i=Incr(i)) if (R[i].State==_srej) { + *x=i; + return true; + } + + return false; +} + + + +/* Check if any SREJ frames need sending, if not send the next in line */ + +bool RLP_PrepareDataToTransmit(u8 *p) +{ + u8 i; + + for (i=VA; i!=VS; i=Incr(i)) + if (S[i].State==_send) { + *p=i; + S[i].State=_wait; + return true; + } + if (S[VS].State!=_send) return false; + if (!InWindow(VS,VA,VA+RLP_SEND_WS-1)) + return false; + *p=VS; + S[VS].State=_wait; + VS=Incr(VS); + return true; +} + + + +/* Send a SREJ command */ + +void RLP_SendSREJ(u8 x) +{ + u8 k; + + if ((Poll_xchg==_idle) && (Poll_State==_send)) { + +#ifdef RLP_DEBUG + fprintf(stdout, "Sending SREJ with poll\n"); +#endif + + RLP_SendF96Frame(RLPFT_S_SREJ, true, true, x , 0 , NULL, false); + R[x].State=_wait; + RLP_SetTimer(&T_RCVS[x]); + Poll_Count++; + Poll_State=_wait; + Poll_xchg=_wait; + RLP_SetTimer(&T); + } + else if (RRReady && RLP_PrepareDataToTransmit(&k)) { +#ifdef RLP_DEBUG + fprintf(stdout, "Sending SREJ for %d along with frame %d\n",x,k); +#endif + RLP_SendF96Frame(RLPFT_SI_SREJ, true, false, x , k , S[k].Data, false); + R[x].State=_wait; + RLP_SetTimer(&T_RCVS[x]); + RLP_SetTimer(&T); + } + else { +#ifdef RLP_DEBUG + fprintf(stdout, "Sending SREJ for %d\n",x); +#endif + RLP_SendF96Frame(RLPFT_S_SREJ, true, false, x , 0 , NULL, false); + R[x].State=_wait; + RLP_SetTimer(&T_RCVS[x]); + } +} + + +/* Send a command */ + +void RLP_Send_XX_Cmd(RLP_FrameTypes type) +{ + u8 k; + + if ((Poll_xchg!=_wait) && (Poll_State==_send)) { + RLP_SendF96Frame(type, true, true, VR , 0 , NULL, false); +#ifdef RLP_DEBUG + fprintf(stdout, "Sending Comd %x with Poll\n",type); +#endif + Ackn_State=_idle; + Poll_Count++; + Poll_State=_wait; + Poll_xchg=_wait; + RLP_SetTimer(&T); + } + else if (RRReady && RLP_PrepareDataToTransmit(&k)) { +#ifdef RLP_DEBUG + fprintf(stdout, "Sending Comd %x with frame %d\n",type,k); +#endif + RLP_SendF96Frame(type+4, true, false, VR , k , S[k].Data, false); + Ackn_State=_idle; + RLP_SetTimer(&T); + } + else { +#ifdef RLP_DEBUG + if (type!=9) + fprintf(stdout, "Sending Comd %x\n",type); +#endif + RLP_SendF96Frame(type, true, false, VR , 0 , NULL, false); + Ackn_State=_idle; + DTX_SF=type; + DTX_VR=VR; /* As v7.1.0 spec */ + } +} + + +/* Send a Response */ + +void RLP_Send_XX_Resp(RLP_FrameTypes type) +{ + u8 k; + + if (RRReady && RLP_PrepareDataToTransmit(&k)) { +#ifdef RLP_DEBUG + fprintf(stdout, "Sending Resp %x with frame %d\n",type+4,k); +#endif + RLP_SendF96Frame(type+4, false, true, VR , k , S[k].Data, false); + Ackn_State=_idle; + Ackn_FBit=false; + RLP_SetTimer(&T); + } + else { +#ifdef RLP_DEBUG + fprintf(stdout, "Sending Resp %x\n",type); +#endif + RLP_SendF96Frame(type, false, true, VR , 0 , NULL, false); + Ackn_State=_idle; + Ackn_FBit=false; + } +} + + +/* Decide which frame to use and send it - currently only used in state 4 */ + +void RLP_SendData() +{ + u8 x; + + if (UA_State==_send) { + RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0 , 0 , NULL, false); + UA_State=_idle; + } + else if (Ackn_FBit==true) { +#ifdef RLP_DEBUG + printf("About to send Poll resp\n"); +#endif + if (LRReady) RLP_Send_XX_Resp(RLPFT_S_RR); + else RLP_Send_XX_Resp(RLPFT_S_RNR); + } + else if (RLP_SREJSlot(&x)) RLP_SendSREJ(x); + else if (LRReady) RLP_Send_XX_Cmd(RLPFT_S_RR); + else RLP_Send_XX_Cmd(RLPFT_S_RNR); +} + +void MAIN_STATE_MACHINE(RLP_F96Frame *frame, RLP_F96Header *header) { + int i; + + switch (CurrentState) { + + /***** RLP State 0. *****/ + + /* ADM and Detached. + + This is the initial state after power on. + + As long as the RLP entity is "Detached", DISC(P) and/or SABM at the + lower interface is acted upon by sending DM(P) or DM(1). Any other + stimulus at the lower interface is ignored. + + This state can be exited only with Attach_Req. */ + + case RLP_S0: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 0.\n")); +#endif + + switch (CurrentFrameType) { + + case RLPFT_U_DISC: + RLP_SendF96Frame(RLPFT_U_DM, false, header->PF, 0, 0, NULL, false); + break; + + case RLPFT_U_SABM: + RLP_SendF96Frame(RLPFT_U_DM, false, true, 0, 0, NULL, false); + break; + + default: + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + if (RLP_GetUserRequest(Attach_Req)) { + NextState=RLP_S1; + UA_State=_idle; + } + break; + } + + break; + + /***** RLP State 1. *****/ + + /* ADM and Attached. + + The RLP entity is ready to established a connection, either by + initiating the connection itself (Conn_Req) or by responding to an + incoming connection request (SABM). + + Upon receiving a DISC PDU, the handling of the UA response is + initiated. */ + + case RLP_S1: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 1.\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch(CurrentFrameType) { + + case RLPFT_U_TEST: + TEST_Handling(); + break; + + case RLPFT_U_SABM: + RLP_Passup(Conn_Ind,NULL,0); + NextState=RLP_S3; + break; + + case RLPFT_U_DISC: + UA_State=_send; + UA_FBit=header->PF; + break; + + case RLPFT_BAD: /* If we get a bad frame we can still respond with SABM */ + default: + if (RLP_GetUserRequest(Conn_Req)) { + SABM_State=_send; + SABM_Count=0; + NextState=RLP_S2; + } + break; + } + + } + if (!Send_TXU(frame, header)) { + + if (UA_State == _send) { + RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false); + UA_State=_idle; + } + else + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + } + break; + + /***** RLP State 2. *****/ + + case RLP_S2: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 2.\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch(CurrentFrameType) { + + case RLPFT_U_TEST: + TEST_Handling(); + break; + + case RLPFT_U_SABM: + /* + T=0; + Conn_Conf=true; + UA_State=_send; + UA_FBit=true; + Init_Link_Vars; + NextState=4; + */ + break; + + case RLPFT_U_DISC: + /* + T=0; + DISC_Ind; + UA_State=_send; + UA_FBit=header->PF; + NextState=RLP_S1; + */ + break; + + case RLPFT_U_UA: +#ifdef DEBUG + fprintf(stdout, _("UA received in RLP state 2.\n")); +#endif + + if (SABM_State == _wait && header->PF) { + T=-1; + // Conn_Conf=true; + // Init_Link_Vars; + NextState=RLP_S4; + } + break; + + case RLPFT_U_DM: + if (SABM_State == _wait && header->PF) { + Poll_xchg=_idle; + // Conn_Conf_Neg=true; + NextState=RLP_S1; + } + break; + + default: + if (T == RLP_Timeout1_Limit) { + Poll_xchg=_idle; + if (SABM_Count>RLP_N2) + NextState=RLP_S8; + SABM_State=_send; + } + break; + } + } + + if (!Send_TXU(frame, header)) { + + if (SABM_State == _send && Poll_xchg == _idle) { + RLP_SendF96Frame(RLPFT_U_SABM, true, true, 0, 0, NULL, false); + SABM_State=_wait; + SABM_Count++; + Poll_xchg=_wait; + T=1; + } else + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + } + + if (RLP_GetUserRequest(Disc_Req)) { + T=-1; + DISC_State=_send; + DISC_Count=0; + DISC_PBit=(Poll_xchg==_idle); + NextState=5; + } + + break; + + /***** RLP State 3. *****/ + + case RLP_S3: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 3.\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch(CurrentFrameType) { + + case RLPFT_U_TEST: + TEST_Handling(); + break; + + case RLPFT_U_DISC: + RLP_Passup(Disc_Ind,NULL,0); + UA_State=_send; + UA_FBit=header->PF; + NextState=RLP_S1; + break; + + default: + if (RLP_GetUserRequest(Conn_Req)) { + UA_State=_send; + UA_FBit=true; + NextState=RLP_S4; + RLP_Init_link_vars(); + } else if (RLP_GetUserRequest(Conn_Req_Neg)) { + DM_State=_send; /* FIXME - code to handle DM_State - missing from spec? */ + DM_FBit=true; + NextState=RLP_S1; + } + break; + } + } + + if (!Send_TXU(frame, header)) { + + if (UA_State == _send) { + RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false); + UA_State=_idle; + } + else + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + } + + + if (RLP_GetUserRequest(Disc_Req)) { + T=-1; + DISC_State=_send; + DISC_Count=0; + DISC_PBit=(Poll_xchg==_idle); + NextState=5; + } + + break; + + /***** RLP State 4. *****/ + + case RLP_S4: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 4.\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch (CurrentFrameType) { + + case RLPFT_U_TEST: + TEST_Handling(); + break; + case RLPFT_U_DISC: + T=-1; + ResetAllT_RCVS(); + RLP_Passup(Disc_Ind,NULL,0); + UA_State=_send; + UA_FBit=header->PF; + NextState=RLP_S1; + break; + case RLPFT_U_SABM: + T=-1; + ResetAllT_RCVS(); + RLP_Passup(Reset_Ind,NULL,0); + NextState=RLP_S7; + break; + case RLPFT_S_RR: + case RLPFT_S_RNR: + case RLPFT_S_REJ: + case RLPFT_S_SREJ: + /* Should check here for unsolicited Fbit */ + /* Spec says: "Nr must be within the set of not yet + acknowledged I-frames or it must be the next possible + frame number." That's VA..VS-1 or VS, i.e. VA..VS */ + if (!InWindow(header->Nr,VA,VS)) + break; + RLP_S_Handler(frame,header); + break; + case RLPFT_SI_RR: + case RLPFT_SI_RNR: + case RLPFT_SI_REJ: + case RLPFT_SI_SREJ: + /* Should check here for unsolicited Fbit */ + if (!InWindow(header->Nr,VA,VS)) + break; + if (!RLP_I_Handler(frame,header)) RLP_S_Handler(frame,header); + break; + default: + break; + } + } + + for (i=0;iRLP_N2) { +#ifdef RLP_DEBUG + fprintf(stdout, "N2 Errors in State 4\n"); +#endif + } + Poll_State=_send; + Poll_Count++; + } + } + + if (!Send_TXU(frame,header)) { + if (UA_State == _send) { + RLP_SendF96Frame(RLPFT_U_UA, false, UA_FBit, 0, 0, NULL, false); + UA_State=_idle; + } + else RLP_SendData(); + } + + + /* Load any data from the Send ringbuffer into the send slots */ + RLP_AddRingBufferDataToSlots(); + +#ifdef RLP_DEBUG + // if (CurrentFrameType!=RLPFT_BAD) + fprintf(stdout, "VD=%d, VA=%d, VS=%d, VR=%d\n",VD,VA,VS,VR); +#ifdef RLP_DEBUG_STATE + { + int zzz; + + if(UA_State!=_idle) printf("[UA_State %d]",UA_State); + if(UI_State!=_idle) printf("[UI_State %d]",UI_State); + if(Ackn_State!=_idle) printf("[Ackn_State %d]",Ackn_State); + if(Poll_State!=_idle) printf("[Poll_State %d]",Poll_State); + if(Poll_xchg!=_idle) printf("[Poll_xchg %d]",Poll_xchg); + if(SABM_State!=_idle) printf("[SABM_State %d]",SABM_State); + if(DISC_State!=_idle) printf("[DISC_State %d]",DISC_State); + if(DM_State!=_idle) printf("[DM_State %d]",DM_State); + if(XI_R_State!=_idle) printf("[XI_R_State %d]",XI_R_State); + if(XID_C_State!=_idle) printf("[XID_C_State %d]",XID_C_State); + if(XID_R_State!=_idle) printf("[XID_R_State %d]",XID_R_State); + if(TEST_R_State!=_idle) printf("[TEST_R_State %d]",TEST_R_State); + + printf("S: "); + for (zzz=0; zzzPF)) { + if (DISC_PBit==true) Poll_xchg=_idle; + T=-1; + NextState=1; + } + break; + case RLPFT_U_DISC: + T=-1; + UA_State=_send; + UA_FBit=header->PF; + NextState=1; + break; + default: + break; + } + } + + if (!Send_TXU(frame,header)) { + if ((DISC_State!=_wait) && !((DISC_PBit==true) && (Poll_xchg==_wait))) { + RLP_SendF96Frame(RLPFT_U_DISC, true, DISC_PBit, 0, 0, NULL, false); + if (DISC_PBit==true) Poll_xchg=_wait; + DISC_State=_wait; + DISC_Count++; + RLP_SetTimer(&T); + } + else + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + } + + if (T==0) { + if (DISC_PBit==1) Poll_xchg=_idle; + DISC_Count++; + if (DISC_Count>RLP_N2) { + +#ifdef RLP_DEBUG + fprintf(stdout, "N2 error in State 5!\n"); +#endif + + } + DISC_State=_send; + } + + break; + + /***** RLP State 6. *****/ + /* We should only get here after a Reset_Req which is not yet supported */ + + case RLP_S6: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 6 - not yet implemented!\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch (CurrentFrameType) { + default: + break; + } + + } + + if (!Send_TXU(frame,header)) { + } + + if (RLP_GetUserRequest(Disc_Req)) { + T=-1; + DISC_State=_send; + DISC_Count=0; + DISC_PBit=(Poll_xchg==_idle); + NextState=5; + } + + break; + + + /***** RLP State 7. *****/ + + case RLP_S7: + +#ifdef DEBUG + fprintf(stdout, _("RLP state 7.\n")); +#endif + + if (!XID_Handling(frame, header)) { + + switch (CurrentFrameType) { + case RLPFT_U_DISC: + RLP_Passup(Disc_Ind,NULL,0); + UA_State=_send; + UA_FBit=header->PF; + NextState=RLP_S1; + break; + default: + break; + } + } + + if (RLP_GetUserRequest(Reset_Resp)){ + UA_State=_send; + UA_FBit=1; + RLP_Init_link_vars(); + NextState=RLP_S4; + } + + if (!Send_TXU(frame,header)) { + RLP_SendF96Frame(RLPFT_U_NULL, false, false, 0, 0, NULL, false); + } + + if (RLP_GetUserRequest(Disc_Req)) { + T=-1; + DISC_State=_send; + DISC_Count=0; + DISC_PBit=(Poll_xchg==_idle); + NextState=5; + } + + break; + + + default: + +#ifdef DEBUG + fprintf(stdout, _("DEBUG: Unknown RLP state!\n")); +#endif + + break; + } + + CurrentState=NextState; + +} + +/* Given a pointer to an RLP XID frame, display contents in human readable + form. Note for now only Version 0 and 1 are supported. Fields can appear + in any order and are delimited by a zero type field. This function is the + exact implementation of section 5.2.2.6, Exchange Identification, XID of + the GSM specification 04.22. */ + +void RLP_DisplayXID(u8 *frame) +{ + + int count = 25; /* Sanity check */ + u8 type, length; + + fprintf(stdout, "XID: "); + + while ((*frame !=0) && (count >= 0)) { + + type = *frame >> 4; + length = *frame & 0x0f; + + switch (type) { + + case 0x01: /* RLP Version Number, probably 1 for Nokia. */ + + frame += length; + fprintf(stdout, "Ver %d ", *frame); + break; + + case 0x02: /* IWF to MS window size */ + + frame += length; + fprintf(stdout, "IWF-MS %d ", *frame); + break; + + case 0x03: /* MS to IWF window size. */ + + frame += length; + fprintf(stdout, "MS-IWF %d ", *frame); + break; + + case 0x04: /* Acknowledgement Timer (T1). */ + + frame += length; + fprintf(stdout, "T1 %dms ", *frame * 10); + break; + + case 0x05: /* Retransmission attempts (N2). */ + + frame += length; + fprintf(stdout, "N2 %d ", *frame); + break; + + case 0x06: /* Reply delay (T2). */ + + frame += length; + fprintf(stdout, "T2 %dms ", *frame * 10); + break; + + case 0x07: /* Compression. */ + + frame ++; + fprintf(stdout, "Comp [Pt=%d ", (*frame >> 4) ); + fprintf(stdout, "P0=%d ", (*frame & 0x03) ); + + frame ++; + fprintf(stdout, "P1l=%d ", *frame); + frame ++; + fprintf(stdout, "P1h=%d ", *frame); + + frame ++; + fprintf(stdout, "P2=%d] ", *frame); + break; + + default: + + frame += length; + fprintf(stdout, "Unknown! type=%02x, length=%02x", type, length); + break; + + } + count --; + frame ++; + } + + return; +} + +/* Given a pointer to an F9.6 Frame, split data out into component parts of + header and determine frame type. */ + +void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header) +{ + + /* Poll/Final bit. */ + + if ((frame->Header[1] & 0x02)) + header->PF = true; + else + header->PF = false; + + /* Command/Response bit. */ + + if ((frame->Header[0] & 0x01)) + header->CR = true; + else + header->CR = false; + + /* Send Sequence Number. */ + + header->Ns = frame->Header[0] >> 3; + + if ((frame->Header[1] & 0x01)) + header->Ns |= 0x20; /* Most significant bit. */ + + /* Determine frame type. See the section 5.2.1 in the GSM 04.22 + specification. */ + + switch (header->Ns) { + + case 0x3f: /* Frames of type U, unnumbered frames. */ + + /* U frames have M1, ..., M5 stored in the place of N(R). */ + + header->Type = RLPFT_U; + header->M = (frame->Header[1] >> 2) & 0x1f; + return; /* For U frames, we do not need N(R) and bits S1 and S2. */ + + case 0x3e: /* Frames of type S, supervisory frames. */ + + header->Type = RLPFT_S; + break; + + default: /* Frames of type I+S, numbered information transfer ans + supervisory frames combined. */ + + header->Type = RLPFT_IS; + break; + } + + /* Receive Sequence Number N(R). */ + header->Nr = frame->Header[1] >> 2; + + /* Status bits (S1 and S2). */ + header->S = (frame->Header[0] >> 1) & 0x03; + + return; +} + + diff --git a/common/data/rlp-crc24.c b/common/data/rlp-crc24.c new file mode 100644 index 0000000..3b7108e --- /dev/null +++ b/common/data/rlp-crc24.c @@ -0,0 +1,116 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + CRC24 (aka FCS) implementation in RLP. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:08 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/02/21 19:57:02 chris + More fiddling with the directory layout + + +*/ + +#include "data/rlp-crc24.h" + +/* CRC-24 table is used for computation of RLP checksum. */ + +const u32 CRC24_Table[256] = { + 0x00000000, 0x00D6A776, 0x00F64557, 0x0020E221, 0x00B78115, 0x00612663, + 0x0041C442, 0x00976334, 0x00340991, 0x00E2AEE7, 0x00C24CC6, 0x0014EBB0, + 0x00838884, 0x00552FF2, 0x0075CDD3, 0x00A36AA5, 0x00681322, 0x00BEB454, + 0x009E5675, 0x0048F103, 0x00DF9237, 0x00093541, 0x0029D760, 0x00FF7016, + 0x005C1AB3, 0x008ABDC5, 0x00AA5FE4, 0x007CF892, 0x00EB9BA6, 0x003D3CD0, + 0x001DDEF1, 0x00CB7987, 0x00D02644, 0x00068132, 0x00266313, 0x00F0C465, + 0x0067A751, 0x00B10027, 0x0091E206, 0x00474570, 0x00E42FD5, 0x003288A3, + 0x00126A82, 0x00C4CDF4, 0x0053AEC0, 0x008509B6, 0x00A5EB97, 0x00734CE1, + 0x00B83566, 0x006E9210, 0x004E7031, 0x0098D747, 0x000FB473, 0x00D91305, + 0x00F9F124, 0x002F5652, 0x008C3CF7, 0x005A9B81, 0x007A79A0, 0x00ACDED6, + 0x003BBDE2, 0x00ED1A94, 0x00CDF8B5, 0x001B5FC3, 0x00FB4733, 0x002DE045, + 0x000D0264, 0x00DBA512, 0x004CC626, 0x009A6150, 0x00BA8371, 0x006C2407, + 0x00CF4EA2, 0x0019E9D4, 0x00390BF5, 0x00EFAC83, 0x0078CFB7, 0x00AE68C1, + 0x008E8AE0, 0x00582D96, 0x00935411, 0x0045F367, 0x00651146, 0x00B3B630, + 0x0024D504, 0x00F27272, 0x00D29053, 0x00043725, 0x00A75D80, 0x0071FAF6, + 0x005118D7, 0x0087BFA1, 0x0010DC95, 0x00C67BE3, 0x00E699C2, 0x00303EB4, + 0x002B6177, 0x00FDC601, 0x00DD2420, 0x000B8356, 0x009CE062, 0x004A4714, + 0x006AA535, 0x00BC0243, 0x001F68E6, 0x00C9CF90, 0x00E92DB1, 0x003F8AC7, + 0x00A8E9F3, 0x007E4E85, 0x005EACA4, 0x00880BD2, 0x00437255, 0x0095D523, + 0x00B53702, 0x00639074, 0x00F4F340, 0x00225436, 0x0002B617, 0x00D41161, + 0x00777BC4, 0x00A1DCB2, 0x00813E93, 0x005799E5, 0x00C0FAD1, 0x00165DA7, + 0x0036BF86, 0x00E018F0, 0x00AD85DD, 0x007B22AB, 0x005BC08A, 0x008D67FC, + 0x001A04C8, 0x00CCA3BE, 0x00EC419F, 0x003AE6E9, 0x00998C4C, 0x004F2B3A, + 0x006FC91B, 0x00B96E6D, 0x002E0D59, 0x00F8AA2F, 0x00D8480E, 0x000EEF78, + 0x00C596FF, 0x00133189, 0x0033D3A8, 0x00E574DE, 0x007217EA, 0x00A4B09C, + 0x008452BD, 0x0052F5CB, 0x00F19F6E, 0x00273818, 0x0007DA39, 0x00D17D4F, + 0x00461E7B, 0x0090B90D, 0x00B05B2C, 0x0066FC5A, 0x007DA399, 0x00AB04EF, + 0x008BE6CE, 0x005D41B8, 0x00CA228C, 0x001C85FA, 0x003C67DB, 0x00EAC0AD, + 0x0049AA08, 0x009F0D7E, 0x00BFEF5F, 0x00694829, 0x00FE2B1D, 0x00288C6B, + 0x00086E4A, 0x00DEC93C, 0x0015B0BB, 0x00C317CD, 0x00E3F5EC, 0x0035529A, + 0x00A231AE, 0x007496D8, 0x005474F9, 0x0082D38F, 0x0021B92A, 0x00F71E5C, + 0x00D7FC7D, 0x00015B0B, 0x0096383F, 0x00409F49, 0x00607D68, 0x00B6DA1E, + 0x0056C2EE, 0x00806598, 0x00A087B9, 0x007620CF, 0x00E143FB, 0x0037E48D, + 0x001706AC, 0x00C1A1DA, 0x0062CB7F, 0x00B46C09, 0x00948E28, 0x0042295E, + 0x00D54A6A, 0x0003ED1C, 0x00230F3D, 0x00F5A84B, 0x003ED1CC, 0x00E876BA, + 0x00C8949B, 0x001E33ED, 0x008950D9, 0x005FF7AF, 0x007F158E, 0x00A9B2F8, + 0x000AD85D, 0x00DC7F2B, 0x00FC9D0A, 0x002A3A7C, 0x00BD5948, 0x006BFE3E, + 0x004B1C1F, 0x009DBB69, 0x0086E4AA, 0x005043DC, 0x0070A1FD, 0x00A6068B, + 0x003165BF, 0x00E7C2C9, 0x00C720E8, 0x0011879E, 0x00B2ED3B, 0x00644A4D, + 0x0044A86C, 0x00920F1A, 0x00056C2E, 0x00D3CB58, 0x00F32979, 0x00258E0F, + 0x00EEF788, 0x003850FE, 0x0018B2DF, 0x00CE15A9, 0x0059769D, 0x008FD1EB, + 0x00AF33CA, 0x007994BC, 0x00DAFE19, 0x000C596F, 0x002CBB4E, 0x00FA1C38, + 0x006D7F0C, 0x00BBD87A, 0x009B3A5B, 0x004D9D2D +}; + +void RLP_CalculateCRC24Polinomial(u8 *data, int length, u32 *polinomial) +{ + + int i; + u8 cur; + + *polinomial = 0x00ffffff; + + for (i = 0; i < length; i++) { + cur = (*polinomial & 0x0000ffff) ^ data[i]; + *polinomial = (*polinomial >> 8) ^ CRC24_Table[cur]; + } + + *polinomial = ((~*polinomial) & 0x00ffffff); +} + + +void RLP_CalculateCRC24Checksum(u8 *data, int length, u8 *crc) +{ + u32 polinomial; + + RLP_CalculateCRC24Polinomial(data, length, &polinomial); + crc[0] = polinomial & 0x0000ffff; + crc[1] = (polinomial >> 8) & 0x0000ffff; + crc[2] = (polinomial >> 16) & 0x0000ffff; + +} + +bool RLP_CheckCRC24FCS(u8 *data, int length) +{ + + u8 crc[] = { 0x00, 0x00, 0x00 }; + + RLP_CalculateCRC24Checksum(data, length - 3, crc); + + if (((data[length - 3] == crc[0]) && + (data[length - 2] == crc[1]) && + (data[length - 1] == crc[2]))) { + return (true); + } + return (false); +} diff --git a/common/data/virtmodem.c b/common/data/virtmodem.c new file mode 100644 index 0000000..fe18f6b --- /dev/null +++ b/common/data/virtmodem.c @@ -0,0 +1,380 @@ +/* + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides a virtual modem interface to the GSM phone by calling + code in gsm-api.c, at-emulator.c and datapump.c. The code here provides + the overall framework and coordinates switching between command mode + (AT-emulator) and "online" mode where the data pump code translates data + from/to the GSM handset and the modem data/fax stream. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:08 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/04/14 23:23:43 pkot + Fixed problems with grantpt + + Revision 1.3 2001/03/21 23:36:04 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.2 2001/02/21 19:57:02 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:51 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.5 2001/01/08 15:11:37 pkot + Documentation updates. + Fixed some bugs and removed FIXMEs. + We need to move some stuff from configure.in to aclocal.m4 + + Revision 1.4 2001/01/02 09:09:09 pkot + Misc fixes and updates. + + Revision 1.3 2000/12/27 10:54:14 pkot + Added Unix98 PTYs support (Michael Mráka). + + +*/ + +#define __virtmodem_c + +#include + +/* This is the right way to include stdlib with __USE_XOPEN defined */ +#ifdef USE_UNIX98PTYS +# define _XOPEN_SOURCE 500 +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "misc.h" +#include "gsm-api.h" +#include "gsm-common.h" +#include "data/at-emulator.h" +#include "data/datapump.h" +#include "data/virtmodem.h" +#include "data/rlp-common.h" + + /* Global variables */ + +extern bool TerminateThread; +int ConnectCount; + + /* Local variables */ + +int PtyRDFD; /* File descriptor for reading and writing to/from */ +int PtyWRFD; /* pty interface - only different in debug mode. */ + +bool UseSTDIO; /* Use STDIO for debugging purposes instead of pty */ +bool CommandMode; + +pthread_t Thread; +bool RequestTerminate; + + + /* If initialised in debug mode, stdin/out is used instead + of ptys for interface. */ +bool VM_Initialise(char *model,char *port, char *initlength, GSM_ConnectionType connection, char *bindir, bool debug_mode, bool GSMInit) +{ + int rtn; + + CommandMode = true; + + RequestTerminate = false; + + if (debug_mode == true) { + UseSTDIO = true; + } + else { + UseSTDIO = false; + } + + if (GSMInit) { +#ifdef DEBUG + fprintf (stderr , "Initialising GSM\n"); +#endif /* DEBUG */ + if ((VM_GSMInitialise(model, port, initlength, connection) != GE_NONE)) { + fprintf (stderr, _("VM_Initialise - VM_GSMInitialise failed!\n")); + return (false); + } + } + GSMInit=false; + + if (VM_PtySetup(bindir) < 0) { + fprintf (stderr, _("VM_Initialise - VM_PtySetup failed!\n")); + return (false); + } + + if (ATEM_Initialise(PtyRDFD, PtyWRFD, model, port) != true) { + fprintf (stderr, _("VM_Initialise - ATEM_Initialise failed!\n")); + return (false); + } + + if (DP_Initialise(PtyRDFD, PtyWRFD) != true) { + fprintf (stderr, _("VM_Initialise - DP_Initialise failed!\n")); + return (false); + } + + /* Create and start thread, */ + rtn = pthread_create(&Thread, NULL, (void *) VM_ThreadLoop, (void *)NULL); + + if (rtn == EAGAIN || rtn == EINVAL) { + return (false); + } + return (true); +} + +void VM_ThreadLoop(void) +{ + int res; + struct pollfd ufds; + + /* Note we can't use signals here as they are already used + in the FBUS code. This may warrant changing the FBUS + code around sometime to use select instead to free up + the SIGIO handler for mainline code. */ + + ufds.fd=PtyRDFD; + ufds.events=POLLIN; + + while (!RequestTerminate) { + if (!CommandMode) { + sleep(1); + } else { /* If we are in data mode, leave it to datapump to get the data */ + + res=poll(&ufds,1,500); + + switch (res) { + case 0: /* Timeout */ + break; + + case -1: + perror("VM_ThreadLoop - select"); + exit (-1); + + default: + if (ufds.revents==POLLIN) { + VM_CharHandler(); + } else usleep(500); /* Probably the file has been closed */ + break; + } + } + } + +} + + /* Application should call VM_Terminate to shut down + the virtual modem thread */ +void VM_Terminate(void) +{ + + /* Request termination of thread */ + RequestTerminate = true; + + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); + + if (!UseSTDIO) { + close (PtyRDFD); + close (PtyWRFD); + } +} + + /* Open pseudo tty interface and (in due course create a symlink + to be /dev/gnokii etc. ) */ + +int VM_PtySetup(char *bindir) +{ + int err; + char mgnokiidev[200]; + char *slave_name; + char cmdline[200]; + + if (bindir) { + strncpy(mgnokiidev, bindir, 200); + strcat(mgnokiidev, "/"); + } + strncat(mgnokiidev, "mgnokiidev", 200 - strlen(bindir)); + + if (UseSTDIO) { + PtyRDFD = STDIN_FILENO; + PtyWRFD = STDOUT_FILENO; + return (0); + } + + PtyRDFD = VM_GetMasterPty(&slave_name); + if (PtyRDFD < 0) { + fprintf (stderr, _("Couldn't open pty!\n")); + return(-1); + } + PtyWRFD = PtyRDFD; + + /* Check we haven't been installed setuid root for some reason + if so, don't create /dev/gnokii */ + if (getuid() != geteuid()) { + fprintf(stderr, _("gnokiid should not be installed setuid root!\n")); + return (0); + } + +#ifdef DEBUG + fprintf (stderr, _("Slave pty is %s, calling %s to create /dev/gnokii.\n"), slave_name, mgnokiidev); +#endif /* DEBUG */ + + /* Create command line, something line ./mkgnokiidev ttyp0 */ + sprintf(cmdline, "%s %s", mgnokiidev, slave_name); + + /* And use system to call it. */ + err = system (cmdline); + + return (err); + +} + + /* Handler called when characters received from serial port. + calls state machine code to process it. */ +void VM_CharHandler(void) +{ + unsigned char buffer[255]; + int res; + + + /* If we are in command mode, get the character, otherwise leave it */ + + if (CommandMode && ATEM_Initialised) { + + res = read(PtyRDFD, buffer, 255); + + /* A returned value of -1 means something serious has gone wrong - so quit!! */ + /* Note that file closure etc. should have been dealt with in ThreadLoop */ + + if (res < 0) { + TerminateThread=true; + return; + } + + ATEM_HandleIncomingData(buffer, res); + } +} + + /* Initialise GSM interface, returning GSM_Error as appropriate */ +GSM_Error VM_GSMInitialise(char *model, char *port, char *initlength, GSM_ConnectionType connection) +{ + int count=0; + GSM_Error error; + static GSM_Statemachine sm; + + /* Initialise the code for the GSM interface. */ + + error = GSM_Initialise(model,port, initlength, connection, RLP_DisplayF96Frame, &sm); + + if (error != GE_NONE) { + fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); + return (error); + } + + /* First (and important!) wait for GSM link to be active. We allow 10 + seconds... */ + + while (count++ < 200 && *GSM_LinkOK == false) { + usleep(50000); + } + + if (*GSM_LinkOK == false) { + fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting. \n")); + return (GE_NOLINK); + } + + return (GE_NONE); +} + +/* VM_GetMasterPty() + Takes a double-indirect character pointer in which to put a slave + name, and returns an integer file descriptor. If it returns < 0, an + error has occurred. Otherwise, it has returned the master pty + file descriptor, and fills in *name with the name of the + corresponding slave pty. Once the slave pty has been opened, + you are responsible to free *name. Code is from Developling Linux + Applications by Troan and Johnson */ + + +int VM_GetMasterPty(char **name) { + +#ifdef USE_UNIX98PTYS + int master, err; + + master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK); + if (master >= 0) { + err = grantpt(master); + err = err || unlockpt(master); + if (!err) { + *name = ptsname(master); + } else { + return(-1); + } + } +#else /* USE_UNIX98PTYS */ + int i = 0 , j = 0; + /* default to returning error */ + int master = -1; + + /* create a dummy name to fill in */ + *name = strdup("/dev/ptyXX"); + + /* search for an unused pty */ + for (i=0; i<16 && master <= 0; i++) { + for (j=0; j<16 && master <= 0; j++) { + (*name)[8] = "pqrstuvwxyzPQRST"[i]; + (*name)[9] = "0123456789abcdef"[j]; + /* open the master pty */ + if ((master = open(*name, O_RDWR | O_NOCTTY | O_NONBLOCK )) < 0) { + if (errno == ENOENT) { + /* we are out of pty devices */ + free (*name); + return (master); + } + } + } + } + if ((master < 0) && (i == 16) && (j == 16)) { + /* must have tried every pty unsuccessfully */ + free (*name); + return (master); + } + + /* By substituting a letter, we change the master pty + * name into the slave pty name. + */ + (*name)[5] = 't'; + +#endif /* USE_UNIX98PTYS */ + + return (master); +} + diff --git a/common/device.c b/common/device.c new file mode 100644 index 0000000..dee2fe2 --- /dev/null +++ b/common/device.c @@ -0,0 +1,196 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:58 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.11 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.10 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.9 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + Revision 1.8 2001/02/21 19:56:55 chris + More fiddling with the directory layout + + Revision 1.7 2001/02/09 18:12:53 chris + Marcel's tekram support + + Revision 1.6 2001/02/03 23:56:12 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + +*/ + +#ifndef WIN32 + +#include "devices/unixserial.h" +#include "devices/unixirda.h" +#include "devices/tekram.h" +#include "device.h" + +/* + * Structure to store the filedescriptor we use. + * + */ + +int device_portfd = -1; + +/* The device type to use */ + +GSM_ConnectionType devicetype; + +int device_getfd(void) { + + return device_portfd; +} + +int device_open(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake, GSM_ConnectionType device_type) +{ + devicetype = device_type; + + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + device_portfd = serial_opendevice(__file, __with_odd_parity, __with_async, __with_hw_handshake); + break; + case GCT_Tekram: + device_portfd = tekram_open(__file); + break; + case GCT_Irda: + device_portfd = irda_open(); + break; + default: + break; + } + return (device_portfd >= 0); +} + +void device_close(void) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + serial_close(device_portfd); + break; + case GCT_Tekram: + tekram_close(device_portfd); + break; + case GCT_Irda: + irda_close(device_portfd); + break; + default: + break; + } +} + +void device_reset(void) +{ +} + +void device_setdtrrts(int __dtr, int __rts) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + serial_setdtrrts(device_portfd, __dtr, __rts); + break; + case GCT_Tekram: + break; + case GCT_Irda: + break; + default: + break; + } +} + +void device_changespeed(int __speed) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + serial_changespeed(device_portfd, __speed); + break; + case GCT_Tekram: + tekram_changespeed(device_portfd, __speed); + break; + case GCT_Irda: + break; + default: + break; + } +} + +size_t device_read(__ptr_t __buf, size_t __nbytes) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + return (serial_read(device_portfd, __buf, __nbytes)); + break; + case GCT_Tekram: + return (tekram_read(device_portfd, __buf, __nbytes)); + break; + case GCT_Irda: + return irda_read(device_portfd, __buf, __nbytes); + break; + default: + break; + } + return 0; +} + +size_t device_write(__const __ptr_t __buf, size_t __n) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + return (serial_write(device_portfd, __buf, __n)); + break; + case GCT_Tekram: + return (tekram_write(device_portfd, __buf, __n)); + break; + case GCT_Irda: + return irda_write(device_portfd, __buf, __n); + break; + default: + break; + } + return 0; +} + +int device_select(struct timeval *timeout) +{ + switch (devicetype) { + case GCT_Serial: + case GCT_Infrared: + return serial_select(device_portfd, timeout); + break; + case GCT_Tekram: + return tekram_select(device_portfd, timeout); + break; + case GCT_Irda: + return irda_select(device_portfd, timeout); + break; + default: + break; + } + return -1; +} + +#endif /* WIN32 */ + diff --git a/common/devices/Makefile b/common/devices/Makefile new file mode 100644 index 0000000..aefedc8 --- /dev/null +++ b/common/devices/Makefile @@ -0,0 +1,49 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +# +# For this common directory is used "subsystem.o" .o files concept. +# (the list of object files to be linked together (to COMMON.o), +# and other dirs is used this _one_ file (instead of all OBJS) +# + +TOPDIR=../.. +include $(TOPDIR)/Makefile.global + +OBJS = tekram.o + +ifdef WIN32 + OBJS += $(TOPDIR)/win32/winserial.o +else + OBJS += unixserial.o \ + unixirda.o +endif + +all: DEVICES.o + +DEVICES.o: $(OBJS) + $(LD) DEVICES.o $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend LINKS.o + +install: + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/common/devices/tekram.c b/common/devices/tekram.c new file mode 100644 index 0000000..21b5b6f --- /dev/null +++ b/common/devices/tekram.c @@ -0,0 +1,147 @@ +/* + * $Id$ + * + * + * G N O K I I + * + * A Linux/Unix toolset and driver for Nokia mobile phones. + * + * Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + * Copyright (C) 2000-2001 Marcel Holtmann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:08 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.2 2001/02/21 19:57:03 chris + * More fiddling with the directory layout + * + * Revision 1.1 2001/02/16 14:29:51 chris + * Restructure of common/. Fixed a problem in fbus-phonet.c + * Lots of dprintfs for Marcin + * Any size xpm can now be loaded (eg for 7110 startup logos) + * nk7110 code detects 7110/6210 and alters startup logo size to suit + * Moved Marcin's extended phonebook code into gnokii.c + * + * Revision 1.2 2001/02/12 15:13:46 chris + * Fixed my bug in xgnokii_contacts.c and added to tekram.c + * + * Revision 1.1 2001/02/09 18:12:53 chris + * Marcel's tekram support + * + */ + +#include +#include +#include +#include +#include + +#ifndef WIN32 +#include "devices/unixserial.h" +#else +#include "winserial.h" +#endif + +#include "devices/tekram.h" + + + + +int tekram_open(__const char *__file) { + + return (serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK)); +} + +void tekram_close(int __fd) { + + serial_setdtrrts(__fd, 0, 0); + + serial_close(__fd); +} + +void tekram_reset(int __fd) { + + serial_setdtrrts(__fd, 0, 0); + + usleep(50000); + + serial_setdtrrts(__fd, 1, 0); + + usleep(1000); + + serial_setdtrrts(__fd, 1, 1); + + usleep(50); + + + serial_changespeed(__fd, 9600); +} + +void tekram_changespeed(int __fd, int __speed) { + + unsigned char speedbyte; + + + switch (__speed) { + + default: + case 9600: speedbyte = TEKRAM_PW | TEKRAM_B9600; break; + case 19200: speedbyte = TEKRAM_PW | TEKRAM_B19200; break; + case 38400: speedbyte = TEKRAM_PW | TEKRAM_B38400; break; + case 57600: speedbyte = TEKRAM_PW | TEKRAM_B57600; break; + case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break; + + } + + + tekram_reset(__fd); + + serial_setdtrrts(__fd, 1, 0); + + usleep(7); + + serial_write(__fd, &speedbyte, 1); + + usleep(100000); + + serial_setdtrrts(__fd, 1, 1); + + + serial_changespeed(__fd, __speed); +} + +size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes) { + + return (serial_read(__fd, __buf, __nbytes)); +} + +size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n) { + + return (serial_write(__fd, __buf, __n)); +} + +int tekram_select(int fd, struct timeval *timeout) { + + fd_set readfds; + + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + + return (select(fd + 1, &readfds, NULL, NULL, timeout)); + +} diff --git a/common/devices/unixirda.c b/common/devices/unixirda.c new file mode 100644 index 0000000..2931d11 --- /dev/null +++ b/common/devices/unixirda.c @@ -0,0 +1,205 @@ +/* + * $Id$ + * + * + * G N O K I I + * + * A Linux/Unix toolset and driver for Nokia mobile phones. + * + * Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + * Copyright (C) 2000-2001 Marcel Holtmann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:09 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.7 2001/11/08 16:49:19 pkot + * Cleanups + * + * Revision 1.6 2001/08/17 00:18:12 pkot + * Removed recv() from IrDA initializing procedure (many people) + * + * Revision 1.5 2001/06/27 23:52:48 pkot + * 7110/6210 updates (Marian Jancar) + * + * Revision 1.4 2001/06/20 21:27:34 pkot + * IrDA patch (Marian Jancar) + * + * Revision 1.3 2001/02/21 19:57:04 chris + * More fiddling with the directory layout + * + * Revision 1.2 2001/02/20 21:55:10 pkot + * Small #include updates + * + * Revision 1.1 2001/02/16 14:29:52 chris + * Restructure of common/. Fixed a problem in fbus-phonet.c + * Lots of dprintfs for Marcin + * Any size xpm can now be loaded (eg for 7110 startup logos) + * nk7110 code detects 7110/6210 and alters startup logo size to suit + * Moved Marcin's extended phonebook code into gnokii.c + * + * Revision 1.2 2001/02/06 21:15:35 chris + * Preliminary irda support for 7110 etc. Not well tested! + * + * Revision 1.1 2001/02/03 23:56:17 chris + * Start of work on irda support (now we just need fbus-irda.c!) + * Proper unicode support in 7110 code (from pkot) + * + */ + +#include "devices/unixirda.h" + +#ifndef AF_IRDA +#define AF_IRDA 23 +#endif + +#define INFO_LEN 22 +#define DISCOVERY_TIMEOUT 60.0 +#define DISCOVERY_SLEEP 0.4 + +static char *phone[] = { + "Nokia 7110", "Nokia 6210" +}; + +double d_time(void) +{ + double time; + struct timeval tv; + + gettimeofday(&tv, NULL); + + time = tv.tv_sec + (((double)tv.tv_usec) / 1000000.0); + + return time; +} + +double d_sleep(double s) +{ + double time; + struct timeval tv1, tv2; + + gettimeofday(&tv1, NULL); + usleep(s * 1000000); + gettimeofday(&tv2, NULL); + + time = tv2.tv_sec - tv1.tv_sec + (((double)(tv2.tv_usec - tv1.tv_usec)) / 1000000.0); + + return time; +} + +static int irda_discover_device(void) +{ + + struct irda_device_list *list; + struct irda_device_info *dev; + unsigned char *buf; + int s, len, i, j, daddr = -1, fd; + double t1, t2; + int phones = sizeof(phone) / sizeof(*phone); + + fd = socket(AF_IRDA, SOCK_STREAM, 0); + + len = sizeof(*list) + sizeof(*dev) * 10; // 10 = max devices in discover + buf = malloc(len); + list = (struct irda_device_list *)buf; + dev = list->dev; + + t1 = d_time(); + + do { + s = len; + memset(buf, 0, s); + + if (getsockopt(fd, SOL_IRLMP, IRLMP_ENUMDEVICES, buf, &s) == 0) { + for (i = 0; (i < list->len) && (daddr == -1); i++) { + for (j = 0; (j < phones) && (daddr == -1); j++) { + if (strncmp(dev[i].info, phone[j], INFO_LEN) == 0) { + daddr = dev[i].daddr; + dprintf("%s\t%x\n", dev[i].info, dev[i].daddr); + } + } + if (daddr == -1) { + dprintf("unknown: %s\t%x\n", dev[i].info, dev[i].daddr); + } + } + } + + if (daddr == -1) { + d_sleep(DISCOVERY_SLEEP); + } + + t2 = d_time(); + + } while ((t2 - t1 < DISCOVERY_TIMEOUT) && (daddr == -1)); + + free(buf); + close(fd); + + return daddr; +} + +int irda_open(void) +{ + struct sockaddr_irda peer; + int fd = -1, daddr; + + daddr = irda_discover_device(); /* discover the devices */ + + if (daddr != -1) { + fd = socket(AF_IRDA, SOCK_STREAM, 0); /* Create socket */ + peer.sir_family = AF_IRDA; + peer.sir_lsap_sel = LSAP_ANY; + peer.sir_addr = daddr; + strcpy(peer.sir_name, "Nokia:PhoNet"); + + if (connect(fd, (struct sockaddr *)&peer, sizeof(peer))) { /* Connect to service "Nokia:PhoNet" */ + perror("connect"); + close(fd); + fd = -1; +/* } else { FIXME: It does not work in most cases. Why? Or why it should work? + recv(fd, NULL, 0, 0); call recv first to make select work correctly */ + } + } + + return fd; +} + +int irda_close(int fd) +{ + shutdown(fd, 0); + return close(fd); +} + +int irda_write(int __fd, __const __ptr_t __bytes, int __size) +{ + return (send(__fd, __bytes, __size, 0)); +} + +int irda_read(int __fd, __ptr_t __bytes, int __size) +{ + return (recv(__fd, __bytes, __size, 0)); +} + +int irda_select(int fd, struct timeval *timeout) +{ + fd_set readfds; + + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + + return (select(fd + 1, &readfds, NULL, NULL, timeout)); +} diff --git a/common/devices/unixserial.c b/common/devices/unixserial.c new file mode 100644 index 0000000..5186465 --- /dev/null +++ b/common/devices/unixserial.c @@ -0,0 +1,296 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:09 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.10 2001/11/14 10:46:12 pkot + Small cleanup with __unices__ + + Revision 1.9 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.8 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.7 2001/07/03 00:03:36 pkot + Small fixes to let gnokii compile and work under solaris (thanks to Artur Kubiak) + + Revision 1.6 2001/03/21 23:36:04 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.5 2001/03/19 23:43:46 pkot + Solaris/ *BSD '#if defined' cleanup + + Revision 1.4 2001/03/13 01:21:38 pkot + *BSD updates (Bert Driehuis) + + Revision 1.3 2001/03/06 22:27:46 pkot + Misc docs and Makefiles updates and cleanups + + Revision 1.2 2001/02/21 19:57:05 chris + More fiddling with the directory layout + +*/ + +#include "misc.h" + +/* Do not compile this file under Win32 systems. */ + +#ifndef WIN32 + +#include +#include +#include +#include + +#include +#include "devices/unixserial.h" + +#ifdef HAVE_SYS_IOCTL_COMPAT_H + #include +#endif + +#ifdef HAVE_SYS_SELECT_H +#include +#endif + +/* If the target operating system does not have cfsetspeed, we can emulate + it. */ + +#ifndef HAVE_CFSETSPEED + #if defined(HAVE_CFSETISPEED) && defined(HAVE_CFSETOSPEED) + #define cfsetspeed(t, speed) \ + (cfsetispeed(t, speed) || cfsetospeed(t, speed)) + #else + static int cfsetspeed(struct termios *t, int speed) { + #ifdef HAVE_TERMIOS_CSPEED + t->c_ispeed = speed; + t->c_ospeed = speed; + #else + t->c_cflag |= speed; + #endif + return 0; + } + #endif +#endif + +#ifndef O_NONBLOCK + #define O_NONBLOCK 0 +#endif + +/* Structure to backup the setting of the terminal. */ + +struct termios serial_termios; + +/* Open the serial port and store the settings. */ + +int serial_open(__const char *__file, int __oflag) { + + int __fd; + int retcode; + + __fd = open(__file, __oflag); + if (__fd == -1) { + perror("Gnokii serial_open: open"); + return (-1); + } + + retcode=tcgetattr(__fd, &serial_termios); + if(retcode==-1) { + perror("Gnokii serial_open:tcgetattr"); + /* Don't call serial_close since serial_termios is not valid */ + close(__fd); + return(-1); + } + + return __fd; +} + +/* Close the serial port and restore old settings. */ + +int serial_close(int __fd) { + + if (__fd >= 0) + tcsetattr(__fd, TCSANOW, &serial_termios); + + return (close(__fd)); +} + +/* Open a device with standard options. */ + +int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake) { + + int fd; + int retcode; + struct termios tp; + + /* Open device */ + + fd = serial_open(__file, O_RDWR | O_NOCTTY | O_NONBLOCK); + + if (fd < 0) + return fd; + + /* Allow process/thread to receive SIGIO */ + +#if !(__unices__) + retcode = fcntl(fd, F_SETOWN, getpid()); + if (retcode == -1){ + perror("Gnokii serial_opendevice: fnctl(F_SETOWN)"); + serial_close(fd); + return(-1); + } +#endif + + /* Make filedescriptor asynchronous. */ + + if (__with_async) { + retcode=fcntl(fd, F_SETFL, FASYNC); + if (retcode == -1){ + perror("Gnokii serial_opendevice: fnctl(F_SETFL)"); + serial_close(fd); + return(-1); + } + } + + /* Initialise the port settings */ + + memcpy(&tp, &serial_termios, sizeof(struct termios)); + + /* Set port settings for canonical input processing */ + + tp.c_cflag = B0 | CS8 | CLOCAL | CREAD; + if (__with_odd_parity) { + tp.c_cflag |= (PARENB | PARODD); + tp.c_iflag = 0; + } + else + tp.c_iflag = IGNPAR; + if (__with_hw_handshake) + tp.c_cflag |= CRTSCTS; + else + tp.c_cflag &= ~CRTSCTS; + + tp.c_oflag = 0; + tp.c_lflag = 0; + tp.c_cc[VMIN] = 1; + tp.c_cc[VTIME] = 0; + + retcode=tcflush(fd, TCIFLUSH); + if (retcode == -1) { + perror("Gnokii serial_opendevice: tcflush"); + serial_close(fd); + return(-1); + } + + retcode=tcsetattr(fd, TCSANOW, &tp); + if (retcode == -1){ + perror("Gnokii serial_opendevice: tcsetattr"); + serial_close(fd); + return(-1); + } + + return fd; +} + +/* Set the DTR and RTS bit of the serial device. */ + +void serial_setdtrrts(int __fd, int __dtr, int __rts) { + + unsigned int flags; + + flags = TIOCM_DTR; + + if (__dtr) + ioctl(__fd, TIOCMBIS, &flags); + else + ioctl(__fd, TIOCMBIC, &flags); + + flags = TIOCM_RTS; + + if (__rts) + ioctl(__fd, TIOCMBIS, &flags); + else + ioctl(__fd, TIOCMBIC, &flags); +} + + +int serial_select(int fd, struct timeval *timeout) { + + fd_set readfds; + + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + + return (select(fd + 1, &readfds, NULL, NULL, timeout)); + +} + + +/* Change the speed of the serial device. */ + +void serial_changespeed(int __fd, int __speed) { + +#ifndef SGTTY + struct termios t; +#else + struct sgttyb t; +#endif + + int speed=B9600; + + switch (__speed) { + case 9600: speed = B9600; break; + case 19200: speed = B19200; break; + case 38400: speed = B38400; break; + case 57600: speed = B57600; break; + case 115200: speed = B115200; break; + } + +#ifndef SGTTY + tcgetattr(__fd, &t); + + // This is not needed! We set up the speed via cfsetspeed + // t.c_cflag &= ~CBAUD; + // t.c_cflag |= speed; + if (cfsetspeed(&t, speed) == -1) + dprintf(_("Serial port speed setting failed\n")); + + tcsetattr(__fd, TCSADRAIN, &t); +#else + ioctl(__fd, TIOCGETP, &t); + + t.sg_ispeed = speed; + t.sg_ospeed = speed; + + ioctl(__fd, TIOCSETN, &t); +#endif +} + +/* Read from serial device. */ + +size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes) { + + return (read(__fd, __buf, __nbytes)); +} + +/* Write to serial device. */ + +size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n) { + + return (write(__fd, __buf, __n)); +} + +#endif /* WIN32 */ diff --git a/common/fbus-6110-auth.c b/common/fbus-6110-auth.c new file mode 100644 index 0000000..4d0c715 --- /dev/null +++ b/common/fbus-6110-auth.c @@ -0,0 +1,132 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides Nokia authentication protocol. + + This code is written specially for gnokii project by Odinokov Serge. + If you have some special requests for Serge just write him to + apskaita@post.omnitel.net or serge@takas.lt + + Reimplemented in C by Pavel Janík ml. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:58 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#include "fbus-6110-auth.h" + +/* Nokia authentication protocol is used in the communication between Nokia + mobile phones (e.g. Nokia 6110) and Nokia Cellular Data Suite software, + commercially sold by Nokia Corp. + + The authentication scheme is based on the token send by the phone to the + software. The software does it's magic (see the function + FB61_GetNokiaAuth()) and returns the result back to the phone. If the + result is correct the phone responds with the message "Accessory + connected!" displayed on the LCD. Otherwise it will display "Accessory not + supported" and some functions will not be available for use. + + The specification of the protocol is not publicly available, no comment. */ + +void FB61_GetNokiaAuth(unsigned char *Imei, unsigned char *MagicBytes, unsigned char *MagicResponse) +{ + + int i, j, CRC=0; + + /* This is our temporary working area. */ + + unsigned char Temp[16]; + + /* Here we put FAC (Final Assembly Code) and serial number into our area. */ + + Temp[0] = Imei[6]; + Temp[1] = Imei[7]; + Temp[2] = Imei[8]; + Temp[3] = Imei[9]; + Temp[4] = Imei[10]; + Temp[5] = Imei[11]; + Temp[6] = Imei[12]; + Temp[7] = Imei[13]; + + /* And now the TAC (Type Approval Code). */ + + Temp[8] = Imei[2]; + Temp[9] = Imei[3]; + Temp[10] = Imei[4]; + Temp[11] = Imei[5]; + + /* And now we pack magic bytes from the phone. */ + + Temp[12] = MagicBytes[0]; + Temp[13] = MagicBytes[1]; + Temp[14] = MagicBytes[2]; + Temp[15] = MagicBytes[3]; + + for (i=0; i<=11; i++) + if (Temp[i + 1]& 1) + Temp[i]<<=1; + + switch (Temp[15] & 0x03) { + + case 1: + case 2: + j = Temp[13] & 0x07; + + for (i=0; i<=3; i++) + Temp[i+j] ^= Temp[i+12]; + + break; + + default: + j = Temp[14] & 0x07; + + for (i=0; i<=3; i++) + Temp[i + j] |= Temp[i + 12]; + } + + for (i=0; i<=15; i++) + CRC ^= Temp[i]; + + for (i=0; i<=15; i++) { + + switch (Temp[15 - i] & 0x06) { + + case 0: + j = Temp[i] | CRC; + break; + + case 2: + case 4: + j = Temp[i] ^ CRC; + break; + + case 6: + j = Temp[i] & CRC; + break; + } + + if (j == CRC) + j = 0x2c; + + if (Temp[i] == 0) + j = 0; + + MagicResponse[i] = j; + + } +} diff --git a/common/fbus-6110-ringtones.c b/common/fbus-6110-ringtones.c new file mode 100644 index 0000000..039fab5 --- /dev/null +++ b/common/fbus-6110-ringtones.c @@ -0,0 +1,571 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides support for ringtones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:59 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.13 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#include "fbus-6110-ringtones.h" + +/* Beats-per-Minute Encoding */ + +int BeatsPerMinute[] = { + 25, + 28, + 31, + 35, + 40, + 45, + 50, + 56, + 63, + 70, + 80, + 90, + 100, + 112, + 125, + 140, + 160, + 180, + 200, + 225, + 250, + 285, + 320, + 355, + 400, + 450, + 500, + 565, + 635, + 715, + 800, + 900 +}; + +int FB61_OctetAlign(unsigned char *Dest, int CurrentBit) +{ + int i=0; + + while((CurrentBit+i)%8) { + ClearBit(Dest, CurrentBit+i); + i++; + } + + return CurrentBit+i; +} + +int FB61_OctetAlignNumber(int CurrentBit) +{ + int i=0; + + while((CurrentBit+i)%8) { + i++; + } + + return CurrentBit+i; +} + +int FB61_BitPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits) +{ + + int i; + + for (i=0; i is always + octet-aligned. */ + StartBit=FB61_OctetAlign(package, StartBit); + + StartBit=FB61_BitPackByte(package, StartBit, Sound, 7); + StartBit=FB61_BitPackByte(package, StartBit, BasicSongType, 3); + + /* Packing the name of the tune. */ + StartBit=FB61_BitPackByte(package, StartBit, strlen(ringtone->name)<<4, 4); + StartBit=FB61_BitPack(package, StartBit, ringtone->name, 8*strlen(ringtone->name)); + + /* Info about song pattern */ + StartBit=FB61_BitPackByte(package, StartBit, 0x01, 8); /* One song pattern */ + StartBit=FB61_BitPackByte(package, StartBit, PatternHeaderId, 3); + StartBit=FB61_BitPackByte(package, StartBit, A_part, 2); + StartBit=FB61_BitPackByte(package, StartBit, 0, 4); /* No loop value */ + + /* Info, how long is contents for SMS */ + HowLong=30+8*strlen(ringtone->name)+17+8+8+13; + + /* Calculate the number of instructions in the tune. + Each Note contains Note and (sometimes) Scale. + Default Tempo and Style are instructions too. */ + HowMany=2; /* Default Tempo and Style */ + + for(i=0; iNrNotes; i++) { + + /* PC Composer 2.0.010 doesn't like, when we start ringtone from pause: + it displays that the format is invalid and + hangs, when you move mouse over place, where pause is */ + if (FB61_GetNote(ringtone->notes[i].note)==Note_Pause && oldscale==10) { + StartNote++; + } else { + + /* we don't write Scale info before "Pause" note - it saves space */ + if (FB61_GetNote(ringtone->notes[i].note)!=Note_Pause && + oldscale!=(newscale=FB61_GetScale(ringtone->notes[i].note))) { + + /* We calculate, if we have space to add next scale instruction */ + if (((HowLong+5)/8)<=(*maxlength-1)) { + oldscale=newscale; + HowMany++; + HowLong+=5; + } else { + break; + } + } + + /* We calculate, if we have space to add next note instruction */ + if (((HowLong+12)/8)<=(*maxlength-1)) { + HowMany++; + EndNote++; + HowLong+=12; + } else { + break; + } + } + + /* If we are sure, we pack it for SMS or setting to phone, not for OTT file */ + if (*maxlength<1000) { + /* Pc Composer gives this as the phone limitation */ + if ((EndNote-StartNote)==FB61_MAX_RINGTONE_NOTES-1) break; + } + } + + StartBit=FB61_BitPackByte(package, StartBit, HowMany, 8); + + /* Style */ + StartBit=FB61_BitPackByte(package, StartBit, StyleInstructionId, 3); + StartBit=FB61_BitPackByte(package, StartBit, ContinuousStyle, 2); + + /* Beats per minute/tempo of the tune */ + StartBit=FB61_BitPackByte(package, StartBit, TempoInstructionId, 3); + StartBit=FB61_BitPackByte(package, StartBit, FB61_GetTempo(ringtone->tempo), 5); + + /* Default scale */ + oldscale=10; + + /* Notes packing */ + for(i=StartNote; i<(EndNote+StartNote); i++) { + + /* we don't write Scale info before "Pause" note - it saves place */ + if (FB61_GetNote(ringtone->notes[i].note)!=Note_Pause && + oldscale!=(newscale=FB61_GetScale(ringtone->notes[i].note))) { + oldscale=newscale; + StartBit=FB61_BitPackByte(package, StartBit, ScaleInstructionId, 3); + StartBit=FB61_BitPackByte(package, StartBit, FB61_GetScale(ringtone->notes[i].note), 2); + } + + /* Note */ + StartBit=FB61_BitPackByte(package, StartBit, NoteInstructionId, 3); + StartBit=FB61_BitPackByte(package, StartBit, FB61_GetNote(ringtone->notes[i].note), 4); + StartBit=FB61_BitPackByte(package, StartBit, FB61_GetDuration(ringtone->notes[i].duration,&spec), 3); + StartBit=FB61_BitPackByte(package, StartBit, spec, 2); + } + + StartBit=FB61_OctetAlign(package, StartBit); + + StartBit=FB61_BitPackByte(package, StartBit, CommandEnd, 8); + +#ifdef DEBUG + if (StartBit!=FB61_OctetAlignNumber(HowLong)) + fprintf(stdout,_("Error in PackRingtone - StartBit different to HowLong %d - %d)\n"),StartBit,FB61_OctetAlignNumber(HowLong)); +#endif + + *maxlength=StartBit/8; + + return(EndNote+StartNote); +} + + +int FB61_BitUnPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits) +{ + int i; + + for (i=0; i is always + octet-aligned. */ + StartBit=FB61_OctetUnAlign(StartBit); + + StartBit=FB61_BitUnPackInt(package,StartBit,&l,7); +#ifdef DEBUG + if (l!=Sound) + fprintf(stdout,_("Not Sound\n")); +#endif + if (l!=Sound) return GE_SUBFORMATNOTSUPPORTED; + + StartBit=FB61_BitUnPackInt(package,StartBit,&l,3); +#ifdef DEBUG + if (l!=BasicSongType) + fprintf(stdout,_("Not BasicSongType\n")); +#endif + if (l!=BasicSongType) return GE_SUBFORMATNOTSUPPORTED; + + /* Getting length of the tune name */ + StartBit=FB61_BitUnPackInt(package,StartBit,&l,4); + l=l>>4; + + /* Unpacking the name of the tune. */ + StartBit=FB61_BitUnPack(package, StartBit, ringtone->name, 8*l); + ringtone->name[l]=0; + + StartBit=FB61_BitUnPackInt(package,StartBit,&l,8); + if (l!=1) return GE_SUBFORMATNOTSUPPORTED; //we support only one song pattern + + StartBit=FB61_BitUnPackInt(package,StartBit,&l,3); +#ifdef DEBUG + if (l!=PatternHeaderId) + fprintf(stdout,_("Not PatternHeaderId\n")); +#endif + if (l!=PatternHeaderId) return GE_SUBFORMATNOTSUPPORTED; + + StartBit+=2; //Pattern ID - we ignore it + + StartBit=FB61_BitUnPackInt(package,StartBit,&l,4); + + HowMany=0; + StartBit=FB61_BitUnPackInt(package, StartBit, &HowMany, 8); + + scale=0; + ringtone->NrNotes=0; + + for (i=0;i>3; + break; + case TempoInstructionId: + StartBit=FB61_BitUnPackInt(package,StartBit,&l,5); l=l>>3; + ringtone->tempo=BeatsPerMinute[l]; + break; + case ScaleInstructionId: + StartBit=FB61_BitUnPackInt(package,StartBit,&scale,2); + scale=scale>>6; + break; + case NoteInstructionId: + StartBit=FB61_BitUnPackInt(package,StartBit,&l,4); + + switch (l) { + case Note_C :ringtone->notes[ringtone->NrNotes].note=0;break; + case Note_Cis:ringtone->notes[ringtone->NrNotes].note=1;break; + case Note_D :ringtone->notes[ringtone->NrNotes].note=2;break; + case Note_Dis:ringtone->notes[ringtone->NrNotes].note=3;break; + case Note_E :ringtone->notes[ringtone->NrNotes].note=4;break; + case Note_F :ringtone->notes[ringtone->NrNotes].note=6;break; + case Note_Fis:ringtone->notes[ringtone->NrNotes].note=7;break; + case Note_G :ringtone->notes[ringtone->NrNotes].note=8;break; + case Note_Gis:ringtone->notes[ringtone->NrNotes].note=9;break; + case Note_A :ringtone->notes[ringtone->NrNotes].note=10;break; + case Note_Ais:ringtone->notes[ringtone->NrNotes].note=11;break; + case Note_H :ringtone->notes[ringtone->NrNotes].note=12;break; + default :ringtone->notes[ringtone->NrNotes].note=255;break; //Pause ? + } + + if (ringtone->notes[ringtone->NrNotes].note!=255) + ringtone->notes[ringtone->NrNotes].note=ringtone->notes[ringtone->NrNotes].note+scale*14; + + StartBit=FB61_BitUnPackInt(package,StartBit,&duration,3); + + StartBit=FB61_BitUnPackInt(package,StartBit,&spec,2); + + if (duration==Duration_Full && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=128*3/2; + if (duration==Duration_Full && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=128*2/3; + if (duration==Duration_Full && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=128; + if (duration==Duration_1_2 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=64*3/2; + if (duration==Duration_1_2 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=64*2/3; + if (duration==Duration_1_2 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=64; + if (duration==Duration_1_4 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=32*3/2; + if (duration==Duration_1_4 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=32*2/3; + if (duration==Duration_1_4 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=32; + if (duration==Duration_1_8 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=16*3/2; + if (duration==Duration_1_8 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=16*2/3; + if (duration==Duration_1_8 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=16; + if (duration==Duration_1_16 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=8*3/2; + if (duration==Duration_1_16 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=8*2/3; + if (duration==Duration_1_16 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=8; + if (duration==Duration_1_32 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=4*3/2; + if (duration==Duration_1_32 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=4*2/3; + if (duration==Duration_1_32 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=4; + + if (ringtone->NrNotes==MAX_RINGTONE_NOTES) break; + + ringtone->NrNotes++; + break; + default: +#ifdef DEBUG + fprintf(stdout,_("Unsupported block\n")); +#endif + return GE_SUBFORMATNOTSUPPORTED; + } + } + + return GE_NONE; +} + diff --git a/common/fbus-6110.c b/common/fbus-6110.c new file mode 100644 index 0000000..0eacb4a --- /dev/null +++ b/common/fbus-6110.c @@ -0,0 +1,4102 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions on the 6110 and similar + phones. See README for more details on supported mobile phones. + + The various routines are called FB61 (whatever) as a concatenation of FBUS + and 6110. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:03 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.136 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.135 2001/08/09 12:34:33 pkot + 3330 and 6250 support - I have no idea if it does work (mygnokii) + + Revision 1.134 2001/06/10 11:24:57 machek + Kill "slash star" inside comment. + + Revision 1.133 2001/03/19 23:43:46 pkot + Solaris/ *BSD '#if defined' cleanup + + Revision 1.132 2001/03/13 01:23:17 pkot + Windows updates (Manfred Jonsson) + + Revision 1.131 2001/03/13 01:21:38 pkot + *BSD updates (Bert Driehuis) + + Revision 1.130 2001/02/28 21:30:52 machek + Return data in GBF_Arbitrary if we can't handle units requested. + + Revision 1.129 2001/02/21 19:56:55 chris + More fiddling with the directory layout + + Revision 1.128 2001/02/17 22:40:48 chris + ATA support + + Revision 1.127 2001/02/06 21:15:34 chris + Preliminary irda support for 7110 etc. Not well tested! + + Revision 1.126 2001/02/06 14:35:55 pkot + Few more cleanups on authentication + + Revision 1.125 2001/02/03 23:56:12 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + Revision 1.124 2001/02/01 15:17:27 pkot + Fixed --identify and added Manfred's manufacturer patch + + Revision 1.123 2001/01/31 12:49:00 pkot + Many cleanups in fbus-6110 code. + 3210/3310 really work now. + + Revision 1.122 2001/01/23 15:32:35 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.121 2001/01/15 17:00:45 pkot + Initial keypress sequence support. Disable compilation warning + + Revision 1.120 2001/01/14 22:46:56 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + + Revision 1.119 2001/01/10 16:32:16 pkot + Documentation updates. + FreeBSD fix for 3810 code. + Added possibility for deleting SMS just after reading it in gnokii. + 2110 code updates. + Many cleanups. + + Revision 1.118 2001/01/08 15:11:36 pkot + Documentation updates. + Fixed some bugs and removed FIXMEs. + We need to move some stuff from configure.in to aclocal.m4 + + Revision 1.117 2000/12/21 15:13:46 pkot + Fixed functions converting ascii to and from PDU + + Revision 1.116 2000/12/19 16:27:16 pkot + Added 'static' word to variable declarations in common/fbus-6110.c and Makefile fix. (thanks to Pavel Machek) + +*/ + +/* "Turn on" prototypes in fbus-6110.h */ + +#define __fbus_6110_c + +/* System header files */ + +#include +#include +#include + +#ifdef WIN32 + +#include +#include "win32/winserial.h" + +#undef IN +#undef OUT + +#define WRITEPHONE(a, b, c) WriteCommBlock(b, c) +#define sleep(x) Sleep((x) * 1000) +#define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +extern HANDLE hPhone; + +#else + +#define WRITEPHONE(a, b, c) device_write(b, c) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "device.h" +#include "devices/unixserial.h" + +#endif + +/* Various header file */ + +#include "config.h" +#include "misc.h" +#include "gsm-common.h" +#include "fbus-6110.h" +#include "fbus-6110-auth.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "phones/generic.h" +#include "phones/nokia.h" + +/* Global variables used by code in gsm-api.c to expose the functions + supported by this model of phone. */ + +bool FB61_LinkOK; + +#if __unices__ +/* fd opened in device.c */ +extern int device_portfd; +#endif + +#ifdef WIN32 + +void FB61_InitializeLink(); + +#endif + +/* Here we initialise model specific functions. */ + +GSM_Functions FB61_Functions = { + FB61_Initialise, + FB61_Terminate, + FB61_GetMemoryLocation, + FB61_WritePhonebookLocation, + FB61_GetSpeedDial, + FB61_SetSpeedDial, + FB61_GetMemoryStatus, + FB61_GetSMSStatus, + FB61_GetSMSCenter, + FB61_SetSMSCenter, + FB61_GetSMSMessage, + FB61_DeleteSMSMessage, + FB61_SendSMSMessage, + FB61_SaveSMSMessage, + FB61_GetRFLevel, + FB61_GetBatteryLevel, + FB61_GetPowerSource, + FB61_GetDisplayStatus, + FB61_EnterSecurityCode, + FB61_GetSecurityCodeStatus, + FB61_GetIMEI, + FB61_GetRevision, + FB61_GetModel, + PNOK_GetManufacturer, + FB61_GetDateTime, + FB61_SetDateTime, + FB61_GetAlarm, + FB61_SetAlarm, + FB61_DialVoice, + FB61_DialData, + FB61_GetIncomingCallNr, + FB61_GetNetworkInfo, + FB61_GetCalendarNote, + FB61_WriteCalendarNote, + FB61_DeleteCalendarNote, + FB61_NetMonitor, + FB61_SendDTMF, + FB61_GetBitmap, + FB61_SetBitmap, + FB61_SetRingTone, + FB61_SendRingTone, + FB61_Reset, + FB61_GetProfile, + FB61_SetProfile, + FB61_SendRLPFrame, + FB61_CancelCall, + FB61_EnableDisplayOutput, + FB61_DisableDisplayOutput, + FB61_EnableCellBroadcast, + FB61_DisableCellBroadcast, + FB61_ReadCellBroadcast, + UNIMPLEMENTED, + UNIMPLEMENTED, + FB61_AnswerCall +}; + +/* Mobile phone information */ + +GSM_Information FB61_Information = { + "6110|6130|6150|6190|5110|5130|5190|3210|3310|3330", /* Supported models */ + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_DateTime, /* Have date/time support */ + GDT_TimeOnly, /* Alarm supports time only */ + 1, /* Only one alarm available */ + 48, 84, /* Startup logo size */ + 14, 72, /* Op logo size */ + 14, 72 /* Caller logo size */ +}; + +unsigned char GSM_Default_Alphabet[] = { + + /* ETSI GSM 03.38, version 6.0.1, section 6.2.1; Default alphabet */ + /* Characters in hex position 10, [12 to 1a] and 24 are not present on + latin1 charset, so we cannot reproduce on the screen, however they are + greek symbol not present even on my Nokia */ + + '@', 0xa3, '$', 0xa5, 0xe8, 0xe9, 0xf9, 0xec, + 0xf2, 0xc7, '\n', 0xd8, 0xf8, '\r', 0xc5, 0xe5, + '?', '_', '?', '?', '?', '?', '?', '?', + '?', '?', '?', '?', 0xc6, 0xe6, 0xdf, 0xc9, + ' ', '!', '\"', '#', 0xa4, '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + 0xa1, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0xc4, 0xd6, 0xd1, 0xdc, 0xa7, + 0xbf, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0xe4, 0xf6, 0xf1, 0xfc, 0xe0 +}; + +const char *FB61_MemoryType_String [] = { + "", /* 0x00 */ + "MT", /* 0x01 */ + "ME", /* 0x02 */ + "SM", /* 0x03 */ + "FD", /* 0x04 */ + "ON", /* 0x05 */ + "EN", /* 0x06 */ + "DC", /* 0x07 */ + "RC", /* 0x08 */ + "MC", /* 0x09 */ +}; + +/* Local variables */ + + +char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; + +/* This is the connection type used in gnokii. */ + +GSM_ConnectionType CurrentConnectionType; + +int BufferCount; + +u8 MessageBuffer[FB61_MAX_RECEIVE_LENGTH * 6]; + +u16 MessageLength; +u8 MessageType, MessageDestination, MessageSource, MessageUnknown; +u8 MessagesSent=0, AcksReceived=0; + +/* Magic bytes from the phone. */ + +unsigned char MagicBytes[4] = { 0x00, 0x00, 0x00, 0x00 }; +GSM_Error CurrentMagicError = GE_BUSY; + +enum FB61_RX_States RX_State; +bool RX_Multiple = false; + +u8 RequestSequenceNumber = 0x00; +bool RequestTerminate; +bool DisableKeepalive = false; +int InitLength; +u8 CallSequenceNumber; /* Used to disconnect the call */ + +#ifndef WIN32 + +pthread_t Thread; +# if __unices__ +pthread_t selThread; +# endif + +#endif + +/* Local variables used by get/set phonebook entry code. Buffer is used as a + source or destination for phonebook data and other functions... Error is + set to GE_NONE by calling function, set to GE_COMPLETE or an error code by + handler routines as appropriate. */ + +static GSM_PhonebookEntry *CurrentPhonebookEntry; +static GSM_Error CurrentPhonebookError; + +static GSM_SpeedDial *CurrentSpeedDialEntry; +static GSM_Error CurrentSpeedDialError; + +static GSM_SMSMessage *CurrentSMSMessage; +static GSM_Error CurrentSMSMessageError; +static int CurrentSMSPointer; + +static GSM_MemoryStatus *CurrentMemoryStatus; +static GSM_Error CurrentMemoryStatusError; + +static GSM_NetworkInfo *CurrentNetworkInfo = NULL; +static GSM_Error CurrentNetworkInfoError; + +static GSM_SMSStatus *CurrentSMSStatus; +static GSM_Error CurrentSMSStatusError; + +static GSM_MessageCenter *CurrentMessageCenter; +static GSM_Error CurrentMessageCenterError; + +static int *CurrentSecurityCodeStatus; +static GSM_Error CurrentSecurityCodeError; + +static GSM_DateTime *CurrentDateTime; +static GSM_Error CurrentDateTimeError; + +static GSM_DateTime *CurrentAlarm; +static GSM_Error CurrentAlarmError; + +static GSM_CalendarNote *CurrentCalendarNote; +static GSM_Error CurrentCalendarNoteError; + +static GSM_Error CurrentSetDateTimeError; +static GSM_Error CurrentSetAlarmError; + +static int CurrentRFLevel, + CurrentBatteryLevel, + CurrentPowerSource; + +static int DisplayStatus; +static GSM_Error DisplayStatusError; + +static char *CurrentNetmonitor; +static GSM_Error CurrentNetmonitorError; + +static GSM_Bitmap *GetBitmap=NULL; +static GSM_Error GetBitmapError; + +static GSM_Error SetBitmapError; + +static GSM_Profile *CurrentProfile; +static GSM_Error CurrentProfileError; + +static GSM_Error CurrentDisplayOutputError; + +static GSM_CBMessage *CurrentCBMessage; +static GSM_Error CurrentCBError; + +static GSM_Error CurrentPhoneInfoError; + +static unsigned char IMEI[FB61_MAX_IMEI_LENGTH]; +static unsigned char Revision[FB61_MAX_REVISION_LENGTH]; +static unsigned char Model[FB61_MAX_MODEL_LENGTH]; + +static char CurrentIncomingCall[20] = " "; + +/* Pointer to callback function in user code to be called when RLP frames + are received. */ + +void (*RLP_RXCallback)(RLP_F96Frame *frame); + +/* Pointer to a callback function used to return changes to a calls status */ +/* This saves unreliable polling */ +void (*CallPassup)(char c); + +#ifdef WIN32 +/* called repeatedly from a separate thread */ +void FB61_KeepAliveProc() +{ + if (!DisableKeepalive) + FB61_TX_SendStatusRequest(); + Sleep(2000); +} +#endif + +/* Initialise variables and state machine. */ + +GSM_Error FB61_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + int rtn; + + RequestTerminate = false; + FB61_LinkOK = false; + RLP_RXCallback = rlp_callback; + CallPassup = NULL; + + strncpy(PortDevice, port_device, GSM_MAX_DEVICE_NAME_LENGTH); + + InitLength = atoi(initlength); + if (!strcmp(initlength, "default") || (InitLength == 0)) { + InitLength = 250; /* This is the usual value, lower may work. */ + } + + CurrentConnectionType = connection; + + /* Create and start main thread. */ + +#ifdef WIN32 + DisableKeepalive = true; + rtn = ! OpenConnection(PortDevice, FB61_RX_StateMachine, FB61_KeepAliveProc); + if (rtn == 0) { + FB61_InitializeLink(); /* makes more sense to do this in 'this' thread */ + DisableKeepalive = false; + } +#else + rtn = pthread_create(&Thread, NULL, (void *)FB61_ThreadLoop, (void *)NULL); +#endif + + if (rtn != 0) + return (GE_INTERNALERROR); + + return (GE_NONE); +} + +#if __unices__ +/* thread for handling incoming data */ +void FB61_SelectLoop() +{ + int err; + fd_set readfds; + struct timeval timeout; + + FD_ZERO(&readfds); + FD_SET(device_portfd, &readfds); + /* set timeout to 15 seconds */ + timeout.tv_sec=15; + timeout.tv_usec=0; + while (!RequestTerminate) { + err = select(device_portfd + 1, &readfds, NULL, NULL, &timeout); + /* call singal handler to process incoming data */ + if ( err > 0 ) FB61_SigHandler(0); + else if (err == -1) perror("Error in SelectLoop"); + } +} +#endif + + +/* This function send the status request to the phone. */ + +GSM_Error FB61_TX_SendStatusRequest(void) +{ + /* The status request is of the type 0x04. It's subtype is 0x01. If you have + another subtypes and it's meaning - just inform Pavel, please. */ + unsigned char request[] = {FB61_FRAME_HEADER, 0x01}; + FB61_TX_SendMessage(4, 0x04, request); + return (GE_NONE); +} + +/* This function translates GMT_MemoryType to FB61_MEMORY_xx */ + +int FB61_GetMemoryType(GSM_MemoryType memory_type) +{ + int result; + switch (memory_type) { + case GMT_MT: result = FB61_MEMORY_MT; break; + case GMT_ME: result = FB61_MEMORY_ME; break; + case GMT_SM: result = FB61_MEMORY_SM; break; + case GMT_FD: result = FB61_MEMORY_FD; break; + case GMT_ON: result = FB61_MEMORY_ON; break; + case GMT_EN: result = FB61_MEMORY_EN; break; + case GMT_DC: result = FB61_MEMORY_DC; break; + case GMT_RC: result = FB61_MEMORY_RC; break; + case GMT_MC: result = FB61_MEMORY_MC; break; + default: result = FB61_MEMORY_XX; break; + } + return (result); +} + +/* This function is used to get storage status from the phone. It currently + supports two different memory areas - internal and SIM. */ + +static GSM_Error +wait_on(volatile GSM_Error *what, int timeout) +{ + *what = GE_BUSY; + while (timeout && (*what == GE_BUSY)) { + if (!--timeout) + return GE_TIMEOUT; + usleep(100000); + } + return *what; +} + +#define WAIT_ON(x, y) \ + { \ + GSM_Error res = wait_on(x, y); \ + if (res != GE_NONE) \ + return res; \ + } + +#define WAIT_ON1(x, y) \ + { \ + GSM_Error res = wait_on(x, y); \ + if (res != GE_NONE) \ + return; \ + } + +static GSM_Error FB61_GetPhoneInfo() +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x03, 0x00 }; + FB61_TX_SendMessage(5, 0xd1, req); + return (wait_on(&CurrentPhoneInfoError, 20)); +} + +GSM_Error FB61_AnswerCall(char s) +{ + unsigned char req0[] = { FB61_FRAME_HEADER, 0x42,0x05,0x01,0x07, 0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80}; + unsigned char req[] = { FB61_FRAME_HEADER, 0x06, 0x00, 0x00}; + req[4]=s; + dprintf("Answering call %d\n\r",s); + FB61_TX_SendMessage(sizeof(req0), 0x01, req0); + sleep(1); + FB61_TX_SendMessage(sizeof(req), 0x01, req); + return (wait_on(&CurrentPhoneInfoError, 20)); +} + +GSM_Error FB61_GetMemoryStatus(GSM_MemoryStatus *Status) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x07 /* MemoryStatus request */, 0x00 /* MemoryType */ }; + CurrentMemoryStatus = Status; + req[4] = FB61_GetMemoryType(Status->MemoryType); + FB61_TX_SendMessage(5, 0x03, req); + return wait_on(&CurrentMemoryStatusError, 20); +} + +GSM_Error FB61_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x70 }; + CurrentNetworkInfo = NetworkInfo; + FB61_TX_SendMessage(4, 0x0a, req); + return wait_on(&CurrentNetworkInfoError, 20); +} + +GSM_Error FB61_EnableDisplayOutput(void) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x53, 0x01}; + FB61_TX_SendMessage(5, 0x0d, req); + return wait_on(&CurrentDisplayOutputError, 20); +} + +GSM_Error FB61_DisableDisplayOutput(void) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x53, 0x02}; + FB61_TX_SendMessage(5, 0x0d, req); + return wait_on(&CurrentDisplayOutputError, 20); +} + +GSM_Error FB61_GetProfile(GSM_Profile *Profile) +{ + int i; + /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */ + char model[64]; + unsigned char name_req[] = { FB61_FRAME_HEADER, 0x1a, 0x00}; + unsigned char feat_req[] = { FB61_FRAME_HEADER, 0x13, 0x01, 0x00, 0x00}; + + CurrentProfile = Profile; + + name_req[4] = Profile->Number; + feat_req[5] = Profile->Number; + FB61_TX_SendMessage(5, 0x05, name_req); + + WAIT_ON(&CurrentProfileError, 20); + + for (i = 0x00; i <= 0x09; i++) { + CurrentProfileError = GE_BUSY; + feat_req[6] = i; + FB61_TX_SendMessage(7, 0x05, feat_req); + WAIT_ON(&CurrentProfileError, 20); + } + + if (Profile->DefaultName > -1) + { + while (FB61_GetModel(model) != GE_NONE) + sleep(1); + + /*For N5110*/ + /*FIX ME: It should be set for N5130 and 3210 too*/ + if (!strcmp(model,"NSE-1")) { + switch (Profile->DefaultName) { + case 0x00: sprintf(Profile->Name, "Personal"); break; + case 0x01: sprintf(Profile->Name, "Car"); break; + case 0x02: sprintf(Profile->Name, "Headset"); break; + default: sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName); break; + } + } else { + switch (Profile->DefaultName) { + case 0x00: sprintf(Profile->Name, "General"); break; + case 0x01: sprintf(Profile->Name, "Silent"); break; + case 0x02: sprintf(Profile->Name, "Meeting"); break; + case 0x03: sprintf(Profile->Name, "Outdoor"); break; + case 0x04: sprintf(Profile->Name, "Pager"); break; + case 0x05: sprintf(Profile->Name, "Car"); break; + case 0x06: sprintf(Profile->Name, "Headset"); break; + default: sprintf(Profile->Name, "Unknown (%i)", Profile->DefaultName); break; + } + } + } + return (GE_NONE); +} + +GSM_Error FB61_SetProfile(GSM_Profile *Profile) +{ + int i; + unsigned char name_req[40] = { FB61_FRAME_HEADER, 0x1c, 0x01, 0x03, 0x00, 0x00, 0x00}; + unsigned char feat_req[] = { FB61_FRAME_HEADER, 0x10, 0x01, 0x00, 0x00, 0x00}; + + name_req[7] = Profile->Number; + name_req[8] = strlen(Profile->Name); + name_req[6] = name_req[8] + 2; + + for (i = 0; i < name_req[8]; i++) + name_req[9 + i] = Profile->Name[i]; + + FB61_TX_SendMessage(name_req[8] + 9, 0x05, name_req); + WAIT_ON(&CurrentProfileError, 30); + + feat_req[5] = Profile->Number; + for (i = 0x00; i <= 0x09; i++) { + feat_req[6] = i; + switch (feat_req[6]) { + case 0x00: feat_req[7] = Profile->KeypadTone; break; + case 0x01: feat_req[7] = Profile->Lights; break; + case 0x02: feat_req[7] = Profile->CallAlert; break; + case 0x03: feat_req[7] = Profile->Ringtone; break; + case 0x04: feat_req[7] = Profile->Volume; break; + case 0x05: feat_req[7] = Profile->MessageTone; break; + case 0x06: feat_req[7] = Profile->Vibration; break; + case 0x07: feat_req[7] = Profile->WarningTone; break; + case 0x08: feat_req[7] = Profile->CallerGroups; break; + case 0x09: feat_req[7] = Profile->AutomaticAnswer; break; + } + + FB61_TX_SendMessage(8, 0x05, feat_req); + WAIT_ON(&CurrentProfileError, 20); + } + + return (GE_NONE); +} + +bool FB61_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + u8 req[60] = { 0x00, 0xd9 }; + /* Discontinuos transmission (DTX). See section 5.6 of GSM 04.22 version 7.0.1. */ + + if (out_dtx) req[1] = 0x01; + memcpy(req + 2, (u8 *) frame, 32); + return (FB61_TX_SendFrame(32, 0xf0, req)); +} + + +GSM_Error FB61_GetCalendarNote(GSM_CalendarNote *CalendarNote) +{ + unsigned char req[5] = { FB61_FRAME_HEADER, 0x66, 0x00 }; + req[4] = CalendarNote->Location; + CurrentCalendarNote = CalendarNote; + CurrentCalendarNoteError = GE_BUSY; + FB61_TX_SendMessage(5, 0x13, req); + return wait_on(&CurrentCalendarNoteError, 20); +} + +GSM_Error FB61_WriteCalendarNote(GSM_CalendarNote *CalendarNote) +{ + unsigned char req[200] = { FB61_FRAME_HEADER, + 0x64, 0x01, 0x10, + 0x00, /* Length of the rest of the frame. */ + 0x00, /* The type of calendar note */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + int i, current; + + req[7] = CalendarNote->Type; + + req[8] = CalendarNote->Time.Year / 256; + req[9] = CalendarNote->Time.Year % 256; + req[10] = CalendarNote->Time.Month; + req[11] = CalendarNote->Time.Day; + req[12] = CalendarNote->Time.Hour; + req[13] = CalendarNote->Time.Minute; + req[14] = CalendarNote->Time.Timezone; + + if (CalendarNote->Alarm.Year) { + req[15] = CalendarNote->Alarm.Year / 256; + req[16] = CalendarNote->Alarm.Year % 256; + req[17] = CalendarNote->Alarm.Month; + req[18] = CalendarNote->Alarm.Day; + req[19] = CalendarNote->Alarm.Hour; + req[20] = CalendarNote->Alarm.Minute; + req[21] = CalendarNote->Alarm.Timezone; + } + + req[22] = strlen(CalendarNote->Text); + + current = 23; + + for (i=0; iText); i++) + req[current++] = CalendarNote->Text[i]; + + req[current++] = strlen(CalendarNote->Phone); + + for (i=0; iPhone); i++) + req[current++] = CalendarNote->Phone[i]; + + CurrentCalendarNote = CalendarNote; + CurrentCalendarNoteError = GE_BUSY; + + FB61_TX_SendMessage(current, 0x13, req); + return wait_on(&CurrentCalendarNoteError, 20); +} + +GSM_Error FB61_DeleteCalendarNote(GSM_CalendarNote *CalendarNote) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x68, 0x00 }; + req[4] = CalendarNote->Location; + CurrentCalendarNoteError = GE_BUSY; + FB61_TX_SendMessage(5, 0x13, req); + return wait_on(&CurrentCalendarNoteError, 20); +} + +/* Init ir for win32 is made in winserial.c */ +#ifndef WIN32 + +void FB61_InitIR(void) +{ + int i; + unsigned char init_char = FB61_SYNC_BYTE; + unsigned char end_init_char = FB61_IR_END_INIT_BYTE; + + for ( i = 0; i < 32; i++ ) + device_write(&init_char, 1); + + device_write(&end_init_char, 1); + usleep(100000); +} + +bool FB61_InitIR115200(void) +{ + int PortFD; + u8 connect_seq[] = {FB61_FRAME_HEADER, 0x0d, 0x00, 0x00, 0x02}; + + bool ret = true; + u8 nr_read = 0; + u8 in_buffer[255]; + struct timeval timeout; + fd_set ready; + int no_timeout = 0; + int i; + int done = 0; + + /* send the connection sequence to phone */ + FB61_TX_SendMessage(7, 0x02, connect_seq); + + /* Wait for 1 sec. */ + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + PortFD = device_getfd(); + + do { + FD_ZERO(&ready); + FD_SET(PortFD, &ready); + no_timeout = select(PortFD + 1, &ready, NULL, NULL, &timeout); + if ( FD_ISSET(PortFD, &ready) ) { + nr_read = read(PortFD, in_buffer, 1); + if ( nr_read >= 1 ) { + for (i = 0; i < nr_read; i++) { + if ( in_buffer[i] == FB61_IR_FRAME_ID ) { + done = 1; + ret = true; + break; + } + } + } else { + done = 1; + ret = false; + } + } + + if (!no_timeout) { + dprintf(_("Timeout in IR-mode\n")); + done = 1; + ret = false; + } + } while (!done); + + return (ret); +} + +/* This function is used to open the IR connection with the phone. */ + +bool FB61_OpenIR(void) +{ + int result; + bool ret = false; + u8 i = 0; + +#if __unices__ + int rtn; +#else + struct sigaction sig_io; + + /* Set up and install handler before enabling async IO on port. */ + + sig_io.sa_handler = FB61_SigHandler; + sig_io.sa_flags = 0; + sigaction (SIGIO, &sig_io, NULL); +#endif + + /* Open device. */ + + result = device_open(PortDevice, false, true, false, GCT_Infrared); + + if (!result) { + perror(_("Couldn't open FB61 infrared device")); + return false; + } + +#if __unices__ + /* create a thread to handle incoming data from mobile phone */ + rtn = pthread_create(&selThread, NULL, (void*)FB61_SelectLoop, (void*)NULL); + if (rtn != 0) return false; +#endif + + device_changespeed(9600); + FB61_InitIR(); + device_changespeed(115200); + ret = FB61_InitIR115200(); + if (!ret) { + for ( i = 0; i < 4 ; i++) { + usleep (500000); + device_changespeed(9600); + FB61_InitIR(); + device_changespeed(115200); + ret = FB61_InitIR115200(); + if (ret) break; + } + } + + return (ret); +} + +static void FB61_Authentication() +{ + unsigned char connect1[] = {FB61_FRAME_HEADER, 0x0d, 0x00, 0x00, 0x02}; + unsigned char connect2[] = {FB61_FRAME_HEADER, 0x20, 0x02}; + unsigned char connect3[] = {FB61_FRAME_HEADER, 0x0d, 0x01, 0x00, 0x02}; + unsigned char connect4[] = {FB61_FRAME_HEADER, 0x10}; + + unsigned char magic_connect[] = {FB61_FRAME_HEADER, + 0x12, + + /* The real magic goes here ... These bytes are filled in with the + external function FB61_GetNokiaAuth(). */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + /* NOKIA&GNOKII Accessory */ + + 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x26, 0x4e, 0x4f, 0x4b, 0x49, 0x41, 0x20, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x79, + + 0x00, 0x00, 0x00, 0x00}; + + usleep(100); FB61_GetPhoneInfo(); usleep(100); + + if (*Model && (GetPhoneModel(Model)->flags & PM_AUTHENTICATION)) { + FB61_TX_SendMessage(7, 0x02, connect1); + usleep(100); FB61_TX_SendMessage(5, 0x02, connect2); + usleep(100); FB61_TX_SendMessage(7, 0x02, connect3); + usleep(100); FB61_TX_SendMessage(4, 0x64, connect4); + + WAIT_ON1(&CurrentMagicError, 50); + + FB61_GetNokiaAuth(IMEI, MagicBytes, magic_connect+4); + + FB61_TX_SendMessage(45, 0x64, magic_connect); + } + + return; +} + +/* This is the main loop for the FB61 functions. When FB61_Initialise is + called a thread is created to run this loop. This loop is exited when the + application calls the FB61_Terminate function. */ +void FB61_ThreadLoop(void) +{ + unsigned char init_char = 0x55; + int count, idle_timer; + + CurrentPhonebookEntry = NULL; + + if ( CurrentConnectionType == GCT_Infrared ) { + dprintf(_("Starting IR mode...!\n")); + if (FB61_OpenIR() != true) { + FB61_LinkOK = false; + while (!RequestTerminate) + usleep (100000); + return; + } + + } else { /* CurrentConnectionType == GCT_Serial */ + + /* Try to open serial port, if we fail we sit here and don't proceed to the + main loop. */ + + if (FB61_OpenSerial() != true) { + FB61_LinkOK = false; + + /* Fail so sit here till calling code works out there is a problem. */ + + while (!RequestTerminate) + usleep (100000); + + return; + } + } + + /* Initialise link with phone or what have you */ + + /* Send init string to phone, this is a bunch of 0x55 characters. Timing is + empirical. */ + + for (count = 0; count < InitLength; count ++) { + usleep(100); + WRITEPHONE(PortFD, &init_char, 1); + } + + FB61_TX_SendStatusRequest(); + + FB61_Authentication(); + + /* FIXME: we should implement better support for ringtones and the utility + to set ringtones. */ + + // FB61_SendRingtoneRTTTL("/tmp/barbie.txt"); + + idle_timer = 0; + + /* Now enter main loop */ + + while (!RequestTerminate) { + if (idle_timer == 0) { + /* Dont send keepalive and status packets when doing other transactions. */ + if (!DisableKeepalive) FB61_TX_SendStatusRequest(); + idle_timer = 20; + } else + idle_timer--; + + usleep(100000); /* Avoid becoming a "busy" loop. */ + } +} +#endif /* WIN32 */ + +#ifdef WIN32 +void FB61_InitializeLink() +{ + int count; + DCB dcb; + + unsigned char init_char = 0x55; + /* Daxer */ + unsigned char end_init_char = 0xc1; + + /* Daxer Added for infared support */ + if ( CurrentConnectionType == GCT_Infrared ) { + dcb.DCBlength = sizeof(DCB); + + GetCommState(hPhone, &dcb); + dcb.BaudRate = CBR_9600; + SetCommState(hPhone, &dcb); + } + + /* Send init string to phone, this is a bunch of 0x55 characters. Timing is + empirical. */ + + for (count = 0; count < 32; count ++) { + usleep(100); + WRITEPHONE(PortFD, &init_char, 1); + } + + WRITEPHONE(PortFD, &end_init_char, 1); + + if ( CurrentConnectionType == GCT_Infrared ) { + dcb.BaudRate = CBR_115200; + SetCommState(hPhone, &dcb); + } + + FB61_TX_SendStatusRequest(); + + FB61_Authentication(); +} +#endif + +/* Applications should call FB61_Terminate to shut down the FB61 thread and + close the serial port. */ + +void FB61_Terminate(void) +{ + /* Request termination of thread */ + RequestTerminate = true; + +#ifndef WIN32 + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); + + /* Close serial port. */ + device_close(); + +#else + CloseConnection(); +#endif +} + +#define ByteMask ((1 << Bits) - 1) + +int UnpackEightBitsToSeven(int offset, int in_length, int out_length, + unsigned char *input, unsigned char *output) +{ + unsigned char *OUT = output; /* Current pointer to the output buffer */ + unsigned char *IN = input; /* Current pointer to the input buffer */ + unsigned char Rest = 0x00; + int Bits; + + Bits = offset ? offset : 7; + + while ((IN - input) < in_length) { + + *OUT = ((*IN & ByteMask) << (7 - Bits)) | Rest; + Rest = *IN >> Bits; + + /* If we don't start from 0th bit, we shouldn't go to the + next char. Under *OUT we have now 0 and under Rest - + _first_ part of the char. */ + if ((IN != input) || (Bits == 7)) OUT++; + IN++; + + if ((OUT - output) >= out_length) break; + + /* After reading 7 octets we have read 7 full characters but + we have 7 bits as well. This is the next character */ + if (Bits == 1) { + *OUT = Rest; + OUT++; + Bits = 7; + Rest = 0x00; + } else { + Bits--; + } + } + + return OUT - output; +} + +unsigned char GetAlphabetValue(unsigned char value) +{ + unsigned char i; + + if (value == '?') return 0x3f; + + for (i = 0 ; i < 128 ; i++) + if (GSM_Default_Alphabet[i] == value) + return i; + + return 0x3f; /* '?' */ +} + +int PackSevenBitsToEight(int offset, unsigned char *input, unsigned char *output) +{ + unsigned char *OUT = output; /* Current pointer to the output buffer */ + unsigned char *IN = input; /* Current pointer to the input buffer */ + int Bits; /* Number of bits directly copied to + the output buffer */ + Bits = (7 + offset) % 8; + + /* If we don't begin with 0th bit, we will write only a part of the + first octet */ + if (offset) { + *OUT = 0x00; + OUT++; + } + + while ((IN - input) < strlen(input)) { + unsigned char Byte = GetAlphabetValue(*IN); + + *OUT = Byte >> (7 - Bits); + /* If we don't write at 0th bit of the octet, we should write + a second part of the previous octet */ + if (Bits != 7) + *(OUT-1) |= (Byte & ((1 << (7-Bits)) - 1)) << (Bits+1); + + Bits--; + + if (Bits == -1) Bits = 7; + else OUT++; + + IN++; + } + return (OUT - output); +} + +GSM_Error FB61_GetRFLevel(GSM_RFUnits *units, float *level) +{ + /* FIXME - these values are from 3810 code, may be incorrect. Map from + values returned in status packet to the the values returned by the AT+CSQ + command. */ + float csq_map[5] = {0, 8, 16, 24, 31}; + int timeout = 10; + int rf_level; + + CurrentRFLevel = -1; + + FB61_TX_SendStatusRequest(); + + /* Wait for timeout or other error. */ + + while (timeout && (CurrentRFLevel == -1)) { + if (!--timeout) + return (GE_TIMEOUT); + usleep (100000); + } + + /* Make copy in case it changes. */ + rf_level = CurrentRFLevel; + + if (rf_level == -1) + return (GE_NOLINK); + + /* Now convert between the different units we support. */ + + /* Arbitrary units. */ + if (*units == GRF_Arbitrary) { + *level = rf_level; + return (GE_NONE); + } + + /* CSQ units. */ + if (*units == GRF_CSQ) { + + if (rf_level <= 4) + *level = csq_map[rf_level]; + else + *level = 99; /* Unknown/undefined */ + + return (GE_NONE); + } + + *units = GRF_Arbitrary; + *level = rf_level; + return (GE_NONE); +} + +GSM_Error FB61_GetBatteryLevel(GSM_BatteryUnits *units, float *level) +{ + int timeout = 10; + int batt_level; + + CurrentBatteryLevel = -1; + + FB61_TX_SendStatusRequest(); + + /* Wait for timeout or other error. */ + while (timeout && (CurrentBatteryLevel == -1)) { + if (!--timeout) + return (GE_TIMEOUT); + usleep (100000); + } + + /* Take copy in case it changes. */ + batt_level = CurrentBatteryLevel; + + if (batt_level != -1) { + /* Only units we handle at present are GBU_Arbitrary */ + *units = GBU_Arbitrary; + *level = batt_level; + return (GE_NONE); + } else return (GE_NOLINK); +} + +GSM_Error FB61_GetPowerSource(GSM_PowerSource *source) +{ + int timeout = 10; + CurrentPowerSource=-1; + + FB61_TX_SendStatusRequest(); + + /* Wait for timeout or other error. */ + while (timeout && (CurrentPowerSource == -1)) { + if (!--timeout) + return (GE_TIMEOUT); + usleep (100000); + } + + if (CurrentPowerSource != -1) { + *source = CurrentPowerSource; + return (GE_NONE); + } else return (GE_NOLINK); +} + +GSM_Error FB61_GetDisplayStatus(int *Status) +{ + unsigned char req[4]={ FB61_FRAME_HEADER, 0x51 }; + FB61_TX_SendMessage(4, 0x0d, req); + WAIT_ON(&DisplayStatusError, 10); + *Status = DisplayStatus; + return (GE_NONE); +} + +GSM_Error FB61_DialVoice(char *Number) +{ + unsigned char req[64] = {FB61_FRAME_HEADER, 0x01}; + unsigned char req_end[] = {0x05, 0x01, 0x01, 0x05, 0x81, 0x01, 0x00, 0x00, 0x01}; + int i = 0; + + req[4] = strlen(Number); + for(i = 0; i < strlen(Number) ; i++) + req[5+i] = Number[i]; + memcpy(req + 5 + strlen(Number), req_end, 10); + FB61_TX_SendMessage(13 + strlen(Number), 0x01, req); + + return(GE_NONE); +} + +/* Dial a data call - type specifies request to use: + type 0 should normally be used + type 1 should be used when calling a digital line - corresponds to ats35=0 + Maybe one day we'll know what they mean! +*/ + +GSM_Error FB61_DialData(char *Number, char type, void (* callpassup)(char c)) +{ + unsigned char req[100] = { FB61_FRAME_HEADER, 0x01 }; + unsigned char *req_end; + unsigned char req_end0[] = { 0x01, /* make a data call = type 0x01 */ + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00 }; + unsigned char req_end1[] = { 0x01, + 0x02,0x01,0x05,0x81,0x01,0x00,0x00,0x01,0x02,0x0a, + 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + 0x88,0x90,0x21,0x48,0x40,0xbb }; + unsigned char req2[] = { FB61_FRAME_HEADER, 0x42,0x05,0x01, + 0x07,0xa2,0xc8,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80,0x01,0x60 }; + unsigned char req3[] = { FB61_FRAME_HEADER, 0x42,0x05,0x01, + 0x07,0xa2,0x88,0x81,0x21,0x15,0x63,0xa8,0x00,0x00, + 0x07,0xa3,0xb8,0x81,0x20,0x15,0x63,0x80 }; + unsigned char req4[] = { FB61_FRAME_HEADER, 0x42,0x05,0x81, + 0x07,0xa1,0x88,0x89,0x21,0x15,0x63,0xa0,0x00,0x06, + 0x88,0x90,0x21,0x48,0x40,0xbb,0x07,0xa3,0xb8,0x81, + 0x20,0x15,0x63,0x80 }; + + int i = 0; + u8 size; + + CallPassup=callpassup; + + switch (type) { + case 0: + req_end = req_end0; + size = sizeof(req_end0); + break; + case 1: + FB61_TX_SendMessage(sizeof(req3), 0x01, req3); + FB61_TX_SendMessage(sizeof(req4), 0x01, req4); + req_end = req_end1; + size = sizeof(req_end1); + break; + case -1: /* Just used to set the call passup */ + return GE_NONE; + break; + default: + req_end = req_end0; + size = sizeof(req_end0); + break; + } + + req[4] = strlen(Number); + + for(i = 0; i < strlen(Number) ; i++) + req[5+i] = Number[i]; + + memcpy(req + 5 + strlen(Number), req_end, size); + + FB61_TX_SendMessage(5 + size + strlen(Number), 0x01, req); + if (type != 1) FB61_TX_SendMessage(26, 0x01, req2); + + return (GE_NONE); +} + +GSM_Error FB61_GetIncomingCallNr(char *Number) +{ + if (*CurrentIncomingCall != ' ') { + strcpy(Number, CurrentIncomingCall); + return GE_NONE; + } else return GE_BUSY; +} + +GSM_Error FB61_CancelCall(void) +{ + unsigned char req[] = { FB61_FRAME_HEADER, 0x08, 0x00, 0x85}; + + req[4] = CallSequenceNumber; + FB61_TX_SendMessage(6, 0x01, req); + + return GE_NONE; +} + +GSM_Error FB61_EnterSecurityCode(GSM_SecurityCode SecurityCode) +{ + unsigned char req[15] = { FB61_FRAME_HEADER, 0x0a /* Enter code request. */, 0x00 /* Type of the entered code. */ }; + int i = 0; + req[4] = SecurityCode.Type; + for (i = 0; i < strlen(SecurityCode.Code); i++) + req[5+i] = SecurityCode.Code[i]; + req[5+strlen(SecurityCode.Code)] = 0x00; + req[6+strlen(SecurityCode.Code)] = 0x00; + FB61_TX_SendMessage(7+strlen(SecurityCode.Code), 0x08, req); + return wait_on(&CurrentSecurityCodeError, 20); +} + +GSM_Error FB61_GetSecurityCodeStatus(int *Status) +{ + unsigned char req[4] = { FB61_FRAME_HEADER, 0x07 }; + CurrentSecurityCodeStatus=Status; + FB61_TX_SendMessage(4, 0x08, req); + return wait_on(&CurrentSecurityCodeError, 20); +} + +GSM_Error FB61_GetDateTime(GSM_DateTime *date_time) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x62}; + CurrentDateTime = date_time; + FB61_TX_SendMessage(4, 0x11, req); + return wait_on(&CurrentDateTimeError, 5); +} + +GSM_Error FB61_GetAlarm(int alarm_number, GSM_DateTime *date_time) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x6d}; + CurrentAlarm = date_time; + FB61_TX_SendMessage(4, 0x11, req); + return wait_on(&CurrentAlarmError, 5); +} + +/* This function sends to the mobile phone a request for the SMS Center */ + +GSM_Error FB61_GetSMSCenter(GSM_MessageCenter *MessageCenter) +{ + unsigned char req[10] = { FB61_FRAME_HEADER, 0x33, 0x64, 0x00 /* SMS Center Number. */ }; + req[5] = MessageCenter->No; + CurrentMessageCenter = MessageCenter; + FB61_TX_SendMessage(6, 0x02, req); + return wait_on(&CurrentMessageCenterError, 10); +} + +/* This function set the SMS Center profile on the phone. */ + +GSM_Error FB61_SetSMSCenter(GSM_MessageCenter *MessageCenter) +{ + unsigned char req[64] = { FB61_FRAME_HEADER, 0x30, 0x64, + 0x00, /* SMS Center Number. */ + 0x00, /* Unknown. */ + 0x00, /* SMS Message Format. */ + 0x00, /* Unknown. */ + 0x00, /* Validity. */ + 0,0,0,0,0,0,0,0,0,0,0,0, /* Unknown. */ + 0,0,0,0,0,0,0,0,0,0,0,0 /* Message Center Number. */ + /* Message Center Name. */ + }; + req[5] = MessageCenter->No; + req[7] = MessageCenter->Format; + req[9] = MessageCenter->Validity; + + req[22] = SemiOctetPack(MessageCenter->Number, req+23); + if (req[22] % 2) req[22]++; + req[22] = req[22] / 2 + 1; + + sprintf(req+34, "%s", MessageCenter->Name); + + CurrentMessageCenter = MessageCenter; + CurrentMessageCenterError = GE_BUSY; + + FB61_TX_SendMessage(35+strlen(MessageCenter->Name), 0x02, req); + return wait_on(&CurrentMessageCenterError,20); +} + +GSM_Error FB61_GetSMSStatus(GSM_SMSStatus *Status) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x36, 0x64}; + CurrentSMSStatus = Status; + FB61_TX_SendMessage(5, 0x14, req); + return wait_on(&CurrentSMSStatusError,20); +} + +GSM_Error FB61_GetIMEI(char *imei) +{ + if (*IMEI) { + strncpy (imei, IMEI, FB61_MAX_IMEI_LENGTH); + return (GE_NONE); + } else return (GE_TRYAGAIN); +} + +GSM_Error FB61_GetRevision(char *revision) +{ + if (*Revision) { + strncpy (revision, Revision, FB61_MAX_REVISION_LENGTH); + return (GE_NONE); + } else return (GE_TRYAGAIN); +} + +GSM_Error FB61_GetModel(char *model) +{ + if (*Model) { + strncpy (model, Model, FB61_MAX_MODEL_LENGTH); + return (GE_NONE); + } else return (GE_TRYAGAIN); +} + +GSM_Error FB61_SetDateTime(GSM_DateTime *date_time) +{ + unsigned char req[] = { FB61_FRAME_HEADER, + 0x60, /* set-time subtype */ + 0x01, 0x01, 0x07, /* unknown */ + 0x00, 0x00, /* Year (0x07cf = 1999) */ + 0x00, 0x00, /* Month Day */ + 0x00, 0x00, /* Hours Minutes */ + 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ + }; + req[7] = date_time->Year / 256; + req[8] = date_time->Year % 256; + req[9] = date_time->Month; + req[10] = date_time->Day; + req[11] = date_time->Hour; + req[12] = date_time->Minute; + + FB61_TX_SendMessage(14, 0x11, req); + return wait_on(&CurrentSetDateTimeError, 20); +} + +/* FIXME: we should also allow to set the alarm off :-) */ + +GSM_Error FB61_SetAlarm(int alarm_number, GSM_DateTime *date_time) +{ + unsigned char req[] = { FB61_FRAME_HEADER, + 0x6b, /* set-alarm subtype */ + 0x01, 0x20, 0x03, /* unknown */ + 0x02, /* should be alarm on/off, but it don't works */ + 0x00, 0x00, /* Hours Minutes */ + 0x00 /* Unknown, but not seconds - try 59 and wait 1 sec. */ + }; + req[8] = date_time->Hour; + req[9] = date_time->Minute; + + FB61_TX_SendMessage(11, 0x11, req); + return wait_on(&CurrentSetAlarmError, 20); +} + +/* Routine to get specifed phone book location. Designed to be called by + application. Will block until location is retrieved or a timeout/error + occurs. */ + +GSM_Error FB61_GetMemoryLocation(GSM_PhonebookEntry *entry) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x01, 0x00, 0x00, 0x00}; + + CurrentPhonebookEntry = entry; + req[4] = FB61_GetMemoryType(entry->MemoryType); + req[5] = entry->Location; + FB61_TX_SendMessage(7, 0x03, req); + return wait_on(&CurrentPhonebookError, 20); +} + +/* Routine to write phonebook location in phone. Designed to be called by + application code. Will block until location is written or timeout + occurs. */ + +GSM_Error FB61_WritePhonebookLocation(GSM_PhonebookEntry *entry) +{ + unsigned char req[128] = { FB61_FRAME_HEADER, 0x04, 0x00, 0x00 }; + int i = 0, current = 0; + + req[4] = FB61_GetMemoryType(entry->MemoryType); + req[5] = entry->Location; + + req[6] = strlen(entry->Name); + + current = 7; + + for (i = 0; iName); i++) + req[current+i] = entry->Name[i]; + + current += strlen(entry->Name); + + req[current++] = strlen(entry->Number); + + for (i = 0; i < strlen(entry->Number); i++) + req[current+i] = entry->Number[i]; + + current += strlen(entry->Number); + + /* Jano: This allow to save 14 characters name into SIM memory, when + No Group is selected. */ + + if (entry->Group == 5) + req[current++] = 0xff; + else + req[current++] = entry->Group; + + FB61_TX_SendMessage(current, 3, req); + return wait_on(&CurrentPhonebookError, 50); +} + +GSM_Error FB61_NetMonitor(unsigned char mode, char *Screen) +{ + unsigned char req1[] = { 0x00, 0x01, 0x64, 0x01 }; + unsigned char req2[] = { 0x00, 0x01, 0x7e, 0x00 }; + + CurrentNetmonitor = Screen; + FB61_TX_SendMessage(4, 0x40, req1); + req2[3] = mode; + FB61_TX_SendMessage(4, 0x40, req2); + return wait_on(&CurrentNetmonitorError, 20); +} + +GSM_Error FB61_SendDTMF(char *String) +{ + unsigned char req[64] = { FB61_FRAME_HEADER, 0x50, 0x00 /* Length of DTMF string. */ }; + u8 length=strlen(String); + + req[4] = length; + sprintf(req+5, "%s", String); + FB61_TX_SendMessage(5+length, 0x01, req); + return (GE_NONE); +} + +GSM_Error FB61_GetSpeedDial(GSM_SpeedDial *entry) +{ + unsigned char req[10] = { FB61_FRAME_HEADER, 0x16, 0x00 /* The number of speed dial. */ }; + CurrentSpeedDialEntry = entry; + req[4] = entry->Number; + FB61_TX_SendMessage(5, 0x03, req); + return wait_on(&CurrentSpeedDialError, 20); +} + +GSM_Error FB61_SetSpeedDial(GSM_SpeedDial *entry) +{ + unsigned char req[7] = { FB61_FRAME_HEADER, 0x19, 0x00 /* Number */, 0x00 /* Memory Type */, 0x00 /* Location */ }; + req[4] = entry->Number; + req[5] = entry->MemoryType; + req[6] = entry->Location; + FB61_TX_SendMessage(7, 0x03, req); + return wait_on(&CurrentSpeedDialError, 20); +} + +GSM_Error FB61_GetSMSMessage(GSM_SMSMessage *message) +{ + unsigned char req[10] = { FB61_FRAME_HEADER, 0x07, 0x02 /* Unknown */, 0x00 /* Location */, 0x01, 0x64}; + int timeout = 60; + + /* State machine code writes data to these variables when it comes in. */ + + CurrentSMSMessage = message; + CurrentSMSMessageError = GE_BUSY; + req[5] = message->Location; + FB61_TX_SendMessage(8, 0x02, req); + + while (timeout && (CurrentSMSMessageError == GE_BUSY || CurrentSMSMessageError == GE_SMSWAITING)) { + if (!--timeout) + return (GE_TIMEOUT); + usleep (100000); + } + return (CurrentSMSMessageError); +} + +GSM_Error FB61_DeleteSMSMessage(GSM_SMSMessage *message) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x0a, 0x02, 0x00}; + CurrentSMSMessageError = GE_BUSY; + req[5] = message->Location; + FB61_TX_SendMessage(6, 0x14, req); + return wait_on(&CurrentSMSMessageError, 50); +} + +/* This function implements packing of numbers (SMS Center number and + destination number) for SMS sending function. */ + +int SemiOctetPack(char *Number, unsigned char *Output) +{ + unsigned char *IN = Number; /* Pointer to the input number */ + unsigned char *OUT = Output; /* Pointer to the output */ + int count = 0; /* This variable is used to notify us about count of already + packed numbers. */ + + /* The first byte in the Semi-octet representation of the address field is + the Type-of-Address. This field is described in the official GSM + specification 03.40 version 5.3.0, section 9.1.2.5, page 33. We support + only international and unknown number. */ + + if (*IN == '+') { + *OUT++ = GNT_INTERNATIONAL; /* International number */ + IN++; + } else *OUT++ = GNT_UNKNOWN; /* Unknown number */ + + /* The next field is the number. It is in semi-octet representation - see + GSM scpecification 03.40 version 5.3.0, section 9.1.2.3, page 31. */ + + while (*IN) { + if (count & 0x01) { + *OUT = *OUT | ((*IN - '0') << 4); + OUT++; + } + else + *OUT = *IN - '0'; + count++; IN++; + } + + /* We should also fill in the most significant bits of the last byte with + 0x0f (1111 binary) if the number is represented with odd number of + digits. */ + + if (count & 0x01) { + *OUT=*OUT | 0xf0; + OUT++; + return (2 * (OUT - Output - 1) - 1); + } + + return (2 * (OUT - Output - 1)); +} + +/* The second argument is the size of the data in octets, + excluding User Data Header - important only for 8bit data */ +GSM_Error FB61_SendSMSMessage(GSM_SMSMessage *SMS, int data_size) +{ + GSM_Error error; + + unsigned char req[256] = { + FB61_FRAME_HEADER, + 0x01, 0x02, 0x00, /* SMS send request*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* SMS center, the rest is unused */ + 0x11, /* 0 - TP-Reply-Path (9.2.3.17) + 0 - TP-TP-User-Data-Header-Indicator (9.2.3.23) + x - TP-Status-Report-Request (9.2.3.5) + 0 - no delivery report (default for gnokii) + 1 - request for delivry report + xx - TP validity period (9.2.3.3, see also 9.2.3.12) + 00 - not present + 10 - relative format (default for gnokii) + 01 - enhanced format + 11 - absolute format + no support for this field yet + 0 - TP-Reject-Duplicates (9.2.3.25) + 01 - TP-Message-Type-Indicator (9.2.3.1) - SMS_SUBMIT */ + 0x00, /* TP-Message-Reference (9.2.3.6) */ + 0x00, /* TP-Protocol-Identifier (9.2.3.9) */ + 0x00, /* TP-Data-Coding-Scheme (9.2.3.10, GSM 03.38) */ + 0x00, /* TP-User-Data-Length (9.2.3.16) */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* destination */ + 0xa9, /* SMS validity: b0=1h 47=6h a7=24h a9=72h ad=1week */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + int size, offset; + + /* First of all we should get SMSC number */ + if (SMS->MessageCenter.No) { + error = FB61_GetSMSCenter(&SMS->MessageCenter); + if (error != GE_NONE) + return error; + SMS->MessageCenter.No = 0; + } + dprintf(_("Sending SMS to %s via message center %s\n"), SMS->Destination, SMS->MessageCenter.Number); + + if (SMS->UDHType) { + /* offset - length of the user data header */ + offset = 1 + SMS->UDH[0]; + /* we copy the udh and set the mask for the indicator */ + memcpy(req + 42, SMS->UDH, offset); + req[18] |= 0x40; + } else { + offset = 0; + /* such messages should be sent as concatenated */ + if (strlen(SMS->MessageText) > GSM_MAX_SMS_LENGTH) + return(GE_SMSTOOLONG); + } + + /* size is the length of the data in octets including udh */ + /* SMS->Length is: + - integer representation of the number od octets within the user data when UD is coded using 8bit data + - the sum of the number of septets in UDH including any padding and number of septets in UD in other case + */ + + /* offset now denotes UDH length */ + if (SMS->EightBit) { + memcpy(req + 42 + offset, SMS->MessageText, data_size); + SMS->Length = size = data_size + offset; + /* the mask for the 8-bit data */ + req[21] |= 0xf4; + } else { + size = PackSevenBitsToEight((7-offset)%7, SMS->MessageText, req + 42 + offset); + size += offset; + SMS->Length = (offset*8 + ((7-offset)%7)) / 7 + strlen(SMS->MessageText); + } + + req[22] = SMS->Length; + + CurrentSMSMessageError=GE_BUSY; + + req[6] = SemiOctetPack(SMS->MessageCenter.Number, req+7); + if (req[6] % 2) req[6]++; + + req[6] = req[6] / 2 + 1; + + /* Mask for request for delivery report from SMSC */ + if (SMS->Type == GST_DR) req[18] |= 0x20; + + /* Message Class */ + switch (SMS->Class) { + case 0: req[21] |= 0xf0; break; + case 1: req[21] |= 0xf1; break; + case 2: req[21] |= 0xf2; break; + case 3: req[21] |= 0xf3; break; + default: break; + } + + /* Mask for compression */ + /* FIXME: support for compression */ + /* See GSM 03.42 */ +/* if (SMS->Compression) req[21] = req[21] | 0x20; */ + + req[23] = SemiOctetPack(SMS->Destination, req+24); + + /* TP-Validity Period handling */ + + /* FIXME: error-checking for correct Validity - it should not be bigger then + 63 weeks and smaller then 5minutes. We should also test intervals because + the SMS->Validity to TP-VP is not continuos. I think that the simplest + solution will be an array of correct values. We should parse it and if we + find the closest TP-VP value we should use it. Or is it good to take + closest smaller TP-VP as we do now? I think it is :-) */ + + /* 5 minutes intervals up to 12 hours = 720 minutes */ + if (SMS->Validity <= 720) + req[35] = (unsigned char) (SMS->Validity/5)-1; + + /* 30 minutes intervals up to 1 day */ + else if ((SMS->Validity > 720) && (SMS->Validity <= 1440)) + req[35] = (unsigned char) ((SMS->Validity-720)/30)+143; + + /* 1 day intervals up to 30 days */ + else if ((SMS->Validity > 1440) && (SMS->Validity <= 43200)) + req[35] = (unsigned char) (SMS->Validity/1440)+166; + + /* 1 week intervals up to 63 weeks */ + else if ((SMS->Validity > 43200) && (SMS->Validity <= 635040)) + req[35] = (unsigned char) (SMS->Validity/10080)+192; + + FB61_TX_SendMessage(42+size, 0x02, req); + return wait_on(&CurrentSMSMessageError, 70); +} + +GSM_Error FB61_SaveSMSMessage(GSM_SMSMessage *SMS) +{ + unsigned char req[256] = { + FB61_FRAME_HEADER, + 0x04, 0x05, 0x02, 0x00, 0x02, /* SMS save request*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* SMS center, the rest is unused */ + 0x11, /* 0 - TP-Reply-Path (9.2.3.17) + 0 - TP-TP-User-Data-Header-Indicator (9.2.3.23) + x - TP-Status-Report-Request (9.2.3.5) + 0 - no delivery report (default for gnokii) + 1 - request for delivry report + xx - TP validity period (9.2.3.3, see also 9.2.3.12) + 00 - not present + 10 - relative format (default for gnokii) + 01 - enhanced format + 11 - absolute format + no support for this field yet + 0 - TP-Reject-Duplicates (9.2.3.25) + 01 - TP-Message-Type-Indicator (9.2.3.1) - SMS_SUBMIT */ + 0x00, /* TP-Message-Reference (9.2.3.6) */ + 0x00, /* TP-Protocol-Identifier (9.2.3.9) */ + 0x00, /* TP-Data-Coding-Scheme (9.2.3.10, GSM 03.38) */ + 0x00, /* TP-User-Data-Length (9.2.3.16) */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* destination */ + 0xa9, /* SMS validity: b0=1h 47=6h a7=24h a9=72h ad=1week */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + int size, offset; + + if (SMS->Status == GSS_NOTSENTREAD) + req[4] |= 0x02; + + if (SMS->Location) + req[6] = SMS->Location; + + offset = 0; + /* such messages should be sent as concatenated */ + if (strlen(SMS->MessageText) > GSM_MAX_SMS_LENGTH) + return(GE_SMSTOOLONG); + + /* size is the length of the data in octets including udh */ + /* SMS->Length is: + - integer representation of the number od octets within the user data when UD is coded using 8bit data + - the sum of the number of septets in UDH including any padding and number of septets in UD in other case + */ + + /* offset now denotes UDH length */ + size = PackSevenBitsToEight((7-offset)%7, SMS->MessageText, req + 44 + offset); + size += offset; + SMS->Length = (offset*8 + ((7-offset)%7)) / 7 + strlen(SMS->MessageText); + + req[24] = SMS->Length; + FB61_TX_SendMessage(44+size, 0x14, req); + return wait_on(&CurrentSMSMessageError, 70); +} + +/* Enable and disable Cell Broadcasting */ + +GSM_Error FB61_EnableCellBroadcast(void) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x20, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}; + CurrentCBError = GE_BUSY; + + CurrentCBMessage = (GSM_CBMessage *)malloc(sizeof (GSM_CBMessage)); + CurrentCBMessage->Channel = 0; + CurrentCBMessage->New = false; + strcpy (CurrentCBMessage->Message,""); + FB61_TX_SendMessage(10, 0x02, req); + return wait_on(&CurrentCBError, 20); +} + +GSM_Error FB61_DisableCellBroadcast(void) /* Should work, but not tested fully */ +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /*VERIFY*/ + FB61_TX_SendMessage(10, 0x02, req); + return wait_on(&CurrentCBError, 20); +} + +GSM_Error FB61_ReadCellBroadcast(GSM_CBMessage *Message) +{ + if (CurrentCBMessage != NULL) { + if (CurrentCBMessage->New == true) { + Message->Channel = CurrentCBMessage->Channel; + strcpy(Message->Message,CurrentCBMessage->Message); + CurrentCBMessage->New = false; + return (GE_NONE); + } + } + return (GE_NONEWCBRECEIVED); +} + +/* Send a bitmap or welcome-note */ + +GSM_Error FB61_SetBitmap(GSM_Bitmap *Bitmap) +{ + unsigned char req[600] = { FB61_FRAME_HEADER }; + u16 count = 3; + u8 textlen; + + switch (Bitmap->type) { + case GSM_WelcomeNoteText: + req[count++] = 0x18; + req[count++] = 0x01; /* Only one block */ + req[count++] = 0x02; /* Welcome text */ + req[count++] = textlen = strlen(Bitmap->text); + memcpy(req+count, Bitmap->text, textlen); + + count += textlen; + FB61_TX_SendMessage(count, 0x05, req); + break; + + case GSM_DealerNoteText: + req[count++] = 0x18; + req[count++] = 0x01; /* Only one block */ + req[count++] = 0x03; /* Dealer Welcome Note */ + req[count++] = textlen = strlen(Bitmap->text); + memcpy(req+count, Bitmap->text, textlen); + + count += textlen; + FB61_TX_SendMessage(count, 0x05, req); + break; + + case GSM_StartupLogo: + req[count++] = 0x18; + req[count++] = 0x01; /* Only one block */ + req[count++] = 0x01; + req[count++] = Bitmap->height; + req[count++] = Bitmap->width; + memcpy(req+count, Bitmap->bitmap, Bitmap->size); + count += Bitmap->size; + FB61_TX_SendMessage(count, 0x05, req); + break; + + case GSM_OperatorLogo: + req[count++] = 0x30; /* Store Op Logo */ + req[count++] = 0x01; /* Location */ + req[count++] = ((Bitmap->netcode[1] & 0x0f) << 4) | (Bitmap->netcode[0] & 0x0f); + req[count++] = 0xf0 | (Bitmap->netcode[2] & 0x0f); + req[count++] = ((Bitmap->netcode[5] & 0x0f) << 4) | (Bitmap->netcode[4] & 0x0f); + req[count++] = (Bitmap->size+4) >> 8; + req[count++] = (Bitmap->size+4)%0xff; + req[count++] = 0x00; /* Infofield */ + req[count++] = Bitmap->width; + req[count++] = Bitmap->height; + req[count++] = 0x01; /* Just BW */ + memcpy(req+count, Bitmap->bitmap, Bitmap->size); + FB61_TX_SendMessage(count+Bitmap->size, 0x05, req); + break; + + case GSM_CallerLogo: + req[count++] = 0x13; + req[count++] = Bitmap->number; + req[count++] = strlen(Bitmap->text); + memcpy(req+count, Bitmap->text, req[count-1]); + count += req[count-1]; + req[count++]= Bitmap->ringtone; + req[count++]= 0x01; /* Graphic on. You can use other values as well: + 0x00 - Off + 0x01 - On + 0x02 - View Graphics + 0x03 - Send Graphics + 0x04 - Send via IR + You can even set it higher but Nokia phones (my + 6110 at least) will not show you the name of this + item in menu ;-)) Nokia is really joking here. */ + req[count++] = (Bitmap->size + 4) >> 8; + req[count++] = (Bitmap->size + 4) % 0xff; + req[count++] = 0x00; /* Future extensions! */ + req[count++] = Bitmap->width; + req[count++] = Bitmap->height; + req[count++] = 0x01; /* Just BW */ + memcpy(req+count, Bitmap->bitmap, Bitmap->size); + FB61_TX_SendMessage(count+Bitmap->size, 0x03, req); + break; + + case GSM_PictureImage: + return (GE_NOTIMPLEMENTED); + break; + + case GSM_None: + break; + } + return wait_on(&SetBitmapError, 70); +} + +/* Get a bitmap from the phone */ + +GSM_Error FB61_GetBitmap(GSM_Bitmap *Bitmap) +{ + unsigned char req[10] = { FB61_FRAME_HEADER }; + u8 count = 3; + int timeout = 10; + + GetBitmap = Bitmap; + GetBitmapError = GE_BUSY; + + /* This is needed to avoid the packet being interrupted */ + /* Remove when multipacket code is implemented fully */ + + DisableKeepalive = true; + + while (timeout && (MessagesSent != AcksReceived)) { + usleep(100000); + timeout--; + } + + /* We'll assume that nothing more will be received after 1 sec */ + + MessagesSent = AcksReceived; + + switch (GetBitmap->type) { + case GSM_StartupLogo: + req[count++] = 0x16; + FB61_TX_SendMessage(count, 0x05, req); + break; + case GSM_WelcomeNoteText: + req[count++] = 0x16; + FB61_TX_SendMessage(count, 0x05, req); + break; + case GSM_DealerNoteText: + req[count++] = 0x16; + FB61_TX_SendMessage(count, 0x05, req); + break; + case GSM_OperatorLogo: + req[count++] = 0x33; + req[count++] = 0x01; /* Location 1 */ + FB61_TX_SendMessage(count, 0x05, req); + break; + case GSM_CallerLogo: + req[count++] = 0x10; + req[count++] = Bitmap->number; + FB61_TX_SendMessage(count, 0x03, req); + break; + default: + break; + } + + /* 5secs for the command to complete */ + + WAIT_ON(&GetBitmapError, 50); + + DisableKeepalive = false; + GetBitmap = NULL; + return (GetBitmapError); +} + + +GSM_Error FB61_SetRingTone(GSM_Ringtone *ringtone) +{ + char package[GSM_MAX_RINGTONE_PACKAGE_LENGTH+10] = + { 0x0c, 0x01, /* FBUS RingTone header */ + /* Next bytes are from Smart Messaging Specification version 2.0.0 */ + 0x06, /* User Data Header Length */ + 0x05, /* IEI FIXME: What is this? */ + 0x04, /* IEDL FIXME: What is this? */ + 0x15, 0x81, /* Destination port */ + 0x15, 0x81 /* Originator port, only + to fill in the two + bytes :-) */ + }; + int size = GSM_MAX_RINGTONE_PACKAGE_LENGTH; + GSM_PackRingtone(ringtone, package+9, &size); + package[size+9] = 0x01; + FB61_TX_SendMessage((size+10), 0x12, package); + return (GE_NONE); +} + +GSM_Error FB61_SendRingTone(GSM_Ringtone *ringtone, char *dest) +{ + GSM_SMSMessage SMS; + GSM_Error error; + + int size = GSM_MAX_RINGTONE_PACKAGE_LENGTH; + char Package[GSM_MAX_RINGTONE_PACKAGE_LENGTH]; + char udh[] = { + 0x06, /* User Data Header Length */ + 0x05, /* IEI */ + 0x04, /* IEDL */ + 0x15, 0x81, /* Destination port */ + 0x15, 0x81 /* Originator port, only + to fill in the two + bytes :-) */ + }; + + /* Default settings for SMS message: + - no delivery report + - Class Message 1 + - no compression + - 8 bit data + - SMSC no. 1 + - validity 3 days + - set UserDataHeaderIndicator + */ + + SMS.Type = GST_MO; + SMS.Class = 1; + SMS.Compression = false; + SMS.EightBit = true; + SMS.MessageCenter.No = 1; + SMS.Validity = 4320; /* 4320 minutes == 72 hours */ + + SMS.UDHType = GSM_RingtoneUDH; + + strcpy(SMS.Destination, dest); + GSM_PackRingtone(ringtone, Package, &size); + memcpy(SMS.UDH, udh, 7); + memcpy(SMS.MessageText, Package, size); + + /* Send the message. */ + error = FB61_SendSMSMessage(&SMS, size); + + if (error == GE_SMSSENDOK) dprintf(_("Send succeeded!\n")); + else dprintf(_("SMS Send failed (error=%d)\n"), error); + + return (GE_NONE); +} + +GSM_Error FB61_Reset(unsigned char type) +{ + unsigned char req[4] = { 0x00,0x01,0x64,0x03 }; + req[3] = type; + FB61_TX_SendMessage(4, 0x40, req); + return (GE_NONE); +} + +#ifndef WIN32 + +void FB61_DumpSerial(void) +{ + int PortFD; + unsigned int Flags=0; + + PortFD = device_getfd(); + ioctl(PortFD, TIOCMGET, &Flags); + + dprintf(_("Serial flags dump:\n")); + dprintf(_("DTR is %s.\n"), Flags&TIOCM_DTR?_("up"):_("down")); + dprintf(_("RTS is %s.\n"), Flags&TIOCM_RTS?_("up"):_("down")); + dprintf(_("CAR is %s.\n"), Flags&TIOCM_CAR?_("up"):_("down")); + dprintf(_("CTS is %s.\n"), Flags&TIOCM_CTS?_("up"):_("down")); + dprintf("\n"); +} + +/* This functions set up the Nokia DAU-9P MBus Cable NSE-3 which is probably + dual MBUS/FBUS to FBUS communication. If we skip this step we can + communicate with the phone, but the phone sends us some garbagge (0x18 0x00 + ...). + + This was brought to my attention by people with original cable. My cable is + FBUS only so I borrow the original cable from my friend and solve + it. Thanks to Cobus, Juan and people on the mailing list. + + Colin wrote: + + The data suite cable has some electronics built into the connector. This of + course needs a power supply of some sorts to operate properly. + + In this case power is drawn off the handshaking lines of the PC. DTR has to + be set and RTS have to be cleared, thus if you use a terminal program (that + does not set the handshaking lines to these conditions) you will get weird + results. It will not set them like this since if Request To Send (RTS) is + not set the other party will not send any data (in hardware handshaking) + and if DTS is not set (handshaking = none) the cable will not receive + power. */ + +/* FIXME: In this function we use ioctls - can people with different OSes than + my (Linux) tell me if it works for them? */ + +void FB61_SetFBUS(void) +{ +#ifdef DEBUG + FB61_DumpSerial(); + dprintf(_("Setting FBUS communication...\n")); +#endif + + /* clearing the RTS bit and setting the DTR bit*/ + device_setdtrrts(1, 0); + +#ifdef DEBUG + FB61_DumpSerial(); +#endif /* DEBUG */ +} + +/* Called by initialisation code to open comm port in asynchronous mode. */ + +bool FB61_OpenSerial(void) +{ + int result; + +#if __unices__ + int rtn; +#else + struct sigaction sig_io; + + /* Set up and install handler before enabling async IO on port. */ + + sig_io.sa_handler = FB61_SigHandler; + sig_io.sa_flags = 0; + sigaction (SIGIO, &sig_io, NULL); +#endif + + /* Open device. */ + + result = device_open(PortDevice, false, true, false, GCT_Serial); + + if (!result) { + perror(_("Couldn't open FB61 device")); + return false; + } + +#if __unices__ + /* create a thread to handle incoming data from mobile phone */ + rtn = pthread_create(&selThread, NULL, (void*)FB61_SelectLoop, (void*)NULL); + if (rtn != 0) return false; +#endif + + device_changespeed(115200); + FB61_SetFBUS(); + return (true); +} + +void FB61_SigHandler(int status) +{ + unsigned char buffer[255]; + int count, res; + res = device_read(buffer, 255); + for (count = 0; count < res ; count ++) + FB61_RX_StateMachine(buffer[count]); +} +#endif /* WIN32 */ + +char *FB61_GetBCDNumber(u8 *Number) +{ + static char Buffer[20] = ""; + + /* This is the length of BCD coded number */ + int length = Number[0]; + int count; + + if (Number[1] == 0x91) sprintf(Buffer, "+"); + else Buffer[0] = '\0'; + + for (count = 0; count < length-1; count++) { + int Digit; + Digit = Number[count+2] & 0x0f; + if (Digit < 10) sprintf(Buffer, "%s%d", Buffer, Digit); + Digit = Number[count+2] >> 4; + if (Digit < 10) sprintf(Buffer, "%s%d", Buffer, Digit); + } + + return Buffer; +} + +char *FB61_GetPackedDateTime(u8 *Number) +{ + static char Buffer[20] = ""; + + sprintf(Buffer, "%d%d-", Number[0] & 0xf, Number[0] >> 4); + sprintf(Buffer, "%s%d%d-", Buffer, Number[1] & 0xf, Number[1] >> 4); + sprintf(Buffer, "%s%d%d ", Buffer, Number[2] & 0xf, Number[2] >> 4); + sprintf(Buffer, "%s%d%d:", Buffer, Number[3] & 0xf, Number[3] >> 4); + sprintf(Buffer, "%s%d%d:", Buffer, Number[4] & 0xf, Number[4] >> 4); + sprintf(Buffer, "%s%d%d", Buffer, Number[5] & 0xf, Number[5] >> 4); + + return Buffer; +} + +enum FB61_RX_States FB61_RX_DispatchMessage(void) +{ + int i, tmp, count, offset, off, length; + unsigned char output[160]; + bool supported; + + if (RX_Multiple) return FB61_RX_Sync; + +#ifdef DEBUG + /* Do not debug Ack and RLP frames to detail. */ + + if (MessageType != FB61_FRTYPE_ACK && MessageType != 0xf1) + FB61_RX_DisplayMessage(); +#endif /* DEBUG */ + + /* Switch on the basis of the message type byte */ + switch (MessageType) { + case 0x01: /* Call information */ + switch (MessageBuffer[3]) { + /* Unknown message - it has been seen after the 0x07 message (call + answered). Probably it has similar meaning. If you can solve + this - just mail me. Pavel Janík ml. + + The message looks like this: + + Msg Destination: PC + Msg Source: Phone + Msg Type: 01 + Msg Unknown: 00 + Msg Len: 0e + + Phone: [01 ][08 ][00 ] is the header of the frame + + [03 ] is the call message subtype + + [05 ] is the call sequence number + + [05 ] unknown + + [00 ][01 ][03 ][02 ][91][00] are unknown but has been + seen in the Incoming call message (just after the + caller's name from the phonebook). But never change + between phone calls :-( + */ + + case 0x02: /* This may mean sequence number of 'just made' call - CK */ + dprintf(_("Message: Call message, type 0x02:")); + dprintf(_(" Exact meaning not known yet, sorry :-(\n")); + break; + + case 0x03: /* Possibly call OK */ +/* JD: I think that this means "call in progress" (incomming or outgoing) */ + dprintf(_("Message: Call message, type 0x03:")); + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + dprintf(_(" Exact meaning not known yet, sorry :-(\n")); + CallSequenceNumber = MessageBuffer[4]; + CurrentIncomingCall[0] = 'D'; + if (CallPassup) CallPassup('D'); + break; + + /* Remote end has gone away before you answer the call. Probably your + mother-in-law or banker (which is worse?) ... */ + case 0x04: + dprintf(_("Message: Remote end hang up.\n")); + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + CurrentIncomingCall[0] = ' '; + if (CallPassup) CallPassup(' '); + break; + + case 0x05: /* Incoming call alert */ + dprintf(_("Message: Incoming call alert:\n")); + /* We can have more then one call ringing - we can distinguish between + them */ + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + dprintf(_(" Number: ")); + count = MessageBuffer[6]; + for (tmp = 0; tmp < count; tmp++) + dprintf("%c", MessageBuffer[7+tmp]); + dprintf("\n"); + dprintf(_(" Name: ")); + for (tmp = 0; tmp < MessageBuffer[7+count]; tmp++) + dprintf("%c", MessageBuffer[8+count+tmp]); + dprintf("\n"); + count = MessageBuffer[6]; + CurrentIncomingCall[0] = 0; + for (tmp = 0; tmp < count; tmp++) + sprintf(CurrentIncomingCall, "%s%c", CurrentIncomingCall, MessageBuffer[7+tmp]); + if (CallPassup) CallPassup(MessageBuffer[4]); + break; + + /* Call answered. Probably your girlfriend...*/ + case 0x07: + dprintf(_("Message: Call answered.\n")); + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + break; + + /* Call ended. Girlfriend is girlfriend, but time is money :-) */ + case 0x09: + dprintf(_("Message: Call ended by your phone.\n")); + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + break; + + /* This message has been seen with the message of subtype 0x09 + after I hang the call. + + Msg Destination: PC + Msg Source: Phone + Msg Type: 01 + Msg Unknown: 00 + Msg Len: 08 + Phone: [01 ][08 ][00 ][0a ][04 ][87 ][01 ][42B][1a ][c2 ] + + What is the meaning of 87? Can you spell some magic light into + this issue? + + */ + + case 0x0a: /* Probably means call over - CK */ + dprintf(_("Message: Call message, type 0x0a:")); + dprintf(_(" Sequence nr. of the call: %d\n"), MessageBuffer[4]); + dprintf(_(" Exact meaning not known yet, sorry :-(\n")); + + CurrentIncomingCall[0] = ' '; + if (CallPassup) CallPassup(' '); + break; + + default: + dprintf(_("Message: Unknown message of type 0x01\n")); + break; + } + break; + + /* SMS handling */ + + case 0x02: + switch (MessageBuffer[3]) { + case 0x02: /* SMS message correctly sent to the network */ + dprintf(_("Message: SMS Message correctly sent.\n")); + CurrentSMSMessageError = GE_SMSSENDOK; + break; + + case 0x03: /* SMS message send to the network failed */ + dprintf(_("Message: Sending SMS Message failed.\n")); + CurrentSMSMessageError = GE_SMSSENDFAILED; + break; + + case 0x10: + dprintf(_("Message: SMS Message Received\n")); + dprintf(_(" SMS center number: %s\n"), FB61_GetBCDNumber(MessageBuffer+7)); + + MessageBuffer[23] = (MessageBuffer[23]+1)/2+1; + + dprintf(_(" Remote number: %s\n"), FB61_GetBCDNumber(MessageBuffer+23)); + dprintf(_(" Date: %s\n"), FB61_GetPackedDateTime(MessageBuffer+35)); + dprintf(_(" SMS: ")); + + tmp = UnpackEightBitsToSeven(0, MessageLength - 42 - 2, MessageBuffer[22], MessageBuffer + 42, output); + + for (i = 0; i < tmp; i++) dprintf("%c", GSM_Default_Alphabet[output[i]]); + + dprintf("\n"); + break; + + case 0x21: + dprintf(_("Message: Cell Broadcast enabled/disabled successfully.\n")); + CurrentCBError = GE_NONE; + break; + + case 0x23: + CurrentCBMessage->Channel = MessageBuffer[7]; + CurrentCBMessage->New = true; + tmp=UnpackEightBitsToSeven(0, 82, 82, MessageBuffer+10, output); + + dprintf(_("Message: CB received.\n")); fflush (stdout); + dprintf(_("Message: channel number %i\n"),MessageBuffer[7]); + for (i=0; iMessage[i] = GSM_Default_Alphabet[output[i]]; + + break; + + + case 0x31: + dprintf(_("Message: SMS Center correctly set.\n")); + CurrentMessageCenterError = GE_NONE; + break; + + case 0x34: + + CurrentMessageCenter->No = MessageBuffer[4]; + CurrentMessageCenter->Format = MessageBuffer[6]; + CurrentMessageCenter->Validity = MessageBuffer[8]; + sprintf(CurrentMessageCenter->Name, "%s", MessageBuffer+33); + sprintf(CurrentMessageCenter->Number, "%s", FB61_GetBCDNumber(MessageBuffer+21)); + + dprintf(_("Message: SMS Center received:\n")); + dprintf(_(" %d. SMS Center name is %s\n"), CurrentMessageCenter->No, CurrentMessageCenter->Name); + dprintf(_(" SMS Center number is %s\n"), CurrentMessageCenter->Number); + dprintf(_(" SMS Center message format is ")); + + switch (CurrentMessageCenter->Format) { + case GSMF_Text: dprintf(_("Text")); break; + case GSMF_Paging: dprintf(_("Paging")); break; + case GSMF_Fax: dprintf(_("Fax")); break; + case GSMF_Email: dprintf(_("Email")); break; + default: dprintf(_("Unknown")); break; + } + + dprintf("\n"); + + dprintf(_(" SMS Center message validity is ")); + + switch (CurrentMessageCenter->Validity) { + case GSMV_1_Hour: dprintf(_("1 hour")); break; + case GSMV_6_Hours: dprintf(_("6 hours")); break; + case GSMV_24_Hours: dprintf(_("24 hours")); break; + case GSMV_72_Hours: dprintf(_("72 hours")); break; + case GSMV_1_Week: dprintf(_("1 week")); break; + case GSMV_Max_Time: dprintf(_("Maximum time")); break; + default: dprintf(_("Unknown")); break; + } + dprintf("\n"); + CurrentMessageCenterError = GE_NONE; + break; + + case 0x35: + /* Nokia 6110 has support for three SMS centers with numbers 1, 2 and + 3. Each request for SMS Center without one of these numbers + fail. */ + dprintf(_("Message: SMS Center error received:\n")); + dprintf(_(" The request for SMS Center failed.\n")); + + /* FIXME: appropriate error. */ + CurrentMessageCenterError = GE_INTERNALERROR; + break; + + default: + dprintf(_("Unknown message!\n")); + break; + } + + break; + + /* Phonebook handling */ + + case 0x03: + + switch (MessageBuffer[3]) { + + case 0x02: + + CurrentPhonebookEntry->Empty = true; + + count = MessageBuffer[5]; + dprintf(_("Message: Phonebook entry received:\n")); + dprintf(_(" Name: ")); + for (tmp = 0; tmp < count; tmp++) + dprintf("%c", MessageBuffer[6+tmp]); + dprintf("\n"); + + memcpy(CurrentPhonebookEntry->Name, MessageBuffer + 6, count); + CurrentPhonebookEntry->Name[count] = 0x00; + CurrentPhonebookEntry->Empty = false; + + i = 7 + count; + count = MessageBuffer[6+count]; + + dprintf(_(" Number: ")); + for (tmp = 0; tmp < count; tmp++) + dprintf("%c", MessageBuffer[i+tmp]); + dprintf("\n"); + + memcpy(CurrentPhonebookEntry->Number, MessageBuffer + i, count); + CurrentPhonebookEntry->Number[count] = 0x00; + CurrentPhonebookEntry->Group = MessageBuffer[i+count]; + + CurrentPhonebookEntry->Date.Year = MessageBuffer[i+count+2] * 256 + MessageBuffer[i+count+3]; + CurrentPhonebookEntry->Date.Month = MessageBuffer[i+count+4]; + CurrentPhonebookEntry->Date.Day = MessageBuffer[i+count+5]; + CurrentPhonebookEntry->Date.Hour = MessageBuffer[i+count+6]; + CurrentPhonebookEntry->Date.Minute = MessageBuffer[i+count+7]; + CurrentPhonebookEntry->Date.Second = MessageBuffer[i+count+8]; + + dprintf(_(" Date: ")); + dprintf("%02u-%02u-%04u\n", CurrentPhonebookEntry->Date.Day, CurrentPhonebookEntry->Date.Month, CurrentPhonebookEntry->Date.Year); + dprintf(_(" Time: ")); + dprintf("%02u-%02u-%02u\n", CurrentPhonebookEntry->Date.Hour, CurrentPhonebookEntry->Date.Minute, CurrentPhonebookEntry->Date.Second); + + /* Signal no error to calling code. */ + + CurrentPhonebookError = GE_NONE; + + break; + + case 0x03: + dprintf(_("Message: Phonebook read entry error received:\n")); + switch (MessageBuffer[4]) { + case 0x7d: + dprintf(_(" Invalid memory type!\n")); + CurrentPhonebookError = GE_INVALIDMEMORYTYPE; + break; + default: + dprintf(_(" Unknown error!\n")); + CurrentPhonebookError = GE_INTERNALERROR; + break; + } + break; + + case 0x05: + dprintf(_("Message: Phonebook written correctly.\n")); + CurrentPhonebookError = GE_NONE; + break; + + case 0x06: + switch (MessageBuffer[4]) { + + /* FIXME: other errors? When I send the phonebook with index of 350 it + still report error 0x7d :-( */ + + case 0x7d: + dprintf(_("Message: Phonebook not written - name is too long.\n")); + CurrentPhonebookError = GE_PHBOOKNAMETOOLONG; + break; + + default: + dprintf(_(" Unknown error!\n")); + CurrentPhonebookError = GE_INTERNALERROR; + break; + } + + break; + + case 0x08: + dprintf(_("Message: Memory status received:\n")); + dprintf(_(" Memory Type: %s\n"), FB61_MemoryType_String[MessageBuffer[4]]); + dprintf(_(" Used: %d\n"), MessageBuffer[6]); + dprintf(_(" Free: %d\n"), MessageBuffer[5]); + CurrentMemoryStatus->Used = MessageBuffer[6]; + CurrentMemoryStatus->Free = MessageBuffer[5]; + CurrentMemoryStatusError = GE_NONE; + break; + + case 0x09: + switch (MessageBuffer[4]) { + case 0x6f: + dprintf(_("Message: Memory status error, phone is probably powered off.\n")); + CurrentMemoryStatusError = GE_TIMEOUT; + break; + + case 0x7d: + dprintf(_("Message: Memory status error, memory type not supported by phone model.\n")); + CurrentMemoryStatusError = GE_INTERNALERROR; + break; + + case 0x8d: + dprintf(_("Message: Memory status error, waiting for security code.\n")); + CurrentMemoryStatusError = GE_INVALIDSECURITYCODE; + break; + + default: + dprintf(_("Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n"),MessageBuffer[4]); + break; + } + + break; + + case 0x11: /* Get group data */ + + /* [ID],[name_len],[name].,[ringtone],[graphicon],[lenhi],[lenlo],[bitmap] */ + + if (GetBitmap != NULL) { + count = MessageBuffer[5]; + memcpy(GetBitmap->text, MessageBuffer+6, count); + GetBitmap->text[count] = 0; + + dprintf(_("Message: Caller group logo etc.\n")); + dprintf(_("Caller group name: %s\n"), GetBitmap->text); + + count += 6; + GetBitmap->ringtone = MessageBuffer[count++]; + count++; + GetBitmap->size = MessageBuffer[count++]<<8; + GetBitmap->size += MessageBuffer[count++]; + count++; + GetBitmap->width = MessageBuffer[count++]; + GetBitmap->height = MessageBuffer[count++]; + count++; + tmp = GetBitmap->height * GetBitmap->width / 8; + if (GetBitmap->size > tmp) GetBitmap->size = tmp; + memcpy(GetBitmap->bitmap, MessageBuffer+count, GetBitmap->size); + GetBitmapError = GE_NONE; + } + else { + dprintf(_("Message: Caller group data received but not requested!\n")); + } + break; + + case 0x12: /* Get group data error */ + GetBitmapError = GE_UNKNOWN; + dprintf(_("Message: Error attempting to get caller group data.\n")); + break; + + case 0x14: /* Set group data OK */ + SetBitmapError = GE_NONE; + dprintf(_("Message: Caller group data set correctly.\n")); + break; + + case 0x15: /* Set group data error */ + SetBitmapError = GE_UNKNOWN; + dprintf(_("Message: Error attempting to set caller group data\n")); + break; + + case 0x17: + CurrentSpeedDialEntry->MemoryType = MessageBuffer[4]; + CurrentSpeedDialEntry->Location = MessageBuffer[5]; + dprintf(_("Message: Speed dial entry received:\n")); + dprintf(_(" Location: %d\n"), CurrentSpeedDialEntry->Location); + dprintf(_(" MemoryType: %s\n"), FB61_MemoryType_String[CurrentSpeedDialEntry->MemoryType]); + dprintf(_(" Number: %d\n"), CurrentSpeedDialEntry->Number); + CurrentSpeedDialError = GE_NONE; + break; + + case 0x18: + dprintf(_("Message: Speed dial entry error\n")); + CurrentSpeedDialError = GE_INVALIDSPEEDDIALLOCATION; + break; + + case 0x1a: + dprintf(_("Message: Speed dial entry set.\n")); + CurrentSpeedDialError = GE_NONE; + break; + + case 0x1b: + dprintf(_("Message: Speed dial entry setting error.\n")); + CurrentSpeedDialError = GE_INVALIDSPEEDDIALLOCATION; + break; + + default: + dprintf(_("Message: Unknown message of type 0x03\n")); + break; + } + + break; + + /* Phone status */ + + case 0x04: + switch (MessageBuffer[3]) { + case 0x02: + dprintf(_("Message: Phone status received:\n")); + dprintf(_(" Mode: ")); + switch (MessageBuffer[4]) { + case 0x01: dprintf(_("registered within the network\n")); break; + /* I was really amazing why is there a hole in the type of 0x02, now I + know... */ + case 0x02: dprintf(_("call in progress\n")); /* ringing or already answered call */ break; + case 0x03: dprintf(_("waiting for security code\n")); break; + case 0x04: dprintf(_("powered off\n")); break; + default: dprintf(_("unknown\n")); break; + } + dprintf(_(" Power source: ")); + switch (MessageBuffer[7]) { + case 0x01: dprintf(_("AC/DC\n")); break; + case 0x02: dprintf(_("battery\n")); break; + default: dprintf(_("unknown\n")); break; + } + dprintf(_(" Battery Level: %d\n"), MessageBuffer[8]); + dprintf(_(" Signal strength: %d\n"), MessageBuffer[5]); + + CurrentRFLevel = MessageBuffer[5]; + CurrentBatteryLevel = MessageBuffer[8]; + CurrentPowerSource = MessageBuffer[7]; + break; + + default: + dprintf(_("Message: Unknown message of type 0x04\n")); + break; + } + + break; + + /* Startup Logo, Operator Logo and Profiles. */ + + case 0x05: + switch (MessageBuffer[3]) { + case 0x11: /* Profile feature change result */ + dprintf(_("Message: Profile feature change result.\n")); + CurrentProfileError = GE_NONE; + break; + + case 0x14: /* Profile feature */ + switch (MessageBuffer[6]) { + case 0x00: + CurrentProfile->KeypadTone = MessageBuffer[8]; + break; + case 0x01: + CurrentProfile->Lights = MessageBuffer[8]; + break; + case 0x02: + CurrentProfile->CallAlert = MessageBuffer[8]; + break; + case 0x03: + CurrentProfile->Ringtone = MessageBuffer[8]; + break; + case 0x04: + CurrentProfile->Volume = MessageBuffer[8]; + break; + case 0x05: + CurrentProfile->MessageTone = MessageBuffer[8]; + break; + case 0x06: + CurrentProfile->Vibration = MessageBuffer[8]; + break; + case 0x07: + CurrentProfile->WarningTone = MessageBuffer[8]; + break; + case 0x08: + CurrentProfile->CallerGroups = MessageBuffer[8]; + break; + case 0x09: + CurrentProfile->AutomaticAnswer = MessageBuffer[8]; + break; + } + + CurrentProfileError = GE_NONE; + break; + + case 0x17: /* Startup Logo */ + dprintf(_("Message: Startup Logo, welcome note and dealer welcome note received.\n")); + if (GetBitmap != NULL) { + supported = false; + count = 5; + for (tmp = 0; tmp < MessageBuffer[4]; tmp++){ + switch (MessageBuffer[count++]) { + case 0x01: + if (GetBitmap->type == GSM_StartupLogo) { + GetBitmap->height = MessageBuffer[count++]; + GetBitmap->width = MessageBuffer[count++]; + GetBitmap->size = GetBitmap->height * GetBitmap->width / 8; + length = GetBitmap->size; + memcpy(GetBitmap->bitmap, MessageBuffer + count, length); + } else { + length = MessageBuffer[count++]; + length = length * MessageBuffer[count++] / 8; + } + count += length; + dprintf(_("Startup logo supported - ")); + if (length != 0) dprintf(_("currently set\n")); + else dprintf(_("currently empty\n")); + if (GetBitmap->type == GSM_StartupLogo) supported = true; + break; + case 0x02: + length = MessageBuffer[count]; + if (GetBitmap->type == GSM_WelcomeNoteText) { + memcpy(GetBitmap->text, MessageBuffer + count + 1, length); + GetBitmap->text[length] = 0; + } + dprintf(_("Startup Text supported - ")); + if (length != 0) { + dprintf(_("currently set to \"")); + for (i = 0; i < length; i++) dprintf(_("%c"), MessageBuffer[count+1+i]); + dprintf(_("\"\n")); + } else { + dprintf(_("currently empty\n")); + } + count += length + 1; + if (GetBitmap->type == GSM_WelcomeNoteText) supported = true; + break; + case 0x03: + length = MessageBuffer[count]; + if (GetBitmap->type == GSM_DealerNoteText) { + memcpy(GetBitmap->text, MessageBuffer + count + 1, length); + GetBitmap->text[length] = 0; + } + dprintf(_("Dealer Welcome supported - ")); + if (length != 0) { + dprintf(_("currently set to \"")); + for (i = 0;i < length; i++) dprintf(_("%c"), MessageBuffer[count+1+i]); + dprintf(_("\"\n")); + } else dprintf(_("currently empty\n")); + count += length + 1; + if (GetBitmap->type==GSM_DealerNoteText) supported = true; + break; + } + } + if (supported) GetBitmapError = GE_NONE; + else GetBitmapError = GE_NOTSUPPORTED; + } else dprintf(_("Message: Startup logo received but not requested!\n")); + break; + + case 0x19: /* Set startup OK */ + SetBitmapError = GE_NONE; + dprintf(_("Message: Startup logo, welcome note or dealer welcome note correctly set.\n")); + break; + + case 0x1b: /* Incoming profile name */ + if (MessageBuffer[9] == 0x00) + CurrentProfile->DefaultName = MessageBuffer[8]; + else { + CurrentProfile->DefaultName = -1; + sprintf(CurrentProfile->Name, MessageBuffer + 10, MessageBuffer[9]); + CurrentProfile->Name[MessageBuffer[9]] = '\0'; + } + CurrentProfileError = GE_NONE; + break; + + case 0x1d: /* Profile name set result */ + CurrentProfileError = GE_NONE; + break; + + case 0x31: /* Set Operator Logo OK */ + dprintf(_("Message: Operator logo correctly set.\n")); + SetBitmapError = GE_NONE; + break; + + case 0x32: /* Set Operator Logo Error */ + SetBitmapError = GE_UNKNOWN; + dprintf(_("Message: Error setting operator logo!\n")); + break; + + case 0x34: /* Operator Logo */ + /* [location],[netcode x 3],[lenhi],[lenlo],[bitmap] */ + if (GetBitmap != NULL) { + count = 5; /* Location ignored. */ + /* Network code is stored as 0xBA 0xXC 0xED ("ABC DE"). */ + GetBitmap->netcode[0] = '0' + (MessageBuffer[count] & 0x0f); + GetBitmap->netcode[1] = '0' + (MessageBuffer[count++] >> 4); + GetBitmap->netcode[2] = '0' + (MessageBuffer[count++] & 0x0f); + GetBitmap->netcode[3] = ' '; + GetBitmap->netcode[4] = '0' + (MessageBuffer[count] & 0x0f); + GetBitmap->netcode[5] = '0' + (MessageBuffer[count++] >> 4); + GetBitmap->netcode[6] = 0; + dprintf(_("Message: Operator Logo for %s (%s) network received.\n"), + GetBitmap->netcode, + GSM_GetNetworkName(GetBitmap->netcode)); + GetBitmap->size = MessageBuffer[count++] << 8; + GetBitmap->size += MessageBuffer[count++]; + count++; + GetBitmap->width = MessageBuffer[count++]; + GetBitmap->height = MessageBuffer[count++]; + count++; + tmp = GetBitmap->height * GetBitmap->width / 8; + if (GetBitmap->size > tmp) GetBitmap->size = tmp; + memcpy(GetBitmap->bitmap, MessageBuffer + count, GetBitmap->size); + GetBitmapError = GE_NONE; + } + else dprintf(_("Message: Operator logo received but not requested!\n")); + break; + + case 0x35: /* Get op logo error */ + dprintf(_("Message: Error getting operator logo!\n")); + GetBitmapError = GE_UNKNOWN; + break; + } + break; + + /* Security code requests */ + + case 0x08: + switch(MessageBuffer[3]) { + case 0x08: + *CurrentSecurityCodeStatus = MessageBuffer[4]; + dprintf(_("Message: Security Code status received: ")); + switch(*CurrentSecurityCodeStatus) { + case GSCT_SecurityCode: dprintf(_("waiting for Security Code.\n")); break; + case GSCT_Pin: dprintf(_("waiting for PIN.\n")); break; + case GSCT_Pin2: dprintf(_("waiting for PIN2.\n")); break; + case GSCT_Puk: dprintf(_("waiting for PUK.\n")); break; + case GSCT_Puk2: dprintf(_("waiting for PUK2.\n")); break; + case GSCT_None: dprintf(_("nothing to enter.\n")); break; + default: dprintf(_("Unknown!\n")); break; + } + CurrentSecurityCodeError = GE_NONE; + break; + + case 0x0b: + dprintf(_("Message: Security code accepted.\n")); + CurrentSecurityCodeError = GE_NONE; + break; + + default: + dprintf(_("Message: Security code is wrong. You're not my big owner :-)\n")); + CurrentSecurityCodeError = GE_INVALIDSECURITYCODE; + break; + } + + break; + + /* Network Info */ + + case 0x0a: + + switch (MessageBuffer[3]) { + case 0x71: + /* Make sure we are expecting NetworkInfo frame */ + if (CurrentNetworkInfo && CurrentNetworkInfoError == GE_BUSY) { + sprintf(CurrentNetworkInfo->NetworkCode, "%x%x%x %x%x", MessageBuffer[14] & 0x0f, MessageBuffer[14] >>4, MessageBuffer[15] & 0x0f, MessageBuffer[16] & 0x0f, MessageBuffer[16] >> 4); + sprintf(CurrentNetworkInfo->CellID, "%02x%02x", MessageBuffer[10], MessageBuffer[11]); + sprintf(CurrentNetworkInfo->LAC, "%02x%02x", MessageBuffer[12], MessageBuffer[13]); + + dprintf(_("Message: Network information:\n")); + + dprintf(_(" CellID: %s\n"), CurrentNetworkInfo->CellID); + dprintf(_(" LAC: %s\n"), CurrentNetworkInfo->LAC); + dprintf(_(" Network code: %s\n"), CurrentNetworkInfo->NetworkCode); + dprintf(_(" Network name: %s (%s)\n"), + GSM_GetNetworkName(CurrentNetworkInfo->NetworkCode), + GSM_GetCountryName(CurrentNetworkInfo->NetworkCode)); + dprintf(_(" Status: ")); + + switch (MessageBuffer[8]) { + case 0x01: dprintf(_("home network selected")); break; + case 0x02: dprintf(_("roaming network")); break; + case 0x03: dprintf(_("requesting network")); break; + case 0x04: dprintf(_("not registered in the network")); break; + default: dprintf(_("unknown")); break; + } + + dprintf("\n"); + + dprintf(_(" Network selection: %s\n"), MessageBuffer[9] == 1 ? _("manual") : _("automatic")); + } + CurrentNetworkInfoError = GE_NONE; + break; + + default: + dprintf(_("Message: Unknown message of type 0x0a\n")); + break; + } + + break; + + /* Display status. */ + + case 0x0d: + switch(MessageBuffer[3]) { + case 0x50: + dprintf("%i %i ", MessageBuffer[6], MessageBuffer[5]); + for (i = 0; i < MessageBuffer[7]; i++) + dprintf("%c", MessageBuffer[9+(i*2)]); + dprintf("\n"); + break; + + case 0x52: + for (i = 0; i < MessageBuffer[4]; i++) + if (MessageBuffer[2*i+6] == 2) + DisplayStatus |= 1 << (MessageBuffer[2*i+5] - 1); + else + DisplayStatus &= (0xff - (1 << (MessageBuffer[2*i+5] - 1))); + dprintf(_("Call in progress: %s\n"), DisplayStatus & (1 << DS_Call_In_Progress) ? "on" : "off"); + dprintf(_("Unknown: %s\n"), DisplayStatus & (1 << DS_Unknown) ? "on" : "off"); + dprintf(_("Unread SMS: %s\n"), DisplayStatus & (1 << DS_Unread_SMS) ? "on" : "off"); + dprintf(_("Voice call: %s\n"), DisplayStatus & (1 << DS_Voice_Call) ? "on" : "off"); + dprintf(_("Fax call active: %s\n"), DisplayStatus & (1 << DS_Fax_Call) ? "on" : "off"); + dprintf(_("Data call active: %s\n"), DisplayStatus & (1 << DS_Data_Call) ? "on" : "off"); + dprintf(_("Keyboard lock: %s\n"), DisplayStatus & (1 << DS_Keyboard_Lock) ? "on" : "off"); + dprintf(_("SMS storage full: %s\n"), DisplayStatus & (1 << DS_SMS_Storage_Full) ? "on" : "off"); + DisplayStatusError = GE_NONE; + break; + + case 0x54: + if (MessageBuffer[5] == 1) { + dprintf(_("Display output successfully disabled/enabled.\n")); + CurrentDisplayOutputError = GE_NONE; + } + break; + + default: + dprintf(_("Unknown message of type 0x0d.\n")); + break; + } + break; + + /* Phone Clock and Alarm */ + + case 0x11: + switch (MessageBuffer[3]) { + case 0x61: + switch (MessageBuffer[4]) { + case 0x01: + dprintf(_("Message: Date and time set correctly\n")); + CurrentSetDateTimeError = GE_NONE; + break; + + default: + dprintf(_("Message: Date and time set error\n")); + CurrentSetDateTimeError = GE_INVALIDDATETIME; + break; + } + break; + + case 0x63: + CurrentDateTime->Year = 256 * MessageBuffer[8] + MessageBuffer[9]; + CurrentDateTime->Month = MessageBuffer[10]; + CurrentDateTime->Day = MessageBuffer[11]; + + CurrentDateTime->Hour = MessageBuffer[12]; + CurrentDateTime->Minute = MessageBuffer[13]; + CurrentDateTime->Second = MessageBuffer[14]; + + dprintf(_("Message: Date and time\n")); + dprintf(_(" Time: %02d:%02d:%02d\n"), CurrentDateTime->Hour, CurrentDateTime->Minute, CurrentDateTime->Second); + dprintf(_(" Date: %4d/%02d/%02d\n"), CurrentDateTime->Year, CurrentDateTime->Month, CurrentDateTime->Day); + + CurrentDateTimeError = GE_NONE; + break; + + case 0x6c: + switch (MessageBuffer[4]) { + case 0x01: + dprintf(_("Message: Alarm set correctly\n")); + CurrentSetAlarmError = GE_NONE; + break; + + default: + dprintf(_("Message: Date and time set error\n")); + CurrentSetAlarmError = GE_INVALIDDATETIME; + break; + } + break; + + case 0x6e: + dprintf(_("Message: Alarm\n")); + dprintf(_(" Alarm: %02d:%02d\n"), MessageBuffer[9], MessageBuffer[10]); + dprintf(_(" Alarm is %s\n"), (MessageBuffer[8] == 2) ? _("on") : _("off")); + + CurrentAlarm->Hour = MessageBuffer[9]; + CurrentAlarm->Minute = MessageBuffer[10]; + CurrentAlarm->Second = 0; + CurrentAlarm->AlarmEnabled = (MessageBuffer[8] == 2); + CurrentAlarmError = GE_NONE; + break; + + default: + dprintf(_("Message: Unknown message of type 0x11\n")); + break; + } + break; + + /* Calendar notes handling */ + + case 0x13: + switch (MessageBuffer[3]) { + case 0x65: + switch(MessageBuffer[4]) { + case 0x01: /* This message is also sent when the user enters the new entry on keypad */ + dprintf(_("Message: Calendar note write succesfull!\n")); + CurrentCalendarNoteError = GE_NONE; + break; + case 0x73: + dprintf(_("Message: Calendar note write failed!\n")); + CurrentCalendarNoteError = GE_INTERNALERROR; + break; + case 0x7d: + dprintf(_("Message: Calendar note write failed!\n")); + CurrentCalendarNoteError = GE_INTERNALERROR; + break; + default: + dprintf(_("Unknown message of type 0x13 and subtype 0x65\n")); + break; + } + + break; + + case 0x67: + + switch (MessageBuffer[4]) { + + case 0x01: + + CurrentCalendarNote->Type = MessageBuffer[8]; + + CurrentCalendarNote->Time.Year = 256 * MessageBuffer[9] + MessageBuffer[10]; + CurrentCalendarNote->Time.Month = MessageBuffer[11]; + CurrentCalendarNote->Time.Day = MessageBuffer[12]; + + CurrentCalendarNote->Time.Hour = MessageBuffer[13]; + CurrentCalendarNote->Time.Minute = MessageBuffer[14]; + CurrentCalendarNote->Time.Second = MessageBuffer[15]; + + CurrentCalendarNote->Alarm.Year = 256 * MessageBuffer[16] + MessageBuffer[17]; + CurrentCalendarNote->Alarm.Month = MessageBuffer[18]; + CurrentCalendarNote->Alarm.Day = MessageBuffer[19]; + + CurrentCalendarNote->Alarm.Hour = MessageBuffer[20]; + CurrentCalendarNote->Alarm.Minute = MessageBuffer[21]; + CurrentCalendarNote->Alarm.Second = MessageBuffer[22]; + + memcpy(CurrentCalendarNote->Text, MessageBuffer + 24, MessageBuffer[23]); + CurrentCalendarNote->Text[MessageBuffer[23]] = 0; + + if (CurrentCalendarNote->Type == GCN_CALL) { + memcpy(CurrentCalendarNote->Phone,MessageBuffer + 24 + MessageBuffer[23] + 1,MessageBuffer[24+MessageBuffer[23]]); + CurrentCalendarNote->Phone[MessageBuffer[24+MessageBuffer[23]]] = 0; + } + + dprintf(_("Message: Calendar note received.\n")); + dprintf(_(" Date: %d-%02d-%02d\n"), CurrentCalendarNote->Time.Year, + CurrentCalendarNote->Time.Month, + CurrentCalendarNote->Time.Day); + dprintf(_(" Time: %02d:%02d:%02d\n"), CurrentCalendarNote->Time.Hour, + CurrentCalendarNote->Time.Minute, + CurrentCalendarNote->Time.Second); + + /* Some messages do not have alarm set up */ + + if (CurrentCalendarNote->Alarm.Year != 0) { + dprintf(_(" Alarm date: %d-%02d-%02d\n"), CurrentCalendarNote->Alarm.Year, + CurrentCalendarNote->Alarm.Month, + CurrentCalendarNote->Alarm.Day); + dprintf(_(" Alarm time: %02d:%02d:%02d\n"), CurrentCalendarNote->Alarm.Hour, + CurrentCalendarNote->Alarm.Minute, + CurrentCalendarNote->Alarm.Second); + } + + dprintf(_(" Type: %d\n"), CurrentCalendarNote->Type); + dprintf(_(" Text: %s\n"), CurrentCalendarNote->Text); + if (CurrentCalendarNote->Type == GCN_CALL) + dprintf(_(" Phone: %s\n"), CurrentCalendarNote->Phone); + CurrentCalendarNoteError = GE_NONE; + break; + + case 0x93: + dprintf(_("Message: Calendar note not available\n")); + CurrentCalendarNoteError = GE_INVALIDCALNOTELOCATION; + break; + + default: + dprintf(_("Message: Calendar note error\n")); + CurrentCalendarNoteError = GE_INTERNALERROR; + break; + } + break; + + case 0x69: + switch (MessageBuffer[4]) { + /* This message is also sent when the user deletes an old entry on + keypad or moves an old entry somewhere (there is also `write' + message). */ + case 0x01: + dprintf(_("Message: Calendar note deleted\n")); + CurrentCalendarNoteError = GE_NONE; + break; + case 0x93: + dprintf(_("Message: Calendar note can't be deleted\n")); + CurrentCalendarNoteError = GE_INVALIDCALNOTELOCATION; + break; + default: + dprintf(_("Message: Calendar note deleting error\n")); + CurrentCalendarNoteError = GE_INTERNALERROR; + break; + } + + break; + + case 0x6a: + /* Jano will probably implement something similar to IncomingCall + notification for easy integration into xgnokii */ + dprintf(_("Message: Calendar Alarm active\n")); + dprintf(_(" Item number: %d\n"), MessageBuffer[4]); + break; + + default: + dprintf(_("Message: Unknown message of type 0x13\n")); + break; + } + + break; + + /* SMS Messages frame received */ + + case 0x14: + switch (MessageBuffer[3]) { + case 0x08: + switch (MessageBuffer[7]) { + case 0x00: + CurrentSMSMessage->Type = GST_MT; + offset = 4; + break; + case 0x01: + CurrentSMSMessage->Type = GST_DR; + offset = 3; + break; + case 0x02: + CurrentSMSMessage->Type = GST_MO; + offset = 5; + break; + default: + CurrentSMSMessage->Type = GST_UN; + offset = 4; /* ??? */ + break; + } + + /* Field Short Message Status - MessageBuffer[4] seems not to be + compliant with GSM 07.05 spec. + Meaning Nokia protocol GMS spec + ---------------------------------------------------- + MO Sent 0x05 0x07 or 0x01 + MO Not sent 0x07 0x06 or 0x00 + MT Read 0x01 0x05 or 0x01 + MT Not read 0x03 0x04 or 0x00 + ---------------------------------------------------- + See GSM 07.05 section 2.5.2.6 and correct me if I'm wrong. + + Pawel Kot */ + + if (MessageBuffer[4] & 0x02) + CurrentSMSMessage->Status = GSS_NOTSENTREAD; + else + CurrentSMSMessage->Status = GSS_SENTREAD; + + off = 0; + if (MessageBuffer[20] & 0x40) { + switch (MessageBuffer[40+offset]) { + case 0x00: /* concatenated messages */ + dprintf(_("Concatenated message!!!\n")); + CurrentSMSMessage->UDHType = GSM_ConcatenatedMessages; + if (MessageBuffer[41+offset] != 0x03) { + /* should be some error */ + } + break; + case 0x05: /* logos */ + switch (MessageBuffer[43+offset]) { + case 0x82: + CurrentSMSMessage->UDHType = GSM_OpLogo; + break; + case 0x83: + CurrentSMSMessage->UDHType = GSM_CallerIDLogo; + break; + } + break; + default: + break; + } + /* Skip user data header when reading data */ + off = (MessageBuffer[39+offset] + 1); + for (i = 0; i < off; i++) + CurrentSMSMessage->UDH[i] = MessageBuffer[39+offset+i]; + } else { + CurrentSMSMessage->UDHType = GSM_NoUDH; + } + + MessageBuffer[20+offset] = (MessageBuffer[20+offset]+1)/2+1; + + dprintf(_("Number: %d\n"), MessageBuffer[6]); + switch (CurrentSMSMessage->Type) { + case GST_MO: + dprintf(_("Message: Outbox message (mobile originated)\n")); + if (CurrentSMSMessage->Status) + dprintf(_("Sent\n")); + else + dprintf(_("Not sent\n")); + break; + + default: + dprintf(_("Message: Received SMS (mobile terminated)\n")); + if (CurrentSMSMessage->Type == GST_DR) + dprintf(_("Delivery Report\n")); + if (CurrentSMSMessage->Type == GST_UN) + dprintf(_("Unknown type\n")); + + if (CurrentSMSMessage->Status) + dprintf(_("Read\n")); + else + dprintf(_("Not read\n")); + + dprintf(_(" Date: %s "), FB61_GetPackedDateTime(MessageBuffer + 32 + offset)); + + if (MessageBuffer[38+offset]) { + if (MessageBuffer[38+offset] & 0x08) + dprintf("-"); + else + dprintf("+"); + + dprintf(_("%02d00"), (10 * (MessageBuffer[38+offset] & 0x07) + (MessageBuffer[38+offset] >> 4)) / 4); + } + dprintf("\n"); + + if (CurrentSMSMessage->Type == GST_DR) { + dprintf(_(" SMSC response date: %s "), FB61_GetPackedDateTime(MessageBuffer + 39 + offset)); + if (MessageBuffer[45+offset]) { + if (MessageBuffer[45+offset] & 0x08) + dprintf("-"); + else + dprintf("+"); + + dprintf(_("%02d00"),(10 * (MessageBuffer[45+offset] & 0x07) + (MessageBuffer[45+offset] >> 4)) / 4); + } + dprintf("\n"); + } + dprintf(_(" SMS center number: %s\n"), FB61_GetBCDNumber(MessageBuffer + 8)); + dprintf(_(" Remote number: %s\n"), FB61_GetBCDNumber(MessageBuffer + 20 + offset)); + break; + } + + /* In Outbox messages fields: + - datetime + - sender + - message center + are not filled in, so we ignore it. + */ + if (CurrentSMSMessage->Type != GST_MO) { + CurrentSMSMessage->Time.Year = 10 * (MessageBuffer[32+offset] & 0x0f) + (MessageBuffer[32+offset] >> 4); + CurrentSMSMessage->Time.Month = 10 * (MessageBuffer[33+offset] & 0x0f) + (MessageBuffer[33+offset] >> 4); + CurrentSMSMessage->Time.Day = 10 * (MessageBuffer[34+offset] & 0x0f) + (MessageBuffer[34+offset] >> 4); + CurrentSMSMessage->Time.Hour = 10 * (MessageBuffer[35+offset] & 0x0f) + (MessageBuffer[35+offset] >> 4); + CurrentSMSMessage->Time.Minute = 10 * (MessageBuffer[36+offset] & 0x0f) + (MessageBuffer[36+offset] >> 4); + CurrentSMSMessage->Time.Second = 10 * (MessageBuffer[37+offset] & 0x0f) + (MessageBuffer[37+offset] >> 4); + CurrentSMSMessage->Time.Timezone = (10 * (MessageBuffer[38+offset] & 0x07) + (MessageBuffer[38+offset] >> 4)) / 4; + if (MessageBuffer[38+offset] & 0x08) + CurrentSMSMessage->Time.Timezone = -CurrentSMSMessage->Time.Timezone; + strcpy(CurrentSMSMessage->Sender, FB61_GetBCDNumber(MessageBuffer + 20 + offset)); + strcpy(CurrentSMSMessage->MessageCenter.Number, FB61_GetBCDNumber(MessageBuffer + 8)); + } + + if (CurrentSMSMessage->Type != GST_DR) { + /* 8bit SMS */ + if ((MessageBuffer[18+offset] & 0xf4) == 0xf4) { + CurrentSMSMessage->EightBit = true; + tmp=CurrentSMSMessage->Length=MessageBuffer[19+offset]; + offset += off; + memcpy(output, MessageBuffer - 39 - offset - 2, tmp - offset); + /* 7bit SMS */ + } else { + CurrentSMSMessage->EightBit = false; + CurrentSMSMessage->Length=MessageBuffer[19+offset] - (off * 8 + ((7-off)%7)) / 7; + offset += off; + tmp=UnpackEightBitsToSeven((7-off)%7, MessageLength - 39 - offset - 2, CurrentSMSMessage->Length, MessageBuffer + 39 + offset, output); + } + for (i = 0; i < tmp;i++) { + dprintf("%c", GSM_Default_Alphabet[output[i]]); + CurrentSMSMessage->MessageText[i] = GSM_Default_Alphabet[output[i]]; + } + } else { /* CurrentSMSMessage->Type == GST_DR (Delivery Report) */ + /* SMSC Response time */ + CurrentSMSMessage->SMSCTime.Year = 10 * (MessageBuffer[39+offset] & 0x0f) + (MessageBuffer[39+offset] >> 4); + CurrentSMSMessage->SMSCTime.Month = 10 * (MessageBuffer[40+offset] & 0x0f) + (MessageBuffer[40+offset] >> 4); + CurrentSMSMessage->SMSCTime.Day = 10 * (MessageBuffer[41+offset] & 0x0f) + (MessageBuffer[41+offset] >> 4); + CurrentSMSMessage->SMSCTime.Hour = 10 * (MessageBuffer[42+offset] & 0x0f) + (MessageBuffer[42+offset] >> 4); + CurrentSMSMessage->SMSCTime.Minute = 10 * (MessageBuffer[43+offset] & 0x0f) + (MessageBuffer[43+offset] >> 4); + CurrentSMSMessage->SMSCTime.Second = 10 * (MessageBuffer[44+offset] & 0x0f) + (MessageBuffer[44+offset] >> 4); + CurrentSMSMessage->SMSCTime.Timezone = (10 * (MessageBuffer[45+offset] & 0x07) + (MessageBuffer[45+offset] >> 4)) / 4; + if (MessageBuffer[45+offset] & 0x08) CurrentSMSMessage->SMSCTime.Timezone = -CurrentSMSMessage->SMSCTime.Timezone; + if (MessageBuffer[22] < 0x03) { + strcpy(CurrentSMSMessage->MessageText, _("Delivered")); + switch (MessageBuffer[22]) { + case 0x00: + dprintf(_("SM received by the SME")); + break; + case 0x01: + dprintf(_("SM forwarded by the SC to the SME but the SC is unable to confirm delivery")); + break; + case 0x02: + dprintf(_("SM replaced by the SC")); + break; + } + CurrentSMSMessage->Length = tmp = 10; + } else if (MessageBuffer[22] & 0x40) { + + strcpy(CurrentSMSMessage->MessageText, _("Failed")); + + /* more detailed reason only for debug */ + + if (MessageBuffer[22] & 0x20) { + dprintf(_("Temporary error, SC is not making any more transfer attempts\n")); + + switch (MessageBuffer[22]) { + case 0x60: + dprintf(_("Congestion")); + break; + case 0x61: + dprintf(_("SME busy")); + break; + case 0x62: + dprintf(_("No response from SME")); + break; + case 0x63: + dprintf(_("Service rejected")); + break; + case 0x64: + dprintf(_("Quality of service not aviable")); + break; + case 0x65: + dprintf(_("Error in SME")); + break; + default: + dprintf(_("Reserved/Specific to SC: %x"), MessageBuffer[22]); + break; + } + } else { + dprintf(_("Permanent error, SC is not making any more transfer attempts\n")); + switch (MessageBuffer[22]) { + case 0x40: + dprintf(_("Remote procedure error")); + break; + case 0x41: + dprintf(_("Incompatibile destination")); + break; + case 0x42: + dprintf(_("Connection rejected by SME")); + break; + case 0x43: + dprintf(_("Not obtainable")); + break; + case 0x44: + dprintf(_("Quality of service not aviable")); + break; + case 0x45: + dprintf(_("No internetworking available")); + break; + case 0x46: + dprintf(_("SM Validity Period Expired")); + break; + case 0x47: + dprintf(_("SM deleted by originating SME")); + break; + case 0x48: + dprintf(_("SM Deleted by SC Administration")); + break; + case 0x49: + dprintf(_("SM does not exist")); + break; + default: + dprintf(_("Reserved/Specific to SC: %x"), MessageBuffer[22]); + break; + } + } + CurrentSMSMessage->Length = tmp = 6; + } else if (MessageBuffer[22] & 0x20) { + strcpy(CurrentSMSMessage->MessageText, _("Pending")); + + /* more detailed reason only for debug */ + dprintf(_("Temporary error, SC still trying to transfer SM\n")); + switch (MessageBuffer[22]) { + case 0x20: + dprintf(_("Congestion")); + break; + case 0x21: + dprintf(_("SME busy")); + break; + case 0x22: + dprintf(_("No response from SME")); + break; + case 0x23: + dprintf(_("Service rejected")); + break; + case 0x24: + dprintf(_("Quality of service not aviable")); + break; + case 0x25: + dprintf(_("Error in SME")); + break; + default: + dprintf(_("Reserved/Specific to SC: %x"), MessageBuffer[22]); + break; + } + CurrentSMSMessage->Length = tmp = 7; + } else { + strcpy(CurrentSMSMessage->MessageText, _("Unknown")); + + /* more detailed reason only for debug */ + dprintf(_("Reserved/Specific to SC: %x"), MessageBuffer[22]); + CurrentSMSMessage->Length = tmp = 8; + } + } + + CurrentSMSMessage->MessageText[CurrentSMSMessage->Length] = 0; + + CurrentSMSPointer = tmp; + + CurrentSMSMessage->MemoryType = MessageBuffer[5]; + CurrentSMSMessage->MessageNumber = MessageBuffer[6]; + + /* Signal no error to calling code. */ + + CurrentSMSMessageError = GE_NONE; + dprintf("\n"); + break; + + case 0x05: + dprintf(_("Message stored at %d\n"), MessageBuffer[5]); + CurrentSMSMessageError = GE_NONE; + break; + + case 0x06: + dprintf(_("SMS saving failed\n")); + switch (MessageBuffer[4]) { + case 0x02: + dprintf(_(" All locations busy.\n")); + CurrentSMSMessageError = GE_MEMORYFULL; + break; + case 0x03: + dprintf(_(" Invalid location!\n")); + CurrentSMSMessageError = GE_INVALIDSMSLOCATION; + break; + default: + dprintf(_(" Unknown error.\n")); + CurrentSMSMessageError = GE_UNKNOWN; + break; + } + break; + + case 0x09: + /* We have requested invalid or empty location. */ + dprintf(_("Message: SMS reading failed.\n")); + switch (MessageBuffer[4]) { + case 0x02: + dprintf(_(" Invalid location!\n")); + CurrentSMSMessageError = GE_INVALIDSMSLOCATION; + break; + case 0x07: + dprintf(_(" Empty SMS location.\n")); + CurrentSMSMessageError = GE_EMPTYSMSLOCATION; + break; + } + break; + + case 0x0b: /* successful delete */ + dprintf(_("Message: SMS deleted successfully.\n")); + CurrentSMSMessageError = GE_NONE; + break; + + case 0x37: + dprintf(_("Message: SMS Status Received\n")); + dprintf(_(" The number of messages: %d\n"), MessageBuffer[10]); + dprintf(_(" Unread messages: %d\n"), MessageBuffer[11]); + CurrentSMSStatus->UnRead = MessageBuffer[11]; + CurrentSMSStatus->Number = MessageBuffer[10]; + CurrentSMSStatusError = GE_NONE; + break; + + case 0x38: + dprintf(_("Message: SMS Status error, probably not authorized by PIN\n")); + CurrentSMSStatusError = GE_INTERNALERROR; + break; + + default: + CurrentSMSStatusError = GE_INTERNALERROR; + break; + + } + break; + + + /* Internal phone functions? */ + + case 0x40: + + switch(MessageBuffer[2]) { + + case 0x7e: + + switch(MessageBuffer[3]) { + case 0x00: + dprintf(_("Message: Netmonitor correctly set.\n")); + CurrentNetmonitorError = GE_NONE; + break; + default: + dprintf(_("Message: Netmonitor menu %d received:\n"), MessageBuffer[3]); + dprintf("%s\n", MessageBuffer + 4); + strcpy(CurrentNetmonitor, MessageBuffer + 4); + CurrentNetmonitorError = GE_NONE; + break; + } + + break; + + default: + dprintf(_("Unknown message of type 0x40.\n")); + break; + } + break; + + /* Mobile phone identification */ + + case 0x64: +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(IMEI, "%s", MessageBuffer + 9); + sprintf(Model, "%s", MessageBuffer + 25); + sprintf(Revision, "SW%s, HW%s", MessageBuffer + 44, MessageBuffer + 39); +#else + snprintf(IMEI, FB61_MAX_IMEI_LENGTH, "%s", MessageBuffer + 9); + snprintf(Model, FB61_MAX_MODEL_LENGTH, "%s", MessageBuffer + 25); + snprintf(Revision, FB61_MAX_REVISION_LENGTH, "SW%s, HW%s", MessageBuffer + 44, MessageBuffer + 39); +#endif + + dprintf(_("Message: Mobile phone identification received:\n")); + dprintf(_(" IMEI: %s\n"), IMEI); + dprintf(_(" Model: %s\n"), Model); + dprintf(_(" Production Code: %s\n"), MessageBuffer + 31); + dprintf(_(" HW: %s\n"), MessageBuffer + 39); + dprintf(_(" Firmware: %s\n"), MessageBuffer + 44); + + /* These bytes are probably the source of the "Accessory not connected" + messages on the phone when trying to emulate NCDS... I hope.... + UPDATE: of course, now we have the authentication algorithm. */ + + dprintf(_(" Magic bytes: %02x %02x %02x %02x\n"), MessageBuffer[50], MessageBuffer[51], MessageBuffer[52], MessageBuffer[53]); + + MagicBytes[0] = MessageBuffer[50]; + MagicBytes[1] = MessageBuffer[51]; + MagicBytes[2] = MessageBuffer[52]; + MagicBytes[3] = MessageBuffer[53]; + CurrentMagicError = GE_NONE; + break; + + /***** Acknowlegment of our frames. *****/ + case 0x7f: + dprintf(_("[Received Ack of type %02x, seq: %2x]\n"), MessageBuffer[0], MessageBuffer[1]); + AcksReceived++; + FB61_LinkOK = true; + break; + + /***** Power on message. *****/ + case 0xd0: + dprintf(_("Message: The phone is powered on - seq 1.\n")); + break; + + /***** Phone info. *****/ + case 0xd2: +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(Model, "%s", MessageBuffer + 21); + sprintf(Revision, "SW%s", MessageBuffer + 5); +#else + snprintf(Model, FB61_MAX_MODEL_LENGTH, "%s", MessageBuffer + 21); + Model[FB61_MAX_MODEL_LENGTH-1] = 0; + snprintf(Revision, FB61_MAX_SW_LENGTH, "SW%s", MessageBuffer + 5); + Revision[FB61_MAX_SW_LENGTH-1] = 0; +#endif + dprintf(_("Phone info:\n%s\n"), MessageBuffer + 4); + CurrentPhoneInfoError = GE_NONE; + break; + + /***** RLP frame received. *****/ + case 0xf1: + FB61_RX_HandleRLPMessage(); + break; + + /***** Power on message. *****/ + case 0xf4: + dprintf(_("Message: The phone is powered on - seq 2.\n")); + break; + + /***** Unknown message *****/ + /* If you think that you know the exact meaning of other messages - please + let us know. */ + default: + dprintf(_("Message: Unknown message.\n")); + break; + } + return FB61_RX_Sync; +} + +/* RX_State machine for receive handling. Called once for each character + received from the phone/phone. */ + +void FB61_RX_StateMachine(char rx_byte) +{ + static int checksum[2]; +#ifdef WIN32 + static struct _timeb time_now, time_last; + static struct timeval time_diff; +#else + static struct timeval time_now, time_last, time_diff; +#endif + + /* XOR the byte with the current checksum */ + checksum[BufferCount&1] ^= rx_byte; + + switch (RX_State) { + + /* Messages from the phone start with an 0x1e (cable) or 0x1c (IR). + We use this to "synchronise" with the incoming data stream. However, + if we see something else, we assume we have lost sync and we require + a gap of at least 5ms before we start looking again. This is because + the data part of the frame could contain a byte which looks like the + sync byte */ + + case FB61_RX_Discarding: + gettimeofday(&time_now, NULL); + timersub(&time_now, &time_last, &time_diff); + if (time_diff.tv_sec == 0 && time_diff.tv_usec < 5000) { + time_last = time_now; /* no gap seen, continue discarding */ + break; + } + /* else fall through to... */ + + case FB61_RX_Sync: + + if ( CurrentConnectionType == GCT_Infrared ) { + if (rx_byte == FB61_IR_FRAME_ID) { + + if (RX_Multiple == false) BufferCount = 0; + else BufferCount = MessageLength - 2; + RX_State = FB61_RX_GetDestination; + + /* Initialize checksums. */ + checksum[0] = FB61_IR_FRAME_ID; + checksum[1] = 0; + } else { + /* Lost frame sync */ + RX_State = FB61_RX_Discarding; + gettimeofday(&time_last, NULL); + } + } else { /* CurrentConnectionType == GCT_Serial */ + if (rx_byte == FB61_FRAME_ID) { + + if (RX_Multiple == false) BufferCount = 0; + else BufferCount = MessageLength - 2; + RX_State = FB61_RX_GetDestination; + + /* Initialize checksums. */ + checksum[0] = FB61_FRAME_ID; + checksum[1] = 0; + } else { + /* Lost frame sync */ + RX_State = FB61_RX_Discarding; + gettimeofday(&time_last, NULL); + } + } + + break; + + case FB61_RX_GetDestination: + + MessageDestination = rx_byte; + RX_State = FB61_RX_GetSource; + + /* When there is a checksum error and things get out of sync we have to manage to resync */ + /* If doing a data call at the time, finding a 0x1e etc is really quite likely in the data stream */ + /* Then all sorts of horrible things happen because the packet length etc is wrong... */ + /* Therefore we test here for a destination of 0x0c and return to the top if it is not */ + + if (rx_byte != 0x0c) { + RX_State = FB61_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x0c, got %2x\n",rx_byte); + } + break; + + case FB61_RX_GetSource: + MessageSource = rx_byte; + RX_State = FB61_RX_GetType; + + /* Source should be 0x00 */ + + if (rx_byte != 0x00) { + RX_State = FB61_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x00, got %2x\n",rx_byte); + } + break; + + case FB61_RX_GetType: + if ((RX_Multiple == true) && (MessageType != rx_byte)) { + dprintf(_("Interrupted MultiFrame-Message - Ignoring it !!!\n")); + dprintf(_("Please report it ...\n")); + BufferCount = 0; + RX_Multiple = false; + } + + MessageType = rx_byte; + RX_State = FB61_RX_GetUnknown; + break; + + case FB61_RX_GetUnknown: + MessageUnknown = rx_byte; + RX_State = FB61_RX_GetLength; + break; + + case FB61_RX_GetLength: + if (RX_Multiple == true) + MessageLength = MessageLength - 2 + rx_byte; + else + MessageLength = rx_byte; + RX_State = FB61_RX_GetMessage; + break; + + case FB61_RX_GetMessage: + MessageBuffer[BufferCount] = rx_byte; + BufferCount++; + if (BufferCount > FB61_MAX_RECEIVE_LENGTH*6) { + dprintf(_("FB61: Message buffer overun - resetting\n")); + RX_Multiple = false; + RX_State = FB61_RX_Sync; + break; + } + + /* If this is the last byte, it's the checksum. */ + + if (BufferCount == MessageLength + (MessageLength % 2) + 2) { + /* Is the checksum correct? */ + if (checksum[0] == checksum[1]) { + /* We do not want to send ACK of ACKs and ACK of RLP frames. */ + + if (MessageType != FB61_FRTYPE_ACK && MessageType != 0xf1) { + FB61_TX_SendAck(MessageType, MessageBuffer[MessageLength-1] & 0x0f); + if ((MessageLength > 1) && (MessageBuffer[MessageLength-2] != 0x01)) + RX_Multiple = true; + else + RX_Multiple = false; + } + + FB61_RX_DispatchMessage(); + + } + else { + dprintf(_("Bad checksum!\n")); + RX_Multiple = false; /* Just to be sure! */ + } + + RX_State = FB61_RX_Sync; + } + break; + } +} + +/* This function is used for parsing the RLP frame into fields. */ + +enum FB61_RX_States FB61_RX_HandleRLPMessage(void) +{ + RLP_F96Frame frame; + int count; + int valid = true; + + /* We do not need RLP frame parsing to be done when we do not have callback + specified. */ + + if (RLP_RXCallback == NULL) + return (FB61_RX_Sync); + + /* Anybody know the official meaning of the first two bytes? + Nokia 6150 sends junk frames starting D9 01, and real frames starting + D9 00. We'd drop the junk frames anyway because the FCS is bad, but + it's tidier to do it here. We still need to call the callback function + to give it a chance to handle timeouts and/or transmit a frame */ + + if (MessageBuffer[0] == 0xd9 && MessageBuffer[1] == 0x01) + valid = false; + + /* Nokia uses 240 bit frame size of RLP frames as per GSM 04.22 + specification, so Header consists of 16 bits (2 bytes). See section 4.1 + of the specification. */ + + frame.Header[0] = MessageBuffer[2]; + frame.Header[1] = MessageBuffer[3]; + + /* Next 200 bits (25 bytes) contain the Information. We store the + information in the Data array. */ + + for (count = 0; count < 25; count ++) + frame.Data[count] = MessageBuffer[4 + count]; + + /* The last 24 bits (3 bytes) contain FCS. */ + + frame.FCS[0] = MessageBuffer[29]; + frame.FCS[1] = MessageBuffer[30]; + frame.FCS[2] = MessageBuffer[31]; + + /* Here we pass the frame down in the input stream. */ + + RLP_RXCallback(valid ? &frame : NULL); + + return (FB61_RX_Sync); +} + +char *FB61_PrintDevice(int Device) +{ + + switch (Device) { + + case FB61_DEVICE_PHONE: + return _("Phone"); + + case FB61_DEVICE_PC: + return _("PC"); + + default: + return _("Unknown"); + break; + } +} + +/* FB61_RX_DisplayMessage is called when a message we don't know about is + received so that the user can see what is going back and forth, and perhaps + shed some more light/explain another message type! */ + +void FB61_RX_DisplayMessage(void) +{ +#ifdef DEBUG + + int count; + dprintf(_("Msg Dest: %s\n"), FB61_PrintDevice(MessageDestination)); + dprintf(_("Msg Source: %s\n"), FB61_PrintDevice(MessageSource)); + dprintf(_("Msg Type: %02x\n"), MessageType); + dprintf(_("Msg Unknown: %02x\n"), MessageUnknown); + dprintf(_("Msg Len: %02x\nPhone: "), MessageLength); + + for (count = 0; count < MessageLength + (MessageLength % 2) + 2; count ++) + if (isprint(MessageBuffer[count])) + dprintf("[%02x%c]", MessageBuffer[count], MessageBuffer[count]); + else + dprintf("[%02x ]", MessageBuffer[count]); + + dprintf("\n"); +#endif /* DEBUG */ +} + +/* Prepares the message header and sends it, prepends the message start byte + (0x1e) and other values according the value specified when called. + Calculates checksum and then sends the lot down the pipe... */ + +int FB61_TX_SendFrame(u8 message_length, u8 message_type, u8 *buffer) +{ + u8 out_buffer[FB61_MAX_TRANSMIT_LENGTH + 5]; + int count, current = 0; + unsigned char checksum; + + /* FIXME - we should check for the message length ... */ + + /* Now construct the message header. */ + + if (CurrentConnectionType == GCT_Infrared) + out_buffer[current++] = FB61_IR_FRAME_ID; /* Start of the IR frame indicator */ + else /* CurrentConnectionType == GCT_Serial */ + out_buffer[current++] = FB61_FRAME_ID; /* Start of the frame indicator */ + + out_buffer[current++] = FB61_DEVICE_PHONE; /* Destination */ + out_buffer[current++] = FB61_DEVICE_PC; /* Source */ + out_buffer[current++] = message_type; /* Type */ + out_buffer[current++] = 0; /* Unknown */ + out_buffer[current++] = message_length; /* Length */ + + /* Copy in data if any. */ + + if (message_length != 0) { + memcpy(out_buffer + current, buffer, message_length); + current += message_length; + } + + /* If the message length is odd we should add pad byte 0x00 */ + if (message_length % 2) + out_buffer[current++] = 0x00; + + /* Now calculate checksums over entire message and append to message. */ + + /* Odd bytes */ + + checksum = 0; + for (count = 0; count < current; count += 2) + checksum ^= out_buffer[count]; + + out_buffer[current++] = checksum; + + /* Even bytes */ + + checksum = 0; + for (count = 1; count < current; count += 2) + checksum ^= out_buffer[count]; + + out_buffer[current++] = checksum; + + dprintf(_("PC: ")); + for (count = 0; count < current; count++) + dprintf("%02x:", out_buffer[count]); + dprintf("\n"); + + /* Send it out... */ + + if (WRITEPHONE(PortFD, out_buffer, current) != current) + return (false); + + if(message_type != 0x7f) + MessagesSent++; + + return (true); +} + +int FB61_TX_SendMessage(u16 message_length, u8 message_type, u8 *buffer) +{ + u8 seqnum, frame_buffer[FB61_MAX_CONTENT_LENGTH + 2]; + u8 nom, lml; /* number of messages, last message len */ + int i; + + seqnum = 0x40 + RequestSequenceNumber; + RequestSequenceNumber = (RequestSequenceNumber + 1) & 0x07; + + if (message_length > FB61_MAX_CONTENT_LENGTH) { + + nom = (message_length + FB61_MAX_CONTENT_LENGTH - 1) + / FB61_MAX_CONTENT_LENGTH; + lml = message_length - ((nom - 1) * FB61_MAX_CONTENT_LENGTH); + + for (i = 0; i < nom - 1; i++) { + + memcpy(frame_buffer, buffer + (i * FB61_MAX_CONTENT_LENGTH), + FB61_MAX_CONTENT_LENGTH); + frame_buffer[FB61_MAX_CONTENT_LENGTH] = nom - i; + frame_buffer[FB61_MAX_CONTENT_LENGTH + 1] = seqnum; + + FB61_TX_SendFrame(FB61_MAX_CONTENT_LENGTH + 2, message_type, + frame_buffer); + + seqnum = RequestSequenceNumber; + RequestSequenceNumber = (RequestSequenceNumber + 1) & 0x07; + } + + memcpy(frame_buffer, buffer + ((nom - 1) * FB61_MAX_CONTENT_LENGTH), lml); + frame_buffer[lml] = 0x01; + frame_buffer[lml + 1] = seqnum; + FB61_TX_SendFrame(lml + 2, message_type, frame_buffer); + + } + else { + memcpy(frame_buffer, buffer, message_length); + frame_buffer[message_length] = 0x01; + frame_buffer[message_length + 1] = seqnum; + FB61_TX_SendFrame(message_length + 2, message_type, frame_buffer); + } + + return (true); +} + +int FB61_TX_SendAck(u8 message_type, u8 message_seq) +{ + unsigned char request[2]; + request[0] = message_type; + request[1] = message_seq; + dprintf(_("[Sending Ack of type %02x, seq: %x]\n"), message_type, message_seq); + return FB61_TX_SendFrame(2, FB61_FRTYPE_ACK, request); +} + + diff --git a/common/gsm-api.c b/common/gsm-api.c new file mode 100644 index 0000000..e967946 --- /dev/null +++ b/common/gsm-api.c @@ -0,0 +1,153 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Provides a generic API for accessing functions on the phone, wherever + possible hiding the model specific details. + + The underlying code should run in it's own thread to allow communications to + the phone to be run independantly of mailing code that calls these API + functions. + + Unless otherwise noted, all functions herein block until they complete. The + functions themselves are defined in a structure in gsm-common.h. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:04 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.32 2001/11/14 11:26:18 pkot + Getting SMS in 6210/7110 does finally work in some cases :) + + Revision 1.31 2001/11/08 16:45:58 pkot + Obsolete old structure, kill treads where possible and make shared library + + Revision 1.30 2001/08/09 11:51:38 pkot + Generic AT support updates and cleanup (Manfred Jonsson) + + Revision 1.29 2001/07/27 00:02:20 pkot + Generic AT support for the new structure (Manfred Jonsson) + + Revision 1.28 2001/06/06 09:05:56 machek + Convert Grab/Release display to new structure. + + Revision 1.27 2001/05/07 14:13:06 machek + nokia-2110 module converted to suit new API better. --identify now works. + + Revision 1.26 2001/04/25 12:54:47 machek + Partly converted nokia 2110 to "new" form, and moved it to phone + directory. + + Revision 1.25 2001/03/26 23:39:21 pkot + Minor updates: + - Windows INLINE patch (Manfred Jonsson) + - patch to configure.in to compile under FreeBSD (Panagiotis Astithas) + - other cleanups (me) + + +*/ + +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "data/rlp-common.h" +#include "gsm-statemachine.h" +#include "phones/nk7110.h" +#include "phones/nk6100.h" +#include "phones/nk3110.h" +#include "phones/nk2110.h" + +GSM_Statemachine GSM_SM; +GSM_Error (*GSM_F)(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); + + +/* GSM_LinkOK is set to true once normal communications with the phone have + been established. */ + +bool *GSM_LinkOK; +bool LinkAlwaysOK = true; + +/* Define pointer to the GSM_Functions structure used by external code to call + relevant API functions. This structure is defined in gsm-common.h. */ + +GSM_Functions *GSM; + +/* Define pointer to the GSM_Information structure used by external code to + obtain information that varies from model to model. This structure is also + defined in gsm-common.h */ + +GSM_Information *GSM_Info; + +/* Initialise interface to the phone. Model number should be a string such as + 3810, 5110, 6110 etc. Device is the serial port to use e.g. /dev/ttyS0, the + user must have write permission to the device. */ + +static GSM_Error register_phone(GSM_Phone *phone, char *model, char *setupmodel, GSM_Statemachine *sm) +{ + GSM_Data data; + GSM_Data *p_data; + if (setupmodel) { + GSM_DataClear(&data); + data.Model = setupmodel; + p_data = &data; + } else { + p_data = NULL; + } + if (strstr(phone->Info.Models, model) != NULL) + return phone->Functions(GOP_Init, p_data, sm); + return GE_UNKNOWNMODEL; +} + +#define MODULE(x) { \ + extern GSM_Functions x##_Functions; \ + extern GSM_Information x##_Information; \ + extern bool x##_LinkOK; \ + if (strstr(x##_Information.Models, model) != NULL) { \ + GSM = & x##_Functions; \ + GSM_Info = & x##_Information; \ + GSM_LinkOK = & x##_LinkOK; \ + return (GSM->Initialise(device, initlength, connection, rlp_callback)); \ + } \ +} + +#define REGISTER_PHONE(x, y) { \ + extern GSM_Phone phone_##x; \ + if ((ret = register_phone(&phone_##x, model, y, sm)) != GE_UNKNOWNMODEL) \ + return ret; \ + } + + +GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_callback)(RLP_F96Frame *frame), GSM_Statemachine *sm) +{ + GSM_Error ret; +#ifndef WIN32 /* MB21 not supported in win32 */ + if (strstr("2110", model)) { + extern GSM_Phone phone_nokia_2110; + memcpy(&(sm->Phone), &phone_nokia_2110, sizeof(GSM_Phone)); + sm->Phone.Functions(GOP_Init, NULL, sm); + } + MODULE(N2110); + + GSM_LinkOK = &LinkAlwaysOK; + sm->Link.ConnectionType=connection; + sm->Link.InitLength=atoi(initlength); + strcpy(sm->Link.PortDevice,device); + + REGISTER_PHONE(nokia_7110, NULL); + REGISTER_PHONE(nokia_6100, NULL); + REGISTER_PHONE(nokia_3110, NULL); + REGISTER_PHONE(at, model); + +#endif /* WIN32 */ + return (GE_UNKNOWNMODEL); +} diff --git a/common/gsm-bitmaps.c b/common/gsm-bitmaps.c new file mode 100644 index 0000000..9361921 --- /dev/null +++ b/common/gsm-bitmaps.c @@ -0,0 +1,253 @@ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Functions for common bitmap operations. + + Last modified: Sat 18 Nov 2000 by Chris Kemp + +*/ + +#include +#include +#include +#include +#include + +#include "gsm-common.h" +#include "gsm-bitmaps.h" +#include "gsm-api.h" + +/* A few useful functions for bitmaps */ + +void GSM_SetPointBitmap(GSM_Bitmap *bmp, int x, int y) +{ + if (bmp->type == GSM_StartupLogo) bmp->bitmap[((y/8)*bmp->width)+x] |= 1 << (y%8); + if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_CallerLogo) bmp->bitmap[(y*bmp->width+x)/8] |= 1 << (7-((y*bmp->width+x)%8)); + + /* Testing only! */ + if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] |= 1 << (7-(x%8)); +} + +void GSM_ClearPointBitmap(GSM_Bitmap *bmp, int x, int y) +{ + if (bmp->type == GSM_StartupLogo) bmp->bitmap[((y/8)*bmp->width)+x] &= 255 - (1 << (y%8)); + if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_CallerLogo) bmp->bitmap[(y*bmp->width+x)/8] &= 255 - (1 << (7-((y*bmp->width+x)%8))); + + /* Testing only ! */ + if (bmp->type == GSM_PictureImage) bmp->bitmap[9*y + (x/8)] &= 255 - (1 << (7-(x%8))); +} + +bool GSM_IsPointBitmap(GSM_Bitmap *bmp, int x, int y) +{ + int i = 0; + + if (bmp->type == GSM_StartupLogo) i = (bmp->bitmap[((y/8)*bmp->width) + x] & 1<<((y%8))); + if (bmp->type == GSM_OperatorLogo || bmp->type == GSM_CallerLogo) + i = (bmp->bitmap[(y*bmp->width+x)/8] & 1 << (7-((y*bmp->width+x)%8))); + /* Testing only ! */ + if (bmp->type == GSM_PictureImage) i = (bmp->bitmap[9*y + (x/8)] & 1<<(7-(x%8))); + + if (i) return true; + else return false; +} + +void GSM_ClearBitmap(GSM_Bitmap *bmp) +{ + int i; + + for (i = 0; i < bmp->size; i++) bmp->bitmap[i] = 0; +} + + +void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target, GSM_Information *info) +{ + GSM_Bitmap backup; + int x,y,copywidth,copyheight; + + /* Copy into the backup */ + memcpy(&backup,bitmap,sizeof(GSM_Bitmap)); + + if (target==GSM_StartupLogo) { + bitmap->width=info->StartupLogoW; + bitmap->height=info->StartupLogoH; + bitmap->size=((bitmap->height/8)+(bitmap->height%8>0))*bitmap->width; + } + if (target==GSM_OperatorLogo) { + bitmap->width=info->OpLogoW; + bitmap->height=info->OpLogoH; + x=bitmap->width*bitmap->height; + bitmap->size=(x/8)+(x%8>0); + } + if (target==GSM_CallerLogo) { + bitmap->width=info->CallerLogoW; + bitmap->height=info->CallerLogoH; + x=bitmap->width*bitmap->height; + bitmap->size=(x/8)+(x%8>0); + } + if (target==GSM_PictureImage) { + bitmap->width=72; + bitmap->height=28; + bitmap->size=bitmap->width*bitmap->height/8; + } + bitmap->type=target; + + if (backup.width>bitmap->width) { + copywidth=bitmap->width; +#ifdef DEBUG + fprintf(stdout,_("We lost some part of image - it's cut (width from %i to %i) !\n"),backup.width,bitmap->width); +#endif /* DEBUG */ + } else copywidth=backup.width; + + if (backup.height>bitmap->height) { + copyheight=bitmap->height; +#ifdef DEBUG + fprintf(stdout,_("We lost some part of image - it's cut (height from %i to %i) !\n"),backup.height,bitmap->height); +#endif /* DEBUG */ + } else copyheight=backup.height; + + + GSM_ClearBitmap(bitmap); + + for (y=0;yheight; y++) { + for (x = 0; x < bitmap->width; x++) { + if (GSM_IsPointBitmap(bitmap, x, y)) { + fprintf(stdout, "#"); + } else { + fprintf(stdout, " "); + } + } + fprintf(stdout, "\n"); + } +} + + +GSM_Error GSM_ReadSMSBitmap(int type, char *message, char *code, GSM_Bitmap *bitmap) +{ + int offset = 0; + + switch (type) { + case SMS_OpLogo: + if (!code) return GE_UNKNOWN; + + bitmap->type = SMS_OpLogo; + + bitmap->netcode[0] = '0' + (message[0] & 0x0f); + bitmap->netcode[1] = '0' + (message[0] >> 4); + bitmap->netcode[2] = '0' + (message[1] & 0x0f); + bitmap->netcode[3] = ' '; + bitmap->netcode[4] = '0' + (message[2] & 0x0f); + bitmap->netcode[5] = '0' + (message[2] >> 4); + bitmap->netcode[6] = 0; + + break; + case SMS_CallerIDLogo: + bitmap->type = SMS_CallerIDLogo; + break; + case SMS_Picture: + offset = 2; + bitmap->type = GSM_PictureImage; + break; + default: /* error */ + return GE_UNKNOWN; + break; + } + bitmap->width = message[0]; + bitmap->height = message[1]; + + bitmap->size = (bitmap->width * bitmap->height) / 8; + memcpy(bitmap->bitmap, message + offset + 2, bitmap->size); + + dprintf("Bitmap from SMS: width %i, height %i\n", bitmap->width, bitmap->height); + + return GE_NONE; +} + + +/* Returns message length */ + +int GSM_SaveSMSBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap) +{ + int current=0; + + char UserDataHeader[7] = { 0x06, /* UDH Length */ + 0x05, /* IEI: application port addressing scheme, 16 bit address */ + 0x04, /* IEI length */ + 0x15, /* destination address: high byte */ + 0x00, /* destination address: low byte */ + 0x00, /* originator address */ + 0x00}; + + char Data[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + /* Default settings for SMS message: + - no delivery report + - Class Message 1 + - no compression + - 8 bit data + - SMSC no. 1 + - validity 3 days + - set UserDataHeaderIndicator + */ + + message->Status = SMS_Sent; + /* Data Coding Scheme */ + message->DCS.Type = SMS_GeneralDataCoding; + message->DCS.u.General.Class = 2; + message->DCS.u.General.Compressed = false; + message->DCS.u.General.Alphabet = SMS_8bit; + + + message->MessageCenter.No = 1; + message->Validity.VPF = SMS_RelativeFormat; + message->Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */ + message->ReplyViaSameSMSC = false; + + switch (bitmap->type) { + case GSM_OperatorLogo: + message->UDH[0].Type = SMS_OpLogo; + UserDataHeader[4] = 0x82; /* NBS port 0x1582 */ + + /* Set the network code */ + Data[current++] = ((bitmap->netcode[1] & 0x0f) << 4) | (bitmap->netcode[0] & 0xf); + Data[current++] = 0xf0 | (bitmap->netcode[2] & 0x0f); + Data[current++] = ((bitmap->netcode[5] & 0x0f) << 4) | (bitmap->netcode[4] & 0xf); + + break; + case GSM_CallerLogo: + message->UDH[0].Type = SMS_CallerIDLogo; + UserDataHeader[4] = 0x83; /* NBS port 0x1583 */ + break; + default: /* error */ + break; + } + + /* Set the logo size */ + current++; + Data[current++] = bitmap->width; + Data[current++] = bitmap->height; + + Data[current++] = 0x01; + + memcpy(message->MessageText, UserDataHeader, 7); + memcpy(message->MessageText, Data, current); + memcpy(message->MessageText+current, bitmap->bitmap, bitmap->size); + + return current; +} diff --git a/common/gsm-common.c b/common/gsm-common.c new file mode 100644 index 0000000..54e63cb --- /dev/null +++ b/common/gsm-common.c @@ -0,0 +1,100 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:59 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.8 2001/11/13 16:12:20 pkot + Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates + + Revision 1.7 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.6 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.5 2001/03/22 16:17:05 chris + Tidy-ups and fixed gnokii/Makefile and gnokii/ChangeLog which I somehow corrupted. + + Revision 1.4 2001/03/21 23:36:04 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.3 2001/02/28 21:26:51 machek + Added StrToMemoryType utility function + + Revision 1.2 2001/02/03 23:56:15 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + Revision 1.1 2001/01/12 14:28:39 pkot + Forgot to add this file. ;-) + + +*/ + +#include +#include "gsm-common.h" + +GSM_Error Unimplemented(void) +{ + return GE_NOTIMPLEMENTED; +} + +GSM_MemoryType StrToMemoryType(const char *s) +{ +#define X(a) if (!strcmp(s, #a)) return GMT_##a; + X(ME); + X(SM); + X(FD); + X(ON); + X(EN); + X(DC); + X(RC); + X(MC); + X(LD); + X(MT); + X(IN); + X(OU); + X(AR); + X(TE); + X(F1); + X(F2); + X(F3); + X(F4); + X(F5); + X(F6); + X(F7); + X(F8); + X(F9); + X(F10); + X(F11); + X(F12); + X(F13); + X(F14); + X(F15); + X(F16); + X(F17); + X(F18); + X(F19); + X(F20); + return GMT_XX; +#undef X +} + +/* This very small function is just to make it */ +/* easier to clear the data struct every time one is created */ +inline void GSM_DataClear(GSM_Data *data) +{ + memset(data, 0, sizeof(GSM_Data)); +} diff --git a/common/gsm-encoding.c b/common/gsm-encoding.c new file mode 100644 index 0000000..b539505 --- /dev/null +++ b/common/gsm-encoding.c @@ -0,0 +1,217 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Functions for encoding SMS, calendar and other things. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:06 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.3 2001/11/17 20:15:31 pkot + Typo in default alphabet + + Revision 1.2 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.1 2001/10/24 22:37:25 pkot + Moved encoding functions to a separate file + + +*/ + +#include + +#define NUMBER_OF_7_BIT_ALPHABET_ELEMENTS 128 + +static unsigned char GSM_DefaultAlphabet[NUMBER_OF_7_BIT_ALPHABET_ELEMENTS] = { + + /* ETSI GSM 03.38, version 6.0.1, section 6.2.1; Default alphabet */ + /* Characters in hex position 10, [12 to 1a] and 24 are not present on + latin1 charset, so we cannot reproduce on the screen, however they are + greek symbol not present even on my Nokia */ + + '@', 0xa3, '$', 0xa5, 0xe8, 0xe9, 0xf9, 0xec, + 0xf2, 0xc7, '\n', 0xd8, 0xf8, '\r', 0xc5, 0xe5, + '?', '_', '?', '?', '?', '?', '?', '?', + '?', '?', '?', '?', 0xc6, 0xe6, 0xdf, 0xc9, + ' ', '!', '\"', '#', 0xa4, '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + 0xa1, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 0xc4, 0xd6, 0xd1, 0xdc, 0xa7, + 0xbf, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 0xe4, 0xf6, 0xf1, 0xfc, 0xe0 +}; + +static unsigned char EncodeWithDefaultAlphabet(unsigned char value) +{ + unsigned char i; + + if (value == '?') return 0x3f; + + for (i = 0; i < NUMBER_OF_7_BIT_ALPHABET_ELEMENTS; i++) + if (GSM_DefaultAlphabet[i] == value) + return i; + + return '?'; +} + +static wchar_t EncodeWithUnicodeAlphabet(unsigned char value) +{ + wchar_t retval; + + if (mbtowc(&retval, &value, 1) == -1) return '?'; + else return retval; +} + +static unsigned char DecodeWithDefaultAlphabet(unsigned char value) +{ + return GSM_DefaultAlphabet[value]; +} + +static unsigned char DecodeWithUnicodeAlphabet(wchar_t value) +{ + unsigned char retval; + + if (wctomb(&retval, value) == -1) return '?'; + else return retval; +} + + +#define ByteMask ((1 << Bits) - 1) + +int Unpack7BitCharacters(int offset, int in_length, int out_length, + unsigned char *input, unsigned char *output) +{ + unsigned char *OUT = output; /* Current pointer to the output buffer */ + unsigned char *IN = input; /* Current pointer to the input buffer */ + unsigned char Rest = 0x00; + int Bits; + + Bits = offset ? offset : 7; + + while ((IN - input) < in_length) { + + *OUT = ((*IN & ByteMask) << (7 - Bits)) | Rest; + Rest = *IN >> Bits; + + /* If we don't start from 0th bit, we shouldn't go to the + next char. Under *OUT we have now 0 and under Rest - + _first_ part of the char. */ + if ((IN != input) || (Bits == 7)) OUT++; + IN++; + + if ((OUT - output) >= out_length) break; + + /* After reading 7 octets we have read 7 full characters but + we have 7 bits as well. This is the next character */ + if (Bits == 1) { + *OUT = Rest; + OUT++; + Bits = 7; + Rest = 0x00; + } else { + Bits--; + } + } + + return OUT - output; +} + +int Pack7BitCharacters(int offset, unsigned char *input, unsigned char *output) +{ + + unsigned char *OUT = output; /* Current pointer to the output buffer */ + unsigned char *IN = input; /* Current pointer to the input buffer */ + int Bits; /* Number of bits directly copied to + the output buffer */ + + Bits = (7 + offset) % 8; + + /* If we don't begin with 0th bit, we will write only a part of the + first octet */ + if (offset) { + *OUT = 0x00; + OUT++; + } + + while ((IN - input) < strlen(input)) { + + unsigned char Byte = EncodeWithDefaultAlphabet(*IN); + *OUT = Byte >> (7 - Bits); + /* If we don't write at 0th bit of the octet, we should write + a second part of the previous octet */ + if (Bits != 7) + *(OUT-1) |= (Byte & ((1 << (7-Bits)) - 1)) << (Bits+1); + + Bits--; + + if (Bits == -1) Bits = 7; + else OUT++; + + IN++; + } + + return (OUT - output); +} + +void DecodeAscii (unsigned char* dest, const unsigned char* src, int len) +{ + int i; + + for (i = 0; i < len; i++) + dest[i] = DecodeWithDefaultAlphabet(src[i]); + return; +} + +void EncodeAscii (unsigned char* dest, const unsigned char* src, int len) +{ + int i; + + for (i = 0; i < len; i++) + dest[i] = EncodeWithDefaultAlphabet(src[i]); + return; +} + +void DecodeUnicode (unsigned char* dest, const unsigned char* src, int len) +{ + int i; + wchar_t wc; + + for (i = 0; i < len; i++) { + wc = src[(2*i)+1] | (src[2*i] << 8); + dest[i] = DecodeWithUnicodeAlphabet(wc); + } + dest[len]=0; + return; +} + +void EncodeUnicode (unsigned char* dest, const unsigned char* src, int len) +{ + int i; + wchar_t wc; + + for (i = 0; i < len; i++) { + wc = EncodeWithUnicodeAlphabet(src[i]); + dest[i*2] = (wc >> 8) &0xff; + dest[(i*2)+1] = wc & 0xff; + } + return; +} diff --git a/common/gsm-error.c b/common/gsm-error.c new file mode 100644 index 0000000..93a0595 --- /dev/null +++ b/common/gsm-error.c @@ -0,0 +1,77 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Error codes. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:58:58 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.1 2001/10/24 22:33:01 pkot + Moved error codes to a separate files + + +*/ + +#include "gsm-error.h" + +char *print_error(GSM_Error e) +{ + switch (e) { + case GE_NONE: return "No error."; + case GE_DEVICEOPENFAILED: return "Couldn't open specified serial device."; + case GE_UNKNOWNMODEL: return "Model specified isn't known/supported."; + case GE_NOLINK: return "Couldn't establish link with phone."; + case GE_TIMEOUT: return "Command timed out."; + case GE_TRYAGAIN: return "Try again."; + case GE_INVALIDSECURITYCODE: return "Invalid Security code."; + case GE_NOTIMPLEMENTED: return "Command called isn't implemented in model."; + case GE_INVALIDSMSLOCATION: return "Invalid SMS location."; + case GE_INVALIDPHBOOKLOCATION: return "Invalid phonebook location."; + case GE_INVALIDMEMORYTYPE: return "Invalid type of memory."; + case GE_INVALIDSPEEDDIALLOCATION: return "Invalid speed dial location."; + case GE_INVALIDCALNOTELOCATION: return "Invalid calendar note location."; + case GE_INVALIDDATETIME: return "Invalid date, time or alarm specification."; + case GE_EMPTYSMSLOCATION: return "SMS location is empty."; + case GE_PHBOOKNAMETOOLONG: return "Phonebook name is too long."; + case GE_PHBOOKNUMBERTOOLONG: return "Phonebook number is too long."; + case GE_PHBOOKWRITEFAILED: return "Phonebook write failed."; + case GE_SMSSENDOK: return "SMS was send correctly."; + case GE_SMSSENDFAILED: return "SMS send fail."; + case GE_SMSWAITING: return "Waiting for the next part of SMS."; + case GE_SMSTOOLONG: return "SMS message too long."; + case GE_SMSWRONGFORMAT: return "Wrong format of the SMS message."; + case GE_NONEWCBRECEIVED: return "Attempt to read CB when no new CB received"; + case GE_INTERNALERROR: return "Problem occured internal to model specific code."; + case GE_CANTOPENFILE: return "Can't open file with bitmap/ringtone"; + case GE_WRONGNUMBEROFCOLORS: return "Wrong number of colors in specified bitmap file"; + case GE_WRONGCOLORS: return "Wrong colors in bitmap file"; + case GE_INVALIDFILEFORMAT: return "Invalid format of file"; + case GE_SUBFORMATNOTSUPPORTED: return "Subformat of file not supported"; + case GE_FILETOOSHORT: return "Too short file to read"; + case GE_FILETOOLONG: return "Too long file to read"; + case GE_INVALIDIMAGESIZE: return "Invalid size of bitmap (in file, sms etc.)"; + case GE_NOTSUPPORTED: return "Function not supported by the phone"; + case GE_BUSY: return "Command is still being executed."; + case GE_USERCANCELED: return "User has cancelled the action."; + case GE_UNKNOWN: return "Unknown error - well better than nothing!!"; + case GE_MEMORYFULL: return "Memory is full"; + case GE_NOTWAITING: return "Not waiting for a response from the phone"; + case GE_NOTREADY: return "Device not ready."; + case GE_LINEBUSY: return "Outgoing call requested reported line busy"; + case GE_NOCARRIER: return "No Carrier error during data call setup ?"; + default: return "Unknown error."; + } +} diff --git a/common/gsm-filetypes.c b/common/gsm-filetypes.c new file mode 100644 index 0000000..117ceff --- /dev/null +++ b/common/gsm-filetypes.c @@ -0,0 +1,1384 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Functions to read and write common file types. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:00 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.18 2001/09/20 21:46:20 pkot + Locale cleanups (Pawel Kot) + + +*/ + +#include +#include +#include +#include +#include + +#include "gsm-common.h" +#include "gsm-filetypes.h" +#include "gsm-bitmaps.h" +#include "gsm-ringtones.h" + +#ifdef XPM +#include +#endif + +#include "misc.h" + +/* Ringtone File Functions */ +/* ####################### */ + + +/* Function to convert scale field in to correct number. */ + +int GetDuration (char *num) +{ + int duration = 0; + + switch (atoi(num)) { + case 1: + duration = 128; + break; + case 2: + duration = 64; + break; + case 4: + duration = 32; + break; + case 8: + duration = 16; + break; + case 16: + duration = 8; + break; + case 32: + duration = 4; + break; + } + return (duration); +} + + +int GetScale (char *num) +{ + /* This may well need improving. */ + int scale=0; + + if ((atoi(num)) < 4) scale = (atoi(num)); + if ((atoi(num)) > 4) scale = (atoi(num)) - 4; + + return (scale); +} + + +/* Currently only reads rttl and ott files - can be later extended to midi etc. */ + +GSM_Error GSM_ReadRingtoneFile(char *FileName, GSM_Ringtone *ringtone) +{ + FILE *file; + GSM_Error error; + GSM_Filetypes filetype; + + file = fopen(FileName, "rb"); + + if (!file) + return(GE_CANTOPENFILE); + + /* FIXME: for now identify the filetype based on the extension */ + /* I don't like this but I haven't got any .ott files to work out a better way */ + + filetype = RTTL; + if (strstr(FileName, ".ott")) filetype = OTT; /* OTT files saved by NCDS3 */ + + error=GE_NONE; + + rewind(file); /* Not necessary for now but safer */ + + switch (filetype) { + case RTTL: + error = loadrttl(file, ringtone); + fclose(file); + break; + case OTT: + error = loadott(file, ringtone); + fclose(file); + break; + default: + error = GE_INVALIDFILEFORMAT; + break; + } + + return(error); +} + + +GSM_Error loadott(FILE *file, GSM_Ringtone *ringtone) +{ + char Buffer[2000]; + int i; + + i = fread(Buffer, 1, 2000, file); + if (!feof(file)) return GE_FILETOOLONG; + return GSM_UnPackRingtone(ringtone, Buffer, i); +} + + +GSM_Error loadrttl(FILE *file, GSM_Ringtone *ringtone) +{ + int NrNote = 0; + + int DefNoteScale = 2; + int DefNoteDuration = 4; + unsigned char buffer[2000]; + unsigned char *def, *notes, *ptr; + + fread(buffer, 2000, 1, file); + + /* This is for buggy RTTTL ringtones without name. */ + if (buffer[0] != RTTTL_SEP[0]) { + strtok(buffer, RTTTL_SEP); + sprintf(ringtone->name, "%s", buffer); + def = strtok(NULL, RTTTL_SEP); + notes = strtok(NULL, RTTTL_SEP); + } else { + sprintf(ringtone->name, "GNOKII"); + def = strtok(buffer, RTTTL_SEP); + notes = strtok(NULL, RTTTL_SEP); + } + + ptr = strtok(def, ", "); + /* Parsing the section. */ + ringtone->tempo=63; + + while (ptr) { + + switch(*ptr) { + case 'd': + case 'D': + DefNoteDuration=GetDuration(ptr+2); + break; + case 'o': + case 'O': + DefNoteScale=GetScale(ptr+2); + break; + case 'b': + case 'B': + ringtone->tempo=atoi(ptr+2); + break; + } + + ptr=strtok(NULL,", "); + } + + dprintf("DefNoteDuration = %d\n", DefNoteDuration); + dprintf("DefNoteScale = %d\n", DefNoteScale); + + /* Parsing the + section. */ + ptr = strtok(notes, ", "); + while (ptr && (NrNote < MAX_RINGTONE_NOTES)) { + + /* [] */ + ringtone->notes[NrNote].duration = GetDuration(ptr); + if (ringtone->notes[NrNote].duration == 0) + ringtone->notes[NrNote].duration = DefNoteDuration; + + /* Skip all numbers in duration specification. */ + while (isdigit(*ptr)) + ptr++; + + /* */ + + if ((*ptr >= 'a') && (*ptr <= 'g')) ringtone->notes[NrNote].note = ((*ptr - 'a') * 2) + 10; + else if ((*ptr >= 'A') && (*ptr <= 'G')) ringtone->notes[NrNote].note = ((*ptr - 'A') * 2) + 10; + else if ((*ptr == 'H') || (*ptr == 'h')) ringtone->notes[NrNote].note = 12; + else ringtone->notes[NrNote].note = 255; + + if ((ringtone->notes[NrNote].note > 13) && (ringtone->notes[NrNote].note != 255)) + ringtone->notes[NrNote].note -= 14; + + ptr++; + + if (*ptr == '#') { + ringtone->notes[NrNote].note++; + if ((ringtone->notes[NrNote].note == 5) || (ringtone->notes[NrNote].note == 13)) + ringtone->notes[NrNote].note++; + ptr++; + } + + /* Check for dodgy rttl */ + /* [] */ + if (*ptr == '.') { + ringtone->notes[NrNote].duration *= 1.5; + ptr++; + } + + /* [] */ + if (ringtone->notes[NrNote].note != 255) { + if (isdigit(*ptr)) { + ringtone->notes[NrNote].note += GetScale(ptr) * 14; + ptr++; + } else { + ringtone->notes[NrNote].note += DefNoteScale * 14; + } + } + + /* [] */ + if (*ptr == '.') { + ringtone->notes[NrNote].duration *= 1.5; + ptr++; + } + + NrNote++; + ptr = strtok(NULL, ", "); + } + + ringtone->NrNotes = NrNote; + + return GE_NONE; +} + + +/* Save the ringtone file - this will overwrite the file */ +/* Confirming must be done before this is called */ +GSM_Error GSM_SaveRingtoneFile(char *FileName, GSM_Ringtone *ringtone) +{ + FILE *file; + GSM_Error error; + + file = fopen(FileName, "wb"); + + if (!file) + return(GE_CANTOPENFILE); + + /* FIXME... */ + /* We need a way of passing these functions a filetype rather than rely on the extension */ + if (strstr(FileName, ".ott")) { + error = saveott(file, ringtone); + } else { + error = saverttl(file, ringtone); + } + fclose(file); + return error; +} + + +GSM_Error saveott(FILE *file, GSM_Ringtone *ringtone) +{ + char Buffer[2000]; + int i=2000; + + /* PackRingtone writes up to i chars and returns in i the number written */ + GSM_PackRingtone(ringtone, Buffer, &i); + + if (i < 2000) { + fwrite(Buffer, 1, i, file); + return GE_NONE; + } else { + return GE_FILETOOLONG; + } +} + +GSM_Error saverttl(FILE *file, GSM_Ringtone *ringtone) +{ + int DefDuration, DefScale = 2, CurrentNote; + int buffer[6]; + int i, j, k = 0; + + /* Saves ringtone name */ + fprintf(file, "%s:", ringtone->name); + + /* Find the most frequently used duration and use this for the default */ + for (i = 0; i < 6; i++) buffer[i] = 0; + for (i = 0; i < ringtone->NrNotes; i++) { + switch (ringtone->notes[i].duration) { + case 192: + buffer[0]++; break; + case 128: + buffer[0]++; break; + case 96: + buffer[1]++; break; + case 64: + buffer[1]++; break; + case 48: + buffer[2]++; break; + case 32: + buffer[2]++; break; + case 24: + buffer[3]++; break; + case 16: + buffer[3]++; break; + case 12: + buffer[4]++; break; + case 8: + buffer[4]++; break; + case 6: + buffer[5]++; break; + case 4: + buffer[5]++; break; + } + } + + /* Now find the most frequently used */ + j = 0; + for (i = 0; i < 6; i++) { + if (buffer[i] > j) { + k = i; + j = buffer[i]; + } + } + + /* Finally convert and save the default duration */ + switch (k) { + case 0: + DefDuration = 128; + fprintf(file, "d=1,"); + break; + case 1: + DefDuration = 64; + fprintf(file, "d=2,"); + break; + case 2: + DefDuration = 32; + fprintf(file, "d=4,"); + break; + case 3: + DefDuration = 16; + fprintf(file, "d=8,"); + break; + case 4: + DefDuration = 8; + fprintf(file, "d=16,"); + break; + case 5: + DefDuration = 4; + fprintf(file, "d=32,"); + break; + default: + DefDuration = 16; + fprintf(file, "d=8,"); + break; + } + + /* Find the most frequently used scale and use this for the default */ + for (i = 0; i < 6; i++) buffer[i] = 0; + for (i = 0; i < ringtone->NrNotes; i++) { + if (ringtone->notes[i].note != 255) { + buffer[ringtone->notes[i].note/14]++; + } + } + j = 0; + for (i = 0; i < 6; i++) { + if (buffer[i] > j) { + DefScale = i; + j = buffer[i]; + } + } + + /* Save the default scale and tempo */ + fprintf(file, "o=%i,", DefScale+4); + fprintf(file, "b=%i:", ringtone->tempo); + + dprintf("DefNoteDuration=%d\n", DefDuration); + dprintf("DefNoteScale=%d\n", DefScale); + dprintf("Number of notes=%d\n",ringtone->NrNotes); + + /* Now loop round for each note */ + for (i = 0; i < ringtone->NrNotes; i++) { + CurrentNote = ringtone->notes[i].note; + + /* This note has a duration different than the default. We must save it */ + if (ringtone->notes[i].duration != DefDuration) { + switch (ringtone->notes[i].duration) { + case 192: //192=128*1.5 + fprintf(file, "1"); break; + case 128: + fprintf(file, "1"); break; + case 96: //96=64*1.5 + fprintf(file, "2"); break; + case 64: + fprintf(file, "2"); break; + case 48: //48=32*1.5 + fprintf(file, "4"); break; + case 32: + fprintf(file, "4"); break; + case 24: //24=16*1.5; + fprintf(file, "8"); break; + case 16: + fprintf(file, "8"); break; + case 12: //12=8*1.5 + fprintf(file, "16"); break; + case 8: + fprintf(file, "16"); break; + case 6: //6=4*1.5 + fprintf(file, "32"); break; + case 4: + fprintf(file, "32"); break; + default: + break; + } + } + + /* Now save the actual note */ + switch (GSM_GetNote(CurrentNote)) { + case Note_C :fprintf(file, "c"); break; + case Note_Cis:fprintf(file, "c#"); break; + case Note_D :fprintf(file, "d"); break; + case Note_Dis:fprintf(file, "d#"); break; + case Note_E :fprintf(file, "e"); break; + case Note_F :fprintf(file, "f"); break; + case Note_Fis:fprintf(file, "f#"); break; + case Note_G :fprintf(file, "g"); break; + case Note_Gis:fprintf(file, "g#"); break; + case Note_A :fprintf(file, "a"); break; + case Note_Ais:fprintf(file, "a#"); break; + case Note_H :fprintf(file, "h"); break; + default :fprintf(file, "p"); break; //Pause ? + } + + /* Saving info about special duration */ + if (ringtone->notes[i].duration == 128 * 1.5 || + ringtone->notes[i].duration == 64 * 1.5 || + ringtone->notes[i].duration == 32 * 1.5 || + ringtone->notes[i].duration == 16 * 1.5 || + ringtone->notes[i].duration == 8 * 1.5 || + ringtone->notes[i].duration == 4 * 1.5) + fprintf(file, "."); + + /* This note has a scale different than the default, so save it */ + if ( (CurrentNote != 255) && (CurrentNote/14 != DefScale)) + fprintf(file, "%i",(CurrentNote/14) + 4); + + /* And a separator before next note */ + if (i!=ringtone->NrNotes - 1) + fprintf(file, ","); + + } + + return GE_NONE; +} + +/* Bitmap file functions */ +/* ##################### */ + +GSM_Error GSM_ReadBitmapFile(char *FileName, GSM_Bitmap *bitmap) +{ + + FILE *file; + unsigned char buffer[300]; + int error; + GSM_Filetypes filetype = None; + + file = fopen(FileName, "rb"); + + if (!file) + return(GE_CANTOPENFILE); + + fread(buffer, 1, 9, file); /* Read the header of the file. */ + + /* Attempt to identify filetype */ + + if (memcmp(buffer, "NOL", 3) == 0) { /* NOL files have 'NOL' at the start */ + filetype = NOL; + } else if (memcmp(buffer, "NGG", 3) == 0) { /* NGG files have 'NGG' at the start */ + filetype = NGG; + } else if (memcmp(buffer, "FORM", 4) == 0) { /* NSL files have 'FORM' at the start */ + filetype = NSL; + } else if (memcmp(buffer, "NLM", 3) == 0) { /* NLM files have 'NLM' at the start */ + filetype = NLM; + } else if (memcmp(buffer, "BM", 2) == 0) { /* BMP, I61 and GGP files have 'BM' at the start */ + filetype = BMP; + } else if (memcmp(buffer, "/* XPM */", 9) == 0) { /* XPM files have 'XPM' at the start */ + filetype = XPMF; + } else filetype = None; + + if (strstr(FileName, ".otb")) filetype = OTA; /* OTA files saved by NCDS3 */ + + rewind(file); + + switch (filetype) { + + case NOL: + error = loadnol(file, bitmap); + fclose(file); + break; + case NGG: + error = loadngg(file, bitmap); + fclose(file); + break; + case NSL: + error = loadnsl(file, bitmap); + fclose(file); + break; + case NLM: + error = loadnlm(file, bitmap); + fclose(file); + break; + case OTA: + error = loadota(file, bitmap); + fclose(file); + break; + case BMP: + error = loadbmp(file, bitmap); + fclose(file); + break; +#ifdef XPM + case XPMF: + fclose(file); + error = loadxpm(FileName, bitmap); + break; +#endif + default: + error = GE_INVALIDFILEFORMAT; + break; + } + + return(error); +} + + +#ifdef XPM + +GSM_Error loadxpm(char *filename, GSM_Bitmap *bitmap) +{ + int error, x, y; + XpmImage image; + XpmInfo info; + + error = XpmReadFileToXpmImage(filename, &image, &info); + + switch (error) { + case XpmColorError: return GE_WRONGCOLORS; break; + case XpmColorFailed: return GE_WRONGCOLORS; break; + case XpmOpenFailed: return GE_CANTOPENFILE; break; + case XpmFileInvalid: return GE_INVALIDFILEFORMAT; break; + case XpmSuccess: break; + default: break; + } + + if (image.ncolors != 2) return GE_WRONGNUMBEROFCOLORS; + + /* All xpms are loaded as startup logos - but can be resized later */ + + bitmap->type = GSM_StartupLogo; + + bitmap->height = image.height; + bitmap->width = image.width; + bitmap->size = ((bitmap->height / 8) + (bitmap->height % 8 > 0)) * bitmap->width; + + if (bitmap->size > GSM_MAX_BITMAP_SIZE) { + fprintf(stdout, "Bitmap too large\n"); + return GE_INVALIDIMAGESIZE; + } + + GSM_ClearBitmap(bitmap); + + for(y = 0; y < image.height; y++) { + for(x = 0; x < image.width; x++) { + if (image.data[y * image.width + x] == 0) GSM_SetPointBitmap(bitmap, x, y); + } + } + + return GE_NONE; +} + +#endif + + +/* Based on the article from the Polish Magazine "Bajtek" 11/92 */ +/* Marcin-Wiacek@Topnet.PL */ + +/* This loads the image as a startup logo - but is resized as necessary later */ + +GSM_Error loadbmp(FILE *file, GSM_Bitmap *bitmap) +{ + unsigned char buffer[34]; + bool first_white; + int w, h, pos, y, x, i, sizeimage; + + bitmap->type = GSM_StartupLogo; + bitmap->width = 84; + bitmap->height = 48; + bitmap->size = bitmap->width * bitmap->height / 8; + + GSM_ClearBitmap(bitmap); + + fread(buffer, 1, 34, file); //required part of header + + h = buffer[22] + 256 * buffer[21]; //height of image in the file + w = buffer[18] + 256 * buffer[17]; //width of image in the file + dprintf("Image Size in BMP file: %dx%d\n", w, h); + + dprintf("Number of colors in BMP file: "); + switch (buffer[28]) { + case 1: dprintf("2 (supported by gnokii)\n"); break; + case 4: dprintf("16 (not supported by gnokii)\n"); break; + case 8: dprintf("256 (not supported by gnokii)\n"); break; + case 24: dprintf("True Color (not supported by gnokii)\n"); break; + default: dprintf("unknown\n"); break; + } + + if (buffer[28] != 1) { + fprintf(stdout, "Wrong number of colors\n"); //we support only 2 colors images ! + return GE_WRONGNUMBEROFCOLORS; + } + + dprintf("Compression in BMP file: "); + switch (buffer[30]) { + case 0: dprintf("no compression (supported by gnokii)\n"); break; + case 1: dprintf("RLE8 (not supported by gnokii)\n"); break; + case 2: dprintf("RLE4 (not supported by gnokii)\n"); break; + default: dprintf("unknown\n"); break; + } + + if (buffer[30] != 0) { + dprintf("Subformat not supported\n"); //we don't support RLE compression + return GE_SUBFORMATNOTSUPPORTED; + } + + pos = buffer[10] - 34; + fread(buffer, 1, pos, file); //rest of header (if exists) and color palette + + dprintf("First color in BMP file: %i %i %i ", buffer[pos-8], buffer[pos-7], buffer[pos-6]); + if (buffer[pos-8] == 0 && buffer[pos-7] == 0 && buffer[pos-6] == 0) dprintf("(white)"); + if (buffer[pos-8] == 0xFF && buffer[pos-7] == 0xFF && buffer[pos-6] == 0xFF) dprintf("(black)"); + if (buffer[pos-8] == 102 && buffer[pos-7] == 204 && buffer[pos-6] == 102) dprintf("(green)"); + dprintf("\n"); + + dprintf("Second color in BMP file: %i %i %i ",buffer[pos-4], buffer[pos-3], buffer[pos-2]); + if (buffer[pos-4] == 0 && buffer[pos-3] == 0 && buffer[pos-2] == 0) dprintf("(white)"); + if (buffer[pos-4] == 0xFF && buffer[pos-3] == 0xFF && buffer[pos-2] == 0xFF) dprintf("(black)"); + dprintf("\n"); + + first_white = true; + if (buffer[pos-8] != 0 || buffer[pos-7] != 0 || buffer[pos-6] != 0) first_white = false; + + sizeimage = 0; + pos = 7; + for (y = h-1; y >= 0; y--) { //lines are written from the last to the first + i = 1; + for (x = 0; x < w; x++) { + if (pos == 7) { //new byte ! + fread(buffer, 1, 1, file); + sizeimage++; + i++; + if (i == 5) i = 1; //each line is written in multiply of 4 bytes + } + if (x <= bitmap->width && y <= bitmap->height) { //we have top left corner ! + if (!first_white) { + if ((buffer[0] & (1 << pos)) <= 0) GSM_SetPointBitmap(bitmap, x, y); + } else { + if ((buffer[0] & (1 << pos)) > 0) GSM_SetPointBitmap(bitmap, x, y); + } + } + pos--; + if (pos < 0) pos = 7; //going to new byte + } + pos = 7; //going to new byte + while (i != 5) { //each line is written in multiples of 4 bytes + fread(buffer, 1, 1, file); + sizeimage++; + i++; + } + } + dprintf("Data size in BMP file: %i\n", sizeimage); + return(GE_NONE); +} + +GSM_Error loadnol(FILE *file, GSM_Bitmap *bitmap) +{ + unsigned char buffer[2000]; + int i, j; + + bitmap->type = GSM_OperatorLogo; + + fread(buffer, 1, 6, file); + fread(buffer, 1, 4, file); + sprintf(bitmap->netcode, "%d %02d", buffer[0] + 256 * buffer[1], buffer[2]); + + fread(buffer, 1, 4, file); /* Width and height of the icon. */ + bitmap->width = buffer[0]; + bitmap->height = buffer[2]; + bitmap->size = bitmap->height * bitmap->width / 8; + + if ((bitmap->height != 14) || (bitmap->width != 72)) { + dprintf("Invalid Image Size (%dx%d).\n",bitmap->width,bitmap->height); + return GE_INVALIDIMAGESIZE; + } + + fread(buffer, 1, 6, file); /* Unknown bytes. */ + + for (i = 0; i < bitmap->size; i++) { + if (fread(buffer, 1, 8, file) == 8) { + bitmap->bitmap[i] = 0; + for (j = 7; j >= 0; j--) + if (buffer[7-j] == '1') + bitmap->bitmap[i] |= (1 << j); + } else { + return(GE_FILETOOSHORT); + } + } + + /* Some programs writes here fileinfo */ + if (fread(buffer, 1, 1, file) == 1) { + dprintf("Fileinfo: %c", buffer[0]); + while (fread(buffer, 1, 1, file) == 1) { + if (buffer[0] != 0x0A) dprintf("%c",buffer[0]); + } + dprintf("\n"); + } + return(GE_NONE); +} + +GSM_Error loadngg(FILE *file, GSM_Bitmap *bitmap) +{ + unsigned char buffer[2000]; + int i, j; + + bitmap->type = GSM_CallerLogo; + + fread(buffer, 1, 6, file); + fread(buffer, 1, 4, file); /* Width and height of the icon. */ + bitmap->width = buffer[0]; + bitmap->height = buffer[2]; + bitmap->size = bitmap->height * bitmap->width / 8; + + if ((bitmap->height != 14) || (bitmap->width != 72)) { + dprintf("Invalid Image Size (%dx%d).\n", bitmap->width, bitmap->height); + return GE_INVALIDIMAGESIZE; + } + + fread(buffer, 1, 6, file); /* Unknown bytes. */ + + for (i = 0; i < bitmap->size; i++) { + if (fread(buffer, 1, 8, file) == 8){ + bitmap->bitmap[i] = 0; + for (j = 7; j >= 0;j--) + if (buffer[7-j] == '1') + bitmap->bitmap[i] |= (1 << j); + } else { + return(GE_FILETOOSHORT); + } + } + + /* Some programs writes here fileinfo */ + if (fread(buffer, 1, 1, file) == 1) { + dprintf("Fileinfo: %c",buffer[0]); + while (fread(buffer, 1, 1, file) == 1) { + if (buffer[0] != 0x0A) dprintf("%c", buffer[0]); + } + dprintf("\n"); + } + return(GE_NONE); +} + +GSM_Error loadnsl(FILE *file, GSM_Bitmap *bitmap) +{ + unsigned char block[6], buffer[505]; + int block_size; + + bitmap->size = 0; + + while (fread(block, 1, 6, file) == 6) { + block_size = block[4] * 256 + block[5]; + dprintf("Block %c%c%c%c, size %i\n", block[0], block[1], block[2], block[3], block_size); + if (!strncmp(block, "FORM", 4)) { + dprintf(" File ID\n"); + } else { + if (block_size > 504) return(GE_INVALIDFILEFORMAT); + + if (block_size != 0) { + + fread(buffer, 1, block_size, file); + buffer[block_size] = 0; //if it's string, we end it with \0 + + if (!strncmp(block, "VERS", 4)) dprintf(" File saved by: %s\n", buffer); + if (!strncmp(block, "MODL", 4)) dprintf(" Logo saved from: %s\n", buffer); + if (!strncmp(block, "COMM", 4)) dprintf(" Phone was connected to COM port: %s\n", buffer); + + if (!strncmp(block, "NSLD", 4)) { + bitmap->type = GSM_StartupLogo; + bitmap->height = 48; + bitmap->width = 84; + bitmap->size = (bitmap->height * bitmap->width) / 8; + + memcpy(bitmap->bitmap, buffer, bitmap->size); + + dprintf(" Startup logo (size %i)\n", block_size); + } + } + } + } + if (bitmap->size == 0) return(GE_FILETOOSHORT); + return(GE_NONE); +} + +GSM_Error loadnlm (FILE *file, GSM_Bitmap *bitmap) +{ + unsigned char buffer[84*48]; + int pos, pos2, x, y; + div_t division; + + fread(buffer, 1, 5, file); + fread(buffer, 1, 1, file); + + switch (buffer[0]) { + case 0x00: + bitmap->type = GSM_OperatorLogo; + break; + case 0x01: + bitmap->type = GSM_CallerLogo; + break; + case 0x02: + bitmap->type = GSM_StartupLogo; + break; + case 0x03: + bitmap->type = GSM_PictureImage; + break; + default: + return(GE_SUBFORMATNOTSUPPORTED); + } + + fread(buffer, 1, 4, file); + bitmap->width = buffer[1]; + bitmap->height = buffer[2]; + bitmap->size = bitmap->width * bitmap->height / 8; + + division = div(bitmap->width, 8); + if (division.rem != 0) division.quot++; /* For startup logos */ + + if (fread(buffer, 1, (division.quot * bitmap->height), file) != (division.quot * bitmap->height)) + return(GE_FILETOOSHORT); + + GSM_ClearBitmap(bitmap); + + pos = 0; pos2 = 7; + for (y = 0; y < bitmap->height; y++) { + for (x = 0; x < bitmap->width; x++) { + if ((buffer[pos] & (1 << pos2)) > 0) GSM_SetPointBitmap(bitmap, x, y); + pos2--; + if (pos2 < 0) {pos2 = 7; pos++;} //going to new byte + } + if (pos2 != 7) {pos2 = 7; pos++;} //for startup logos-new line means new byte + } + return (GE_NONE); +} + +GSM_Error loadota(FILE *file, GSM_Bitmap *bitmap) +{ + char buffer[4]; + + /* We could check for extended info here - indicated by the 7th bit being set in the first byte */ + fread(buffer,1,4,file); + + bitmap->width = buffer[1]; + bitmap->height = buffer[2]; + bitmap->size = bitmap->width * bitmap->height / 8; + + if ((bitmap->height == 48) && (bitmap->width == 84)) { + bitmap->type = GSM_StartupLogo; + } + else if ((bitmap->height == 14) && (bitmap->width == 72)) { + bitmap->type = GSM_CallerLogo; + } else { + dprintf("Invalid Image Size (%dx%d).\n", bitmap->width, bitmap->height); + return GE_INVALIDIMAGESIZE; + } + if (fread(bitmap->bitmap,1,bitmap->size,file) != bitmap->size) + return(GE_FILETOOSHORT); + return(GE_NONE); +} + +/* This overwrites an existing file - so this must be checked before calling */ +GSM_Error GSM_SaveBitmapFile(char *FileName, GSM_Bitmap *bitmap) +{ + FILE *file; + bool done = false; + + /* XPMs are a bit messy because we have to pass it the filename */ + +#ifdef XPM + if (strstr(FileName, ".xpm")) { + savexpm(FileName, bitmap); + } else { +#endif + + file = fopen(FileName, "wb"); + + if (!file) + return(GE_CANTOPENFILE); + + if (strstr(FileName, ".nlm")) { + savenlm(file, bitmap); + done = true; + } + if (strstr(FileName, ".ngg")) { + savengg(file, bitmap); + done = true; + } + if (strstr(FileName, ".nsl")) { + savensl(file, bitmap); + done = true; + } + if (strstr(FileName, ".otb")) { + saveota(file, bitmap); + done = true; + } + if (strstr(FileName, ".nol")) { + savenol(file, bitmap); + done = true; + } + if (strstr(FileName, ".bmp") || + strstr(FileName, ".ggp") || + strstr(FileName, ".i61")) { + savebmp(file, bitmap); + done = true; + } + + if (!done) { + switch (bitmap->type) { + case GSM_CallerLogo: + savengg(file, bitmap); + break; + case GSM_OperatorLogo: + savenol(file, bitmap); + break; + case GSM_StartupLogo: + savensl(file, bitmap); + break; + case GSM_PictureImage: + savenlm(file, bitmap); + break; + case GSM_WelcomeNoteText: + break; + case GSM_DealerNoteText: + break; + case GSM_None: + break; + } + } + fclose(file); +#ifdef XPM + } +#endif + return GE_NONE; +} + + +/* FIXME - this should not ask for confirmation here - I'm not sure what calls it though */ +/* mode == 0 -> overwrite + * mode == 1 -> ask + * mode == 2 -> append + */ +int GSM_SaveTextFile(char *FileName, char *text, int mode) +{ + FILE *file; + int confirm = -1; + char ans[5]; + struct stat buf; + + /* Ask before overwriting */ + if ((mode == 1) && (stat(FileName, &buf) == 0)) { + fprintf(stdout, _("File %s exists.\n"), FileName); + while (confirm < 0) { + fprintf(stderr, _("Overwrite? (yes/no) ")); + GetLine(stdin, ans, 4); + if (!strcmp(ans, _("yes"))) confirm = 1; + else if (!strcmp(ans, _("no"))) confirm = 0; + } + if (!confirm) return -1; + } + + if (mode == 2) file = fopen(FileName, "a"); + else file = fopen(FileName, "w"); + + if (!file) { + fprintf(stderr, _("Failed to write file %s\n"), FileName); + return(-1); + } + fprintf(file, "%s\n", text); + fclose(file); + return 2; +} + + +#ifdef XPM +void savexpm(char *filename, GSM_Bitmap *bitmap) +{ + XpmColor colors[2] = {{".","c","#000000","#000000","#000000","#000000"}, + {"#","c","#ffffff","#ffffff","#ffffff","#ffffff"}}; + XpmImage image; + unsigned int data[6240]; + int x, y; + + image.height = bitmap->height; + image.width = bitmap->width; + image.cpp = 1; + image.ncolors = 2; + image.colorTable = colors; + image.data = data; + + for (y = 0; y < image.height; y++) { + for (x = 0; x < image.width; x++) + if (GSM_IsPointBitmap(bitmap, x, y)) + data[y * image.width + x] = 0; + else + data[y * image.width + x] = 1; + } + + XpmWriteFileFromXpmImage(filename, &image, NULL); +} +#endif + +/* Based on the article from the Polish Magazine "Bajtek" 11/92 */ +/* Marcin-Wiacek@Topnet.PL */ +void savebmp(FILE *file, GSM_Bitmap *bitmap) +{ + int x, y, pos, i, sizeimage; + unsigned char buffer[1]; + div_t division; + + char header[] = { +/*1'st header*/ 'B','M', /* BMP file ID */ + 0x00,0x00,0x00,0x00, /* Size of file */ + 0x00,0x00, /* Reserved for future use */ + 0x00,0x00, /* Reserved for future use */ + 62,0x00,0x00,0x00, /* Offset for image data */ + +/*2'nd header*/ 40,0x00,0x00,0x00, /* Length of this part of header */ + 0x00,0x00,0x00,0x00, /* Width of image */ + 0x00,0x00,0x00,0x00, /* Height of image */ + 1,0x00, /* How many planes in target device */ + 1,0x00, /* How many colors in image. 1 means 2^1=2 colors */ + 0x00,0x00,0x00,0x00, /* Type of compression. 0 means no compression */ +/*Sometimes */ 0x00,0x00,0x00,0x00, /* Size of part with image data */ +/*ttttttt...*/ 0xE8,0x03,0x00,0x00, /* XPelsPerMeter */ +/*hhiiiiissss*/ 0xE8,0x03,0x00,0x00, /* YPelsPerMeter */ +/*part of header*/2,0x00,0x00,0x00, /* How many colors from palette is used */ +/*doesn't exist*/ 0x00,0x00,0x00,0x00, /* How many colors from palette is required to display image. 0 means all */ + +/*Color palette*/ 0x00,0x00,0x00, /* First color in palette in Blue, Green, Red. Here white */ + 0x00, /* Each color in palette is end by 4'th byte */ + 0xFF,0xFF,0xFF, /* Second color in palette in Blue, Green, Red. Here black */ + 0x00}; /* Each color in palette is end by 4'th byte */ + + header[22] = bitmap->height; + header[18] = bitmap->width; + + pos = 7; + sizeimage = 0; + for (y = bitmap->height - 1; y >= 0; y--) { //lines are written from the last to the first + i = 1; + for (x = 0; x < bitmap->width; x++) { + if (pos == 7) { //new byte ! + sizeimage++; + i++; + if (i == 5) i = 1; //each line is written in multiply of 4 bytes + } + pos--; + if (pos < 0) pos = 7; //going to new byte + } + pos = 7; //going to new byte + while (i != 5) { //each line is written in multiply of 4 bytes + sizeimage++; + i++; + } + } + dprintf("Data size in BMP file: %i\n", sizeimage); + division = div(sizeimage, 256); + header[35] = division.quot; + header[34] = sizeimage - (division.quot * 256); + + sizeimage = sizeimage + sizeof(header); + dprintf("Size of BMP file: %i\n", sizeimage); + division = div(sizeimage, 256); + header[3] = division.quot; + header[2] = sizeimage - (division.quot * 256); + + fwrite(header, 1, sizeof(header), file); + + pos = 7; + for (y = bitmap->height - 1; y >= 0; y--) { //lines are written from the last to the first + i = 1; + for (x = 0; x < bitmap->width; x++) { + if (pos == 7) { //new byte ! + if (x != 0) fwrite(buffer, 1, sizeof(buffer), file); + i++; + if(i == 5) i = 1; //each line is written in multiply of 4 bytes + buffer[0] = 0; + } + if (GSM_IsPointBitmap(bitmap, x, y)) buffer[0] |= (1 << pos); + pos--; + if (pos < 0) pos = 7; //going to new byte + } + pos = 7; //going to new byte + fwrite(buffer, 1, sizeof(buffer), file); + while (i != 5) { //each line is written in multiply of 4 bytes + buffer[0] = 0; + fwrite(buffer, 1, sizeof(buffer), file); + i++; + } + } +} + +void savengg(FILE *file, GSM_Bitmap *bitmap) +{ + + char header[] = {'N','G','G',0x00,0x01,0x00, + 0x00,0x00, /* Width */ + 0x00,0x00, /* Height */ + 0x01,0x00,0x01,0x00, + 0x00, /* Unknown.Can't be checksum - for */ + /* the same logo files can be different */ + 0x00}; + + char buffer[8]; + int i, j; + /* This could be the phone info... */ + GSM_Information info={"",0,0,0,0,0,0,0,0,0,0,0,0,0,14,72}; + + GSM_ResizeBitmap(bitmap, GSM_CallerLogo, &info); + + header[6] = bitmap->width; + header[8] = bitmap->height; + + fwrite(header, 1, sizeof(header), file); + + for (i = 0; i < bitmap->size; i++) { + for (j = 7; j >= 0;j--) + if ((bitmap->bitmap[i] & (1 << j)) > 0) { + buffer[7-j] = '1'; + } else { + buffer[7-j] = '0'; + } + fwrite(buffer, 1, 8, file); + } +} + +void savenol(FILE *file, GSM_Bitmap *bitmap) +{ + + char header[] = {'N','O','L',0x00,0x01,0x00, + 0x00,0x00, /* MCC */ + 0x00,0x00, /* MNC */ + 0x00,0x00, /* Width */ + 0x00,0x00, /* Height */ + 0x01,0x00,0x01,0x00, + 0x00, /* Unknown.Can't be checksum - for */ + /* the same logo files can be different */ + 0x00}; + char buffer[8]; + int i, j, country, net; + /* This could be the phone info... */ + GSM_Information info={"",0,0,0,0,0,0,0,0,0,0,0,14,72,0,0}; + + GSM_ResizeBitmap(bitmap, GSM_OperatorLogo, &info); + + sscanf(bitmap->netcode, "%d %d", &country, &net); + + header[6] = country % 256; + header[7] = country / 256; + header[8] = net % 256; + header[9] = net / 256; + header[10] = bitmap->width; + header[12] = bitmap->height; + + fwrite(header, 1, sizeof(header), file); + + for (i = 0; i < bitmap->size; i++) { + for (j = 7; j >= 0; j--) + if ((bitmap->bitmap[i] & (1 << j)) > 0) { + buffer[7-j] = '1'; + } else { + buffer[7-j] = '0'; + } + fwrite(buffer, 1, 8, file); + } +} + +void savensl(FILE *file, GSM_Bitmap *bitmap) +{ + + u8 header[] = {'F','O','R','M', 0x01,0xFE, /* File ID block, size 1*256+0xFE=510*/ + 'N','S','L','D', 0x01,0xF8}; /* Startup Logo block, size 1*256+0xF8=504*/ + /* This could be the phone info... */ + GSM_Information info={"",0,0,0,0,0,0,0,0,0,48,84,0,0,0,0}; + + GSM_ResizeBitmap(bitmap, GSM_StartupLogo, &info); + + fwrite(header, 1, sizeof(header), file); + + fwrite(bitmap->bitmap, 1, bitmap->size, file); +} + +void saveota(FILE *file, GSM_Bitmap *bitmap) +{ + char header[] = {0x01, + 0x00, /* Width */ + 0x00, /* Height */ + 0x01}; + + header[1] = bitmap->width; + header[2] = bitmap->height; + + fwrite(header, 1, sizeof(header), file); + + fwrite(bitmap->bitmap, 1, bitmap->size, file); +} + +void savenlm(FILE *file, GSM_Bitmap *bitmap) +{ + char header[] = {'N','L','M', /* Nokia Logo Manager file ID. */ + 0x20, + 0x01, + 0x00, /* 0x00 (OP), 0x01 (CLI), 0x02 (Startup), 0x03 (Picture)*/ + 0x00, + 0x00, /* Width. */ + 0x00, /* Height. */ + 0x01}; + + unsigned char buffer[11 * 48]; + int x, y, pos, pos2; + div_t division; + + switch (bitmap->type) { + case GSM_OperatorLogo: + header[5] = 0x00; + break; + case GSM_CallerLogo: + header[5] = 0x01; + break; + case GSM_StartupLogo: + header[5] = 0x02; + break; + case GSM_PictureImage: + header[5] = 0x03; + break; + case GSM_WelcomeNoteText: + break; + case GSM_DealerNoteText: + break; + case GSM_None: + break; + } + + header[7] = bitmap->width; + header[8] = bitmap->height; + + pos = 0; pos2 = 7; + for (y = 0; y < bitmap->height; y++) { + for (x = 0; x < bitmap->width; x++) { + if (pos2 == 7) buffer[pos] = 0; + if (GSM_IsPointBitmap(bitmap, x, y)) buffer[pos] |= (1 << pos2); + pos2--; + if (pos2 < 0) {pos2 = 7; pos++;} //going to new line + } + if (pos2 != 7) {pos2 = 7; pos++;} //for startup logos - new line with new byte + } + + division = div(bitmap->width, 8); + if (division.rem != 0) division.quot++; /* For startup logos */ + + fwrite(header, 1, sizeof(header), file); + + fwrite(buffer,1,(division.quot*bitmap->height),file); +} + +GSM_Error GSM_ShowBitmapFile(char *FileName) +{ + FILE *file; + unsigned char buffer[300]; + int error; + GSM_Filetypes filetype = None; + int i, k = 0; + GSM_Bitmap bitmap; + + file = fopen(FileName, "rb"); + + if (!file) + return (GE_CANTOPENFILE); + + fread(buffer, 1, 9, file); + + if (memcmp(buffer, "NOL", 3) == 0) { + filetype = NOL; + } else if (memcmp(buffer, "NGG", 3) == 0) { + filetype = NGG; + } else if (memcmp(buffer, "FORM", 4) == 0) { + filetype = NSL; + } else if (memcmp(buffer, "NLM", 3) == 0) { + filetype = NLM; + } else if (memcmp(buffer, "BM", 2) == 0) { + filetype = BMP; + } else if (memcmp(buffer, "XPM", 3) == 0) { + filetype = XPMF; + } else filetype = None; + + if (strstr(FileName, ".otb")) filetype = OTA; + + rewind(file); + + switch (filetype) { + case NOL: + error = loadnol(file, &bitmap); + fclose(file); + break; + case NGG: + error = loadngg(file, &bitmap); + fclose(file); + break; + case NSL: + error = loadnsl(file, &bitmap); + fclose(file); + break; + case OTA: + error = loadota(file, &bitmap); + fclose(file); + break; + case BMP: + error = loadbmp(file, &bitmap); + fclose(file); + break; +#ifdef XPM + case XPMF: + fclose(file); + error = loadxpm(FileName, &bitmap); + break; +#endif + default: + error = GE_INVALIDFILEFORMAT; + break; + } + + if (error != GE_NONE) + return (error); + + for (i = 0; i < bitmap.size; i++) { + int j; + + for (j = 7; j >= 0; j--) { + if ((bitmap.bitmap[i] & (1 << j))) { + fprintf(stdout, "#"); + } else { + fprintf(stdout, " "); + } + if (!(++k % bitmap.width)) + fprintf(stdout, "\n"); + } + } + + return (GE_NONE); +} diff --git a/common/gsm-networks.c b/common/gsm-networks.c new file mode 100644 index 0000000..2ef285f --- /dev/null +++ b/common/gsm-networks.c @@ -0,0 +1,445 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file implements GSM networks searching. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:00 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.14 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#include +#include "gsm-networks.h" + +GSM_Country GSM_Countries[] = +{ + { "202", "Greece" }, + { "204", "Netherlands" }, + { "206", "Belgium" }, + { "208", "France" }, + { "213", "Andorra" }, + { "214", "Spain" }, + { "216", "Hungary" }, + { "218", "Bosnia Herzegovina" }, + { "219", "Croatia" }, + { "220", "Yugoslavia" }, + { "222", "Italy" }, + { "226", "Romania" }, + { "228", "Switzerland" }, + { "230", "Czech Republic" }, + { "231", "Slovak Republic" }, + { "232", "Austria" }, + { "234", "United Kingdom" }, + { "238", "Denmark" }, + { "240", "Sweden" }, + { "242", "Norway" }, + { "244", "Finland" }, + { "246", "Lithuania" }, + { "247", "Latvia" }, + { "248", "Estonia" }, + { "250", "Russia" }, + { "255", "Ukraine" }, + { "259", "Moldova" }, + { "260", "Poland" }, + { "262", "Germany" }, + { "266", "Gibraltar" }, + { "268", "Portugal" }, + { "270", "Luxembourg" }, + { "272", "Ireland" }, + { "274", "Iceland" }, + { "276", "Albania" }, + { "278", "Malta" }, + { "280", "Cyprus" }, + { "282", "Georgia" }, + { "283", "Armenia" }, + { "284", "Bulgaria" }, + { "286", "Turkey" }, + { "290", "Greenland" }, + { "293", "Slovenia" }, + { "294", "Macedonia" }, + { "302", "Canada" }, + { "310", "Papua New Guinea" }, + { "310", "U.S.A." }, + { "340", "French West Indies" }, + { "400", "Azerbaijan" }, + { "404", "India" }, + { "410", "Pakistan" }, + { "413", "Sri Lanka" }, + { "415", "Lebanon" }, + { "416", "Jordan" }, + { "417", "Syria" }, + { "418", "Iraq" }, + { "419", "Kuwait" }, + { "420", "Saudi Arabia" }, + { "422", "Oman" }, + { "424", "United Arab Emirates" }, + { "425", "Israel" }, + { "426", "Bahrain" }, + { "427", "Qatar" }, + { "432", "Iran" }, + { "434", "Uzbekistan" }, + { "437", "Kyrgyz Republic" }, + { "452", "Vietnam" }, + { "454", "Hong Kong" }, + { "455", "Macau" }, + { "456", "Cambodia" }, + { "457", "Lao" }, + { "460", "China" }, + { "466", "Taiwan" }, + { "470", "Bangladesh" }, + { "502", "Malaysia" }, + { "505", "Australia" }, + { "510", "Indonesia" }, + { "515", "Philippines" }, + { "520", "Thailand" }, + { "525", "Singapore" }, + { "528", "Brunei Darussalam" }, + { "530", "New Zealand" }, + { "542", "Fiji" }, + { "546", "New Caledonia" }, + { "547", "French Polynesia" }, + { "602", "Egypt" }, + { "603", "Algeria" }, + { "604", "Morocco" }, + { "605", "Tunisia" }, + { "608", "Senegal" }, + { "611", "Guinea" }, + { "612", "Cote d'Ivoire" }, + { "615", "Togo" }, + { "617", "Mauritius" }, + { "618", "Liberia" }, + { "620", "Ghana" }, + { "624", "Cameroon" }, + { "625", "Cape Verde" }, + { "633", "Seychelles" }, + { "634", "Mozambique" }, + { "634", "Sudan" }, + { "635", "Rwanda" }, + { "636", "Ethiopia" }, + { "640", "Tanzania" }, + { "641", "Uganda" }, + { "645", "Zambia" }, + { "646", "Madagascar" }, + { "647", "Reunion" }, + { "648", "Zimbabwe" }, + { "649", "Namibia" }, + { "650", "Malawi" }, + { "651", "Lesotho" }, + { "652", "Botswana" }, + { "655", "South Africa" }, + { "730", "Chile" }, + { "734", "Venezuela" }, + + { "undefined", "unknown" } +}; + +GSM_Network GSM_Networks[] = +{ + { "202 01", "Cosmote" }, + { "202 05", "PANAFON" }, + { "202 10", "TELESTET" }, + { "204 04", "LIBERTEL" }, + { "204 08", "KPN Telecom" }, + { "204 12", "Telfort" }, + { "204 16", "BEN" }, + { "204 20", "Dutchtone NV" }, + { "206 01", "PROXIMUS" }, + { "206 10", "Mobistar" }, + { "208 01", "ITINERIS" }, + { "208 10", "SFR" }, + { "208 20", "Bouygues Telecom" }, + { "213 03", "MOBILAND" }, + { "214 01", "Airtel GSM 900-Spain" }, + { "214 03", "Retevision Movil" }, + { "214 07", "MOVISTAR" }, + { "216 01", "Pannon GSM" }, + { "216 70", "Vodafone" }, + { "216 30", "Westel 900" }, + { "218 90", "GSMBIH" }, + { "219 01", "CRONET" }, + { "219 10", "VIP" }, + { "220 01", "MOBTEL" }, + { "220 02", "ProMonte GSM" }, + { "222 01", "Telecom Italia Mobile" }, + { "222 10", "OMNITEL" }, + { "222 88", "Wind Telecomunicazioni SpA" }, + { "226 01", "CONNEX GSM" }, + { "226 10", "DIALOG" }, + { "228 01", "NATEL International" }, + { "228 02", "diAx Mobile AG" }, + { "230 01", "Paegas" }, + { "230 02", "EuroTel" }, + { "230 03", "Oskar" }, + { "231 01", "Globtel" }, + { "231 02", "EuroTel GSM" }, + { "232 01", "A1" }, + { "232 03", "max.mobil." }, + { "232 05", "ONE" }, + { "232 07", "tele.ring" }, + { "234 10", "Cellnet" }, + { "234 15", "Vodafone" }, + { "234 30", "One 2 One" }, + { "234 33", "ORANGE" }, + { "234 50", "Jersey Telecoms GSM" }, + { "234 55", "Guernsey Telecoms GSM" }, + { "234 58", "PRONTO GSM" }, + { "238 01", "TDK-MOBIL" }, + { "238 02", "SONOFON" }, + { "238 20", "TELIA DK" }, + { "238 30", "Mobilix" }, + { "240 01", "Telia AB" }, + { "240 07", "COMVIQ" }, + { "240 08", "EUROPOLITAN" }, + { "242 01", "Telenor Mobil" }, + { "242 02", "NetCom GSM" }, + { "244 03", "Telia City (Finland)" }, + { "244 05", "Radiolinja" }, + { "244 09", "Finnet" }, + { "244 91", "Sonera" }, + { "246 01", "OMNITEL" }, + { "246 02", "Bite GSM" }, + { "247 01", "LMT LV" }, + { "247 02", "BALTCOM GSM" }, + { "248 01", "EMT GSM" }, + { "248 02", "Radiolinja Eesti AS" }, + { "248 03", "Q GSM" }, + { "250 01", "Mobile Telesystems" }, + { "250 02", "North-West GSM" }, + { "250 05", "Siberian Cellular Systems 900" }, + { "250 07", "BM Telecom" }, + { "250 10", "Don Telecom" }, + { "250 12", "FECS-900" }, + { "250 13", "Kuban GSM" }, + { "250 39", "Uraltel" }, + { "250 44", "North Caucasian GSM" }, + { "250 99", "BeeLine" }, + { "255 01", "UMC" }, + { "255 02", "WellCOM" }, + { "255 03", "Kyivstar" }, + { "255 05", "Golden Telecom" }, + { "259 01", "VOXTEL" }, + { "260 01", "PLUS GSM" }, + { "260 02", "ERA GSM" }, + { "260 03", "IDEA Centertel" }, + { "262 01", "D1 TELEKOM" }, + { "262 02", "D2 PRIVAT" }, + { "262 03", "E-Plus" }, + { "262 07", "Interkom" }, + { "266 01", "Gibtel GSM" }, + { "268 01", "TELECEL" }, + { "268 03", "OPTIMUS" }, + { "268 06", "TMN" }, + { "270 01", "LUXGSM" }, + { "270 77", "TANGO" }, + { "272 01", "EIRCELL-GSM" }, + { "272 02", "Digifone" }, + { "274 01", "Landssiminn GSM 900" }, + { "274 02", "TAL hf" }, + { "276 01", "AMC" }, + { "278 01", "Vodafone Malta Limited" }, + { "280 01", "CYTAGSM" }, + { "282 01", "Geocell Limited" }, + { "282 02", "Magti GSM" }, + { "283 01", "ArmGSM" }, + { "284 01", "M-TEL GSM BG" }, + { "286 01", "Turkcell" }, + { "286 02", "TELSIM GSM" }, + { "288 01", "Faroese Telecom" }, + { "290 01", "Tele Greenland" }, + { "293 40", "SI.MOBIL d. d." }, + { "293 41", "MOBITEL" }, + { "294 01", "MobiMak" }, + { "302 37", "Microcell Connexions Inc" }, + { "310 01", "Cellnet" }, + { "310 02", "Sprint Spectrum" }, + { "310 11", "Wireless 2000 Telephone Co." }, + { "310 15", "BellSouth Mobility DCS" }, + { "310 16", "Omnipoint" }, + { "310 17", "Pac Bell" }, + { "310 26", "VOICESTREAM" }, + { "310 27", "Powertel" }, + { "310 31", "AERIAL" }, + { "310 77", "Iowa Wireless Services LP" }, + { "340 01", "AMERIS" }, + { "400 01", "AZERCELL GSM" }, + { "400 02", "Bakcell GSM 2000" }, + { "404 07", "TATA Cellular" }, + { "404 10", "AirTel" }, + { "404 11", "Essar Cellphone" }, + { "404 12", "Escotel" }, + { "404 14", "Modicom" }, + { "404 15", "Essar Cellphone" }, + { "404 20", "Max Touch" }, + { "404 21", "BPL - Mobile" }, + { "404 27", "BPL USWEST Cellular" }, + { "404 30", "Command" }, + { "404 40", "SkyCell" }, + { "404 41", "RPG Cellular" }, + { "404 42", "AIRCEL" }, + { "410 01", "Mobilink" }, + { "413 02", "DIALOG GSM" }, + { "415 01", "CELLIS" }, + { "415 03", "LIBANCELL" }, + { "416 01", "Fastlink" }, + { "417 09", "MOBILE SYRIA" }, + { "419 02", "MTCNet" }, + { "420 01", "Al Jawwal" }, + { "420 07", "E.A.E" }, + { "422 02", "GTO" }, + { "424 02", "UAE-ETISALAT" }, + { "425 01", "Partner Communications Company Ltd" }, + { "426 01", "BHR MOBILE PLUS" }, + { "427 01", "QATARNET" }, + { "432 11", "TCI" }, + { "434 04", "Daewoo Unitel" }, + { "434 05", "Coscom" }, + { "437 01", "Bitel" }, + { "454 00", "TCSL GSM" }, + { "454 04", "HKGHT" }, + { "454 06", "SMARTONE GSM" }, + { "454 10", "New World PCS" }, + { "454 12", "PEOPLES" }, + { "454 16", "SUNDAY" }, + { "455 01", "TELEMOVEL+ GSM900-Macau" }, + { "456 01", "MobiTel" }, + { "456 02", "SAMART-GSM" }, + { "457 01", "Lao Shinawatra Telecom" }, + { "460 00", "China Telecom GSM" }, + { "460 01", "CU-GSM" }, + { "466 01", "Far EasTone Telecoms 900" }, + { "466 06", "TUNTEX GSM 1800" }, + { "466 88", "KG Telecom" }, + { "466 92", "Chunghwa GSM" }, + { "466 93", "MobiTai" }, + { "466 97", "TWNGSM" }, + { "466 99", "TransAsia" }, + { "470 01", "GrameenPhone Ltd" }, + { "470 19", "Mobile 2000" }, + { "502 12", "Maxis Mobile" }, + { "502 13", "TM Touch" }, + { "502 16", "DiGi 1800" }, + { "502 17", "ADAM" }, + { "502 19", "CELCOM" }, + { "505 01", "MobileNet" }, + { "505 02", "OPTUS" }, + { "505 03", "VODAFONE" }, + { "505 08", "One.Tel" }, + { "510 01", "SATELINDO" }, + { "510 10", "TELKOMSEL" }, + { "510 11", "Excelcom" }, + { "515 01", "ISLACOM" }, + { "515 02", "Globe Telecom" }, + { "520 01", "AIS GSM" }, + { "520 10", "WCS" }, + { "520 18", "Worldphone 1800" }, + { "520 23", "HELLO" }, + { "525 01", "SingTel Mobile" }, + { "525 02", "ST-PCN" }, + { "525 03", "MOBILEONE" }, + { "528 11", "DSTCom" }, + { "530 01", "Vodafone New Zealand Limited" }, + { "542 01", "Vodafone" }, + { "546 01", "Mobilis" }, + { "547 20", "VINI" }, + { "602 01", "MobiNil" }, + { "602 02", "Tunicell" }, + { "603 01", "ALGERIAN MOBILE NETWORK" }, + { "604 01", "I A M" }, + { "608 01", "ALIZE" }, + { "611 02", "Lagui" }, + { "612 03", "IVOIRIS" }, + { "612 05", "Telecel" }, + { "615 01", "TOGO CELL" }, + { "617 01", "Cellplus Mobile Comms" }, + { "618 01", "Omega" }, + { "620 01", "SPACEFON" }, + { "625 01", "CVMOVEL" }, + { "633 01", "Seychelles Cellular Services" }, + { "633 10", "AIRTEL" }, + { "634 01", "MobiTel" }, + { "635 10", "Rwandacell" }, + { "636 01", "ETMTN" }, + { "640 01", "TRITEL" }, + { "641 10", "MTN-Uganda" }, + { "642 02", "ANTARIS" }, + { "643 01", "T.D.M GSM 900" }, + { "645 01", "ZAMCELL" }, + { "646 01", "Madacom" }, + { "646 03", "Sacel Madagascar S.A." }, + { "647 10", "SRR" }, + { "648 01", "NET*ONE" }, + { "648 03", "Telecel" }, + { "649 01", "MTC" }, + { "650 01", "Callpoint 900" }, + { "651 01", "Vodacom Lesotho (Pty) Ltd" }, + { "655 01", "Vodacom" }, + { "655 10", "MTN" }, + { "680 38", "NPI Wireless" }, + { "730 01", "Entel Telefonia Movi" }, + { "730 10", "Entel PCS" }, + { "734 01", "Infonet" }, + + { "undefined", "unknown" } +}; + +char *GSM_GetNetworkName(char *NetworkCode) +{ + + int index=0; + + while ( strcmp(GSM_Networks[index].Code, NetworkCode) && + strcmp(GSM_Networks[index].Code, "undefined") ) + index++; + + return GSM_Networks[index].Name; +} + +char *GSM_GetNetworkCode(char *NetworkName) +{ + + int index=0; + + while ( strcmp(GSM_Networks[index].Name, NetworkName) && + strcmp(GSM_Networks[index].Code, "undefined") ) + index++; + + return GSM_Networks[index].Code; +} + +char *GSM_GetCountryName(char *CountryCode) +{ + + int index=0; + + while ( strncmp(GSM_Countries[index].Code, CountryCode, 3) && + strcmp(GSM_Countries[index].Code, "undefined") ) + index++; + + return GSM_Countries[index].Name; +} + +char *GSM_GetCountryCode(char *CountryName) +{ + + int index=0; + + while ( strcmp(GSM_Countries[index].Name, CountryName) && + strcmp(GSM_Countries[index].Code, "undefined") ) + index++; + + return GSM_Countries[index].Code; +} diff --git a/common/gsm-ringtones.c b/common/gsm-ringtones.c new file mode 100644 index 0000000..f99883e --- /dev/null +++ b/common/gsm-ringtones.c @@ -0,0 +1,620 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides support for ringtones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:00 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.3 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.2 2001/09/20 21:46:21 pkot + Locale cleanups (Pawel Kot) + + +*/ + +#include "gsm-ringtones.h" +#include "misc.h" + +/* Beats-per-Minute Encoding */ + +int BeatsPerMinute[] = { + 25, + 28, + 31, + 35, + 40, + 45, + 50, + 56, + 63, + 70, + 80, + 90, + 100, + 112, + 125, + 140, + 160, + 180, + 200, + 225, + 250, + 285, + 320, + 355, + 400, + 450, + 500, + 565, + 635, + 715, + 800, + 900 +}; + +int OctetAlign(unsigned char *Dest, int CurrentBit) +{ + int i=0; + + while((CurrentBit+i)%8) { + ClearBit(Dest, CurrentBit+i); + i++; + } + + return CurrentBit+i; +} + +int OctetAlignNumber(int CurrentBit) +{ + int i=0; + + while((CurrentBit+i)%8) { + i++; + } + + return CurrentBit+i; +} + +int BitPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits) +{ + int i; + + for (i=0; i is always + octet-aligned. */ + StartBit=OctetAlign(package, StartBit); + + StartBit=BitPackByte(package, StartBit, Sound, 7); + StartBit=BitPackByte(package, StartBit, BasicSongType, 3); + + /* Packing the name of the tune. */ + StartBit=BitPackByte(package, StartBit, strlen(ringtone->name)<<4, 4); + StartBit=BitPack(package, StartBit, ringtone->name, 8*strlen(ringtone->name)); + + /* Info about song pattern */ + StartBit=BitPackByte(package, StartBit, 0x01, 8); /* One song pattern */ + StartBit=BitPackByte(package, StartBit, PatternHeaderId, 3); + StartBit=BitPackByte(package, StartBit, A_part, 2); + StartBit=BitPackByte(package, StartBit, 0, 4); /* No loop value */ + + /* Info, how long is contents for SMS */ + HowLong=30+8*strlen(ringtone->name)+17+8+8+13; + + /* Calculate the number of instructions in the tune. + Each Note contains Note and (sometimes) Scale. + Default Tempo and Style are instructions too. */ + HowMany=2; /* Default Tempo and Style */ + + for(i=0; iNrNotes; i++) { + + /* PC Composer 2.0.010 doesn't like, when we start ringtone from pause: + it displays that the format is invalid and + hangs, when you move mouse over place, where pause is */ + if (GSM_GetNote(ringtone->notes[i].note)==Note_Pause && oldscale==10) { + StartNote++; + } else { + + /* we don't write Scale info before "Pause" note - it saves space */ + if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause && + oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) { + + /* We calculate, if we have space to add next scale instruction */ + if (((HowLong+5)/8)<=(*maxlength-1)) { + oldscale=newscale; + HowMany++; + HowLong+=5; + } else { + break; + } + } + + /* We calculate, if we have space to add next note instruction */ + if (((HowLong+12)/8)<=(*maxlength-1)) { + HowMany++; + EndNote++; + HowLong+=12; + } else { + break; + } + } + + /* If we are sure, we pack it for SMS or setting to phone, not for OTT file */ + if (*maxlength<1000) { + /* Pc Composer gives this as the phone limitation */ + if ((EndNote-StartNote)==GSM_MAX_RINGTONE_NOTES-1) break; + } + } + + StartBit=BitPackByte(package, StartBit, HowMany, 8); + + /* Style */ + StartBit=BitPackByte(package, StartBit, StyleInstructionId, 3); + StartBit=BitPackByte(package, StartBit, ContinuousStyle, 2); + + /* Beats per minute/tempo of the tune */ + StartBit=BitPackByte(package, StartBit, TempoInstructionId, 3); + StartBit=BitPackByte(package, StartBit, GetTempo(ringtone->tempo), 5); + + /* Default scale */ + oldscale=10; + + /* Notes packing */ + for(i=StartNote; i<(EndNote+StartNote); i++) { + + /* we don't write Scale info before "Pause" note - it saves place */ + if (GSM_GetNote(ringtone->notes[i].note)!=Note_Pause && + oldscale!=(newscale=GSM_GetScale(ringtone->notes[i].note))) { + oldscale=newscale; + StartBit=BitPackByte(package, StartBit, ScaleInstructionId, 3); + StartBit=BitPackByte(package, StartBit, GSM_GetScale(ringtone->notes[i].note), 2); + } + + /* Note */ + StartBit=BitPackByte(package, StartBit, NoteInstructionId, 3); + StartBit=BitPackByte(package, StartBit, GSM_GetNote(ringtone->notes[i].note), 4); + StartBit=BitPackByte(package, StartBit, GSM_GetDuration(ringtone->notes[i].duration,&spec), 3); + StartBit=BitPackByte(package, StartBit, spec, 2); + } + + StartBit=OctetAlign(package, StartBit); + + StartBit=BitPackByte(package, StartBit, CommandEnd, 8); + + if (StartBit!=OctetAlignNumber(HowLong)) + dprintf("Error in PackRingtone - StartBit different to HowLong %d - %d)\n", StartBit,OctetAlignNumber(HowLong)); + + *maxlength=StartBit/8; + + return(EndNote+StartNote); +} + + +int BitUnPack(unsigned char *Dest, int CurrentBit, unsigned char *Source, int Bits) +{ + int i; + + for (i=0; i is always + octet-aligned. */ + StartBit = OctetUnAlign(StartBit); + + StartBit = BitUnPackInt(package, StartBit, &l, 7); + if (l != Sound) { + dprintf("Not Sound\n"); + return GE_SUBFORMATNOTSUPPORTED; + } + + StartBit = BitUnPackInt(package, StartBit, &l, 3); + if (l != BasicSongType) { + dprintf("Not BasicSongType\n"); + return GE_SUBFORMATNOTSUPPORTED; + } + +/* Getting length of the tune name */ + StartBit = BitUnPackInt(package, StartBit, &l, 4); + l = l >> 4; + +/* Unpacking the name of the tune. */ + StartBit = BitUnPack(package, StartBit, ringtone->name, 8*l); + ringtone->name[l] = 0; + + StartBit = BitUnPackInt(package, StartBit, &l, 8); + if (l != 1) return GE_SUBFORMATNOTSUPPORTED; //we support only one song pattern + + StartBit = BitUnPackInt(package, StartBit, &l, 3); + if (l != PatternHeaderId) { + dprintf("Not PatternHeaderId\n"); + return GE_SUBFORMATNOTSUPPORTED; + } + + StartBit += 2; //Pattern ID - we ignore it + + StartBit = BitUnPackInt(package, StartBit, &l, 4); + + HowMany = 0; + StartBit = BitUnPackInt(package, StartBit, &HowMany, 8); + + scale = 0; + ringtone->NrNotes = 0; + + for (i = 0; i < HowMany; i++) { + + StartBit = BitUnPackInt(package, StartBit, &q, 3); + switch (q) { + case VolumeInstructionId: + StartBit += 4; + break; + case StyleInstructionId: + StartBit = BitUnPackInt(package,StartBit,&l,2); + l = l >> 3; + break; + case TempoInstructionId: + StartBit = BitUnPackInt(package, StartBit, &l, 5); + l = l >> 3; + ringtone->tempo = BeatsPerMinute[l]; + break; + case ScaleInstructionId: + StartBit = BitUnPackInt(package, StartBit, &scale, 2); + scale = scale >> 6; + break; + case NoteInstructionId: + StartBit = BitUnPackInt(package, StartBit, &l, 4); + + switch (l) { + case Note_C :ringtone->notes[ringtone->NrNotes].note = 0; break; + case Note_Cis :ringtone->notes[ringtone->NrNotes].note = 1; break; + case Note_D :ringtone->notes[ringtone->NrNotes].note = 2; break; + case Note_Dis :ringtone->notes[ringtone->NrNotes].note = 3; break; + case Note_E :ringtone->notes[ringtone->NrNotes].note = 4; break; + case Note_F :ringtone->notes[ringtone->NrNotes].note = 6; break; + case Note_Fis :ringtone->notes[ringtone->NrNotes].note = 7; break; + case Note_G :ringtone->notes[ringtone->NrNotes].note = 8; break; + case Note_Gis :ringtone->notes[ringtone->NrNotes].note = 9; break; + case Note_A :ringtone->notes[ringtone->NrNotes].note = 10; break; + case Note_Ais :ringtone->notes[ringtone->NrNotes].note = 11; break; + case Note_H :ringtone->notes[ringtone->NrNotes].note = 12; break; + default :ringtone->notes[ringtone->NrNotes].note = 255; break; //Pause ? + } + + if (ringtone->notes[ringtone->NrNotes].note != 255) + ringtone->notes[ringtone->NrNotes].note = ringtone->notes[ringtone->NrNotes].note + scale*14; + + StartBit = BitUnPackInt(package, StartBit, &duration, 3); + + StartBit = BitUnPackInt(package, StartBit, &spec, 2); + + if (duration==Duration_Full && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=128*3/2; + if (duration==Duration_Full && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=128*2/3; + if (duration==Duration_Full && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=128; + if (duration==Duration_1_2 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=64*3/2; + if (duration==Duration_1_2 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=64*2/3; + if (duration==Duration_1_2 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=64; + if (duration==Duration_1_4 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=32*3/2; + if (duration==Duration_1_4 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=32*2/3; + if (duration==Duration_1_4 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=32; + if (duration==Duration_1_8 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=16*3/2; + if (duration==Duration_1_8 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=16*2/3; + if (duration==Duration_1_8 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=16; + if (duration==Duration_1_16 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=8*3/2; + if (duration==Duration_1_16 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=8*2/3; + if (duration==Duration_1_16 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=8; + if (duration==Duration_1_32 && spec==DottedNote) + ringtone->notes[ringtone->NrNotes].duration=4*3/2; + if (duration==Duration_1_32 && spec==Length_2_3) + ringtone->notes[ringtone->NrNotes].duration=4*2/3; + if (duration==Duration_1_32 && spec==NoSpecialDuration) + ringtone->notes[ringtone->NrNotes].duration=4; + + if (ringtone->NrNotes==MAX_RINGTONE_NOTES) break; + + ringtone->NrNotes++; + break; + default: + dprintf("Unsupported block\n"); + return GE_SUBFORMATNOTSUPPORTED; + } + } + + return GE_NONE; +} + + +GSM_Error GSM_ReadRingtoneFromSMS(GSM_SMSMessage *message, GSM_Ringtone *ringtone) +{ + if (message->UDH[0].Type==SMS_Ringtone) { + return GSM_UnPackRingtone(ringtone, message->MessageText, message->Length); + } else return GE_SUBFORMATNOTSUPPORTED; +} + + +int GSM_SaveRingtoneToSMS(GSM_SMSMessage *message, GSM_Ringtone *ringtone) +{ + int i, j = GSM_MAX_8BIT_SMS_LENGTH; + + char UserDataHeader[7]= { 0x06, /* User Data Header Length */ + 0x05, /* IEI: application port addressing scheme, 16 bit address */ + 0x04, /* IEDL (IED length ?) */ + 0x15, /* destination address: high byte */ + 0x81, /* destination address: low byte */ + 0x15, /* originator address: high byte */ + 0x81}; /* originator address: low byte */ + + /* Default settings for SMS message: + - no delivery report + - Class Message 1 + - no compression + - 8 bit data + - SMSC no. 1 + - validity 3 days + - set UserDataHeaderIndicator + */ + + message->Type = SMS_Sent; + + /* Data Coding Scheme */ + message->DCS.Type = SMS_GeneralDataCoding; + message->DCS.u.General.Class = 2; + message->DCS.u.General.Compressed = false; + message->DCS.u.General.Alphabet = SMS_8bit; + + message->MessageCenter.No = 1; + message->Validity.VPF = SMS_RelativeFormat; + message->Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */ + message->ReplyViaSameSMSC = false; + + message->UDH_No = 1; + message->UDH[0].Type = SMS_Ringtone; + + message->Length = j; + + memcpy(message->MessageText, UserDataHeader, 7); + i = GSM_PackRingtone(ringtone, message->MessageText + 7, &j); + + return i; +} diff --git a/common/gsm-sms.c b/common/gsm-sms.c new file mode 100644 index 0000000..58b21bc --- /dev/null +++ b/common/gsm-sms.c @@ -0,0 +1,782 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Library for parsing and creating Short Messages (SMS). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:06 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.13 2001/11/23 22:07:44 machek + Fix SMS receiving to work, again. Unfortunately, it is not possible to + reuse much of gsm-sms.c... + + Revision 1.12 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.11 2001/11/20 16:22:22 pkot + First attempt to read Picture Messages. They should appear when you enable DEBUG. Nokia seems to break own standards. :/ (Markus Plail) + + Revision 1.10 2001/11/19 13:09:40 pkot + Begin work on sms sending + + Revision 1.9 2001/11/18 00:54:32 pkot + Bugfixes. I18n of the user responses. UDH support in libsms. Business Card UDH Type + + Revision 1.8 2001/11/17 20:19:29 pkot + smslib cleanups, fixes and debugging + + Revision 1.7 2001/11/15 12:15:04 pkot + smslib updates. begin work on sms in 6100 series + + Revision 1.6 2001/11/14 18:21:19 pkot + Fixing some problems with UDH and Unicode, but still doesn't work yet :-( + + Revision 1.5 2001/11/14 14:26:18 pkot + Changed offset of DCS field to the right value in 6210/7110 + + Revision 1.4 2001/11/14 11:26:18 pkot + Getting SMS in 6210/7110 does finally work in some cases :) + + Revision 1.3 2001/11/13 16:12:20 pkot + Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates + + Revision 1.2 2001/11/09 14:25:04 pkot + DEBUG cleanups + + Revision 1.1 2001/11/08 16:23:21 pkot + New version of libsms. Not functional yet, but it reasonably stable API. + + Revision 1.1 2001/07/09 23:06:26 pkot + Moved sms.* files from my hard disk to CVS + +*/ + +#include +#include + +#include "gsm-common.h" +#include "gsm-encoding.h" +#include "gsm-bitmaps.h" + +struct udh_data { + unsigned int length; + char *header; +}; + +/* Number of header specific octets in SMS header (before data) */ +static unsigned short DataOffset[] = { + 4, /* SMS Deliver */ + 3, /* SMS Deliver Report */ + 5, /* SMS Submit */ + 3, /* SMS Submit Report */ + 3, /* SMS Command */ + 3 /* SMS Status Report */ +}; + +/* User data headers */ +static struct udh_data headers[] = { + { 0x00, "" }, + { 0x05, "\x00\x03\x01\x00\x00" }, /* Concatenated messages */ + { 0x06, "\x05\x04\x15\x82\x00\x00" }, /* Operator logos */ + { 0x06, "\x05\x04\x15\x83\x00\x00" }, /* Caller logos */ + { 0x06, "\x05\x04\x15\x81\x00\x00" }, /* Ringtones */ + { 0x04, "\x03\x01\x00\x00" }, /* Voice Messages */ + { 0x04, "\x03\x01\x01\x00" }, /* Fax Messages */ + { 0x04, "\x03\x01\x02\x00" }, /* Email Messages */ + { 0x06, "\x05\x04\x23\xf4\x00\x00" }, /* Business Card */ + { 0x00, "" } +}; + + +/*** + *** Util functions + ***/ + +/* This function implements packing of numbers (SMS Center number and + destination number) for SMS sending function. */ +static int SemiOctetPack(char *Number, unsigned char *Output, SMS_NumberType type) +{ + unsigned char *IN = Number; /* Pointer to the input number */ + unsigned char *OUT = Output; /* Pointer to the output */ + int count = 0; /* This variable is used to notify us about count of already + packed numbers. */ + + /* The first byte in the Semi-octet representation of the address field is + the Type-of-Address. This field is described in the official GSM + specification 03.40 version 6.1.0, section 9.1.2.5, page 33. We support + only international and unknown number. */ + + *OUT++ = type; + if (type == SMS_International) IN++; /* Skip '+' */ + if ((type == SMS_Unknown) && (*IN == '+')) IN++; /* Optional '+' in Unknown number type */ + + /* The next field is the number. It is in semi-octet representation - see + GSM scpecification 03.40 version 6.1.0, section 9.1.2.3, page 31. */ + while (*IN) { + if (count & 0x01) { + *OUT = *OUT | ((*IN - '0') << 4); + OUT++; + } + else + *OUT = *IN - '0'; + count++; IN++; + } + + /* We should also fill in the most significant bits of the last byte with + 0x0f (1111 binary) if the number is represented with odd number of + digits. */ + if (count & 0x01) { + *OUT = *OUT | 0xf0; + OUT++; + } + + return (2 * (OUT - Output - 1) - (count % 2)); +} + +char *GetBCDNumber(u8 *Number) +{ + static char Buffer[20] = ""; + int length = Number[0]; /* This is the length of BCD coded number */ + int count, Digit; + + memset(Buffer, 0, 20); + switch (Number[1]) { + case SMS_Alphanumeric: + Unpack7BitCharacters(0, length, length, Number+2, Buffer); + Buffer[length] = 0; + break; + case SMS_International: + sprintf(Buffer, "+"); + case SMS_Unknown: + case SMS_National: + case SMS_Network: + case SMS_Subscriber: + case SMS_Abbreviated: + default: + for (count = 0; count < length - 1; count++) { + Digit = Number[count+2] & 0x0f; + if (Digit < 10) sprintf(Buffer, "%s%d", Buffer, Digit); + Digit = Number[count+2] >> 4; + if (Digit < 10) sprintf(Buffer, "%s%d", Buffer, Digit); + } + break; + } + return Buffer; +} + +static char *PrintDateTime(u8 *Number) +{ + static char Buffer[23] = ""; + + memset(Buffer, 0, 23); + if (Number[0] < 70) sprintf(Buffer, "20"); + else sprintf(Buffer, "19"); + sprintf(Buffer, "%s%d%d-", Buffer, Number[0] & 0x0f, Number[0] >> 4); + sprintf(Buffer, "%s%d%d-", Buffer, Number[1] & 0x0f, Number[1] >> 4); + sprintf(Buffer, "%s%d%d ", Buffer, Number[2] & 0x0f, Number[2] >> 4); + sprintf(Buffer, "%s%d%d:", Buffer, Number[3] & 0x0f, Number[3] >> 4); + sprintf(Buffer, "%s%d%d:", Buffer, Number[4] & 0x0f, Number[4] >> 4); + sprintf(Buffer, "%s%d%d", Buffer, Number[5] & 0x0f, Number[5] >> 4); + if (Number[6] & 0x08) + sprintf(Buffer, "%s-", Buffer); + else + sprintf(Buffer, "%s+", Buffer); + sprintf(Buffer, "%s%02d00", Buffer, (10 * (Number[6] & 0x07) + (Number[6] >> 4)) / 4); + + return Buffer; +} + +SMS_DateTime *UnpackDateTime(u8 *Number, SMS_DateTime *dt) +{ + dt->Year = 10 * (Number[0] & 0x0f) + (Number[0] >> 4); + if (dt->Year < 70) dt->Year += 2000; + else dt->Year += 1900; + dt->Month = 10 * (Number[1] & 0x0f) + (Number[1] >> 4); + dt->Day = 10 * (Number[2] & 0x0f) + (Number[2] >> 4); + dt->Hour = 10 * (Number[3] & 0x0f) + (Number[3] >> 4); + dt->Minute = 10 * (Number[4] & 0x0f) + (Number[4] >> 4); + dt->Second = 10 * (Number[5] & 0x0f) + (Number[5] >> 4); + dt->Timezone = (10 * (Number[6] & 0x07) + (Number[6] >> 4)) / 4; + if (Number[6] & 0x08) dt->Timezone = -dt->Timezone; + + return dt; +} + +/*** + *** ENCODING SMS + ***/ + +static GSM_Error EncodeData(GSM_SMSMessage *SMS, char *dcs, char *message) +{ + SMS_AlphabetType al; + unsigned short length = strlen(SMS->MessageText); + + switch (SMS->DCS.Type) { + case SMS_GeneralDataCoding: + switch (SMS->DCS.u.General.Class) { + case 1: dcs[0] |= 0xf0; break; + case 2: dcs[0] |= 0xf1; break; + case 3: dcs[0] |= 0xf2; break; + case 4: dcs[0] |= 0xf3; break; + default: break; + } + if (SMS->DCS.u.General.Compressed) { + /* Compression not supported yet */ + /* dcs[0] |= 0x20; */ + } + al = SMS->DCS.u.General.Alphabet; + break; + case SMS_MessageWaiting: + al = SMS->DCS.u.MessageWaiting.Alphabet; + if (SMS->DCS.u.MessageWaiting.Discard) dcs[0] |= 0xc0; + else if (SMS->DCS.u.MessageWaiting.Alphabet == SMS_UCS2) dcs[0] |= 0xe0; + else dcs[0] |= 0xd0; + + if (SMS->DCS.u.MessageWaiting.Active) dcs[0] |= 0x08; + dcs[0] |= (SMS->DCS.u.MessageWaiting.Type & 0x03); + + break; + default: + return GE_SMSWRONGFORMAT; + } + switch (al) { + case SMS_DefaultAlphabet: + Pack7BitCharacters((7 - (SMS->UDH_Length % 7)) % 7, SMS->MessageText, message); + SMS->Length = 8 * SMS->UDH_Length + (7 - (SMS->UDH_Length % 7)) % 7 + length; + break; + case SMS_8bit: + dcs[0] |= 0xf4; + memcpy(message, SMS->MessageText + 1, SMS->MessageText[0]); + SMS->Length = SMS->UDH_Length + SMS->MessageText[0]; + break; + case SMS_UCS2: + dcs[0] |= 0x08; + EncodeUnicode(message, SMS->MessageText, length); + SMS->Length = length; + break; + default: + return GE_SMSWRONGFORMAT; + } + return GE_NONE; +} + +/* This function encodes the UserDataHeader as described in: + - GSM 03.40 version 6.1.0 Release 1997, section 9.2.3.24 + - Smart Messaging Specification, Revision 1.0.0, September 15, 1997 +*/ +static GSM_Error EncodeUDH(SMS_UDHInfo UDHi, char *UDH) +{ + unsigned char pos; + + pos = UDH[0]; + switch (UDHi.Type) { + case SMS_NoUDH: + break; + case SMS_VoiceMessage: + case SMS_FaxMessage: + case SMS_EmailMessage: + UDH[pos+4] = UDHi.u.SpecialSMSMessageIndication.MessageCount; + if (UDHi.u.SpecialSMSMessageIndication.Store) UDH[pos+3] |= 0x80; + case SMS_ConcatenatedMessages: + case SMS_OpLogo: + case SMS_CallerIDLogo: + case SMS_Ringtone: + UDH[0] += headers[UDHi.Type].length; + memcpy(UDH+pos+1, headers[UDHi.Type].header, headers[UDHi.Type].length); + break; + default: + dprintf("Not supported User Data Header type\n"); + break; + } + return GE_NONE; +} + +static GSM_Error EncodeSMSSubmitHeader(GSM_SMSMessage *SMS, char *frame) +{ + GSM_Error error = GE_NONE; + + /* Standard Header: */ + memcpy(frame, "\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00", 24); + + /* Reply Path */ + if (SMS->ReplyViaSameSMSC) frame[0] |= 0x80; + + /* User Data Header Indicator */ + if (SMS->UDH_No) frame[0] |= 0x40; + + /* Status (Delivery) Report Request */ + if (SMS->ReportStatus) frame[0] |= 0x20; + + /* Validity Period Format: mask - 0x00, 0x10, 0x08, 0x18 */ + frame[0] |= ((SMS->Validity.VPF & 0x03) << 3); + + /* Reject Duplicates */ + if (SMS->RejectDuplicates) frame[0] |= 0x04; + + /* Message Type is already set */ + + /* Message Reference */ + /* Can we set this? */ + + /* Protocol Identifier */ + /* FIXME: allow to change this in better way. + currently only 0x5f == `Return Call Message' is used */ + if (SMS->PID) frame[3] = SMS->PID; + + /* Data Coding Scheme */ + switch (SMS->DCS.Type) { + case SMS_GeneralDataCoding: + if (SMS->DCS.u.General.Compressed) frame[4] |= 0x20; + if (SMS->DCS.u.General.Class) frame[4] |= (0x10 | (SMS->DCS.u.General.Class - 1)); + frame[4] |= ((SMS->DCS.u.General.Alphabet & 0x03) << 2); + break; + case SMS_MessageWaiting: + if (SMS->DCS.u.MessageWaiting.Discard) frame[4] |= 0xc0; + else if (SMS->DCS.u.MessageWaiting.Alphabet == SMS_UCS2) frame[4] |= 0xe0; + else frame[4] |= 0xd0; + if (SMS->DCS.u.MessageWaiting.Active) frame[4] |= 0x80; + frame[4] |= (SMS->DCS.u.MessageWaiting.Type & 0x03); + break; + default: + dprintf("Wrong Data Coding Scheme (DCS) format\n"); + return GE_SMSWRONGFORMAT; + } + + /* Destination Address */ + frame[5] = SemiOctetPack(SMS->RemoteNumber.number, frame + 6, SMS->RemoteNumber.type); + + /* Validity Period */ + switch (SMS->Validity.VPF) { + case SMS_EnhancedFormat: + break; + case SMS_RelativeFormat: + break; + case SMS_AbsoluteFormat: + break; + default: + break; + } + + return error; +} + +static GSM_Error EncodeSMSDeliverHeader() +{ + return GE_NONE; +} + +static GSM_Error EncodeSMSHeader(GSM_SMSMessage *SMS, char *frame) +/* We can create either SMS DELIVER (for saving in Inbox) or SMS SUBMIT + (for sending or saving in Outbox) message */ +{ + /* Set SMS type */ + frame[12] |= (SMS->Type >> 1); + switch (SMS->Type) { + case SMS_Submit: /* we send SMS or save it in Outbox */ + return EncodeSMSSubmitHeader(SMS, frame); + case SMS_Deliver: /* we save SMS in Inbox */ + return EncodeSMSDeliverHeader(SMS, frame); + default: /* we don't create other formats of SMS */ + return GE_SMSWRONGFORMAT; + } +} + +/* This function encodes SMS as described in: + - GSM 03.40 version 6.1.0 Release 1997, section 9 +*/ +int EncodePDUSMS(GSM_SMSMessage *SMS, char *message) +{ + GSM_Error error = GE_NONE; + int i; + + dprintf("Sending SMS to %s via message center %s\n", SMS->RemoteNumber.number, SMS->MessageCenter.Number); + + /* SMSC number */ + dprintf("%d %s\n", SMS->MessageCenter.Type, SMS->MessageCenter.Number); + message[0] = SemiOctetPack(SMS->MessageCenter.Number, message + 1, SMS->MessageCenter.Type); + if (message[0] % 2) message[0]++; + message[0] = message[0] / 2 + 1; + + /* Common Header */ + error = EncodeSMSHeader(SMS, message + 12); + if (error != GE_NONE) return error; + + /* User Data Header - if present */ +// for (i = 0; i < SMS->UDH_No; i++) { +// error = EncodeUDH(SMS->UDH[i], message + 24); +// if (error != GE_NONE) return error; +// } + SMS->UDH_Length = 0; + + /* User Data */ + EncodeData(SMS, message + 14, message + 36 + SMS->UDH_Length); + message[16] = SMS->Length; + return SMS->Length + 35; +} + +/* This function does simple SMS encoding - no PDU coding */ +GSM_Error EncodeTextSMS() +{ + return GE_NONE; +} + +/*** + *** DECODING SMS + ***/ + +static GSM_Error SMSStatus(unsigned char status, GSM_SMSMessage *SMS) +{ + if (status < 0x03) { + strcpy(SMS->MessageText, _("Delivered")); + switch (status) { + case 0x00: + dprintf("SM received by the SME"); + break; + case 0x01: + dprintf("SM forwarded by the SC to the SME but the SC is unable to confirm delivery"); + break; + case 0x02: + dprintf("SM replaced by the SC"); + break; + } + SMS->Length = strlen(_("Delivered")); + } else if (status & 0x40) { + + strcpy(SMS->MessageText, _("Failed")); + + /* more detailed reason only for debug */ + + if (status & 0x20) { + dprintf("Temporary error, SC is not making any more transfer attempts\n"); + + switch (status) { + case 0x60: + dprintf("Congestion"); + break; + case 0x61: + dprintf("SME busy"); + break; + case 0x62: + dprintf("No response from SME"); + break; + case 0x63: + dprintf("Service rejected"); + break; + case 0x64: + dprintf("Quality of service not aviable"); + break; + case 0x65: + dprintf("Error in SME"); + break; + default: + dprintf("Reserved/Specific to SC: %x", status); + break; + } + } else { + dprintf("Permanent error, SC is not making any more transfer attempts\n"); + switch (status) { + case 0x40: + dprintf("Remote procedure error"); + break; + case 0x41: + dprintf("Incompatibile destination"); + break; + case 0x42: + dprintf("Connection rejected by SME"); + break; + case 0x43: + dprintf("Not obtainable"); + break; + case 0x44: + dprintf("Quality of service not aviable"); + break; + case 0x45: + dprintf("No internetworking available"); + break; + case 0x46: + dprintf("SM Validity Period Expired"); + break; + case 0x47: + dprintf("SM deleted by originating SME"); + break; + case 0x48: + dprintf("SM Deleted by SC Administration"); + break; + case 0x49: + dprintf("SM does not exist"); + break; + default: + dprintf("Reserved/Specific to SC: %x", status); + break; + } + } + SMS->Length = strlen(_("Failed")); + } else if (status & 0x20) { + strcpy(SMS->MessageText, _("Pending")); + + /* more detailed reason only for debug */ + dprintf("Temporary error, SC still trying to transfer SM\n"); + switch (status) { + case 0x20: + dprintf("Congestion"); + break; + case 0x21: + dprintf("SME busy"); + break; + case 0x22: + dprintf("No response from SME"); + break; + case 0x23: + dprintf("Service rejected"); + break; + case 0x24: + dprintf("Quality of service not aviable"); + break; + case 0x25: + dprintf("Error in SME"); + break; + default: + dprintf("Reserved/Specific to SC: %x", status); + break; + } + SMS->Length = strlen(_("Pending")); + } else { + strcpy(SMS->MessageText, _("Unknown")); + + /* more detailed reason only for debug */ + dprintf("Reserved/Specific to SC: %x", status); + SMS->Length = strlen(_("Unknown")); + } + dprintf("\n"); + return GE_NONE; +} + +static GSM_Error DecodeData(char *message, char *output, int length, int size, int udhlen, SMS_DataCodingScheme dcs) +{ + /* Unicode */ + if ((dcs.Type & 0x08) == 0x08) { + dprintf("Unicode message\n"); + length = (length - udhlen)/2; + DecodeUnicode(output, message, length); + } else { + /* 8bit SMS */ + if ((dcs.Type & 0xf4) == 0xf4) { + dprintf("8bit message\n"); + memcpy(output, message, length); + /* 7bit SMS */ + } else { + dprintf("Default Alphabet\n"); + length = length - (udhlen * 8 + ((7-(udhlen%7))%7)) / 7; + Unpack7BitCharacters((7-udhlen)%7, size, length, message, output); + DecodeAscii(output, output, length); + } + } + dprintf("%s\n", output); + return GE_NONE; +} + +/* This function decodes UDH as described in: + - GSM 03.40 version 6.1.0 Release 1997, section 9.2.3.24 + - Smart Messaging Specification, Revision 1.0.0, September 15, 1997 +*/ +static GSM_Error DecodeUDH(char *message, GSM_SMSMessage *SMS) +{ + unsigned char length, pos, nr; + + SMS->UDH_Length = length = message[0] + 1; + pos = 1; + nr = 0; + while (length > 1) { + unsigned char udh_length; + + udh_length = message[pos+1]; + switch (message[pos]) { + case 0x00: // Concatenated short messages + dprintf("Concatenated messages\n"); + SMS->UDH[nr].Type = SMS_ConcatenatedMessages; + SMS->UDH[nr].u.ConcatenatedShortMessage.ReferenceNumber = message[pos + 2]; + SMS->UDH[nr].u.ConcatenatedShortMessage.MaximumNumber = message[pos + 3]; + SMS->UDH[nr].u.ConcatenatedShortMessage.CurrentNumber = message[pos + 4]; + break; + case 0x01: // Special SMS Message Indication + switch (message[pos + 2] & 0x03) { + case 0x00: + dprintf("Voice Message\n"); + SMS->UDH[nr].Type = SMS_VoiceMessage; + break; + case 0x01: + dprintf("Fax Message\n"); + SMS->UDH[nr].Type = SMS_FaxMessage; + break; + case 0x02: + dprintf("Email Message\n"); + SMS->UDH[nr].Type = SMS_EmailMessage; + break; + default: + dprintf("Unknown\n"); + SMS->UDH[nr].Type = SMS_UnknownUDH; + break; + } + SMS->UDH[nr].u.SpecialSMSMessageIndication.Store = (message[pos + 2] & 0x80) >> 7; + SMS->UDH[nr].u.SpecialSMSMessageIndication.MessageCount = message[pos + 3]; + break; + case 0x04: // Application port addression scheme, 8 bit address + break; + case 0x05: // Application port addression scheme, 16 bit address + switch (((0x00ff & message[pos + 2]) << 8) | (0x00ff & message[pos + 3])) { + case 0x1581: + dprintf("Ringtone\n"); + SMS->UDH[nr].Type = SMS_Ringtone; + break; + case 0x1582: + dprintf("Operator Logo\n"); + SMS->UDH[nr].Type = SMS_OpLogo; + break; + case 0x1583: + dprintf("Caller Icon\n"); + SMS->UDH[nr].Type = SMS_CallerIDLogo; + break; + case 0x23f4: + dprintf("Business Card\n"); + SMS->UDH[nr].Type = SMS_BusinessCard; + break; + default: + dprintf("Unknown\n"); + SMS->UDH[nr].Type = SMS_UnknownUDH; + break; + } + break; + case 0x06: // SMSC Control Parameters + break; + case 0x07: // UDH Source Indicator + break; + default: + break; + } + length -= (udh_length + 2); + pos += (udh_length + 2); + nr++; + } + SMS->UDH_No = nr; + + return GE_NONE; +} + +static GSM_Error DecodeSMSHeader(unsigned char *message, GSM_SMSMessage *SMS) +{ + /* Short Message Type */ + switch (SMS->Type = message[2]) { + case SMS_Deliver: + dprintf("Mobile Terminated message:\n"); + break; + case SMS_Delivery_Report: + dprintf("Delivery Report:\n"); + UnpackDateTime(message + 34 + DataOffset[SMS->Type], &(SMS->SMSCTime)); + dprintf("\tDelivery date: %s\n", PrintDateTime(message + 34 + DataOffset[SMS->Type])); + break; + case SMS_Submit: + dprintf("Mobile Originated message:\n"); + break; + default: + dprintf("Not supported message type:\n"); + break; + } + + /* Short Message location in memory */ + SMS->Number = message[1]; + dprintf("\tLocation: %d\n", SMS->Number); + + /* Short Message Center */ + strcpy(SMS->MessageCenter.Number, GetBCDNumber(message + 3)); + dprintf("\tSMS center number: %s\n", SMS->MessageCenter.Number); + SMS->ReplyViaSameSMSC = false; + if (SMS->RemoteNumber.number[0] == 0 && (message[6] & 0x80)) { + SMS->ReplyViaSameSMSC = true; + } + + /* Remote number */ + message[15+DataOffset[SMS->Type]] = ((message[15+DataOffset[SMS->Type]])+1)/2+1; + dprintf("\tRemote number (recipient or sender): %s\n", GetBCDNumber(message + 15 + DataOffset[SMS->Type])); + strcpy(SMS->RemoteNumber.number, GetBCDNumber(message + 15 + DataOffset[SMS->Type])); + + UnpackDateTime(message + 27 + DataOffset[SMS->Type], &(SMS->Time)); + dprintf("\tDate: %s\n", PrintDateTime(message + 27 + DataOffset[SMS->Type])); + + /* Message length */ + SMS->Length = message[14+DataOffset[SMS->Type]]; + + /* Data Coding Scheme */ + if (SMS->Type != SMS_Delivery_Report && SMS->Type != SMS_Picture) + SMS->DCS.Type = message[13 + DataOffset[SMS->Type]]; + else + SMS->DCS.Type = 0; + + /* User Data Header */ + if (message[15] & 0x40) { /* UDH header available */ + dprintf("UDH found\n"); + DecodeUDH(message + 34 + DataOffset[SMS->Type], SMS); + } else { /* No UDH */ + dprintf("No UDH\n"); + SMS->UDH_No = 0; + } + + return GE_NONE; +} + +/* This function decodes SMS as described in: + - GSM 03.40 version 6.1.0 Release 1997, section 9 +*/ +GSM_Error DecodePDUSMS(unsigned char *message, GSM_SMSMessage *SMS, int MessageLength) +{ + int size; + GSM_Bitmap bitmap; + + DecodeSMSHeader(message, SMS); + switch (SMS->Type) { + case SMS_Delivery_Report: + SMSStatus(message[17], SMS); + break; + case SMS_Picture: + dprintf("Picture!!!\n"); + GSM_ReadSMSBitmap(SMS_Picture, message + 41, NULL, &bitmap); + GSM_PrintBitmap(&bitmap); + size = MessageLength - 45 - bitmap.size; + SMS->Length = message[45 + bitmap.size]; + printf("%d %d %d\n", SMS->Length, bitmap.size, size); + DecodeData(message + 46 + bitmap.size, + (unsigned char *)&(SMS->MessageText), + SMS->Length, size, 0, SMS->DCS); + SMS->MessageText[SMS->Length] = 0; + break; + default: + size = MessageLength - + 34 - /* Header Length */ + DataOffset[SMS->Type] - /* offset */ + SMS->UDH_Length - /* UDH Length */ + 5; /* checksum */ + DecodeData(message + 34 + DataOffset[SMS->Type] + SMS->UDH_Length, + (unsigned char *)&(SMS->MessageText), + SMS->Length, size, SMS->UDH_Length, SMS->DCS); + /* Just in case */ + SMS->MessageText[SMS->Length] = 0; + break; + } + + return GE_NONE; +} + +/* This function does simple SMS decoding - no PDU coding */ +GSM_Error DecodeTextSMS(unsigned char *message, GSM_SMSMessage *SMS) +{ + return GE_NONE; +} diff --git a/common/gsm-statemachine.c b/common/gsm-statemachine.c new file mode 100644 index 0000000..6d77726 --- /dev/null +++ b/common/gsm-statemachine.c @@ -0,0 +1,251 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:01 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.7 2001/11/17 20:16:42 pkot + Cleanup + + Revision 1.6 2001/11/08 16:49:19 pkot + Cleanups + + Revision 1.5 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.4 2001/07/27 00:02:20 pkot + Generic AT support for the new structure (Manfred Jonsson) + + Revision 1.3 2001/06/10 11:26:56 machek + Warn if Link.Loop is not defined. + + Revision 1.2 2001/05/07 14:01:51 machek + Warn when phone functions are missing, but do not segfault. + + Revision 1.1 2001/03/21 23:36:04 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + +*/ + +#include "gsm-common.h" +#include "gsm-statemachine.h" + +GSM_Error SM_Initialise(GSM_Statemachine *state) +{ + state->CurrentState = Initialised; + state->NumWaitingFor = 0; + state->NumReceived = 0; + + return GE_NONE; +} + +GSM_Error SM_SendMessage(GSM_Statemachine *state, u16 messagesize, u8 messagetype, void *message) +{ + if (state->CurrentState != Startup) { + state->LastMsgSize = messagesize; + state->LastMsgType = messagetype; + state->LastMsg = message; + state->CurrentState = MessageSent; + + /* FIXME - clear KeepAlive timer */ + return state->Link.SendMessage(messagesize, messagetype, message); + } + else return GE_NOTREADY; +} + +GSM_State SM_Loop(GSM_Statemachine *state, int timeout) +{ + struct timeval loop_timeout; + int i; + + loop_timeout.tv_sec = 0; + loop_timeout.tv_usec = 100000; + + if (!state->Link.Loop) { + dprintf("No Loop function. Aborting.\n"); + abort(); + } + for (i = 0; i < timeout; i++) { + state->Link.Loop(&loop_timeout); + } + + /* FIXME - add calling a KeepAlive function here */ + return state->CurrentState; +} + +void SM_Reset(GSM_Statemachine *state) +{ + /* Don't reset to initialised if we aren't! */ + if (state->CurrentState != Startup) { + state->CurrentState = Initialised; + state->NumWaitingFor = 0; + state->NumReceived = 0; + } +} + + + +void SM_IncomingFunction(GSM_Statemachine *state, u8 messagetype, void *message, u16 messagesize) +{ + int c; + int temp = 1; + GSM_Data emptydata; + GSM_Data *data = &emptydata; + GSM_Error res = GE_INTERNALERROR; + int waitingfor = -1; + + GSM_DataClear(&emptydata); + + /* See if we need to pass the function the data struct */ + if (state->CurrentState == WaitingForResponse) + for (c = 0; c < state->NumWaitingFor; c++) + if (state->WaitingFor[c] == messagetype) { + data = state->Data[c]; + waitingfor = c; + } + + + /* Pass up the message to the correct phone function, with data if necessary */ + c = 0; + while (state->Phone.IncomingFunctions[c].Functions) { + if (state->Phone.IncomingFunctions[c].MessageType == messagetype) { + dprintf("Received message type %02x\n\r", messagetype); + res = state->Phone.IncomingFunctions[c].Functions(messagetype, message, messagesize, data); + temp = 0; + } + c++; + } + if (temp != 0) { + dprintf("Unknown Frame Type %02x\n\r", messagetype); + state->Phone.DefaultFunction(messagetype, message, messagesize); + + return; + } + + if (state->CurrentState == WaitingForResponse) { + /* Check if we were waiting for a response and we received it */ + if (waitingfor != -1) { + state->ResponseError[waitingfor] = res; + state->NumReceived++; + } + + /* Check if all waitingfors have been received */ + if (state->NumReceived == state->NumWaitingFor) { + state->CurrentState = ResponseReceived; + } + + } +} + + +/* This returns the error recorded from the phone function and indicates collection */ + +GSM_Error SM_GetError(GSM_Statemachine *state, unsigned char messagetype) +{ + int c, d; + GSM_Error error = GE_NOTREADY; + + if (state->CurrentState==ResponseReceived) { + for(c = 0; c < state->NumReceived; c++) + if (state->WaitingFor[c] == messagetype) { + error = state->ResponseError[c]; + for(d = c + 1 ;d < state->NumReceived; d++){ + state->ResponseError[d-1] = state->ResponseError[d]; + state->WaitingFor[d-1] = state->WaitingFor[d]; + state->Data[d-1] = state->Data[d]; + } + state->NumReceived--; + state->NumWaitingFor--; + c--; /* For neatness continue in the correct place */ + } + if (state->NumReceived == 0) { + state->NumWaitingFor = 0; + state->CurrentState = Initialised; + } + } + + return error; +} + + + +/* Indicate that the phone code is waiting for an response */ +/* This does not actually wait! */ + +GSM_Error SM_WaitFor(GSM_Statemachine *state, GSM_Data *data, unsigned char messagetype) +{ + + /* If we've received a response, we have to call SM_GetError first */ + if ((state->CurrentState == Startup) || (state->CurrentState == ResponseReceived)) + return GE_NOTREADY; + + if (state->NumWaitingFor == SM_MAXWAITINGFOR) return GE_NOTREADY; + state->WaitingFor[state->NumWaitingFor] = messagetype; + state->Data[state->NumWaitingFor] = data; + state->ResponseError[state->NumWaitingFor] = GE_BUSY; + state->NumWaitingFor++; + state->CurrentState = WaitingForResponse; + + return GE_NONE; +} + + +/* This function is for convinience only */ +/* It is called after SM_SendMessage and blocks until a response is received */ + +GSM_Error SM_Block(GSM_Statemachine *state, GSM_Data *data, int waitfor) +{ + int retry; + int timeout; + GSM_State s; + GSM_Error err; + + for (retry = 0; retry < 3; retry++) { + timeout = 30; + err = SM_WaitFor(state, data, waitfor); + if (err != GE_NONE) return err; + + do { /* ~3secs timeout */ + s = SM_Loop(state, 1); /* Timeout=100ms */ + timeout--; + } while ((timeout > 0) && (s == WaitingForResponse)); + + if (s == ResponseReceived) return SM_GetError(state, waitfor); + + dprintf("SM_Block Retry - %d\n\r", retry); + SM_Reset(state); + if (retry<2) SM_SendMessage(state, state->LastMsgSize, state->LastMsgType, state->LastMsg); + } + + return GE_TIMEOUT; +} + + +/* Just to do things neatly */ + +GSM_Error SM_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *sm) +{ + if (!sm->Phone.Functions) { + dprintf("Sorry, phone has not yet been converted to new style. Phone.Functions == NULL!\n"); + return GE_INTERNALERROR; + } + return sm->Phone.Functions(op, data, sm); +} diff --git a/common/links/Makefile b/common/links/Makefile new file mode 100644 index 0000000..560a695 --- /dev/null +++ b/common/links/Makefile @@ -0,0 +1,47 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +# +# For this common directory is used "subsystem.o" .o files concept. +# (the list of object files to be linked together (to COMMON.o), +# and other dirs is used this _one_ file (instead of all OBJS) +# + +TOPDIR=../.. +include $(TOPDIR)/Makefile.global + +OBJS = fbus.o \ + fbus-phonet.o \ + cbus.o \ + atbus.o \ + fbus-3110.o \ + utils.o + +all: LINKS.o + +LINKS.o: $(OBJS) + $(LD) LINKS.o $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend LINKS.o + +install: + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/common/links/atbus.c b/common/links/atbus.c new file mode 100644 index 0000000..0af3d20 --- /dev/null +++ b/common/links/atbus.c @@ -0,0 +1,197 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for mobile phones. + + Copyright 2001 Manfred Jonsson + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:09 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/11/19 13:03:18 pkot + nk3110.c cleanup + + Revision 1.4 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.3 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.2 2001/08/09 11:51:39 pkot + Generic AT support updates and cleanup (Manfred Jonsson) + + Revision 1.1 2001/07/27 00:02:21 pkot + Generic AT support for the new structure (Manfred Jonsson) + +*/ + +/* System header files */ +#include +#include +#include +#include + +/* Various header file */ +#include "config.h" +#ifndef DEBUG +#define DEBUG +#endif +#include "misc.h" +#include "gsm-common.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "device.h" +#include "links/utils.h" +#include "gsm-statemachine.h" + +#define __atbus_c +#include "links/atbus.h" + +/* FIXME - pass device_* the link stuff?? */ +/* FIXME - win32 stuff! */ + + +/* FIXME - when sending an AT command while another one is still in */ +/* progress, the old command is aborted and the new ignored. */ +/* the result is _one_ error message from the phone. */ + +/* Some globals */ +/* FIXME - if we use more than one phone these should be part of */ +/* a statemachine. */ + +static GSM_Statemachine *statemachine; +static int binlength = 0; +static char reply_buf[1024]; +static int reply_buf_pos = 0; + +static int xwrite(unsigned char *d, int len) +{ + int res; + while (len) { + res = device_write(d, len); + if (res == -1) { + if (errno != EAGAIN) { + perror("gnokii I/O error "); + return -1; + } + } else { + d += res; + len -= res; + } + } + return 0; +} + + +static GSM_Error +AT_SendMessage(u16 message_length, u8 message_type, void *msg) +{ + usleep(10000); + xwrite((char*)msg, message_length); + return GE_NONE; +} + + +/* RX_State machine for receive handling. Called once for each character + received from the phone. */ +void ATBUS_RX_StateMachine(unsigned char rx_char) +{ + reply_buf[reply_buf_pos++] = rx_char; + reply_buf[reply_buf_pos] = '\0'; + + if (reply_buf_pos >= binlength) { + if (((reply_buf_pos > 3) && (!strncmp(reply_buf+reply_buf_pos-4, "OK\r\n", 4))) + || ((reply_buf_pos > 6) && (!strncmp(reply_buf+reply_buf_pos-7, "ERROR\r\n", 7)))) { + SM_IncomingFunction(statemachine, statemachine->LastMsgType, reply_buf, reply_buf_pos); + reply_buf_pos = 0; + binlength = 0; + return; + } +/* needed for binary date etc + TODO: correct reading of variable length integers + if (reply_buf_pos == 12) { + if (!strncmp(reply_buf + 3, "ABC", 3) { + binlength = atoi(reply_buf + 8); + } + } +*/ + } +} + + +bool ATBUS_OpenSerial(int hw_handshake, char *device) +{ + int result; + result = device_open(device, false, false, hw_handshake, GCT_Serial); + if (!result) { + perror(_("Couldn't open ATBUS device")); + return (false); + } + device_changespeed(19200); + if (hw_handshake) { + device_setdtrrts(0, 1); + sleep(1); + device_setdtrrts(1, 1); + /* make 7110 happy */ + sleep(1); + } else { + device_setdtrrts(0, 0); + } + return (true); +} + +GSM_Error ATBUS_Loop(struct timeval *timeout) +{ + unsigned char buffer[255]; + int count, res; + + res = device_select(timeout); + if (res > 0) { + res = device_read(buffer, 255); + for (count = 0; count < res; count++) + ATBUS_RX_StateMachine(buffer[count]); + } else + return GE_TIMEOUT; + /* This traps errors from device_read */ + if (res > 0) + return GE_NONE; + else + return GE_INTERNALERROR; +} + + +/* Initialise variables and start the link */ +GSM_Error ATBUS_Initialise(GSM_Statemachine *state, int hw_handshake) +{ + setvbuf(stdout, NULL, _IONBF, 0); + setvbuf(stderr, NULL, _IONBF, 0); + + /* 'Copy in' the global structures */ + statemachine = state; + + /* Fill in the link functions */ + state->Link.Loop = &ATBUS_Loop; + state->Link.SendMessage = &AT_SendMessage; + + if (state->Link.ConnectionType == GCT_Serial) { + if (!ATBUS_OpenSerial(hw_handshake, state->Link.PortDevice)) + return GE_DEVICEOPENFAILED; + } else { + fprintf(stderr, "Device not supported by ATBUS"); + return GE_DEVICEOPENFAILED; + } + + return GE_NONE; +} diff --git a/common/links/cbus.c b/common/links/cbus.c new file mode 100644 index 0000000..2bea356 --- /dev/null +++ b/common/links/cbus.c @@ -0,0 +1,423 @@ +/* -*- linux-c -*- + + Copyright (C) 2001 Pavel Machek + Copyright (C) 2001 Michl Ladislav + + Released under the terms of the GNU GPL, see file COPYING for more details. + + */ + +/* System header files */ + +#include +#include +#include +#include + +/* Various header file */ +#include "config.h" +#ifndef DEBUG +#define DEBUG +#endif +#include "misc.h" +#include "gsm-common.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "device.h" +#include "links/utils.h" + +#define __cbus_c +#include "links/cbus.h" + +/* FIXME - pass device_* the link stuff?? */ +/* FIXME - win32 stuff! */ + + +/* Some globals */ + +GSM_Link *glink; +GSM_Phone *gphone; +CBUS_Link clink; /* CBUS specific stuff, internal to this file */ + +int init_okay = 0; +int seen_okay; +char reply_buf[10240]; + +/*--------------------------------------------------------------------------*/ + +bool CBUS_OpenSerial() +{ + int result; + result = device_open(glink->PortDevice, false, false, false, GCT_Serial); + if (!result) { + perror(_("Couldn't open CBUS device")); + return (false); + } + device_changespeed(9600); + device_setdtrrts(1, 0); + return (true); +} + +/* -------------------------------------------------------------------- */ + +static int xread(unsigned char *d, int len) +{ + int res; + while (len) { + res = device_read(d, len); + if (res == -1) { + if (errno != EAGAIN) { + printf("I/O error : %m?!\n"); + return -1; + } else device_select(NULL); + } else { + d += res; + len -= res; + printf("(%d)", len); + } + } + return 0; +} + +static int xwrite(unsigned char *d, int len) +{ + int res; + while (len) { + res = device_write(d, len); + if (res == -1) { + if (errno != EAGAIN) { + printf("I/O error : %m?!\n"); + return -1; + } + } else { + d += res; + len -= res; + printf("<%d>", len); + } + } + return 0; +} + +static void +say(unsigned char *c, int len) +{ + unsigned char d[10240]; + + xwrite(c, len); + xread(d, len); + if (memcmp(c, d, len)) { + int i; + printf("Did not get my own echo?: "); + for (i=0; i> 8; + memcpy(p+6, msg, len); + + pos = 6+len; + { + int i; + for (i=0; i': PhoneReply(type, buf, len); + break; + default: dprintf("Unknown Frame Type 68/ %02x\n", type); + break; + } +} + +void CBUS_RX_StateMachine(unsigned char rx_byte) +{ + CBUS_IncomingFrame *i = &clink.i; + + /* checksum is XOR of all bytes in the frame */ + if (i->state != CBUS_RX_GetCSum) i->checksum ^= rx_byte; + + switch (i->state) { + + case CBUS_RX_Header: + switch (rx_byte) { + case 0x38: + case 0x34: + if (i->prev_rx_byte == 0x19) { + i->state = CBUS_RX_FrameType1; + } + break; + case 0x19: + if ((i->prev_rx_byte == 0x38) || (i->prev_rx_byte == 0x34)) { + i->state = CBUS_RX_FrameType1; + } + break; + default: + } + if (i->state != CBUS_RX_Header) { + i->FrameHeader1 = i->prev_rx_byte; + i->FrameHeader2 = rx_byte; + i->BufferCount = 0; + i->checksum = i->prev_rx_byte ^ rx_byte; + } + break; + + /* FIXME: Do you know exact meaning? just mail me. ladis. */ + case CBUS_RX_FrameType1: + i->FrameType1 = rx_byte; + i->state = CBUS_RX_FrameType2; + break; + + /* FIXME: Do you know exact meaning? just mail me. ladis. */ + case CBUS_RX_FrameType2: + i->FrameType2 = rx_byte; + i->state = CBUS_RX_GetLengthLB; + break; + + /* message length - low byte */ + case CBUS_RX_GetLengthLB: + i->MessageLength = rx_byte; + i->state = CBUS_RX_GetLengthHB; + break; + + /* message length - high byte */ + case CBUS_RX_GetLengthHB: + i->MessageLength = i->MessageLength | rx_byte << 8; + /* there are also empty commands */ + if (i->MessageLength == 0) + i->state = CBUS_RX_GetCSum; + else + i->state = CBUS_RX_GetMessage; + break; + + /* get each byte of the message body */ + case CBUS_RX_GetMessage: + i->buffer[i->BufferCount++] = rx_byte; + /* avoid buffer overflow */ + if (i->BufferCount > CBUS_MAX_MSG_LENGTH) { + dprintf("CBUS: Message buffer overun - resetting\n"); + i->state = CBUS_RX_Header; + break; + } + + if (i->BufferCount == i->MessageLength) + i->state = CBUS_RX_GetCSum; + break; + + /* get checksum */ + case CBUS_RX_GetCSum: + /* compare against calculated checksum. */ + if (i->checksum == rx_byte) { + u8 ack = 0xa5; + + xwrite(&ack, 1); + xread(&ack, 1); + if (ack != 0xa5) + printf("ack lost, expect armagedon!\n"); + + /* Got checksum, matches calculated one, so + * now pass to appropriate dispatch handler. */ + i->buffer[i->MessageLength + 1] = 0; + /* FIXME: really call it :-) */ + + switch(i->FrameType2) { + case 0x68: + internal_dispatch(glink, gphone, i->FrameType1, i->buffer, i->MessageLength); + break; + case 0x70: + if (i->FrameType1 == 0x91) { + init_okay = 1; + printf("Registration acknowledged\n"); + } else + printf("Unknown message\n"); + } + } else { + /* checksum doesn't match so ignore. */ + dprintf("CBUS: Checksum error; expected: %02x, got: %02x", i->checksum, rx_byte); + } + + i->state = CBUS_RX_Header; + break; + + default: + } + i->prev_rx_byte = rx_byte; +} + +int CBUS_SendMessage(u16 message_length, u8 message_type, void * buffer) +{ + sendpacket(buffer, message_length, message_type); + return true; +} + +static GSM_Error AT_SendMessage(u16 message_length, u8 message_type, void * buffer) +{ + sendat(buffer); + return true; +} + +/* This is the main loop function which must be called regularly */ +/* timeout can be used to make it 'busy' or not */ + +/* ladis: this function ought to be the same for all phones... */ + +GSM_Error CBUS_Loop(struct timeval *timeout) +{ + unsigned char buffer[255]; + int count, res; + + res = device_select(timeout); + if (res > 0) { + res = device_read(buffer, 255); + for (count = 0; count < res; count++) + CBUS_RX_StateMachine(buffer[count]); + } else + return GE_TIMEOUT; + + /* This traps errors from device_read */ + if (res > 0) + return GE_NONE; + else + return GE_INTERNALERROR; +} + + +int CBUS_TX_SendAck(u8 message_type, u8 message_seq) +{ + dprintf("[Sending Ack]\n"); + return (0); +} + + +/* Initialise variables and start the link */ + +GSM_Error CBUS_Initialise(GSM_Statemachine *state) +{ + setvbuf(stdout, NULL, _IONBF, 0); + setvbuf(stderr, NULL, _IONBF, 0); + + /* 'Copy in' the global structures */ + glink = &(state->Link); + gphone = &(state->Phone); + + /* Fill in the link functions */ + glink->Loop = &CBUS_Loop; + glink->SendMessage = &AT_SendMessage; + + if (glink->ConnectionType == GCT_Serial) { + if (!CBUS_OpenSerial()) + return GE_DEVICEOPENFAILED; + } else { + fprintf(stderr, "Device not supported by CBUS"); + return GE_DEVICEOPENFAILED; + } + + dprintf("Saying hello..."); + { + char init1[] = { 0, 0x38, 0x19, 0xa6, 0x70, 0x00, 0x00, 0xf7, 0xa5 }; + say( init1, 8 ); + say( init1, 8 ); + } + usleep(10000); + dprintf("second hello..."); + { + char init1[] = { 0x38, 0x19, 0x90, 0x70, 0x01, 0x00, 0x1f, 0xdf }; + say( init1, 8 ); + if (!waitack()) + return GE_BUSY; + } + while(!init_okay) + CBUS_Loop(NULL); + return GE_NONE; +} diff --git a/common/links/fbus-phonet.c b/common/links/fbus-phonet.c new file mode 100644 index 0000000..328fd09 --- /dev/null +++ b/common/links/fbus-phonet.c @@ -0,0 +1,312 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions via fbus over irda. + See README for more details on supported mobile phones. + + The various routines are called PHONET_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:09 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.8 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.7 2001/06/27 23:52:49 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.6 2001/06/20 21:27:36 pkot + IrDA patch (Marian Jancar) + + Revision 1.5 2001/05/07 16:24:03 pkot + DLR-3P temporary fix. How should I do it better? + + Revision 1.4 2001/03/23 13:40:23 chris + Pavel's patch and a few fixes. + + Revision 1.3 2001/03/21 23:36:05 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.2 2001/02/21 19:57:06 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:52 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.1 2001/02/06 21:15:35 chris + Preliminary irda support for 7110 etc. Not well tested! + + +*/ + +/* System header files */ + +#include +#include +#include + +/* Various header file */ + +#include "config.h" +#include "misc.h" +#include "gsm-common.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "device.h" + +#define __links_fbus_phonet_c +#include "links/fbus.h" +#include "links/fbus-phonet.h" + +/* FIXME - pass device_* the link stuff?? */ +/* FIXME - win32 stuff! */ + + +/* Some globals */ + +GSM_Link *glink; +GSM_Statemachine *statemachine; +PHONET_IncomingMessage imessage; + + +/*--------------------------------------------*/ + +bool PHONET_Open() +{ + int result; + + /* Open device. */ + + result = device_open(glink->PortDevice, false, false, false, GCT_Irda); + + if (!result) { + perror(_("Couldn't open PHONET device")); + return false; + } + + return (true); +} + + +/* RX_State machine for receive handling. Called once for each character + received from the phone. */ + +void PHONET_RX_StateMachine(unsigned char rx_byte) { + + PHONET_IncomingMessage *i=&imessage; + + // if (isprint(rx_byte)) + // fprintf(stderr, "[%02x%c]", (unsigned char) rx_byte, rx_byte); + //else + // fprintf(stderr, "[%02x ]", (unsigned char) rx_byte); + + + switch (i->state) { + + case FBUS_RX_Sync: + if (rx_byte == FBUS_PHONET_FRAME_ID) { + i->state=FBUS_RX_GetDestination; + } + break; + + case FBUS_RX_GetDestination: + + i->MessageDestination=rx_byte; + i->state = FBUS_RX_GetSource; + + if (rx_byte!=0x0c) { + i->state=FBUS_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x0c, got %2x\n",rx_byte); + } + break; + + case FBUS_RX_GetSource: + + i->MessageSource=rx_byte; + i->state = FBUS_RX_GetType; + + /* Source should be 0x00 */ + + if (rx_byte!=0x00) { + i->state=FBUS_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x00, got %2x\n",rx_byte); + } + + break; + + case FBUS_RX_GetType: + + i->MessageType=rx_byte; + i->state = FBUS_RX_GetLength1; + + break; + + case FBUS_RX_GetLength1: + + i->MessageLength=rx_byte<<8; + i->state = FBUS_RX_GetLength2; + + break; + + case FBUS_RX_GetLength2: + + i->MessageLength=i->MessageLength + rx_byte; + i->state = FBUS_RX_GetMessage; + i->BufferCount=0; + + break; + + case FBUS_RX_GetMessage: + + i->MessageBuffer[i->BufferCount] = rx_byte; + i->BufferCount++; + + if (i->BufferCount>PHONET_MAX_FRAME_LENGTH) { + dprintf("PHONET: Message buffer overun - resetting\n"); + i->state = FBUS_RX_Sync; + break; + } + + /* Is that it? */ + + if (i->BufferCount == i->MessageLength) { + SM_IncomingFunction(statemachine, i->MessageType, i->MessageBuffer, i->MessageLength); + i->state = FBUS_RX_Sync; + } + break; + default: + i->state = FBUS_RX_Sync; + break; + } +} + + +/* This is the main loop function which must be called regularly */ +/* timeout can be used to make it 'busy' or not */ + +GSM_Error PHONET_Loop(struct timeval *timeout) +{ + GSM_Error error = GE_INTERNALERROR; + unsigned char buffer[255]; + int count, res; + + res = device_select(timeout); + + if (res > 0) { + res = device_read(buffer, 255); + for (count = 0; count < res; count++) { + PHONET_RX_StateMachine(buffer[count]); + } + if (res > 0) { + error = GE_NONE; /* This traps errors from device_read */ + } + } else if (!res) { + error = GE_TIMEOUT; + } + + return error; +} + +/* Main function to send an fbus message */ + +GSM_Error PHONET_SendMessage(u16 messagesize, u8 messagetype, void *message) { + + u8 out_buffer[PHONET_MAX_TRANSMIT_LENGTH + 5]; + int current = 0; + int total, sent; + + /* FIXME - we should check for the message length ... */ + + /* Now construct the message header. */ + + out_buffer[current++] = FBUS_PHONET_FRAME_ID; + out_buffer[current++] = FBUS_DEVICE_PHONE; /* Destination */ + out_buffer[current++] = FBUS_DEVICE_PC; /* Source */ + + out_buffer[current++] = messagetype; /* Type */ + + out_buffer[current++] = (messagesize & 0xff00) >> 8; + out_buffer[current++] = (messagesize & 0x00ff); + + /* Copy in data if any. */ + + if (messagesize > 0) { + memcpy(out_buffer + current, message, messagesize); + current += messagesize; + } + +#ifdef DEBUG + { + int count; + fprintf(stderr, _("PC: ")); + + for (count = 0; count < current; count++) + fprintf(stderr, "%02x:", out_buffer[count]); + + fprintf(stderr, "\n"); + } +#endif /* DEBUG */ + + /* Send it out... */ + + total=current; + current=0; + sent=0; + + do { + sent=device_write(out_buffer+current, total-current); + if (sent<0) return (false); + else current+=sent; + } while (currentLoop = &PHONET_Loop; + glink->SendMessage = &PHONET_SendMessage; + + if ((glink->ConnectionType == GCT_Infrared) || (glink->ConnectionType == GCT_Irda)) { + if (PHONET_Open() == true) { + error = GE_NONE; + + /* Init variables */ + imessage.state = FBUS_RX_Sync; + imessage.BufferCount = 0; + } else { + error = GE_DEVICEOPENFAILED; + } + } else { + error = GE_DEVICEOPENFAILED; /* ConnectionType == GCT_Serial etc */ + } + + return error; +} diff --git a/common/links/fbus.c b/common/links/fbus.c new file mode 100644 index 0000000..49c1332 --- /dev/null +++ b/common/links/fbus.c @@ -0,0 +1,587 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions via fbus. + See README for more details on supported mobile phones. + + The various routines are called FBUS_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:10 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.13 2001/11/17 20:14:15 pkot + Nasty bug with counting message length. Workaround applied. Needs fixing. + + Revision 1.12 2001/11/15 12:04:05 pkot + Faster initialization for 6100 series (don't check for dlr3 cable) + + Revision 1.11 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.10 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.9 2001/05/28 09:25:16 pkot + Fixed autodetecting of the cable type in 6110 and 7110 series. DLR-3 is + tried first now. Seems to work ok with either 6130 or 6210. + + Revision 1.8 2001/05/07 16:24:03 pkot + DLR-3P temporary fix. How should I do it better? + + Revision 1.7 2001/03/22 16:17:05 chris + Tidy-ups and fixed gnokii/Makefile and gnokii/ChangeLog which I somehow corrupted. + + Revision 1.6 2001/03/21 23:36:05 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.5 2001/03/19 23:44:56 pkot + DLR3 cable support + + Revision 1.4 2001/03/13 01:24:02 pkot + Code cleanup - no warnings during compilation + + Revision 1.3 2001/03/13 01:23:18 pkot + Windows updates (Manfred Jonsson) + + Revision 1.2 2001/03/11 11:18:39 machek + Made fbus link_dispatch (and fixed minor memory leak) + + Revision 1.1 2001/02/21 19:57:06 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:52 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.3 2001/02/06 21:15:34 chris + Preliminary irda support for 7110 etc. Not well tested! + + Revision 1.2 2001/02/03 23:56:14 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + Revision 1.1 2001/01/14 22:46:59 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + + +*/ + +/* System header files */ + +#include +#include +#include + +/* Various header file */ + +#include "config.h" +#include "misc.h" +#include "gsm-common.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "gsm-statemachine.h" +#include "links/utils.h" + +#ifndef WIN32 + #include "device.h" +#else + #include "win32/winserial.h" + #define device_write(a, b) WriteCommBlock(a, b) + #define device_read(a, b) ReadCommBlock(a, b) + #define sleep(x) Sleep((x) * 1000) + #define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +#endif + +#define __links_fbus_c +#include "links/fbus.h" + +/* FIXME - pass device_* the link stuff?? */ +/* FIXME - win32 stuff! */ + + +/* Some globals */ + +static GSM_Link *glink; +static GSM_Statemachine *statemachine; +static FBUS_Link flink; /* FBUS specific stuff, internal to this file */ + + +/*--------------------------------------------*/ + +bool FBUS_OpenSerial(bool dlr3) +{ + if (dlr3) dlr3 = 1; + /* Open device. */ +#ifdef WIN32 + if (OpenConnection(glink->PortDevice, FBUS_RX_StateMachine, NULL)) { +#else + if (!device_open(glink->PortDevice, false, false, false, GCT_Serial)) { +#endif + perror(_("Couldn't open FBUS device")); + return false; + } + device_changespeed(115200); + + /* clearing the RTS bit and setting the DTR bit */ + device_setdtrrts((1-dlr3), 0); + + return (true); +} + + +/* RX_State machine for receive handling. Called once for each character + received from the phone. */ + +void FBUS_RX_StateMachine(unsigned char rx_byte) +{ + + struct timeval time_diff; + FBUS_IncomingFrame *i = &flink.i; + int frm_num, seq_num; + FBUS_IncomingMessage *m; + +#if 0 + if (isprint(rx_byte)) + dprintf("[%02x%c]", (unsigned char) rx_byte, rx_byte); + else + dprintf("[%02x ]", (unsigned char) rx_byte); +#endif + + /* XOR the byte with the current checksum */ + i->checksum[i->BufferCount & 1] ^= rx_byte; + + switch (i->state) { + + /* Messages from the phone start with an 0x1e (cable) or 0x1c (IR). + We use this to "synchronise" with the incoming data stream. However, + if we see something else, we assume we have lost sync and we require + a gap of at least 5ms before we start looking again. This is because + the data part of the frame could contain a byte which looks like the + sync byte */ + + case FBUS_RX_Discarding: + gettimeofday(&i->time_now, NULL); + timersub(&i->time_now, &i->time_last, &time_diff); + if (time_diff.tv_sec == 0 && time_diff.tv_usec < 5000) { + i->time_last = i->time_now; /* no gap seen, continue discarding */ + break; + } + + /* else fall through to... */ + + case FBUS_RX_Sync: + if (glink->ConnectionType == GCT_Infrared) { + if (rx_byte == FBUS_IR_FRAME_ID) { + /* Initialize checksums. */ + i->checksum[0] = FBUS_IR_FRAME_ID; + i->checksum[1] = 0; + i->state = FBUS_RX_GetDestination; + } else { + /* Lost frame sync */ + i->state = FBUS_RX_Discarding; + gettimeofday(&i->time_last, NULL); + } + + } else { /* glink->ConnectionType == GCT_Serial */ + if (rx_byte == FBUS_FRAME_ID) { + /* Initialize checksums. */ + i->checksum[0] = FBUS_FRAME_ID; + i->checksum[1] = 0; + i->state = FBUS_RX_GetDestination; + } else { + /* Lost frame sync */ + i->state = FBUS_RX_Discarding; + gettimeofday(&i->time_last, NULL); + } + } + + break; + + case FBUS_RX_GetDestination: + + i->MessageDestination = rx_byte; + i->state = FBUS_RX_GetSource; + + /* When there is a checksum error and things get out of sync we have to manage to resync */ + /* If doing a data call at the time, finding a 0x1e etc is really quite likely in the data stream */ + /* Then all sorts of horrible things happen because the packet length etc is wrong... */ + /* Therefore we test here for a destination of 0x0c and return to the top if it is not */ + + if (rx_byte != 0x0c) { + i->state = FBUS_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x0c, got %2x\n", rx_byte); + } + + break; + + case FBUS_RX_GetSource: + + i->MessageSource = rx_byte; + i->state = FBUS_RX_GetType; + + /* Source should be 0x00 */ + + if (rx_byte != 0x00) { + i->state = FBUS_RX_Sync; + dprintf("The fbus stream is out of sync - expected 0x00, got %2x\n",rx_byte); + } + + break; + + case FBUS_RX_GetType: + + i->MessageType = rx_byte; + i->state = FBUS_RX_GetLength1; + + break; + + case FBUS_RX_GetLength1: + + i->FrameLength = rx_byte << 8; + i->state = FBUS_RX_GetLength2; + + break; + + case FBUS_RX_GetLength2: + + i->FrameLength = i->FrameLength + rx_byte; + i->state = FBUS_RX_GetMessage; + i->BufferCount = 0; + + break; + + case FBUS_RX_GetMessage: + + i->MessageBuffer[i->BufferCount] = rx_byte; + i->BufferCount++; + + if (i->BufferCount > FBUS_MAX_FRAME_LENGTH) { + dprintf("FBUS: Message buffer overun - resetting\n"); + i->state = FBUS_RX_Sync; + break; + } + + /* If this is the last byte, it's the checksum. */ + + if (i->BufferCount == i->FrameLength + (i->FrameLength % 2) + 2) { + /* Is the checksum correct? */ + if (i->checksum[0] == i->checksum[1]) { + + /* Deal with exceptions to the rules - acks and rlp.. */ + + if (i->MessageType == 0x7f) { + dprintf("[Received Ack of type %02x, seq: %2x]\n", + i->MessageBuffer[0],(unsigned char) i->MessageBuffer[1]); + + } else { /* Normal message type */ + + /* Add data to the relevant Message buffer */ + /* having checked the sequence number */ + + m = &flink.messages[i->MessageType]; + + frm_num = i->MessageBuffer[i->FrameLength - 2]; + seq_num = i->MessageBuffer[i->FrameLength - 1]; + + + /* 0x40 in the sequence number indicates first frame of a message */ + + if ((seq_num & 0x40) == 0x40) { + /* Fiddle around and malloc some memory */ + m->MessageLength = 0; + m->FramesToGo = frm_num; + if (m->Malloced != 0) { + free(m->MessageBuffer); + m->Malloced = 0; + m->MessageBuffer = NULL; + } + m->Malloced = frm_num * m->MessageLength; + m->MessageBuffer = (char *) malloc(m->Malloced); + + } else if (m->FramesToGo != frm_num) { + dprintf("Missed a frame in a multiframe message.\n"); + /* FIXME - we should make sure we don't ack the rest etc */ + } + + if (m->Malloced < m->MessageLength + i->FrameLength) { + m->Malloced = m->MessageLength + i->FrameLength; + m->MessageBuffer = (char *) realloc(m->MessageBuffer, m->Malloced); + } + + memcpy(m->MessageBuffer + m->MessageLength, i->MessageBuffer, + i->FrameLength - 2);/* - (i->FrameLength % 2)); */ + + m->MessageLength += i->FrameLength - 2;/* - (i->FrameLength % 2); */ + + m->FramesToGo--; + + /* Finally dispatch if ready */ + + if (m->FramesToGo == 0) { + SM_IncomingFunction(statemachine, i->MessageType, m->MessageBuffer, m->MessageLength); + free(m->MessageBuffer); + m->MessageBuffer = NULL; + m->Malloced = 0; + } + + /* Send an ack (for all for now) */ + + FBUS_TX_SendAck(i->MessageType, seq_num & 0x0f); + + } + } else { + dprintf("Bad checksum!\n"); + } + i->state = FBUS_RX_Sync; + } + break; + } +} + + +/* This is the main loop function which must be called regularly */ +/* timeout can be used to make it 'busy' or not */ + +GSM_Error FBUS_Loop(struct timeval *timeout) +{ +#ifndef WIN32 + unsigned char buffer[255]; + int count, res; + + res = device_select(timeout); + if (res > 0) { + res = device_read(buffer, 255); + for (count = 0; count < res; count++) + FBUS_RX_StateMachine(buffer[count]); + } else + return GE_TIMEOUT; + + /* This traps errors from device_read */ + if (res > 0) + return GE_NONE; + else + return GE_INTERNALERROR; +#else + return GE_NONE; +#endif +} + + + +/* Prepares the message header and sends it, prepends the message start byte + (0x1e) and other values according the value specified when called. + Calculates checksum and then sends the lot down the pipe... */ + +int FBUS_TX_SendFrame(u8 message_length, u8 message_type, u8 * buffer) +{ + + u8 out_buffer[FBUS_MAX_TRANSMIT_LENGTH + 5]; + int count, current = 0; + unsigned char checksum; + + /* FIXME - we should check for the message length ... */ + + /* Now construct the message header. */ + + if (glink->ConnectionType == GCT_Infrared) + out_buffer[current++] = FBUS_IR_FRAME_ID; /* Start of the IR frame indicator */ + else /* ConnectionType == GCT_Serial */ + out_buffer[current++] = FBUS_FRAME_ID; /* Start of the frame indicator */ + + out_buffer[current++] = FBUS_DEVICE_PHONE; /* Destination */ + out_buffer[current++] = FBUS_DEVICE_PC; /* Source */ + + out_buffer[current++] = message_type; /* Type */ + + out_buffer[current++] = 0; /* Length */ + + out_buffer[current++] = message_length; /* Length */ + + /* Copy in data if any. */ + + if (message_length != 0) { + memcpy(out_buffer + current, buffer, message_length); + current += message_length; + } + + /* If the message length is odd we should add pad byte 0x00 */ + if (message_length % 2) + out_buffer[current++] = 0x00; + + /* Now calculate checksums over entire message and append to message. */ + + /* Odd bytes */ + + checksum = 0; + for (count = 0; count < current; count += 2) + checksum ^= out_buffer[count]; + + out_buffer[current++] = checksum; + + /* Even bytes */ + + checksum = 0; + for (count = 1; count < current; count += 2) + checksum ^= out_buffer[count]; + + out_buffer[current++] = checksum; + +#ifdef DEBUG + fprintf(stderr, _("PC: ")); + + for (count = 0; count < current; count++) + fprintf(stderr, "%02x:", out_buffer[count]); + + fprintf(stderr, "\n"); +#endif /* DEBUG */ + + /* Send it out... */ + + if (device_write(out_buffer, current) != current) + return (false); + + return (true); +} + + +/* Main function to send an fbus message */ +/* Splits up the message into frames if necessary */ + +GSM_Error FBUS_SendMessage(u16 messagesize, u8 messagetype, void *message) +{ + + u8 seqnum, frame_buffer[FBUS_MAX_CONTENT_LENGTH + 2]; + u8 nom, lml; /* number of messages, last message len */ + int i; + + seqnum = 0x40 + flink.RequestSequenceNumber; + flink.RequestSequenceNumber = + (flink.RequestSequenceNumber + 1) & 0x07; + + if (messagesize > FBUS_MAX_CONTENT_LENGTH) { + + nom = (messagesize + FBUS_MAX_CONTENT_LENGTH - 1) + / FBUS_MAX_CONTENT_LENGTH; + lml = messagesize - ((nom - 1) * FBUS_MAX_CONTENT_LENGTH); + + for (i = 0; i < nom - 1; i++) { + + memcpy(frame_buffer, message + (i * FBUS_MAX_CONTENT_LENGTH), + FBUS_MAX_CONTENT_LENGTH); + frame_buffer[FBUS_MAX_CONTENT_LENGTH] = nom - i; + frame_buffer[FBUS_MAX_CONTENT_LENGTH + 1] = seqnum; + + FBUS_TX_SendFrame(FBUS_MAX_CONTENT_LENGTH + 2, + messagetype, frame_buffer); + + seqnum = flink.RequestSequenceNumber; + flink.RequestSequenceNumber = (flink.RequestSequenceNumber + 1) & 0x07; + } + + memcpy(frame_buffer, message + ((nom - 1) * FBUS_MAX_CONTENT_LENGTH), lml); + frame_buffer[lml] = 0x01; + frame_buffer[lml + 1] = seqnum; + FBUS_TX_SendFrame(lml + 2, messagetype, frame_buffer); + + } else { + + memcpy(frame_buffer, message, messagesize); + frame_buffer[messagesize] = 0x01; + frame_buffer[messagesize + 1] = seqnum; + FBUS_TX_SendFrame(messagesize + 2, messagetype, + frame_buffer); + } + return (GE_NONE); +} + + +int FBUS_TX_SendAck(u8 message_type, u8 message_seq) +{ + + unsigned char request[2]; + + request[0] = message_type; + request[1] = message_seq; + + dprintf("[Sending Ack of type %02x, seq: %x]\n",message_type, message_seq); + + return FBUS_TX_SendFrame(2, 0x7f, request); +} + + +/* Initialise variables and start the link */ +/* newlink is actually part of state - but the link code should not anything about state */ +/* state is only passed around to allow for muliple state machines (one day...) */ + +GSM_Error FBUS_Initialise(GSM_Link *newlink, GSM_Statemachine *state, int type) +{ + unsigned char init_char = 0x55; + unsigned char count; + + if (type > 2) return GE_DEVICEOPENFAILED; + /* 'Copy in' the global structures */ + glink = newlink; + statemachine = state; + + /* Fill in the link functions */ + glink->Loop = &FBUS_Loop; + glink->SendMessage = &FBUS_SendMessage; + + /* Check for a valid init length */ + if (glink->InitLength == 0) + glink->InitLength = 250; + + /* Start up the link */ + flink.RequestSequenceNumber = 0; + + if (glink->ConnectionType == GCT_Infrared) { + /* FIXME!! */ + return GE_DEVICEOPENFAILED; + } else { /* ConnectionType == GCT_Serial */ + /* FBUS_OpenSerial(0) - try dau-9p + * FBUS_OpenSerial(n != 0) - try dlr-3p */ + if (!FBUS_OpenSerial(type)) + return GE_DEVICEOPENFAILED; + } + + /* Send init string to phone, this is a bunch of 0x55 characters. Timing is + empirical. */ + /* I believe that we need/can do this for any phone to get the UART synced */ + + for (count = 0; count < glink->InitLength; count++) { + usleep(100); + device_write(&init_char, 1); + } + + /* Init variables */ + flink.i.state = FBUS_RX_Sync; + flink.i.BufferCount = 0; + for (count = 0; count < FBUS_MAX_MESSAGE_TYPES; count++) { + flink.messages[count].Malloced = 0; + flink.messages[count].FramesToGo = 0; + flink.messages[count].MessageLength = 0; + } + + return GE_NONE; +} diff --git a/common/links/utils.c b/common/links/utils.c new file mode 100644 index 0000000..b480e71 --- /dev/null +++ b/common/links/utils.c @@ -0,0 +1,79 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions via fbus. + See README for more details on supported mobile phones. + + The various routines are called FBUS_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:10 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.6 2001/09/14 13:30:07 pkot + Fixed bugs introduced during 0.3.3 merge + + Revision 1.5 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.4 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.3 2001/03/23 13:40:23 chris + Pavel's patch and a few fixes. + + Revision 1.2 2001/03/21 23:36:05 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.1 2001/03/06 10:40:32 machek + Added file with functions usefull for different links. + +*/ + +/* System header files */ +#include +#include +#include + +/* Various header file */ +#include "config.h" +#include "misc.h" +#include "gsm-common.h" +#include "gsm-ringtones.h" +#include "gsm-networks.h" +#include "device.h" + +#if 0 +void +link_dispatch(GSM_Link *glink, GSM_Phone *gphone, int type, u8 *buf, int len) +{ + int c; + for (c = 0; c < gphone->IncomingFunctionNum; c++) + if (gphone->IncomingFunctions[c].MessageType == type) { + gphone->IncomingFunctions[c].Functions(type, buf, len); + dprintf("Received message type %02x\n", type); + + /* FIXME - Hmm, what do we do with the return value.. */ + return; + } + dprintf("Unknown Frame Type %02x\n", type); + gphone->DefaultFunction(type, buf, len); +} +#endif diff --git a/common/mbus-2110.c b/common/mbus-2110.c new file mode 100644 index 0000000..09e7208 --- /dev/null +++ b/common/mbus-2110.c @@ -0,0 +1,1179 @@ +/* -*- linux-c -*- + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Pavel Machek + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:04 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.39 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.38 2001/07/03 00:03:36 pkot + Small fixes to let gnokii compile and work under solaris (thanks to Artur Kubiak) + + Revision 1.37 2001/03/05 08:02:16 machek + Added few static-s. + + Revision 1.36 2001/02/27 22:16:25 machek + Kill unneccessary variable and annoying warning. + + Revision 1.35 2001/02/25 19:15:33 machek + Fixed udelay() to work w.r.t. signals. + + Revision 1.34 2001/02/21 19:56:58 chris + More fiddling with the directory layout + + Revision 1.33 2001/02/20 21:30:28 machek + We really have 150 addressbook places, better + getrflevel/getbatterylevel, wait one second on collision. + + Revision 1.32 2001/02/17 22:40:49 chris + ATA support + + Revision 1.31 2001/02/17 14:39:19 machek + Make writing/reading phonebook less verbose (as it should be). + + Revision 1.30 2001/02/01 15:17:30 pkot + Fixed --identify and added Manfred's manufacturer patch + + Revision 1.29 2001/01/31 11:46:50 machek + Comment out SendSMSMessage to kill warning. + + Revision 1.28 2001/01/29 17:14:42 chris + dprintf now in misc.h (and fiddling with 7110 code) + + Revision 1.27 2001/01/23 18:58:51 machek + Implement collision protocol slightly better. It is still not + completely okay -- we should check if echo is exactly same characters + as we sent. + + Revision 1.26 2001/01/23 15:32:38 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.25 2001/01/12 14:09:12 pkot + More cleanups. This time mainly in the code. + + Revision 1.24 2001/01/10 16:32:17 pkot + Documentation updates. + FreeBSD fix for 3810 code. + Added possibility for deleting SMS just after reading it in gnokii. + 2110 code updates. + Many cleanups. + + Revision 1.23 2001/01/02 09:09:08 pkot + Misc fixes and updates. + + Revision 1.22 2000/12/20 09:11:19 pkot + Fixes to mbus-2110.c to let it compile (by Pavel Machek) + + Revision 1.21 2000/12/19 16:32:28 pkot + Lots of updates in common/mbus-2110.c. (thanks to Pavel Machek) + +*/ + +#ifndef WIN32 + +#include "misc.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __unices__ +# include +#endif + +#include "gsm-common.h" +#include "mbus-2110.h" +#include "phones/nokia.h" + +#define MYID 0x78 + +#undef VELO +#ifdef VELO +#define usleep(x) do { usleep(x); SigHandler(0); } while (0) +#endif + +#define msleep(x) do { usleep(x*1000); } while (0) + +#define THREAD + +/* Global variables used by code in gsm-api.c to expose the + functions supported by this model of phone. */ +bool MB21_LinkOK; +static char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; +static char *Revision = NULL, + *RevisionDate = NULL, + *Model = NULL, + VersionInfo[64]; + +GSM_Information MB21_Information = { + "2110|2140|6080", /* Models */ + 100, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Percentage, /* RF level units */ + 100, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Percentage, /* Battery level units */ + GDT_None, /* No date/time support */ + GDT_None, /* No alarm support */ + 0, /* Max alarms = 0 */ + 0, 0, /* Startup logo size */ + 0, 0, /* Op logo size */ + 0, 0 /* Caller logo size */ +}; + +/* Local variables */ +#ifdef THREAD +static pthread_t Thread; +#endif +static volatile bool RequestTerminate; +static int PortFD; +static struct termios old_termios; /* old termios */ +static u8 TXPacketNumber = 0x01; +#define MAX_MODEL_LENGTH 16 +static bool ModelValid = false; +static volatile unsigned char PacketData[256]; +static volatile bool + ACKOK = false, + PacketOK = false, + EchoOK = false; + +static volatile int SMSpos = 0; +static volatile unsigned char SMSData[256]; + +static long long LastChar = 0; + +static long long +GetTime(void) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + return (long long) tv.tv_sec * 1000000 + tv.tv_usec; +} + +static void +Wait(long long from, int msec) +{ + while (GetTime() < from + ((long long) msec)*1000) + usleep(5000); +} + +#define usleep(x) do { Wait(GetTime(), x/1000); } while (0) + +/* Checksum calculation */ +static u8 +GetChecksum( u8 * packet, int len ) +{ + u8 checksum = 0; + unsigned int i; + + for( i = 0; i < len; i++ ) checksum ^= packet[i]; /* calculate checksum */ + return checksum; +} + +static GSM_Error +SendFrame( u8 *buffer, u8 command, u8 length ) +{ + u8 pkt[256]; + int current = 0; + + pkt[current++] = 0x00; /* Construct the header. */ + pkt[current++] = MYID; + pkt[current++] = length; /* Set data size */ + pkt[current++] = command; + memcpy( pkt + current, buffer, length ); /* Copy in data. */ + current += length; + pkt[current++] = TXPacketNumber; /* Set packet number */ + pkt[current++] = GetChecksum( pkt, current); /* Calculate and set checksum */ +#ifdef DEBUG + { + int i; + u8 b; + fprintf( stderr, _("PC : ") ); + for( i = 0; i < current; i++ ) { + b = pkt[i]; + fprintf( stderr, "[%02X %c]", b, b > 0x20 ? b : '.' ); + } + fprintf( stderr, "\n" ); + } +#endif /* DEBUG */ + /* Send it out... */ + EchoOK = false; + dprintf("("); + Wait(LastChar, 3); + /* I should put my messages at least 2msec apart... */ + dprintf(")"); + if (write(PortFD, pkt, current) != current) /* BUGGY, we should handle -EINTR and short writes! */ { + perror( _("Write error!\n") ); + return (GE_INTERNALERROR); + } + /* wait for echo */ + while( !EchoOK && current-- ) + usleep(1300); + if( !EchoOK ) { + fprintf(stderr, "no echo?!"); + usleep(1000000); + return (GE_TIMEOUT); + } + return (GE_NONE); +} + +static GSM_Error +SendCommand( u8 *buffer, u8 command, u8 length ) +{ + int time, retries = 10; + + ACKOK = false; + while (retries--) { + SendFrame(buffer, command, length); + time = 20; + while (time--) { + if (ACKOK) + return GE_NONE; + msleep(10); + } + fprintf(stderr, "[resend]"); + } + fprintf(stderr, "Command not okay after 10 retries!\n"); + return GE_NONE; +} + +/* Applications should call Terminate to close the serial port. */ +static void +Terminate(void) +{ + /* Request termination of thread */ + RequestTerminate = true; +#ifdef THREAD + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); +#endif + /* Close serial port. */ + if( PortFD >= 0 ) { + tcsetattr(PortFD, TCSANOW, &old_termios); + close( PortFD ); + } +} + +static GSM_Error +SMS(GSM_SMSMessage *message, int command) +{ + u8 pkt[] = { 0x10, 0x02, 0, 0 }; + + SMSpos = 0; + memset((void *) &SMSData[0], 0, 160); + PacketOK = false; + pkt[1] = command; + pkt[2] = 1; /* == LM_SMS_MEM_TYPE_DEFAULT or LM_SMS_MEM_TYPE_SIM or LM_SMS_MEM_TYPE_ME */ + pkt[3] = message->Location; + message->MessageNumber = message->Location; + + SendCommand(pkt, 0x38 /* LN_SMS_COMMAND */, sizeof(pkt)); + while(!PacketOK) { + dprintf("."); + usleep(100000); + if(0) { + fprintf(stderr, _("Impossible timeout?\n")); + return GE_BUSY; + } + } + if (PacketData[3] != 0x37 /* LN_SMS_EVENT */) { + fprintf(stderr, _("Something is very wrong with GetValue\n")); + return GE_BUSY; /* FIXME */ + } + return (GE_NONE); +} + +static GSM_Error +GetSMSMessage(GSM_SMSMessage *m) +{ + int i, len; + if (SMS(m, 2) != GE_NONE) + return GE_BUSY; /* FIXME */ + dprintf("Have message?\n"); + if (m->Location > 10) + return GE_INVALIDSMSLOCATION; + + if (SMSData[0] != 0x0b) { + dprintf("No sms there? (%x/%d)\n", SMSData[0], SMSpos); + return GE_EMPTYSMSLOCATION; + } + dprintf("Status: " ); + switch (SMSData[3]) { + case 7: m->Type = GST_MO; m->Status = GSS_NOTSENTREAD; dprintf("not sent\n"); break; + case 5: m->Type = GST_MO; m->Status = GSS_SENTREAD; dprintf("sent\n"); break; + case 3: m->Type = GST_MT; m->Status = GSS_NOTSENTREAD; dprintf("not read\n"); break; + case 1: m->Type = GST_MT; m->Status = GSS_SENTREAD; dprintf("read\n"); break; + } + + /* Date is at SMSData[7]; this code is copied from fbus-6110.c*/ + { + int offset = -32 + 7; + m->Time.Year=10*(SMSData[32+offset]&0x0f)+(SMSData[32+offset]>>4); + m->Time.Month=10*(SMSData[33+offset]&0x0f)+(SMSData[33+offset]>>4); + m->Time.Day=10*(SMSData[34+offset]&0x0f)+(SMSData[34+offset]>>4); + m->Time.Hour=10*(SMSData[35+offset]&0x0f)+(SMSData[35+offset]>>4); + m->Time.Minute=10*(SMSData[36+offset]&0x0f)+(SMSData[36+offset]>>4); + m->Time.Second=10*(SMSData[37+offset]&0x0f)+(SMSData[37+offset]>>4); + m->Time.Timezone=(10*(SMSData[38+offset]&0x07)+(SMSData[38+offset]>>4))/4; + } + + len = SMSData[14]; + dprintf("%d bytes: ", len ); + for (i = 0; i160) + fprintf(stderr, "Magic not allowed\n"); + memset(m->MessageText, 0, 161); + strncpy(m->MessageText, (void *) &SMSData[15], len); + m->Length = len; + dprintf("Text is %s\n", m->MessageText); + + /* Originator address is at 15+i, + followed by message center addres (?) */ + { + char *s = (char *) &SMSData[15+i]; /* We discard volatile. Make compiler quiet. */ + strcpy(m->Sender, s); + s+=strlen(s)+1; + strcpy(m->MessageCenter.Number, s); + dprintf("Sender = %s, MessageCenter = %s\n", m->Sender, m->MessageCenter.Name); + } + + m->MessageCenter.No = 0; + strcpy(m->MessageCenter.Name, "(unknown)"); + m->UDHType = GSM_NoUDH; + usleep(300000); /* If phone lost our ack, it might retransmit data */ + return (GE_NONE); +} + +#if 0 +static GSM_Error +SendSMSMessage(GSM_SMSMessage *m) +{ + if (m->Location > 10) + return GE_INVALIDSMSLOCATION; + + if (SMSData[0] != 0x0b) { + dprintf("No sms there? (%x/%d)\n", SMSData[0], SMSpos); + return GE_EMPTYSMSLOCATION; + } + dprintf("Status: " ); + switch (SMSData[3]) { + case 7: m->Type = GST_MO; m->Status = GSS_NOTSENTREAD; dprintf("not sent\n"); break; + case 5: m->Type = GST_MO; m->Status = GSS_SENTREAD; dprintf("sent\n"); break; + case 3: m->Type = GST_MT; m->Status = GSS_NOTSENTREAD; dprintf("not read\n"); break; + case 1: m->Type = GST_MT; m->Status = GSS_SENTREAD; dprintf("read\n"); break; + } + return (GE_NONE); +} +#endif + +static GSM_Error DeleteSMSMessage(GSM_SMSMessage *message) +{ + dprintf("deleting..."); + return SMS(message, 3); +} + +/* GetRFLevel */ + +static int +GetValue(u8 index, u8 type) +{ + u8 pkt[] = {0x84, 2, 0}; /* Sending 4 at pkt[0] makes phone crash */ + int val; + pkt[0] = index; + pkt[1] = type; + + PacketOK = false; + + dprintf("\nRequesting value(%d)", index); + SendCommand(pkt, 0xe5, 3); + + while(!PacketOK) { + usleep(1000000); + } + if ((PacketData[3] != 0xe6) || + (PacketData[4] != index) || + (PacketData[5] != type)) + fprintf(stderr, "Something is very wrong with GetValue\n"); + val = PacketData[7]; + dprintf( "Value = %d\n", val ); + return (val); +} + +static GSM_Error +GetRFLevel(GSM_RFUnits *units, float *level) +{ + int val = GetValue(0x84, 2); + float res; + if (*units == GRF_Arbitrary) { + res = (100* (float) val) / 60.0; /* This should be / 99.0 for some models other than nokia-2110 */ + *level = 0; + if (res > 10) + *level = 1; + if (res > 30) + *level = 2; + if (res > 50) + *level = 3; + if (res > 70) + *level = 4; + } else { + *level = (100* (float) val) / 60.0; /* This should be / 99.0 for some models other than nokia-2110 */ + *units = GRF_Percentage; + } + return (GE_NONE); +} + +static GSM_Error +GetBatteryLevel(GSM_BatteryUnits *units, float *level) +{ + int val = GetValue(0x85, 2); + *level = 0; + if (val >= 5) + *level = 1; + if (val >= 10) + *level = 2; + if (val >= 90) + *level = 3; + if (*units == GBU_Arbitrary) { + } else { +/* *level = (100 * (float) val) / 90.0;*/ /* 5..first bar, 10..second bar, 90..third bar */ + *level = *level * 33; + *units = GBU_Percentage; + } + + return (GE_NONE); +} + +static GSM_Error GetVersionInfo() +{ + char *s = VersionInfo; + if (GetValue(0x11, 0x03) == -1) + return GE_TIMEOUT; + + strncpy( s, (void *) &PacketData[6], sizeof(VersionInfo) ); + + for( Revision = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + for( RevisionDate = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + for( Model = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + dprintf("Revision %s, Date %s, Model %s\n", Revision, RevisionDate, Model ); + ModelValid = true; + return (GE_NONE); +} + +static GSM_Error +GetRevision(char *revision) +{ + GSM_Error err = GE_NONE; + + if(!Revision) err = GetVersionInfo(); + if(err == GE_NONE) strncpy(revision, Revision, 64); + + return err; +} + +static GSM_Error +GetModel2110(char *model) +{ + GSM_Error err = GE_NONE; + + if(!Model) err = GetVersionInfo(); + if(err == GE_NONE) strncpy(model, Model, 64); + + return err; +} + +/* Our "Not implemented" functions */ +static GSM_Error +GetMemoryStatus(GSM_MemoryStatus *Status) +{ + switch(Status->MemoryType) { + case GMT_ME: + Status->Used = 0; + Status->Free = 150; + break; + case GMT_LD: + Status->Used = 5; + Status->Free = 0; + break; + case GMT_ON: + Status->Used = 1; + Status->Free = 0; + break; + case GMT_SM: + Status->Used = 0; + Status->Free = 150; + break; + default: + return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + +static bool +SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + return (false); +} + +static void +Display(u8 b, int shift, char *s) +{ + b >>= shift; + b &= 0x03; + switch (b) { + case 0: return; + case 1: case 2: printf( "!!!" ); + case 3: printf("%s ", s); + } +} +static int +HandlePacket(void) +{ + switch(PacketData[3]) { + case 0x12: + printf("Display text at (%d,%d: %s)\n", PacketData[6], PacketData[7], &PacketData[8]); + return 1; + case 0x2f: + printf("Display indicators: "); /* Valid for 2110 */ + Display(PacketData[4], 0, "d"); + Display(PacketData[4], 2, "b"); + Display(PacketData[4], 4, "a"); + Display(PacketData[4], 6, "lights"); + + Display(PacketData[5], 0, "service"); + Display(PacketData[5], 2, "scroll_up"); + Display(PacketData[5], 4, "scroll_down"); + Display(PacketData[5], 6, "ABC"); + + Display(PacketData[6], 0, "2.>"); + Display(PacketData[6], 2, "1.>"); + Display(PacketData[6], 4, "roam"); + Display(PacketData[6], 6, "handset"); + + Display(PacketData[7], 0, "vmail"); + Display(PacketData[7], 2, "envelope"); + Display(PacketData[7], 4, "battbar"); + Display(PacketData[7], 6, "3.>"); + + Display(PacketData[8], 0, "?1"); + Display(PacketData[8], 2, "?2"); + Display(PacketData[8], 4, "fieldbar"); + Display(PacketData[8], 6, "ring"); + printf("\n"); + return 1; + + case 0x37: + /* copy bytes 5+ to smsbuf */ + dprintf("SMSdata:"); + { + int i; + for (i=5; i= 0x20 ? b : '.' ); +#endif /* DEBUG */ + continue; + } else { + pkt[Index++] = b; + if(Index == 3) { + Length = b + 6; + if (b == 0x7f) Length = 5; + if (b == 0x7e) Length = 8; + } + if(Index >= Length) { + if((pkt[0] == MYID || pkt[0]==0xf8) && pkt[1] == 0x00) /* packet from phone */ { +#ifdef DEBUG + fprintf( stdout, _("Phone: ") ); + for( j = 0; j < Length; j++ ) { + b = pkt[j]; + fprintf( stdout, "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + fprintf( stdout, "\n" ); +#endif /* DEBUG */ + /* ensure that we received valid packet */ + if(pkt[Length - 1] != GetChecksum(pkt, Length-1)) { + fprintf( stderr, "***bad checksum***"); + } else { + if((pkt[2] == 0x7F) || (pkt[2] == 0x7E)) /* acknowledge by phone */ { + if (pkt[2] == 0x7F) { + fprintf( stderr, "[ack]" ); + /* Set ACKOK flag */ + ACKOK = true; + /* Increase TX packet number */ + } else { + fprintf( stderr, "[registration ack]" ); + MB21_LinkOK = true; + } + TXPacketNumber++; + } else { + /* Copy packet data */ + fprintf( stderr, "[data]" ); + memcpy((void *) PacketData,pkt,Length); + /* send acknowledge packet to phone */ + usleep(100000); + ack[0] = 0x00; /* Construct the header. */ + ack[1] = pkt[0]; /* Send back id */ + ack[2] = 0x7F; /* Set special size value */ + ack[3] = pkt[Length - 2]; /* Send back packet number */ + ack[4] = GetChecksum( ack, 4); /* Set checksum */ +#ifdef DEBUG + fprintf( stdout, _("PC : ") ); + for( j = 0; j < 5; j++ ) { + b = ack[j]; + fprintf( stdout, "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + fprintf( stdout, "\n" ); +#endif /* DEBUG */ + if( write( PortFD, ack, 5 ) != 5 ) + perror( _("Write error!\n") ); + /* Set validity flag */ + if (!HandlePacket()) + PacketOK = true; + } + } + } else { + fprintf(stderr, "[echo]\n"); + EchoOK = true; + } + /* Look for new packet */ + Index = 0; + Length = 5; + } + } + } +} + +/* Called by initialisation code to open comm port in asynchronous mode. */ +bool OpenSerial(void) +{ + struct termios new_termios; + struct sigaction sig_io; + unsigned int flags; + +#ifdef DEBUG + fprintf(stdout, _("Setting MBUS communication with 2110...\n")); +#endif /* DEBUG */ + + PortFD = open(PortDevice, O_RDWR | O_NOCTTY | O_NONBLOCK); + if ( PortFD < 0 ) { + fprintf(stderr, "Failed to open %s ...\n", PortDevice); + return (false); + } + +#ifdef DEBUG + fprintf(stdout, "%s opened...\n", PortDevice); +#endif /* DEBUG */ + + sig_io.sa_handler = SigHandler; + sig_io.sa_flags = 0; + sigaction (SIGIO, &sig_io, NULL); + /* Allow process/thread to receive SIGIO */ + fcntl(PortFD, F_SETOWN, getpid()); +#ifndef VELO + /* Make filedescriptor asynchronous. */ + fcntl(PortFD, F_SETFL, FASYNC); +#endif + /* Save old termios */ + tcgetattr(PortFD, &old_termios); + /* set speed , 8bit, odd parity */ + memset( &new_termios, 0, sizeof(new_termios) ); + new_termios.c_cflag = B9600 | CS8 | CLOCAL | CREAD | PARODD | PARENB; + new_termios.c_iflag = 0; + new_termios.c_lflag = 0; + new_termios.c_oflag = 0; + new_termios.c_cc[VMIN] = 1; + new_termios.c_cc[VTIME] = 0; + tcflush(PortFD, TCIFLUSH); + tcsetattr(PortFD, TCSANOW, &new_termios); + /* setting the RTS & DTR bit */ + flags = TIOCM_DTR; + ioctl(PortFD, TIOCMBIS, &flags); + flags = TIOCM_RTS; + ioctl(PortFD, TIOCMBIS, &flags); +#ifdef DEBUG + ioctl(PortFD, TIOCMGET, &flags); + fprintf(stdout, _("DTR is %s.\n"), flags & TIOCM_DTR ? _("up") : _("down")); + fprintf(stdout, _("RTS is %s.\n"), flags & TIOCM_RTS ? _("up") : _("down")); + fprintf(stdout, "\n"); +#endif /* DEBUG */ + return (true); +} + +static GSM_Error +SetKey(int c, int up) +{ + u8 reg[] = { 0x7a /* RPC_UI_KEY_PRESS or RPC_UI_KEY_RELEASE */, 0, 1, 0 /* key code */ }; + reg[0] += up; + reg[3] = c; + fprintf(stderr, "\n Pressing %d\n", c ); + PacketOK = false; + SendCommand( reg, 0xe5, 4 ); + while (!PacketOK) + usleep(20000); + return GE_NONE; +} + +#define XCTRL(a) (a&0x1f) +#define POWER XCTRL('o') +#define SEND XCTRL('t') +#define END XCTRL('s') +#define CLR XCTRL('h') +#define MENU XCTRL('d') +#define ALPHA XCTRL('a') +#define PLUS XCTRL('b') +#define MINUS XCTRL('e') +#define PREV XCTRL('p') +#define NEXT XCTRL('n') +#define SOFTA XCTRL('x') +#define SOFTB XCTRL('q') + +static char lastkey; + +static void PressKey(char c, int i) +{ + lastkey = c; +#define X( a, b ) case a: SetKey(b, i); break; + switch (c) { + case '1' ... '9': SetKey(c-'0',i); break; + X('0', 10) + X('#', 11) + X('*', 12) + X(POWER, 13) + X(SEND, 14) + X(END, 15) + X(PLUS, 16) + X(MINUS, 17) + X(CLR, 18) + X(MENU, 21) + X(ALPHA, 22) + X(PREV, 23) + X(NEXT, 24) + X(SOFTA, 25) + X(SOFTB, 26) +#if 0 + X(STO, 19) /* These are not present on 2110, so I can't test this. Enable once tested. */ + X(RCL, 20) + X(MUTE, 28) +#endif + default: fprintf(stderr, "Unknown key %d\n", c); + } +#undef X +} + + +static void +PressString(char *s, int upcase) +{ + static int lastchar; + static int lastupcase = 1; + + if (lastchar == *s) { + fprintf(stderr, "***collision"); + PressKey(ALPHA, 0); + PressKey(ALPHA, 0); + lastupcase = 1; + } + + while (*s) { + lastchar = *s; + PressKey(*s, 0); + if (upcase != lastupcase) { + fprintf(stderr, "***size change"); + usleep(1500000); + PressKey(*s, 1); + lastupcase = upcase; + } + s++; + } +} + +/* + * This is able to press keys at 62letters/36seconds, tested on message + * "Tohle je testovaci zprava schvalne za jak dlouho ji to napise" + */ +static void +HandleKey(char c) +{ + switch(c) { +#define X(a, b) case a: PressString(b, 0); break; + X('-', "1"); + X('?', "11"); + X('!', "111"); + X(',', "1111"); + X('.', "11111"); + X(':', "111111"); + X('"', "1111111"); + X('\'', "11111111"); + X('&', "111111111"); + X('$', "1111111111"); +/* X('$', "11111111111"); libra, not in ascii */ + X('(', "111111111111"); + X(')', "1111111111111"); + X('/', "11111111111111"); + X('%', "111111111111111"); + X('@', "1111111111111111"); + X('_', "11111111111111111"); + X('=', "111111111111111111"); + X('a', "2"); + X('b', "22"); + X('c', "222"); + X('d', "3"); + X('e', "33"); + X('f', "333"); + X('g', "4"); + X('h', "44"); + X('i', "444"); + X('j', "5"); + X('k', "55"); + X('l', "555"); + X('m', "6"); + X('n', "66"); + X('o', "666"); + X('p', "7"); + X('q', "77"); + X('r', "777"); + X('s', "7777"); + X('t', "8"); + X('u', "88"); + X('v', "888"); + X('w', "9"); + X('x', "99"); + X('y', "999"); + X('z', "9999"); +#undef X +#define X(a, b) case a: PressString(b, 1); break; + X('A', "2"); + X('B', "22"); + X('C', "222"); + X('D', "3"); + X('E', "33"); + X('F', "333"); + X('G', "4"); + X('H', "44"); + X('I', "444"); + X('J', "5"); + X('K', "55"); + X('L', "555"); + X('M', "6"); + X('N', "66"); + X('O', "666"); + X('P', "7"); + X('Q', "77"); + X('R', "777"); + X('S', "7777"); + X('T', "8"); + X('U', "88"); + X('V', "888"); + X('W', "9"); + X('X', "99"); + X('Y', "999"); + X('Z', "9999"); +#undef X + case ' ': PressKey('#', 0); break; + case '+': PressKey(ALPHA, 0); PressKey('*', 0); PressKey('*', 0); PressKey(ALPHA, 0); break; + case '*': case '#': + case '0' ... '9': PressKey(ALPHA, 0); PressKey(c, 0); PressKey(ALPHA, 0); break; + default: PressKey(c, 0); + } +} + +static GSM_Error +HandleString(char *s) +{ + while (*s) { + HandleKey(*s); + s++; + } + fprintf(stderr,"***end of input"); + PressKey(lastkey, 1); + return GE_NONE; +} + +static void +Register(void) +{ + u8 reg[] = { 1, 1, 0x0f, 1, 0x0f }; + SendFrame( reg, 0xe9, 5 ); +} + +/* Fixme: implement grabdisplay properly */ +static GSM_Error +EnableDisplayOutput(void) +{ + /* LN_UC_SHARE, LN_UC_SHARE, LN_UC_RELEASE, LN_UC_RELEASE, LN_UC_KEEP */ + u8 pkt[] = {3, 3, 0, 0, 1}; + + return GE_NOTIMPLEMENTED; /* We can do grab display, but we do not know how to ungrab it and with + display grabbed, we can't even initialize connection. */ + PacketOK = false; + + SendCommand(pkt, 0x19, 5); + while(!PacketOK) { + fprintf(stderr, "\nGrabbing display"); + usleep(1000000); + } + if ((PacketData[3] != 0xcd) || + (PacketData[2] != 1) || + (PacketData[4] != 1 /* LN_UC_REQUEST_OK */)) + fprintf(stderr, "Something is very wrong with GrabDisplay\n"); + fprintf(stderr, "Display grabbed okay\n"); + return GE_NONE; +} + + +/* This is the main loop for the MB21 functions. When MB21_Initialise + is called a thread is created to run this loop. This loop is + exited when the application calls the MB21_Terminate function. */ +static void +ThreadLoop(void) +{ + fprintf(stderr, "Initializing... "); + /* Do initialisation stuff */ + LastChar = GetTime(); + if (OpenSerial() != true) { + MB21_LinkOK = false; +#ifdef THREAD + while (!RequestTerminate) { + usleep (100000); + } +#endif + return; + } + + usleep(100000); + while(!MB21_LinkOK) { + fprintf(stderr, "registration... "); + Register(); + msleep(100); + msleep(100); + msleep(100); + msleep(100); + } + fprintf(stderr, "okay\n"); +#ifdef THREAD + while (!RequestTerminate) + msleep(100); /* Avoid becoming a "busy" loop. */ +#endif +} + +/* Initialise variables and state machine. */ +static GSM_Error +Initialise(char *port_device, char *initlength, GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + RequestTerminate = false; + MB21_LinkOK = false; + memset(VersionInfo,0,sizeof(VersionInfo)); + strncpy(PortDevice, port_device, GSM_MAX_DEVICE_NAME_LENGTH); +#ifdef THREAD + { + int rtn; + rtn = pthread_create(&Thread, NULL, (void *) ThreadLoop, (void *)NULL); + if(rtn == EAGAIN || rtn == EINVAL) + return (GE_INTERNALERROR); + } +#else + ThreadLoop(); +#endif + return (GE_NONE); +} + +/* Routine to get specifed phone book location. Designed to be called by + application. Will block until location is retrieved or a timeout/error + occurs. */ + +static GSM_Error +GetPhonebookLocation(GSM_PhonebookEntry *entry) +{ + u8 pkt[] = {0x1a, 0 /* 1 == phone */, 0}; + int i; + + pkt[1] = 3 + (entry->MemoryType != GMT_ME); + pkt[2] = entry->Location; + + PacketOK = false; + SendCommand(pkt, /* LN_LOC_COMMAND */ 0x1f, 3); + while (!PacketOK) + msleep(100); + if ((PacketData[3] != 0xc9) || + (PacketData[4] != 0x1a)) { + fprintf(stderr, "Something is very wrong with GetPhonebookLocation\n"); + return GE_BUSY; + } + dprintf("type= %x\n", PacketData[5]); + dprintf("location= %x\n", PacketData[6]); + dprintf("status= %x\n", PacketData[7]); + for (i=8; PacketData[i]; i++) { + dprintf("%c", PacketData[i]); + } + strcpy(entry->Name, (void *)&PacketData[8]); + i++; + strcpy(entry->Number, (void *)&PacketData[i]); + for (; PacketData[i]; i++) { + dprintf("%c", PacketData[i]); + } + dprintf("\n"); + entry->Empty = false; + entry->Group = 0; + + return (GE_NONE); +} + +/* Routine to write phonebook location in phone. Designed to be called by + application code. Will block until location is written or timeout + occurs. */ + +static GSM_Error +WritePhonebookLocation(GSM_PhonebookEntry *entry) +{ + u8 pkt[999] = {0x1b, 0 /* 1 == phone */, 0}; + + pkt[1] = 3 + (entry->MemoryType != GMT_ME); + pkt[2] = entry->Location; + strcpy(&pkt[3], entry->Name); + strcpy(&pkt[3+strlen(entry->Name)+1], entry->Number); + + PacketOK = false; + SendCommand(pkt, /* LN_LOC_COMMAND */ 0x1f, 3+strlen(entry->Number)+strlen(entry->Name)+2); + while(!PacketOK) { + usleep(1000000); + } + printf("okay?\n"); + if ((PacketData[3] != 0xc9) || + (PacketData[4] != 0x1b)) { + fprintf(stderr, "Something is very wrong with WritePhonebookLocation\n"); + return GE_BUSY; + } + printf("type= %x\n", PacketData[5]); + printf("location= %x\n", PacketData[6]); + printf("status= %x\n", PacketData[7]); + return (GE_NONE); +} + +static GSM_Error +GetSMSStatus(GSM_SMSStatus *Status) +{ + Status->UnRead = 0; + Status->Number = 5; + return GE_NONE; +} + + +GSM_Functions MB21_Functions = { + Initialise, + Terminate, + GetPhonebookLocation, + WritePhonebookLocation, + UNIMPLEMENTED, + UNIMPLEMENTED, + GetMemoryStatus, + GetSMSStatus, + UNIMPLEMENTED, + UNIMPLEMENTED, + GetSMSMessage, + DeleteSMSMessage, + UNIMPLEMENTED, + UNIMPLEMENTED, + GetRFLevel, + GetBatteryLevel, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + GetRevision, + GetModel2110, + PNOK_GetManufacturer, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + SendRLPFrame, + UNIMPLEMENTED, + EnableDisplayOutput, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + SetKey, + HandleString, + UNIMPLEMENTED +}; + +#endif + diff --git a/common/mbus-6160.c b/common/mbus-6160.c new file mode 100644 index 0000000..372bd7d --- /dev/null +++ b/common/mbus-6160.c @@ -0,0 +1,1139 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This code contains the main part of the 5160/6160 code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:05 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.29 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.28 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef WIN32 + +#define __mbus_6160_c /* "Turn on" prototypes in mbus-6160.h */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "mbus-6160.h" +#include "device.h" +#include "phones/nokia.h" + +#define WRITEPHONE(a, b, c) device_write(b, c) + +//#define DEBUG + + /* Global variables used by code in gsm-api.c to expose the + functions supported by this model of phone. */ +bool MB61_LinkOK; + +GSM_Functions MB61_Functions = { + MB61_Initialise, + MB61_Terminate, + MB61_GetMemoryLocation, + MB61_WritePhonebookLocation, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + PNOK_GetManufacturer, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB61_SendRLPFrame, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED +}; + + /* FIXME - these are guesses only... */ +GSM_Information MB61_Information = { + "5160|6160|6185", /* Models */ + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_None, /* No date/time support */ + GDT_None, /* No alarm support */ + 0, /* Max alarms = 0 */ + 0, 0, /* Startup logo size */ + 0, 0, /* Op logo size */ + 0, 0 /* Caller logo size */ +}; + + /* Local variables */ +pthread_t Thread; +bool RequestTerminate; +bool MB61_LinkOK; +char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; +u8 RequestSequenceNumber; /* 2-63 */ +int PortFD; +bool GotInitResponse; +bool GotIDResponse; + +enum MB61_RX_States RX_State; +enum MB61_Models ModelIdentified; +enum MB61_Responses ExpectedResponse; +enum MB61_Responses LatestResponse; + +GSM_PhonebookEntry *CurrentPhonebookEntry; +GSM_Error CurrentPhonebookError; + +int MessageLength; +u8 MessageDestination; +u8 MessageSource; +u8 MessageCommand; +u8 MessageBuffer[MB61_MAX_RECEIVE_LENGTH]; +u8 MessageCSum; +u8 MessageSequenceNumber; +int BufferCount; +u8 CalculatedCSum; +int ChecksumFails; + + + /* The following functions are made visible to gsm-api.c and friends. */ + + /* Initialise variables and state machine. */ +GSM_Error MB61_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + + int rtn; + + RequestTerminate = false; + MB61_LinkOK = false; + ModelIdentified = MB61_ModelUnknown; + ExpectedResponse = MB61_Response_Unknown; + CurrentPhonebookEntry = NULL; + CurrentPhonebookError = GE_NONE; + + + strncpy (PortDevice, port_device, GSM_MAX_DEVICE_NAME_LENGTH); + + /* Create and start thread, */ + rtn = pthread_create(&Thread, NULL, (void *) MB61_ThreadLoop, (void *)NULL); + + if (rtn == EAGAIN || rtn == EINVAL) { + return (GE_INTERNALERROR); + } + + return (GE_NONE); + +} + + /* Applications should call MB61_Terminate to shut down + the MB61 thread and close the serial port. */ +void MB61_Terminate(void) +{ + /* Request termination of thread */ + RequestTerminate = true; + + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); + + /* Close serial port. */ + +} + + /* Routine to get specifed phone book location. Designed to + be called by application. Will block until location is + retrieved or a timeout/error occurs. */ +GSM_Error MB61_GetMemoryLocation(GSM_PhonebookEntry *entry) +{ + int timeout; + + if (entry->MemoryType != GMT_ME) { + return (GE_INVALIDMEMORYTYPE); + } + + timeout = 20; /* 2 seconds for command to complete */ + + /* Return if no link has been established. */ + if (!MB61_LinkOK) { + return GE_NOLINK; + } + + /* Process depending on model identified */ + switch (ModelIdentified) { + + case MB61_Model5160: + if (entry->Location >= MAX_5160_PHONEBOOK_ENTRIES) { + return (GE_INVALIDPHBOOKLOCATION); + } + CurrentPhonebookEntry = entry; + CurrentPhonebookError = GE_BUSY; + MB61_SetExpectedResponse(MB61_Response_0x40_PhonebookRead); + MB61_TX_SendPhonebookReadRequest(entry->Location); + break; + + case MB61_Model6160: + if (entry->Location >= MAX_6160_PHONEBOOK_ENTRIES) { + return (GE_INVALIDPHBOOKLOCATION); + } + CurrentPhonebookEntry = entry; + CurrentPhonebookError = GE_BUSY; + MB61_SetExpectedResponse(MB61_Response_0x40_PhonebookRead); + MB61_TX_SendPhonebookReadRequest(entry->Location); + break; + + case MB61_Model6185: + if (entry->Location >= MAX_6185_PHONEBOOK_ENTRIES) { + return (GE_INVALIDPHBOOKLOCATION); + } + CurrentPhonebookEntry = entry; + CurrentPhonebookError = GE_BUSY; + MB61_SetExpectedResponse(MB61_Response_0x40_LongPhonebookRead); + MB61_TX_SendLongPhonebookReadRequest(entry->Location); + break; + + default: + return(GE_NOTIMPLEMENTED); + } + + /* When response is received, data is copied into entry + by handler code or if error has occured, CurrentPhonebookEntry + is set accordingly. */ + if (MB61_WaitForExpectedResponse(2000) != true) { + return (GE_INTERNALERROR); + } + return (CurrentPhonebookError); + +} + + /* Routine to write phonebook location in phone. Designed to + be called by application code. Will block until location + is written or timeout occurs. */ +GSM_Error MB61_WritePhonebookLocation(GSM_PhonebookEntry *entry) +{ + + if (entry->MemoryType != GMT_ME) { + return (GE_INVALIDMEMORYTYPE); + } + + /* Return if no link has been established. */ + if (!MB61_LinkOK) { + return GE_NOLINK; + } + + /* Process depending on model identified */ + switch (ModelIdentified) { + + case MB61_Model5160: + if (entry->Location >= MAX_5160_PHONEBOOK_ENTRIES) { + return (GE_INVALIDPHBOOKLOCATION); + } + if (strlen(entry->Name) > MAX_5160_PHONEBOOK_NAME_LENGTH) { + return (GE_PHBOOKNAMETOOLONG); + } + if (strlen(entry->Name) > MAX_5160_PHONEBOOK_NUMBER_LENGTH) { + return (GE_PHBOOKNAMETOOLONG); + } + CurrentPhonebookError = GE_BUSY; + MB61_SetExpectedResponse(MB61_Response_0x40_WriteAcknowledge); + MB61_TX_SendPhonebookWriteRequest(entry); + break; + + case MB61_Model6160: + if (entry->Location >= MAX_6160_PHONEBOOK_ENTRIES) { + return (GE_INVALIDPHBOOKLOCATION); + } + if (strlen(entry->Name) > MAX_616X_PHONEBOOK_NAME_LENGTH) { + return (GE_PHBOOKNAMETOOLONG); + } + if (strlen(entry->Name) > MAX_616X_PHONEBOOK_NUMBER_LENGTH) { + return (GE_PHBOOKNAMETOOLONG); + } + CurrentPhonebookError = GE_BUSY; + MB61_SetExpectedResponse(MB61_Response_0x40_WriteAcknowledge); + MB61_TX_SendPhonebookWriteRequest(entry); + break; + + case MB61_Model6185: + return (GE_NOTIMPLEMENTED); + break; + + default: + return(GE_NOTIMPLEMENTED); + } + + /* When response is received, data is copied into entry + by handler code or if error has occured, CurrentPhonebookEntry + is set accordingly. */ + if (MB61_WaitForExpectedResponse(2000) != true) { + return (GE_INTERNALERROR); + } + return (CurrentPhonebookError); + +} + +bool MB61_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + return (false); +} + + /* Everything from here down is internal to 6160 code. */ + + + /* This is the main loop for the MB61 functions. When MB61_Initialise + is called a thread is created to run this loop. This loop is + exited when the application calls the MB61_Terminate function. */ +void MB61_ThreadLoop(void) +{ + int idle_timer; + + /* Initialise RX state machine. */ + BufferCount = 0; + RX_State = MB61_RX_Sync; + idle_timer = 0; + + /* Try to open serial port, if we fail we sit here and don't proceed + to the main loop. */ + if (MB61_OpenSerial() != true) { + MB61_LinkOK = false; + + while (!RequestTerminate) { + usleep (100000); + } + return; + } + + /* Do initialisation sequence, sit here if it fails. */ + if (MB61_InitialiseLink() != true) { + MB61_LinkOK = false; + + while (!RequestTerminate) { + usleep (100000); + } + return; + } + + /* Link is up OK so sit here twiddling our thumbs until + told to terminate. */ + while (!RequestTerminate) { + if (idle_timer == 0) { + idle_timer = 20; + } + else { + idle_timer --; + /*fprintf(stdout, "."); + fflush(stdout);*/ + } + + usleep(100000); /* Avoid becoming a "busy" loop. */ + } + + /* Drop DTR and RTS lines before exiting */ + device_setdtrrts(0, 0); +} + + +bool MB61_InitialiseLink(void) +{ + unsigned char init_char[1] = {0x04}; + + fprintf(stdout, "Sending init...\n"); + + /* Need to "toggle" the dtr/rts lines in the right + sequence it seems for the interface to work. + Base time value is units of 50ms it seems */ + +#define BASE_TIME (50000) + + /* Default state */ + device_setdtrrts(0, 1); + sleep(1); + + /* RTS low for 250ms */ + device_setdtrrts(0, 0); + usleep(5 * BASE_TIME); + + /* RTS high, DTR high for 50ms */ + device_setdtrrts(1, 1); + usleep(BASE_TIME); + + /* RTS low, DTR high for 50ms */ + device_setdtrrts(1, 0); + usleep(BASE_TIME); + + /* RTS high, DTR high for 50ms */ + device_setdtrrts(1, 1); + usleep(BASE_TIME); + + /* RTS low, DTR high for 50ms */ + device_setdtrrts(1, 0); + usleep(BASE_TIME); + + /* RTS low, DTR low for 50ms */ + device_setdtrrts(0, 0); + usleep(BASE_TIME); + + /* RTS low, DTR high for 50ms */ + device_setdtrrts(1, 0); + usleep(BASE_TIME); + + /* RTS high, DTR high for 50ms */ + device_setdtrrts(1, 1); + usleep(BASE_TIME); + + /* RTS low, DTR low for 50ms */ + device_setdtrrts(0, 0); + usleep(BASE_TIME); + + /* leave RTS high, DTR low for duration of session. */ + usleep(BASE_TIME); + device_setdtrrts(0, 1); + + sleep(1); + + + /* Initialise sequence number used when sending messages + to phone. */ + + /* Send Initialisation message to phone. */ + MB61_SetExpectedResponse(MB61_Response_0xD0_Init); + + RequestSequenceNumber = 0x02; + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0xd0, RequestSequenceNumber, 1, init_char); + + /* We've now finished initialising things so sit in the loop + until told to do otherwise. Loop doesn't do much other + than send periodic keepalive messages to phone. This + loop will become more involved once we start doing + fax/data calls. */ + + fprintf(stdout, "Waiting for first response...\n"); + fflush(stdout); + + if(MB61_WaitForExpectedResponse(100) == false) { + return false; + } + + MB61_SetExpectedResponse(MB61_Response_0xD0_Init); + + RequestSequenceNumber ++; + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0xd0, RequestSequenceNumber, 1, init_char); + + + fprintf(stdout, "Waiting for second response...\n"); + fflush(stdout); + if(MB61_WaitForExpectedResponse(100) == false) { + return false; + } + + + MB61_SetExpectedResponse(MB61_Response_0xD0_Init); + MB61_TX_SendPhoneIDRequest(); + if(MB61_WaitForExpectedResponse(300) == false) { + return false; + } + + MB61_LinkOK = true; + return (true); + +} + + /* MB61_SetExpectedResponse + Used in combination with MB61_WaitForExpectedResponse, these + functions allow the MB61 code to specify what message it is expecting + a response to. This becomes important as it appears that there is + no standard or unique character to identify incoming messages from + the phone. A good example is the ID and Version responses which differ + only in their length and one of the bytes in the data portion of the + message. It may be that once we understand more of the MBUS protocol + we can confirm that messages are unique... */ + +void MB61_SetExpectedResponse(enum MB61_Responses response) +{ + LatestResponse = MB61_Response_Unknown; + ExpectedResponse = response; +} + + /* MB61_WaitForExpectedResponse + Allows code to wait a specified number of msecs + for the requested response before timing out. Returns + true if expected response has been recieved, false in + case of timeout */ +bool MB61_WaitForExpectedResponse(int timeout) +{ + int count; + + count = timeout; + while ((count > 0) && (LatestResponse != ExpectedResponse)) { + count --; + usleep(1000); + } + + if (LatestResponse == ExpectedResponse) { + return (true); + } + + return (false); +} + + + /* MB61_RX_DispatchMessage + Once we've received a message from the phone, the command/message + type byte is used to call an appropriate handler routine or + simply acknowledge the message as required. */ +enum MB61_RX_States MB61_RX_DispatchMessage(void) +{ + + /* If the message is from ADDR_PC ignore and don't process further. */ + if (MessageSource == MSG_ADDR_PC) { + return MB61_RX_Sync; + } + /* Leave this uncommented if you want all messages in raw form. */ + //MB61_RX_DisplayMessage(); + + /* Switch on the basis of the message type byte */ + switch (MessageCommand) { + + case 0x40: + if (MB61_TX_SendStandardAcknowledge(MessageSequenceNumber) != true) { + fprintf(stderr, _("Standard Ack write (0x40) failed!")); + } + + if (ExpectedResponse == MB61_Response_0x40_PhonebookRead) { + MB61_RX_Handle0x40_PhonebookRead(); + LatestResponse = MB61_Response_0x40_PhonebookRead; + break; + } + + if (ExpectedResponse == MB61_Response_0x40_WriteAcknowledge) { + LatestResponse = MB61_Response_0x40_WriteAcknowledge; + CurrentPhonebookError = GE_NONE; + break; + } + break; + + /* 0xd0 messages are the response to + initialisation requests. */ + case 0xd0: + if (ExpectedResponse == MB61_Response_0xD0_Init) { + LatestResponse = MB61_Response_0xD0_Init; + } + break; + + case 0xd2: + if (MB61_TX_SendStandardAcknowledge(MessageSequenceNumber) != true) { + fprintf(stderr, _("Standard Ack write (0xd2) failed!")); + } + if (ExpectedResponse == MB61_Response_0xD2_ID) { + MB61_RX_Handle0xD2_ID(); + LatestResponse = MB61_Response_0xD2_ID; + } + if (ExpectedResponse == MB61_Response_0xD2_Version) { + MB61_RX_Handle0xD2_Version(); + LatestResponse = MB61_Response_0xD2_Version; + } + break; + + + /* Incoming 0x7f's are acks for commands we've sent. */ + case 0x7f: break; + + /* Here we attempt to acknowledge and display messages + we don't understand fully... The phone will send + the same message several (3-4) times before giving + up if no ack is received. */ + default: MB61_RX_DisplayMessage(); + if (MB61_TX_SendStandardAcknowledge(MessageSequenceNumber) != true) { + fprintf(stderr, _("Standard Ack write failed!")); + } + fprintf(stdout, "Sent standard Ack for unknown %02x\n", MessageCommand); + break; + } + + return MB61_RX_Sync; +} + + /* "Short" phonebook reads have 8 bytes of data (unknown/unstudied) + then a null terminated string for the number and then a null + terminated string which is the name. */ +void MB61_RX_Handle0x40_PhonebookRead(void) +{ + int i, j; + bool got_null; + + if (CurrentPhonebookEntry == NULL) { + CurrentPhonebookError = GE_INTERNALERROR; + return; + } + + /* First do number */ + i = 8; + got_null = false; + j = 0; + + while ((i < MessageLength) && (!got_null) && (j < GSM_MAX_PHONEBOOK_NUMBER_LENGTH)) { + CurrentPhonebookEntry->Number[j] = MessageBuffer[i]; + i++; + j++; + if (MessageBuffer[i] == 0) { + got_null = true; + } + } + CurrentPhonebookEntry->Number[j] = 0; + + /* Now name */ + got_null = false; + j = 0; + i ++; + + while ((i < MessageLength) && (!got_null) && (j < GSM_MAX_PHONEBOOK_NAME_LENGTH)) { + CurrentPhonebookEntry->Name[j] = MessageBuffer[i]; + i++; + j++; + if (MessageBuffer[i] == 0) { + got_null = true; + } + } + CurrentPhonebookEntry->Name[j] = 0; + + if ((strlen(CurrentPhonebookEntry->Number) != 0) || + (strlen(CurrentPhonebookEntry->Name) != 0)) { + CurrentPhonebookEntry->Empty = false; + } + else { + CurrentPhonebookEntry->Empty = true; + } + CurrentPhonebookEntry->Group = GSM_GROUPS_NOT_SUPPORTED; + + /* Done */ + CurrentPhonebookError = GE_NONE; + +} + +void MB61_RX_Handle0x40_LongPhonebookRead(void) +{ + + +} + + + + /* When we get an ID response back, we use it to set + model information for later and if in debug mode print it out. */ +void MB61_RX_Handle0xD2_ID(void) +{ +#ifdef DEBUG + int i; +#endif + + if (strstr(MessageBuffer + 4, "NSW-1") != NULL) { + ModelIdentified = MB61_Model5160; +#ifdef DEBUG + fprintf(stdout, "Identified as 5160\n"); +#endif + } + else { + if (strstr(MessageBuffer + 4, "NSW-3") != NULL) { + ModelIdentified = MB61_Model6160; +#ifdef DEBUG + fprintf(stdout, "Identified as 6160\n"); +#endif + } + else { + if (strstr(MessageBuffer + 4, "NSD-3") != NULL) { + ModelIdentified = MB61_Model6185; +#ifdef DEBUG + fprintf(stdout, "Identified as 6185\n"); +#endif + } + else { +#ifdef DEBUG + fprintf(stdout, "Unknown model - please report dump below to hugh@linuxcare.com\n"); +#endif + } + } + } +#ifdef DEBUG + for (i = 4; i < MessageLength; i++) { + if (isprint(MessageBuffer[i])) { + fprintf(stdout, "[%02x%c]", MessageBuffer[i], MessageBuffer[i]); + } + else { + fprintf(stdout, "[%02x ]", MessageBuffer[i]); + } + if (((i - 3) % 16) == 0) { + fprintf(stdout, "\n"); + } + } +#endif + + +#ifdef DEBUG + fflush(stdout); +#endif + +} +void MB61_RX_Handle0xD2_Version(void) +{ + + +} + + +void MB61_RX_DisplayMessage(void) +{ + int i; + + fprintf(stdout, "Dest:%02x Src:%02x Cmd:%02x Len:%d Seq:%02x Csum:%02x\n", + MessageDestination, MessageSource, MessageCommand, MessageLength, + MessageSequenceNumber, MessageCSum); + + if (MessageLength == 0) { + return; + } + else { + fprintf(stdout, "Data: "); + } + for (i = 0; i < MessageLength; i++) { + if (isprint(MessageBuffer[i])) { + fprintf(stdout, "[%02x%c]", MessageBuffer[i], MessageBuffer[i]); + } + else { + fprintf(stdout, "[%02x ]", MessageBuffer[i]); + } + if (((i + 1) % 8) == 0) { + fprintf(stdout, "\n "); + } + } + fprintf(stdout, "\n"); + +} + + /* Higher level code does bounds checks for length of name/number + as well as entry number. */ +GSM_Error MB61_TX_SendPhonebookWriteRequest(GSM_PhonebookEntry *entry) +{ + /* 7 - header and null terminators, 17 - number length, + 17 - name length. */ + u8 message[7 + 17 + 17]; + int name_length; + int number_length; + int message_length; + + name_length = strlen(entry->Name); + number_length = strlen(entry->Number); + + /* Header plus two terminating nulls plus name/number themselves */ + message_length = 7 + name_length + 1 + number_length + 1; + + message[0] = 0x00; /* Header bytes, purpose not investigated */ + message[1] = 0x01; + message[2] = 0x1f; + message[3] = 0x01; + message[4] = 0x04; + message[5] = 0x87; + + message[6] = entry->Location; + + strncpy(message + 7, entry->Number, 16); + + strncpy(message + 8 + number_length, entry->Name, 16); + + MB61_UpdateSequenceNumber(); + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0x40, RequestSequenceNumber, message_length, message); + + return (GE_NONE); + +} + +bool MB61_TX_SendPhonebookReadRequest(u8 entry) +{ + u8 message[7] = {0x00, 0x01, 0x1f, 0x01, 0x04, 0x86, 0x01}; + + message[6] = entry; + + MB61_UpdateSequenceNumber(); + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0x40, RequestSequenceNumber, 7, message); + + ExpectedResponse = MB61_Response_0x40_PhonebookRead; + + return (true); +} + + /* 6185 requires a different phone book request apparently */ +bool MB61_TX_SendLongPhonebookReadRequest(u8 entry) +{ + u8 message[8] = {0x00, 0x00, 0x07, 0x11, 0x00, 0x10, 0x00, 0x00}; + + message[7] = entry; + + MB61_UpdateSequenceNumber(); + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0x40, RequestSequenceNumber, 8, message); + + ExpectedResponse = MB61_Response_0x40_PhonebookRead; + + return (true); +} + + +void MB61_TX_SendPhoneIDRequest(void) +{ + u8 message[5] = {0x00, 0x01, 0x00, 0x03, 0x00}; + + MB61_UpdateSequenceNumber(); + MB61_TX_SendMessage(MSG_ADDR_PHONE, MSG_ADDR_PC, 0xd1, RequestSequenceNumber, 5, message); + + ExpectedResponse = MB61_Response_0xD2_ID; + +} + +void MB61_UpdateSequenceNumber(void) +{ + RequestSequenceNumber ++; + if (RequestSequenceNumber > 63) { + RequestSequenceNumber = 2; + } +} + + /* Not totally happy with this but it works for now. - HAB 20000602 */ +bool MB61_TX_SendStandardAcknowledge(u8 sequence_number) +{ + u8 out_buffer[6]; + u8 checksum; + int count; + + out_buffer[0] = 0x1f; + out_buffer[1] = MSG_ADDR_PHONE; + out_buffer[2] = MSG_ADDR_PC; + out_buffer[3] = 0x7f; + out_buffer[4] = sequence_number; + + /* Now calculate checksum over entire message + and append to message. */ + checksum = 0; + for (count = 0; count < 5; count ++) { + checksum ^= out_buffer[count]; + } + out_buffer[5] = checksum; + + /* Send it out... */ + if (WRITEPHONE(PortFD, out_buffer, 6) != 6) { + perror(_("TX_SendMessage - write:")); + return (false); + } + +#ifdef DEBUG + fprintf(stdout, "(Ack %02x) ", sequence_number); +#endif + + return (true); +} + /* RX_State machine for receive handling. Called once for each + character received from the phone/phone. */ +void MB61_RX_StateMachine(char rx_byte) +{ + +#ifdef DEBUG + fprintf(stdout, "(%d)", RX_State); +#endif + + switch (RX_State) { + + /* Messages on the MBUS start with 0x1f. We use + this to "synchronise" with the incoming data + stream. */ + case MB61_RX_Sync: + if (rx_byte == 0x1f) { + + BufferCount = 0; + CalculatedCSum = rx_byte; + RX_State = MB61_RX_GetDestination; + } + break; + + /* Next byte is the destination of the message. */ + case MB61_RX_GetDestination: + MessageDestination = rx_byte; + CalculatedCSum ^= rx_byte; + RX_State = MB61_RX_GetSource; + break; + + /* Next byte is the source of the message. */ + case MB61_RX_GetSource: + MessageSource = rx_byte; + CalculatedCSum ^= rx_byte; + + /* Sanity check these. We make sure that the Source + and destination are either PC/PHONE or PHONE/PC */ + if (((MessageSource == MSG_ADDR_PC) && (MessageDestination == MSG_ADDR_PHONE)) || + ((MessageSource == MSG_ADDR_PHONE) && (MessageDestination == MSG_ADDR_PC))) { + RX_State = MB61_RX_GetCommand; + } + else { + RX_State = MB61_RX_Sync; + } + break; + + /* Next byte is the command type. */ + case MB61_RX_GetCommand: + MessageCommand = rx_byte; + CalculatedCSum ^= rx_byte; + /* Command type 0x7f is an ack and is handled + differently in that it's length is known a priori */ + if (MessageCommand != 0x7f) { + RX_State = MB61_RX_GetLengthMSB; + break; + } + else { + MessageLength = 0; + RX_State = MB61_RX_GetMessage; + break; + } + + /* Next is the most significant byte of message length. */ + case MB61_RX_GetLengthMSB: + MessageLength = rx_byte * 256; + CalculatedCSum ^= rx_byte; + RX_State = MB61_RX_GetLengthLSB; + break; + + /* Next is the most significant byte of message length. */ + case MB61_RX_GetLengthLSB: + MessageLength += rx_byte; + CalculatedCSum ^= rx_byte; + RX_State = MB61_RX_GetMessage; + break; + + /* Get each byte of the message. We deliberately + get one too many bytes so we get the sequence + byte here as well. */ + case MB61_RX_GetMessage: + CalculatedCSum ^= rx_byte; + MessageBuffer[BufferCount] = rx_byte; + BufferCount ++; + + if (BufferCount >= MB61_MAX_RECEIVE_LENGTH) { + RX_State = MB61_RX_Sync; /* Should be PANIC */ + } + /* If this is the last byte, it's the checksum */ + if (BufferCount > MessageLength) { + MessageSequenceNumber = rx_byte; + RX_State = MB61_RX_GetCSum; + } + break; + + /* Get checksum and if valid hand over to + dispatch message function */ + case MB61_RX_GetCSum: + + MessageCSum = rx_byte; + + /* Compare against calculated checksum. */ + if (MessageCSum == CalculatedCSum) { + /* Got checksum, matches calculated one so + now pass to appropriate dispatch handler. */ + RX_State = MB61_RX_DispatchMessage(); + } + /* Checksum didn't match so ignore. */ + else { + ChecksumFails ++; + fprintf(stderr, _("CS Fail %02x != %02x"), MessageCSum, CalculatedCSum); + MB61_RX_DisplayMessage(); + fflush(stderr); + RX_State = MB61_RX_Sync; + } + + CalculatedCSum ^= rx_byte; + break; + + default: + } +} + + /* Called by initialisation code to open comm port in + asynchronous mode. */ +bool MB61_OpenSerial(void) +{ + int result; + struct sigaction sig_io; + + /* Set up and install handler before enabling async IO on port. */ + + sig_io.sa_handler = MB61_SigHandler; + sig_io.sa_flags = 0; + sigaction (SIGIO, &sig_io, NULL); + + /* Open device MBUS uses 9600,O,1 */ + result = device_open(PortDevice, true, true, false, GCT_Serial); + + if (!result) { + perror(_("Couldn't open MB61 device: ")); + return (false); + } + fprintf(stdout, "Opened MB61 device\n"); + + device_changespeed(9600); + return (true); +} + + /* Handler called when characters received from serial port. + calls state machine code to process it. */ +void MB61_SigHandler(int status) +{ + unsigned char buffer[255]; + int count,res; + + res = device_read(buffer, 255); + + for (count = 0; count < res ; count ++) { + MB61_RX_StateMachine(buffer[count]); + +#ifdef DEBUG + if (isprint(buffer[count])) { + fprintf(stdout, "<%02x%c>", buffer[count], buffer[count]); + } + else { + fprintf(stdout, "<%02x >", buffer[count]); + } +#endif + + } + fflush(stdout); +} + + + /* Prepares the message header and sends it, prepends the + message start byte (0x01) and other values according + the value specified when called. Calculates checksum + and then sends the lot down the pipe... */ +int MB61_TX_SendMessage(u8 destination, u8 source, u8 command, u8 sequence_byte, int message_length, u8 *buffer) +{ + u8 out_buffer[MB61_MAX_TRANSMIT_LENGTH + 7]; + int count; + unsigned char checksum; + + /* Check message isn't too long, once the necessary + header and trailer bytes are included. */ + if ((message_length + 7) > MB61_MAX_TRANSMIT_LENGTH) { + fprintf(stderr, _("TX_SendMessage - message too long!\n")); + + return (false); + } + + //RX_State = MB61_RX_Sync; Hack. + + /* Now construct the message header. */ + out_buffer[0] = 0x1f; /* Start of message indicator */ + out_buffer[1] = destination; + out_buffer[2] = source; + out_buffer[3] = command; + out_buffer[4] = message_length >> 8; + out_buffer[5] = message_length & 0xff; + + /* Copy in data if any. */ + if (message_length != 0) { + memcpy(out_buffer + 6, buffer, message_length); + } + /* Copy in sequence number */ + out_buffer[message_length + 6] = sequence_byte; + + /* Now calculate checksum over entire message + and append to message. */ + checksum = 0; + for (count = 0; count < message_length + 7; count ++) { + checksum ^= out_buffer[count]; + } + out_buffer[message_length + 7] = checksum; + + /* Send it out... */ + if (WRITEPHONE(PortFD, out_buffer, message_length + 8) != message_length + 8) { + perror(_("TX_SendMessage - write:")); + return (false); + } + +#ifdef DEBUG + for (count = 0; count < message_length + 8; count++) { + if (isprint(out_buffer[count])) { + fprintf(stdout, "{%02x%c}", out_buffer[count], out_buffer[count]); + } + else { + fprintf(stdout, "{%02x }", out_buffer[count]); + } + if (((count + 1) % 16) == 0) { + fprintf(stdout, "\n"); + } + } + fflush(stdout); +#endif + + return (true); +} + + + +#endif diff --git a/common/mbus-640.c b/common/mbus-640.c new file mode 100644 index 0000000..8dc2171 --- /dev/null +++ b/common/mbus-640.c @@ -0,0 +1,857 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the main part of 640 support. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:06 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.22 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef WIN32 + +#define __mbus_640_c /* "Turn on" prototypes in mbus-640.h */ + +#include "misc.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __unices__ +# include +#endif + +#include +#include +#include + +#include "gsm-common.h" +#include "mbus-640.h" +#include "phones/nokia.h" + + /* Global variables used by code in gsm-api.c to expose the + functions supported by this model of phone. */ +bool MB640_LinkOK; +char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; +char *MB640_Revision = 0, + *MB640_RevisionDate = 0, + *MB640_Model = 0, + MB640_VersionInfo[64]; + +GSM_Functions MB640_Functions = { + MB640_Initialise, + MB640_Terminate, + MB640_GetMemoryLocation, + MB640_WritePhonebookLocation, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_GetMemoryStatus, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_GetRFLevel, + MB640_GetBatteryLevel, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_GetIMEI, + MB640_GetRevision, + MB640_GetModel, + PNOK_GetManufacturer, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_GetBitmap, + MB640_SetBitmap, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_Reset, + UNIMPLEMENTED, + UNIMPLEMENTED, + MB640_SendRLPFrame, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED, + UNIMPLEMENTED +}; + + /* FIXME - these are guesses only... */ +GSM_Information MB640_Information = { + "640", /* Models */ + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_None, /* No date/time support */ + GDT_None, /* No alarm support */ + 0, /* Max alarms = 0 */ + 0, 0, /* Startup logo size */ + 0, 0, /* Op logo size */ + 0, 0 /* Caller logo size */ +}; + +char MB640_2_KOI8[] = +{ + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ','!','"','#','$','&','%','\'','(',')','*','+',',','-','.','/', + '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', + + '!','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', + 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_', + '?','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', + 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~',' ', + ' ',' ',' ','á','â','÷','ç','ä','å','ö','ú','é','ê','ë','ì','í', + 'î','ï','ð','ò','ó','ô','õ','æ','è','ã','þ','û','ý','ÿ','ù','ø', + ' ',' ',' ','Á','Â','×','Ç','Ä','Å','Ö','Ú','É','Ê','Ë','Ì','Í', + 'Î','Ï','Ð','Ò','Ó','Ô','Õ','Æ','È','Ã','Þ','Û','Ý','ß','Ù','Ø', + + ' ','ü','à','ñ',' ','Ü','À','Ñ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ','E',' ',' ','@','$','L','Y',' ', +}; + +char KOI8_2_MB640[] = +{ + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ','!','"','#',0xFC,'&','%','\'','(',')','*','+',',','-','.','/', + '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?', + + 0xFB,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O', + 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_', + '?','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o', + 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~',' ', + + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', + ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', +/* À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï*/ + 0xC6,0xA3,0xA4,0xB9,0xA7,0xA8,0xB7,0xA6,0xB8,0xAB,0xBC,0xAD,0xAE,0xAF,0xB0,0xB1, +/* Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß*/ + 0xB2,0xC7,0xB3,0xB4,0xB5,0xB6,0xA9,0xA5,0xBD,0xBE,0xAA,0xBB,0xC5,0xBC,0xBA,0xBF, +/* à á â ã ä å æ ç è é ê ë ì í î ï*/ + 0xC2,0x83,0x84,0x99,0x87,0x88,0x97,0x86,0x98,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91, +/* ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ*/ + 0x92,0xC3,0x93,0x94,0x95,0x96,0x89,0x85,0x9D,0x9E,0x8A,0x9B,0xC1,0x9C,0x9A,0x9F, +}; + +/* Local variables */ +pthread_t Thread; +bool RequestTerminate; +int PortFD; +struct termios old_termios; /* old termios */ +u8 MB640_TXPacketNumber = 0x00; +char Model[MB640_MAX_MODEL_LENGTH]; +bool ModelValid = false; +unsigned char PacketData[256]; +bool MB640_ACKOK = false, + MB640_PacketOK = false, + MB640_EchoOK = false; + + /* The following functions are made visible to gsm-api.c and friends. */ + + /* Initialise variables and state machine. */ +GSM_Error MB640_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{int rtn; + + /* ConnectionType is ignored in 640 code. */ + RequestTerminate = false; + MB640_LinkOK = false; + memset(MB640_VersionInfo,0,sizeof(MB640_VersionInfo)); + strncpy(PortDevice, port_device, GSM_MAX_DEVICE_NAME_LENGTH); + rtn = pthread_create(&Thread, NULL, (void *) MB640_ThreadLoop, (void *)NULL); + if(rtn == EAGAIN || rtn == EINVAL) + { + return (GE_INTERNALERROR); + } + return (GE_NONE); +} + + /* Applications should call MB640_Terminate to close the serial port. */ +void MB640_Terminate(void) +{ + /* Request termination of thread */ + RequestTerminate = true; + /* Now wait for thread to terminate. */ + pthread_join(Thread, NULL); + /* Close serial port. */ + if( PortFD >= 0 ) + { + tcsetattr(PortFD, TCSANOW, &old_termios); + close( PortFD ); + } +} + + /* Routine to get specifed phone book location. Designed to + be called by application. Will block until location is + retrieved or a timeout/error occurs. */ +GSM_Error MB640_GetMemoryLocation(GSM_PhonebookEntry *entry) +{int timeout,i,len; + u8 pkt[] = {0x0f, 0x2d, 3, 0, 7, 0x1f, 0x7f, 0xf0, 0, 0, 0, 0}, digit; + char *digit_map = " 1234567890*#pw+"; + + if(!entry->Location) return (GE_INVALIDPHBOOKLOCATION); + switch(entry->MemoryType) + { + case GMT_ME: +/* if(entry->Location > 100) return (GE_INVALIDPHBOOKLOCATION); */ + pkt[9] = entry->Location - 1; + break; + case GMT_LD: + if(entry->Location > 5) return (GE_INVALIDPHBOOKLOCATION); + pkt[9] = entry->Location + 99; + break; + case GMT_ON: + if(entry->Location > 1) return (GE_INVALIDPHBOOKLOCATION); + pkt[9] = 115; + break; + default: return (GE_INVALIDMEMORYTYPE); + } + + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + entry->Empty = (PacketData[18] == 0 && PacketData[34] == 0); + if( !entry->Empty ) + { + for( i = 0; PacketData[34 + i] && i < 16; i++ ) + { + entry->Name[i] = MB640_2_KOI8[ PacketData[34 + i] ]; + } + entry->Name[i] = 0; + + len = PacketData[18]; + for( i = 0; i < len; i++ ) + { + digit = PacketData[19 + i/2]; + entry->Number[i] = digit_map[((i % 2) ? digit : digit >> 4) & 0x0F]; + } + entry->Number[i] = 0; + entry->Group = PacketData[50]; + } + else + { + entry->Name[0] = 0; + entry->Number[0] = 0; + entry->Group = 255; + } + return (GE_NONE); +} + + /* Routine to write phonebook location in phone. Designed to + be called by application code. Will block until location + is written or timeout occurs. */ +GSM_Error MB640_WritePhonebookLocation(GSM_PhonebookEntry *entry) +{int timeout,i; + + switch(entry->MemoryType) + { + case GMT_ME: + {u8 pkt[47], digit; + char *s; + + pkt[0] = 0x10; + pkt[1] = 0x08; + pkt[2] = 0x03; + pkt[3] = 0x00; + pkt[4] = 0x07; + pkt[5] = 0x1F; + pkt[6] = 0x7F; + pkt[7] = 0xF0; + pkt[8] = 0x00; + pkt[9] = entry->Location - 1; + pkt[10] = 0x00; + pkt[11] = 0x00; + pkt[12] = 0x00; + pkt[13] = 0x21; + memset(&pkt[14],0,32); + pkt[46] = 0x05/*entry->Group*/; + + for( i = 0; entry->Name[i] && i < 15; i++ ) + { + pkt[30 + i] = KOI8_2_MB640[ (u8)entry->Name[i] ]; + } + pkt[30 + i] = 0; + + + for( i = 0, s = entry->Number; *s && i < 30; s++ ) + { + switch(*s) + { + case '1'...'9': digit = *s - '0'; break; + case '0': digit = 0xA; break; + case '*': digit = 0xB; break; + case '#': digit = 0xC; break; + case 'p': digit = 0xD; break; + case 'w': digit = 0xE; break; + case '+': digit = 0xF; break; + default: continue; + } + pkt[15 + i/2] |= (i % 2) ? digit : digit << 4; + i++; + } + pkt[14] = i; + + /* And write it! */ + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + } + break; + default: return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + + /* MB640_GetRFLevel + FIXME (sort of...) + For now, GetRFLevel and GetBatteryLevel both rely + on data returned by the "keepalive" packets. I suspect + that we don't actually need the keepalive at all but + will await the official doco before taking it out. HAB19990511 */ +GSM_Error MB640_GetRFLevel(GSM_RFUnits *units, float *level) +{u8 pkt[] = + /*{0x0f, 0x5A, 3, 0, 7, 0x39, 0x7f, 0xf0, 0, 0, 0, 0}*/ + {0x19, 2, 1, 7} + /*{0,3,0}*/; + int timeout; + + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + *level = 0/*(float)(PacketData[6] * 256 + PacketData[7]) / 256.0*/; + return (GE_NONE); +} + + /* MB640_GetBatteryLevel - get value from ADC #0 + FIXME (see above...) */ +GSM_Error MB640_GetBatteryLevel(GSM_BatteryUnits *units, float *level) +{u8 pkt[] = {0x19, 2, 1, 0}; + int timeout; + + if (*units == GBU_Arbitrary) + { + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + *level = (float)(PacketData[6] * 256 + PacketData[7]) / 256.0; + return (GE_NONE); + } + return (GE_INTERNALERROR); +} + +/* Really there are no IMEI in NMT phones. Equivalent IMHO is phone + * Serial Number */ +GSM_Error MB640_GetIMEI(char *imei) +{u8 pkt[] = {0x0f, 0x19, 3, 0, 0x01, 0x0b, 0, 0}; + int timeout; + + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + + memcpy(imei,&PacketData[14],PacketData[13]); + imei[PacketData[13]] = 0; + return (GE_NONE); +} + +GSM_Error MB640_GetVersionInfo() +{u8 pkt[] = {0, 3, 0}; + int timeout; + char *s = MB640_VersionInfo; + + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + + strncpy( s, &PacketData[6], sizeof(MB640_VersionInfo) ); + + for( MB640_Revision = s; *s != 0x0A; s++ ) if( !*s ) goto out; + *s++ = 0; + for( MB640_RevisionDate = s; *s != 0x0A; s++ ) if( !*s ) goto out; + *s++ = 0; + for( MB640_Model = s; *s != 0x0A; s++ ) if( !*s ) goto out; + *s++ = 0; +out: + return (GE_NONE); +} + +GSM_Error MB640_GetRevision(char *revision) +{GSM_Error err = GE_NONE; + + if(!MB640_Revision) err = MB640_GetVersionInfo(); + if(err == GE_NONE) strncpy(revision, MB640_Revision, 64); + + return err; +} + +GSM_Error MB640_GetModel(char *model) +{GSM_Error err = GE_NONE; + + if(!MB640_Model) err = MB640_GetVersionInfo(); + if(err == GE_NONE) strncpy(model, MB640_Model, 64); + + return err; +} + +GSM_Error MB640_GetMemoryStatus(GSM_MemoryStatus *Status) +{ + switch(Status->MemoryType) + { + case GMT_ME: + Status->Used = 0; + Status->Free = 100; + break; + case GMT_LD: + Status->Used = 5; + Status->Free = 0; + break; + case GMT_ON: + Status->Used = 1; + Status->Free = 0; + break; + case GMT_SM: + Status->Used = 0; + Status->Free = 0; + break; + default: return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + +GSM_Error MB640_GetBitmap(GSM_Bitmap *Bitmap) +{int timeout; + + switch(Bitmap->type) + { + case GSM_StartupLogo: + {u8 pkt[] = {0x0f, 0x60, 3, 0, 7, 0x3A, 0x7f, 0xf0, 0, 0, 0, 0}; + int i; + + for(i = 0; i < 6; i++) + { + pkt[9] = i; + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 10; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + memcpy(&Bitmap->bitmap[i * 84],&PacketData[18],84); + } + Bitmap->width = 84; + Bitmap->height = 48; + Bitmap->size = 84*48/8; + } + break; + default: return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + +GSM_Error MB640_SetBitmap(GSM_Bitmap *Bitmap) +{int timeout,i; + + switch(Bitmap->type) + { + case GSM_StartupLogo: + {u8 pkt[98]; + + pkt[0] = 0x10; + pkt[1] = 0x08; + pkt[2] = 0x03; + pkt[3] = 0x00; + pkt[4] = 0x07; + pkt[5] = 0x3A; + pkt[6] = 0x7F; + pkt[7] = 0xF0; + pkt[8] = 0x00; + pkt[10] = 0x00; + pkt[11] = 0x00; + pkt[12] = 0x00; + pkt[13] = 0x54; + + for(i = 0; i < 6; i++) + { + pkt[9] = i; + memcpy(&pkt[14],&Bitmap->bitmap[i * 84],84); + + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 10; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, sizeof(pkt)); + if(!--timeout || RequestTerminate) + { + return(GE_TIMEOUT); + } + usleep(100000); + } + } + } + break; + default: return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + +GSM_Error MB640_Reset(unsigned char type) +{u8 pkt[] = { 0x43, 0x00, 0x00 }; + int timeout; + + /* send packet */ + MB640_PacketOK = false; + MB640_ACKOK = false; + timeout = 3; + while(!MB640_PacketOK) + { + if(!MB640_ACKOK) MB640_SendPacket(pkt, 4); + if(!--timeout) return (GE_TIMEOUT); + usleep(250000); + } + return (GE_NONE); +} + +bool MB640_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + return (false); +} + + /* Everything from here down is internal to 640 code. */ + +/* Checksum calculation */ +u8 MB640_GetChecksum( u8 * packet ) +{u8 checksum = 0; + unsigned int i,len = packet[2]; + + if( packet[2] == 0x7F ) len = 4; /* ACK packet length */ + else len += 5; /* Add sizes of header, command and * + * packet_number to packet length */ + for( i = 0; i < len; i++ ) checksum ^= packet[i]; /* calculate checksum */ + return checksum; +} + +/* Handler called when characters received from serial port. + * and process them. */ +void MB640_SigHandler(int status) +{unsigned char buffer[256],ack[5],b; + int i,res; + static unsigned int Index = 0, + Length = 5; + static unsigned char pkt[256]; +#ifdef DEBUG + int j; +#endif + + res = read(PortFD, buffer, 256); + if( res < 0 ) return; + for(i = 0; i < res ; i++) + { + b = buffer[i]; + if(!Index && b != 0x00 && b != 0xE9) + { + /* something strange goes from phone. Just ignore it */ +#ifdef DEBUG + fprintf( stdout, "Get [%02X %c]\n", b, b >= 0x20 ? b : '.' ); +#endif /* DEBUG */ + continue; + } + else + { + pkt[Index++] = b; + if(Index == 3) Length = (b == 0x7F) ? 5 : b + 6; + if(Index >= Length) + { + if(pkt[0] == 0xE9 && pkt[1] == 0x00) /* packet from phone */ + { +#ifdef DEBUG + fprintf( stdout, _("Phone: ") ); + for( j = 0; j < Length; j++ ) + { + b = pkt[j]; + fprintf( stdout, "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + fprintf( stdout, "\n" ); +#endif /* DEBUG */ + /* ensure that we received valid packet */ + if(pkt[Length - 1] == MB640_GetChecksum(pkt)) + { + if(pkt[2] == 0x7F) /* acknowledge by phone */ + { + /* Set ACKOK flag */ + MB640_ACKOK = true; + /* Increase TX packet number */ + MB640_TXPacketNumber++; + } + else + { + /* Copy packet data */ + memcpy(PacketData,pkt,Length); + /* send acknowledge packet to phone */ + usleep(1000); + ack[0] = 0x00; /* Construct the header. */ + ack[1] = pkt[0]; /* Send back id */ + ack[2] = 0x7F; /* Set special size value */ + ack[3] = pkt[Length - 2]; /* Send back packet number */ + ack[4] = MB640_GetChecksum( ack ); /* Set checksum */ +#ifdef DEBUG + fprintf( stdout, _("PC : ") ); + for( j = 0; j < 5; j++ ) + { + b = ack[j]; + fprintf( stdout, "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + fprintf( stdout, "\n" ); +#endif /* DEBUG */ + if( write( PortFD, ack, 5 ) != 5 ) + { + perror( _("Write error!\n") ); + } + /* Set validity flag */ + MB640_PacketOK = true; + } + } + } + else + { + MB640_EchoOK = true; + } + /* Look for new packet */ + Index = 0; + Length = 5; + } + } + } +} + +/* Called by initialisation code to open comm port in asynchronous mode. */ +bool MB640_OpenSerial(void) +{ + struct termios new_termios; + struct sigaction sig_io; + unsigned int flags; + +#ifdef DEBUG + fprintf(stdout, _("Setting MBUS communication...\n")); +#endif /* DEBUG */ + + PortFD = open(PortDevice, O_RDWR | O_NOCTTY | O_NONBLOCK); + if ( PortFD < 0 ) + { + fprintf(stderr, "Failed to open %s ...\n", PortDevice); + return (false); + } + +#ifdef DEBUG + fprintf(stdout, "%s opened...\n", PortDevice); +#endif /* DEBUG */ + + sig_io.sa_handler = MB640_SigHandler; + sig_io.sa_flags = 0; + sigaction (SIGIO, &sig_io, NULL); + /* Allow process/thread to receive SIGIO */ + fcntl(PortFD, F_SETOWN, getpid()); + /* Make filedescriptor asynchronous. */ + fcntl(PortFD, F_SETFL, FASYNC); + /* Save old termios */ + tcgetattr(PortFD, &old_termios); + /* set speed , 8bit, odd parity */ + memset( &new_termios, 0, sizeof(new_termios) ); + new_termios.c_cflag = B9600 | CS8 | CLOCAL | CREAD | PARODD | PARENB; + new_termios.c_iflag = 0; + new_termios.c_lflag = 0; + new_termios.c_oflag = 0; + new_termios.c_cc[VMIN] = 1; + new_termios.c_cc[VTIME] = 0; + tcflush(PortFD, TCIFLUSH); + tcsetattr(PortFD, TCSANOW, &new_termios); + /* setting the RTS & DTR bit */ + flags = TIOCM_DTR; + ioctl(PortFD, TIOCMBIC, &flags); + flags = TIOCM_RTS; + ioctl(PortFD, TIOCMBIS, &flags); +#ifdef DEBUG + ioctl(PortFD, TIOCMGET, &flags); + fprintf(stdout, _("DTR is %s.\n"), flags & TIOCM_DTR ? _("up") : _("down")); + fprintf(stdout, _("RTS is %s.\n"), flags & TIOCM_RTS ? _("up") : _("down")); + fprintf(stdout, "\n"); +#endif /* DEBUG */ + return (true); +} + +GSM_Error MB640_SendPacket( u8 *buffer, u8 length ) +{u8 pkt[256]; + int current = 0; + + /* FIXME - we should check for the message length ... */ + pkt[current++] = 0x00; /* Construct the header. */ + pkt[current++] = 0xE9; + pkt[current++] = length; /* Set data size */ + pkt[current++] = 0xE5; + memcpy( pkt + current, buffer, length ); /* Copy in data. */ + current += length; + pkt[current++] = MB640_TXPacketNumber; /* Set packet number */ + pkt[current++] = MB640_GetChecksum( pkt ); /* Calculate and set checksum */ +#ifdef DEBUG + {int i; + u8 b; + fprintf( stdout, _("PC : ") ); + for( i = 0; i < current; i++ ) + { + b = pkt[i]; + fprintf( stdout, "[%02X %c]", b, b > 0x20 ? b : '.' ); + } + fprintf( stdout, "\n" ); + } +#endif /* DEBUG */ + /* Send it out... */ + MB640_EchoOK = false; + if( write(PortFD, pkt, current) != current ) + { + perror( _("Write error!\n") ); + return (GE_INTERNALERROR); + } + /* wait for echo */ + while( !MB640_EchoOK && current-- ) + { + usleep(1000); + } + if( !MB640_EchoOK ) return (GE_TIMEOUT); + return (GE_NONE); +} + + + /* This is the main loop for the MB21 functions. When MB21_Initialise + is called a thread is created to run this loop. This loop is + exited when the application calls the MB21_Terminate function. */ +void MB640_ThreadLoop(void) +{ + /* Do initialisation stuff */ + if (MB640_OpenSerial() != true) + { + MB640_LinkOK = false; + while (!RequestTerminate) + { + usleep (100000); + } + return; + } + MB640_LinkOK = true; + + while (!RequestTerminate) { + usleep(100000); /* Avoid becoming a "busy" loop. */ + } +} + + +#endif diff --git a/common/misc.c b/common/misc.c new file mode 100644 index 0000000..d9c57ad --- /dev/null +++ b/common/misc.c @@ -0,0 +1,129 @@ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Id$ + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:04 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.19 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.18 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.17 2001/08/09 12:34:34 pkot + 3330 and 6250 support - I have no idea if it does work (mygnokii) + + Revision 1.16 2001/03/21 23:36:04 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.15 2001/03/06 10:38:52 machek + Dancall models added to the global list. + + Revision 1.14 2001/02/06 13:55:23 pkot + Enabled authentication in 51xx models + + Revision 1.13 2001/02/02 08:09:56 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + +*/ + +#include +#include "misc.h" + +int GetLine(FILE *File, char *Line, int count) +{ + char *ptr; + + if (fgets(Line, count, File)) { + ptr = Line + strlen(Line) - 1; + + while ( (*ptr == '\n' || *ptr == '\r') && ptr>=Line) + *ptr--='\0'; + + return strlen(Line); + } + else + return 0; +} + +static PhoneModel models[] = { + {NULL, "", 0 }, + {"2711", "?????", PM_SMS }, /* Dancall */ + {"2731", "?????", PM_SMS }, + {"1611", "NHE-5", 0 }, + {"2110i", "NHE-4", PM_SMS }, + {"2148i", "NHK-4", 0 }, + {"3110", "0310" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-8 */ + {"3210", "NSE-8", PM_SMS | PM_DTMF }, + {"3210", "NSE-9", PM_SMS | PM_DTMF }, + {"3310", "NHM-5", PM_SMS | PM_DTMF }, + {"3330", "NHM-6", PM_SMS | PM_DTMF }, + {"3810", "0305" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-9 */ + {"5110", "NSE-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"5130", "NSK-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"5160", "NSW-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"5190", "NSB-1", PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6110", "NSE-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6120", "NSC-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6130", "NSK-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6150", "NSM-1", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"616x", "NSW-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6185", "NSD-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6190", "NSB-3", PM_CALLERGROUP | PM_CALENDAR | PM_NETMONITOR | PM_KEYBOARD | PM_SMS | PM_DTMF | PM_DATA | PM_SPEEDDIAL | PM_AUTHENTICATION }, + {"6210", "NPE-3", PM_CALLERGROUP | PM_CALENDAR | PM_EXTPBK | PM_SMS}, + {"6250", "NHM-3", PM_CALLERGROUP | PM_CALENDAR | PM_EXTPBK }, + {"7110", "NSE-5", PM_CALLERGROUP | PM_SPEEDDIAL | PM_EXTPBK }, + {"8810", "NSE-6", PM_SMS | PM_DTMF | PM_DATA }, + {"8110i", "0423", PM_SMS | PM_DTMF | PM_DATA }, /* Guess for NHE-6 */ + {"8110", "0423" , PM_SMS | PM_DTMF | PM_DATA }, /* NHE-6BX */ + {"9000i", "RAE-4", 0 }, + {"9110", "RAE-2", 0 }, + {"550", "THF-10", 0 }, + {"540", "THF-11", 0 }, + {"650", "THF-12", 0 }, + {"640", "THF-13", 0 }, + {NULL, NULL, 0 } +}; + +PhoneModel *GetPhoneModel (const char *num) +{ + register int i = 0; + + while (models[i].number != NULL) { + if (strcmp (num, models[i].number) == 0) { + dprintf("Found model\n"); + return (&models[i]); + } + else { + dprintf("comparing %s and %s\n", num, models[i].number); + } + i++; + } + + return (&models[0]); +} + +inline char *GetModel (const char *num) +{ + return (GetPhoneModel(num)->model); +} + + diff --git a/common/phones/Makefile b/common/phones/Makefile new file mode 100644 index 0000000..a17632e --- /dev/null +++ b/common/phones/Makefile @@ -0,0 +1,52 @@ + +# +# $Id$ +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +# +# For this common directory is used "subsystem.o" .o files concept. +# (the list of object files to be linked together (to COMMON.o), +# and other dirs is used this _one_ file (instead of all OBJS) +# + +TOPDIR=../.. +include $(TOPDIR)/Makefile.global + +OBJS = generic.o \ + nokia.o \ + nk7110.o \ + nk6100.o \ + nk3110.o \ + nk2110.o \ + atgen.o \ + ateric.o \ + atnok.o \ + atsie.o +# dc2711.o + +all: PHONES.o + +PHONES.o: $(OBJS) + $(LD) PHONES.o $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend PHONES.o + +install: + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/common/phones/atgen.c b/common/phones/atgen.c new file mode 100644 index 0000000..fb1da2e --- /dev/null +++ b/common/phones/atgen.c @@ -0,0 +1,675 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for mobile phones. + + Copyright 2001 Manfred Jonsson + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to generic at command compatible + phones. See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:11 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.6 2001/11/19 13:03:18 pkot + nk3110.c cleanup + + Revision 1.5 2001/11/08 16:49:19 pkot + Cleanups + + Revision 1.4 2001/08/20 23:36:27 pkot + More cleanup in AT code (Manfred Jonsson) + + Revision 1.3 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.2 2001/08/09 11:51:39 pkot + Generic AT support updates and cleanup (Manfred Jonsson) + + Revision 1.1 2001/07/27 00:02:21 pkot + Generic AT support for the new structure (Manfred Jonsson) + +*/ + +#include +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "gsm-statemachine.h" +#include "gsm-encoding.h" +#include "phones/generic.h" +#include "phones/atgen.h" +#include "phones/ateric.h" +#include "phones/atsie.h" +#include "phones/atnok.h" +#include "links/atbus.h" +#include "links/cbus.h" + + +#define ARRAY_LEN(x) (sizeof((x))/sizeof((x)[0])) + + +static GSM_Error Initialise(GSM_Data *setupdata, GSM_Statemachine *state); +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); +static GSM_Error Reply(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error ReplyIdentify(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error ReplyGetRFLevel(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error ReplyGetBattery(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error ReplyReadPhonebook(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error ReplyMemoryStatus(int messagetype, unsigned char *buffer, int length, GSM_Data *data); + +static GSM_Error AT_Identify(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetModel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetRevision(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetIMEI(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetManufacturer(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetBattery(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetRFLevel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error AT_ReadPhonebook(GSM_Data *data, GSM_Statemachine *state); + +typedef struct { + int gop; + AT_SendFunctionType sfunc; + GSM_RecvFunctionType rfunc; +} AT_FunctionInitType; + + +/* Mobile phone information */ +static AT_SendFunctionType AT_Functions[GOP_Max]; +static GSM_IncomingFunctionType IncomingFunctions[GOP_Max]; +static AT_FunctionInitType AT_FunctionInit[] = { + { GOP_Init, NULL, Reply }, + { GOP_GetModel, AT_GetModel, ReplyIdentify }, + { GOP_GetRevision, AT_GetRevision, ReplyIdentify }, + { GOP_GetImei, AT_GetIMEI, ReplyIdentify }, + { GOP_GetManufacturer, AT_GetManufacturer, ReplyIdentify }, + { GOP_Identify, AT_Identify, ReplyIdentify }, + { GOP_GetBatteryLevel, AT_GetBattery, ReplyGetBattery }, + { GOP_GetPowersource, AT_GetBattery, ReplyGetBattery }, + { GOP_GetRFLevel, AT_GetRFLevel, ReplyGetRFLevel }, + { GOP_GetMemoryStatus, AT_GetMemoryStatus, ReplyMemoryStatus }, + { GOP_ReadPhonebook, AT_ReadPhonebook, ReplyReadPhonebook }, +}; + + +#define REPLY_SIMPLETEXT(l1, l2, c, t) \ + if ((0 == strcmp(l1, c)) && (NULL != t)) strcpy(t, l2) + + +GSM_Phone phone_at = { + IncomingFunctions, + PGEN_IncomingDefault, + { + "AT|AT-HW|dancall", /* Supported models */ + 99, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_CSQ, /* RF level units */ + 100, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Percentage, /* Battery level units */ + 0, /* Have date/time support */ + 0, /* Alarm supports time only */ + 0, /* Alarms available - FIXME */ + 0, 0, /* Startup logo size - FIXME */ + 0, 0, /* Op logo size */ + 0, 0 /* Caller logo size */ + }, + Functions +}; + + +static GSM_MemoryType memorytype = GMT_XX; +static int atcharset = 0; + +static char *memorynames[] = { + "ME", /* Internal memory of the mobile equipment */ + "SM", /* SIM card memory */ + "FD", /* Fixed dial numbers */ + "ON", /* Own numbers */ + "EN", /* Emergency numbers */ + "DC", /* Dialled numbers */ + "RC", /* Received numbers */ + "MC", /* Missed numbers */ + "LD", /* Last dialed */ + "MT", /* combined ME and SIM phonebook */ + "TA", /* for compatibility only: TA=computer memory */ + "CB", /* Currently selected memory */ +}; + +/* LinkOK is always true for now... */ +bool ATGEN_LinkOK = true; + + +GSM_RecvFunctionType AT_InsertRecvFunction(int type, GSM_RecvFunctionType func) +{ + static int pos = 0; + int i; + GSM_RecvFunctionType oldfunc; + + if (type >= GOP_Max) { + return (GSM_RecvFunctionType) -1; + } + if (pos == 0) { + IncomingFunctions[pos].MessageType = type; + IncomingFunctions[pos].Functions = func; + pos++; + return NULL; + } + for (i=0; i < pos; i++) { + if (IncomingFunctions[i].MessageType == type) { + oldfunc = IncomingFunctions[i].Functions; + IncomingFunctions[i].Functions = func; + return oldfunc; + } + } + if (pos < GOP_Max-1) { + IncomingFunctions[pos].MessageType = type; + IncomingFunctions[pos].Functions = func; + pos++; + } + return NULL; +} + + +AT_SendFunctionType AT_InsertSendFunction(int type, AT_SendFunctionType func) +{ + AT_SendFunctionType f; + + f = AT_Functions[type]; + AT_Functions[type] = func; + return f; +} + + +static GSM_Error SetEcho(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "ATE1\r\n"); + if (SM_SendMessage(state, 6, GOP_Init, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, GOP_Init); +} + + +GSM_Error AT_SetMemoryType(GSM_MemoryType mt, GSM_Statemachine *state) +{ + char req[128]; + GSM_Error ret = GE_NONE; + GSM_Data data; + + if (mt != memorytype) { + sprintf(req, "AT+CPBS=\"%s\"\r\n", memorynames[mt]); + ret = SM_SendMessage(state, 14, GOP_Init, req); + if (ret != GE_NONE) + return GE_NOTREADY; + GSM_DataClear(&data); + ret = SM_Block(state, &data, GOP_Init); + if (ret == GE_NONE) + memorytype = mt; + } + return ret; +} + + +static GSM_Error SetCharset(GSM_Statemachine *state) +{ + char req[128]; + GSM_Error ret = GE_NONE; + GSM_Data data; + + if (atcharset == 0) { + sprintf(req, "AT+CSCS=\"GSM\"\r\n"); + ret = SM_SendMessage(state, 15, GOP_Init, req); + if (ret != GE_NONE) + return GE_NOTREADY; + GSM_DataClear(&data); + ret = SM_Block(state, &data, GOP_Init); + if (ret == GE_NONE) + atcharset = 1; + } + return ret; +} + + +static GSM_Error AT_Identify(GSM_Data *data, GSM_Statemachine *state) +{ + GSM_Error ret; + + if ((ret = Functions(GOP_GetModel, data, state)) != GE_NONE) + return ret; + if ((ret = Functions(GOP_GetManufacturer, data, state)) != GE_NONE) + return ret; + if ((ret = Functions(GOP_GetRevision, data, state)) != GE_NONE) + return ret; + return Functions(GOP_GetImei, data, state); +} + + +static GSM_Error AT_GetModel(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CGMM\r\n"); + if (SM_SendMessage(state, 9, GOP_Identify, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_Identify); +} + + +static GSM_Error AT_GetManufacturer(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CGMI\r\n"); + if (SM_SendMessage(state, 9, GOP_Identify, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_Identify); +} + + +static GSM_Error AT_GetRevision(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CGMR\r\n"); + if (SM_SendMessage(state, 9, GOP_Identify, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_Identify); +} + + +static GSM_Error AT_GetIMEI(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CGSN\r\n"); + if (SM_SendMessage(state, 9, GOP_Identify, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_Identify); +} + + +/* gets battery level and power source */ + +static GSM_Error AT_GetBattery(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CBC\r\n"); + if (SM_SendMessage(state, 8, GOP_GetBatteryLevel, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_GetBatteryLevel); +} + + +static GSM_Error AT_GetRFLevel(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + + sprintf(req, "AT+CSQ\r\n"); + if (SM_SendMessage(state, 8, GOP_GetRFLevel, req) != GE_NONE) + return GE_NOTREADY; + return SM_Block(state, data, GOP_GetRFLevel); +} + + +static GSM_Error AT_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + GSM_Error ret; + + ret = AT_SetMemoryType(data->MemoryStatus->MemoryType, state); + if (ret != GE_NONE) + return ret; + sprintf(req, "AT+CPBS?\r\n"); + if (SM_SendMessage(state, 10, GOP_GetMemoryStatus, req) != GE_NONE) + return GE_NOTREADY; + ret = SM_Block(state, data, GOP_GetMemoryStatus); + if (ret != GE_UNKNOWN) + return ret; + sprintf(req, "AT+CPBR=?\r\n"); + if (SM_SendMessage(state, 11, GOP_GetMemoryStatus, req) != GE_NONE) + return GE_NOTREADY; + ret = SM_Block(state, data, GOP_GetMemoryStatus); + return ret; +} + + +static GSM_Error AT_ReadPhonebook(GSM_Data *data, GSM_Statemachine *state) +{ + char req[128]; + GSM_Error ret; + + ret = SetCharset(state); + if (ret != GE_NONE) + return ret; + ret = AT_SetMemoryType(data->PhonebookEntry->MemoryType, state); + if (ret != GE_NONE) + return ret; + sprintf(req, "AT+CPBR=%d\r\n", data->PhonebookEntry->Location); + if (SM_SendMessage(state, strlen(req), GOP_ReadPhonebook, req) != GE_NONE) + return GE_NOTREADY; + ret = SM_Block(state, data, GOP_ReadPhonebook); + return ret; +} + + +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state) +{ + if (op == GOP_Init) + return Initialise(data, state); + if ((op > GOP_Init) && (op < GOP_Max)) + if (AT_Functions[op]) + return (*AT_Functions[op])(data, state); + return GE_NOTIMPLEMENTED; +} + + +static GSM_Error ReplyReadPhonebook(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + char *pos, *endpos; + int l; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if (buf.line1 == NULL) + return GE_INVALIDPHBOOKLOCATION; + + if (strncmp(buffer, "AT+CPBR", 7)) { + return GE_NONE; /*FIXME*/ + } + + if (!strncmp(buf.line2, "OK", 2)) { + if (data->PhonebookEntry) { + *(data->PhonebookEntry->Number) = '\0'; + *(data->PhonebookEntry->Name) = '\0'; + data->PhonebookEntry->Group = 0; + data->PhonebookEntry->SubEntriesCount = 0; + } + return GE_NONE; + } + if (data->PhonebookEntry) { + data->PhonebookEntry->Group = 0; + data->PhonebookEntry->SubEntriesCount = 0; + pos = strchr(buf.line2, '\"'); + endpos = NULL; + if (pos) + endpos = strchr(++pos, '\"'); + if (endpos) { + *endpos = '\0'; + strcpy(data->PhonebookEntry->Number, pos); + } + pos = NULL; + if (endpos) + pos = strchr(++endpos, '\"'); + endpos = NULL; + if (pos) { + pos++; + l = pos - (char *)buffer; + endpos = memchr(pos, '\"', length - l); + } + if (endpos) { + l = endpos - pos; + DecodeAscii(data->PhonebookEntry->Name, pos, l); + *(data->PhonebookEntry->Name + l) = '\0'; + } + } + return GE_NONE; +} + + +static GSM_Error ReplyMemoryStatus(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + char *pos; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if (buf.line1 == NULL) + return GE_INVALIDMEMORYTYPE; + + if (data->MemoryStatus) { + if (strstr(buf.line2,"+CPBS")) { + pos = strchr(buf.line2, ','); + if (pos) { + data->MemoryStatus->Used = atoi(++pos); + } else { + data->MemoryStatus->Used = 100; + data->MemoryStatus->Free = 0; + return GE_UNKNOWN; + } + pos = strchr(pos, ','); + if (pos) { + data->MemoryStatus->Free = atoi(++pos) - data->MemoryStatus->Used; + } else { + return GE_UNKNOWN; + } + } + } + return GE_NONE; +} + + +static GSM_Error ReplyGetBattery(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + char *pos; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if ((buf.line1 == NULL) || (buf.line2 == NULL)) + return GE_NONE; + + if (!strncmp(buffer, "AT+CBC", 6)) { + if (data->BatteryLevel) { + *(data->BatteryUnits) = GBU_Percentage; + pos = strchr(buf.line2, ','); + if (pos) { + pos++; + *(data->BatteryLevel) = atoi(pos); + } else { + *(data->BatteryLevel) = 1; + } + } + if (data->PowerSource) { + *(data->PowerSource) = 0; + if (*buf.line2 == '1') *(data->PowerSource) = GPS_ACDC; + if (*buf.line2 == '0') *(data->PowerSource) = GPS_BATTERY; + } + } + return GE_NONE; +} + + +static GSM_Error ReplyGetRFLevel(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + char *pos1, *pos2; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if (buf.line1 == NULL) + return GE_NONE; + + if ((!strncmp(buffer, "AT+CSQ", 6)) && (data->RFUnits)) { + *(data->RFUnits) = GRF_CSQ; + pos1 = buf.line2 + 6; + pos2 = strchr(buf.line2, ','); + if (pos1 < pos2) { + *(data->RFLevel) = atoi(pos1); + } else { + *(data->RFLevel) = 1; + } + } + return GE_NONE; +} + + +static GSM_Error ReplyIdentify(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if (buf.line1 == NULL) + return GE_NONE; /* Fixme */ + if (!strncmp(buffer, "AT+CG", 5)) { + REPLY_SIMPLETEXT(buffer+5, buf.line2, "SN", data->Imei); + REPLY_SIMPLETEXT(buffer+5, buf.line2, "MM", data->Model); + REPLY_SIMPLETEXT(buffer+5, buf.line2, "MI", data->Manufacturer); + REPLY_SIMPLETEXT(buffer+5, buf.line2, "MR", data->Revision); + } + return GE_NONE; +} + + +static GSM_Error Reply(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + AT_LineBuffer buf; + int error = 0; + + buf.line1 = buffer; + buf.length= length; + splitlines(&buf); + if (buf.line1 == NULL) + error = 1; + + return GE_NONE; +} + + +static GSM_Error Initialise(GSM_Data *setupdata, GSM_Statemachine *state) +{ + GSM_Data data; + GSM_Error ret; + char model[20]; + char manufacturer[20]; + int i; + + fprintf(stderr, "Initializing AT capable mobile phone ...\n"); + + /* Copy in the phone info */ + memcpy(&(state->Phone), &phone_at, sizeof(GSM_Phone)); + + for (i=0; iLink.ConnectionType) { + case GCT_Serial: + if (!strcmp(setupdata->Model, "dancall")) + CBUS_Initialise(state); + else if (!strcmp(setupdata->Model, "AT-HW")) + ATBUS_Initialise(state, true); + else + ATBUS_Initialise(state, false); + break; + default: + return GE_NOTSUPPORTED; + break; + } + SM_Initialise(state); + + SetEcho(&data, state); + + GSM_DataClear(&data); + data.Model = model; + ret = state->Phone.Functions(GOP_GetModel, &data, state); + if (ret != GE_NONE) return ret; + GSM_DataClear(&data); + data.Manufacturer = manufacturer; + ret = state->Phone.Functions(GOP_GetManufacturer, &data, state); + if (ret != GE_NONE) return ret; + + if (!strncasecmp(manufacturer, "ericsson", 8)) + AT_InitEricsson(state, model, setupdata->Model); + if (!strncasecmp(manufacturer, "siemens", 7)) + AT_InitSiemens(state, model, setupdata->Model); + if (!strncasecmp(manufacturer, "nokia", 5)) + AT_InitNokia(state, model, setupdata->Model); + + return GE_NONE; +} + + +void splitlines(AT_LineBuffer *buf) +{ + char *pos; + + if ((buf->length > 7) && (!strncmp(buf->line1+buf->length-7, "ERROR", 5))) { + buf->line1 = NULL; + return; + } + pos = findcrlf(buf->line1, 0, buf->length); + if (pos) { + *pos = 0; + buf->line2 = skipcrlf(++pos); + } else { + buf->line2 = buf->line1; + } + pos = findcrlf(buf->line2, 1, buf->length); + if (pos) { + *pos = 0; + buf->line3 = skipcrlf(++pos); + } else { + buf->line3 = buf->line2; + } +} + + +/* + * increments the argument until a char unequal to + * or is found. returns the new position. + */ + +char *skipcrlf(char *str) +{ + if (str == NULL) + return str; + while ((*str == '\n') || (*str == '\r')) + str++; + return str; +} + + +/* + * searches for or and returns the first + * occurrence. if test is set, the gsm char @ which + * is 0x00 is not considered as end of string. + * return NULL if no or was found in the + * range of max bytes. + */ + +char *findcrlf(char *str, int test, int max) +{ + if (str == NULL) + return str; + while ((*str != '\n') && (*str != '\r') && ((*str != '\0') || test) && (max > 0)) { + str++; + max--; + } + if ((*str == '\0') || ((max == 0) && (*str != '\n') && (*str != '\r'))) + return NULL; + return str; +} diff --git a/common/phones/dc2711.c b/common/phones/dc2711.c new file mode 100644 index 0000000..7e86bd7 --- /dev/null +++ b/common/phones/dc2711.c @@ -0,0 +1,284 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright 2001 Pavel Machek + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the dancall 2711. + See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:11 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/07/27 00:02:21 pkot + Generic AT support for the new structure (Manfred Jonsson) + + Revision 1.4 2001/04/25 12:53:07 machek + Added error handling to SMS receive function. + + Revision 1.3 2001/03/23 13:40:23 chris + Pavel's patch and a few fixes. + + Revision 1.2 2001/03/13 01:24:03 pkot + Code cleanup - no warnings during compilation + + Revision 1.1 2001/03/11 11:26:15 machek + Dancall support, now actually works enough to get sms messages. + + +*/ + +#include +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "phones/generic.h" +#include "links/cbus.h" + +/* Mobile phone information */ + +static GSM_Link link; +static GSM_IncomingFunctionType D2711_IncomingFunctions[]; + +#define INFO \ +{ \ + "dancall|2711|2713", /* Supported models */ \ + 7, /* Max RF Level */ \ + 0, /* Min RF Level */ \ + GRF_Percentage, /* RF level units */ \ + 7, /* Max Battery Level */ \ + 0, /* Min Battery Level */ \ + GBU_Percentage, /* Battery level units */ \ + 0, /* Have date/time support */ \ + 0, /* Alarm supports time only */ \ + 1, /* Alarms available - FIXME */ \ + 60, 96, /* Startup logo size - 7110 is fixed at init*/ \ + 21, 78, /* Op logo size */ \ + 14, 72 /* Caller logo size */ \ + } + +GSM_Information D2711_Information = INFO; + + +static GSM_Phone phone = { + D2711_IncomingFunctions, + PGEN_IncomingDefault, + INFO +}; + +/* LinkOK is always true for now... */ +bool D2711_LinkOK = true; +char reply_buf[10240]; + +static void Terminate() +{ + return; +}; + +/* ----------------------------------------------------------------------------------- */ + +static GSM_Error Reply(int messagetype, unsigned char *buffer, int length, GSM_Data *data) +{ + printf("[ack]"); + return GE_NONE; +} + +extern int seen_okay; +extern char reply_buf[]; + +static char *Request(char *c) +{ + link.SendMessage(strlen(c), 0, c); + while(!seen_okay) + link.Loop(NULL); + return reply_buf; +} + +/* ----------------------------------- SMS stuff ------------------------------------- */ + + +GSM_Error ATGSM_GetSMSMessage(GSM_SMSMessage * m) +{ + GSM_Error test = GE_NONE; + char writecmd[128]; + char *s, *t; + + // Set memory + m->MemoryType = GMT_SM; // Type of memory message is stored in. + // Send get request + sprintf(writecmd, "AT+CMGR=%d\r", m->Location); + s = Request(writecmd); + if (!s) + return GE_BUSY; + t = strchr(s, '\n')+1; + if (!strncmp(s, "+CMS ERROR: 321", 15)) + return GE_EMPTYSMSLOCATION; + if (!strncmp(s, "+CMS ERROR: ", 11)) + return GE_INTERNALERROR; + + printf("Got %s [%s] as reply for cmgr\n", s, t); + { + m->Time.Year=0; + m->Time.Month=0; + m->Time.Day=0; + m->Time.Hour=0; + m->Time.Minute=0; + m->Time.Second=0; + m->Time.Timezone=0; + } + memset(m->MessageText, 0, 161); + strncpy(m->MessageText, (void *) t, 161); + m->Length = strlen(t); + strcpy(m->MessageCenter.Number, "(unknown)"); + strcpy(m->MessageCenter.Name, "(unknown)"); + m->MessageCenter.No = 0; + strcpy(m->Sender, "(sender unknown)"); + m->UDHType = GSM_NoUDH; + + return test; +} + + +GSM_Error ATGSM_DeleteSMSMessage(GSM_SMSMessage * message) +{ + char writecmd[128]; + + sprintf(writecmd, "AT+CMGD=%d\r", message->Location); + + Request(writecmd); + return GE_NONE; +} + + +GSM_Error ATGSM_SendSMSMessage(GSM_SMSMessage * SMS, int size) +{ + return (GE_NOTIMPLEMENTED); +} + +/* ----------------------------------------------------------------------------------- */ + +static GSM_Error Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + /* char model[10]; */ + + strncpy(link.PortDevice, port_device, 20); + link.InitLength = atoi(initlength); + link.ConnectionType = connection; + + fprintf(stderr, "Initializing dancall...\n"); + switch (connection) { + case GCT_Serial: + CBUS_Initialise(&link, &phone); + break; + default: + return GE_NOTSUPPORTED; + break; + } + sendat("AT+CPMS=\"SM\",\"SM\"\r"); + printf("Waiting spurious...\n"); + if (strncmp(reply_buf, "+CPMS", 5)) { + while (strncmp(reply_buf, "+CPMS", 5)) + link.Loop(NULL); + seen_okay = 0; + printf("Waiting OKAY\n"); + while (!seen_okay) + link.Loop(NULL); + printf("Link UP\n"); + } + + return GE_NONE; +} + +static GSM_Error +GetSMSStatus(GSM_SMSStatus *Status) +{ + int i,j,k,l; + char *message = Request("AT+CPMS=\"SM\",\"SM\"\r"); + if (sscanf(message, "+CPMS: \"SM\",%d,%d,\"SM\",%d,%d", &i, &j, &k, &l)!=4) + return GE_BUSY; + Status->UnRead = i; + Status->Number = k; + return GE_NONE; +} + +/* Here we initialise model specific functions called by 'gnokii'. */ +/* This too needs fixing .. perhaps pass the link a 'request' of certain */ +/* type and the link then searches the phone functions.... */ + +GSM_Functions D2711_Functions = { + Initialise, + Terminate, + UNIMPLEMENTED, /* GetMemoryLocation */ + UNIMPLEMENTED, /* WritePhonebookLocation */ + UNIMPLEMENTED, /* GetSpeedDial */ + UNIMPLEMENTED, /* SetSpeedDial */ + UNIMPLEMENTED, /* GetMemoryStatus */ + GetSMSStatus, /* GetSMSStatus */ + UNIMPLEMENTED, /* GetSMSCentre */ + UNIMPLEMENTED, /* SetSMSCentre */ + ATGSM_GetSMSMessage, /* GetSMSMessage */ + ATGSM_DeleteSMSMessage, /* DeleteSMSMessage */ + ATGSM_SendSMSMessage, /* SendSMSMessage */ + UNIMPLEMENTED, /* SaveSMSMessage */ + UNIMPLEMENTED, /* GetRFLevel */ + UNIMPLEMENTED, /* GetBatteryLevel */ + UNIMPLEMENTED, /* GetPowerSource */ + UNIMPLEMENTED, /* GetDisplayStatus */ + UNIMPLEMENTED, /* EnterSecurityCode */ + UNIMPLEMENTED, /* GetSecurityCodeStatus */ + UNIMPLEMENTED, /* GetIMEI */ + UNIMPLEMENTED, /* GetRevision */ + UNIMPLEMENTED, /* GetModel */ + UNIMPLEMENTED, /* GetManufacturer */ + UNIMPLEMENTED, /* GetDateTime */ + UNIMPLEMENTED, /* SetDateTime */ + UNIMPLEMENTED, /* GetAlarm */ + UNIMPLEMENTED, /* SetAlarm */ + UNIMPLEMENTED, /* DialVoice */ + UNIMPLEMENTED, /* DialData */ + UNIMPLEMENTED, /* GetIncomingCallNr */ + UNIMPLEMENTED, /* GetNetworkInfo */ + UNIMPLEMENTED, /* GetCalendarNote */ + UNIMPLEMENTED, /* WriteCalendarNote */ + UNIMPLEMENTED, /* DeleteCalendarNote */ + UNIMPLEMENTED, /* NetMonitor */ + UNIMPLEMENTED, /* SendDTMF */ + UNIMPLEMENTED, /* GetBitmap */ + UNIMPLEMENTED, /* SetBitmap */ + UNIMPLEMENTED, /* SetRingtone */ + UNIMPLEMENTED, /* SendRingtone */ + UNIMPLEMENTED, /* Reset */ + UNIMPLEMENTED, /* GetProfile */ + UNIMPLEMENTED, /* SetProfile */ + UNIMPLEMENTED, /* SendRLPFrame */ + UNIMPLEMENTED, /* CancelCall */ + UNIMPLEMENTED, /* EnableDisplayOutput */ + UNIMPLEMENTED, /* DisableDisplayOutput */ + UNIMPLEMENTED, /* EnableCellBroadcast */ + UNIMPLEMENTED, /* DisableCellBroadcast */ + UNIMPLEMENTED /* ReadCellBroadcast */ +}; + +static GSM_IncomingFunctionType D2711_IncomingFunctions[] = { + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, Reply }, + { 0, NULL } +}; diff --git a/common/phones/generic.c b/common/phones/generic.c new file mode 100644 index 0000000..c59f591 --- /dev/null +++ b/common/phones/generic.c @@ -0,0 +1,95 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copytight (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides useful functions for all phones + See README for more details on supported mobile phones. + + The various routines are called PGEN_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:11 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/09/14 12:15:28 pkot + Cleanups from 0.3.3 (part1) + + Revision 1.4 2001/03/23 13:40:24 chris + Pavel's patch and a few fixes. + + Revision 1.3 2001/03/21 23:36:05 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.2 2001/03/06 10:39:35 machek + Function for printing unknown packets can probably be shared across + all phones. + + Revision 1.1 2001/02/21 19:57:07 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:53 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.4 2001/02/03 23:56:17 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + Revision 1.3 2001/01/29 17:14:42 chris + dprintf now in misc.h (and fiddling with 7110 code) + + Revision 1.2 2001/01/23 15:32:42 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.1 2001/01/14 22:46:59 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + + +*/ + +#include +#include +#include + +#include "gsm-common.h" +#include "phones/generic.h" +#include "misc.h" + +/* Useful debug function */ +GSM_Error PGEN_DebugMessage(int type, unsigned char *mes, int len) +{ + int i; + + dprintf("Message debug (type %02x):\n", type); + for (i = 0; i < len; i++) + if (isprint(mes[i])) dprintf("[%02x%c]", mes[i], mes[i]); + else dprintf("[%02x ]", mes[i]); + dprintf("\n"); + + return GE_NONE; +} + + +/* If we do not support a message type, print out some debugging info */ + +GSM_Error PGEN_IncomingDefault(int messagetype, unsigned char *buffer, int length) +{ + dprintf("Unknown Message received [type (%02x) length (%d): \n", messagetype, length); + PGEN_DebugMessage(messagetype, buffer, length); + + return GE_NONE; +} diff --git a/common/phones/nk2110.c b/common/phones/nk2110.c new file mode 100644 index 0000000..bee7093 --- /dev/null +++ b/common/phones/nk2110.c @@ -0,0 +1,1313 @@ +/* -*- linux-c -*- + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000, 2001 Pavel Machek + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:11 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.16 2001/11/23 22:07:44 machek + Fix SMS receiving to work, again. Unfortunately, it is not possible to + reuse much of gsm-sms.c... + + Revision 1.15 2001/11/15 12:10:57 pkot + Removed a warning from 2110 compilation + + Revision 1.14 2001/11/09 13:49:12 pkot + Pavel! You haven't implemented slave_process() function! + + Revision 1.13 2001/11/09 13:17:11 pkot + Update 2110 to a new libsms api + + Revision 1.12 2001/10/21 22:23:56 machek + Use symbolic constants instead of numbers + + At least detect when we get other message than we asked for + + Provide option to passively wait for sms-es + + Revision 1.11 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.10 2001/07/17 22:46:27 pkot + Removed warning when compiling with --enable-debug (Pawel Kot) + + Revision 1.9 2001/06/17 16:42:59 machek + Created another level of error message (ddprintf), fixed code not to + exit on error condition. Now it is actualy usable on my Philips Velo. + + Revision 1.8 2001/06/16 10:00:41 machek + Implement timeouts on waiting for SMS. + + Revision 1.7 2001/06/10 23:49:49 pkot + Small fixes to hide compilation warnings and allow gnokii.c to compile + + Revision 1.6 2001/06/10 11:28:00 machek + Convert GetSMS/DeleteSMS to new structure. + + Revision 1.5 2001/06/06 09:05:56 machek + Convert Grab/Release display to new structure. + + Revision 1.4 2001/05/09 20:18:46 machek + Cleaned up code a bit. Made it use device_() interface. Reworked delay + system; now it is 4 times faster. 5 times faster if you hold * key on + phone (?!). + + Revision 1.3 2001/05/07 14:13:03 machek + nokia-2110 module converted to suit new API better. --identify now works. + + Revision 1.2 2001/04/27 16:00:01 machek + Better error messages. + + Revision 1.1 2001/04/25 12:54:47 machek + Partly converted nokia 2110 to "new" form, and moved it to phone + directory. + + + Notice that this code was (partly) converted to "new" structure, but it + does not have code for bus separated. I think that separating it would + be waste of effort... --pavel + +*/ + +#ifndef WIN32 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef DEBUG +#include "misc.h" +#include "gsm-common.h" +#include "mbus-2110.h" +#include "phones/nokia.h" +#include "device.h" +#include "gsm-sms.h" + +#include +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "phones/generic.h" +#include "phones/nk2110.h" + +#define MYID 0x78 +#define ddprintf(x...) +#define eprintf(x...) fprintf(stderr, x) +#undef DEBUG + +static GSM_Error P2110_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); + +/* Global variables used by code in gsm-api.c to expose the + functions supported by this model of phone. */ +bool N2110_LinkOK; +static char PortDevice[GSM_MAX_DEVICE_NAME_LENGTH]; +static char *Revision = NULL, + *RevisionDate = NULL, + *Model = NULL, + VersionInfo[64]; + +#define INFO \ +{ \ + "2110|2140|6080", /* Models */ \ + 100, /* Max RF Level */ \ + 0, /* Min RF Level */ \ + GRF_Percentage, /* RF level units */ \ + 100, /* Max Battery Level */ \ + 0, /* Min Battery Level */ \ + GBU_Percentage, /* Battery level units */ \ + GDT_None, /* No date/time support */ \ + GDT_None, /* No alarm support */ \ + 0, /* Max alarms = 0 */ \ + 0, 0, /* Startup logo size */ \ + 0, 0, /* Op logo size */ \ + 0, 0 /* Caller logo size */ \ +} + +GSM_Information N2110_Information = INFO; + +GSM_Phone phone_nokia_2110 = { + NULL, + NULL, + INFO, + P2110_Functions +}; + +/* Local variables */ +static volatile bool RequestTerminate; +static u8 TXPacketNumber = 0x01; +#define MAX_MODEL_LENGTH 16 +static volatile unsigned char PacketData[10240]; +static volatile bool + ACKOK = false, + PacketOK = false; + +static volatile int SMSpos = 0; +static volatile unsigned char SMSData[10240]; + +static long long LastChar = 0; + +static long long +GetTime(void) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + return (long long) tv.tv_sec * 1000000 + tv.tv_usec; +} +static void SigHandler(int status); +#define POLLIT do { SigHandler(0); } while (0) + +static void +yield(void) +{ + usleep(5000); +} + +static void +Wait(long long from, int msec) +{ + while (GetTime() < from + ((long long) msec)*1000) { + yield(); + POLLIT; + } +} + +static void +Wait2(long long from, int msec) +{ + while (GetTime() < from + ((long long) msec)*1000) { + yield(); + } +} + +#define msleep(x) do { usleep(x*1000); } while (0) +#define msleep_poll(x) do { Wait(GetTime(), x); } while (0) + +#define waitfor(condition, maxtime) \ +do { \ + long long limit = GetTime() + maxtime*1000; \ + if (!maxtime) limit = 0x7fffffffffffffffULL; \ + while ((!(condition)) && (limit > GetTime())) { \ + yield(); \ + POLLIT; \ + } \ + if (!(limit > GetTime())) eprintf("???? TIMEOUT!"); \ +} while(0) + +/* Checksum calculation */ +static u8 +GetChecksum( u8 * packet, int len ) +{ + u8 checksum = 0; + unsigned int i; + + for( i = 0; i < len; i++ ) checksum ^= packet[i]; /* calculate checksum */ + return checksum; +} + +/* --------------- */ + +static int xread(unsigned char *d, int len) +{ + int res; + while (len) { + res = device_read(d, len); + if (res == -1) { + if (errno != EAGAIN) { + dprintf("I/O error : %m?!\n"); + return -1; + } else device_select(NULL); + } else { + d += res; + len -= res; + dprintf("(%d)", len); + } + } + return 0; +} + +static int xwrite(unsigned char *d, int len) +{ + int res; + while (len) { + res = device_write(d, len); + if (res == -1) { + if (errno != EAGAIN) { + dprintf("I/O error : %m?!\n"); + return -1; + } + } else { + d += res; + len -= res; + dprintf("<%d>", len); + } + } + return 0; +} + +/* --------------------------- */ + +static GSM_Error +SendFrame( u8 *buffer, u8 command, u8 length ) +{ + u8 pkt[10240], pkt2[10240]; + int current = 0; + + pkt[current++] = 0x00; /* Construct the header. */ + pkt[current++] = MYID; + pkt[current++] = length; /* Set data size */ + pkt[current++] = command; + memcpy( pkt + current, buffer, length ); /* Copy in data. */ + current += length; + pkt[current++] = TXPacketNumber; /* Set packet number */ + pkt[current++] = GetChecksum( pkt, current); /* Calculate and set checksum */ +#ifdef DEBUG + { + int i; + u8 b; + fprintf( stderr, _("PC : ") ); + for( i = 0; i < current; i++ ) { + b = pkt[i]; + fprintf( stderr, "[%02X %c]", b, b > 0x20 ? b : '.' ); + } + fprintf( stderr, "\n" ); + } +#endif /* DEBUG */ + /* Send it out... */ + ddprintf("("); + Wait2(LastChar, 3); + /* I should put my messages at least 2msec apart... */ + ddprintf(")"); + dprintf("writing..."); + LastChar = GetTime(); + if (xwrite(pkt, current) == -1) + return (GE_INTERNALERROR); + if (xread(pkt2, current) == -1) + return (GE_INTERNALERROR); + dprintf("echook"); + if (memcmp(pkt, pkt2, current)) { + eprintf("Bad echo?!"); + msleep(1000); + return (GE_TIMEOUT); + } + return (GE_NONE); +} + +static GSM_Error +SendCommand( u8 *buffer, u8 command, u8 length ) +{ + int time, retries = 10; + char pkt[10240]; + +// msleep(2); + while ((time = device_read(pkt, 10240)) != -1) { + int j; + char b; + dprintf("Spurious? (%d)", time); + dprintf( _("Phone: ") ); + for( j = 0; j < time; j++ ) { + b = pkt[j]; + dprintf( "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + msleep(2); + } + + ACKOK = false; + time = 30; + while (retries--) { + long long now; + SendFrame(buffer, command, length); + now = GetTime(); + while ((GetTime() - now) < time*1000) { + if (ACKOK) + return GE_NONE; + yield(); + POLLIT; + } + time = 50; /* 5 seems to be enough */ + dprintf("[resend]"); + } + eprintf("Command not okay after 10 retries!\n"); + return GE_BUSY; +} + +/* Applications should call Terminate to close the serial port. */ +static void +Terminate(void) +{ + /* Request termination of thread */ + RequestTerminate = true; + device_close(); +} + +static GSM_Error +SMS(GSM_SMSMessage *message, int command) +{ + u8 pkt[] = { 0x10, 0x02, 0, 0 }; + + SMSpos = 0; + memset((void *) &SMSData[0], 0, 255); + PacketOK = false; + pkt[1] = command; + pkt[2] = 1; /* == LM_SMS_MEM_TYPE_DEFAULT or LM_SMS_MEM_TYPE_SIM or LM_SMS_MEM_TYPE_ME */ + pkt[3] = message->Number; + + SendCommand(pkt, LM_SMS_COMMAND, sizeof(pkt)); + msleep_poll(300); /* We have to keep acknowledning phone's data */ + waitfor(PacketOK, 1000); + if (!PacketOK) { + eprintf("SMS: No reply came within second!\n"); + } + if (PacketData[3] != LM_SMS_EVENT) { + eprintf("Something is very wrong with SMS\n"); + return GE_BUSY; /* FIXME */ + } + if ((SMSData[2]) && (SMSData[2] != message->Number)) { + eprintf("Wanted message @%d, got message at @%d!\n", message->Number, SMSData[2]); + return GE_BUSY; + } + return (GE_NONE); +} + + +static GSM_Error +DecodeIncomingSMS(GSM_SMSMessage *m) +{ + GSM_Error error; + int len, i; + + error = GE_NONE; +/* Should be moved to gsm-sms.c */ + + ddprintf("Status: " ); + switch (SMSData[3]) { + case 7: m->Type = SMS_Submit; /* m->Status = GSS_NOTSENTREAD; */ ddprintf("not sent\n"); break; + case 5: m->Type = SMS_Submit; /* m->Status = GSS_SENTREAD; */ ddprintf("sent\n"); break; + case 3: m->Type = SMS_Deliver; /* m->Status = GSS_NOTSENTREAD; */ ddprintf("not read\n"); break; + case 1: m->Type = SMS_Deliver; /* m->Status = GSS_SENTREAD; */ ddprintf("read\n"); break; + } + + UnpackDateTime(SMSData+7, &m->Time); + + m->Length = len = SMSData[14]; + ddprintf("%d bytes: ", len ); + for (i = 0; i160) + eprintf("Magic not allowed\n"); + memset(m->MessageText, 0, 161); + strncpy(m->MessageText, (void *) &SMSData[15], len); + + ddprintf("Text is %s\n", m->MessageText); + + /* + Originator address is at 15+i, + followed by message center addres (?) + */ + { + char *s = (char *) &SMSData[15+i]; /* We discard volatile. Make compiler quiet. */ + strcpy(m->RemoteNumber.number, s); + s+=strlen(s)+1; + strcpy(m->MessageCenter.Number, s); + ddprintf("Sender = %s, MessageCenter = %s\n", m->Sender, m->MessageCenter.Name); + } + + m->MessageCenter.No = 0; + strcpy(m->MessageCenter.Name, "(unknown)"); + m->UDH_No = 0; + + return error; +} + +static GSM_Error +GetSMSMessage(GSM_SMSMessage *m) +{ + if (m->Number > 10) + return GE_INVALIDSMSLOCATION; + + if (SMS(m, LM_SMS_READ_STORED_DATA) != GE_NONE) + return GE_BUSY; /* FIXME */ + ddprintf("Have message?\n"); + + if (DecodeIncomingSMS(m) != GE_NONE) + return GE_BUSY; + + if (SMSData[0] != LM_SMS_FORWARD_STORED_DATA) { + ddprintf("No sms there? (%x/%d)\n", SMSData[0], SMSpos); + return GE_EMPTYSMSLOCATION; + } + msleep_poll(1000); /* If phone lost our ack, it might retransmit data */ + return (GE_NONE); +} + +#if 0 +static GSM_Error +SendSMSMessage(GSM_SMSMessage *m) +{ + if (m->Number > 10) + return GE_INVALIDSMSLOCATION; + + if (SMSData[0] != 0x0b) { + ddprintf("No sms there? (%x/%d)\n", SMSData[0], SMSpos); + return GE_EMPTYSMSLOCATION; + } + ddprintf("Status: " ); + switch (SMSData[3]) { + case 7: m->Type = GST_MO; m->Status = GSS_NOTSENTREAD; ddprintf("not sent\n"); break; + case 5: m->Type = GST_MO; m->Status = GSS_SENTREAD; ddprintf("sent\n"); break; + case 3: m->Type = GST_MT; m->Status = GSS_NOTSENTREAD; ddprintf("not read\n"); break; + case 1: m->Type = GST_MT; m->Status = GSS_SENTREAD; ddprintf("read\n"); break; + } + return (GE_NONE); +} +#endif + +static GSM_Error DeleteSMSMessage(GSM_SMSMessage *message) +{ + ddprintf("deleting..."); + return SMS(message, 3); +} + +/* GetRFLevel */ + +static int +GetValue(u8 index, u8 type) +{ + u8 pkt[] = {0x84, 2, 0}; /* Sending 4 at pkt[0] makes phone crash */ + int val; + pkt[0] = index; + pkt[1] = type; + + PacketOK = false; + + ddprintf("\nRequesting value(%d)", index); + SendCommand(pkt, 0xe5, 3); + + waitfor(PacketOK, 0); + if ((PacketData[3] != 0xe6) || + (PacketData[4] != index) || + (PacketData[5] != type)) + dprintf("Something is very wrong with GetValue\n"); + val = PacketData[7]; + ddprintf( "Value = %d\n", val ); + return (val); +} + +static GSM_Error +GetRFLevel(GSM_RFUnits *units, float *level) +{ + int val = GetValue(0x84, 2); + float res; + if (*units == GRF_Arbitrary) { + res = (100* (float) val) / 60.0; /* This should be / 99.0 for some models other than nokia-2110 */ + *level = 0; + if (res > 10) + *level = 1; + if (res > 30) + *level = 2; + if (res > 50) + *level = 3; + if (res > 70) + *level = 4; + } else { + *level = (100* (float) val) / 60.0; /* This should be / 99.0 for some models other than nokia-2110 */ + *units = GRF_Percentage; + } + return (GE_NONE); +} + +static GSM_Error +GetBatteryLevel(GSM_BatteryUnits *units, float *level) +{ + int val = GetValue(0x85, 2); + *level = 0; + if (val >= 5) + *level = 1; + if (val >= 10) + *level = 2; + if (val >= 90) + *level = 3; + if (*units == GBU_Arbitrary) { + } else { +/* *level = (100 * (float) val) / 90.0;*/ /* 5..first bar, 10..second bar, 90..third bar */ + *level = *level * 33; + *units = GBU_Percentage; + } + + return (GE_NONE); +} + +static GSM_Error GetVersionInfo(void) +{ + char *s = VersionInfo; + ddprintf("Getting version info...\n"); + if (GetValue(0x11, 0x03) == -1) + return GE_TIMEOUT; + + strncpy( s, (void *) &PacketData[6], sizeof(VersionInfo) ); + + for( Revision = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + for( RevisionDate = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + for( Model = s; *s != 0x0A; s++ ) if( !*s ) return (GE_NONE); + *s++ = 0; + ddprintf("Revision %s, Date %s, Model %s\n", Revision, RevisionDate, Model ); + return (GE_NONE); +} + +/* Our "Not implemented" functions */ +static GSM_Error +GetMemoryStatus(GSM_MemoryStatus *Status) +{ + switch(Status->MemoryType) { + case GMT_ME: + Status->Used = 0; + Status->Free = 150; + break; + case GMT_LD: + Status->Used = 5; + Status->Free = 0; + break; + case GMT_ON: + Status->Used = 1; + Status->Free = 0; + break; + case GMT_SM: + Status->Used = 0; + Status->Free = 150; + break; + default: + return (GE_NOTIMPLEMENTED); + } + return (GE_NONE); +} + +static bool +SendRLPFrame(RLP_F96Frame *frame, bool out_dtx) +{ + return (false); +} + +static char * +Display(u8 b, int shift, char *s, char *buf) +{ + b >>= shift; + b &= 0x03; + switch (b) { + case 0: break; + case 1: case 2: *buf++ = '!'; + case 3: strcpy(buf, s); buf += strlen(s); *buf++ = ' '; + } + return buf; +} + +static GSM_Error (*OutputFn)(char *text, char *ctrl); + +static int +HandlePacket(void) +{ + eprintf("[%x]", PacketData[3]); + switch(PacketData[3]) { + case 0x12: { /* Text from display */ + char buf[10240], *s = buf, *t; + t = (char *)&PacketData[8]; +#define COPY(x) strncpy(s, t, x); t+=x; s+=x; *s++ = '\n' + COPY(10); COPY(10); COPY(10); COPY(3); COPY(12); *s++ = 0; + if (OutputFn) + (*OutputFn)(buf, NULL); + return 1; + } + case 0x2f: { /* Display lights */ + char buf[10240], *s = buf; +#undef COPY +#define COPY(x, y, z) s = Display(PacketData[x], y, z, s) + /* Valid for 2110 */ + COPY(4, 0, "d"); COPY(4, 2, "b"); COPY(4, 4, "a"); COPY(4, 6, "lights"); + COPY(5, 0, "service"); COPY(5, 2, "scroll_up"); COPY(5, 4, "scroll_down"); COPY(5, 6, "ABC"); + COPY(6, 0, "2.>"); COPY(6, 2, "1.>"); COPY(6, 4, "roam"); COPY(6, 6, "handset"); + COPY(7, 0, "vmail"); COPY(7, 2, "envelope"); COPY(7, 4, "battbar"); COPY(7, 6, "3.>"); + COPY(8, 0, "?1"); COPY(8, 2, "?2"); COPY(8, 4, "fieldbar"); COPY(8, 6, "ring"); + *s++ = 0; + if (OutputFn) + (*OutputFn)(NULL, buf); + return 1; +#undef COPY + } + case LM_SMS_EVENT: /* SMS Data */ + /* copy bytes 5+ to smsbuf */ + ddprintf("SMSdata:"); + { + int i; + for (i=5; i= 0x20 ? b : '.' ); + continue; + } else { + pkt[Index++] = b; + if(Index == 3) { + Length = b + 6; + if (b == 0x7f) Length = 5; + if (b == 0x7e) Length = 8; + } + if(Index >= Length) { + if((pkt[0] == MYID || pkt[0]==0xf8) && pkt[1] == 0x00) /* packet from phone */ { + ddprintf( _("Phone: ") ); + for( j = 0; j < Length; j++ ) { + b = pkt[j]; + ddprintf( "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + ddprintf( "\n" ); + /* ensure that we received valid packet */ + if(pkt[Length - 1] != GetChecksum(pkt, Length-1)) { + eprintf( "***bad checksum***"); + } else { + if((pkt[2] == 0x7F) || (pkt[2] == 0x7E)) /* acknowledge by phone */ { + if (pkt[2] == 0x7F) { + dprintf( "[ack]" ); + /* Set ACKOK flag */ + ACKOK = true; + /* Increase TX packet number */ + } else { + dprintf( "[registration ack]" ); + N2110_LinkOK = true; + } + TXPacketNumber++; + } else { + /* Copy packet data */ + dprintf( "[data]" ); + memcpy((void *) PacketData,pkt,Length); + /* send acknowledge packet to phone */ + msleep(10); + ack[0] = 0x00; /* Construct the header. */ + ack[1] = pkt[0]; /* Send back id */ + ack[2] = 0x7F; /* Set special size value */ + ack[3] = pkt[Length - 2]; /* Send back packet number */ + ack[4] = GetChecksum( ack, 4); /* Set checksum */ + ddprintf( _("PC : ") ); + for( j = 0; j < 5; j++ ) { + b = ack[j]; + ddprintf( "[%02X %c]", b, b >= 0x20 ? b : '.' ); + } + ddprintf( "\n" ); + LastChar = GetTime(); + if( xwrite( ack, 5 ) == -1 ) + perror( _("Write error!\n") ); + if( xread( ack, 5 ) == -1 ) + perror( _("Read ack error!\n") ); + + /* Set validity flag */ + if (!HandlePacket()) + PacketOK = true; + } + } + } else + eprintf("Got my own echo? That should not be possible!\n"); + /* Look for new packet */ + Index = 0; + Length = 5; + } + } + } +} + +/* Called by initialisation code to open comm port in asynchronous mode. */ +bool OpenSerial(void) +{ + int result; + + ddprintf(_("Setting MBUS communication with 2110...\n")); + + result = device_open(PortDevice, true, false, false, GCT_Serial); + if (!result) { + fprintf(stderr, "Failed to open %s ...\n", PortDevice); + return (false); + } + + ddprintf("%s opened...\n", PortDevice); + + device_changespeed(9600); + device_setdtrrts(1, 1); + return (true); +} + +static GSM_Error +SetKey(int c, int up) +{ + u8 reg[] = { 0x7a /* RPC_UI_KEY_PRESS or RPC_UI_KEY_RELEASE */, 0, 1, 0 /* key code */ }; + reg[0] += up; + reg[3] = c; + dprintf("\n Pressing %d\n", c ); + PacketOK = false; + SendCommand( reg, 0xe5, 4 ); + waitfor(PacketOK, 0); + return GE_NONE; +} + +#define XCTRL(a) (a&0x1f) +#define POWER XCTRL('o') +#define SEND XCTRL('t') +#define END XCTRL('s') +#define CLR XCTRL('h') +#define MENU XCTRL('d') +#define ALPHA XCTRL('a') +#define PLUS XCTRL('b') +#define MINUS XCTRL('e') +#define PREV XCTRL('p') +#define NEXT XCTRL('n') +#define SOFTA XCTRL('x') +#define SOFTB XCTRL('q') + +static char lastkey; + +static void PressKey(char c, int i) +{ + lastkey = c; +#define X( a, b ) case a: SetKey(b, i); break; + switch (c) { + case '1' ... '9': SetKey(c-'0',i); break; + X('0', 10) + X('#', 11) + X('*', 12) + X(POWER, 13) + X(SEND, 14) + X(END, 15) + X(PLUS, 16) + X(MINUS, 17) + X(CLR, 18) + X(MENU, 21) + X(ALPHA, 22) + X(PREV, 23) + X(NEXT, 24) + X(SOFTA, 25) + X(SOFTB, 26) +#if 0 + X(STO, 19) /* These are not present on 2110, so I can't test this. Enable once tested. */ + X(RCL, 20) + X(MUTE, 28) +#endif + default: fprintf(stderr, "Unknown key %d\n", c); + } +#undef X +} + + +static void +PressString(char *s, int upcase) +{ + static int lastchar; + static int lastupcase = 1; + + if (lastchar == *s) { + fprintf(stderr, "***collision"); + PressKey(ALPHA, 0); + PressKey(ALPHA, 0); + lastupcase = 1; + } + + while (*s) { + lastchar = *s; + PressKey(*s, 0); + if (upcase != lastupcase) { + fprintf(stderr, "***size change"); + msleep_poll(1500); + PressKey(*s, 1); + lastupcase = upcase; + } + s++; + } +} + +/* + * This is able to press keys at 62letters/36seconds, tested on message + * "Tohle je testovaci zprava schvalne za jak dlouho ji to napise" + * Well, it is possible to write that message in 17seconds... + */ +static void +HandleKey(char c) +{ + switch(c) { +#define X(a, b) case a: PressString(b, 0); break; + X('-', "1"); + X('?', "11"); + X('!', "111"); + X(',', "1111"); + X('.', "11111"); + X(':', "111111"); + X('"', "1111111"); + X('\'', "11111111"); + X('&', "111111111"); + X('$', "1111111111"); +/* X('$', "11111111111"); libra, not in ascii */ + X('(', "111111111111"); + X(')', "1111111111111"); + X('/', "11111111111111"); + X('%', "111111111111111"); + X('@', "1111111111111111"); + X('_', "11111111111111111"); + X('=', "111111111111111111"); + X('a', "2"); + X('b', "22"); + X('c', "222"); + X('d', "3"); + X('e', "33"); + X('f', "333"); + X('g', "4"); + X('h', "44"); + X('i', "444"); + X('j', "5"); + X('k', "55"); + X('l', "555"); + X('m', "6"); + X('n', "66"); + X('o', "666"); + X('p', "7"); + X('q', "77"); + X('r', "777"); + X('s', "7777"); + X('t', "8"); + X('u', "88"); + X('v', "888"); + X('w', "9"); + X('x', "99"); + X('y', "999"); + X('z', "9999"); +#undef X +#define X(a, b) case a: PressString(b, 1); break; + X('A', "2"); + X('B', "22"); + X('C', "222"); + X('D', "3"); + X('E', "33"); + X('F', "333"); + X('G', "4"); + X('H', "44"); + X('I', "444"); + X('J', "5"); + X('K', "55"); + X('L', "555"); + X('M', "6"); + X('N', "66"); + X('O', "666"); + X('P', "7"); + X('Q', "77"); + X('R', "777"); + X('S', "7777"); + X('T', "8"); + X('U', "88"); + X('V', "888"); + X('W', "9"); + X('X', "99"); + X('Y', "999"); + X('Z', "9999"); +#undef X + case ' ': PressKey('#', 0); break; + case '+': PressKey(ALPHA, 0); PressKey('*', 0); PressKey('*', 0); PressKey(ALPHA, 0); break; + case '*': case '#': + case '0' ... '9': PressKey(ALPHA, 0); PressKey(c, 0); PressKey(ALPHA, 0); break; + default: PressKey(c, 0); + } +} + +static GSM_Error +HandleString(char *s) +{ + while (*s) { + HandleKey(*s); + s++; + } + fprintf(stderr,"***end of input"); + PressKey(lastkey, 1); + return GE_NONE; +} + +static void +Register(void) +{ + u8 reg[] = { 1, 1, 0x0f, 1, 0x0f }; + SendFrame( reg, 0xe9, 5 ); +} + +static GSM_Error +EnableDisplayOutput(GSM_Statemachine *sm) +{ + /* LN_UC_SHARE, LN_UC_SHARE, LN_UC_RELEASE, LN_UC_RELEASE, LN_UC_KEEP */ + u8 pkt[] = {3, 3, 0, 0, 1}; + + msleep_poll(500); + fprintf(stderr, "\nShould display output\n"); + if (!OutputFn) { + pkt[0] = 0; + pkt[1] = 0; + } + PacketOK = false; + SendCommand(pkt, 0x19, 5); + fprintf(stderr, "\nGrabbing display"); + waitfor(PacketOK, 0); + if ((PacketData[3] != 0xcd) || + (PacketData[2] != 1) || + (PacketData[4] != 1 /* LN_UC_REQUEST_OK */)) + fprintf(stderr, "Something is very wrong with GrabDisplay\n"); + fprintf(stderr, "Display grabbed okay (waiting)\n"); + msleep_poll(500); + fprintf(stderr, "Okay\n"); + return GE_NONE; +} + +static GSM_Error SMS_Reserve(GSM_Statemachine *sm) +{ + u8 pkt[] = { 0x10, LM_SMS_RESERVE_PP, LN_SMS_NORMAL_RESERVE }; + PacketOK = false; + SendCommand(pkt, LM_SMS_COMMAND, sizeof(pkt)); + PacketOK = 0; + waitfor(PacketOK, 100); + if (!PacketOK) + eprintf("No reply trying to reserve SMS-es\n"); + if (PacketData[3] != LM_SMS_EVENT) + eprintf("Bad reply trying to reserve SMS-es\n"); + if (SMSData[0] != LM_SMS_PP_RESERVE_COMPLETE) + eprintf("Not okay trying to reserve SMS-es (%d)\n", SMSData[0]); + return GE_NONE; +} + +static GSM_Error SMS_Slave(GSM_Statemachine *sm) +{ + SMS_Reserve(sm); + eprintf("Reserved okay\n"); + while (1) { + PacketOK = 0; + SMSpos = 0; + memset((void *) &SMSData[0], 0, 255); + waitfor(PacketOK, 1000000); + if (PacketData[3] != LM_SMS_EVENT) + eprintf("Wrong packet came!\n"); + switch (SMSData[0]) { + case LM_SMS_RECEIVED_PP_DATA: + eprintf("Data came!\n"); + break; + case LM_SMS_ALIVE_TEST: + eprintf("Am I alive?\n"); + break; + case LM_SMS_NEW_MESSAGE_INDICATION: + { + GSM_SMSMessage m; + eprintf("New message indicated @%d\n", SMSData[2]); + msleep_poll(200); + memset(&m, 0, sizeof(m)); + m.Number = SMSData[2]; + m.MemoryType = GMT_ME; + if (GetSMSMessage(&m) != GE_NONE) + eprintf("Could not find promissed message?\n"); +#if 0 + else + slave_process(&m, SMSData[2]); +#endif + } + break; + default: + eprintf("Unexpected packet came: %x\n", SMSData[0]); + } + } +} + +/* This is the main loop for the MB21 functions. When N2110_Initialise + is called a thread is created to run this loop. This loop is + exited when the application calls the N2110_Terminate function. */ +static void +RegisterMe(void) +{ + fprintf(stderr, "Initializing... "); + /* Do initialisation stuff */ + LastChar = GetTime(); + if (OpenSerial() != true) { + N2110_LinkOK = false; + return; + } + + msleep(100); + while(!N2110_LinkOK) { + fprintf(stderr, "registration... "); + Register(); + msleep_poll(100); + } + fprintf(stderr, "okay\n"); +} + +/* Initialise variables and state machine. */ +static GSM_Error +Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)) +{ + RequestTerminate = false; + N2110_LinkOK = false; + setvbuf(stdout, NULL, _IONBF, 0); + setvbuf(stderr, NULL, _IONBF, 0); + memset(VersionInfo, 0, sizeof(VersionInfo)); + strncpy(PortDevice, port_device, GSM_MAX_DEVICE_NAME_LENGTH); + switch (connection) { + case GCT_Serial: + RegisterMe(); + break; + default: + return GE_NOTSUPPORTED; + break; + } + + return (GE_NONE); +} + +/* Routine to get specifed phone book location. Designed to be called by + application. Will block until location is retrieved or a timeout/error + occurs. */ + +static GSM_Error +GetPhonebookLocation(GSM_PhonebookEntry *entry) +{ + u8 pkt[] = {0x1a, 0 /* 1 == phone */, 0}; + int i; + + pkt[1] = 3 + (entry->MemoryType != GMT_ME); + pkt[2] = entry->Location; + + PacketOK = false; + SendCommand(pkt, LN_LOC_COMMAND, 3); + waitfor(PacketOK, 0); + if ((PacketData[3] != 0xc9) || + (PacketData[4] != 0x1a)) { + fprintf(stderr, "Something is very wrong with GetPhonebookLocation\n"); + return GE_BUSY; + } + ddprintf("type= %x\n", PacketData[5]); + ddprintf("location= %x\n", PacketData[6]); + ddprintf("status= %x\n", PacketData[7]); + for (i=8; PacketData[i]; i++) { + ddprintf("%c", PacketData[i]); + } + strcpy(entry->Name, (void *)&PacketData[8]); + i++; + strcpy(entry->Number, (void *)&PacketData[i]); + for (; PacketData[i]; i++) { + ddprintf("%c", PacketData[i]); + } + ddprintf("\n"); + entry->Empty = false; + entry->Group = 0; + + return (GE_NONE); +} + +/* Routine to write phonebook location in phone. Designed to be called by + application code. Will block until location is written or timeout + occurs. */ + +static GSM_Error +WritePhonebookLocation(GSM_PhonebookEntry *entry) +{ + u8 pkt[999] = {0x1b, 0 /* 1 == phone */, 0}; + + pkt[1] = 3 + (entry->MemoryType != GMT_ME); + pkt[2] = entry->Location; + strcpy(&pkt[3], entry->Name); + strcpy(&pkt[3+strlen(entry->Name)+1], entry->Number); + + PacketOK = false; + SendCommand(pkt, LN_LOC_COMMAND, 3+strlen(entry->Number)+strlen(entry->Name)+2); + waitfor(PacketOK, 0); + printf("okay?\n"); + if ((PacketData[3] != 0xc9) || + (PacketData[4] != 0x1b)) { + fprintf(stderr, "Something is very wrong with WritePhonebookLocation\n"); + return GE_BUSY; + } + printf("type= %x\n", PacketData[5]); + printf("location= %x\n", PacketData[6]); + printf("status= %x\n", PacketData[7]); + return (GE_NONE); +} + +static GSM_Error +GetSMSStatus(GSM_SMSMemoryStatus *Status) +{ + Status->Unread = 0; + Status->Number = 5; + return GE_NONE; +} + + +GSM_Functions N2110_Functions = { + Initialise, + Terminate, + GetPhonebookLocation, + WritePhonebookLocation, + NULL, + NULL, + GetMemoryStatus, + GetSMSStatus, + NULL, + NULL, + GetSMSMessage, + DeleteSMSMessage, + NULL, + NULL, + GetRFLevel, + GetBatteryLevel, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + PNOK_GetManufacturer, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + SendRLPFrame, + NULL, + EnableDisplayOutput, + NULL, + NULL, + NULL, + NULL, + SetKey, + HandleString, + NULL +}; + +#endif + +static GSM_Error link_Loop(struct timeval *tm) +{ + POLLIT; + return GE_NONE; +} + +GSM_Error P2110_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state) +{ + GSM_Error err = GE_NONE; + + printf("Asked for %d\n", op); + switch (op) { + case GOP_Init: + state->Link.Loop = link_Loop; + break; + case GOP_Identify: + case GOP_GetModel: + case GOP_GetRevision: + if (!Model) err = GetVersionInfo(); + if (err) break; + if (data->Model) strncpy(data->Model, Model, 64); + if (data->Revision) strncpy(data->Revision, Revision, 64); + break; + case GOP_GetBatteryLevel: + err = GetBatteryLevel(data->BatteryUnits, data->BatteryLevel); + break; + case GOP_GetRFLevel: + err = GetRFLevel(data->RFUnits, data->RFLevel); + break; +#if 0 + case GOP_GetMemoryStatus: + err = N2110_GetMemoryStatus(data, state); + break; +#endif + case GOP_DisplayOutput: + printf("DisplayOutput(%px)\n", data->OutputFn); + OutputFn = data->OutputFn; + printf("Enable\n"); + err = EnableDisplayOutput(state); + break; + case GOP_GetSMS: +#if 0 + SMS_Slave(state); /* FIXME!!! */ +#endif + msleep(100); + err = GetSMSMessage(data->SMSMessage); + break; + case GOP_DeleteSMS: + err = SMS(data->SMSMessage, 3); + break; + case GOP_ReadPhonebook: + err = GetPhonebookLocation(data->PhonebookEntry); + break; + case GOP_WritePhonebook: + err = WritePhonebookLocation(data->PhonebookEntry); + break; + case GOP_GetAlarm: + err = SMS_Slave(state); /* Dirty hack, Fallthrough */ + break; + default: + err = GE_NOTIMPLEMENTED; + } + return err; +} diff --git a/common/phones/nk3110.c b/common/phones/nk3110.c new file mode 100644 index 0000000..c798bbf --- /dev/null +++ b/common/phones/nk3110.c @@ -0,0 +1,1187 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 3110 series. + See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:13 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.6 2001/11/20 16:22:22 pkot + First attempt to read Picture Messages. They should appear when you enable DEBUG. Nokia seems to break own standards. :/ (Markus Plail) + + Revision 1.5 2001/11/19 13:03:18 pkot + nk3110.c cleanup + + Revision 1.4 2001/11/17 16:42:47 pkot + Cleanup + + Revision 1.3 2001/11/09 14:25:04 pkot + DEBUG cleanups + + Revision 1.2 2001/11/09 13:47:58 pkot + Removed pthreads from 3110 support. It may break it. + + Revision 1.1 2001/11/08 16:39:09 pkot + 3810/3110 support for the new structure (Tamas Bondar) + + +*/ + +#include +#include +#include + +#define __phones_nk3110_c +#include "misc.h" +#include "gsm-common.h" +#include "phones/generic.h" +#include "phones/nk3110.h" +#include "links/fbus-3110.h" +#include "phones/nokia.h" + +#ifndef WIN32 + #include +#else + #define snprintf _snprintf + #define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +#endif + +/* Some globals */ + +static GSM_IncomingFunctionType IncomingFunctions[] = { + { 0x0a, P3110_IncomingNothing }, + { 0x0b, P3110_IncomingCall }, + { 0x0c, P3110_IncomingNothing }, + { 0x0d, P3110_IncomingCallAnswered }, + { 0x0e, P3110_IncomingCallEstablished }, + { 0x0f, P3110_IncomingNothing }, + { 0x10, P3110_IncomingEndOfOutgoingCall }, + { 0x11, P3110_IncomingEndOfIncomingCall }, + { 0x12, P3110_IncomingEndOfOutgoingCall2 }, + { 0x13, P3110_IncomingRestart }, + { 0x15, P3110_IncomingInitFrame_0x15 }, + { 0x16, P3110_IncomingInitFrame_0x16 }, + { 0x17, P3110_IncomingInitFrame_0x17 }, + { 0x20, P3110_IncomingNothing }, + /*{ 0x21, P3110_IncomingDTMFSucess },*/ + /*{ 0x22, P3110_IncomingDTMFFailure },*/ + { 0x23, P3110_IncomingNothing }, + { 0x24, P3110_IncomingNothing }, + { 0x25, P3110_IncomingNothing }, + { 0x26, P3110_IncomingNothing }, + { 0x27, P3110_IncomingSMSUserData }, + { 0x28, P3110_IncomingSMSSend }, + { 0x29, P3110_IncomingSMSSendError }, + /* ... */ + { 0x2c, P3110_IncomingSMSHeader }, + { 0x2d, P3110_IncomingSMSError }, + { 0x2e, P3110_IncomingSMSDelete }, + { 0x2f, P3110_IncomingSMSDeleteError }, + /* ... */ + { 0x32, P3110_IncomingSMSDelivered }, + { 0x3f, P3110_IncomingNothing }, + { 0x40, P3110_IncomingNoSMSInfo }, + { 0x41, P3110_IncomingSMSInfo }, + { 0x48, P3110_IncomingPINEntered }, + { 0x4a, P3110_IncomingNothing }, + { 0x4b, P3110_IncomingStatusInfo }, + { 0x4c, P3110_IncomingNothing }, + { 0x4d, P3110_IncomingPhoneInfo }, + { 0, NULL} +}; + +GSM_Phone phone_nokia_3110 = { + IncomingFunctions, + PGEN_IncomingDefault, + /* Mobile phone information */ + { + "3110|3810|8110|8110i", /* Models */ + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_None, /* No date/time support */ + GDT_None, /* No alarm support */ + 0, /* Max alarms = 0 */ + 0, 0, /* Startup logo size */ + 0, 0, /* Op logo size */ + 0, 0 /* Caller logo size */ + }, + Functions +}; + +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state) +{ + switch (op) { + case GOP_Init: + return P3110_Initialise(state); + case GOP_GetModel: + case GOP_GetRevision: + case GOP_GetImei: + return P3110_GetPhoneInfo(data, state); + case GOP_Identify: + return P3110_Identify(data, state); + case GOP_GetBatteryLevel: + case GOP_GetRFLevel: + return P3110_GetStatusInfo(data, state); + case GOP_GetMemoryStatus: + return P3110_GetMemoryStatus(data, state); + case GOP_ReadPhonebook: + case GOP_WritePhonebook: + case GOP_GetPowersource: + case GOP_GetAlarm: + case GOP_GetSMSStatus: + case GOP_GetIncomingCallNr: + case GOP_GetNetworkInfo: + return GE_NOTIMPLEMENTED; + case GOP_GetSMS: + return P3110_GetSMSMessage(data, state); + case GOP_DeleteSMS: + return P3110_DeleteSMSMessage(data, state); + case GOP_SendSMS: + return P3110_SendSMSMessage(data, state); + case GOP_GetSMSCenter: + return P3110_GetSMSInfo(data, state); + case GOP_GetSpeedDial: + case GOP_GetDateTime: + default: + return GE_NOTIMPLEMENTED; + } +} + +static bool LinkOK = false; +static bool SimAvailable = false; + +/* These are related to keepalive functionality */ +static bool RequestTerminate; +static bool DisableKeepAlive; +static int KeepAliveTimer; + +/* Initialise is the only function allowed to 'use' state */ +static GSM_Error P3110_Initialise(GSM_Statemachine *state) +{ + GSM_Data data; + u8 init_sequence[20] = {0x02, 0x01, 0x07, 0xa2, 0x88, 0x81, 0x21, 0x55, 0x63, 0xa8, 0x00, 0x00, 0x07, 0xa3, 0xb8, 0x81, 0x20, 0x15, 0x63, 0x80}; + + /* Copy in the phone info */ + memcpy(&(state->Phone), &phone_nokia_3110, sizeof(GSM_Phone)); + + /* Only serial connection is supported */ + if (state->Link.ConnectionType != GCT_Serial) return GE_NOTSUPPORTED; + + /* Initialise FBUS link */ + if (FB3110_Initialise(&(state->Link), state) != GE_NONE) { + dprintf("Error in link initialisation\n"); + return GE_NOTREADY; + } + + /* Initialise state machine */ + SM_Initialise(state); + + /* 0x15 messages are sent by the PC during the initialisation phase. + Anyway, the contents of the message are not understood so we + simply send the same sequence observed between the W95 PC and + the phone. The init sequence may still be a bit flaky and is not + fully understood. */ + if (SM_SendMessage(state, 20, 0x15, init_sequence) != GE_NONE) return GE_NOTREADY; + + /* Wait for response to 0x15 sequence */ + GSM_DataClear(&data); + if (SM_Block(state, &data, 0x16) != GE_NONE) return GE_NOTREADY; + + /* Most probably link is OK now */ + LinkOK = true; + + /* Start sending keepalive messages in separate thread */ + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + RequestTerminate = false; + DisableKeepAlive = false; + return GE_NONE; +} + + +static GSM_Error P3110_GetSMSInfo(GSM_Data *data, GSM_Statemachine *state) +{ + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + if (SM_SendMessage(state, 0, 0x3f, NULL) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x41); +} + +static GSM_Error P3110_GetPhoneInfo(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Getting phone info...\n"); + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + if (SM_SendMessage(state, 0, 0x4c, NULL) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x4d); +} + +static GSM_Error P3110_GetStatusInfo(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Getting phone status...\n"); + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + if (SM_SendMessage(state, 0, 0x4a, NULL) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x4b); +} + +static GSM_Error P3110_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Getting memory status...\n"); + + /* Check if this type of memory is available */ + switch (data->MemoryStatus->MemoryType) { + case GMT_SM: + if (!SimAvailable) return GE_NOTREADY; + return P3110_GetSMSInfo(data, state); + case GMT_ME: + if (P3110_MEMORY_SIZE_ME == 0) return GE_NOTREADY; + return P3110_GetSMSInfo(data, state); + default: + break; + } + return GE_NOTREADY; +} + + +static GSM_Error P3110_Identify(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Identifying...\n"); + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + if (SM_SendMessage(state, 0, 0x4c, NULL) != GE_NONE) return GE_NOTREADY; + SM_Block(state, data, 0x4d); + + /* Check that we are back at state Initialised */ + if (SM_Loop(state, 0) != Initialised) return GE_UNKNOWN; + return GE_NONE; +} + + +static GSM_Error P3110_GetSMSMessage(GSM_Data *data, GSM_Statemachine *state) +{ + int total_length, timeout, c; + u8 response = 0, request[2]; + GSM_Error error = GE_INTERNALERROR; + + dprintf("Getting SMS message...\n"); + + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + + switch(data->SMSMessage->MemoryType) { + case GMT_ME: + data->SMSMessage->MemoryType = 1; /* 3 in 8110, 1 is GMT_CB */ + break; + case GMT_SM: + data->SMSMessage->MemoryType = 2; + break; + default: + return (GE_INVALIDMEMORYTYPE); + } + + /* Set memory type and location in the request */ + request[0] = data->SMSMessage->MemoryType; + request[1] = data->SMSMessage->Number; + + /* 0x25 messages requests the contents of an SMS message + from the phone. The first byte has only ever been + observed to be 0x02 - could be selecting internal versus + external memory. Specifying memory 0x00 may request the + first location? Phone replies with 0x2c and 0x27 messages + for valid locations, 0x2d for empty ones. */ + if (SM_SendMessage(state, 2, 0x25, request) != GE_NONE) return GE_NOTREADY; + + SM_WaitFor(state, data, 0x2d); + SM_WaitFor(state, data, 0x2c); + + timeout = 30; /* ~3secs timeout */ + + do { + SM_Loop(state, 1); + timeout--; + } while ((timeout > 0) && state->NumReceived == 0); + + /* timeout */ + if (state->NumReceived == 0) return GE_TIMEOUT; + + /* find response in state machine */ + for (c = 0; c < state->NumWaitingFor; c++) { + if (state->ResponseError[c] != GE_BUSY) { + response = state->WaitingFor[c]; + error = state->ResponseError[c]; + } + } + + /* reset state machine */ + SM_Reset(state); + + /* process response */ + switch (response) { + case 0x2c: + if (error != GE_NONE) return error; + + /* Save total length of message */ + total_length = data->SMSMessage->Length; + + /* Block for subsequent content frames... */ + do { + SM_Block(state, data, 0x27); + } while (data->SMSMessage->Length < total_length); + + /* Terminate message text */ + data->SMSMessage->MessageText[data->SMSMessage->Length] = 0; + return GE_NONE; + case 0x2d: + return error; + default: + return GE_INTERNALERROR; + } +} + + +static GSM_Error P3110_DeleteSMSMessage(GSM_Data *data, GSM_Statemachine *state) +{ + int timeout, c; + u8 response = 0, request[2]; + GSM_Error error = GE_INTERNALERROR; + + dprintf("Deleting SMS message...\n"); + + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + + switch(data->SMSMessage->MemoryType) { + case GMT_ME: + data->SMSMessage->MemoryType = 1; /* 3 in 8110, 1 is GMT_CB */ + break; + case GMT_SM: + data->SMSMessage->MemoryType = 2; + break; + default: + return (GE_INVALIDMEMORYTYPE); + } + + /* Set memory type and location in the request */ + request[0] = data->SMSMessage->MemoryType; + request[1] = data->SMSMessage->Number; + + /* 0x26 message deletes an SMS message from the phone. + The first byte has only ever been observed to be 0x02 + but is assumed to be selecting internal versus + external memory. Phone replies with 0x2e for valid locations, + 0x2f for invalid ones. If a location is empty but otherwise + valid 0x2e is still returned. */ + if (SM_SendMessage(state, 2, 0x26, request) != GE_NONE) return GE_NOTREADY; + + SM_WaitFor(state, data, 0x2e); + SM_WaitFor(state, data, 0x2f); + + timeout = 30; /* ~3secs timeout */ + + do { + SM_Loop(state, 1); + timeout--; + } while ((timeout > 0) && state->NumReceived == 0); + + /* timeout */ + if (state->NumReceived == 0) return GE_TIMEOUT; + + /* find response in state machine */ + for (c = 0; c < state->NumWaitingFor; c++) { + if (state->ResponseError[c] != GE_BUSY) { + response = state->WaitingFor[c]; + error = state->ResponseError[c]; + } + } + + /* reset state machine */ + SM_Reset(state); + + /* process response */ + switch (response) { + case 0x2e: + case 0x2f: + return error; + default: + return GE_INTERNALERROR; + } +} + + +static GSM_Error P3110_SendSMSMessage(GSM_Data *data, GSM_Statemachine *state) +{ + int timeout, c, retry_count, block_count, block_length; + u8 userdata[GSM_MAX_SMS_LENGTH]; + int userdata_length, userdata_offset, userdata_remaining; + u8 response, request[GSM_MAX_SMS_LENGTH]; + GSM_Error error; + SMS_MessageCenter smsc; + int i; + + /* Get default SMSC from phone if not set in SMS */ + if (!data->SMSMessage->MessageCenter.Number[0]) { + data->MessageCenter = &smsc; + error = P3110_GetSMSInfo(data, state); + if (error != GE_NONE) return error; + data->SMSMessage->MessageCenter = smsc; + } + + dprintf("Sending SMS to %s via message center %s\n", data->SMSMessage->RemoteNumber.number, data->SMSMessage->MessageCenter.Number); + +/* + Moved to gsm-sms.c + if (data->SMSMessage->UDH[0].Type) { + userdata_offset = 1 + data->SMSMessage->udhlen; + memcpy(userdata, data->SMSMessage->MessageText, userdata_offset); + fo |= FO_UDHI; + } else { + userdata_offset = 0; + } +*/ + +/* + Moved to gsm-sms.c + if (data->SMSMessage->EightBit) { + memcpy(userdata + userdata_offset, data->SMSMessage->MessageText, data->SMSMessage->Length); + userdata_length = data->SMSMessage->Length + userdata_offset; + max_userdata_length = GSM_MAX_SMS_8_BIT_LENGTH; + dcs = DCS_DATA | DCS_CLASS1; + } else { + userdata_length = strlen(data->SMSMessage->MessageText); + memcpy(userdata + userdata_offset, data->SMSMessage->MessageText, userdata_length); + userdata_length += userdata_offset; + max_userdata_length = GSM_MAX_SMS_LENGTH; + } +*/ + +/* + Moved to gsm-sms.c + request[0] = fo; + request[1] = PID_DEFAULT; + request[2] = dcs; + request[3] = GSMV_Max_Time; + request[4] = 0x00; + request[5] = 0x00; + request[6] = 0x00; + request[7] = 0x00; + request[8] = 0x00; + request[9] = 0x00; + request[10] = userdata_length; + request[11] = smsc_length; + memcpy(request+12, data->SMSMessage->MessageCenter.Number, smsc_length); + request[12+smsc_length] = dest_length; + memcpy(request+13+smsc_length, data->SMSMessage->Destination, dest_length); +*/ + + error = EncodePDUSMS(data->SMSMessage, request); + if (error) return error; + + /* We have a loop here as if the response from the phone is + 0x65 0x26 the rule appears to be just to try sending the + message again. We do this a maximum of FB38_SMS_SEND_RETRY_COUNT + times before giving up. This value is empirical only! */ + retry_count = P3110_SMS_SEND_RETRY_COUNT; + + while (retry_count > 0) { + + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + + dprintf("Transferring FBUS SMS header ["); + for (i = 0; i < data->SMSMessage->Length; i++) dprintf(" %02hhX", request[i]); + dprintf(" ]\n"); + + if (SM_SendMessage(state, data->SMSMessage->Length, 0x23, request) != GE_NONE) return GE_NOTREADY; + + error = SM_Block(state, data, 0x23); + if (error != GE_NONE) return error; + + /* Now send as many blocks of maximum 55 characters as required + to send complete message. */ + block_count = 1; + userdata_offset = 0; + userdata_remaining = userdata_length; + + while (userdata_remaining > 0) { + block_length = userdata_remaining; + + /* Limit block length */ + if (block_length > 55) block_length = 55; + + /* Create block */ + request[0] = block_count; + memcpy(request+1, userdata + userdata_offset, block_length); + + /* Send block */ + if (SM_SendMessage(state, block_length+1, 0x27, request) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, 0x27); + if (error != GE_NONE) return error; + + /* update remaining and offset values for next block */ + userdata_remaining -= block_length; + userdata_offset += block_length; + block_count ++; + } + + /* Now wait for response from network which will see + CurrentSMSMessageError change from busy. */ + SM_WaitFor(state, data, 0x28); + SM_WaitFor(state, data, 0x29); + + timeout = 1200; /* 120secs timeout */ + + do { + SM_Loop(state, 1); + timeout--; + } while ((timeout > 0) && state->NumReceived == 0); + + /* timeout */ + if (state->NumReceived == 0) return GE_TIMEOUT; + + /* find response in state machine */ + for (c = 0; c < state->NumWaitingFor; c++) { + if (state->ResponseError[c] != GE_BUSY) { + response = state->WaitingFor[c]; + error = state->ResponseError[c]; + } + } + + /* reset state machine */ + SM_Reset(state); + + /* process response */ + switch (response) { + case 0x28: + return error; + case 0x29: + /* Got a retry response so try again! */ + dprintf("SMS send attempt failed, trying again...\n"); + retry_count--; + /* After an empirically determined pause... */ + usleep(500000); /* 0.5 seconds. */ + break; + default: + return GE_INTERNALERROR; + } + } + /* Retries must have failed. */ + return GE_SMSSENDFAILED; +} + + +static GSM_Error P3110_IncomingNothing(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + return GE_NONE; +} + +/* 0x0b messages are sent by phone when an incoming call occurs, + this message must be acknowledged. */ +static GSM_Error P3110_IncomingCall(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + int count; + char buffer[256]; + + /* Get info out of message. At present, first three bytes are + unknown (though third seems to correspond to length of + number). Remaining bytes are the phone number, ASCII + encoded. */ + for (count = 0; count < message[4]; count ++) { + buffer[count] = message[5 + count]; + } + buffer[count] = 0x00; + + /* Now display incoming call message. */ + dprintf("Incoming call - Type: %s. %02x, Number %s.\n", + (message[2] == 0x05 ? "Voice":"Data?"), message[3], buffer); + + return GE_NONE; +} + +static GSM_Error P3110_IncomingCallAnswered(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("Incoming call answered from phone.\n"); + + return GE_NONE; +} + +/* Fairly self explanatory these two, though the outgoing + call message has three (unexplained) data bytes. */ +static GSM_Error P3110_IncomingCallEstablished(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("%s call established - status bytes %02x %02x.\n", + (message[2] == 0x05 ? "voice":"data(?)"), message[3], message[4]); + + return GE_NONE; +} + +/* 0x10 messages are sent by the phone when an outgoing + call terminates. */ +static GSM_Error P3110_IncomingEndOfOutgoingCall(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("Call terminated from phone (0x10 message).\n"); + /* FIXME: Tell datapump code that the call has terminated. */ + /*if (CallPassup) { + CallPassup(' '); + }*/ + + return GE_NONE; +} + +/* 0x11 messages are sent by the phone when an incoming call + terminates. There is some other data in the message, + purpose as yet undertermined. */ +static GSM_Error P3110_IncomingEndOfIncomingCall(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("Call terminated from opposite end of line (or from network).\n"); + + /* FIXME: Tell datapump code that the call has terminated. */ + /*if (CallPassup) { + CallPassup(' '); + }*/ + + return GE_NONE; +} + +/* 0x12 messages are sent after the 0x10 message at the + end of an outgoing call. Significance of two messages + versus the one at the end of an incoming call is as + yet undertermined. */ +static GSM_Error P3110_IncomingEndOfOutgoingCall2(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("Call terminated from phone (0x12 message).\n"); + + /* FIXME: Tell datapump code that the call has terminated. */ + /*if (CallPassup) { + CallPassup(' '); + }*/ + + return GE_NONE; +} + + +/* 0x13 messages are sent after the phone restarts. + Re-initialise */ + +static GSM_Error P3110_IncomingRestart(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + /* FIXME: send 0x15 message somehow */ + return GE_NONE; +} + + +/* 0x15 messages are sent by the phone in response to the + init sequence sent so we don't acknowledge them! */ + +static GSM_Error P3110_IncomingInitFrame_0x15(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + return GE_NONE; +} + + +/* 0x16 messages are sent by the phone during initialisation, to response + to the 0x15 message. + Sequence bytes have been observed to change with differing software + versions: V06.61 (19/08/97) sends 0x10 0x02, V07.02 (17/03/98) sends + 0x30 0x02. The actual data byte is 0x02 when SIM memory is available, + and 0x01 when not (e.g. when SIM card isn't inserted to phone or when + it is waiting for PIN) */ + +static GSM_Error P3110_IncomingInitFrame_0x16(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + SimAvailable = (message[2] == 0x02); + dprintf("SIM available: %s.\n", (SimAvailable ? "Yes" : "No")); + return GE_NONE; +} + + +static GSM_Error P3110_IncomingInitFrame_0x17(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("0x17 Registration Response: Failure!\n"); + return GE_NONE; +} + + +/* 0x27 messages are a little unusual when sent by the phone in that + they can either be an acknowledgement of an 0x27 message we sent + to the phone with message text in it or they could + contain message text for a message we requested. */ + +static GSM_Error P3110_IncomingSMSUserData(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + int count; + + /* First see if it was an acknowledgement to one of our messages, + if so then nothing to do */ + if (length == 0x02) return GE_NONE; + + /* Copy into current SMS message as long as it's non-NULL */ + if (!data->SMSMessage) return GE_INTERNALERROR; + + /* If this is the first block, reset accumulated message length. */ + if (message[2] == 1) data->SMSMessage->Length = 0; + + /* Copy message text */ + for (count = 0; count < length-3 && data->SMSMessage->Length < GSM_MAX_SMS_LENGTH; count++, data->SMSMessage->Length++) + data->SMSMessage->MessageText[data->SMSMessage->Length] = message[count + 3]; + + return GE_NONE; +} + + +/* 0x28 messages are sent by the phone to acknowledge succesfull + sending of an SMS message. The byte returned is a receipt + number of some form, not sure if it's from the network, sending + sending of an SMS message. The byte returned is the TP-MR + (TP-Message-Reference) from sending phone (Also sent to network). + TP-MR is send from phone within 0x32 message. TP-MR is increased + by phone after each sent SMS */ + +static GSM_Error P3110_IncomingSMSSend(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("SMS send OK (0x%02hhx)\n", message[2]); + data->SMSMessage->Number = (int) message[2]; + return GE_SMSSENDOK; +} + + +/* 0x29 messages are sent by the phone to indicate an error in + sending an SMS message. Observed values are 0x65 0x15 when + the phone originated SMS was disabled by the network for + the particular phone. 0x65 0x26 was observed too, whereupon + the message was retried. */ + +static GSM_Error P3110_IncomingSMSSendError(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("SMS send failed (0x%02hhx 0x%02hhx)\n", message[2], message[3]); + return GE_SMSSENDFAILED; +} + + +/* 0x2c messages are generated by the phone when we request an SMS + message with an 0x25 message. Appears to have the same fields + as the 0x30 notification but with one extra. Immediately after + the 0x2c nessage, the phone sends 0x27 message(s) */ + +static GSM_Error P3110_IncomingSMSHeader(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + /* u8 sender_length, smsc_length, l; */ + + if (!data->SMSMessage) return GE_INTERNALERROR; + + /* Extract data from message into SMSMessage */ + + DecodePDUSMS(message, data->SMSMessage, length); + + /* All these moved to gsm-sms.c + Set memory type + switch(message[2]) { + case 1: + data->SMSMessage->MemoryType = GMT_ME; + break; + case 2: + data->SMSMessage->MemoryType = GMT_SM; + break; + default: + data->SMSMessage->MemoryType = GMT_XX; + break; + } + + Set location in memory + data->SMSMessage->Location = message[3]; + data->SMSMessage->MessageNumber = message[3]; + + 3810 series has limited support for different SMS "mailboxes" + to the extent that the only know differentiation is between + received messages 0x01, 0x04 and written messages 0x07 0x01. + No flag has been found (yet) that indicates whether the + message has been sent or not. + + Default to unknown message type + data->SMSMessage->Type = GST_UN; + + Consider received messages "Inbox" (Mobile Terminated) + if (message[4] == 0x01 && message[5] == 0x04) + data->SMSMessage->Type = GST_MT; + + Consider written messages "Outbox" (Mobile Originated) + if (message[4] == 0x07 && message[5] == 0x01) + data->SMSMessage->Type = GST_MO; + + We don't know about read/unread or sent/unsent status. + so assume has been sent or read + data->SMSMessage->Status = GSS_SENTREAD; + + Based on experiences with a 3110 it seems, that + 0x03 means a received unread message, + 0x07 means a stored unsent message + if (message[4] == 0x03 || message[4] == 0x07) + data->SMSMessage->Status = GSS_NOTSENTREAD; + else + data->SMSMessage->Status = GSS_SENTREAD; + + Check UDHI + if (message[5] & FO_UDHI) + data->SMSMessage->UDHType = GSM_RingtoneUDH; FIXME + else + data->SMSMessage->UDHType = GSM_NoUDH; + + Check Data Coding Scheme and set text/binary flag + if (message[7] == 0xf5) + data->SMSMessage->EightBit = true; + else + data->SMSMessage->EightBit = false; + + Extract date and time information which is packed in to + nibbles of each byte in reverse order. Thus day 28 would be + encoded as 0x82 + P3110_DecodeTime(message+8, &(data->SMSMessage->Time)); + + Set message length + data->SMSMessage->Length = message[15]; + + Now get sender and message center length + smsc_length = message[16]; + sender_length = message[17 + smsc_length]; + + Copy SMSC number + l = smsc_length < GSM_MAX_SMS_CENTER_LENGTH ? smsc_length : GSM_MAX_SMS_CENTER_LENGTH; + strncpy(data->SMSMessage->MessageCenter.Number, message + 17, l); + data->SMSMessage->MessageCenter.Number[l] = 0; + + Copy sender number + l = sender_length < GSM_MAX_SENDER_LENGTH ? sender_length : GSM_MAX_SENDER_LENGTH; + strncpy(data->SMSMessage->Sender, message + 18 + smsc_length, l); + data->SMSMessage->Sender[l] = 0; +*/ + + dprintf("PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n", + message[6], message[7], message[14], message[4], message[5]); + + dprintf("Message Read:\n"); + dprintf(" Location: %d. Type: %d Status: %d\n", data->SMSMessage->Number, data->SMSMessage->Type, data->SMSMessage->Status); + dprintf(" Sender: %s\n", data->SMSMessage->RemoteNumber.number); + dprintf(" Message Center: %s\n", data->SMSMessage->MessageCenter.Number); + dprintf(" Time: %02d.%02d.%02d %02d:%02d:%02d\n", + data->SMSMessage->Time.Day, data->SMSMessage->Time.Month, data->SMSMessage->Time.Year, data->SMSMessage->Time.Hour, data->SMSMessage->Time.Minute, data->SMSMessage->Time.Second); + + return GE_NONE; +} + + +/* 0x2d messages are generated when an SMS message is requested + that does not exist or is empty. */ + +static GSM_Error P3110_IncomingSMSError(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + if (message[2] == 0x74) + return GE_INVALIDSMSLOCATION; + else + return GE_EMPTYSMSLOCATION; +} + + +/* 0x2e messages are generated when an SMS message is deleted + successfully. */ + +static GSM_Error P3110_IncomingSMSDelete(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + return GE_NONE; +} + + +/* 0x2f messages are generated when an SMS message is deleted + that does not exist. Unlike responses to a getsms message + no error is returned when the entry is already empty */ + +static GSM_Error P3110_IncomingSMSDeleteError(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + /* Note 0x74 is the only value that has been seen! */ + if (message[2] == 0x74) + return GE_INVALIDSMSLOCATION; + else + return GE_EMPTYSMSLOCATION; +} + + +/* 0x32 messages are generated when delivery notification arrives + to phone from network */ + +static GSM_Error P3110_IncomingSMSDelivered(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + static GSM_SMSMessage sms; +/* u8 dest_length, smsc_length, l;*/ + u8 U0, U1, U2; + + data->SMSMessage = &sms; + + if (!data->SMSMessage) return GE_INTERNALERROR; + + U0 = message[1]; + U1 = message[2]; + U2 = message[17]; + + DecodePDUSMS(message, data->SMSMessage, length); + + /* All these are moved fo gsm-sms.c + P3110_DecodeTime(message+3, &(data->SMSMessage->Time)); + P3110_DecodeTime(message+10, &(data->SMSMessage->SMSCTime)); + + + Get message id + data->SMSMessage->MessageNumber = (int) message[18]; + + Get sender and message center length + dest_length = message[19]; + smsc_length = message[20 + dest_length]; + + Copy destination number + l = dest_length < GSM_MAX_DESTINATION_LENGTH ? dest_length : GSM_MAX_DESTINATION_LENGTH; + strncpy(data->SMSMessage->Destination, message + 20, l); + data->SMSMessage->Destination[l] = 0; + + Copy SMSC number + l = smsc_length < GSM_MAX_SMS_CENTER_LENGTH ? smsc_length : GSM_MAX_SMS_CENTER_LENGTH; + strncpy(data->SMSMessage->MessageCenter.Number, message + 21 + dest_length, l); + data->SMSMessage->MessageCenter.Number[l] = 0; + */ + + dprintf("Message [0x%02x] Delivered!\n", data->SMSMessage->Number); + dprintf(" Destination: %s\n", data->SMSMessage->RemoteNumber.number); + dprintf(" Message Center: %s\n", data->SMSMessage->MessageCenter.Number); + dprintf(" Unknowns: 0x%02x 0x%02x 0x%02x\n", U0, U1, U2); + dprintf(" Discharge Time: %02d.%02d.%02d %02d:%02d:%02d\n", + data->SMSMessage->Time.Day, data->SMSMessage->Time.Month, data->SMSMessage->Time.Year, data->SMSMessage->Time.Hour, data->SMSMessage->Time.Minute, data->SMSMessage->Time.Second); + dprintf(" SMSC Time Stamp: %02d.%02d.%02d %02d:%02d:%02d\n", + data->SMSMessage->SMSCTime.Day, data->SMSMessage->SMSCTime.Month, data->SMSMessage->SMSCTime.Year, data->SMSMessage->SMSCTime.Hour, data->SMSMessage->SMSCTime.Minute, data->SMSMessage->SMSCTime.Second); + + return GE_NONE; +} + + +/* 0x40 Messages are sent to response to an 0x3f request. + e.g. when phone is waiting for PIN */ + +static GSM_Error P3110_IncomingNoSMSInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + dprintf("SMS Message Center Data not reachable.\n"); + return GE_NOTREADY; +} + + +/* Handle 0x41 message which is sent by phone in response to an + 0x3f request. Contains data about the Message Center in use */ + +static GSM_Error P3110_IncomingSMSInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + u8 center_number_length; + u8 option_number_length; + int count; + + if (!data) return GE_INTERNALERROR; + + /* We don't know what this option number is, just handle it */ + option_number_length = message[12]; + + /* Get message center length */ + center_number_length = message[13 + option_number_length]; + + dprintf("SMS Message Center Data:\n"); + dprintf(" Selected memory: 0x%02x\n", message[2]); + dprintf(" Messages in Phone: 0x%02x Unread: 0x%02x\n", message[3], message[4]); + dprintf(" Messages in SIM: 0x%02x Unread: 0x%02x\n", message[5], message[6]); + dprintf(" Reply via own centre: 0x%02x (%s)\n", message[10], (message[10] == 0x02 ? "Yes" : "No")); + dprintf(" Delivery reports: 0x%02x (%s)\n", message[11], (message[11] == 0x02 ? "Yes" : "No")); + dprintf(" Messages sent as: 0x%02x\n", message[7]); + dprintf(" Message validity: 0x%02x\n", message[9]); + dprintf(" Unknown: 0x%02x\n", message[8]); + + dprintf(" UnknownNumber: "); + for (count = 0; count < option_number_length; count ++) + dprintf("%c", message[13 + count]); + dprintf("\n"); + + dprintf(" Message center number: "); + for (count = 0; count < center_number_length; count ++) { + dprintf("%c", message[14 + option_number_length + count]); + } + dprintf("\n"); + + /* Get message center related info if upper layer wants to know */ + if (data->MessageCenter) { + data->MessageCenter->Format = message[7]; + data->MessageCenter->Validity = message[9]; + + if (center_number_length == 0) { + data->MessageCenter->Number[0] = 0x00; /* Null terminate */ + } else { + memcpy(data->MessageCenter->Number, + message + 14 + option_number_length, + center_number_length); + data->MessageCenter->Number[center_number_length] = '\0'; + } + + /* 3810 series doesn't support Name or multiple center numbers + so put in null data for them . */ + data->MessageCenter->Name[0] = 0x00; + data->MessageCenter->No = 0; + } + + /* Get SMS related info if upper layer wants to know */ + if (data->SMSStatus) { + data->SMSStatus->Unread = message[4] + message[6]; + data->SMSStatus->Number = message[3] + message[5]; + } + + /* Get memory info if upper layer wants to know */ + if (data->MemoryStatus) { + switch (data->MemoryStatus->MemoryType) { + case GMT_SM: + data->MemoryStatus->Used = message[5]; + data->MemoryStatus->Free = P3110_MEMORY_SIZE_SM - message[5]; + break; + case GMT_ME: + data->MemoryStatus->Used = message[3]; + data->MemoryStatus->Free = P3110_MEMORY_SIZE_ME - message[3]; + break; + default: + break; + } + } + + return GE_NONE; +} + + +/* 0x48 is sent during power-on of the phone, after the 0x13 + message is received and the PIN (if any) has been entered + correctly. */ + +static GSM_Error P3110_IncomingPINEntered(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + SimAvailable = true; + dprintf("PIN [possibly] entered.\n"); + return GE_NONE; +} + + +/* 0x4b messages are sent by phone in response (it seems) to the keep + alive packet. We must acknowledge these it seems by sending a + response with the "sequence number" byte loaded appropriately. */ + +static GSM_Error P3110_IncomingStatusInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + /* Strings for the status byte received from phone. */ + char *StatusStr[] = { + "Unknown", + "Ready", + "Interworking", + "Call in progress", + "No network access" + }; + + /* There are three data bytes in the status message, two have been + attributed to signal level, the third is presently unknown. + Unknown byte has been observed to be 0x01 when connected to normal + network, 0x04 when no network available. Steps through 0x02, 0x03 + when incoming or outgoing calls occur...*/ + /*FB38_LinkOK = true;*/ + + /* Note: GetRFLevel function in fbus-3810.c does conversion + into required units. */ + if (data->RFLevel) { + *(data->RFUnits) = GRF_Arbitrary; + *(data->RFLevel) = message[3]; + } + + /* Note: GetBatteryLevel function in fbus-3810.c does conversion + into required units. */ + if (data->BatteryLevel) { + *(data->BatteryUnits) = GBU_Arbitrary; + *(data->BatteryLevel) = message[4]; + } + + /* Only output connection status byte now as the RF and Battery + levels are displayed by the main gnokii code. */ + dprintf("Status: %s, Battery level: %d, RF level: %d.\n", + StatusStr[message[2]], message[4], message[3]); + return GE_NONE; +} + +/* 0x4d Message provides IMEI, Revision and Model information. */ + +static GSM_Error P3110_IncomingPhoneInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + size_t imei_length, rev_length, model_length; + + imei_length = strlen(message + 2); + rev_length = strlen(message + 3 + imei_length); + model_length = strlen(message + 4 + imei_length + rev_length); + + if (data->Imei) + strcpy(data->Imei, message + 2); + + if (data->Revision) + strcpy(data->Revision, message + 3 + imei_length); + + if (data->Model) + strcpy(data->Model, message + 4 + imei_length + rev_length); + + dprintf("Mobile Phone Identification:\n"); + dprintf(" IMEI: %s\n", message + 2); + dprintf(" Model: %s\n", message + 4 + imei_length + rev_length); + dprintf(" Revision: %s\n", message + 3 + imei_length); + + return GE_NONE; +} + + +/* + */ + +void P3110_KeepAliveLoop(GSM_Statemachine *state) +{ + GSM_Data data; + GSM_DataClear(&data); + + while (!RequestTerminate) { + + if (KeepAliveTimer == 0) { + KeepAliveTimer = P3110_KEEPALIVE_TIMEOUT; + /* Dont send keepalive packets when statemachine + is doing other transactions. */ + if (state->CurrentState == Initialised) { + dprintf("Sending keepalive message.\n"); + P3110_GetStatusInfo(&data, state); + } + } else { + KeepAliveTimer--; + } + usleep(100000); /* Avoid becoming a "busy" loop. */ + } +} + +void P3110_DecodeTime(unsigned char *b, GSM_DateTime *dt) +{ + dt->Year = P3110_bcd2int(b[0]); + dt->Month = P3110_bcd2int(b[1]); + dt->Day = P3110_bcd2int(b[2]); + dt->Hour = P3110_bcd2int(b[3]); + dt->Minute = P3110_bcd2int(b[4]); + dt->Second = P3110_bcd2int(b[5]); + dt->Timezone = P3110_bcd2int(b[6]); + return; +} + +int P3110_bcd2int(u8 x) +{ + return (int)(10 * ((x & 0x0f)) + (x >> 4)); +} diff --git a/common/phones/nk6100.c b/common/phones/nk6100.c new file mode 100644 index 0000000..c4dda5a --- /dev/null +++ b/common/phones/nk6100.c @@ -0,0 +1,511 @@ +/* + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 6100 series. + See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:12 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.8 2001/11/17 20:19:29 pkot + smslib cleanups, fixes and debugging + + Revision 1.7 2001/11/17 16:44:07 pkot + Cleanup. Reading SMS for 6100 series. Not that it has some bugs more and does not support UDH yet + + Revision 1.6 2001/11/15 12:15:04 pkot + smslib updates. begin work on sms in 6100 series + + Revision 1.5 2001/11/15 12:12:34 pkot + 7110 and 6110 series phones introduce as Nokia + + Revision 1.4 2001/11/15 12:04:06 pkot + Faster initialization for 6100 series (don't check for dlr3 cable) + + Revision 1.3 2001/08/17 00:01:53 pkot + Fixed a typo in 6100.c (me) + + Revision 1.2 2001/08/09 12:34:34 pkot + 3330 and 6250 support - I have no idea if it does work (mygnokii) + + Revision 1.1 2001/07/09 23:55:35 pkot + Initial support for 6100 series in the new structure (me) + +*/ + +#include +#include +#include + +#define __phones_nk6100_c +#include "misc.h" +#include "gsm-common.h" +#include "phones/generic.h" +#include "phones/nk6100.h" +#include "links/fbus.h" +#include "links/fbus-phonet.h" +#include "phones/nokia.h" + +#ifdef WIN32 +#define snprintf _snprintf +#endif + +/* Some globals */ + +static unsigned char MagicBytes[4] = { 0x00, 0x00, 0x00, 0x00 }; + +static GSM_IncomingFunctionType IncomingFunctions[] = { + { 0x64, IncomingPhoneInfo }, + { 0xd2, IncomingModelInfo }, + { 0x14, IncomingSMS }, + { 0x03, Incoming0x03 }, + { 0x0a, Incoming0x0a }, + { 0x17, Incoming0x17 }, + { 0, NULL} +}; + +GSM_Phone phone_nokia_6100 = { + IncomingFunctions, + PGEN_IncomingDefault, + /* Mobile phone information */ + { + "6110|6130|6150|6190|5110|5130|5190|3210|3310|3330", /* Supported models */ + 4, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Arbitrary, /* RF level units */ + 4, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Arbitrary, /* Battery level units */ + GDT_DateTime, /* Have date/time support */ + GDT_TimeOnly, /* Alarm supports time only */ + 1, /* Alarms available - FIXME */ + 48, 84, /* Startup logo size - 7110 is fixed at init*/ + 14, 72, /* Op logo size */ + 14, 72 /* Caller logo size */ + }, + Functions +}; + +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state) +{ + switch (op) { + case GOP_Init: + return Initialise(state); + case GOP_GetModel: + return GetModelName(data, state); + case GOP_GetRevision: + return GetRevision(data, state); + case GOP_GetImei: + return GetIMEI(data, state); + case GOP_Identify: + return Identify(data, state); + case GOP_GetBatteryLevel: + return GetBatteryLevel(data, state); + case GOP_GetRFLevel: + return GetRFLevel(data, state); + case GOP_GetMemoryStatus: + return GetMemoryStatus(data, state); + case GOP_GetSMS: + return GetSMSMessage(data, state); + default: + return GE_NOTIMPLEMENTED; + } +} + +/* static bool LinkOK = true; */ + +/* Initialise is the only function allowed to 'use' state */ +static GSM_Error Initialise(GSM_Statemachine *state) +{ + GSM_Data data; + char model[10]; + GSM_Error err; + + /* Copy in the phone info */ + memcpy(&(state->Phone), &phone_nokia_6100, sizeof(GSM_Phone)); + + switch (state->Link.ConnectionType) { + case GCT_Serial: + err = FBUS_Initialise(&(state->Link), state, 0); + break; + case GCT_Infrared: + err = PHONET_Initialise(&(state->Link), state); + break; + default: + return GE_NOTSUPPORTED; + } + + if (err != GE_NONE) { + dprintf("Error in link initialisation\n"); + return GE_NOTSUPPORTED; + } + + SM_Initialise(state); + + /* Now test the link and get the model */ + GSM_DataClear(&data); + data.Model = model; + if (state->Phone.Functions(GOP_GetModel, &data, state) != GE_NONE) return GE_NOTSUPPORTED; + return GE_NONE; +} + +static GSM_Error GetPhoneInfo(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = { FBUS_FRAME_HEADER, 0x03, 0x00 }; + + dprintf("Getting phone info...\n"); + if (SM_SendMessage(state, 5, 0xd1, req) != GE_NONE) return GE_NOTREADY; + return (SM_Block(state, data, 0xd2)); +} + +static GSM_Error GetModelName(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Getting model...\n"); + return GetPhoneInfo(data, state); +} + +static GSM_Error GetRevision(GSM_Data *data, GSM_Statemachine *state) +{ + dprintf("Getting revision...\n"); + return GetPhoneInfo(data, state); +} + +static GSM_Error GetIMEI(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x01}; + + dprintf("Getting imei...\n"); + if (SM_SendMessage(state, 4, 0x1b, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x1b); +} + + +static GSM_Error GetBatteryLevel(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x02}; + + dprintf("Getting battery level...\n"); + if (SM_SendMessage(state, 4, 0x17, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x17); +} + + +static GSM_Error Incoming0x17(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 0x03: + if (data->BatteryLevel) { + *(data->BatteryUnits) = GBU_Percentage; + *(data->BatteryLevel) = message[5]; + dprintf("Battery level %f\n",*(data->BatteryLevel)); + } + return GE_NONE; + break; + default: + dprintf("Unknown subtype of type 0x17 (%d)\n", message[3]); + return GE_UNKNOWN; + break; + } +} + +static GSM_Error GetRFLevel(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x81}; + + dprintf("Getting rf level...\n"); + if (SM_SendMessage(state, 4, 0x0a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x0a); +} + +static GSM_Error Incoming0x0a(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 0x82: + if (data->RFLevel) { + *(data->RFUnits) = GRF_Percentage; + *(data->RFLevel) = message[4]; + dprintf("RF level %f\n",*(data->RFLevel)); + } + return GE_NONE; + break; + default: + dprintf("Unknown subtype of type 0x0a (%d)\n", message[3]); + return GE_UNKNOWN; + break; + } +} + +static GSM_Error GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x03, 0x00, 0x00}; + + dprintf("Getting memory status...\n"); + req[5] = GetMemoryType(data->MemoryStatus->MemoryType); + if (SM_SendMessage(state, 6, 0x03, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x03); +} + +static GSM_Error Incoming0x03(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 0x04: + if (data->MemoryStatus) { + if (message[5] != 0xff) { + data->MemoryStatus->Used = (message[16] << 8) + message[17]; + data->MemoryStatus->Free = ((message[14] << 8) + message[15]) - data->MemoryStatus->Used; + dprintf("Memory status - location = %d\n", (message[8] << 8) + message[9]); + return GE_NONE; + } else { + dprintf("Unknown error getting mem status\n"); + return GE_NOTIMPLEMENTED; + + } + } + return GE_NONE; + break; + default: + dprintf("Unknown subtype of type 0x03 (%d)\n", message[3]); + return GE_UNKNOWN; + break; + } +} + +static GSM_Error Identify(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = { FBUS_FRAME_HEADER, 0x10 }; + + dprintf("Identifying...\n"); + PNOK_GetManufacturer(data->Manufacturer); + if (SM_SendMessage(state, 4, 0x64, req) != GE_NONE) return GE_NOTREADY; + SM_WaitFor(state, data, 0x64); + SM_Block(state, data, 0x64); /* waits for all requests */ + SM_GetError(state, 0x64); + + /* Check that we are back at state Initialised */ + if (SM_Loop(state, 0) != Initialised) return GE_UNKNOWN; + return GE_NONE; +} + +static GSM_Error IncomingPhoneInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + if (data->Imei) { +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(data->Imei, "%s", message + 4); +#else + snprintf(data->Imei, GSM_MAX_IMEI_LENGTH, "%s", message + 4); +#endif + dprintf("Received imei %s\n", data->Imei); + } + if (data->Model) { +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(data->Model, "%s", message + 22); +#else + snprintf(data->Model, GSM_MAX_MODEL_LENGTH, "%s", message + 22); +#endif + dprintf("Received model %s\n", data->Model); + } + if (data->Revision) { +#if defined WIN32 || !defined HAVE_SNPRINTF + sprintf(data->Revision, "%s", message + 7); +#else + snprintf(data->Revision, GSM_MAX_REVISION_LENGTH, "%s", message + 7); +#endif + dprintf("Received revision %s\n", data->Revision); + } + + dprintf("Message: Mobile phone identification received:\n"); + dprintf(" IMEI: %s\n", data->Imei); + dprintf(" Model: %s\n", data->Model); + dprintf(" Production Code: %s\n", message + 31); + dprintf(" HW: %s\n", message + 39); + dprintf(" Firmware: %s\n", message + 44); + + /* These bytes are probably the source of the "Accessory not connected" + messages on the phone when trying to emulate NCDS... I hope.... + UPDATE: of course, now we have the authentication algorithm. */ + dprintf(_(" Magic bytes: %02x %02x %02x %02x\n"), message[50], message[51], message[52], message[53]); + + MagicBytes[0] = message[50]; + MagicBytes[1] = message[51]; + MagicBytes[2] = message[52]; + MagicBytes[3] = message[53]; + + return GE_NONE; +} + +static GSM_Error IncomingModelInfo(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ +#if defined WIN32 || !defined HAVE_SNPRINTF + if (data->Model) sprintf(data->Model, "%s", message + 21); + if (data->Revision) sprintf(data->Revision, "SW%s", message + 5); +#else + dprintf("%p %p %p\n", data, data->Model, data->Revision); + if (data->Model) { + snprintf(data->Model, GSM_MAX_MODEL_LENGTH, "%s", message + 21); + data->Model[GSM_MAX_MODEL_LENGTH - 1] = 0; + } + if (data->Revision) { + snprintf(data->Revision, GSM_MAX_REVISION_LENGTH, "SW%s", message + 5); + data->Revision[GSM_MAX_REVISION_LENGTH - 1] = 0; + } +#endif + dprintf("Phone info:\n%s\n", message + 4); + + return GE_NONE; +} + +static int GetMemoryType(GSM_MemoryType memory_type) +{ + int result; + + switch (memory_type) { + case GMT_MT: + result = P6100_MEMORY_MT; + break; + case GMT_ME: + result = P6100_MEMORY_ME; + break; + case GMT_SM: + result = P6100_MEMORY_SM; + break; + case GMT_FD: + result = P6100_MEMORY_FD; + break; + case GMT_ON: + result = P6100_MEMORY_ON; + break; + case GMT_EN: + result = P6100_MEMORY_EN; + break; + case GMT_DC: + result = P6100_MEMORY_DC; + break; + case GMT_RC: + result = P6100_MEMORY_RC; + break; + case GMT_MC: + result = P6100_MEMORY_MC; + break; + default: + result = P6100_MEMORY_XX; + break; + } + return (result); +} + +static GSM_Error GetSMSMessage(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = { FBUS_FRAME_HEADER, 0x07, 0x02 /* Unknown */, 0x00 /* Location */, 0x01, 0x64}; + + req[5] = data->SMSMessage->Number; + + if (SM_SendMessage(state, 8, 0x02, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x14); +} + +static GSM_Error IncomingSMS(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + int i; + + switch (message[3]) { + /* save sms succeeded */ + case 0x05: + dprintf("Message stored at %d\n", message[5]); + break; + /* save sms failed */ + case 0x06: + dprintf("SMS saving failed:\n"); + switch (message[4]) { + case 0x02: + dprintf("\tAll locations busy.\n"); + return GE_MEMORYFULL; + case 0x03: + dprintf("\tInvalid location!\n"); + return GE_INVALIDSMSLOCATION; + default: + dprintf("\tUnknown reason.\n"); + return GE_UNKNOWN; + } + /* read sms */ + case 0x08: + for (i = 0; i < length; i ++) + if (isprint(message[i])) + dprintf("[%02x%c]", message[i], message[i]); + else + dprintf("[%02x ]", message[i]); + dprintf("\n"); + + memset(data->SMSMessage, 0, sizeof(GSM_SMSMessage)); + + /* These offsets are 6210/7110 series specific */ + /* Short Message status */ + data->SMSMessage->Status = message[4]; + dprintf("\tStatus: "); + switch (data->SMSMessage->Status) { + case SMS_Read: + dprintf("READ\n"); + break; + case SMS_Unread: + dprintf("UNREAD\n"); + break; + case SMS_Sent: + dprintf("SENT\n"); + break; + case SMS_Unsent: + dprintf("UNSENT\n"); + break; + default: + dprintf("UNKNOWN\n"); + break; + } + + DecodePDUSMS(message + 5, data->SMSMessage, length); + + break; + /* read sms failed */ + case 0x09: + dprintf("SMS reading failed:\n"); + switch (message[4]) { + case 0x02: + dprintf("\tInvalid location!\n"); + return GE_INVALIDSMSLOCATION; + case 0x07: + dprintf("\tEmpty SMS location.\n"); + return GE_EMPTYSMSLOCATION; + default: + dprintf("\tUnknown reason.\n"); + return GE_UNKNOWN; + } + /* delete sms succeeded */ + case 0x0b: + dprintf("Message: SMS deleted successfully.\n"); + break; + /* sms status succeded */ + case 0x37: + dprintf("Message: SMS Status Received\n"); + dprintf("\tThe number of messages: %d\n", message[10]); + dprintf("\tUnread messages: %d\n", message[11]); + data->SMSStatus->Unread = message[11]; + data->SMSStatus->Number = message[10]; + break; + /* sms status failed */ + case 0x38: + dprintf("Message: SMS Status error, probably not authorized by PIN\n"); + return GE_INTERNALERROR; + /* unknown */ + default: + dprintf("Unknown message.\n"); + return GE_UNKNOWN; + } + return GE_NONE; +} diff --git a/common/phones/nk7110.c b/common/phones/nk7110.c new file mode 100644 index 0000000..67fc0f1 --- /dev/null +++ b/common/phones/nk7110.c @@ -0,0 +1,1638 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copytight (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 7110 series. + See README for more details on supported mobile phones. + + The various routines are called P7110_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:13 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.27 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.26 2001/11/19 17:09:59 pkot + Bugfixes + + Revision 1.25 2001/11/19 16:24:31 pkot + Grrrr... I should have check if I have fixed this typo + + Revision 1.24 2001/11/19 15:53:16 pkot + Typos + + Revision 1.23 2001/11/19 13:46:42 pkot + reading unread SMS in 6210 from Inbox. Folder updates (Markus Plail) + + Revision 1.22 2001/11/17 20:18:32 pkot + Added dau9p connection type for 6210/7110 + + Revision 1.21 2001/11/17 16:44:07 pkot + Cleanup. Reading SMS for 6100 series. Not that it has some bugs more and does not support UDH yet + + Revision 1.20 2001/11/15 12:15:04 pkot + smslib updates. begin work on sms in 6100 series + + Revision 1.19 2001/11/15 12:12:34 pkot + 7110 and 6110 series phones introduce as Nokia + + Revision 1.18 2001/11/15 12:04:06 pkot + Faster initialization for 6100 series (don't check for dlr3 cable) + + Revision 1.17 2001/11/14 10:48:03 pkot + 6210/7110 debug cleanups + + Revision 1.16 2001/11/13 16:12:21 pkot + Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates + + Revision 1.15 2001/11/08 16:47:48 pkot + Start fiddling with 7110 and SMS + + Revision 1.14 2001/09/09 21:45:49 machek + Cleanups from Ladislav Michl : + + *) do *not* internationalize debug messages + + *) some whitespace fixes, do not use // + + *) break is unneccessary after return + + Revision 1.13 2001/08/16 23:59:32 pkot + Fixed (hopefully) timezone mismash (Sheldon Hearn) + + Revision 1.12 2001/08/09 12:34:34 pkot + 3330 and 6250 support - I have no idea if it does work (mygnokii) + + Revision 1.11 2001/07/05 10:54:53 pkot + Solaris 2.7 fixes - should be harmless for other OSes (Michael Wiedmann) + + Revision 1.10 2001/06/27 23:52:49 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.9 2001/06/10 23:49:49 pkot + Small fixes to hide compilation warnings and allow gnokii.c to compile + + Revision 1.8 2001/05/24 20:47:30 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.7 2001/05/07 16:24:04 pkot + DLR-3P temporary fix. How should I do it better? + + Revision 1.6 2001/03/23 13:40:24 chris + Pavel's patch and a few fixes. + + Revision 1.5 2001/03/22 16:17:06 chris + Tidy-ups and fixed gnokii/Makefile and gnokii/ChangeLog which I somehow corrupted. + + Revision 1.4 2001/03/21 23:36:06 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.3 2001/03/13 01:24:03 pkot + Code cleanup - no warnings during compilation + + Revision 1.2 2001/03/13 01:23:18 pkot + Windows updates (Manfred Jonsson) + + Revision 1.1 2001/02/21 19:57:07 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:53 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.7 2001/02/06 21:15:35 chris + Preliminary irda support for 7110 etc. Not well tested! + + Revision 1.6 2001/02/03 23:56:15 chris + Start of work on irda support (now we just need fbus-irda.c!) + Proper unicode support in 7110 code (from pkot) + + Revision 1.5 2001/02/01 15:17:31 pkot + Fixed --identify and added Manfred's manufacturer patch + + Revision 1.4 2001/01/29 17:14:42 chris + dprintf now in misc.h (and fiddling with 7110 code) + + Revision 1.3 2001/01/23 15:32:41 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.2 2001/01/17 02:54:54 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.1 2001/01/14 22:46:59 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + +*/ + +#include +#include +#include + +#define __phones_nk7110_c /* Turn on prototypes in phones/nk7110.h */ +#include "misc.h" +#include "gsm-common.h" +#include "phones/generic.h" +#include "phones/nk7110.h" +#include "links/fbus.h" +#include "links/fbus-phonet.h" +#include "phones/nokia.h" +#include "gsm-encoding.h" + +#ifdef WIN32 +#define snprintf _snprintf +#endif + +/* Some globals */ + +static GSM_IncomingFunctionType P7110_IncomingFunctions[] = { + { P7110_MSG_FOLDER, P7110_IncomingFolder }, + { P7110_MSG_SMS, P7110_IncomingSMS }, + { P7110_MSG_PHONEBOOK, P7110_IncomingPhonebook }, + { P7110_MSG_NETSTATUS, P7110_IncomingNetwork }, + { P7110_MSG_CALENDAR, P7110_IncomingCalendar }, + { P7110_MSG_BATTERY, P7110_IncomingBattLevel }, + { P7110_MSG_CLOCK, P7110_IncomingClock }, + { P7110_MSG_IDENTITY, P7110_Incoming0x1b }, + { P7110_MSG_STLOGO, P7110_IncomingStartup }, + { 0, NULL } +}; + +GSM_Phone phone_nokia_7110 = { + P7110_IncomingFunctions, + PGEN_IncomingDefault, + /* Mobile phone information */ + { + "7110|6210|6250", /* Supported models */ + 7, /* Max RF Level */ + 0, /* Min RF Level */ + GRF_Percentage, /* RF level units */ + 7, /* Max Battery Level */ + 0, /* Min Battery Level */ + GBU_Percentage, /* Battery level units */ + GDT_DateTime, /* Have date/time support */ + GDT_TimeOnly, /* Alarm supports time only */ + 1, /* Alarms available - FIXME */ + 60, 96, /* Startup logo size - 7110 is fixed at init*/ + 21, 78, /* Op logo size */ + 14, 72 /* Caller logo size */ + }, + P7110_Functions +}; + +/* FIXME - a little macro would help here... */ + +static GSM_Error P7110_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state) +{ + switch (op) { + case GOP_Init: + return P7110_Initialise(state); + case GOP_GetModel: + return P7110_GetModel(data, state); + case GOP_GetRevision: + return P7110_GetRevision(data, state); + case GOP_GetImei: + return P7110_GetIMEI(data, state); + case GOP_Identify: + return P7110_Identify(data, state); + case GOP_GetBatteryLevel: + return P7110_GetBatteryLevel(data, state); + case GOP_GetRFLevel: + return P7110_GetRFLevel(data, state); + case GOP_GetMemoryStatus: + return P7110_GetMemoryStatus(data, state); + case GOP_GetBitmap: + return P7110_GetBitmap(data, state); + case GOP_SetBitmap: + return P7110_SetBitmap(data, state); + case GOP_ReadPhonebook: + return P7110_ReadPhonebook(data, state); + case GOP_WritePhonebook: + return P7110_WritePhonebookLocation(data, state); + case GOP_GetNetworkInfo: + return P7110_GetNetworkInfo(data, state); + case GOP_GetSpeedDial: + return P7110_GetSpeedDial(data, state); + case GOP_GetSMSCenter: + return P7110_GetSMSCenter(data, state); + case GOP_GetDateTime: + return P7110_GetClock(P7110_SUBCLO_GET_DATE, data, state); + case GOP_GetAlarm: + return P7110_GetClock(P7110_SUBCLO_GET_ALARM, data, state); + case GOP_GetCalendarNote: + return P7110_GetCalendarNote(data, state); + case GOP_GetSMS: + return P7110_GetSMS(data, state); + case GOP_SendSMS: + return P7110_SendSMS(data, state); +/* I'm not sure yet if folder functions will be shared or local + case GOP_GetSMSFolders: + return P7110_GetSMSFolders(data, state); + case GOP_GetSMSFolderStatus: + return P7110_GetSMSFolderStatus(data, state);*/ + default: + return GE_NOTIMPLEMENTED; + } +} + +/* LinkOK is always true for now... */ +bool P7110_LinkOK = true; + +/* Initialise is the only function allowed to 'use' state */ +static GSM_Error P7110_Initialise(GSM_Statemachine *state) +{ + GSM_Data data; + char model[10]; + GSM_Error err; + int try = 0, connected = 0; + + /* Copy in the phone info */ + memcpy(&(state->Phone), &phone_nokia_7110, sizeof(GSM_Phone)); + + dprintf("Connecting\n"); + while (!connected) { + switch (state->Link.ConnectionType) { + case GCT_DAU9P: + if (try == 0) try = 1; + case GCT_Serial: + if (try > 1) return GE_NOTSUPPORTED; + err = FBUS_Initialise(&(state->Link), state, 1 - try); + break; + case GCT_Infrared: + case GCT_Irda: + if (try > 0) return GE_NOTSUPPORTED; + err = PHONET_Initialise(&(state->Link), state); + break; + default: + return GE_NOTSUPPORTED; + break; + } + + if (err != GE_NONE) { + dprintf("Error in link initialisation: %d\n", err); + try++; + continue; + } + + SM_Initialise(state); + + /* Now test the link and get the model */ + GSM_DataClear(&data); + data.Model = model; + if (state->Phone.Functions(GOP_GetModel, &data, state) != GE_NONE) try++; + else connected = 1; + } + /* Check for 7110 and alter the startup logo size */ + if (strcmp(model, "NSE-5") == 0) { + state->Phone.Info.StartupLogoH = 65; + dprintf("7110 detected - startup logo height set to 65\n"); + } + return GE_NONE; +} + +static GSM_Error P7110_GetModel(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x03, 0x01, 0x32}; + + dprintf("Getting model...\n"); + if (SM_SendMessage(state, 6, 0x1b, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x1b); +} + +static GSM_Error P7110_GetRevision(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x03, 0x01, 0x32}; + + dprintf("Getting revision...\n"); + if (SM_SendMessage(state, 6, 0x1b, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x1b); +} + +static GSM_Error P7110_GetIMEI(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x01}; + + dprintf("Getting imei...\n"); + if (SM_SendMessage(state, 4, 0x1b, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x1b); +} + +static GSM_Error P7110_GetBatteryLevel(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x02}; + + dprintf("Getting battery level...\n"); + if (SM_SendMessage(state, 4, 0x17, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x17); +} + +static GSM_Error P7110_IncomingBattLevel(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 0x03: + if (data->BatteryLevel) { + *(data->BatteryUnits) = GBU_Percentage; + *(data->BatteryLevel) = message[5]; + dprintf("Battery level %f\n",*(data->BatteryLevel)); + } + break; + default: + dprintf("Unknown subtype of type 0x17 (%d)\n", message[3]); + return GE_UNKNOWN; + } + return GE_NONE; +} + +static GSM_Error P7110_GetRFLevel(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x81}; + + dprintf("Getting rf level...\n"); + if (SM_SendMessage(state, 4, 0x0a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x0a); +} + +static GSM_Error P7110_GetNetworkInfo(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x70}; + + dprintf("Getting Network Info...\n"); + if (SM_SendMessage(state, 4, 0x0a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x0a); +} + +static GSM_Error P7110_IncomingNetwork(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + unsigned char *blockstart; + int i; + + switch (message[3]) { + case 0x71: + blockstart = message + 6; + for (i = 0; i < message[4]; i++) { + switch (blockstart[0]) { + case 0x01: /* Operator details */ + /* Network code is stored as 0xBA 0xXC 0xED ("ABC DE"). */ + if (data->NetworkInfo) { + /* Is this correct? */ + data->NetworkInfo->CellID[0]=blockstart[4]; + data->NetworkInfo->CellID[1]=blockstart[5]; + data->NetworkInfo->LAC[0]=blockstart[6]; + data->NetworkInfo->LAC[1]=blockstart[7]; + data->NetworkInfo->NetworkCode[0] = '0' + (blockstart[8] & 0x0f); + data->NetworkInfo->NetworkCode[1] = '0' + (blockstart[8] >> 4); + data->NetworkInfo->NetworkCode[2] = '0' + (blockstart[9] & 0x0f); + data->NetworkInfo->NetworkCode[3] = ' '; + data->NetworkInfo->NetworkCode[4] = '0' + (blockstart[10] & 0x0f); + data->NetworkInfo->NetworkCode[5] = '0' + (blockstart[10] >> 4); + data->NetworkInfo->NetworkCode[6] = 0; + } + if (data->Bitmap) { + data->Bitmap->netcode[0] = '0' + (blockstart[8] & 0x0f); + data->Bitmap->netcode[1] = '0' + (blockstart[8] >> 4); + data->Bitmap->netcode[2] = '0' + (blockstart[9] & 0x0f); + data->Bitmap->netcode[3] = ' '; + data->Bitmap->netcode[4] = '0' + (blockstart[10] & 0x0f); + data->Bitmap->netcode[5] = '0' + (blockstart[10] >> 4); + data->Bitmap->netcode[6] = 0; + dprintf("Operator %s ",data->Bitmap->netcode); + } + break; + case 0x04: /* Logo */ + if (data->Bitmap) { + dprintf("Op logo received ok "); + data->Bitmap->type = GSM_OperatorLogo; + data->Bitmap->size = blockstart[5]; /* Probably + [4]<<8 */ + data->Bitmap->height = blockstart[3]; + data->Bitmap->width = blockstart[2]; + memcpy(data->Bitmap->bitmap, blockstart + 8, data->Bitmap->size); + dprintf("Logo (%dx%d) ", data->Bitmap->height, data->Bitmap->width); + } + break; + default: + dprintf("Unknown operator block %d\n", blockstart[0]); + break; + } + blockstart += blockstart[1]; + } + break; + case 0x82: + if (data->RFLevel) { + *(data->RFUnits) = GRF_Percentage; + *(data->RFLevel) = message[4]; + dprintf("RF level %f\n",*(data->RFLevel)); + } + break; + case 0xa4: + dprintf("Op Logo Set OK\n"); + break; + default: + dprintf("Unknown subtype of type 0x0a (%d)\n", message[3]); + return GE_UNKNOWN; + } + return GE_NONE; +} + +static GSM_Error P7110_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x03, 0x00, 0x00}; + + dprintf("Getting memory status...\n"); + req[5] = GetMemoryType(data->MemoryStatus->MemoryType); + if (SM_SendMessage(state, 6, 0x03, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x03); +} + +static GSM_Error P7110_IncomingPhonebook(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + unsigned char *blockstart; + unsigned char blocks; + unsigned char subblockcount; + char *str; + int i; + GSM_SubPhonebookEntry* subEntry = NULL; + + PGEN_DebugMessage(messagetype, message, length); + + switch (message[3]) { + case 0x04: /* Get status response */ + if (data->MemoryStatus) { + if (message[5] != 0xff) { + data->MemoryStatus->Used = (message[16] << 8) + message[17]; + data->MemoryStatus->Free = ((message[14] << 8) + message[15]) - data->MemoryStatus->Used; + dprintf("Memory status - location = %d\n", (message[8] << 8) + message[9]); + } else { + dprintf("Unknown error getting mem status\n"); + return GE_NOTIMPLEMENTED; + } + } + break; + case 0x08: /* Read Memory response */ + if (data->PhonebookEntry) { + data->PhonebookEntry->Empty = true; + data->PhonebookEntry->Group = 0; + data->PhonebookEntry->Name[0] = '\0'; + data->PhonebookEntry->Number[0] = '\0'; + data->PhonebookEntry->SubEntriesCount = 0; + data->PhonebookEntry->Date.Year = 0; + data->PhonebookEntry->Date.Month = 0; + data->PhonebookEntry->Date.Day = 0; + data->PhonebookEntry->Date.Hour = 0; + data->PhonebookEntry->Date.Minute = 0; + data->PhonebookEntry->Date.Second = 0; + } + if (message[6] == 0x0f) { // not found + if (message[10] == 0x34 || message[10] == 0x33 || message[10] == 0x30) { + dprintf("Invalid caller location\n"); + return GE_INVALIDPHBOOKLOCATION; + } else { + dprintf("Unknown error getting phonebook\n"); + return GE_NOTIMPLEMENTED; + } + } + dprintf("Received phonebook info\n"); + blocks = message[17]; + blockstart = message + 18; + subblockcount = 0; + + for (i = 0; i < blocks; i++) { + if (data->PhonebookEntry) + subEntry = &data->PhonebookEntry->SubEntries[subblockcount]; + switch(blockstart[0]) { + case P7110_ENTRYTYPE_POINTER: /* Pointer */ + switch (message[11]) { /* Memory type */ + case P7110_MEMORY_SPEEDDIALS: /* Speed dial numbers */ + if ((data != NULL) && (data->SpeedDial != NULL)) { + data->SpeedDial->Location = (((unsigned int)blockstart[6]) << 8) + blockstart[7]; + switch(blockstart[8]) { + case 0x05: + data->SpeedDial->MemoryType = GMT_ME; + str = "phone"; + break; + case 0x06: + str = "SIM"; + data->SpeedDial->MemoryType = GMT_SM; + break; + default: + str = "unknown"; + data->SpeedDial->MemoryType = GMT_XX; + break; + } + } + + dprintf("Speed dial pointer: %i in %s\n", data->SpeedDial->Location, str); + + break; + default: + /* FIXME: is it possible? */ + dprintf("Wrong memory type(?)\n"); + break; + } + + break; + case P7110_ENTRYTYPE_NAME: /* Name */ + if (data->Bitmap) { + DecodeUnicode(data->Bitmap->text, (blockstart + 6), blockstart[5] / 2); + dprintf("Name: %s\n", data->Bitmap->text); + } else if (data->PhonebookEntry) { + DecodeUnicode(data->PhonebookEntry->Name, (blockstart + 6), blockstart[5] / 2); + data->PhonebookEntry->Empty = false; + dprintf(" Name: %s\n", data->PhonebookEntry->Name); + } + break; + case P7110_ENTRYTYPE_EMAIL: + case P7110_ENTRYTYPE_POSTAL: + case P7110_ENTRYTYPE_NOTE: + if (data->PhonebookEntry) { + subEntry->EntryType = blockstart[0]; + subEntry->NumberType = 0; + subEntry->BlockNumber = blockstart[4]; + DecodeUnicode(subEntry->data.Number, (blockstart + 6), blockstart[5] / 2); + dprintf(" Type: %d (%02x)\n", subEntry->EntryType, subEntry->EntryType); + dprintf(" Text: %s\n", subEntry->data.Number); + subblockcount++; + data->PhonebookEntry->SubEntriesCount++; + } + break; + case P7110_ENTRYTYPE_NUMBER: + if (data->PhonebookEntry) { + subEntry->EntryType = blockstart[0]; + subEntry->NumberType = blockstart[5]; + subEntry->BlockNumber = blockstart[4]; + DecodeUnicode(subEntry->data.Number, (blockstart + 10), blockstart[9] / 2); + if (!subblockcount) strcpy(data->PhonebookEntry->Number, subEntry->data.Number); + dprintf(" Type: %d (%02x)\n", subEntry->NumberType, subEntry->NumberType); + dprintf(" Number: %s\n", subEntry->data.Number); + subblockcount++; + data->PhonebookEntry->SubEntriesCount++; + } + break; + case P7110_ENTRYTYPE_RINGTONE: /* Ringtone */ + if (data->Bitmap) { + data->Bitmap->ringtone = blockstart[5]; + dprintf("Ringtone no. %d\n", data->Bitmap->ringtone); + } + break; + case P7110_ENTRYTYPE_DATE: + if (data->PhonebookEntry) { + subEntry->EntryType=blockstart[0]; + subEntry->NumberType=blockstart[5]; + subEntry->BlockNumber=blockstart[4]; + subEntry->data.Date.Year=(blockstart[6] << 8) + blockstart[7]; + subEntry->data.Date.Month = blockstart[8]; + subEntry->data.Date.Day = blockstart[9]; + subEntry->data.Date.Hour = blockstart[10]; + subEntry->data.Date.Minute = blockstart[11]; + subEntry->data.Date.Second = blockstart[12]; + dprintf(" Date: %02u.%02u.%04u\n", subEntry->data.Date.Day, + subEntry->data.Date.Month, subEntry->data.Date.Year); + dprintf(" Time: %02u:%02u:%02u\n", subEntry->data.Date.Hour, + subEntry->data.Date.Minute, subEntry->data.Date.Second); + subblockcount++; + } + break; + case P7110_ENTRYTYPE_LOGO: /* Caller group logo */ + if (data->Bitmap) { + data->Bitmap->width = blockstart[5]; + data->Bitmap->height = blockstart[6]; + data->Bitmap->size = (data->Bitmap->width * data->Bitmap->height) / 8; + memcpy(data->Bitmap->bitmap, blockstart + 10, data->Bitmap->size); + dprintf("Bitmap\n"); + } + break; + case P7110_ENTRYTYPE_LOGOSWITCH:/* Logo on/off */ + break; + case P7110_ENTRYTYPE_GROUP: /* Caller group number */ + if (data->PhonebookEntry) { + data->PhonebookEntry->Group = blockstart[5] - 1; + dprintf(" Group: %d\n", data->PhonebookEntry->Group); + } + break; + default: + dprintf("Unknown phonebook block %02x\n", blockstart[0]); + break; + } + blockstart += blockstart[3]; + } + break; + case 0x0c: + switch (message[6]) { + case 0x3d: return GE_PHBOOKWRITEFAILED; + case 0x3e: return GE_PHBOOKWRITEFAILED; + default: return GE_NONE; + } + break; + default: + dprintf("Unknown subtype of type 0x03 (%d)\n", message[3]); + return GE_UNKNOWN; + } + return GE_NONE; +} + +/* Just as an example.... */ +/* But note that both requests are the same type which isn't very 'proper' */ +static GSM_Error P7110_Identify(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x01}; + unsigned char req2[] = {FBUS_FRAME_HEADER, 0x03, 0x01, 0x32}; + + dprintf("Identifying...\n"); + PNOK_GetManufacturer(data->Manufacturer); + if (SM_SendMessage(state, 4, 0x1b, req) != GE_NONE) return GE_NOTREADY; + if (SM_SendMessage(state, 6, 0x1b, req2) != GE_NONE) return GE_NOTREADY; + SM_WaitFor(state, data, 0x1b); + SM_Block(state, data, 0x1b); /* waits for all requests - returns req2 error */ + SM_GetError(state, 0x1b); + + /* Check that we are back at state Initialised */ + if (SM_Loop(state,0)!=Initialised) return GE_UNKNOWN; + return GE_NONE; +} + +static GSM_Error P7110_Incoming0x1b(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 02: + if (data->Imei) { + snprintf(data->Imei, GSM_MAX_IMEI_LENGTH, "%s", message + 4); + dprintf("Received imei %s\n",data->Imei); + } + break; + case 04: + if (data->Model) { + snprintf(data->Model, GSM_MAX_MODEL_LENGTH, "%s", message + 22); + dprintf("Received model %s\n",data->Model); + } + if (data->Revision) { + snprintf(data->Revision, GSM_MAX_REVISION_LENGTH, "%s", message + 7); + dprintf("Received revision %s\n",data->Revision); + } + break; + default: + dprintf("Unknown subtype of type 0x1b (%d)\n", message[3]); + return GE_UNKNOWN; + } + return GE_NONE; +} + + +/* handle messages of type 0x14 (SMS Handling, Folders, Logos.. */ +static GSM_Error P7110_IncomingFolder(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + int i, j; + int nextfolder = 0x10; + bool found; + + switch (message[3]) { + /* getfolders */ + case 0x7B: + i = 5; + memset(data->SMSFolderList, 0, sizeof(SMS_FolderList)); + dprintf("Message: %d SMS Folders received:\n", message[4]); + + strcpy(data->SMSFolderList->Folder[1].Name, " "); + data->SMSFolderList->number = message[4]; + + for (j = 0; j < message[4]; j++) { + int len; + strcpy(data->SMSFolderList->Folder[j].Name, " "); + data->SMSFolderList->FolderID[j] = message[i]; + dprintf("Folder Index: %d", data->SMSFolderList->FolderID[j]); + i += 2; + dprintf(" Folder name: "); + len = 0; + /* search for next folder's index number, i.e. length of folder name */ + while (message[i+1] != nextfolder && i < length) { + i += 2; + len++; + } + /* see nk7110.txt */ + nextfolder += 0x08; + if (nextfolder == 0x28) nextfolder++; + i -= 2 * len +1; + DecodeUnicode(data->SMSFolderList->Folder[j].Name, message + i, len); + dprintf("%s\n", data->SMSFolderList->Folder[j].Name); + i += 2 * len + 2; + } + break; + + /* getfolderstatus */ + case 0x6C: + memset(data->SMSFolder, 0, sizeof(SMS_Folder)); + dprintf("Message: SMS Folder status received: \n" ); + data->SMSFolder->FolderID = data->SMSMessage->MemoryType; + data->SMSFolder->number = (message[5] * 256) + message[5]; + dprintf("Message: Number of Entries: %i\n" , data->SMSFolder->number); + dprintf("Message: IDs of Entries : "); + for (i = 0; i < message[4] * 256 + message[5]; i++) { + data->SMSFolder->locations[i] = message[6+(i*2)] * 256 + message[(i*2)+7]; + dprintf("%d, ", data->SMSFolder->locations[i]); + } + dprintf("\n"); + break; + + /* getsms */ + case 0x08: + for (i = 0; i < length; i ++) + if (isprint(message[i])) + dprintf("[%02x%c]", message[i], message[i]); + else + dprintf("[%02x ]", message[i]); + dprintf("\n"); + + memset(data->SMSMessage, 0, sizeof(GSM_SMSMessage)); + + /* Number of SMS in folder */ + data->SMSMessage->Number = message[7]; + + /* MessageType/FolderID */ + data->SMSMessage->MemoryType = message[5]; + + /* These offsets are 6210/7110 series specific */ + /* Short Message status */ + data->SMSMessage->Status = message[4]; + dprintf("\tStatus: "); + switch (data->SMSMessage->Status) { + case SMS_Read: + dprintf("READ\n"); + break; + case SMS_Unread: + dprintf("UNREAD\n"); + break; + case SMS_Sent: + dprintf("SENT\n"); + break; + case SMS_Unsent: + dprintf("UNSENT\n"); + break; + default: + dprintf("UNKNOWN\n"); + break; + } + /* See if message# is given back by phone. If not and status is unread */ + /* we want it, if status is not unread it's a "random" message given back */ + /* by the phone because we want a message of which the # doesn't exist */ + found = false; + for (i = 0; i < data->SMSFolder->number; i++) { + if (data->SMSMessage->Number == data->SMSFolder->locations[i]) + found = true; + } + if (found==false && data->SMSMessage->Status != SMS_Unread) return GE_INVALIDSMSLOCATION; + + DecodePDUSMS(message + 6, data->SMSMessage, length); + + break; + + /* get list of SMS pictures */ + case 0x97: + dprintf("Getting list of SMS pictures...\n"); + for (i = 0; i < length; i ++) + if (isprint(message[i])) + dprintf("[%02x%c]", message[i], message[i]); + else + dprintf("[%02x ]", message[i]); + dprintf("\n"); + break; + default: + + for (i = 0; i < length; i ++) + if (isprint(message[i])) + dprintf("[%02x%c]", message[i], message[i]); + else + dprintf("[%02x ]", message[i]); + dprintf("\n"); + dprintf("Message: Unknown message of type 14 : %d length: %d\n", message[3], length); + return GE_UNKNOWN; + } + return GE_NONE; +} + +static GSM_Error P7110_GetSMS(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req_folders[] = {FBUS_FRAME_HEADER, 0x7a, 0x00, 0x00}; + unsigned char req_status[] = {FBUS_FRAME_HEADER, 0x6b, + 0x08, // Folder ID + 0x0f, 0x01}; + unsigned char req_sms[] = {FBUS_FRAME_HEADER, 0x07, + 0x08, // FolderID + 0x00, + 0x01, // Location + 0x01, 0x65, 0x01}; + unsigned char req_list[] = {FBUS_FRAME_HEADER, 0x96, + 0x09, /* location */ + 0x0f, 0x07}; + GSM_Error error; + + /* just testiung picture listing */ + req_list[4] = data->SMSMessage->MemoryType; + if (SM_SendMessage(state, 7, 0x14, req_list) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, 0x14); + + /* see if the message we want is from the last read folder, i.e. */ + /* we don't have to get folder status again */ + if (data->SMSMessage->MemoryType != data->SMSFolder->FolderID) { + + dprintf("Getting list of SMS folders...\n"); + if (SM_SendMessage(state, 6, 0x14, req_folders) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, 0x14); + + if (data->SMSMessage->MemoryType > data->SMSFolderList->FolderID[data->SMSFolderList->number-1]) + return GE_INVALIDMEMORYTYPE; + data->SMSFolder->FolderID = data->SMSMessage->MemoryType; + req_status[4] = data->SMSMessage->MemoryType; + + dprintf("Getting entries for SMS folder %i...\n", data->SMSMessage->MemoryType); + if (SM_SendMessage(state, 7, 0x14, req_status) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, 0x14); + } + + dprintf("Getting SMS...\n"); + req_sms[4] = data->SMSMessage->MemoryType; + req_sms[6] = data->SMSMessage->Number; + if (SM_SendMessage(state, 10, 0x14, req_sms) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x14); +} + +static GSM_Error P7110_GetPicture(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req_list[] = {FBUS_FRAME_HEADER, 0x96, + 0x09, /* location */ + 0x0f, 0x07}; + if (SM_SendMessage(state, 7, 0x14, req_list) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x14); +} + +#if 0 +static GSM_Error P7110_GetSMSFolders(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x7A, 0x00, 0x00}; + + dprintf("Getting SMS Folders...\n"); + if (SM_SendMessage(state, 6, 0x14, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x14); +} + +static GSM_Error P7110_GetSMSFolderStatus(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x6B, + 0x08, // Folder ID + 0x0F, 0x01}; + + req[4] = data->SMSFolder->FolderID; + dprintf("Getting SMS Folder Status...\n"); + if (SM_SendMessage(state, 7, 0x14, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x14); +} +#endif + +static GSM_Error P7110_SendSMS(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[256] = {FBUS_FRAME_HEADER, 0x01, 0x02, 0x00}; + unsigned char smsc_req[] = {FBUS_FRAME_HEADER, 0x33, 0x64, 0x00}; + int length, i; + + if (data->SMSMessage->MessageCenter.No) { + data->MessageCenter = &data->SMSMessage->MessageCenter; + P7110_GetSMSCenter(data, state); +// SM_SendMessage(state, 6, 0x02, smsc_req); +// SM_Block(state, data, 0x02); + } + + length = EncodePDUSMS(data->SMSMessage, req + 6); + if (!length) return GE_SMSWRONGFORMAT; + dprintf("Sending SMS...(%d)\n", length); + for (i = 0; i < length + 6; i++) { + dprintf("%02x ", req[i]); + } + dprintf("\n"); + if (SM_SendMessage(state, length+6, 0x02, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x02); +} + +static GSM_Error P7110_IncomingSMS(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + GSM_Error e = GE_NONE; + int digits, bytes, i; + + if (!data) return GE_INTERNALERROR; + + switch (message[3]) { + case P7110_SUBSMS_SMSC_RCVD: + dprintf("SMSC Received\n"); + /* FIXME: Implement all these in gsm-sms.c */ + data->MessageCenter->No = message[4]; + data->MessageCenter->Format = message[6]; + data->MessageCenter->Validity = message[8]; /* due to changes in format */ + digits = message[9]; + bytes = message[21] - 1; + + + sprintf(data->MessageCenter->Name, "%s", message + 33); + + strcpy(data->MessageCenter->Recipient, GetBCDNumber(message+9)); + strcpy(data->MessageCenter->Number, GetBCDNumber(message+21)); + data->MessageCenter->Type = message[22]; + + if (strlen(data->MessageCenter->Recipient) == 0) { + sprintf(data->MessageCenter->Recipient, "(none)"); + } + if (strlen(data->MessageCenter->Number) == 0) { + sprintf(data->MessageCenter->Number, "(none)"); + } + if(strlen(data->MessageCenter->Name) == 0) { + sprintf(data->MessageCenter->Name, "(none)"); + } + + break; + + case P7110_SUBSMS_SMS_SENT: + dprintf("SMS sent\n"); + e = GE_SMSSENDOK; + break; + + case P7110_SUBSMS_SEND_FAIL: + dprintf("SMS sending failed\n"); + e = GE_SMSSENDFAILED; + break; + + case P7110_SUBSMS_SMS_RCVD: + case P7110_SUBSMS_CELLBRD_OK: + case P7110_SUBSMS_CELLBRD_FAIL: + case P7110_SUBSMS_READ_CELLBRD: + case P7110_SUBSMS_SMSC_OK: + case P7110_SUBSMS_SMSC_FAIL: + case P7110_SUBSMS_SMSC_RCVFAIL: + dprintf("Subtype 0x%02x of type 0x%02x (SMS handling) not implemented\n", message[3], P7110_MSG_SMS); + e = GE_NOTIMPLEMENTED; + break; + + default: + dprintf("Unknown subtype of type 0x%02x (SMS handling): 0x%02x\n", P7110_MSG_SMS, message[3]); + e = GE_UNKNOWN; + break; + } + return e; +} + +static GSM_Error P7110_IncomingClock(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + GSM_Error e = GE_NONE; + + if (!data || !data->DateTime) return GE_INTERNALERROR; + switch (message[3]) { + case P7110_SUBCLO_DATE_RCVD: + data->DateTime->Year = (((unsigned int)message[8]) << 8) + message[9]; + data->DateTime->Month = message[10]; + data->DateTime->Day = message[11]; + data->DateTime->Hour = message[12]; + data->DateTime->Minute = message[13]; + data->DateTime->Second = message[14]; + + break; + case P7110_SUBCLO_ALARM_RCVD: + switch(message[8]) { + case P7110_ALARM_ENABLED: + data->DateTime->AlarmEnabled = 1; + break; + case P7110_ALARM_DISABLED: + data->DateTime->AlarmEnabled = 0; + break; + default: + data->DateTime->AlarmEnabled = -1; + dprintf("Unknown value of alarm enable byte: 0x%02x\n", message[8]); + e = GE_UNKNOWN; + break; + } + + data->DateTime->Hour = message[9]; + data->DateTime->Minute = message[10]; + + break; + default: + dprintf("Unknown subtype of type 0x%02x (clock handling): 0x%02x\n", P7110_MSG_CLOCK, message[3]); + e = GE_UNKNOWN; + break; + } + return e; +} + +GSM_Error P7110_GetNoteAlarm(int alarmdiff, GSM_DateTime *time, GSM_DateTime *alarm) +{ + time_t t_alarm; + struct tm tm_time; + struct tm *tm_alarm; + GSM_Error e = GE_NONE; + + if (!time || !alarm) return GE_INTERNALERROR; + + memset(&tm_time, 0, sizeof(tm_time)); + tm_time.tm_year = time->Year - 1900; + tm_time.tm_mon = time->Month - 1; + tm_time.tm_mday = time->Day; + tm_time.tm_hour = time->Hour; + tm_time.tm_min = time->Minute; + + tzset(); + t_alarm = mktime(&tm_time); + t_alarm -= alarmdiff; + t_alarm += timezone; + + tm_alarm = localtime(&t_alarm); + + alarm->Year = tm_alarm->tm_year + 1900; + alarm->Month = tm_alarm->tm_mon + 1; + alarm->Day = tm_alarm->tm_mday; + alarm->Hour = tm_alarm->tm_hour; + alarm->Minute = tm_alarm->tm_min; + alarm->Second = tm_alarm->tm_sec; + + return e; +} + + +GSM_Error P7110_GetNoteTimes(unsigned char *block, GSM_CalendarNote *c) +{ + time_t alarmdiff; + GSM_Error e = GE_NONE; + + if (!c) return GE_INTERNALERROR; + + c->Time.Hour = block[0]; + c->Time.Minute = block[1]; + c->Recurance = ((((unsigned int)block[4]) << 8) + block[5]) * 60; + alarmdiff = (((unsigned int)block[2]) << 8) + block[3]; + + if (alarmdiff != 0xffff) { + P7110_GetNoteAlarm(alarmdiff * 60, &(c->Time), &(c->Alarm)); + c->Alarm.AlarmEnabled = 1; + } else { + c->Alarm.AlarmEnabled = 0; + } + + return e; +} + +static GSM_Error P7110_IncomingCalendar(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + GSM_Error e = GE_NONE; + unsigned char *block; + int i, alarm, year; + + if (!data || !data->CalendarNote) return GE_INTERNALERROR; + + year = data->CalendarNote->Time.Year; + dprintf("Year: %i\n", data->CalendarNote->Time.Year); + switch (message[3]) { + case P7110_SUBCAL_NOTE_RCVD: + block = message + 12; + + data->CalendarNote->Location = (((unsigned int)message[4]) << 8) + message[5]; + data->CalendarNote->Time.Year = (((unsigned int)message[8]) << 8) + message[9]; + data->CalendarNote->Time.Month = message[10]; + data->CalendarNote->Time.Day = message[11]; + data->CalendarNote->Time.Second = 0; + + dprintf("Year: %i\n", data->CalendarNote->Time.Year); + + switch (message[6]) { + case P7110_NOTE_MEETING: + data->CalendarNote->Type = GCN_MEETING; + P7110_GetNoteTimes(block, data->CalendarNote); + DecodeUnicode(data->CalendarNote->Text, (block + 8), block[6]); + break; + case P7110_NOTE_CALL: + data->CalendarNote->Type = GCN_CALL; + P7110_GetNoteTimes(block, data->CalendarNote); + DecodeUnicode(data->CalendarNote->Text, (block + 8), block[6]); + DecodeUnicode(data->CalendarNote->Phone, (block + 8 + block[6] * 2), block[7]); + break; + case P7110_NOTE_REMINDER: + data->CalendarNote->Type = GCN_REMINDER; + data->CalendarNote->Recurance = ((((unsigned int)block[0]) << 8) + block[1]) * 60; + DecodeUnicode(data->CalendarNote->Text, (block + 4), block[2]); + break; + case P7110_NOTE_BIRTHDAY: + + for (i = 0; i < 10; i++) { + dprintf("(%i:0x%02x)", i, block[i]); + } + dprintf("\n"); + + data->CalendarNote->Type = GCN_BIRTHDAY; + data->CalendarNote->Time.Year = year; + data->CalendarNote->Time.Hour = 23; + data->CalendarNote->Time.Minute = 59; + data->CalendarNote->Time.Second = 58; + + alarm = ((unsigned int)block[2]) << 24; + alarm += ((unsigned int)block[3]) << 16; + alarm += ((unsigned int)block[4]) << 8; + alarm += block[5]; + + dprintf("alarm: %i\n", alarm); + + if (alarm == 0xffff) { + data->CalendarNote->Alarm.AlarmEnabled = 0; + } else { + data->CalendarNote->Alarm.AlarmEnabled = 1; + } + + P7110_GetNoteAlarm(alarm, &(data->CalendarNote->Time), &(data->CalendarNote->Alarm)); + + data->CalendarNote->Time.Hour = 0; + data->CalendarNote->Time.Minute = 0; + data->CalendarNote->Time.Second = 0; + data->CalendarNote->Time.Year = (((unsigned int)block[6]) << 8) + block[7]; + + DecodeUnicode(data->CalendarNote->Text, (block + 10), block[9]); + + break; + default: + data->CalendarNote->Type = -1; + e = GE_UNKNOWN; + break; + } + + break; + case P7110_SUBCAL_ADD_MEETING_RESP: + case P7110_SUBCAL_ADD_CALL_RESP: + case P7110_SUBCAL_ADD_BIRTHDAY_RESP: + case P7110_SUBCAL_ADD_REMINDER_RESP: + case P7110_SUBCAL_DEL_NOTE_RESP: + case P7110_SUBCAL_FREEPOS_RCVD: + case P7110_SUBCAL_INFO_RCVD: + dprintf("Subtype 0x%02x of type 0x%02x (calendar handling) not implemented\n", message[3], P7110_MSG_CALENDAR); + e = GE_NOTIMPLEMENTED; + break; + default: + dprintf("Unknown subtype of type 0x%02x (calendar handling): 0x%02x\n", P7110_MSG_CALENDAR, message[3]); + e = GE_UNKNOWN; + break; + } + return e; +} + +static int GetMemoryType(GSM_MemoryType memory_type) +{ + int result; + + switch (memory_type) { + case GMT_MT: + result = P7110_MEMORY_MT; + break; + case GMT_ME: + result = P7110_MEMORY_ME; + break; + case GMT_SM: + result = P7110_MEMORY_SM; + break; + case GMT_FD: + result = P7110_MEMORY_FD; + break; + case GMT_ON: + result = P7110_MEMORY_ON; + break; + case GMT_EN: + result = P7110_MEMORY_EN; + break; + case GMT_DC: + result = P7110_MEMORY_DC; + break; + case GMT_RC: + result = P7110_MEMORY_RC; + break; + case GMT_MC: + result = P7110_MEMORY_MC; + break; + default: + result = P7110_MEMORY_XX; + break; + } + return (result); +} + +#if 0 + +static GSM_Error P7110_DialVoice(char *Number) +{ + + /* Doesn't work (yet) */ /* 3 2 1 5 2 30 35 */ + + // unsigned char req0[100] = { 0x00, 0x01, 0x64, 0x01 }; + + unsigned char req[] = {FBUS_FRAME_HEADER, 0x01, 0x01, 0x01, 0x01, 0x05, 0x00, 0x01, 0x03, 0x02, 0x91, 0x00, 0x031, 0x32, 0x00}; + // unsigned char req[100]={0x00, 0x01, 0x7c, 0x01, 0x31, 0x37, 0x30, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01}; + // unsigned char req[100] = {FBUS_FRAME_HEADER, 0x01, 0x00, 0x20, 0x01, 0x46}; + // unsigned char req_end[] = {0x05, 0x01, 0x01, 0x05, 0x81, 0x01, 0x00, 0x00, 0x01}; + int len = 0/*, i*/; + + //req[4]=strlen(Number); + + //for(i=0; i < strlen(Number) ; i++) + // req[5+i]=Number[i]; + + //memcpy(req+5+strlen(Number), req_end, 10); + + //len=6+strlen(Number); + + //len = 4; + + + //PGEN_CommandResponse(&link, req0, &len, 0x40, 0x40, 100); + + len=17; + + if (PGEN_CommandResponse(&link, req, &len, 0x01, 0x01, 100)==GE_NONE) { + PGEN_DebugMessage(1, req, len); +// return GE_NONE; + + } +// } else return GE_NOTIMPLEMENTED; + + + while(1){ + link.Loop(NULL); + } + + return GE_NOTIMPLEMENTED; +} + +#endif + +static GSM_Error GetCallerBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x07, 0x01, 0x01, 0x00, 0x01, + 0x00, 0x10 , /* memory type */ + 0x00, 0x00, /* location */ + 0x00, 0x00}; + + req[11] = data->Bitmap->number + 1; + dprintf("Getting caller(%d) logo...\n",data->Bitmap->number); + if (SM_SendMessage(state, 14, 0x03, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x03); +} + +inline unsigned char PackBlock(u8 id, u8 size, u8 no, u8 *buf, u8 *block) +{ + *(block++) = id; + *(block++) = 0; + *(block++) = 0; + *(block++) = size + 6; + *(block++) = no; + memcpy(block, buf, size); + block += size; + *(block++) = 0; + return (size + 6); +} + +static GSM_Error SetCallerBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[500] = {FBUS_FRAME_HEADER, 0x0b, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0c, + 0x00, 0x10, /* memory type */ + 0x00, 0x00, /* location */ + 0x00, 0x00, 0x00}; + char string[500]; + int block, i; + unsigned int count = 18; + + if ((data->Bitmap->width!=state->Phone.Info.CallerLogoW) || + (data->Bitmap->height!=state->Phone.Info.CallerLogoH )) { + dprintf("Invalid image size - expecting (%dx%d) got (%dx%d)\n",state->Phone.Info.CallerLogoH, state->Phone.Info.CallerLogoW, data->Bitmap->height, data->Bitmap->width); + return GE_INVALIDIMAGESIZE; + } + + req[13] = data->Bitmap->number + 1; + dprintf("Setting caller(%d) bitmap...\n",data->Bitmap->number); + block = 1; + /* Name */ + i = strlen(data->Bitmap->text); + EncodeUnicode((string + 1), data->Bitmap->text, i); + string[0] = i * 2; + count += PackBlock(0x07, i * 2 + 1, block++, string, req + count); + /* Ringtone */ + string[0] = data->Bitmap->ringtone; + string[1] = 0; + count += PackBlock(0x0c, 2, block++, string, req + count); + /* Number */ + string[0] = data->Bitmap->number+1; + string[1] = 0; + count += PackBlock(0x1e, 2, block++, string, req + count); + /* Logo on/off - assume on for now */ + string[0] = 1; + string[1] = 0; + count += PackBlock(0x1c, 2, block++, string, req + count); + /* Logo */ + string[0] = data->Bitmap->width; + string[1] = data->Bitmap->height; + string[2] = 0; + string[3] = 0; + string[4] = 0x7e; /* Size */ + memcpy(string + 5, data->Bitmap->bitmap, data->Bitmap->size); + count += PackBlock(0x1b, data->Bitmap->size + 5, block++, string, req + count); + req[17] = block - 1; + + if (SM_SendMessage(state, count, 0x03, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x03); +} + +static GSM_Error GetStartupBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0xee, 0x15}; + + dprintf("Getting startup logo...\n"); + if (SM_SendMessage(state, 5, 0x7a, req)!=GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x7a); +} + +static GSM_Error P7110_IncomingStartup(int messagetype, unsigned char *message, int length, GSM_Data *data) +{ + switch (message[3]) { + case 0xeb: + dprintf("Startup logo set ok\n"); + return GE_NONE; + break; + case 0xed: + if (data->Bitmap) { + /* I'm sure there are blocks here but never mind! */ + data->Bitmap->type = GSM_StartupLogo; + data->Bitmap->height = message[13]; + data->Bitmap->width = message[17]; + data->Bitmap->size=((data->Bitmap->height/8)+(data->Bitmap->height%8>0))*data->Bitmap->width; /* Can't see this coded anywhere */ + memcpy(data->Bitmap->bitmap, message+22, data->Bitmap->size); + dprintf("Startup logo got ok - height(%d) width(%d)\n", data->Bitmap->height, data->Bitmap->width); + } + return GE_NONE; + break; + default: + dprintf("Unknown subtype of type 0x7a (%d)\n", message[3]); + return GE_UNKNOWN; + break; + } +} + +static GSM_Error GetOperatorBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[] = {FBUS_FRAME_HEADER, 0x70}; + + dprintf("Getting op logo...\n"); + if (SM_SendMessage(state, 4, 0x0a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x0a); +} + +static GSM_Error SetStartupBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[1000] = {FBUS_FRAME_HEADER, 0xec, 0x15, 0x00, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, + 0x00, /* Height */ + 0xc0, 0x03, 0x00, + 0x00, /* Width */ + 0xc0, 0x04, 0x03, 0x00 }; + int count = 21; + + + if ((data->Bitmap->width!=state->Phone.Info.StartupLogoW) || + (data->Bitmap->height!=state->Phone.Info.StartupLogoH )) { + dprintf("Invalid image size - expecting (%dx%d) got (%dx%d)\n",state->Phone.Info.StartupLogoH, state->Phone.Info.StartupLogoW, data->Bitmap->height, data->Bitmap->width); + return GE_INVALIDIMAGESIZE; + } + + req[12] = data->Bitmap->height; + req[16] = data->Bitmap->width; + memcpy(req + count, data->Bitmap->bitmap, data->Bitmap->size); + count += data->Bitmap->size; + dprintf("Setting startup logo...\n"); + + if (SM_SendMessage(state, count, 0x7a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x7a); +} + +static GSM_Error SetOperatorBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[500] = { FBUS_FRAME_HEADER, 0xa3, 0x01, + 0x00, /* logo enabled */ + 0x00, 0xf0, 0x00, /* network code (000 00) */ + 0x00 ,0x04, + 0x08, /* length of rest */ + 0x00, 0x00, /* Bitmap width / height */ + 0x00, + 0x00, /* Bitmap size */ + 0x00, 0x00 + }; + int count = 18; + + if ((data->Bitmap->width!=state->Phone.Info.OpLogoW) || + (data->Bitmap->height!=state->Phone.Info.OpLogoH )) { + dprintf("Invalid image size - expecting (%dx%d) got (%dx%d)\n",state->Phone.Info.OpLogoH, state->Phone.Info.OpLogoW, data->Bitmap->height, data->Bitmap->width); + return GE_INVALIDIMAGESIZE; + } + + if (strcmp(data->Bitmap->netcode,"000 00")) { /* set logo */ + req[5] = 0x01; // Logo enabled + req[6] = ((data->Bitmap->netcode[1] & 0x0f) << 4) | (data->Bitmap->netcode[0] & 0x0f); + req[7] = 0xf0 | (data->Bitmap->netcode[2] & 0x0f); + req[8] = ((data->Bitmap->netcode[5] & 0x0f) << 4) | (data->Bitmap->netcode[4] & 0x0f); + req[11] = 8 + data->Bitmap->size; + req[12] = data->Bitmap->width; + req[13] = data->Bitmap->height; + req[15] = data->Bitmap->size; + memcpy(req + count, data->Bitmap->bitmap, data->Bitmap->size); + count += data->Bitmap->size; + } + dprintf("Setting op logo...\n"); + if (SM_SendMessage(state, count, 0x0a, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x0a); +} + +static GSM_Error P7110_GetBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + switch(data->Bitmap->type) { + case GSM_CallerLogo: + return GetCallerBitmap(data, state); + case GSM_StartupLogo: + return GetStartupBitmap(data, state); + case GSM_OperatorLogo: + return GetOperatorBitmap(data, state); + default: + return GE_NOTIMPLEMENTED; + } +} + +static GSM_Error P7110_SetBitmap(GSM_Data *data, GSM_Statemachine *state) +{ + switch(data->Bitmap->type) { + case GSM_CallerLogo: + return SetCallerBitmap(data, state); + case GSM_StartupLogo: + return SetStartupBitmap(data, state); + case GSM_OperatorLogo: + return SetOperatorBitmap(data, state); + default: + return GE_NOTIMPLEMENTED; + } +} + +static GSM_Error P7110_WritePhonebookLocation(GSM_Data *data, GSM_Statemachine *state) +{ + unsigned char req[500] = {FBUS_FRAME_HEADER, 0x0b, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0c, + 0x00, 0x00, /* memory type */ + 0x00, 0x00, /* location */ + 0x00, 0x00, 0x00}; + char string[500]; + int block, i, j, defaultn; + unsigned int count = 18; + GSM_PhonebookEntry *entry; + + if (data->PhonebookEntry) entry=data->PhonebookEntry; + else return GE_TRYAGAIN; + + req[11] = GetMemoryType(entry->MemoryType); + req[12] = (entry->Location >> 8); + req[13] = entry->Location & 0xff; + block = 1; + if (*(entry->Name)) { + /* Name */ + i = strlen(entry->Name); + EncodeUnicode((string + 1), entry->Name, i); + string[0] = i * 2; + count += PackBlock(0x07, i * 2 + 1, block++, string, req + count); + /* Group */ + string[0] = entry->Group + 1; + string[1] = 0; + count += PackBlock(0x1e, 2, block++, string, req + count); + /* Default Number */ + defaultn = 999; + for (i = 0; i < entry->SubEntriesCount; i++) + if (entry->SubEntries[i].EntryType == GSM_Number) + if (!strcmp(entry->Number, entry->SubEntries[i].data.Number)) + defaultn = i; + if (defaultn < i) { + string[0] = entry->SubEntries[defaultn].NumberType; + string[1] = 0; + string[2] = 0; + string[3] = 0; + i = strlen(entry->SubEntries[defaultn].data.Number); + EncodeUnicode((string + 5), entry->SubEntries[defaultn].data.Number, i); + string[4] = i * 2; + count += PackBlock(0x0b, i * 2 + 5, block++, string, req + count); + } + /* Rest of the numbers */ + for (i = 0; i < entry->SubEntriesCount; i++) + if (entry->SubEntries[i].EntryType == GSM_Number) + if (i != defaultn) { + string[0] = entry->SubEntries[i].NumberType; + string[1] = 0; + string[2] = 0; + string[3] = 0; + j = strlen(entry->SubEntries[i].data.Number); + EncodeUnicode((string + 5), entry->SubEntries[i].data.Number, j); + string[4] = j + 2; + count += PackBlock(0x0b, j * 2 + 5, block++, string, req + count); + } + req[17] = block - 1; + dprintf("Writing phonebook entry %s...\n",entry->Name); + } + if (SM_SendMessage(state, count, 0x03, req) != GE_NONE) return GE_NOTREADY; + return SM_Block(state, data, 0x03); +} + +static GSM_Error P7110_ReadPhonebookLL(GSM_Data *data, GSM_Statemachine *state, int memtype, int location) +{ + GSM_Error error; + unsigned char req[2000] = {FBUS_FRAME_HEADER, 0x07, 0x01, 0x01, 0x00, 0x01, + 0x00, 0x00, /* memory type */ //02,05 + 0x00, 0x00, /* location */ + 0x00, 0x00}; + + dprintf("Reading phonebook location (%d)\n", location); + + req[9] = memtype; + req[10] = location >> 8; + req[11] = location & 0xff; + + if (SM_SendMessage(state, 14, P7110_MSG_PHONEBOOK, req) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, P7110_MSG_PHONEBOOK); + + return error; +} + +static GSM_Error P7110_ReadPhonebook(GSM_Data *data, GSM_Statemachine *state) +{ + int memtype, location; + + memtype = GetMemoryType(data->PhonebookEntry->MemoryType); + location = data->PhonebookEntry->Location; + + return P7110_ReadPhonebookLL(data, state, memtype, location); +} + +static GSM_Error P7110_GetSpeedDial(GSM_Data *data, GSM_Statemachine *state) +{ + int memtype, location; + + memtype = P7110_MEMORY_SPEEDDIALS; + location = data->SpeedDial->Number; + + return P7110_ReadPhonebookLL(data, state, memtype, location); +} + +static GSM_Error P7110_GetSMSCenter(GSM_Data *data, GSM_Statemachine *state) +{ + GSM_Error error; + unsigned char req[] = {FBUS_FRAME_HEADER, P7110_SUBSMS_GET_SMSC, 0x64, 0x00}; + + req[5] = data->MessageCenter->No; + + if (SM_SendMessage(state, 6, P7110_MSG_SMS, req) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, P7110_MSG_SMS); + + return error; +} + +static GSM_Error P7110_GetClock(char req_type, GSM_Data *data, GSM_Statemachine *state) +{ + GSM_Error error; + unsigned char req[] = {FBUS_FRAME_HEADER, req_type}; + + if (SM_SendMessage(state, 4, P7110_MSG_CLOCK, req) != GE_NONE) return GE_NOTREADY; + error = SM_Block(state, data, P7110_MSG_CLOCK); + + return error; +} + +static GSM_Error P7110_GetCalendarNote(GSM_Data *data, GSM_Statemachine *state) +{ + GSM_Error error = GE_NOTREADY; + unsigned char req[] = {FBUS_FRAME_HEADER, P7110_SUBCAL_GET_NOTE, 0x00, 0x00}; + unsigned char date[] = {FBUS_FRAME_HEADER, P7110_SUBCLO_GET_DATE}; + GSM_Data tmpdata; + GSM_DateTime tmptime; + + tmpdata.DateTime = &tmptime; + if (SM_SendMessage(state, 4, P7110_MSG_CLOCK, date) == GE_NONE) { + SM_Block(state, &tmpdata, P7110_MSG_CLOCK); + req[4] = data->CalendarNote->Location >> 8; + req[5] = data->CalendarNote->Location & 0xff; + data->CalendarNote->Time.Year = tmptime.Year; + + if(SM_SendMessage(state, 6, P7110_MSG_CALENDAR, req) == GE_NONE) { + error = SM_Block(state, data, P7110_MSG_CALENDAR); + } + } + + return error; +} diff --git a/common/phones/nokia.c b/common/phones/nokia.c new file mode 100644 index 0000000..5987a30 --- /dev/null +++ b/common/phones/nokia.c @@ -0,0 +1,58 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Manfred Jonsson + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides useful functions for all phones + See README for more details on supported mobile phones. + + The various routines are called PNOK_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:13 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/11/15 12:12:34 pkot + 7110 and 6110 series phones introduce as Nokia + + Revision 1.1 2001/02/21 19:57:07 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:53 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.1 2001/02/01 15:19:41 pkot + Fixed --identify and added Manfred's manufacturer patch + + +*/ + +#include + +#include "gsm-common.h" +#include "phones/nokia.h" + + +/* This function provides a way to detect the manufacturer of a phone */ +/* because it is only used by the fbus/mbus protocol phones and only */ +/* nokia is using those protocols, the result is clear. */ +/* the error reporting is also very simple */ +/* the strncpy and PNOK_MAX_MODEL_LENGTH is only here as a reminder */ + +GSM_Error PNOK_GetManufacturer(char *manufacturer) +{ + strcpy (manufacturer, "Nokia"); + return (GE_NONE); +} diff --git a/common/vcal.lx b/common/vcal.lx new file mode 100644 index 0000000..e75bf1d --- /dev/null +++ b/common/vcal.lx @@ -0,0 +1,188 @@ +%{ +#include + +#include "gsm-common.h" +#include "gsm-filetypes.h" + +#define YY_DECL int yylex(char *type, char *text, char* time, char *alarm, int lexnumber) +int veventcounter=0; + +%} + +%x vcalendar +%x vevent +%x category +%x summary +%x ttime +%x aalarm +%option noyywrap +%option nounput + +%% + +BEGIN:VCALENDAR BEGIN(vcalendar); + +BEGIN:VEVENT ++veventcounter; BEGIN(vevent); + +CATEGORIES: BEGIN(category); + +[[:alnum:] ]+ { + if(veventcounter==lexnumber) + strncpy(type, yytext, 21); + BEGIN(vevent); + } + +SUMMARY: BEGIN(summary); + +[[:alnum:] ]+ { + if(veventcounter==lexnumber) + strncpy(text, yytext, 21); + BEGIN(vevent); + } + +DTSTART: BEGIN(ttime); + +[0-9]{8}T[0-9]{6} { + if(veventcounter==lexnumber) + strncpy(time, yytext, 16); + BEGIN(vevent); + } + +AALARM: BEGIN(aalarm); + +[0-9]{8}T[0-9]{6} { + if(veventcounter==lexnumber) + strncpy(alarm, yytext, 16); + BEGIN(vevent); + } + + +END:VEVENT BEGIN(vcalendar); + +END:VCALENDAR BEGIN(0); +<*>.|\n +<*><> { + if((lexnumber<1) | (lexnumber>veventcounter)) + { + fprintf(stderr, "Error: Invalid calendar note number!\n"); + return -1; + } + return 0; + } + +%% + +/** +* GetvCalTime +* +* Fills vCalendar time string into GSM_DateTime structure +* +* in: +* dt: datetime structure +* time: string in format yyyymmddThhmmss +* out: +* <>0 if error +*/ +int GetvCalTime(GSM_DateTime *dt, char *time) +{ + char year[5]="", month[3]="", day[3]="", hour[3]="", minute[3]="", second[3]=""; + dt->Year=dt->Month=dt->Day=dt->Hour=dt->Minute=dt->Second=dt->Timezone=0; + + strncpy(year, time, 4); + strncpy(month, time+4, 2); + strncpy(day, time+6, 2); + strncpy(hour, time+9, 2); + strncpy(minute, time+11, 2); + strncpy(second, time+13, 2); + +/* FIXME: Should check ranges... */ + dt->Year=atoi(year); + dt->Month=atoi(month); + dt->Day=atoi(day); + dt->Hour=atoi(hour); + dt->Minute=atoi(minute); + dt->Second=atoi(second); +/* FIXME */ + dt->Timezone=0; + + return 0; +} + +/** +* FillCalendarNote +* +* Fills calendar data from strings into calendar note +* +* in: +* note: calendar note structure +* type: type of calendar note +* text: text or phonenumber +* time: string in format yyyymmddThhmmss +* alarm: dito +* out: +* <>0 if error +*/ +int FillCalendarNote(GSM_CalendarNote *note, char *type, + char *text, char *time, char *alarm) +{ + + GetvCalTime(¬e->Time, time); + GetvCalTime(¬e->Alarm, alarm); + + note->Location=0; + + strncpy(note->Text, text, 20); + strcpy(note->Phone, ""); /* correct in most cases */ + +/* FIXME: Handle additional strings, maybee from configuration file */ + + if(!strcmp(type, "PHONE CALL")) + { + strncpy(note->Phone, text, 20); + note->Type=GCN_CALL; + } + else if(!strcmp(type, "MEETING")) + note->Type=GCN_MEETING; + else if(!strcmp(type, "SPECIAL OCASSION")) + note->Type=GCN_BIRTHDAY; + else + note->Type=GCN_REMINDER; + + return 0; +} + +/** +* GSM_ReadVCalendarFile +* +* Reads vCalendar file +* +* in: +* FileName: name of vCalendar file +* cnote: pointer to calendar note +* number: number in file of calendar note to read +* out: +* <>0 if error +*/ +int GSM_ReadVCalendarFile(char *FileName, GSM_CalendarNote *cnote, int number) +{ + FILE *file; + char type[21]="", text[21]="", time[16]="", alarm[16]=""; + + file=fopen(FileName, "r"); + if (!file) { + fprintf(stderr, _("File cannot be opened!\n")); + return -1; + } + + yyin=file; + + if(yylex(type, text, time, alarm, number)) + { + fprintf(stderr, _("Error parsing vCalendar file!\n")); + return -1; + } + FillCalendarNote(cnote, type, text, time, alarm); + + fclose(file); + return 0; +} diff --git a/config/config.guess b/config/config.guess new file mode 100755 index 0000000..6012b39 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1298 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-07-12' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# Please send patches to . +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int dummy(){}" > $dummy.c ; + for c in cc gcc c89 ; do + ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; + if test $? = 0 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $dummy.c $dummy.o $dummy.rel ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE}" in + i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + case "${HPUX_REV}" in + 11.[0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + esac ;; + esac + fi ;; + esac + if [ "${HP_ARCH}" = "" ]; then + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + eval $set_cc_for_build + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy + fi ;; + esac + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in + big) echo mips-unknown-linux-gnu && exit 0 ;; + little) echo mipsel-unknown-linux-gnu && exit 0 ;; + esac + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev67 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_supported_targets=`cd /; ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c < +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-pc-linux-gnu\n", argv[1]); +# else + printf ("%s-pc-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-pc-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-pc-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + eval $set_cc_for_build + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +eval $set_cc_for_build +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/config.sub b/config/config.sub new file mode 100755 index 0000000..578b302 --- /dev/null +++ b/config/config.sub @@ -0,0 +1,1375 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. + +timestamp='2001-06-08' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ + | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ + | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | hppa64 \ + | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ + | alphaev6[78] \ + | we32k | ns16k | clipper | i370 | sh | sh[34] \ + | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp10 | pdp11 \ + | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ + | v850 | c4x \ + | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ + | pj | pjl | h8500 | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ + | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ + | hppa2.0n-* | hppa64-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ + | alphaev6[78]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \ + | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ + | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ + | [cjt]90-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ + | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [cjt]90) + basic_machine=${basic_machine}-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4) + basic_machine=sh-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/install-sh b/config/install-sh new file mode 100755 index 0000000..398a88e --- /dev/null +++ b/config/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + : +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + : + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + : + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + : + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + : + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + : + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..3670353 --- /dev/null +++ b/configure.in @@ -0,0 +1,526 @@ +dnl +dnl Makefile for the GNOKII tool suite. +dnl +dnl Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +dnl 2000 Karel Zak, Pawe³ Kot +dnl +dnl $Id$ +dnl + +AC_INIT(gnokii/gnokii.c) + +AC_CONFIG_AUX_DIR(config) + +AC_CANONICAL_SYSTEM +AC_PREFIX_DEFAULT("/usr/local") + +dnl ======================== Default setting +CFLAGS="-O2 -Wall" +ALL_LINGUAS="cs de et fi nl sk pl it sl" + +dnl ======================== Checks for programs. +AC_PROG_CC +AC_PROG_CPP +AC_PROG_LEX +AC_PATH_PROG(RM, rm, no) +AC_PATH_PROG(FIND, find, no) +AC_CHECK_PROGS(MAKE, gmake make) +AC_PROG_INSTALL + +dnl Let us have $prefix variable aviable here +test x"$prefix" = xNONE && prefix="$ac_default_prefix" + +AC_ARG_ENABLE(debug, + [ --enable-debug compile with debug code], + [ CFLAGS="-g -Wall" + AC_DEFINE(DEBUG) + debug="yes" ], + [ debug="no" ] +) + +AC_ARG_ENABLE(xdebug, + [ --enable-xdebug compile with xdebug code], + [ AC_DEFINE(XDEBUG) + xdebug="yes" ], + [ xdebug="no" ] +) + +AC_ARG_ENABLE(rlpdebug, + [ --enable-rlpdebug compile with RLP debug code], + [ AC_DEFINE(RLP_DEBUG) + rlpdebug="yes" ], + [ rlpdebug="no" ] +) + +dnl ======================== NLS support + +LIBS="" +NLS_LIBS="" +NLS_CFLAGS="" + +AC_ARG_WITH(libintl, + [ --with-libintl=DIR specifies the base NLS], + [ if test "x$withval" = "xyes"; then + AC_MSG_WARN(Usage is --with-libintl=DIR) + else + NLS_LIBS="-L$withval/lib" + NLS_CFLAGS="-I$withval/include" + fi + ] +) + +AC_ARG_ENABLE(nls, + [ --disable-nls do not use NLS], + [ USE_NLS=$enableval ], + [ USE_NLS=yes ] +) + +if test "$USE_NLS" = "yes"; then + AC_PROG_MAKE_SET + AC_CHECK_HEADERS(locale.h) + AC_CHECK_FUNCS(setlocale) + AC_SUBST(HAVE_LOCALE_H) + + CPPFLAGS="$CPPFLAGS $NLS_CFLAGS" + AC_TRY_CPP([#include ], + [ AC_DEFINE(HAVE_LIBINTL_H) + AC_MSG_RESULT([checking for libintl.h... yes]) ], + [ AC_MSG_WARN(not found header file: libintl.h !!!) + USE_NLS=no ] + ) +fi + +if test "$USE_NLS" = "yes"; then + AC_CHECK_FUNC(gettext, + AC_DEFINE(HAVE_LIBINTL), + AC_CHECK_LIB(intl, gettext, + [ NLS_LIBS="$NLS_LIBS -lintl" + AC_DEFINE(HAVE_LIBINTL) ], + [ AC_MSG_WARN(not found library: intl !!!) + USE_NLS=no ], + $NLS_LIBS + ) + ) +fi + +if test "$USE_NLS" = "yes"; then + + AC_SUBST(HAVE_LIBINTL_H) + AC_SUBST(HAVE_LIBINTL) + + dnl Handle localedir + LOCALEDIR='${prefix}/share/locale' + AC_ARG_WITH(locale-dir, + [ --with-locale-dir=DIR Location of the locale file(s) + [PREFIX/share/locale]], + [ if test x$withval = xyes; then + AC_MSG_WARN(Usage is: --with-locale-dir=basedir) + else + if test x$withval = xno; then + AC_MSG_WARN(Usage is: --with-locale-dir=basedir) + else + LOCALEDIR=$withval + fi + fi + ] + ) + AC_SUBST(LOCALEDIR) + + AC_PATH_PROG(MSGFMT, msgfmt, $MSGFMT) + if test -n "$MSGFMT"; then + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AC_PATH_PROG(XGETTEXT, xgettext, $XGETTEXT) + AC_PATH_PROG(MSGMERGE, msgmerge, $MSGMERGE) + + dnl Test whether we really found GNU xgettext. + if test -n "$XGETTEXT"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT="" + fi + fi + + dnl We add another test for comparing GNU xgettext with openwin xgettext + if test -n "$XGETTEXT"; then + if $XGETTEXT --help > /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT([found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT="" + fi + fi + + dnl Test whether we really found GNU msgfmt. + if test -n "$MSGFMT"; then + if $MSGFMT < /dev/null 2> /dev/null; then + AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; NLS will not be installed]) + MSGFMT="" + fi + fi + + AC_TRY_LINK(, + [ extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [ CATOBJEXT=.gmo + DATADIRNAME=share], + [ CATOBJEXT=.mo + DATADIRNAME=lib] + ) + INSTOBJEXT=.mo + fi + + if test -n "$ALL_LINGUAS"; then + for lang in $ALL_LINGUAS; do + CATALOGS="$CATALOGS $lang$CATOBJEXT" + done + fi + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(INSTOBJEXT) + AC_SUBST(DATADIRNAME) +fi + +dnl don't use NLS, when there is no gettext installed +if test x"$MSGFMT" = x; then + USE_NLS=no +fi + +if test x"$USE_NLS" = xyes; then + AC_DEFINE(USE_NLS) +fi + +dnl ======================== Checks for libraries. + +AC_ARG_WITH(libpthread, + [ --with-libpthread=DIR specifies the base libpthread], + [ if test x$withval = xyes + then + AC_MSG_WARN(Usage is: --with-libpthread=DIR) + else + PTHREAD_LIBS="-L$withval/lib/" + PTHREAD_CFLAGS="-I$withval/include/" + fi + ] +) + +dnl Check for libpthread +PTHREAD_LIBS_SAVE="$PTHREAD_LIBS" +PTHREAD_LIBS=error +AC_CHECK_LIB(pthread, pthread_attr_init, [ + PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT" + PTHREAD_LIBS="$PTHREAD_LIBS_SAVE -lpthread" ]) + +dnl FIXME: test this on *BSD and report results immediatelly to the ml please +dnl If it is not found, try to check for c_r (on FreeBSD) +if test "x$PTHREAD_LIBS" = xerror; then + AC_CHECK_LIB(c_r, pthread_attr_init, [ + PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_THREAD_SAFE" + PTHREAD_LIBS="-pthread" ]) +fi + +dnl FIXME: do we really test here if libc contains this function? +if test "x$PTHREAD_LIBS" = xerror; then + AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="", + AC_MSG_ERROR(not found library: pthread !!!)) +fi + +dnl The following is taken from inn sources +AC_MSG_CHECKING(for tm_gmtoff in struct tm) +AC_TRY_LINK([#include ], + [struct tm t; t.tm_gmtoff = 0], + [AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_TM_GMTON)], + [AC_MSG_RESULT(no)]) + +dnl The following is taken from inn sources +AC_MSG_CHECKING(for timersub) +AC_TRY_LINK([#include ], + [timersub(NULL, NULL, NULL)], + [AC_DEFINE(HAVE_TIMEOPS) + AC_DEFINE(HAVE_TIMEOPS) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + +have_termios="no" +dnl Checking for setspeed in termios.h +AC_MSG_CHECKING(for cfsetspeed in termios.h) +AC_TRY_LINK([#include ], + [struct termios t; cfsetspeed(&t, B9600);], + [AC_DEFINE(HAVE_CFSETSPEED) + have_termios="yes" + AC_MSG_RESULT(yes)], + AC_MSG_RESULT(no)) + +if test $have_termios = "no"; then + AC_MSG_CHECKING(for cfsetispeed and cfsetospeed in termios.h) + AC_TRY_LINK([#include ], + [struct termios t; cfsetispeed(&t, B9600); cfsetospeed(&t, B9600);], + [AC_DEFINE(HAVE_CFSETISPEED) + AC_DEFINE(HAVE_CFSETOSPEED) + have_termios="yes" + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + + if test $have_termios = "no"; then + AC_MSG_CHECKING(for c_ispeed and c_ospeed in struct termios) + AC_TRY_LINK([#include ], + [struct termios t; t.c_iflag = B9600; t.c_oflag = B9600;], + [AC_DEFINE(HAVE_TERMIOS_CSPEED) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no)]) + fi +fi + +dnl ======================== Checks for getopt_long support + +AC_CHECK_HEADER(getopt.h, , + [CFLAGS="$CFLAGS -I../getopt"]) + +AC_ARG_WITH(gnugetopt, + [ --with-getopt=DIR specifies the getopt library location directory], + [ if test x$withval=yes; then + AC_MSG_WARN(Usage is: --with-getopt=DIR) + else + GETOPT_LIBS="-L$withval" + fi + ] +) + +OWN_GETOPT="" +AC_CHECK_FUNC(getopt_long, , [ + LIBS="$LIBS $GETOPT_LIBS" + AC_CHECK_LIB(gnugetopt, getopt_long, LIBS="$LIBS -lgnugetopt", + OWN_GETOPT="1")]) + +dnl ======================== Checks for X base support + +if test "$no_x" = yes -o "$with_x" = "no"; then + x_support="no" + XPM_CFLAGS="" + XPM_LIBS="" + GTK_CFLAGS="" + GTK_LIBS="" +else + AC_PATH_X + CPPFLAGS="$CPPFLAGS -I$x_includes" + AC_CHECK_HEADERS(X11/xpm.h, + [ XPMINC="yes" ], + [ XPMINC="no" ]) + + if test "x$XPMINC" = "xno"; then + x_support="no" + XPM_CFLAGS="" + XPM_LIBS="" + GTK_CFLAGS="" + GTK_LIBS="" + AC_MSG_WARN(Cannot find include X11/xpm.h) + AC_MSG_WARN(Disabling xgnokii.) + elif test "x$x_libraries" = "xNONE"; then + x_support="no" + XPM_CFLAGS="" + XPM_LIBS="" + GTK_CFLAGS="" + GTK_LIBS="" + AC_MSG_WARN(Cannot find library libX11.) + AC_MSG_WARN(Disabling xgnokii.) + else + AC_CHECK_LIB(Xpm, XpmWriteFileFromXpmImage, + [ XPM_CFLAGS="-I$x_includes" XPM_LIBS="-L$x_libraries -lX11 -lXpm" + AC_DEFINE(XPM) ], + AC_MSG_WARN(Cannot found library libXpm - disabling XPM support.), + [ -L$x_libraries -lX11 ] + ) + + AC_PATH_PROGS(GTK_CONFIG, gtk-config gtk12-config, no) + if test "$GTK_CONFIG" = no; then + x_support="no" + GTK_CFLAGS="" + GTK_LIBS="" + AC_MSG_WARN(Cannot find gtk-config.) + AC_MSG_WARN(Disabling xgnokii.) + else + GTK_CFLAGS=`$GTK_CONFIG --cflags` + GTK_LIBS=`$GTK_CONFIG --libs` + x_support="yes" + + XGNOKIIDIR='${prefix}/share' + XGNOKIIPATH=${prefix}/share + AC_ARG_WITH(xgnokiidir, + [ --with-xgnokiidir=DIR specifies the base for xgnokii], + [ if test x$withval = xyes; then + AC_MSG_WARN(Usage is: --with-xgnokiilib=DIR) + else + XGNOKIIDIR="$withval" + XGNOKIIPATH="$withval" + fi + ] + ) + fi + fi +fi + +dnl ======================== Check for libsocket +AC_CHECK_LIB(socket, socket) + +dnl ======================== Additional switches + +AC_ARG_ENABLE(security, + [ --enable-security enable all security features ], + [ AC_DEFINE(SECURITY) + security="yes" ], + [ security="no" ] +) + +AC_ARG_ENABLE(win32, + [ --enable-win32 if you want win32 suport ], + [ AC_DEFINE(WIN32) + win32="-DWIN32" ], + [ win32=""] +) + +AC_CHECK_FUNC(grantpt, + [ AC_TRY_RUN([ +#define _XOPEN_SOURCE 500 + +#include +#include +#include +#include +#include +#include + +int main() +{ + char *name = NULL; + int master, err; + + master = open("/dev/ptmx", O_RDWR | O_NOCTTY | O_NONBLOCK); + if (master >= 0) { + err = grantpt(master); + err = err || unlockpt(master); + if (!err) { + name = ptsname(master); + } else { + exit(-1); + } + } else { + exit(-1); + } + close(master); + exit(0); +} + ], + AC_DEFINE(USE_UNIX98PTYS), + AC_MSG_WARN("No unix98ptys"), + AC_MSG_WARN("Ensure to disable unix98ptys when crosscompiling")) + ] +) + +dnl ======================== Checks for header files. +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h) + +dnl ======================== Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_HEADER_TIME +AC_STRUCT_TM + +dnl ======================== Checks for library functions. +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MEMCMP +AC_TYPE_SIGNAL +AC_FUNC_STRFTIME +AC_CHECK_FUNCS(mktime select strdup strstr strtol strtok strsep snprintf) + +CFLAGS="$CFLAGS $NLS_CFLAGS" +LIBS="$LIBS $NLS_LIBS" + +PACKAGE=gnokii +XPACKAGE=xgnokii +VERSION=`cat VERSION` +XVERSION=`cat xgnokii/VERSION` +HAVE_XGNOKII=$x_support + +case "$INSTALL" in + 'config/install-sh -c') INSTALL=`pwd`/$INSTALL + ;; +esac + +SHELL=${CONFIG_SHELL-/bin/sh} + +AC_SUBST(SHELL) +case "$build_os" in + solaris*) SHELL=/bin/ksh + ;; +esac + +AC_CONFIG_HEADER(include/config.h) + +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) +AC_SUBST(XVERSION) +AC_SUBST(XPACKAGE) +AC_SUBST(XGNOKIIDIR) +AC_SUBST(XGNOKIIPATH) +AC_SUBST(exec_prefix) +AC_SUBST(USE_NLS) +AC_SUBST(GTK_CFLAGS) +AC_SUBST(GTK_LIBS) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_LIBS) +AC_SUBST(XPM_CFLAGS) +AC_SUBST(XPM_LIBS) +AC_SUBST(OWN_GETOPT) +AC_SUBST(USE_UNIX98PTYS) +AC_SUBST(HAVE_XGNOKII) + +AC_OUTPUT( + include/config.h.in + Makefile.global + po/Makefile.in + packaging/RedHat/gnokii.spec + packaging/Slackware/SlackBuild, + [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile] + ) + + +dnl ======================== Final report + +echo " + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999-2000 The Gnokii Development Team. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + See file COPYING for more details. + + Host system: $host_os + Gnokii version: $VERSION + Xgnokii version: $XVERSION + X (GTK) support: $x_support + Debug: $debug + XDebug: $xdebug + RLPDebug: $rlpdebug + NLS: $USE_NLS + Security: $security + Win32: $win32 + Prefix: $prefix + + Type '${MAKE}' for compilation and then '${MAKE} install', + '${MAKE} install-suid', '${MAKE} install-strip' or '${MAKE} install-ss' to + install gnokii. +" diff --git a/getopt/Makefile b/getopt/Makefile new file mode 100644 index 0000000..02def81 --- /dev/null +++ b/getopt/Makefile @@ -0,0 +1,28 @@ +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +CFLAGS += $(PTHREAD_CFLAGS) +LDFLAGS = + +SRCS = getopt.c getopt1.c +OBJS = getopt.o getopt1.o + +all: libgetopt.a + +libgetopt.a: $(OBJS) + $(AR) cq $@ $(OBJS) + +depend dep: + $(CPP) -M $(CFLAGS) $(SRCS) > depend + +distclean clean:: + $(RM) $(OBJS) *~ depend *.a + +##### +# DO NOT DELETE THIS LINE -- make depend depends on it. + +ifeq (depend,$(wildcard depend)) +include depend +endif + +.PHONY: all clean dep depend diff --git a/getopt/getopt.c b/getopt/getopt.c new file mode 100644 index 0000000..7b4f938 --- /dev/null +++ b/getopt/getopt.c @@ -0,0 +1,753 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94 + Free Software Foundation, Inc. + +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in . + Ditto for AIX 3.2 and . */ +#ifndef _NO_PROTO +#define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +#include +#endif + +#if !defined (__STDC__) || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +#include +#endif /* GNU C library. */ + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = NULL; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* XXX 1003.2 says this must be 1 before any call. */ +int optind = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return EOF with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +#include +#define my_index strchr +#else + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +char *getenv (); + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +#if !defined (__STDC__) || !__STDC__ +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +#endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (optstring) + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind = 1; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns `EOF'. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + optarg = NULL; + + if (optind == 0) + optstring = _getopt_initialize (optstring); + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc + && (argv[optind][0] != '-' || argv[optind][1] == '\0')) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return EOF; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if ((argv[optind][0] != '-' || argv[optind][1] == '\0')) + { + if (ordering == REQUIRE_ORDER) + return EOF; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if (nameend - nextchar == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, "%s: option `%s' is ambiguous\n", + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + { + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + "%s: option `--%s' doesn't allow an argument\n", + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + "%s: option `%c%s' doesn't allow an argument\n", + argv[0], argv[optind - 1][0], pfound->name); + } + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, "%s: option `%s' requires an argument\n", + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, "%s: unrecognized option `--%s'\n", + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, "%s: unrecognized option `%c%s'\n", + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { + if (posixly_correct) + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); + else + fprintf (stderr, "%s: invalid option -- %c\n", argv[0], c); + } + optopt = c; + return '?'; + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: option requires an argument -- %c\n", + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == EOF) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/getopt/getopt.h b/getopt/getopt.h new file mode 100644 index 0000000..f3696d9 --- /dev/null +++ b/getopt/getopt.h @@ -0,0 +1,133 @@ +/* Declarations for getopt. + Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +#if defined (__STDC__) && __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if defined (__STDC__) && __STDC__ +#ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int argc, char *const *argv, const char *shortopts); +#else /* not __GNU_LIBRARY__ */ +extern int getopt (); +#endif /* __GNU_LIBRARY__ */ +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ +extern int getopt (); +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* _GETOPT_H */ diff --git a/getopt/getopt1.c b/getopt/getopt1.c new file mode 100644 index 0000000..de8e2ad --- /dev/null +++ b/getopt/getopt1.c @@ -0,0 +1,184 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994 + Free Software Foundation, Inc. + +This file is part of the GNU C Library. Its master source is NOT part of +the C library, however. The master source lives in /gd/gnu/lib. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "getopt.h" + +#if !defined (__STDC__) || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#else +char *getenv (); +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + +#ifdef TEST + +#include + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == EOF) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/gnokii/Makefile b/gnokii/Makefile new file mode 100644 index 0000000..8373efe --- /dev/null +++ b/gnokii/Makefile @@ -0,0 +1,69 @@ + +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +ifdef XPM_LIBS + LDFLAGS +=$(XPM_LIBS) +endif + +OBJS = gnokii.o + +ifdef OWN_GETOPT + OBJS += $(TOPDIR)/getopt/libgetopt.a +endif + +LDFLAGS += -L$(TOPDIR)/common -lgnokii + +all: gnokii + +gnokii: $(OBJS) $(TOPDIR)/common/gsm-filetypes.o + +$(TOPDIR)/common/gsm-filetypes.o: + $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o + +$(TOPDIR)/getopt/libgetopt.a: + $(MAKE) -C $(TOPDIR)/getopt + +clean: + $(RM) $(OBJS) *~ depend gnokii *.exe core *.bak + +install: all + $(INSTALL) -d $(bindir) + $(INSTALL) gnokii $(bindir) + +install-strip: all + $(INSTALL) -d $(bindir) + $(INSTALL) -s gnokii $(bindir) + @echo "done" + +install-suid: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -d $(bindir) + $(INSTALL) -o root -g gnokii -m 0750 gnokii $(bindir) + @echo + +install-ss: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -d $(bindir) + $(INSTALL) -o root -g gnokii -m 0750 -s gnokii $(bindir) + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + +.PHONY: all install clean dep depend diff --git a/gnokii/gnokii.c b/gnokii/gnokii.c new file mode 100644 index 0000000..64a8934 --- /dev/null +++ b/gnokii/gnokii.c @@ -0,0 +1,3020 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Pavel Machek + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Mainline code for gnokii utility. Handles command line parsing and + reading/writing phonebook entries and other stuff. + + WARNING: this code is the test tool. Well, our test tool is now + really powerful and useful :-) + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:18 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.151 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.150 2001/11/20 16:22:22 pkot + First attempt to read Picture Messages. They should appear when you enable DEBUG. Nokia seems to break own standards. :/ (Markus Plail) + + Revision 1.149 2001/11/19 16:00:15 pkot + Another typo + + Revision 1.148 2001/11/19 13:46:43 pkot + reading unread SMS in 6210 from Inbox. Folder updates (Markus Plail) + + Revision 1.147 2001/11/18 00:54:32 pkot + Bugfixes. I18n of the user responses. UDH support in libsms. Business Card UDH Type + + Revision 1.146 2001/11/17 20:18:33 pkot + Added dau9p connection type for 6210/7110 + + Revision 1.145 2001/11/14 10:46:12 pkot + Small cleanup with __unices__ + + Revision 1.144 2001/11/08 16:34:19 pkot + Updates to work with new libsms + + Revision 1.143 2001/09/14 13:30:07 pkot + Fixed bugs introduced during 0.3.3 merge + + Revision 1.142 2001/09/14 13:02:03 pkot + Gnokii calendar changes from 0.3.3 + + Revision 1.141 2001/09/14 12:53:00 pkot + New preview logos. + Localization fixes. + Set valid operator on logos xgnokii screen. + + Revision 1.140 2001/07/27 00:02:21 pkot + Generic AT support for the new structure (Manfred Jonsson) + + Revision 1.139 2001/07/01 23:16:45 pkot + Fixed a typo in gnokii.c avoiding saving logo (Jan Havelka) + + Revision 1.138 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + Revision 1.137 2001/06/27 23:52:50 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.136 2001/06/10 23:49:49 pkot + Small fixes to hide compilation warnings and allow gnokii.c to compile + + Revision 1.135 2001/06/10 11:42:26 machek + Cleanup: some formating, made Statemachine global, converted to new + structure w.r.t. SMS-es + + Revision 1.134 2001/05/24 20:47:30 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.133 2001/04/23 17:20:01 pkot + Added possibility for viewing logos (currently nol and ngg) on console (Bartek Klepacz) + + Revision 1.132 2001/03/21 23:36:06 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.131 2001/03/19 23:43:46 pkot + Solaris / BSD '#if defined' cleanup + + Revision 1.130 2001/03/13 01:23:18 pkot + Windows updates (Manfred Jonsson) + + Revision 1.129 2001/03/13 01:21:39 pkot + *BSD updates (Bert Driehuis) + + Revision 1.128 2001/03/08 00:49:06 pkot + Fixed bug (introduced by me) in getmemory function. Now gnokii.c should compile + + Revision 1.127 2001/03/08 00:18:13 pkot + Fixed writephonebook once again. Someone kick me please... + + Revision 1.126 2001/03/07 21:46:12 pkot + Fixed writephonebook patch + + Revision 1.125 2001/03/06 22:19:14 pkot + Cleanups and fixes in gnokii.c: + - reindenting + - fixed bug reported by Gabriele Zappi + - fixed small bugs introduced by Pavel Machek + + Revision 1.124 2001/02/28 21:42:00 machek + Possibility to force overwrite in --getsms (-F). Possibility to get + multiple files (use --getsms -f xyzzy%d), cleanup. + + Revision 1.123 2001/02/20 21:55:11 pkot + Small #include updates + + Revision 1.122 2001/02/16 14:29:53 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.121 2001/02/06 21:15:35 chris + Preliminary irda support for 7110 etc. Not well tested! + + Revision 1.120 2001/02/06 08:13:32 pkot + One more include in gnokii.c needed + + Revision 1.119 2001/02/05 12:29:37 pkot + Changes needed to let unicode work + + Revision 1.118 2001/02/01 15:17:33 pkot + Fixed --identify and added Manfred's manufacturer patch + + Revision 1.117 2001/01/31 23:45:27 pkot + --identify should work ok now + + Revision 1.116 2001/01/24 20:19:55 machek + Do not retry identification, if it is not implemented, it is bad idea. + + Revision 1.115 2001/01/22 01:25:10 hugh + Tweaks for 3810 series, datacalls seem to be broken so need to do + some more debugging... + + Revision 1.114 2001/01/17 02:54:55 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.113 2001/01/15 17:00:49 pkot + Initial keypress sequence support. Disable compilation warning + + Revision 1.112 2001/01/12 14:09:13 pkot + More cleanups. This time mainly in the code. + + Revision 1.111 2001/01/10 16:32:18 pkot + Documentation updates. + FreeBSD fix for 3810 code. + Added possibility for deleting SMS just after reading it in gnokii. + 2110 code updates. + Many cleanups. + + Revision 1.110 2001/01/08 15:11:37 pkot + Documentation updates. + Fixed some bugs and removed FIXMEs. + We need to move some stuff from configure.in to aclocal.m4 + + Revision 1.109 2000/12/29 15:39:07 pkot + Reverted a change in fbus-3810.c which broke compling with --enable-debug. + Small fixes in gnokii.c + + Revision 1.108 2000/12/19 16:18:16 pkot + configure script updates and added shared function for configfile reading + + +*/ + +#include "misc.h" + +#include +#include +#include +#include +#if __unices__ +# include /* for memset */ +#endif +#include +#include +#include + +#ifdef WIN32 + +#include +#define sleep(x) Sleep((x) * 1000) +#define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +#define stat _stat +#include "win32/getopt.h" + +#else + +#include +#include +#include +#include + +#endif +#ifdef USE_NLS +#include +#endif + +#include "gsm-sms.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "gsm-networks.h" +#include "cfgreader.h" +#include "gnokii.h" +#include "gsm-filetypes.h" +#include "gsm-bitmaps.h" +#include "gsm-ringtones.h" +#include "gsm-statemachine.h" + +char *model; /* Model from .gnokiirc file. */ +char *Port; /* Serial port from .gnokiirc file */ +char *Initlength; /* Init length from .gnokiirc file */ +char *Connection; /* Connection type from .gnokiirc file */ +char *BinDir; /* Binaries directory from .gnokiirc file - not used here yet */ +/* Local variables */ + +char *GetProfileCallAlertString(int code) +{ + switch (code) { + case PROFILE_CALLALERT_RINGING: return "Ringing"; + case PROFILE_CALLALERT_ASCENDING: return "Ascending"; + case PROFILE_CALLALERT_RINGONCE: return "Ring once"; + case PROFILE_CALLALERT_BEEPONCE: return "Beep once"; + case PROFILE_CALLALERT_CALLERGROUPS: return "Caller groups"; + case PROFILE_CALLALERT_OFF: return "Off"; + default: return "Unknown"; + } +} + +char *GetProfileVolumeString(int code) +{ + switch (code) { + case PROFILE_VOLUME_LEVEL1: return "Level 1"; + case PROFILE_VOLUME_LEVEL2: return "Level 2"; + case PROFILE_VOLUME_LEVEL3: return "Level 3"; + case PROFILE_VOLUME_LEVEL4: return "Level 4"; + case PROFILE_VOLUME_LEVEL5: return "Level 5"; + default: return "Unknown"; + } +} + +char *GetProfileKeypadToneString(int code) +{ + switch (code) { + case PROFILE_KEYPAD_OFF: return "Off"; + case PROFILE_KEYPAD_LEVEL1: return "Level 1"; + case PROFILE_KEYPAD_LEVEL2: return "Level 2"; + case PROFILE_KEYPAD_LEVEL3: return "Level 3"; + default: return "Unknown"; + } +} + +char *GetProfileMessageToneString(int code) +{ + switch (code) { + case PROFILE_MESSAGE_NOTONE: return "No tone"; + case PROFILE_MESSAGE_STANDARD: return "Standard"; + case PROFILE_MESSAGE_SPECIAL: return "Special"; + case PROFILE_MESSAGE_BEEPONCE: return "Beep once"; + case PROFILE_MESSAGE_ASCENDING: return "Ascending"; + default: return "Unknown"; + } +} + +char *GetProfileWarningToneString(int code) +{ + switch (code) { + case PROFILE_WARNING_OFF: return "Off"; + case PROFILE_WARNING_ON: return "On"; + default: return "Unknown"; + } +} + +char *GetProfileVibrationString(int code) +{ + switch (code) { + case PROFILE_VIBRATION_OFF: return "Off"; + case PROFILE_VIBRATION_ON: return "On"; + default: return "Unknown"; + } +} + +/* This function shows the copyright and some informations usefull for + debugging. */ + +int version(void) +{ + fprintf(stdout, _("GNOKII Version %s\n" + "Copyright (C) Hugh Blemings , 1999, 2000\n" + "Copyright (C) Pavel Janík ml. , 1999, 2000\n" + "Copyright (C) Pavel Machek , 2001\n" + "Copyright (C) Pawe³ Kot , 2001\n" + "gnokii is free software, covered by the GNU General Public License, and you are\n" + "welcome to change it and/or distribute copies of it under certain conditions.\n" + "There is absolutely no warranty for gnokii. See GPL for details.\n" + "Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, model, Port); + return 0; +} + +/* The function usage is only informative - it prints this program's usage and + command-line options. */ + +int usage(void) +{ + fprintf(stdout, _(" usage: gnokii [--help|--monitor|--version]\n" + " gnokii --getmemory memory_type start [end]\n" + " gnokii --writephonebook [-i]\n" + " gnokii --getspeeddial number\n" + " gnokii --setspeeddial number memory_type location\n" + " gnokii --getsms memory_type start [end] [-f file] [-F file] [-d]\n" + " gnokii --deletesms memory_type start [end]\n" + " gnokii --sendsms destination [--smsc message_center_number |\n" + " --smscno message_center_index] [-r] [-C n] [-v n]\n" + " [--long n]\n" + " gnokii --savesms [-m] [-l n] [-i]\n" + " gnokii --getsmsc message_center_number\n" + " gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" + " gnokii --getdatetime\n" + " gnokii --setalarm HH MM\n" + " gnokii --getalarm\n" + " gnokii --dialvoice number\n" + " gnokii --getcalendarnote start [end] [-v]\n" + " gnokii --writecalendarnote vcardfile number\n" + " gnokii --deletecalendarnote start [end]\n" + " gnokii --getdisplaystatus\n" + " gnokii --netmonitor {reset|off|field|devel|next|nr}\n" + " gnokii --identify\n" + " gnokii --senddtmf string\n" + " gnokii --sendlogo {caller|op} destination logofile [network code]\n" + " gnokii --sendringtone destination rtttlfile\n" + " gnokii --setlogo op [logofile] [network code]\n" + " gnokii --setlogo startup [logofile]\n" + " gnokii --setlogo caller [logofile] [caller group number] [group name]\n" + " gnokii --setlogo {dealer|text} [text]\n" + " gnokii --getlogo op [logofile] [network code]\n" + " gnokii --getlogo startup [logofile] [network code]\n" + " gnokii --getlogo caller [logofile][caller group number][network code]\n" + " gnokii --getlogo {dealer|text}\n" + " gnokii --viewlogo logofile\n" + " gnokii --setringtone rtttlfile\n" + " gnokii --reset [soft|hard]\n" + " gnokii --getprofile [number]\n" + " gnokii --displayoutput\n" + " gnokii --keysequence\n" + )); +#ifdef SECURITY + fprintf(stdout, _( + " gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" + " gnokii --getsecuritycodestatus\n" + )); +#endif + exit(-1); +} + +/* fbusinit is the generic function which waits for the FBUS link. The limit + is 10 seconds. After 10 seconds we quit. */ + +static GSM_Statemachine State; +static GSM_Data data; + +void fbusinit(void (*rlp_handler)(RLP_F96Frame *frame)) +{ + int count = 0; + GSM_Error error; + GSM_ConnectionType connection = GCT_Serial; + + GSM_DataClear(&data); + + if (!strcasecmp(Connection, "dau9p")) connection = GCT_DAU9P; + if (!strcasecmp(Connection, "infrared")) connection = GCT_Infrared; + if (!strcasecmp(Connection, "irda")) connection = GCT_Irda; + + /* Initialise the code for the GSM interface. */ + + error = GSM_Initialise(model, Port, Initlength, connection, rlp_handler, &State); + + if (error != GE_NONE) { + fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); + exit(-1); + } + + /* First (and important!) wait for GSM link to be active. We allow 10 + seconds... */ + + while (count++ < 200 && *GSM_LinkOK == false) + usleep(50000); + + if (*GSM_LinkOK == false) { + fprintf (stderr, _("Hmmm... GSM_LinkOK never went true. Quitting.\n")); + exit(-1); + } +} + +/* This function checks that the argument count for a given options is withing + an allowed range. */ +int checkargs(int opt, struct gnokii_arg_len gals[], int argc) +{ + int i; + + /* Walk through the whole array with options requiring arguments. */ + for (i = 0; !(gals[i].gal_min == 0 && gals[i].gal_max == 0); i++) { + + /* Current option. */ + if (gals[i].gal_opt == opt) { + + /* Argument count checking. */ + if (gals[i].gal_flags == GAL_XOR) { + if (gals[i].gal_min == argc || gals[i].gal_max == argc) + return 0; + } else { + if (gals[i].gal_min <= argc && gals[i].gal_max >= argc) + return 0; + } + + return 1; + } + } + + /* We do not have options without arguments in the array, so check them. */ + if (argc == 0) return 0; + else return 1; +} + +/* Main function - handles command line arguments, passes them to separate + functions accordingly. */ +int main(int argc, char *argv[]) +{ + int c, i, rc = -1; + int nargc = argc-2; + char **nargv; + + /* Every option should be in this array. */ + static struct option long_options[] = + { + /* FIXME: these comments are nice, but they would be more usefull as docs for the user */ + // Display usage. + { "help", no_argument, NULL, OPT_HELP }, + + // Display version and build information. + { "version", no_argument, NULL, OPT_VERSION }, + + // Monitor mode + { "monitor", no_argument, NULL, OPT_MONITOR }, + +#ifdef SECURITY + + // Enter Security Code mode + { "entersecuritycode", required_argument, NULL, OPT_ENTERSECURITYCODE }, + + // Get Security Code status + { "getsecuritycodestatus", no_argument, NULL, OPT_GETSECURITYCODESTATUS }, + +#endif + + // Set date and time + { "setdatetime", optional_argument, NULL, OPT_SETDATETIME }, + + // Get date and time mode + { "getdatetime", no_argument, NULL, OPT_GETDATETIME }, + + // Set alarm + { "setalarm", required_argument, NULL, OPT_SETALARM }, + + // Get alarm + { "getalarm", no_argument, NULL, OPT_GETALARM }, + + // Voice call mode + { "dialvoice", required_argument, NULL, OPT_DIALVOICE }, + + // Get calendar note mode + { "getcalendarnote", required_argument, NULL, OPT_GETCALENDARNOTE }, + + // Write calendar note mode + { "writecalendarnote", required_argument, NULL, OPT_WRITECALENDARNOTE }, + + // Delete calendar note mode + { "deletecalendarnote", required_argument, NULL, OPT_DELCALENDARNOTE }, + + // Get display status mode + { "getdisplaystatus", no_argument, NULL, OPT_GETDISPLAYSTATUS }, + + // Get memory mode + { "getmemory", required_argument, NULL, OPT_GETMEMORY }, + + // Write phonebook (memory) mode + { "writephonebook", optional_argument, NULL, OPT_WRITEPHONEBOOK }, + + // Get speed dial mode + { "getspeeddial", required_argument, NULL, OPT_GETSPEEDDIAL }, + + // Set speed dial mode + { "setspeeddial", required_argument, NULL, OPT_SETSPEEDDIAL }, + + // Get SMS message mode + { "getsms", required_argument, NULL, OPT_GETSMS }, + + // Delete SMS message mode + { "deletesms", required_argument, NULL, OPT_DELETESMS }, + + // Send SMS message mode + { "sendsms", required_argument, NULL, OPT_SENDSMS }, + + // Ssve SMS message mode + { "savesms", optional_argument, NULL, OPT_SAVESMS }, + + // Send logo as SMS message mode + { "sendlogo", required_argument, NULL, OPT_SENDLOGO }, + + // Send ringtone as SMS message + { "sendringtone", required_argument, NULL, OPT_SENDRINGTONE }, + + // Set ringtone + { "setringtone", required_argument, NULL, OPT_SETRINGTONE }, + + // Get SMS center number mode + { "getsmsc", required_argument, NULL, OPT_GETSMSC }, + + // For development purposes: run in passive monitoring mode + { "pmon", no_argument, NULL, OPT_PMON }, + + // NetMonitor mode + { "netmonitor", required_argument, NULL, OPT_NETMONITOR }, + + // Identify + { "identify", no_argument, NULL, OPT_IDENTIFY }, + + // Send DTMF sequence + { "senddtmf", required_argument, NULL, OPT_SENDDTMF }, + + // Resets the phone + { "reset", optional_argument, NULL, OPT_RESET }, + + // Set logo + { "setlogo", optional_argument, NULL, OPT_SETLOGO }, + + // Get logo + { "getlogo", required_argument, NULL, OPT_GETLOGO }, + + // View logo + { "viewlogo", required_argument, NULL, OPT_VIEWLOGO }, + + // Show profile + { "getprofile", optional_argument, NULL, OPT_GETPROFILE }, + + // Show texts from phone's display + { "displayoutput", no_argument, NULL, OPT_DISPLAYOUTPUT }, + + // Simulate pressing the keys + { "keysequence", no_argument, NULL, OPT_KEYPRESS }, + + // For development purposes: insert you function calls here + { "foogle", no_argument, NULL, OPT_FOOGLE }, + + { 0, 0, 0, 0}, + }; + + /* Every command which requires arguments should have an appropriate entry + in this array. */ + struct gnokii_arg_len gals[] = + { + +#ifdef SECURITY + { OPT_ENTERSECURITYCODE, 1, 1, 0 }, +#endif + + { OPT_SETDATETIME, 0, 5, 0 }, + { OPT_SETALARM, 2, 2, 0 }, + { OPT_DIALVOICE, 1, 1, 0 }, + { OPT_GETCALENDARNOTE, 1, 3, 0 }, + { OPT_WRITECALENDARNOTE, 2, 2, 0 }, + { OPT_DELCALENDARNOTE, 1, 2, 0 }, + { OPT_GETMEMORY, 2, 3, 0 }, + { OPT_GETSPEEDDIAL, 1, 1, 0 }, + { OPT_SETSPEEDDIAL, 3, 3, 0 }, + { OPT_GETSMS, 2, 5, 0 }, + { OPT_DELETESMS, 2, 3, 0 }, + { OPT_SENDSMS, 1, 10, 0 }, + { OPT_SAVESMS, 0, 6, 0 }, + { OPT_SENDLOGO, 3, 4, GAL_XOR }, + { OPT_SENDRINGTONE, 2, 2, 0 }, + { OPT_GETSMSC, 1, 1, 0 }, + { OPT_GETWELCOMENOTE, 1, 1, 0 }, + { OPT_SETWELCOMENOTE, 1, 1, 0 }, + { OPT_NETMONITOR, 1, 1, 0 }, + { OPT_SENDDTMF, 1, 1, 0 }, + { OPT_SETLOGO, 1, 4, 0 }, + { OPT_GETLOGO, 1, 4, 0 }, + { OPT_VIEWLOGO, 1, 1, 0 }, + { OPT_SETRINGTONE, 1, 1, 0 }, + { OPT_RESET, 0, 1, 0 }, + { OPT_GETPROFILE, 0, 1, 0 }, + { OPT_WRITEPHONEBOOK, 0, 1, 0 }, + + { 0, 0, 0, 0 }, + }; + + opterr = 0; + + /* For GNU gettext */ +#ifdef USE_NLS + textdomain("gnokii"); + setlocale(LC_ALL, ""); +#endif + + /* Read config file */ + if (readconfig(&model, &Port, &Initlength, &Connection, &BinDir) < 0) { + exit(-1); + } + + /* Handle command line arguments. */ + c = getopt_long(argc, argv, "", long_options, NULL); + if (c == -1) /* No argument given - we should display usage. */ + usage(); + + switch(c) { + // First, error conditions + case '?': + case ':': + fprintf(stderr, _("Use '%s --help' for usage informations.\n"), argv[0]); + exit(0); + // Then, options with no arguments + case OPT_HELP: + usage(); + case OPT_VERSION: + return version(); + } + + /* We have to build an array of the arguments which will be passed to the + functions. Please note that every text after the --command will be + passed as arguments. A syntax like gnokii --cmd1 args --cmd2 args will + not work as expected; instead args --cmd2 args is passed as a + parameter. */ + if ((nargv = malloc(sizeof(char *) * argc)) != NULL) { + for (i = 2; i < argc; i++) + nargv[i-2] = argv[i]; + + if (checkargs(c, gals, nargc)) { + free(nargv); /* Wrong number of arguments - we should display usage. */ + usage(); + } + +#ifdef __svr4__ + /* have to ignore SIGALARM */ + sigignore(SIGALRM); +#endif + + /* Initialise the code for the GSM interface. */ + fbusinit(NULL); + + switch(c) { + case OPT_MONITOR: + rc = monitormode(); + break; +#ifdef SECURITY + case OPT_ENTERSECURITYCODE: + rc = entersecuritycode(optarg); + break; + case OPT_GETSECURITYCODESTATUS: + rc = getsecuritycodestatus(); + break; +#endif + case OPT_GETDATETIME: + rc = getdatetime(); + break; + case OPT_GETALARM: + rc = getalarm(); + break; + case OPT_GETDISPLAYSTATUS: + rc = getdisplaystatus(); + break; + case OPT_PMON: + rc = pmon(); + break; + case OPT_WRITEPHONEBOOK: + rc = writephonebook(nargc, nargv); + break; + // Now, options with arguments + case OPT_SETDATETIME: + rc = setdatetime(nargc, nargv); + break; + case OPT_SETALARM: + rc = setalarm(nargv); + break; + case OPT_DIALVOICE: + rc = dialvoice(optarg); + break; + case OPT_GETCALENDARNOTE: + rc = getcalendarnote(nargc, nargv); + break; + case OPT_DELCALENDARNOTE: + rc = deletecalendarnote(nargc, nargv); + break; + case OPT_WRITECALENDARNOTE: + rc = writecalendarnote(nargv); + break; + case OPT_GETMEMORY: + rc = getmemory(nargc, nargv); + break; + case OPT_GETSPEEDDIAL: + rc = getspeeddial(optarg); + break; + case OPT_SETSPEEDDIAL: + rc = setspeeddial(nargv); + break; + case OPT_GETSMS: + rc = getsms(argc, argv); + break; + case OPT_DELETESMS: + rc = deletesms(nargc, nargv); + break; + case OPT_SENDSMS: + rc = sendsms(nargc, nargv); + break; + case OPT_SAVESMS: + rc = savesms(argc, argv); + break; + case OPT_SENDLOGO: + rc = sendlogo(nargc, nargv); + break; + case OPT_GETSMSC: + rc = getsmsc(optarg); + break; + case OPT_NETMONITOR: + rc = netmonitor(optarg); + break; + case OPT_IDENTIFY: + rc = identify(); + break; + case OPT_SETLOGO: + rc = setlogo(nargc, nargv); + break; + case OPT_GETLOGO: + rc = getlogo(nargc, nargv); + break; + case OPT_VIEWLOGO: + rc = viewlogo(optarg); + break; + case OPT_SETRINGTONE: + rc = setringtone(nargc, nargv); + break; + case OPT_SENDRINGTONE: + rc = sendringtone(nargc, nargv); + break; + case OPT_GETPROFILE: + rc = getprofile(nargc, nargv); + break; + case OPT_DISPLAYOUTPUT: + rc = displayoutput(); + break; + case OPT_KEYPRESS: + rc = presskeysequence(); + break; +#ifndef WIN32 + case OPT_FOOGLE: + rc = foogle(nargv); + break; +#endif + case OPT_SENDDTMF: + rc = senddtmf(optarg); + break; + case OPT_RESET: + rc = reset(optarg); + break; + default: + fprintf(stderr, _("Unknown option: %d\n"), c); + break; + + } + return(rc); + } + + fprintf(stderr, _("Wrong number of arguments\n")); + exit(-1); +} + +/* Send SMS messages. */ +int sendsms(int argc, char *argv[]) +{ + GSM_SMSMessage SMS; + GSM_Error error; + // char UDH[GSM_MAX_USER_DATA_HEADER_LENGTH]; + /* The maximum length of an uncompressed concatenated short message is + 255 * 153 = 39015 default alphabet characters */ + char message_buffer[255 * GSM_MAX_SMS_LENGTH]; + int input_len, chars_read; + int i; /*, offset, nr_msg, aux;*/ + + struct option options[] = { + { "smsc", required_argument, NULL, '1'}, + { "smscno", required_argument, NULL, '2'}, + { "long", required_argument, NULL, '3'}, + { NULL, 0, NULL, 0} + }; + + input_len = GSM_MAX_SMS_LENGTH; + + /* Default settings: + - no delivery report + - no Class Message + - no compression + - 7 bit data + - SMSC no. 1 + - message validity for 3 days + - unset user data header indicator + */ + + memset(&SMS, 0, sizeof(GSM_SMSMessage)); + + SMS.Type = SMS_Submit; + SMS.DCS.Type = SMS_GeneralDataCoding; + SMS.DCS.u.General.Compressed = false; + SMS.DCS.u.General.Alphabet = SMS_DefaultAlphabet; + SMS.DCS.u.General.Class = 0; + SMS.MessageCenter.No = 1; + SMS.Validity.VPF = SMS_RelativeFormat; + SMS.Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */ + SMS.UDH_No = 0; + + strcpy(SMS.RemoteNumber.number, argv[0]); + if (SMS.RemoteNumber.number[0] == '+') SMS.RemoteNumber.type = SMS_International; + else SMS.RemoteNumber.type = SMS_Unknown; + + optarg = NULL; + optind = 0; + + while ((i = getopt_long(argc, argv, "r8cC:v:", options, NULL)) != -1) { + switch (i) { // -8 is for 8-bit data, -c for compression. both are not yet implemented. + case '1': /* SMSC number */ + SMS.MessageCenter.No = 0; + strcpy(SMS.MessageCenter.Number, optarg); + break; + case '2': /* SMSC number index in phone memory */ + SMS.MessageCenter.No = atoi(optarg); + + if (SMS.MessageCenter.No < 1 || SMS.MessageCenter.No > 5) + usage(); + data.MessageCenter = &SMS.MessageCenter; + error = SM_Functions(GOP_GetSMSCenter, &data, &State); + break; + case '3': /* we send long message */ + input_len = atoi(optarg); + if (input_len > 255 * GSM_MAX_SMS_LENGTH) { + fprintf(stderr, _("Input too long!\n")); + exit(-1); + } + break; + case 'r': /* request for delivery report */ + SMS.Type = SMS_Delivery_Report; + break; + case 'C': /* class Message */ + switch (*optarg) { + case '0': + SMS.DCS.u.General.Class = 1; + break; + case '1': + SMS.DCS.u.General.Class = 2; + break; + case '2': + SMS.DCS.u.General.Class = 3; + break; + case '3': + SMS.DCS.u.General.Class = 4; + break; + default: + usage(); + } + break; + case 'v': + SMS.Validity.u.Relative = atoi(optarg); + break; + default: + usage(); /* Would be better to have an sendsms_usage() here. */ + } + } + + /* Get message text from stdin. */ + chars_read = fread(message_buffer, 1, input_len, stdin); + + if (chars_read == 0) { + fprintf(stderr, _("Couldn't read from stdin!\n")); + return -1; + } else if (chars_read > input_len) { + fprintf(stderr, _("Input too long!\n")); + return -1; + } + + /* Null terminate. */ + message_buffer[chars_read] = 0x00; + strncpy(SMS.MessageText, message_buffer, chars_read); + data.SMSMessage = &SMS; + + /* Send the message. */ + error = SM_Functions(GOP_SendSMS, &data, &State); + + if (error == GE_SMSSENDOK) { + fprintf(stdout, _("Send succeeded!\n")); + } else { + fprintf(stdout, _("SMS Send failed (error=%d)\n"), error); + } + + if (GSM && GSM->Terminate) GSM->Terminate(); + + return 0; +} + +int savesms(int argc, char *argv[]) +{ + GSM_SMSMessage SMS; + GSM_Error error; + /* The maximum length of an uncompressed concatenated short message is + 255 * 153 = 39015 default alphabet characters */ + char message_buffer[255 * GSM_MAX_SMS_LENGTH]; + int input_len, chars_read; + int i, confirm = -1; + int interactive = 0; + char ans[8]; + + /* Defaults */ + SMS.Type = SMS_Deliver; + SMS.DCS.Type = SMS_GeneralDataCoding; + SMS.DCS.u.General.Compressed = false; + SMS.DCS.u.General.Alphabet = SMS_DefaultAlphabet; + SMS.DCS.u.General.Class = 0; + SMS.MessageCenter.No = 1; + SMS.Validity.VPF = SMS_RelativeFormat; + SMS.Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */ + SMS.UDH_No = 0; + SMS.Status = SMS_Unsent; + SMS.Number = 0; + + input_len = GSM_MAX_SMS_LENGTH; + + /* Option parsing */ + while ((i = getopt(argc, argv, "ml:in:s:c:")) != -1) { + switch (i) { + case 'm': /* mark the message as sent */ + SMS.Status = SMS_Sent; + break; + case 'l': /* Specify the location */ + SMS.Number = atoi(optarg); + break; + case 'i': /* Ask before overwriting */ + interactive = 1; + break; + case 'n': /* Specify the from number */ + break; + case 's': /* Specify the smsc number */ + break; + case 'c': /* Specify the smsc location */ + break; + default: + usage(); + return -1; + } + } + + if (interactive) { + GSM_SMSMessage aux; + + aux.Number = SMS.Number; + data.SMSMessage = &aux; + error = SM_Functions(GOP_GetSMS, &data, &State); + switch (error) { + case GE_NONE: + fprintf(stderr, _("Message at specified location exists. ")); + while (confirm < 0) { + fprintf(stderr, _("Overwrite? (yes/no) ")); + GetLine(stdin, ans, 7); + if (!strcmp(ans, _("yes"))) confirm = 1; + else if (!strcmp(ans, _("no"))) confirm = 0; + } + if (!confirm) { GSM->Terminate(); return 0; } + else break; + case GE_INVALIDSMSLOCATION: + fprintf(stderr, _("Invalid location\n")); + GSM->Terminate(); + return -1; + default: +/* FIXME: Remove this fprintf when the function is thoroughly tested */ +#ifdef DEBUG + fprintf(stderr, _("Location %d empty. Saving\n"), SMS.Number); +#endif + break; + } + } + chars_read = fread(message_buffer, 1, input_len, stdin); + + if (chars_read == 0) { + + fprintf(stderr, _("Couldn't read from stdin!\n")); + return -1; + + } else if (chars_read > input_len) { + + fprintf(stderr, _("Input too long!\n")); + return -1; + + } + + strncpy (SMS.MessageText, message_buffer, chars_read); + SMS.MessageText[chars_read] = 0; + + error = GSM->SaveSMSMessage(&SMS); + + if (error == GE_NONE) { + fprintf(stdout, _("Saved!\n")); + } else { + fprintf(stdout, _("Saving failed (error=%d)\n"), error); + } + sleep(10); + GSM->Terminate(); + + return 0; +} + +/* Get SMSC number */ +int getsmsc(char *MessageCenterNumber) +{ + SMS_MessageCenter MessageCenter; + GSM_Data data; + GSM_Error error; + + memset(&MessageCenter, 0, sizeof(MessageCenter)); + MessageCenter.No=atoi(MessageCenterNumber); + + if (GSM && GSM->GetSMSCenter && GSM->Terminate) { + error = GSM->GetSMSCenter(&MessageCenter); + GSM->Terminate(); + } else { + GSM_DataClear(&data); + data.MessageCenter = &MessageCenter; + error = SM_Functions(GOP_GetSMSCenter, &data, &State); + } + + switch (error) { + case GE_NONE: + fprintf(stdout, _("%d. SMS center (%s) number is %s\n"), MessageCenter.No, MessageCenter.Name, MessageCenter.Number); + fprintf(stdout, _("Default recipient number is %s\n"), MessageCenter.Recipient); + fprintf(stdout, _("Messages sent as ")); + + switch (MessageCenter.Format) { + case SMS_Text: + fprintf(stdout, _("Text")); + break; + case SMS_VoiceMail: + fprintf(stdout, _("VoiceMail")); + break; + case SMS_Fax: + fprintf(stdout, _("Fax")); + break; + case SMS_Email: +// case GSMF_UCI: + fprintf(stdout, _("Email")); + break; +/* case GSMF_ERMES: + fprintf(stdout, _("ERMES")); + break; + case GSMF_X400: + fprintf(stdout, _("X.400")); + break; */ + default: + fprintf(stdout, _("Unknown")); + break; + } + + printf("\n"); + fprintf(stdout, _("Message validity is ")); + + switch (MessageCenter.Validity) { + case SMS_V1H: + fprintf(stdout, _("1 hour")); + break; + case SMS_V6H: + fprintf(stdout, _("6 hours")); + break; + case SMS_V24H: + fprintf(stdout, _("24 hours")); + break; + case SMS_V72H: + fprintf(stdout, _("72 hours")); + break; + case SMS_V1W: + fprintf(stdout, _("1 week")); + break; + case SMS_VMax: + fprintf(stdout, _("Maximum time")); + break; + default: + fprintf(stdout, _("Unknown")); + break; + } + + fprintf(stdout, "\n"); + + break; + case GE_NOTIMPLEMENTED: + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + break; + default: + fprintf(stdout, _("SMS center can not be found :-(\n")); + break; + } + + return error; +} + +/* Get SMS messages. */ +int getsms(int argc, char *argv[]) +{ + int del = 0; + SMS_Folder folder; + SMS_FolderList folderlist; + GSM_SMSMessage message; + char *memory_type_string; + int start_message, end_message, count, mode = 1; + char filename[64]; + GSM_Error error; + GSM_Bitmap bitmap; + char ans[5]; + struct stat buf; + + /* Handle command line args that set type, start and end locations. */ + memory_type_string = argv[2]; + message.MemoryType = StrToMemoryType(memory_type_string); + if (message.MemoryType == GMT_XX) { + fprintf(stderr, _("Unknown memory type %s (use ME, SM, ...)!\n"), argv[2]); + return (-1); + } + + memset(&filename, 0, 64); + + start_message = end_message = atoi(argv[3]); + if (argc > 4) { + int i; + + /* [end] can be only argv[4] */ + if (argv[4][0] != '-') { + end_message = atoi(argv[4]); + } + + /* parse all options (beginning with '-' */ + while ((i = getopt(argc, argv, "f:F:d")) != -1) { + switch (i) { + case 'd': + del = 1; + break; + case 'F': + mode = 0; + case 'f': + if (optarg) { + dprintf("Saving into %s\n", optarg); + strncpy(filename, optarg, 64); + if (strlen(optarg) > 63) { + fprintf(stderr, _("Filename too long - will be truncated to 63 characters.\n")); + filename[63] = 0; + } else { + filename[strlen(optarg)] = 0; + } + } else usage(); + break; + default: + usage(); + } + } + } + data.SMSFolderList = &folderlist; + folder.FolderID = 0; + data.SMSFolder = &folder; + /* Now retrieve the requested entries. */ + for (count = start_message; count <= end_message; count ++) { + int offset = 0; + + message.Number = count; + data.SMSMessage = &message; + dprintf("MemoryType (gnokii.c) : %i\n", data.SMSMessage->MemoryType); + error = SM_Functions(GOP_GetSMS, &data, &State); + + switch (error) { + case GE_NONE: + switch (message.Type) { + case SMS_Text: + fprintf(stdout, _("%d. MO Message "), message.Number); + if (message.Status) + fprintf(stdout, _("(sent)\n")); + fprintf(stdout, _("%d. MO Message "), message.Number); + if (message.Status) + fprintf(stdout, _("(not sent)\n")); + fprintf(stdout, _("Text: %s\n\n"), message.MessageText); + break; + case SMS_Delivery_Report: + fprintf(stdout, _("%d. Delivery Report "), message.Number); + if (message.Status) + fprintf(stdout, _("(read)\n")); + else + fprintf(stdout, _("(not read)\n")); + fprintf(stdout, _("Sending date/time: %02d/%02d/%04d %02d:%02d:%02d "), \ + message.Time.Day, message.Time.Month, message.Time.Year, \ + message.Time.Hour, message.Time.Minute, message.Time.Second); + if (message.Time.Timezone) { + if (message.Time.Timezone > 0) + fprintf(stdout,_("+%02d00"), message.Time.Timezone); + else + fprintf(stdout,_("%02d00"), message.Time.Timezone); + } + fprintf(stdout, "\n"); + fprintf(stdout, _("Response date/time: %02d/%02d/%04d %02d:%02d:%02d "), \ + message.SMSCTime.Day, message.SMSCTime.Month, message.SMSCTime.Year, \ + message.SMSCTime.Hour, message.SMSCTime.Minute, message.SMSCTime.Second); + if (message.SMSCTime.Timezone) { + if (message.SMSCTime.Timezone > 0) + fprintf(stdout,_("+%02d00"),message.SMSCTime.Timezone); + else + fprintf(stdout,_("%02d00"),message.SMSCTime.Timezone); + } + fprintf(stdout, "\n"); + fprintf(stdout, _("Receiver: %s Msg Center: %s\n"), message.RemoteNumber.number, message.MessageCenter.Number); + fprintf(stdout, _("Text: %s\n\n"), message.MessageText); + break; + default: + fprintf(stdout, _("%d. Inbox Message "), message.Number); + if (message.Status) + fprintf(stdout, _("(read)\n")); + else + fprintf(stdout, _("(not read)\n")); + fprintf(stdout, _("Date/time: %02d/%02d/%04d %02d:%02d:%02d "), \ + message.Time.Day, message.Time.Month, message.Time.Year, \ + message.Time.Hour, message.Time.Minute, message.Time.Second); + if (message.Time.Timezone) { + if (message.Time.Timezone > 0) + fprintf(stdout,_("+%02d00"),message.Time.Timezone); + else + fprintf(stdout,_("%02d00"),message.Time.Timezone); + } + fprintf(stdout, "\n"); + fprintf(stdout, _("Sender: %s Msg Center: %s\n"), message.RemoteNumber.number, message.MessageCenter.Number); + switch (message.UDH[0].Type) { + case SMS_OpLogo: + fprintf(stdout, _("GSM operator logo for %s (%s) network.\n"), bitmap.netcode, GSM_GetNetworkName(bitmap.netcode)); + if (!strcmp(message.RemoteNumber.number, "+998000005") && !strcmp(message.MessageCenter.Number, "+886935074443")) dprintf(_("Saved by Logo Express\n")); + if (!strcmp(message.RemoteNumber.number, "+998000002") || !strcmp(message.RemoteNumber.number, "+998000003")) dprintf(_("Saved by Operator Logo Uploader by Thomas Kessler\n")); + offset = 3; + case SMS_CallerIDLogo: + fprintf(stdout, ("Logo:\n")); + /* put bitmap into bitmap structure */ + GSM_ReadSMSBitmap(message.UDH[0].Type, message.MessageText+2+offset, message.MessageText, &bitmap); + GSM_PrintBitmap(&bitmap); + if (*filename) { + error = GE_NONE; + if ((stat(filename, &buf) == 0)) { + fprintf(stdout, _("File %s exists.\n"), filename); + fprintf(stderr, _("Overwrite? (yes/no) ")); + GetLine(stdin, ans, 4); + if (!strcmp(ans, _("yes"))) { + error = GSM_SaveBitmapFile(filename, &bitmap); + } + } else error = GSM_SaveBitmapFile(filename, &bitmap); + if (error != GE_NONE) fprintf(stderr, _("Couldn't save logofile %s!\n"), filename); + } + break; + case SMS_Ringtone: + fprintf(stdout, _("Ringtone\n")); + break; + case SMS_ConcatenatedMessages: + fprintf(stdout, _("Linked (%d/%d):\n"), + message.UDH[0].u.ConcatenatedShortMessage.CurrentNumber, + message.UDH[0].u.ConcatenatedShortMessage.MaximumNumber); + case SMS_NoUDH: + fprintf(stdout, _("Text:\n%s\n\n"), message.MessageText); + if ((mode != -1) && *filename) { + char buf[1024]; + sprintf(buf, "%s%d", filename, count); + mode = GSM_SaveTextFile(buf, message.MessageText, mode); + } + break; + case SMS_BusinessCard: + fprintf(stdout, _("Business Card:\n%s"), message.MessageText); + break; + default: + fprintf(stderr, _("Unknown\n")); + break; + } + break; + } + if (del) { + data.SMSMessage = &message; + if (GE_NONE != SM_Functions(GOP_DeleteSMS, &data, &State)) + fprintf(stdout, _("(delete failed)\n")); + else + fprintf(stdout, _("(message deleted)\n")); + } + break; + case GE_NOTIMPLEMENTED: + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + if (GSM && GSM->Terminate) GSM->Terminate(); + return -1; + case GE_INVALIDSMSLOCATION: + fprintf(stderr, _("Invalid location: %s %d\n"), memory_type_string, count); + break; + case GE_EMPTYSMSLOCATION: + fprintf(stderr, _("SMS location %s %d empty.\n"), memory_type_string, count); + break; + default: + fprintf(stdout, _("GetSMS %s %d failed!(%s)\n\n"), memory_type_string, count, print_error(error)); + break; + } + } + + if (GSM && GSM->Terminate) GSM->Terminate(); + + return 0; +} + +/* Delete SMS messages. */ +int deletesms(int argc, char *argv[]) +{ + GSM_SMSMessage message; + char *memory_type_string; + int start_message, end_message, count; + GSM_Error error; + + /* Handle command line args that set type, start and end locations. */ + memory_type_string = argv[0]; + message.MemoryType = StrToMemoryType(memory_type_string); + if (message.MemoryType == GMT_XX) { + fprintf(stderr, _("Unknown memory type %s (use ME, SM, ...)!\n"), argv[0]); + return (-1); + } + + start_message = end_message = atoi (argv[1]); + if (argc > 2) end_message = atoi (argv[2]); + + /* Now delete the requested entries. */ + for (count = start_message; count <= end_message; count ++) { + + message.Number = count; + data.SMSMessage = &message; + error = SM_Functions(GOP_DeleteSMS, &data, &State); + + if (error == GE_NONE) + fprintf(stdout, _("Deleted SMS %s %d\n"), memory_type_string, count); + else { + if (error == GE_NOTIMPLEMENTED) { + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + GSM->Terminate(); + return -1; + } + fprintf(stdout, _("DeleteSMS %s %d failed!(%d)\n\n"), memory_type_string, count, error); + } + } + + GSM->Terminate(); + + return 0; +} + +static volatile bool bshutdown = false; + +/* SIGINT signal handler. */ +static void interrupted(int sig) +{ + signal(sig, SIG_IGN); + bshutdown = true; +} + +#ifdef SECURITY + +/* In this mode we get the code from the keyboard and send it to the mobile + phone. */ +int entersecuritycode(char *type) +{ + GSM_Error test; + GSM_SecurityCode SecurityCode; + + if (!strcmp(type,"PIN")) + SecurityCode.Type=GSCT_Pin; + else if (!strcmp(type,"PUK")) + SecurityCode.Type=GSCT_Puk; + else if (!strcmp(type,"PIN2")) + SecurityCode.Type=GSCT_Pin2; + else if (!strcmp(type,"PUK2")) + SecurityCode.Type=GSCT_Puk2; + // FIXME: Entering of SecurityCode does not work :-( + // else if (!strcmp(type,"SecurityCode")) + // SecurityCode.Type=GSCT_SecurityCode; + else + usage(); + +#ifdef WIN32 + printf("Enter your code: "); + gets(SecurityCode.Code); +#else + strcpy(SecurityCode.Code,getpass(_("Enter your code: "))); +#endif + + test = GSM->EnterSecurityCode(SecurityCode); + if (test == GE_INVALIDSECURITYCODE) + fprintf(stdout, _("Error: invalid code.\n")); + else if (test == GE_NONE) + fprintf(stdout, _("Code ok.\n")); + else if (test == GE_NOTIMPLEMENTED) + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + else + fprintf(stdout, _("Other error.\n")); + + GSM->Terminate(); + + return 0; +} + +int getsecuritycodestatus(void) +{ + int Status; + + if (GSM->GetSecurityCodeStatus(&Status) == GE_NONE) { + + fprintf(stdout, _("Security code status: ")); + + switch(Status) { + case GSCT_SecurityCode: + fprintf(stdout, _("waiting for Security Code.\n")); + break; + case GSCT_Pin: + fprintf(stdout, _("waiting for PIN.\n")); + break; + case GSCT_Pin2: + fprintf(stdout, _("waiting for PIN2.\n")); + break; + case GSCT_Puk: + fprintf(stdout, _("waiting for PUK.\n")); + break; + case GSCT_Puk2: + fprintf(stdout, _("waiting for PUK2.\n")); + break; + case GSCT_None: + fprintf(stdout, _("nothing to enter.\n")); + break; + default: + fprintf(stdout, _("Unknown!\n")); + break; + } + } + + GSM->Terminate(); + + return 0; +} + + +#endif + +/* Voice dialing mode. */ +int dialvoice(char *Number) +{ + GSM->DialVoice(Number); + + GSM->Terminate(); + + return 0; +} + +/* The following function allows to send logos using SMS */ +int sendlogo(int argc, char *argv[]) +{ + GSM_SMSMessage SMS; + GSM_Bitmap bitmap; + GSM_Error error; + + char UserDataHeader[7] = { 0x06, /* UDH Length */ + 0x05, /* IEI: application port addressing scheme, 16 bit address */ + 0x04, /* IEI length */ + 0x15, /* destination address: high byte */ + 0x00, /* destination address: low byte */ + 0x00, /* originator address */ + 0x00}; + + char Data[7] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + int current=0; + + /* Default settings for SMS message: + - no delivery report + - Class Message 1 + - no compression + - 8 bit data + - SMSC no. 1 + - validity 3 days + - set UserDataHeaderIndicator + */ + SMS.Type = SMS_Submit; + SMS.DCS.Type = SMS_GeneralDataCoding; + SMS.DCS.u.General.Compressed = false; + SMS.DCS.u.General.Alphabet = SMS_8bit; + SMS.DCS.u.General.Class = 2; + SMS.MessageCenter.No = 1; + SMS.Validity.VPF = SMS_RelativeFormat; + SMS.Validity.u.Relative = 4320; /* 4320 minutes == 72 hours */ + + /* The first argument is the type of the logo. */ + if (!strcmp(argv[0], "op")) { + SMS.UDH[0].Type = SMS_OpLogo; + UserDataHeader[4] = 0x82; /* NBS port 0x1582 */ + fprintf(stdout, _("Sending operator logo.\n")); + } else if (!strcmp(argv[0], "caller")) { + SMS.UDH[0].Type = SMS_CallerIDLogo; + UserDataHeader[4] = 0x83; /* NBS port 0x1583 */ + fprintf(stdout, _("Sending caller line identification logo.\n")); + } else { + fprintf(stderr, _("You should specify what kind of logo to send!\n")); + return (-1); + } + + /* The second argument is the destination, ie the phone number of recipient. */ + SMS.MemoryType = atoi(argv[1]); + + /* The third argument is the bitmap file. */ + GSM_ReadBitmapFile(argv[2], &bitmap); + + /* If we are sending op logo we can rewrite network code. */ + if (!strcmp(argv[0], "op")) { + /* + * The fourth argument, if present, is the Network code of the operator. + * Network code is in this format: "xxx yy". + */ + if (argc > 3) { + strcpy(bitmap.netcode, argv[3]); +#ifdef DEBUG + fprintf(stdout, _("Operator code: %s\n"), argv[3]); +#endif + } + + /* Set the network code */ + Data[current++] = ((bitmap.netcode[1] & 0x0f) << 4) | (bitmap.netcode[0] & 0xf); + Data[current++] = 0xf0 | (bitmap.netcode[2] & 0x0f); + Data[current++] = ((bitmap.netcode[5] & 0x0f) << 4) | (bitmap.netcode[4] & 0xf); + } + + /* Set the logo size */ + current++; + Data[current++] = bitmap.width; + Data[current++] = bitmap.height; + + Data[current++] = 0x01; + + memcpy(SMS.MessageText, UserDataHeader, 7); + memcpy(SMS.MessageText, Data, current); + memcpy(SMS.MessageText+current, bitmap.bitmap, bitmap.size); + + /* Send the message. */ + error = GSM->SendSMSMessage(&SMS,current+bitmap.size); + + if (error == GE_SMSSENDOK) + fprintf(stdout, _("Send succeeded!\n")); + else + fprintf(stdout, _("SMS Send failed (error=%d)\n"), error); + + GSM->Terminate(); + return 0; +} + +/* Getting logos. */ +GSM_Error SaveBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap) +{ + int confirm; + char ans[4]; + struct stat buf; + GSM_Error error; + + /* Ask before overwriting */ + while (stat(FileName, &buf) == 0) { + confirm = 0; + while (!confirm) { + fprintf(stderr, _("Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? "), FileName); + GetLine(stdin, ans, 4); + if (!strcmp(ans, "O") || !strcmp(ans, "o")) confirm = 1; + if (!strcmp(ans, "N") || !strcmp(ans, "n")) confirm = 2; + if (!strcmp(ans, "S") || !strcmp(ans, "s")) return GE_USERCANCELED; + } + if (confirm == 1) break; + if (confirm == 2) { + fprintf(stderr, _("Enter name of new file: ")); + GetLine(stdin, FileName, 50); + if (!FileName || (*FileName == 0)) return GE_USERCANCELED; + } + } + + error = GSM_SaveBitmapFile(FileName, bitmap); + + switch (error) { + case GE_CANTOPENFILE: + fprintf(stderr, _("Failed to write file \"%s\"\n"), FileName); + break; + default: + break; + } + + return error; +} + +int getlogo(int argc, char *argv[]) +{ + GSM_Bitmap bitmap; + GSM_Error error; + GSM_Statemachine *sm = &State; + + bitmap.type=GSM_None; + + if (!strcmp(argv[0], "op")) + bitmap.type = GSM_OperatorLogo; + + if (!strcmp(argv[0], "caller")) { + /* There is caller group number missing in argument list. */ + if (argc == 3) { + bitmap.number=argv[2][0]-'0'; + if ((bitmap.number < 0) || (bitmap.number > 9)) bitmap.number = 0; + } else { + bitmap.number = 0; + } + bitmap.type = GSM_CallerLogo; + } + + if (!strcmp(argv[0],"startup")) + bitmap.type = GSM_StartupLogo; + else if (!strcmp(argv[0], "dealer")) + bitmap.type = GSM_DealerNoteText; + else if (!strcmp(argv[0], "text")) + bitmap.type=GSM_WelcomeNoteText; + + if (bitmap.type != GSM_None) { + + fprintf(stdout, _("Getting Logo\n")); + + data.Bitmap=&bitmap; + error=SM_Functions(GOP_GetBitmap, &data, sm); + + switch (error) { + case GE_NONE: + if (bitmap.type == GSM_DealerNoteText) fprintf(stdout, _("Dealer welcome note ")); + if (bitmap.type == GSM_WelcomeNoteText) fprintf(stdout, _("Welcome note ")); + if (bitmap.type == GSM_DealerNoteText || bitmap.type==GSM_WelcomeNoteText) { + if (bitmap.text[0]) { + fprintf(stdout, _("currently set to \"%s\"\n"), bitmap.text); + } else { + fprintf(stdout, _("currently empty\n")); + } + } else { + if (bitmap.width) { + switch (bitmap.type) { + case GSM_OperatorLogo: + fprintf(stdout,"Operator logo for %s (%s) network got succesfully\n",bitmap.netcode,GSM_GetNetworkName(bitmap.netcode)); + if (argc==3) { + strncpy(bitmap.netcode,argv[2], 7); + if (!strcmp(GSM_GetNetworkName(bitmap.netcode), "unknown")) { + fprintf(stderr, "Sorry, gnokii doesn't know %s network !\n", bitmap.netcode); + return -1; + } + } + break; + case GSM_StartupLogo: + fprintf(stdout, "Startup logo got successfully\n"); + if (argc == 3) { + strncpy(bitmap.netcode,argv[2], 7); + if (!strcmp(GSM_GetNetworkName(bitmap.netcode), "unknown")) { + fprintf(stderr, "Sorry, gnokii doesn't know %s network !\n", bitmap.netcode); + return -1; + } + } + break; + case GSM_CallerLogo: + fprintf(stdout,"Caller logo got successfully\n"); + if (argc == 4) { + strncpy(bitmap.netcode,argv[3],7); + if (!strcmp(GSM_GetNetworkName(bitmap.netcode), "unknown")) { + fprintf(stderr, "Sorry, gnokii doesn't know %s network !\n", bitmap.netcode); + return -1; + } + } + break; + default: + fprintf(stdout,"Unknown bitmap type.\n"); + break; + } + if (argc > 1) { + if (SaveBitmapFileOnConsole(argv[1], &bitmap) != GE_NONE) return (-1); + } + } else { + fprintf(stdout,"Your phone doesn't have logo uploaded !\n"); + return -1; + } + } + break; + case GE_NOTIMPLEMENTED: + fprintf(stderr, _("Function not implemented !\n")); + return -1; + case GE_NOTSUPPORTED: + fprintf(stderr, _("This kind of logo is not supported !\n")); + return -1; + default: + fprintf(stderr, _("Error getting logo !\n")); + return -1; + } + } else { + fprintf(stderr, _("What kind of logo do you want to get ?\n")); + return -1; + } + + return 0; +} + + +/* Sending logos. */ +GSM_Error ReadBitmapFileOnConsole(char *FileName, GSM_Bitmap *bitmap) +{ + GSM_Error error; + + error = GSM_ReadBitmapFile(FileName, bitmap); + + switch (error) { + case GE_CANTOPENFILE: + fprintf(stderr, _("Failed to read file \"%s\"\n"), FileName); + break; + case GE_WRONGNUMBEROFCOLORS: + fprintf(stderr, _("Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n"), FileName); + break; + case GE_WRONGCOLORS: + fprintf(stderr, _("Wrong colors in \"%s\" logofile !\n"), FileName); + break; + case GE_INVALIDFILEFORMAT: + fprintf(stderr, _("Invalid format of \"%s\" logofile !\n"), FileName); + break; + case GE_SUBFORMATNOTSUPPORTED: + fprintf(stderr, _("Sorry, gnokii doesn't support used subformat in file \"%s\" !\n"), FileName); + break; + case GE_FILETOOSHORT: + fprintf(stderr, _("\"%s\" logofile is too short !\n"), FileName); + break; + case GE_INVALIDIMAGESIZE: + fprintf(stderr, _("Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 and 72x28 !\n")); + break; + default: + break; + } + + return error; +} + + +int setlogo(int argc, char *argv[]) +{ + GSM_Bitmap bitmap,oldbit; + GSM_NetworkInfo NetworkInfo; + GSM_Error error; + + bool ok = true; + int i; + + if (!strcmp(argv[0],"text") || !strcmp(argv[0],"dealer")) { + if (!strcmp(argv[0], "text")) bitmap.type = GSM_WelcomeNoteText; + else bitmap.type = GSM_DealerNoteText; + bitmap.text[0] = 0x00; + if (argc > 1) strncpy(bitmap.text, argv[1], 255); + } else { + if (!strcmp(argv[0], "op") || !strcmp(argv[0], "startup") || !strcmp(argv[0], "caller")) { + if (argc > 1) { + if (ReadBitmapFileOnConsole(argv[1], &bitmap) != GE_NONE) { + GSM->Terminate(); + return(-1); + } + + if (!strcmp(argv[0], "op")) { + if (bitmap.type != GSM_OperatorLogo || argc < 3) { + if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) strncpy(bitmap.netcode, NetworkInfo.NetworkCode, 7); + } + GSM_ResizeBitmap(&bitmap, GSM_OperatorLogo, GSM_Info); + if (argc == 3) { + strncpy(bitmap.netcode, argv[2], 7); + if (!strcmp(GSM_GetNetworkName(bitmap.netcode), "unknown")) { + fprintf(stderr, "Sorry, gnokii doesn't know %s network !\n", bitmap.netcode); + return -1; + } + } + } + if (!strcmp(argv[0], "startup")) { + GSM_ResizeBitmap(&bitmap, GSM_StartupLogo, GSM_Info); + } + if (!strcmp(argv[0],"caller")) { + GSM_ResizeBitmap(&bitmap, GSM_CallerLogo, GSM_Info); + if (argc > 2) { + bitmap.number = argv[2][0] - '0'; + if ((bitmap.number < 0) || (bitmap.number > 9)) bitmap.number = 0; + } else { + bitmap.number = 0; + } + oldbit.type = GSM_CallerLogo; + oldbit.number = bitmap.number; + if (GSM->GetBitmap(&oldbit) == GE_NONE) { + /* We have to get the old name and ringtone!! */ + bitmap.ringtone = oldbit.ringtone; + strncpy(bitmap.text, oldbit.text, 255); + } + if (argc > 3) strncpy(bitmap.text, argv[3], 255); + } + fprintf(stdout, _("Setting Logo.\n")); + } else { + /* FIX ME: is it possible to permanently remove op logo ? */ + if (!strcmp(argv[0], "op")) + { + bitmap.type = GSM_OperatorLogo; + strncpy(bitmap.netcode, "000 00", 7); + bitmap.width = 72; + bitmap.height = 14; + bitmap.size = bitmap.width * bitmap.height / 8; + GSM_ClearBitmap(&bitmap); + } + /* FIX ME: how to remove startup and group logos ? */ + fprintf(stdout, _("Removing Logo.\n")); + } + } else { + fprintf(stderr, _("What kind of logo do you want to set ?\n")); + GSM->Terminate(); + return -1; + } + } + + error=GSM->SetBitmap(&bitmap); + + switch (error) { + case GE_NONE: + oldbit.type = bitmap.type; + oldbit.number = bitmap.number; + if (GSM->GetBitmap(&oldbit) == GE_NONE) { + if (bitmap.type == GSM_WelcomeNoteText || + bitmap.type == GSM_DealerNoteText) { + if (strcmp(bitmap.text, oldbit.text)) { + fprintf(stderr, _("Error setting")); + if (bitmap.type == GSM_DealerNoteText) fprintf(stderr, _(" dealer")); + fprintf(stderr, _(" welcome note - ")); + + /* I know, it looks horrible, but... */ + /* I set it to the short string - if it won't be set */ + /* it means, PIN is required. If it will be correct, previous */ + /* (user) text was too long */ + + /* Without it, I could have such thing: */ + /* user set text to very short string (for example, "Marcin") */ + /* then enable phone without PIN and try to set it to the very long (too long for phone) */ + /* string (which start with "Marcin"). If we compare them as only length different, we could think, */ + /* that phone accepts strings 6 chars length only (length of "Marcin") */ + /* When we make it correct, we don't have this mistake */ + + strcpy(oldbit.text, "!\0"); + GSM->SetBitmap(&oldbit); + GSM->GetBitmap(&oldbit); + if (oldbit.text[0]!='!') { + fprintf(stderr, _("SIM card and PIN is required\n")); + } else { + GSM->SetBitmap(&bitmap); + GSM->GetBitmap(&oldbit); + fprintf(stderr, _("too long, truncated to \"%s\" (length %i)\n"),oldbit.text,strlen(oldbit.text)); + } + ok = false; + } + } else { + if (bitmap.type == GSM_StartupLogo) { + for (i = 0; i < oldbit.size; i++) { + if (oldbit.bitmap[i] != bitmap.bitmap[i]) { + fprintf(stderr, _("Error setting startup logo - SIM card and PIN is required\n")); + ok = false; + break; + } + } + } + } + } + if (ok) fprintf(stdout, _("Done.\n")); + break; + case GE_NOTIMPLEMENTED: + fprintf(stderr, _("Function not implemented.\n")); + break; + case GE_NOTSUPPORTED: + fprintf(stderr, _("This kind of logo is not supported.\n")); + break; + default: + fprintf(stderr, _("Error !\n")); + break; + } + + GSM->Terminate(); + + return 0; +} + + +int viewlogo(char *filename) +{ + GSM_Error error; + + error = GSM_ShowBitmapFile(filename); + return 0; +} + +/* Calendar notes receiving. */ +int getcalendarnote(int argc, char *argv[]) +{ + GSM_CalendarNote CalendarNote; + GSM_Data data; + GSM_Error error = GE_NONE; + int i, first_location, last_location; + bool vCal = false; + + struct option options[] = { + { "vCard", optional_argument, NULL, '1'}, + { NULL, 0, NULL, 0} + }; + + optarg = NULL; + optind = 0; + + first_location = last_location = atoi(argv[0]); + if ((argc > 1) && (argv[1][0] != '-')) { + last_location = atoi(argv[1]); + } + + while ((i = getopt_long(argc, argv, "v", options, NULL)) != -1) { + switch (i) { + case 'v': + vCal=true; + break; + default: + usage(); /* Would be better to have an calendar_usage() here. */ + return -1; + } + } + + + for (i = first_location; i <= last_location; i++) { + CalendarNote.Location = i; + if (GSM && GSM->GetCalendarNote && GSM->Terminate) { + error = GSM->GetCalendarNote(&CalendarNote); + GSM->Terminate(); + } else { + GSM_DataClear(&data); + data.CalendarNote = &CalendarNote; + + error = SM_Functions(GOP_GetCalendarNote, &data, &State); + } + switch (error) { + case GE_NONE: + if (vCal) { + fprintf(stdout, "BEGIN:VCALENDAR\n"); + fprintf(stdout, "VERSION:1.0\n"); + fprintf(stdout, "BEGIN:VEVENT\n"); + fprintf(stdout, "CATEGORIES:"); + switch (CalendarNote.Type) { + case GCN_REMINDER: + fprintf(stdout, "MISCELLANEOUS\n"); + break; + case GCN_CALL: + fprintf(stdout, "PHONE CALL\n"); + break; + case GCN_MEETING: + fprintf(stdout, "MEETING\n"); + break; + case GCN_BIRTHDAY: + fprintf(stdout, "SPECIAL OCCASION\n"); + break; + default: + fprintf(stdout, "UNKNOWN\n"); + break; + } + fprintf(stdout, "SUMMARY:%s\n",CalendarNote.Text); + fprintf(stdout, "DTSTART:%04d%02d%02dT%02d%02d%02d\n", CalendarNote.Time.Year, + CalendarNote.Time.Month, CalendarNote.Time.Day, CalendarNote.Time.Hour, + CalendarNote.Time.Minute, CalendarNote.Time.Second); + if (CalendarNote.Alarm.Year!=0) { + fprintf(stdout, "DALARM:%04d%02d%02dT%02d%02d%02d\n", CalendarNote.Alarm.Year, + CalendarNote.Alarm.Month, CalendarNote.Alarm.Day, CalendarNote.Alarm.Hour, + CalendarNote.Alarm.Minute, CalendarNote.Alarm.Second); + } + fprintf(stdout, "END:VEVENT\n"); + fprintf(stdout, "END:VCALENDAR\n"); + + } else { /* not vCal */ + fprintf(stdout, _(" Type of the note: ")); + + switch (CalendarNote.Type) { + case GCN_REMINDER: + fprintf(stdout, _("Reminder\n")); + break; + case GCN_CALL: + fprintf(stdout, _("Call\n")); + break; + case GCN_MEETING: + fprintf(stdout, _("Meeting\n")); + break; + case GCN_BIRTHDAY: + fprintf(stdout, _("Birthday\n")); + break; + default: + fprintf(stdout, _("Unknown\n")); + break; + } + + fprintf(stdout, _(" Date: %d-%02d-%02d\n"), CalendarNote.Time.Year, + CalendarNote.Time.Month, + CalendarNote.Time.Day); + + fprintf(stdout, _(" Time: %02d:%02d:%02d\n"), CalendarNote.Time.Hour, + CalendarNote.Time.Minute, + CalendarNote.Time.Second); + + if (CalendarNote.Alarm.AlarmEnabled == 1) { + fprintf(stdout, _(" Alarm date: %d-%02d-%02d\n"), CalendarNote.Alarm.Year, + CalendarNote.Alarm.Month, + CalendarNote.Alarm.Day); + + fprintf(stdout, _(" Alarm time: %02d:%02d:%02d\n"), CalendarNote.Alarm.Hour, + CalendarNote.Alarm.Minute, + CalendarNote.Alarm.Second); + } + + fprintf(stdout, _(" Text: %s\n"), CalendarNote.Text); + + if (CalendarNote.Type == GCN_CALL) + fprintf(stdout, _(" Phone: %s\n"), CalendarNote.Phone); + } + break; + case GE_NOTIMPLEMENTED: + fprintf(stderr, _("Function not implemented.\n")); + break; + default: + fprintf(stderr, _("The calendar note can not be read\n")); + break; + } + } + + GSM->Terminate(); + return error; +} + +/* Writing calendar notes. */ +int writecalendarnote(char *argv[]) +{ + GSM_CalendarNote CalendarNote; + + if (GSM_ReadVCalendarFile(argv[0], &CalendarNote, atoi(argv[1]))) { + fprintf(stdout, _("Failed to load vCalendar file.\n")); + return(-1); + } + + /* Error 22=Calendar full ;-) */ + if ((GSM->WriteCalendarNote(&CalendarNote)) == GE_NONE) + fprintf(stdout, _("Succesfully written!\n")); + else + fprintf(stdout, _("Failed to write calendar note!\n")); + + GSM->Terminate(); + + return 0; +} + +/* Calendar note deleting. */ +int deletecalendarnote(int argc, char *argv[]) +{ + GSM_CalendarNote CalendarNote; + int i, first_location, last_location; + + first_location = last_location = atoi(argv[0]); + if (argc > 1) last_location = atoi(argv[1]); + + for (i = first_location; i <= last_location; i++) { + + CalendarNote.Location = i; + + if (GSM->DeleteCalendarNote(&CalendarNote) == GE_NONE) { + fprintf(stdout, _(" Calendar note deleted.\n")); + } else { + fprintf(stderr, _("The calendar note can not be deleted\n")); + } + + } + + GSM->Terminate(); + + return 0; +} + +/* Setting the date and time. */ +int setdatetime(int argc, char *argv[]) +{ + struct tm *now; + time_t nowh; + GSM_DateTime Date; + + nowh = time(NULL); + now = localtime(&nowh); + + Date.Year = now->tm_year; + Date.Month = now->tm_mon+1; + Date.Day = now->tm_mday; + Date.Hour = now->tm_hour; + Date.Minute = now->tm_min; + Date.Second = now->tm_sec; + + if (argc > 0) Date.Year = atoi (argv[0]); + if (argc > 1) Date.Month = atoi (argv[1]); + if (argc > 2) Date.Day = atoi (argv[2]); + if (argc > 3) Date.Hour = atoi (argv[3]); + if (argc > 4) Date.Minute = atoi (argv[4]); + + if (Date.Year < 1900) { + + /* Well, this thing is copyrighted in U.S. This technique is known as + Windowing and you can read something about it in LinuxWeekly News: + http://lwn.net/1999/features/Windowing.phtml. This thing is beeing + written in Czech republic and Poland where algorithms are not allowed + to be patented. */ + + if (Date.Year > 90) + Date.Year = Date.Year + 1900; + else + Date.Year = Date.Year + 2000; + } + + /* FIXME: Error checking should be here. */ + GSM->SetDateTime(&Date); + + GSM->Terminate(); + + return 0; +} + +/* In this mode we receive the date and time from mobile phone. */ +int getdatetime(void) { + GSM_Data data; + GSM_DateTime date_time; + GSM_Error error; + + if (GSM && GSM->GetDateTime && GSM->Terminate) { + error = GSM->GetDateTime(&date_time); + GSM->Terminate(); + } else { + GSM_DataClear(&data); + data.DateTime = &date_time; + + error = SM_Functions(GOP_GetDateTime, &data, &State); + } + + switch (error) { + case GE_NONE: + fprintf(stdout, _("Date: %4d/%02d/%02d\n"), date_time.Year, date_time.Month, date_time.Day); + fprintf(stdout, _("Time: %02d:%02d:%02d\n"), date_time.Hour, date_time.Minute, date_time.Second); + break; + case GE_NOTIMPLEMENTED: + fprintf(stdout, _("Function not implemented in %s !\n"), model); + break; + default: + fprintf(stdout, _("Internal error\n")); + break; + } + + return error; +} + +/* Setting the alarm. */ +int setalarm(char *argv[]) +{ + GSM_DateTime Date; + + Date.Hour = atoi(argv[0]); + Date.Minute = atoi(argv[1]); + + GSM->SetAlarm(1, &Date); + + GSM->Terminate(); + + return 0; +} + +/* Getting the alarm. */ +int getalarm(void) +{ + GSM_Error error; + GSM_Data data; + GSM_DateTime date_time; + + if (GSM && GSM->GetAlarm && GSM->Terminate) { + error = GSM->GetAlarm(0, &date_time); + GSM->Terminate(); + } else { + GSM_DataClear(&data); + data.DateTime = &date_time; + + error = SM_Functions(GOP_GetAlarm, &data, &State); + } + + switch (error) { + case GE_NONE: + fprintf(stdout, _("Alarm: %s\n"), (date_time.AlarmEnabled==0)?"off":"on"); + fprintf(stdout, _("Time: %02d:%02d\n"), date_time.Hour, date_time.Minute); + break; + case GE_NOTIMPLEMENTED: + fprintf(stdout, _("Function not implemented in %s !\n"), model); + break; + default: + fprintf(stdout, _("Internal error\n")); + break; + } + + return error; +} + +/* In monitor mode we don't do much, we just initialise the fbus code. + Note that the fbus code no longer has an internal monitor mode switch, + instead compile with DEBUG enabled to get all the gumpf. */ +int monitormode(void) +{ + float rflevel = -1, batterylevel = -1; +// GSM_PowerSource powersource = -1; + GSM_RFUnits rf_units = GRF_Arbitrary; + GSM_BatteryUnits batt_units = GBU_Arbitrary; + GSM_Statemachine *sm = &State; + GSM_Data data; + +// GSM_NetworkInfo NetworkInfo; +// GSM_CBMessage CBMessage; + + GSM_MemoryStatus SIMMemoryStatus = {GMT_SM, 0, 0}; + GSM_MemoryStatus PhoneMemoryStatus = {GMT_ME, 0, 0}; + GSM_MemoryStatus DC_MemoryStatus = {GMT_DC, 0, 0}; + GSM_MemoryStatus EN_MemoryStatus = {GMT_EN, 0, 0}; + GSM_MemoryStatus FD_MemoryStatus = {GMT_FD, 0, 0}; + GSM_MemoryStatus LD_MemoryStatus = {GMT_LD, 0, 0}; + GSM_MemoryStatus MC_MemoryStatus = {GMT_MC, 0, 0}; + GSM_MemoryStatus ON_MemoryStatus = {GMT_ON, 0, 0}; + GSM_MemoryStatus RC_MemoryStatus = {GMT_RC, 0, 0}; + +// GSM_SMSStatus SMSStatus = {0, 0}; + +// char Number[20]; + + GSM_DataClear(&data); + + /* We do not want to monitor serial line forever - press Ctrl+C to stop the + monitoring mode. */ + signal(SIGINT, interrupted); + + fprintf (stderr, _("Entering monitor mode...\n")); + + //sleep(1); + //GSM->EnableCellBroadcast(); + + /* Loop here indefinitely - allows you to see messages from GSM code in + response to unknown messages etc. The loops ends after pressing the + Ctrl+C. */ + data.RFUnits=&rf_units; + data.RFLevel=&rflevel; + data.BatteryUnits=&batt_units; + data.BatteryLevel=&batterylevel; + + while (!bshutdown) { + if (SM_Functions(GOP_GetRFLevel,&data,sm) == GE_NONE) + fprintf(stdout, _("RFLevel: %d\n"), (int)rflevel); + + if (SM_Functions(GOP_GetBatteryLevel,&data,sm) == GE_NONE) + fprintf(stdout, _("Battery: %d\n"), (int)batterylevel); + +// if (GSM->GetPowerSource(&powersource) == GE_NONE) +// fprintf(stdout, _("Power Source: %s\n"), (powersource==GPS_ACDC)?_("AC/DC"):_("battery")); + + data.MemoryStatus=&SIMMemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("SIM: Used %d, Free %d\n"), SIMMemoryStatus.Used, SIMMemoryStatus.Free); + + data.MemoryStatus=&PhoneMemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("Phone: Used %d, Free %d\n"), PhoneMemoryStatus.Used, PhoneMemoryStatus.Free); + + data.MemoryStatus=&DC_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("DC: Used %d, Free %d\n"), DC_MemoryStatus.Used, DC_MemoryStatus.Free); + + data.MemoryStatus=&EN_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("EN: Used %d, Free %d\n"), EN_MemoryStatus.Used, EN_MemoryStatus.Free); + + data.MemoryStatus=&FD_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("FD: Used %d, Free %d\n"), FD_MemoryStatus.Used, FD_MemoryStatus.Free); + + data.MemoryStatus=&LD_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("LD: Used %d, Free %d\n"), LD_MemoryStatus.Used, LD_MemoryStatus.Free); + + data.MemoryStatus=&MC_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("MC: Used %d, Free %d\n"), MC_MemoryStatus.Used, MC_MemoryStatus.Free); + + data.MemoryStatus=&ON_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("ON: Used %d, Free %d\n"), ON_MemoryStatus.Used, ON_MemoryStatus.Free); + + data.MemoryStatus=&RC_MemoryStatus; + if (SM_Functions(GOP_GetMemoryStatus,&data,sm) == GE_NONE) + fprintf(stdout, _("RC: Used %d, Free %d\n"), RC_MemoryStatus.Used, RC_MemoryStatus.Free); + +// if (GSM->GetSMSStatus(&SMSStatus) == GE_NONE) +// fprintf(stdout, _("SMS Messages: UnRead %d, Number %d\n"), SMSStatus.UnRead, SMSStatus.Number); + +// if (GSM->GetIncomingCallNr(Number) == GE_NONE) +// fprintf(stdout, _("Incoming call: %s\n"), Number); + +// if (GSM->GetNetworkInfo(&NetworkInfo) == GE_NONE) +// fprintf(stdout, _("Network: %s (%s), LAC: %s, CellID: %s\n"), GSM_GetNetworkName (NetworkInfo.NetworkCode), GSM_GetCountryName(NetworkInfo.NetworkCode), NetworkInfo.LAC, NetworkInfo.CellID); + +// if (GSM->ReadCellBroadcast(&CBMessage) == GE_NONE) +// fprintf(stdout, _("Cell broadcast received on channel %d: %s\n"), CBMessage.Channel, CBMessage.Message); + + sleep(1); + } + + fprintf (stderr, _("Leaving monitor mode...\n")); + + //GSM->Terminate(); + + return 0; +} + + +#define ESC "\e" + +static GSM_Error PrettyOutputFn(char *Display, char *Indicators) +{ + if (Display) + printf(ESC "[10;0H Display is:\n%s\n", Display); + if (Indicators) + printf(ESC "[9;0H Indicators: %s \n", Indicators); + printf(ESC "[1;1H"); + return GE_NONE; +} + +#if 0 +// Uncomment it if used +static GSM_Error OutputFn(char *Display, char *Indicators) +{ + if (Display) + printf("New display is:\n%s\n", Display); + if (Indicators) + printf("Indicators: %s\n", Indicators); + return GE_NONE; +} +#endif + +void console_raw(void) +{ +#ifndef WIN32 + struct termios it; + + tcgetattr(fileno(stdin), &it); + it.c_lflag &= ~(ICANON); + //it.c_iflag &= ~(INPCK|ISTRIP|IXON); + it.c_cc[VMIN] = 1; + it.c_cc[VTIME] = 0; + + tcsetattr(fileno(stdin), TCSANOW, &it); +#endif +} + +int displayoutput(void) +{ + GSM_Data data; + GSM_Statemachine *sm = &State; + GSM_Error error; + + data.OutputFn = PrettyOutputFn; + + error = SM_Functions(GOP_DisplayOutput, &data, sm); + console_raw(); + fcntl(fileno(stdin), F_SETFL, O_NONBLOCK); + + if (error == GE_NONE) { + + /* We do not want to see texts forever - press Ctrl+C to stop. */ + signal(SIGINT, interrupted); + + fprintf (stderr, _("Entered display monitoring mode...\n")); + fprintf (stderr, ESC "c" ); + + /* Loop here indefinitely - allows you to read texts from phone's + display. The loops ends after pressing the Ctrl+C. */ + while (!bshutdown) { + char buf[105]; + memset(&buf[0], 0, 102); + while (read(0, buf, 100) > 0) { + fprintf(stderr, "handling keys (%d).\n", strlen(buf)); + if (GSM->HandleString(buf) != GE_NONE) + fprintf(stdout, _("Key press simulation failed.\n")); + memset(buf, 0, 102); + } + SM_Loop(sm, 1); + } + fprintf (stderr, "Shutting down\n"); + + fprintf (stderr, _("Leaving display monitor mode...\n")); + data.OutputFn = NULL; + + error = SM_Functions(GOP_DisplayOutput, &data, sm); + if (error != GE_NONE) + fprintf (stderr, _("Error!\n")); + } else + fprintf (stderr, _("Error!\n")); + + GSM->Terminate(); + return 0; +} + +/* Reads profile from phone and displays its' settings */ +int getprofile(int argc, char *argv[]) +{ + int max_profiles; + int start, stop, i; + GSM_Profile profile; + GSM_Error error; + + /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */ + char model[64]; + + profile.Number = 0; + error = GSM->GetProfile(&profile); + + if (error == GE_NONE) { + + while (GSM->GetModel(model) != GE_NONE) + sleep(1); + + max_profiles = 7; /* This is correct for 6110 (at least my). How do we get + the number of profiles? */ + + /*For N5110*/ + /*FIX ME: It should be set to 3 for N5130 and 3210 too*/ + if (!strcmp(model, "NSE-1")) + max_profiles = 3; + + if (argc > 0) { + profile.Number = atoi(argv[0]) - 1; + start = profile.Number; + stop = start + 1; + + if (profile.Number < 0) { + fprintf(stderr, _("Profile number must be value from 1 to %d!\n"), max_profiles); + GSM->Terminate(); + return -1; + } + + if (profile.Number >= max_profiles) { + fprintf(stderr, _("This phone supports only %d profiles!\n"), max_profiles); + GSM->Terminate(); + return -1; + } + } else { + start = 0; + stop = max_profiles; + } + + i = start; + while (i < stop) { + profile.Number = i; + + if (profile.Number != 0) + GSM->GetProfile(&profile); + + fprintf(stdout, "%d. \"%s\"\n", profile.Number + 1, profile.Name); + if (profile.DefaultName == -1) fprintf(stdout, _(" (name defined)\n")); + + fprintf(stdout, _("Incoming call alert: %s\n"), GetProfileCallAlertString(profile.CallAlert)); + + /* For different phones different ringtones names */ + + if (!strcmp(model, "NSE-3")) + fprintf(stdout, _("Ringing tone: %s (%d)\n"), RingingTones[profile.Ringtone], profile.Ringtone); + else + fprintf(stdout, _("Ringtone number: %d\n"), profile.Ringtone); + + fprintf(stdout, _("Ringing volume: %s\n"), GetProfileVolumeString(profile.Volume)); + + fprintf(stdout, _("Message alert tone: %s\n"), GetProfileMessageToneString(profile.MessageTone)); + + fprintf(stdout, _("Keypad tones: %s\n"), GetProfileKeypadToneString(profile.KeypadTone)); + + fprintf(stdout, _("Warning and game tones: %s\n"), GetProfileWarningToneString(profile.WarningTone)); + + /* FIXME: Light settings is only used for Car */ + if (profile.Number == (max_profiles - 2)) fprintf(stdout, _("Lights: %s\n"), profile.Lights ? _("On") : _("Automatic")); + + fprintf(stdout, _("Vibration: %s\n"), GetProfileVibrationString(profile.Vibration)); + + /* FIXME: it will be nice to add here reading caller group name. */ + if (max_profiles != 3) fprintf(stdout, _("Caller groups: 0x%02x\n"), profile.CallerGroups); + + /* FIXME: Automatic answer is only used for Car and Headset. */ + if (profile.Number >= (max_profiles - 2)) fprintf(stdout, _("Automatic answer: %s\n"), profile.AutomaticAnswer ? _("On") : _("Off")); + + fprintf(stdout, "\n"); + + i++; + } + } else { + if (error == GE_NOTIMPLEMENTED) { + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + GSM->Terminate(); + return -1; + } else { + fprintf(stderr, _("Unspecified error\n")); + GSM->Terminate(); + return -1; + } + } + + GSM->Terminate(); + return 0; +} + +/* Get requested range of memory storage entries and output to stdout in + easy-to-parse format */ +int getmemory(int argc, char *argv[]) +{ + GSM_PhonebookEntry entry; + int count; + GSM_Error error; + char *memory_type_string; + int start_entry; + int end_entry; + GSM_Statemachine *sm = &State; + + /* Handle command line args that set type, start and end locations. */ + memory_type_string = argv[0]; + entry.MemoryType = StrToMemoryType(memory_type_string); + if (entry.MemoryType == GMT_XX) { + fprintf(stderr, _("Unknown memory type %s (use ME, SM, ...)!\n"), argv[0]); + return (-1); + } + + start_entry = atoi (argv[1]); + if (argc > 2) end_entry = atoi (argv[2]); + else end_entry = start_entry; + + /* Now retrieve the requested entries. */ + for (count = start_entry; count <= end_entry; count ++) { + + entry.Location = count; + + data.PhonebookEntry=&entry; + error=SM_Functions(GOP_ReadPhonebook,&data,sm); + + if (error == GE_NONE) { + fprintf(stdout, "%s;%s;%s;%d;%d\n", entry.Name, entry.Number, memory_type_string, entry.Location, entry.Group); + if (entry.MemoryType == GMT_MC || entry.MemoryType == GMT_DC || entry.MemoryType == GMT_RC) + fprintf(stdout, "%02u.%02u.%04u %02u:%02u:%02u\n", entry.Date.Day, entry.Date.Month, entry.Date.Year, entry.Date.Hour, entry.Date.Minute, entry.Date.Second); + } + else { + if (error == GE_NOTIMPLEMENTED) { + fprintf(stderr, _("Function not implemented in %s model!\n"), model); + return -1; + } + else if (error == GE_INVALIDMEMORYTYPE) { + fprintf(stderr, _("Memory type %s not supported!\n"), memory_type_string); + return -1; + } + + fprintf(stdout, _("%s|%d|Bad location or other error!(%d)\n"), memory_type_string, count, error); + } + } + return 0; +} + +/* Read data from stdin, parse and write to phone. The parsing is relatively + crude and doesn't allow for much variation from the stipulated format. */ +/* FIXME: I guess there's *very* similar code in xgnokii */ +int writephonebook(int argc, char *args[]) +{ + GSM_PhonebookEntry entry; + GSM_Error error; + char *memory_type_string; + int line_count=0; + int subentry; + + char *Line, OLine[100], BackLine[100]; + char *ptr; + + /* Check argument */ + if (argc && (strcmp("-i", args[0]))) + usage(); + + Line = OLine; + + /* Go through data from stdin. */ + while (GetLine(stdin, Line, 99)) { + strcpy(BackLine, Line); + line_count++; + + ptr = strtok(Line, ";"); + if (ptr) strcpy(entry.Name, ptr); + else entry.Name[0] = 0; + + ptr = strtok(NULL, ";"); + if (ptr) strcpy(entry.Number, ptr); + else entry.Number[0] = 0; + + ptr = strtok(NULL, ";"); + + if (!ptr) { + fprintf(stderr, _("Format problem on line %d [%s]\n"), line_count, BackLine); + Line = OLine; + continue; + } + + if (!strncmp(ptr,"ME", 2)) { + memory_type_string = "int"; + entry.MemoryType = GMT_ME; + } else { + if (!strncmp(ptr,"SM", 2)) { + memory_type_string = "sim"; + entry.MemoryType = GMT_SM; + } else { + fprintf(stderr, _("Format problem on line %d [%s]\n"), line_count, BackLine); + break; + } + } + + ptr = strtok(NULL, ";"); + if (ptr) entry.Location = atoi(ptr); + else entry.Location = 0; + + ptr = strtok(NULL, ";"); + if (ptr) entry.Group = atoi(ptr); + else entry.Group = 0; + + if (!ptr) { + fprintf(stderr, _("Format problem on line %d [%s]\n"), line_count, BackLine); + continue; + } + + for (subentry = 0; ; subentry++) { + ptr = strtok(NULL, ";"); + + if (ptr && *ptr != 0) + entry.SubEntries[subentry].EntryType = atoi(ptr); + else + break; + + ptr = strtok(NULL, ";"); + if (ptr) + entry.SubEntries[subentry].NumberType=atoi(ptr); + + /* Phone Numbers need to have a number type. */ + if (!ptr && entry.SubEntries[subentry].EntryType == GSM_Number) { + fprintf(stderr, _("Missing phone number type on line %d" + " entry %d [%s]\n"), line_count, subentry, BackLine); + subentry--; + break; + } + + ptr = strtok(NULL, ";"); + if (ptr) + entry.SubEntries[subentry].BlockNumber=atoi(ptr); + + ptr = strtok(NULL, ";"); + + /* 0x13 Date Type; it is only for Dailed Numbers, etc. + we don't store to this memories so it's an error to use it. */ + if (!ptr || entry.SubEntries[subentry].EntryType == GSM_Date) { + fprintf(stdout, _("There is no phone number on line %d entry %d [%s]\n"), + line_count, subentry, BackLine); + subentry--; + break; + } else + strcpy(entry.SubEntries[subentry].data.Number, ptr); + } + + entry.SubEntriesCount = subentry; + + /* This is to send other exports (like from 6110) to 7110 */ + if (!entry.SubEntriesCount) { + entry.SubEntriesCount = 1; + entry.SubEntries[subentry].EntryType = GSM_Number; + entry.SubEntries[subentry].NumberType = GSM_General; + entry.SubEntries[subentry].BlockNumber = 2; + strcpy(entry.SubEntries[subentry].data.Number, entry.Number); + } + + Line = OLine; + + if (argc) { + GSM_PhonebookEntry aux; + + aux.Location = entry.Location; + error = GSM->GetMemoryLocation(&aux); + + if (error == GE_NONE) { + if (!aux.Empty) { + int confirm = -1; + char ans[8]; + + fprintf(stdout, _("Location busy. ")); + while (confirm < 0) { + fprintf(stdout, _("Overwrite? (yes/no) ")); + GetLine(stdin, ans, 7); + if (!strcmp(ans, _("yes"))) confirm = 1; + else if (!strcmp(ans, _("no"))) confirm = 0; + } + if (!confirm) continue; + } + } else { + fprintf(stderr, _("Unknown error (%d)\n"), error); + GSM->Terminate(); + return 0; + } + } + + /* Do write and report success/failure. */ + error = GSM->WritePhonebookLocation(&entry); + + if (error == GE_NONE) + fprintf (stdout, _("Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n"), memory_type_string, entry.Location, entry.Name, entry.Number); + else + fprintf (stdout, _("Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n"), error, memory_type_string, entry.Location, entry.Name, entry.Number); + + } + + GSM->Terminate(); + return 0; +} + +/* Getting speed dials. */ +int getspeeddial(char *Number) +{ + GSM_SpeedDial SpeedDial; + GSM_Data data; + GSM_Error error; + + SpeedDial.Number = atoi(Number); + + if (GSM && GSM->GetSpeedDial && GSM->Terminate) { + error = GSM->GetSpeedDial(&SpeedDial); + GSM->Terminate(); + } else { + GSM_DataClear(&data); + data.SpeedDial = &SpeedDial; + + error = SM_Functions(GOP_GetSpeedDial, &data, &State); + } + + switch (error) { + case GE_NONE: + fprintf(stdout, _("SpeedDial nr. %d: %d:%d\n"), SpeedDial.Number, SpeedDial.MemoryType, SpeedDial.Location); + break; + case GE_NOTIMPLEMENTED: + fprintf(stdout, _("Function not implemented in %s !\n"), model); + break; + default: + fprintf(stdout, _("Internal error\n")); + break; + } + + return error; +} + +/* Setting speed dials. */ +int setspeeddial(char *argv[]) +{ + GSM_SpeedDial entry; + + char *memory_type_string; + + /* Handle command line args that set type, start and end locations. */ + + if (strcmp(argv[1], "ME") == 0) { + entry.MemoryType = 0x02; + memory_type_string = "ME"; + } else if (strcmp(argv[1], "SM") == 0) { + entry.MemoryType = 0x03; + memory_type_string = "SM"; + } else { + fprintf(stderr, _("Unknown memory type %s!\n"), argv[1]); + return -1; + } + + entry.Number = atoi(argv[0]); + entry.Location = atoi(argv[2]); + + if (GSM->SetSpeedDial(&entry) == GE_NONE) { + fprintf(stdout, _("Succesfully written!\n")); + } + + GSM->Terminate(); + return 0; +} + +/* Getting the status of the display. */ +int getdisplaystatus(void) +{ + int Status; + + GSM->GetDisplayStatus(&Status); + + fprintf(stdout, _("Call in progress: %s\n"), Status & (1<Terminate(); + return 0; +} + +int netmonitor(char *Mode) +{ + unsigned char mode = atoi(Mode); + char Screen[50]; + + if (!strcmp(Mode, "reset")) + mode = 0xf0; + else if (!strcmp(Mode, "off")) + mode = 0xf1; + else if (!strcmp(Mode, "field")) + mode = 0xf2; + else if (!strcmp(Mode, "devel")) + mode = 0xf3; + else if (!strcmp(Mode, "next")) + mode = 0x00; + + memset(&Screen, 0, 50); + GSM->NetMonitor(mode, Screen); + + if (Screen) + fprintf(stdout, "%s\n", Screen); + + GSM->Terminate(); + return 0; +} + +int identify(void) +{ + /* Hopefully is 64 larger as FB38_MAX* / FB61_MAX* */ + char imei[64], model[64], rev[64], manufacturer[64]; + GSM_Statemachine *sm = &State; + + data.Manufacturer=manufacturer; + data.Model=model; + data.Revision=rev; + data.Imei=imei; + + /* Retrying is bad idea: what if function is simply not implemented? + Anyway let's wait 2 seconds for the right packet from the phone. */ + sleep(2); + + strcpy(imei, "(unknown)"); + strcpy(manufacturer, "(unknown)"); + strcpy(model, "(unknown)"); + strcpy(rev, "(unknown)"); + + SM_Functions(GOP_Identify, &data, sm); + + fprintf(stdout, _("IMEI: %s\n"), imei); + fprintf(stdout, _("Manufacturer: %s\n"), manufacturer); + fprintf(stdout, _("Model: %s\n"), model); + fprintf(stdout, _("Revision: %s\n"), rev); + + //GSM->Terminate(); + + return 0; +} + +int senddtmf(char *String) +{ + GSM->SendDTMF(String); + GSM->Terminate(); + return 0; +} + +/* Resets the phone */ +int reset( char *type) +{ + unsigned char _type = 0x03; + + if (type) { + if(!strcmp(type, "soft")) + _type = 0x03; + else + if(!strcmp(type, "hard")) + _type = 0x04; + else { + fprintf(stderr, _("What kind of reset do you want??\n")); + return -1; + } + } + + GSM->Reset(_type); + GSM->Terminate(); + + return 0; +} + +/* pmon allows fbus code to run in a passive state - it doesn't worry about + whether comms are established with the phone. A debugging/development + tool. */ +int pmon(void) +{ + + GSM_Error error; + GSM_ConnectionType connection=GCT_Serial; + GSM_Statemachine sm; + + /* Initialise the code for the GSM interface. */ + error = GSM_Initialise(model, Port, Initlength, connection, NULL, &sm); + + if (error != GE_NONE) { + fprintf(stderr, _("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); + return -1; + } + + while (1) { + usleep(50000); + } + + return 0; +} + +int sendringtone(int argc, char *argv[]) +{ + GSM_Ringtone ringtone; + GSM_Error error; + + if (GSM_ReadRingtoneFile(argv[0], &ringtone)) { + fprintf(stdout, _("Failed to load ringtone.\n")); + return(-1); + } + + error = GSM->SendRingtone(&ringtone,argv[1]); + + if (error == GE_NONE) + fprintf(stdout, _("Send succeeded!\n")); + else + fprintf(stdout, _("SMS Send failed (error=%d)\n"), error); + + GSM->Terminate(); + return 0; + +} + + +int setringtone(int argc, char *argv[]) +{ + GSM_Ringtone ringtone; + GSM_Error error; + + if (GSM_ReadRingtoneFile(argv[0], &ringtone)) { + fprintf(stdout, _("Failed to load ringtone.\n")); + return(-1); + } + + error = GSM->SetRingtone(&ringtone); + + if (error == GE_NONE) + fprintf(stdout, _("Send succeeded!\n")); + else + fprintf(stdout, _("Send failed\n")); + + GSM->Terminate(); + return 0; + +} + +int presskeysequence(void) +{ + char buf[105]; + + console_raw(); + + memset(&buf[0], 0, 102); + while (read(0, buf, 100) > 0) { + fprintf(stderr, "handling keys (%d).\n", strlen(buf)); + if (GSM->HandleString(buf) != GE_NONE) + fprintf(stdout, _("Key press simulation failed.\n")); + memset(buf, 0, 102); + } + + GSM->Terminate(); + return 0; +} + +/* This is a "convenience" function to allow quick test of new API stuff which + doesn't warrant a "proper" command line function. */ +#ifndef WIN32 +int foogle(char *argv[]) +{ + /* Initialise the code for the GSM interface. */ + fbusinit(NULL); + // Fill in what you would like to test here... + return 0; +} +#endif + diff --git a/gnokiid/Makefile b/gnokiid/Makefile new file mode 100644 index 0000000..0ed1fd4 --- /dev/null +++ b/gnokiid/Makefile @@ -0,0 +1,61 @@ + +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +CFLAGS += $(PTHREAD_CFLAGS) +LDFLAGS += $(PTHREAD_LIBS) + +LDFLAGS += -L$(TOPDIR)/common -lgnokii + +OBJS = gnokiid.o + +all: gnokiid + +gnokiid: $(OBJS) $(TOPDIR)/common/data/DATA.o + +$(TOPDIR)/common/data/DATA.o: + $(MAKE) -C $(TOPDIR)/common/data DATA.o + +clean: + $(RM) $(OBJS) *~ depend gnokiid *.exe core *.bak + +install: all + $(INSTALL) -d $(sbindir) + $(INSTALL) gnokiid $(sbindir) + +install-strip: all + $(INSTALL) -d $(sbindir) + $(INSTALL) -s gnokiid $(sbindir) + @echo "done" + +install-suid: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -d $(sbindir) + $(INSTALL) -o root -g gnokii -m 4750 gnokiid $(sbindir) + @echo "done" + +install-ss: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -d $(sbindir) + $(INSTALL) -o root -g gnokii -m 4750 -s gnokiid $(sbindir) + @echo "done" + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + +.PHONY: all install clean dep depend diff --git a/gnokiid/gnokiid.c b/gnokiid/gnokiid.c new file mode 100644 index 0000000..6de7c17 --- /dev/null +++ b/gnokiid/gnokiid.c @@ -0,0 +1,140 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Mainline code for gnokiid daemon. Handles command line parsing and + various daemon functions. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:18 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.19 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + Revision 1.18 2001/02/21 19:57:09 chris + More fiddling with the directory layout + + Revision 1.17 2000/12/19 16:18:18 pkot + configure script updates and added shared function for configfile reading + + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "misc.h" +#include "cfgreader.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "data/virtmodem.h" + + +/* Global variables */ +bool DebugMode; /* When true, run in debug mode */ +char *Model; /* Model from .gnokiirc file. */ +char *Port; /* Serial port from .gnokiirc file */ +char *Initlength; /* Init length from .gnokiirc file */ +char *Connection; /* Connection type from .gnokiirc file */ +char *BinDir; /* Directory of the mgnokiidev command */ +bool TerminateThread; + +/* Local variables */ +char *DefaultConnection = "serial"; +char *DefaultBinDir = "/usr/local/sbin"; + +void version(void) +{ + + fprintf(stdout, _("gnokiid Version %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n"), VERSION, __TIME__, __DATE__, Model, Port); +} + +/* The function usage is only informative - it prints this program's usage and + command-line options.*/ + +void usage(void) +{ + + fprintf(stdout, _(" usage: gnokiid {--help|--version}\n" +" --help display usage information." +" --version displays version and copyright information." +" --debug uses stdin/stdout for virtual modem comms.\n")); +} + +/* Main function - handles command line arguments, passes them to separate + functions accordingly. */ + +int main(int argc, char *argv[]) +{ + + GSM_ConnectionType connection = GCT_Serial; + + /* For GNU gettext */ + +#ifdef USE_NLS + textdomain("gnokii"); +#endif + + if (readconfig(&Model, &Port, &Initlength, &Connection, &BinDir) < 0) { + exit(-1); + } + + + /* Handle command line arguments. */ + + if (argc >= 2 && strcmp(argv[1], "--help") == 0) { + usage(); + exit(0); + } + + /* Display version, copyright and build information. */ + + if (argc >= 2 && strcmp(argv[1], "--version") == 0) { + version(); + exit(0); + } + + if (argc >= 2 && strcmp(argv[1], "--debug") == 0) { + DebugMode = true; + } else { + DebugMode = false; + } + + if (!strcmp(Connection, "infrared")) { + connection=GCT_Infrared; + } + + TerminateThread=false; + + if (VM_Initialise(Model, Port, Initlength, connection, BinDir, DebugMode, true) == false) { + exit (-1); + } + + while (1) { + if (TerminateThread==true) { + VM_Terminate(); + exit(1); + } + sleep (1); + } + exit (0); +} diff --git a/include/cfgreader.h b/include/cfgreader.h new file mode 100644 index 0000000..252031e --- /dev/null +++ b/include/cfgreader.h @@ -0,0 +1,55 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for config file reader. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2000/12/19 16:18:19 pkot + configure script updates and added shared function for configfile reading + + +*/ + +#ifndef _CFGREADER_H +#define _CFGREADER_H + +#include "config.h" + +/* Structure definitions */ + +/* A linked list of key/value pairs */ + +struct CFG_Entry { + struct CFG_Entry *next, *prev; + char *key; + char *value; +}; + +struct CFG_Header { + struct CFG_Header *next, *prev; + struct CFG_Entry *entries; + char *section; +}; + +/* Function prototypes */ + +struct CFG_Header *CFG_ReadFile(char *filename); +char *CFG_Get(struct CFG_Header *cfg, char *section, char *key); +char *CFG_Set(struct CFG_Header *cfg, char *section, char *key, + char *value); +int CFG_WriteFile(struct CFG_Header *cfg, char *filename); +int readconfig(char **model, char **port, char **initlength, char **connection, char **bindir); + +#endif /* _CFGREADER_H */ diff --git a/include/config.h.in.in b/include/config.h.in.in new file mode 100644 index 0000000..cf4812f --- /dev/null +++ b/include/config.h.in.in @@ -0,0 +1,71 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/06/20 22:34:45 pkot + Updated Debian packaging system (Erik Rossen) + Updated Makefiles to let packaging process be easier (Pawel Kot) + + Revision 1.1 2001/01/02 09:09:09 pkot + Misc fixes and updates. + + +*/ + +/* DO NOT EDIT MANUALLY !!! */ + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define VERSION "@VERSION@" +#define XVERSION "@XVERSION@" +#define XGNOKIIDIR "@XGNOKIIPATH@/@XPACKAGE@" + +/* Define if you have timersub() */ +#undef HAVE_TIMEOPS + +/* Define if you have tm_gmtoff field in tm structure */ +#undef HAVE_TM_GMTON + +/* Define if you have cfsetspeed, cfsetispeed, cfsetospeed, c_ispeed and c_ospeed in struct termios */ +#undef HAVE_CFSETSPEED +#undef HAVE_CFSETISPEED +#undef HAVE_CFSETOSPEED +#undef HAVE_TERMIOS_CSPEED + +/* Define if you have snprintf */ +#undef HAVE_SNPRINTF + +/* Define debug level */ +#undef DEBUG +#undef XDEBUG +#undef RLP_DEBUG + +/* Decide if you want security options enabled */ +#undef SECURITY + +/* Define if you have XPM components */ +#undef XPM + +/* Define if you want NLS */ +#undef USE_NLS + +/* Define if you want to use Unix98 PTYs */ +#undef USE_UNIX98PTYS + +/* Define if you compile for M$ Windows */ +#undef WIN32 + +#endif /* __CONFIG_H__ */ diff --git a/include/data/at-emulator.h b/include/data/at-emulator.h new file mode 100644 index 0000000..2048de6 --- /dev/null +++ b/include/data/at-emulator.h @@ -0,0 +1,111 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for AT emulator code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/07/03 15:27:24 pkot + AT commands for SMS handling support (Tamas Bondar) + Small at-emulator code cleanup (me) + + Revision 1.1 2001/02/21 19:57:11 chris + More fiddling with the directory layout + + +*/ + +#ifndef __data_at_emulator_h +#define __data_at_emulator_h + + /* Prototypes */ +bool ATEM_Initialise(int read_fd, int write_fd, char *model, char *port); +void ATEM_HandleIncomingData(char *buffer, int length); +void ATEM_InitRegisters(void); +void ATEM_StringOut(char *buffer); +void ATEM_ParseAT(char *cmd_buffer); +void ATEM_ParseSMS(char *cmd_buffer); +void ATEM_ParseDIR(char *cmd_buffer); +bool ATEM_CommandPlusC(char **buf); +bool ATEM_CommandPlusG(char **buf); +int ATEM_GetNum(char **p); +void ATEM_ModemResult(int code); +void ATEM_CallPassup(char c); + + /* Global variables */ +bool ATEM_Initialised; + + /* Definition of modem result codes - these are returned to "terminal" + numerically or as a string depending on the setting of S12 */ + + /* FIX ME - Numeric values for everything except OK and ERROR + are guesses as I've not got an AT reference handy. HAB */ + +#define MR_OK (0) +#define MR_ERROR (4) +#define MR_NOCARRIER (5) +#define MR_CARRIER (2) +#define MR_CONNECT (3) +#define MR_RING (6) + + /* All defines and prototypes from here down are specific to + the at-emulator code and so are #ifdef out if __at_emulator_c isn't + defined. */ +#ifdef __data_at_emulator_c + + +#define MAX_CMD_BUFFERS (2) +#define CMD_BUFFER_LENGTH (100) + + /* Definition of some special Registers of AT-Emulator, pinched in + part from ISDN driver in Linux kernel */ +#define REG_RINGATA 0 +#define REG_RINGCNT 1 +#define REG_ESC 2 +#define REG_CR 3 +#define REG_LF 4 +#define REG_BS 5 +#define S35 6 + +#define REG_RESP 12 +#define BIT_RESP 1 +#define REG_RESPNUM 12 +#define BIT_RESPNUM 2 +#define REG_ECHO 12 +#define BIT_ECHO 4 +#define REG_DCD 12 +#define BIT_DCD 8 +#define REG_CTS 12 +#define BIT_CTS 16 +#define REG_DTRR 12 +#define BIT_DTRR 32 +#define REG_DSR 12 +#define BIT_DSR 64 +#define REG_CPPP 12 +#define BIT_CPPP 128 + + +#define MAX_MODEM_REGISTERS 20 + +/* Message format definitions */ +#define PDU_MODE 0 +#define TEXT_MODE 1 +#define INTERACT_MODE 2 + +#endif /* __data_at_emulator_c */ + +#endif /* __data_at_emulator_h */ + + + diff --git a/include/data/datapump.h b/include/data/datapump.h new file mode 100644 index 0000000..c52ebc2 --- /dev/null +++ b/include/data/datapump.h @@ -0,0 +1,48 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for data pump code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.1 2001/02/21 19:57:11 chris + More fiddling with the directory layout + + +*/ + +#ifndef __data_datapump_h +#define __data_datapump_h + + /* Prototypes */ + +void DP_CallFinished(void); +bool DP_Initialise(int read_fd, int write_fd); +int DP_CallBack(RLP_UserInds ind, u8 *buffer, int length); +void DP_CallPassup(char c); + + /* All defines and prototypes from here down are specific to + the datapump code and so are #ifdef out if __datapump_c isn't + defined. */ +#ifdef __data_datapump_c + + + + + + + +#endif /* __data_datapump_c */ + +#endif /* __data_datapump_h */ diff --git a/include/data/rlp-common.h b/include/data/rlp-common.h new file mode 100644 index 0000000..90d5771 --- /dev/null +++ b/include/data/rlp-common.h @@ -0,0 +1,198 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + The development of RLP protocol is sponsored by SuSE CR, s.r.o. (Pavel use + the SIM card from SuSE for testing purposes). + + This file: rlp-common.h Version 0.3.1 + + Header file for RLP protocol. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/06/10 11:29:49 machek + It is very bad idea to name enum "Data", because it is then impossible + to use variable called "Data". + + Revision 1.1 2001/02/21 19:57:11 chris + More fiddling with the directory layout + + +*/ + +#ifndef __data_rlp_common_h +#define __data_rlp_common_h + +#ifndef __misc_h + #include "misc.h" +#endif + +/* Global variables */ + +/* Defines */ + +/* Data types */ + +/* Typedef for frame type - they are the same for RLP version 0, 1 and 2. */ + +typedef enum { + RLPFT_X, /* Unknown. */ + RLPFT_U, /* Unnumbered frame. */ + RLPFT_S, /* Supervisory frame. */ + RLPFT_IS /* Information plus Supervisory (I+S) frame. */ +} RLP_FrameType; + +/* Define the various Unnumbered frame types. Numbering is bit reversed + relative to ETSI GSM 04.22 for easy parsing. */ + +typedef enum { + RLPU_SABM = 0x07, /* Set Asynchronous Balanced Mode. */ + RLPU_UA = 0x0c, /* Unnumbered Acknowledge. */ + RLPU_DISC = 0x08, /* Disconnect. */ + RLPU_DM = 0x03, /* Disconnected Mode. */ + RLPU_NULL = 0x0f, /* Null information. */ + RLPU_UI = 0x00, /* Unnumbered Information. */ + RLPU_XID = 0x17, /* Exchange Identification. */ + RLPU_TEST = 0x1c, /* Test. */ + RLPU_REMAP = 0x11 /* Remap. */ +} RLP_UFrameType; + +/* Define supervisory frame field. */ + +typedef enum { + RLPS_RR = 0x00, /* Receive Ready. */ + RLPS_REJ = 0x02, /* Reject. */ + RLPS_RNR = 0x01, /* Receive Not Ready. */ + RLPS_SREJ = 0x03 /* Selective Reject. */ +} RLP_SFrameField; + +/* Used for CurrentFrameType. */ + +typedef enum { + RLPFT_U_SABM = 0x00, + RLPFT_U_UA, + RLPFT_U_DISC, + RLPFT_U_DM, + RLPFT_U_NULL, + RLPFT_U_UI, + RLPFT_U_XID, + RLPFT_U_TEST, + RLPFT_U_REMAP, + RLPFT_S_RR, + RLPFT_S_REJ, + RLPFT_S_RNR, + RLPFT_S_SREJ, + RLPFT_SI_RR, + RLPFT_SI_REJ, + RLPFT_SI_RNR, + RLPFT_SI_SREJ, + RLPFT_BAD +} RLP_FrameTypes; + +/* Frame definition for TCH/F9.6 frame. */ + +typedef struct { + u8 Header[2]; + u8 Data[25]; + u8 FCS[3]; +} RLP_F96Frame; + +/* Header data "split up" for TCH/F9.6 frame. */ + +typedef struct { + u8 Ns; /* Send sequence number. */ + u8 Nr; /* Receive sequence number. */ + u8 M; /* Unumbered frame type. */ + u8 S; /* Status. */ + bool PF; /* Poll/Final. */ + bool CR; /* Command/Response. */ + RLP_FrameType Type; /* Frame type. */ +} RLP_F96Header; + + +/* RLP User requests */ + +typedef struct { + bool Conn_Req; + bool Attach_Req; + bool Conn_Req_Neg; + bool Reset_Resp; + bool Disc_Req; +} RLP_UserRequestStore; + +typedef enum { + Conn_Req, + Attach_Req, + Conn_Req_Neg, + Reset_Resp, + Disc_Req +} RLP_UserRequests; + +typedef enum { + Conn_Ind, + Conn_Conf, + Disc_Ind, + Reset_Ind, + Data, /* FIXME: This should really be called RLP_Data, otherwise it hogs name "Data"! */ + StatusChange, + GetData +} RLP_UserInds; + +/* RLP (main) states. See GSM specification 04.22 Annex A, Section A.1.1. */ + +typedef enum { + RLP_S0, /* ADM and Detached */ + RLP_S1, /* ADM and Attached */ + RLP_S2, /* Pending Connect Request */ + RLP_S3, /* Pending Connect Indication */ + RLP_S4, /* ABM and Connection Established */ + RLP_S5, /* Disconnect Initiated */ + RLP_S6, /* Pending Reset Request */ + RLP_S7, /* Pending Reset Indication */ + RLP_S8 /* Error */ +} RLP_State; + +/* RLP specification defines several states in which variables can be. */ + +typedef enum { + _idle=0, + _send, + _wait, + _rcvd, + _ackn, + _rej, + _srej +} RLP_StateVariable; + + +/* RLP Data */ + +typedef struct { + u8 Data[25]; + RLP_StateVariable State; +} RLP_Data; + + + +/* Prototypes for functions. */ + +void RLP_DisplayF96Frame(RLP_F96Frame *frame); +void RLP_DecodeF96Header(RLP_F96Frame *frame, RLP_F96Header *header); +void RLP_DisplayXID(u8 *frame); +void RLP_Initialise(bool (*rlp_send_function)(RLP_F96Frame *frame, bool out_dtx), int (*rlp_passup)(RLP_UserInds ind, u8 *buffer, int length)); +void RLP_Init_link_vars(void); +void RLP_SetUserRequest(RLP_UserRequests type, bool value); +void RLP_Send(char *buffer, int length); + +#endif /* __data_rlp_common_h */ diff --git a/include/data/rlp-crc24.h b/include/data/rlp-crc24.h new file mode 100644 index 0000000..4c62651 --- /dev/null +++ b/include/data/rlp-crc24.h @@ -0,0 +1,39 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file: rlp-crc24.h Version 0.3.1 + + Header file for CRC24 (aka FCS) implementation in RLP. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.1 2001/02/21 19:57:11 chris + More fiddling with the directory layout + + +*/ + +#ifndef __data_rlp_crc24_h +#define __data_rlp_crc24_h + +#ifndef __misc_h + #include "misc.h" +#endif + +/* Prototypes for functions */ + +void RLP_CalculateCRC24Checksum(u8 *data, int length, u8 *crc); +bool RLP_CheckCRC24FCS(u8 *data, int length); + +#endif diff --git a/include/data/virtmodem.h b/include/data/virtmodem.h new file mode 100644 index 0000000..456f880 --- /dev/null +++ b/include/data/virtmodem.h @@ -0,0 +1,47 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for virtmodem code in virtmodem.c + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.1 2001/02/21 19:57:11 chris + More fiddling with the directory layout + + +*/ + +#ifndef __data_virtmodem_h +#define __data_virtmodem_h + +/* Prototypes */ + +bool VM_Initialise(char *model, + char *port, + char *initlength, + GSM_ConnectionType connection, + char *bindir, + bool debug_mode, + bool GSM_Init); +int VM_PtySetup(char *bindir); +void VM_ThreadLoop(void); +void VM_CharHandler(void); +int VM_GetMasterPty(char **name); +void VM_Terminate(void); +GSM_Error VM_GSMInitialise(char *model, + char *port, + char *initlength, + GSM_ConnectionType connection); + +#endif /* __virtmodem_h */ diff --git a/include/device.h b/include/device.h new file mode 100644 index 0000000..52bc509 --- /dev/null +++ b/include/device.h @@ -0,0 +1,49 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file device access code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.10 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.9 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __device_h +#define __device_h + +#include +#include "misc.h" +#include "gsm-common.h" + +int device_getfd(void); + +int device_open(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake, GSM_ConnectionType device_type); +void device_close(void); +void device_reset(void); + +void device_setdtrrts(int __dtr, int __rts); +void device_changespeed(int __speed); + +size_t device_read(__ptr_t __buf, size_t __nbytes); +size_t device_write(__const __ptr_t __buf, size_t __n); + +int device_select(struct timeval *timeout); + +#endif /* __device_h */ diff --git a/include/devices/tekram.h b/include/devices/tekram.h new file mode 100644 index 0000000..3d16a3f --- /dev/null +++ b/include/devices/tekram.h @@ -0,0 +1,77 @@ +/* + * $Id$ + * + * + * G N O K I I + * + * A Linux/Unix toolset and driver for Nokia mobile phones. + * + * Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + * Copyright (C) 2000-2001 Marcel Holtmann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:21 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.1 2001/02/21 19:57:11 chris + * More fiddling with the directory layout + * + * Revision 1.1 2001/02/09 18:12:54 chris + * Marcel's tekram support + * + */ + +#ifndef __devices_tekram_h +#define __devices_tekram_h + +#ifdef WIN32 + #include + /* FIXME: this should be solved in config.h in 0.4.0 */ + #define __const const + typedef void * __ptr_t; +#else + #include +#endif /* WIN32 */ + +#include "misc.h" + + +#define TEKRAM_B115200 0x00 +#define TEKRAM_B57600 0x01 +#define TEKRAM_B38400 0x02 +#define TEKRAM_B19200 0x03 +#define TEKRAM_B9600 0x04 + +#define TEKRAM_PW 0x10 /* Pulse select bit */ + + +int tekram_open(__const char *__file); +void tekram_close(int __fd); + +void tekram_setdtrrts(int __fd, int __dtr, int __rts); +void tekram_changespeed(int __fd, int __speed); + +size_t tekram_read(int __fd, __ptr_t __buf, size_t __nbytes); +size_t tekram_write(int __fd, __const __ptr_t __buf, size_t __n); + +int tekram_select(int fd, struct timeval *timeout); + +#endif /* __devices_tekram_h */ + + + + diff --git a/include/devices/unixirda.h b/include/devices/unixirda.h new file mode 100644 index 0000000..d08c132 --- /dev/null +++ b/include/devices/unixirda.h @@ -0,0 +1,71 @@ +/* + * $Id$ + * + * G N O K I I + * + * A Linux/Unix toolset and driver for Nokia mobile phones. + * + * Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + * Copyright (C) 2000-2001 Marcel Holtmann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:21 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.2 2001/11/08 16:49:20 pkot + * Cleanups + * + * Revision 1.1 2001/02/21 19:57:11 chris + * More fiddling with the directory layout + * + * Revision 1.4 2001/02/20 21:55:12 pkot + * Small #include updates + * + * Revision 1.3 2001/02/06 21:15:37 chris + * Preliminary irda support for 7110 etc. Not well tested! + * + * Revision 1.2 2001/02/06 15:15:25 pkot + * FreeBSD unixirda.h fix (Panagiotis Astithas) + * + * Revision 1.1 2001/02/03 23:56:18 chris + * Start of work on irda support (now we just need fbus-irda.c!) + * Proper unicode support in 7110 code (from pkot) + * + */ + +#ifndef __unix_irda_h_ +#define __unix_irda_h_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "linuxirda.h" +#include "misc.h" + +int irda_open(void); +int irda_close(int fd); +int irda_write(int __fd, __const __ptr_t __bytes, int __size); +int irda_read(int __fd, __ptr_t __bytes, int __size); +int irda_select(int fd, struct timeval *timeout); + +#endif diff --git a/include/devices/unixserial.h b/include/devices/unixserial.h new file mode 100644 index 0000000..15253ef --- /dev/null +++ b/include/devices/unixserial.h @@ -0,0 +1,57 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.1 2001/02/21 19:57:12 chris + More fiddling with the directory layout + + +*/ + +#ifndef __devices_unixserial_h +#define __devices_unixserial_h + +#ifdef WIN32 + #include + /* FIXME: this should be solved in config.h in 0.4.0 */ + #define __const const + typedef void * __ptr_t; +#else + #include +#endif /* WIN32 */ + +#include "misc.h" + +int serial_open(__const char *__file, int __oflag); +int serial_close(int __fd); + +int serial_opendevice(__const char *__file, int __with_odd_parity, int __with_async, int __with_hw_handshake); + +void serial_setdtrrts(int __fd, int __dtr, int __rts); +void serial_changespeed(int __fd, int __speed); + +size_t serial_read(int __fd, __ptr_t __buf, size_t __nbytes); +size_t serial_write(int __fd, __const __ptr_t __buf, size_t __n); + +int serial_select(int fd, struct timeval *timeout); + +#endif /* __devices_unixserial_h */ + + + + diff --git a/include/fbus-6110-auth.h b/include/fbus-6110-auth.h new file mode 100644 index 0000000..1ac6624 --- /dev/null +++ b/include/fbus-6110-auth.h @@ -0,0 +1,38 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the Nokia authentication protocol. + + This code is written specially for gnokii project by Odinokov Serge. + If you have some special requests for Serge just write him to + apskaita@post.omnitel.net or serge@takas.lt + + Reimplemented in C by Pavel Janík ml. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __fbus_6110_auth_h +#define __fbus_6110_auth_h + +void FB61_GetNokiaAuth( unsigned char *Imei, + unsigned char *MagicBytes, + unsigned char *MagicResponse ); + +#endif /* __fbus_6110_auth_h */ diff --git a/include/fbus-6110-ringtones.h b/include/fbus-6110-ringtones.h new file mode 100644 index 0000000..4c20f0e --- /dev/null +++ b/include/fbus-6110-ringtones.h @@ -0,0 +1,142 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides definitions of macros from the Smart Messaging + Specification. It is mainly rewrite of the spec to C :-) Viva Nokia! + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.11 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __fbus_6110_ringtones_h +#define __fbus_6110_ringtones_h + +#include +#include +#include +#include +#include "misc.h" +#include "gsm-common.h" +#include "fbus-6110.h" + +#define GetBit(Stream,BitNr) Stream[(BitNr)/8] & 1<<(7-((BitNr)%8)) +#define SetBit(Stream,BitNr) Stream[(BitNr)/8] |= 1<<(7-((BitNr)%8)) +#define ClearBit(Stream,BitNr) Stream[(BitNr)/8] &= 255 - (1 << (7-((BitNr)%8))) + +/* These values are from Smart Messaging Specification Revision 2.0.0 pages + 3-23, ..., 3-29 */ + +/* Command-Part Encoding */ + +#define CancelCommand (0x05<<1) /* binary 0000 101 */ +#define RingingToneProgramming (0x25<<1) /* binary 0100 101 */ +#define Sound (0x1d<<1) /* binary 0011 101 */ +#define Unicode (0x22<<1) /* binary 0100 010 */ + +/* Song-Type Encoding */ + +#define BasicSongType (0x01<<5) /* binary 001 */ +#define TemporarySongType (0x02<<5) /* binary 010 */ +#define MidiSongType (0x03<<5) /* binary 011 */ +#define DigitizedSongType (0x04<<5) /* binary 100 */ + +/* Instruction ID Encoding */ + +#define PatternHeaderId (0x00<<5) /* binary 000 */ +#define NoteInstructionId (0x01<<5) /* binary 001 */ +#define ScaleInstructionId (0x02<<5) /* binary 010 */ +#define StyleInstructionId (0x03<<5) /* binary 011 */ +#define TempoInstructionId (0x04<<5) /* binary 100 */ +#define VolumeInstructionId (0x05<<5) /* binary 101 */ + +/* Style-Value Encoding*/ + +#define NaturalStyle (0x00<<6) /* binary 00 */ +#define ContinuousStyle (0x01<<6) /* binary 01 */ +#define StaccatoStyle (0x02<<6) /* binary 11 */ + +/* Note-Scale Encoding */ + +#define Scale1 (0x00<<6) /* binary 00 */ +#define Scale2 (0x01<<6) /* binary 01 */ +#define Scale3 (0x02<<6) /* binary 10 */ +#define Scale4 (0x03<<6) /* binary 11 */ + +/* Note-Value Encoding */ + +#define Note_Pause (0x00<<4) /* binary 0000 */ +#define Note_C (0x01<<4) /* binary 0001 */ +#define Note_Cis (0x02<<4) /* binary 0010 */ +#define Note_D (0x03<<4) /* binary 0011 */ +#define Note_Dis (0x04<<4) /* binary 0100 */ +#define Note_E (0x05<<4) /* binary 0101 */ +#define Note_F (0x06<<4) /* binary 0110 */ +#define Note_Fis (0x07<<4) /* binary 0111 */ +#define Note_G (0x08<<4) /* binary 1000 */ +#define Note_Gis (0x09<<4) /* binary 1001 */ +#define Note_A (0x0a<<4) /* binary 1010 */ +#define Note_Ais (0x0b<<4) /* binary 1011 */ +#define Note_H (0x0c<<4) /* binary 1100 */ + +/* Note-Duration Encoding */ + +#define Duration_Full (0x00<<5) /* binary 000 */ +#define Duration_1_2 (0x01<<5) /* binary 001 */ +#define Duration_1_4 (0x02<<5) /* binary 010 */ +#define Duration_1_8 (0x03<<5) /* binary 011 */ +#define Duration_1_16 (0x04<<5) /* binary 100 */ +#define Duration_1_32 (0x05<<5) /* binary 101 */ + +/* Note-Duration-Specifier Encoding */ + +#define NoSpecialDuration (0x00<<6) /* binary 00 */ +#define DottedNote (0x01<<6) /* binary 01 */ +#define DoubleDottedNote (0x02<<6) /* binary 10 */ +#define Length_2_3 (0x03<<6) /* binary 11 */ + +/* Pattern ID Encoding */ +#define A_part (0x00<<6) /* binary 00 */ +#define B_part (0x01<<6) /* binary 01 */ +#define C_part (0x02<<6) /* binary 10 */ +#define D_part (0x03<<6) /* binary 11 */ + +/* Command-End */ + +#define CommandEnd (0x00) /* binary 00000000 */ + +/* Definition of the Note type */ + +typedef struct { + int Scale; + int NoteID; + int Duration; + int DurationSpecifier; +} Note; + +#define FB61_MAX_RINGTONE_PACKAGE_LENGTH 200 + +/* From PC Composer help */ +#define FB61_MAX_RINGTONE_NOTES 130 + +u8 FB61_PackRingtone(GSM_Ringtone *ringtone, char *package, int *maxlength); +GSM_Error FB61_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength); +int FB61_GetDuration(int number, unsigned char *spec); +int FB61_GetNote(int number); +int FB61_GetScale(int number); + +#endif /* __fbus_6110_ringtones_h */ diff --git a/include/fbus-6110.h b/include/fbus-6110.h new file mode 100644 index 0000000..1b7b9d0 --- /dev/null +++ b/include/fbus-6110.h @@ -0,0 +1,243 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the various functions, definitions etc. used to implement + the handset interface. See fbus-6110.c for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.58 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __fbus_6110_h +#define __fbus_6110_h + +#ifndef __gsm_common_h +#include "gsm-common.h" +#endif + +#define FB61_MAX_TRANSMIT_LENGTH (256) +#define FB61_MAX_RECEIVE_LENGTH (512) +#define FB61_MAX_CONTENT_LENGTH (120) + +/* Nokia 6110 supports phonebook entries of max. 16 characters and numbers of + max. 30 digits */ + +#define FB61_MAX_PHONEBOOK_NAME_LENGTH (16) +#define FB61_MAX_PHONEBOOK_NUMBER_LENGTH (30) + +/* Alternate defines for memory types. Two letter codes follow GSM 07.07 + release 6.2.0, AT+CPBS "Select Phonebook Memory Storage" */ + +#define FB61_MEMORY_MT 0x01 /* combined ME and SIM phonebook */ +#define FB61_MEMORY_ME 0x02 /* ME (Mobile Equipment) phonebook */ +#define FB61_MEMORY_SM 0x03 /* SIM phonebook */ +#define FB61_MEMORY_FD 0x04 /* SIM fixdialling-phonebook */ +#define FB61_MEMORY_ON 0x05 /* SIM (or ME) own numbers list */ +#define FB61_MEMORY_EN 0x06 /* SIM (or ME) emergency number */ +#define FB61_MEMORY_DC 0x07 /* ME dialled calls list */ +#define FB61_MEMORY_RC 0x08 /* ME received calls list */ +#define FB61_MEMORY_MC 0x09 /* ME missed (unanswered received) calls list */ + +/* This is still unknown, it can also be unimplemented in CDS. */ + +// #define FB61_MEMORY_LD 0x?? /* SIM last-dialling-phonebook */ + +/* TA is not applicable (TA == computer) but it's here for 'completeness' */ + +// #define FB61_MEMORY_TA 0x?? /* TA (Terminal Adaptor) phonebook */ + +/* This is used when the memory type is unknown. */ + +#define FB61_MEMORY_XX 0xff + +/* Limits for IMEI, Revision and Model string storage. */ + +#define FB61_MAX_IMEI_LENGTH (20) +#define FB61_MAX_REVISION_LENGTH (20) +#define FB61_MAX_SW_LENGTH (9) +#define FB61_MAX_MODEL_LENGTH (6) + +/* This byte is used to synchronize FBUS channel over cable or IR. */ + +#define FB61_SYNC_BYTE 0x55 + +/* This byte is at the beginning of all GSM Frames sent over FBUS to Nokia + 6110 phones. */ + +#define FB61_FRAME_ID 0x1e + +/* Every (well, almost every) frame from the computer starts with this + sequence. */ + +#define FB61_FRAME_HEADER 0x00, 0x01, 0x00 + +/* The FBUS interface is 115200 */ + +#define FB61_BAUDRATE (B115200) + +/* The next two macros define the source and destination addresses used for + specifying the device connected on the cable. */ + +/* Nokia mobile phone. */ +#define FB61_DEVICE_PHONE 0x00 + +/* Our PC. */ +#define FB61_DEVICE_PC 0x0c + +/* These macros are used to specify the type of the frame. Only few types are + known yet - if you can cast some light on these, please let us known. */ + +/* Acknowledge of the received frame. */ +#define FB61_FRTYPE_ACK 0x7f + +/* Macros for infrared communication */ + +/* This byte is at the beginning of all GSM Frames sent over IR to Nokia 6110 + phones. */ + +#define FB61_IR_FRAME_ID 0x1c + +/* Infrared communication starts on 9600 bps. */ + +#define FB61_IR_INIT_SPEED (B9600) + +/* This byte is send after all FB61_SYNC_BYTE bytes. */ + +#define FB61_IR_END_INIT_BYTE 0xc1 + +/* Global variables */ + +extern bool FB61_LinkOK; +extern GSM_Functions FB61_Functions; +extern GSM_Information FB61_Information; + + +/* Prototypes for the functions designed to be used externally. */ + +GSM_Error FB61_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + +bool FB61_OpenSerial(void); +bool FB61_Open_Ir_Serial(void); +void FB61_Terminate(void); +void FB61_ThreadLoop(void); +void FB61_SigHandler(int status); +void FB61_RX_StateMachine(char rx_byte); +enum FB61_RX_States FB61_RX_DispatchMessage(void); +enum FB61_RX_States FB61_RX_HandleRLPMessage(void); +void FB61_RX_DisplayMessage(void); + +int FB61_TX_SendMessage(u16 message_length, u8 message_type, u8 *buffer); +int FB61_TX_SendAck(u8 message_type, u8 message_seq); +int FB61_TX_SendFrame(u8 message_length, u8 message_type, u8 *buffer); + +int FB61_GetMemoryType(GSM_MemoryType memory_type); +int SemiOctetPack(char *Number, unsigned char *Output); + +GSM_Error FB61_GetMemoryLocation(GSM_PhonebookEntry *entry); +GSM_Error FB61_WritePhonebookLocation(GSM_PhonebookEntry *entry); + +GSM_Error FB61_GetSpeedDial(GSM_SpeedDial *entry); +GSM_Error FB61_SetSpeedDial(GSM_SpeedDial *entry); + +GSM_Error FB61_GetMemoryStatus(GSM_MemoryStatus *Status); +GSM_Error FB61_GetSMSStatus(GSM_SMSStatus *Status); +GSM_Error FB61_GetSMSCenter(GSM_MessageCenter *MessageCenter); + +GSM_Error FB61_GetSMSMessage(GSM_SMSMessage *Message); +GSM_Error FB61_DeleteSMSMessage(GSM_SMSMessage *Message); +GSM_Error FB61_SendSMSMessage(GSM_SMSMessage *Message, int size); +GSM_Error FB61_SaveSMSMessage(GSM_SMSMessage *Message); + +GSM_Error FB61_GetRFLevel(GSM_RFUnits *units, float *level); +GSM_Error FB61_GetBatteryLevel(GSM_BatteryUnits *units, float *level); +GSM_Error FB61_GetPowerSource(GSM_PowerSource *source); +GSM_Error FB61_GetDisplayStatus(int *Status); + +GSM_Error FB61_EnterSecurityCode(GSM_SecurityCode SecurityCode); +GSM_Error FB61_GetSecurityCodeStatus(int *Status); + +GSM_Error FB61_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error FB61_SetSMSCenter(GSM_MessageCenter *MessageCenter); + +GSM_Error FB61_GetIMEI(char *imei); +GSM_Error FB61_GetRevision(char *revision); +GSM_Error FB61_GetModel(char *model); + +GSM_Error FB61_GetDateTime(GSM_DateTime *date_time); +GSM_Error FB61_SetDateTime(GSM_DateTime *date_time); + +GSM_Error FB61_GetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error FB61_SetAlarm(int alarm_number, GSM_DateTime *date_time); + +GSM_Error FB61_DialVoice(char *Number); +GSM_Error FB61_DialData(char *Number, char type, void (* callpassup)(char c)); + +GSM_Error FB61_GetIncomingCallNr(char *Number); + +GSM_Error FB61_SendBitmap(char *NetworkCode, int width, int height, + unsigned char *bitmap); +GSM_Error FB61_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo); + +GSM_Error FB61_GetCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error FB61_WriteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error FB61_DeleteCalendarNote(GSM_CalendarNote *CalendarNote); + +GSM_Error FB61_NetMonitor(unsigned char mode, char *Screen); + +GSM_Error FB61_SetBitmap( GSM_Bitmap *Bitmap ); +GSM_Error FB61_GetBitmap( GSM_Bitmap *Bitmap ); + +GSM_Error FB61_SetRingTone(GSM_Ringtone *ringtone); +GSM_Error FB61_SendRingTone(GSM_Ringtone *ringtone, char *dest); + +GSM_Error FB61_EnableDisplayOutput(); +GSM_Error FB61_DisableDisplayOutput(); + +GSM_Error FB61_EnableCellBroadcast (); +GSM_Error FB61_DisableCellBroadcast(void); +GSM_Error FB61_ReadCellBroadcast (GSM_CBMessage *Message); + +GSM_Error FB61_SendDTMF(char *String); + +GSM_Error FB61_Reset(unsigned char type); + +GSM_Error FB61_GetProfile(GSM_Profile *Profile); +GSM_Error FB61_SetProfile(GSM_Profile *Profile); +bool FB61_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx); + +GSM_Error FB61_CancelCall(void); +GSM_Error FB61_AnswerCall(char s); + +/* States for receive code. */ + +enum FB61_RX_States { + FB61_RX_Sync, + FB61_RX_Discarding, + FB61_RX_GetDestination, + FB61_RX_GetSource, + FB61_RX_GetType, + FB61_RX_GetUnknown, + FB61_RX_GetLength, + FB61_RX_GetMessage +}; + +GSM_Error FB61_TX_SendStatusRequest(void); + +#endif /* __fbus_6110_h */ diff --git a/include/gnokii.h b/include/gnokii.h new file mode 100644 index 0000000..9787065 --- /dev/null +++ b/include/gnokii.h @@ -0,0 +1,257 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for test utility. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.27 2001/09/14 12:53:00 pkot + New preview logos. + Localization fixes. + Set valid operator on logos xgnokii screen. + + Revision 1.26 2001/04/23 17:20:02 pkot + Added possibility for viewing logos (currently nol and ngg) on console (Bartek Klepacz) + + Revision 1.25 2001/01/15 17:00:51 pkot + Initial keypress sequence support. Disable compilation warning + + Revision 1.24 2000/12/19 16:18:19 pkot + configure script updates and added shared function for configfile reading + + +*/ + +/* Prototypes */ + +int monitormode(void); + +#ifdef SECURITY + int entersecuritycode(char *type); + int getsecuritycodestatus(void); +#endif + +int getmemory(int argc, char *argv[]); +int writephonebook(int argc, char *argv[]); +int getspeeddial(char *number); +int setspeeddial(char *argv[]); +int getsms(int argc, char *argv[]); +int deletesms(int argc, char *argv[]); +int sendsms(int argc, char *argv[]); +int savesms(int argc, char *argv[]); +int sendlogo(int argc, char *argv[]); +int sendringtone(int argc, char *argv[]); +int getsmsc(char *mcn); +int setdatetime(int argc, char *argv[]); +int getdatetime(void); +int setalarm(char *argv[]); +int getalarm(void); +int dialvoice(char *number); +int getcalendarnote(int argc, char *argv[]); +int writecalendarnote(char *argv[]); +int deletecalendarnote(int argc, char *argv[]); +int getdisplaystatus(); +int netmonitor(char *_mode); +int identify(void); +int senddtmf(char *String); +int foogle(char *argv[]); +int pmon(void); +int setlogo(int argc, char *argv[]); +int getlogo(int argc, char *argv[]); +int viewlogo(char *); +int setringtone(int argc, char *argv[]); +int reset(char *type); +int getprofile(int argc, char *argv[]); +int displayoutput(); +int presskeysequence(); + +typedef enum { + OPT_HELP, + OPT_VERSION, + OPT_MONITOR, + OPT_ENTERSECURITYCODE, + OPT_GETSECURITYCODESTATUS, + OPT_SETDATETIME, + OPT_GETDATETIME, + OPT_SETALARM, + OPT_GETALARM, + OPT_DIALVOICE, + OPT_GETCALENDARNOTE, + OPT_WRITECALENDARNOTE, + OPT_DELCALENDARNOTE, + OPT_GETDISPLAYSTATUS, + OPT_GETMEMORY, + OPT_WRITEPHONEBOOK, + OPT_GETSPEEDDIAL, + OPT_SETSPEEDDIAL, + OPT_GETSMS, + OPT_DELETESMS, + OPT_SENDSMS, + OPT_SAVESMS, + OPT_SENDLOGO, + OPT_SENDRINGTONE, + OPT_GETSMSC, + OPT_GETWELCOMENOTE, + OPT_SETWELCOMENOTE, + OPT_PMON, + OPT_NETMONITOR, + OPT_IDENTIFY, + OPT_SENDDTMF, + OPT_RESET, + OPT_SETLOGO, + OPT_GETLOGO, + OPT_VIEWLOGO, + OPT_SETRINGTONE, + OPT_GETPROFILE, + OPT_DISPLAYOUTPUT, + OPT_KEYPRESS, + OPT_FOOGLE +} opt_index; + +struct gnokii_arg_len { + int gal_opt; + int gal_min; + int gal_max; + int gal_flags; +}; + +/* This is used for checking correct argument count. If it is used then if + the user specifies some argument, their count should be equivalent to the + count the programmer expects. */ + +#define GAL_XOR 0x01 + +/* Constants for Profiles. */ + +#define PROFILE_OFF 0x00 +#define PROFILE_ON 0x01 + +#define PROFILE_MESSAGE_NOTONE 0x00 +#define PROFILE_MESSAGE_STANDARD 0x01 +#define PROFILE_MESSAGE_SPECIAL 0x02 +#define PROFILE_MESSAGE_BEEPONCE 0x03 +#define PROFILE_MESSAGE_ASCENDING 0x04 + +#define PROFILE_WARNING_OFF 0xff +#define PROFILE_WARNING_ON 0x04 + +/* FIXME: Are these values correct or not? */ + +#define PROFILE_VIBRATION_OFF 0x00 +#define PROFILE_VIBRATION_ON 0x01 + +#define PROFILE_CALLALERT_RINGING 0x01 +#define PROFILE_CALLALERT_BEEPONCE 0x02 +#define PROFILE_CALLALERT_OFF 0x04 +#define PROFILE_CALLALERT_RINGONCE 0x05 +#define PROFILE_CALLALERT_ASCENDING 0x06 +#define PROFILE_CALLALERT_CALLERGROUPS 0x07 + +#define PROFILE_KEYPAD_OFF 0xff +#define PROFILE_KEYPAD_LEVEL1 0x00 +#define PROFILE_KEYPAD_LEVEL2 0x01 +#define PROFILE_KEYPAD_LEVEL3 0x02 +//in 5110 I had also once 0x03 + +#define PROFILE_VOLUME_LEVEL1 0x06 +#define PROFILE_VOLUME_LEVEL2 0x07 +#define PROFILE_VOLUME_LEVEL3 0x08 +#define PROFILE_VOLUME_LEVEL4 0x09 +#define PROFILE_VOLUME_LEVEL5 0x0a + +/* Nokia ringtones codes. */ + +char *RingingTones[] = { +/* 0 */ "Unknown", +/* 1 */ "Unknown", /* FIXME: probably not set. */ +/* 2 */ "Unknown", +/* 3 */ "Unknown", +/* 4 */ "Unknown", +/* 5 */ "Unknown", +/* 6 */ "Unknown", +/* 7 */ "Unknown", +/* 8 */ "Unknown", +/* 9 */ "Unknown", +/* 10 */ "Unknown", /* FIXME: probably pre set. */ +/* 11 */ "Unknown", +/* 12 */ "Unknown", +/* 13 */ "Unknown", +/* 14 */ "Unknown", +/* 15 */ "Unknown", +/* 16 */ "Unknown", +/* 17 */ "Uploaded", +/* 18 */ "Ring ring", +/* 19 */ "Low", +/* 20 */ "Fly", +/* 21 */ "Mosquito", +/* 22 */ "Bee", +/* 23 */ "Intro", +/* 24 */ "Etude", +/* 25 */ "Hunt", +/* 26 */ "Going up", +/* 27 */ "City Bird", +/* 28 */ "Unknown", +/* 29 */ "Unknown", +/* 30 */ "Chase", +/* 31 */ "Unknown", +/* 32 */ "Scifi", +/* 33 */ "Unknown", +/* 34 */ "Kick", +/* 35 */ "Do-mi-so", +/* 36 */ "Robo N1X", +/* 37 */ "Dizzy", +/* 38 */ "Unknown", +/* 39 */ "Playground", +/* 40 */ "Unknown", +/* 41 */ "Unknown", +/* 42 */ "Unknown", +/* 43 */ "That's it!", +/* 44 */ "Unknown", +/* 45 */ "Unknown", +/* 46 */ "Unknown", +/* 47 */ "Grande valse", /* FIXME: Knock knock (Knock again). */ +/* 48 */ "Helan", /* FIXME: Grand valse on 5110. */ +/* 49 */ "Fuga", /* FIXME: Helan on 5110. */ +/* 50 */ "Menuet", /* FIXME: Fuga on 5110. */ +/* 51 */ "Ode to Joy", +/* 52 */ "Elise", +/* 53 */ "Mozart 40", +/* 54 */ "Piano Concerto", /* FIXME: Mozart 40 on 5110. */ +/* 55 */ "William Tell", +/* 56 */ "Badinerie", /* FIXME: William Tell on 5110. */ +/* 57 */ "Polka", /* FIXME: Badinerie on 5110. */ +/* 58 */ "Attraction", /* FIXME: Polka on 5110. */ +/* 59 */ "Unknown", /* FIXME: Attraction on 5110. */ +/* 60 */ "Polite", /* FIXME: Down on 5110. */ +/* 61 */ "Persuasion", +/* 62 */ "Unknown", /* FIXME: Persuasion on 5110. */ +/* 63 */ "Unknown", +/* 64 */ "Unknown", +/* 65 */ "Unknown", +/* 66 */ "Unknown", +/* 67 */ "Tick tick", +/* 68 */ "Samba", +/* 69 */ "Unknown", /* FIXME: Samba on 5110. */ +/* 70 */ "Orient", +/* 71 */ "Charleston", /* FIXME: Orient on 5110. */ +/* 72 */ "Unknown", /* FIXME: Charleston on 5110. */ +/* 73 */ "Jumping", /* FIXME: Songette on 5110. */ +/* 74 */ "Unknown", /* FIXME: Jumping on 5110. */ +/* 75 */ "Unknown", /* FIXME: Lamb (Marry) on 5110. */ +/* 76 */ "Unknown", +/* 77 */ "Unknown", +/* 78 */ "Unknown", +/* 79 */ "Unknown", +/* 80 */ "Unknown" /* FIXME: Tango (Tangoed) on 5110. */ +}; diff --git a/include/gsm-api.h b/include/gsm-api.h new file mode 100644 index 0000000..84a828a --- /dev/null +++ b/include/gsm-api.h @@ -0,0 +1,57 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the various functions, definitions etc. used to implement + the handset interface. See gsm-api.c for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.14 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __gsm_api_h +#define __gsm_api_h + +/* If gsm-common.h isn't included at this point, little in this file will make + sense so we include it here if required. */ + +#ifndef __gsm_common_h + #include "gsm-common.h" +#endif + +/* Ditto rlp_common.h... */ +#ifndef __data_rlp_common_h + #include "data/rlp-common.h" +#endif + +#include "gsm-statemachine.h" + +/* Define these as externs so that app code can pick them up. */ + +extern bool *GSM_LinkOK; +extern GSM_Information *GSM_Info; +extern GSM_Functions *GSM; +extern GSM_Error (*GSM_F)(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); + +/* Prototype for the functions actually provided by gsm-api.c. */ + +GSM_Error GSM_Initialise(char *model, char *device, char *initlength, GSM_ConnectionType connection, void (*rlp_handler)(RLP_F96Frame *frame), GSM_Statemachine *sm); + +/* All the rest of the API functions are contained in the GSM_Function + structure which ultimately points into the model specific code. */ + +#endif /* __gsm_api_h */ diff --git a/include/gsm-bitmaps.h b/include/gsm-bitmaps.h new file mode 100644 index 0000000..b0b7628 --- /dev/null +++ b/include/gsm-bitmaps.h @@ -0,0 +1,48 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Functions for common bitmap operations. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/11/20 16:22:22 pkot + First attempt to read Picture Messages. They should appear when you enable DEBUG. Nokia seems to break own standards. :/ (Markus Plail) + + Revision 1.3 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __gsm_bitmaps_h__ +#define __gsm_bitmaps_h__ + +void GSM_SetPointBitmap(GSM_Bitmap *bmp, int x, int y); +void GSM_ClearPointBitmap(GSM_Bitmap *bmp, int x, int y); +bool GSM_IsPointBitmap(GSM_Bitmap *bmp, int x, int y); +void GSM_ClearBitmap(GSM_Bitmap *bmp); +void GSM_ResizeBitmap(GSM_Bitmap *bitmap, GSM_Bitmap_Types target, GSM_Information *info); +void GSM_PrintBitmap(GSM_Bitmap *bitmap); + +/* SMS bitmap functions */ + +GSM_Error GSM_ReadSMSBitmap(int type, char *message, char *code, GSM_Bitmap *bitmap); +int GSM_SaveSMSBitmap(GSM_SMSMessage *message, GSM_Bitmap *bitmap); + +#endif + + + + + diff --git a/include/gsm-common.h b/include/gsm-common.h new file mode 100644 index 0000000..6e25ba7 --- /dev/null +++ b/include/gsm-common.h @@ -0,0 +1,715 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the definitions, enums etc. that are used by all models of + handset. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.83 2001/11/17 20:18:33 pkot + Added dau9p connection type for 6210/7110 + + Revision 1.82 2001/11/13 16:12:21 pkot + Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates + + Revision 1.81 2001/11/08 16:34:20 pkot + Updates to work with new libsms + + Revision 1.80 2001/08/20 23:36:27 pkot + More cleanup in AT code (Manfred Jonsson) + + Revision 1.79 2001/07/27 00:02:22 pkot + Generic AT support for the new structure (Manfred Jonsson) + + Revision 1.78 2001/06/28 00:28:45 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __gsm_common_h +#define __gsm_common_h + +#include + +#include "data/rlp-common.h" +#include "gsm-sms.h" + +/* Type of connection. Now we support serial connection with FBUS cable and + IR (only with 61x0 models) */ + +typedef enum { + GCT_Serial, /* Serial connection. */ + GCT_DAU9P, /* Serial connection using DAU9P cable; use only with 6210/7110 if you want faster initialization */ + GCT_Infrared, /* Infrared connection. */ + GCT_Tekram, /* Tekram Ir-Dongle */ + GCT_Irda +} GSM_ConnectionType; + +/* Maximum length of device name for serial port */ + +#define GSM_MAX_DEVICE_NAME_LENGTH (100) + +/* Define an enum for specifying memory types for retrieving phonebook + entries, SMS messages etc. This type is not mobile specific - the model + code should take care of translation to mobile specific numbers - see 6110 + code. + 01/07/99: Two letter codes follow GSM 07.07 release 6.2.0 +*/ + +typedef enum { + GMT_ME, /* Internal memory of the mobile equipment */ + GMT_SM, /* SIM card memory */ + GMT_FD, /* Fixed dial numbers */ + GMT_ON, /* Own numbers */ + GMT_EN, /* Emergency numbers */ + GMT_DC, /* Dialled numbers */ + GMT_RC, /* Received numbers */ + GMT_MC, /* Missed numbers */ + GMT_LD, /* Last dialed */ + GMT_MT, /* combined ME and SIM phonebook */ + GMT_TA, /* for compatibility only: TA=computer memory */ + GMT_CB, /* Currently selected memory */ + GMT_XX = 0xff /* Error code for unknown memory type (returned by fbus-xxxx functions). */ +} GSM_MemoryType; + +/* Power source types */ + +typedef enum { + GPS_ACDC=1, /* AC/DC powered (charging) */ + GPS_BATTERY /* Internal battery */ +} GSM_PowerSource; + +/* Definition of security codes. */ + +typedef enum { + GSCT_SecurityCode = 0x01, /* Security code. */ + GSCT_Pin, /* PIN. */ + GSCT_Pin2, /* PIN 2. */ + GSCT_Puk, /* PUK. */ + GSCT_Puk2, /* PUK 2. */ + GSCT_None /* Code not needed. */ +} GSM_SecurityCodeType; + +/* Security code definition. */ + +typedef struct { + GSM_SecurityCodeType Type; /* Type of the code. */ + char Code[10]; /* Actual code. */ +} GSM_SecurityCode; + +/* This structure is used to get the current network status */ + +typedef struct { + char NetworkCode[10]; /* GSM network code */ + char CellID[10]; /* CellID */ + char LAC[10]; /* LAC */ +} GSM_NetworkInfo; + +/* Limits for sizing of array in GSM_PhonebookEntry. Individual handsets may + not support these lengths so they have their own limits set. */ + +#define GSM_MAX_PHONEBOOK_NAME_LENGTH (50) /* For 7110 */ +#define GSM_MAX_PHONEBOOK_NUMBER_LENGTH (48) /* For 7110 */ +#define GSM_MAX_PHONEBOOK_TEXT_LENGTH (60) /* For 7110 */ +#define GSM_MAX_PHONEBOOK_SUB_ENTRIES (8) /* For 7110 */ + /* 7110 is able to in one + * entry 5 numbers and 2 + * texts [email,notice,postal] */ + +/* Here is a macro for models that do not support caller groups. */ + +#define GSM_GROUPS_NOT_SUPPORTED -1 + +/* This data type is used to report the number of used and free positions in + memory (sim or internal). */ + +typedef struct { + GSM_MemoryType MemoryType; /* Type of the memory */ + int Used; /* Number of used positions */ + int Free; /* Number of free positions */ +} GSM_MemoryStatus; + +/* Some phones (at the moment 6210/7110) supports extended phonebook + with additional data. Here we have structures for them */ + +typedef enum { + GSM_General = 0x0a, + GSM_Mobile = 0x03, + GSM_Work = 0x06, + GSM_Fax = 0x04, + GSM_Home = 0x02 +} GSM_Number_Type; + +typedef enum { + GSM_Number = 0x0b, + GSM_Note = 0x0a, + GSM_Postal = 0x09, + GSM_Email = 0x08, + GSM_Name = 0x07, + GSM_Date = 0x13 /* Date is used for DC,RC,etc (last calls) */ +} GSM_EntryType; + +typedef struct { + bool AlarmEnabled; /* Is alarm set ? */ + int Year; /* The complete year specification - e.g. 1999. Y2K :-) */ + int Month; /* January = 1 */ + int Day; + int Hour; + int Minute; + int Second; + int Timezone; /* The difference between local time and GMT */ +} GSM_DateTime; + +typedef struct { + GSM_EntryType EntryType; + GSM_Number_Type NumberType; + union { + char Number[GSM_MAX_PHONEBOOK_TEXT_LENGTH + 1]; /* Number */ + GSM_DateTime Date; /* or the last calls list */ + } data; + int BlockNumber; +} GSM_SubPhonebookEntry; + +/* Define datatype for phonebook entry, used for getting/writing phonebook + entries. */ + +typedef struct { + bool Empty; /* Is this entry empty? */ + char Name[GSM_MAX_PHONEBOOK_NAME_LENGTH + 1]; /* Plus 1 for + nullterminator. */ + char Number[GSM_MAX_PHONEBOOK_NUMBER_LENGTH + 1]; /* Number */ + GSM_MemoryType MemoryType; /* Type of memory */ + int Group; /* Group */ + int Location; /* Location */ + GSM_DateTime Date; /* The record date and time + of the number. */ + GSM_SubPhonebookEntry SubEntries[GSM_MAX_PHONEBOOK_SUB_ENTRIES]; + /* For phones with + * additional phonebook + * entries */ + int SubEntriesCount; /* Should be 0, if extended + phonebook is not used */ +} GSM_PhonebookEntry; + +/* This define speed dialing entries. */ + +typedef struct { + int Number; /* Which number is used to dialing? */ + GSM_MemoryType MemoryType; /* Memory type of the number. */ + int Location; /* Location of the number in MemoryType. */ +} GSM_SpeedDial; + +/* Define enum used to describe what sort of date/time support is + available. */ + +typedef enum { + GDT_None, /* The mobile phone doesn't support time and date. */ + GDT_TimeOnly, /* The mobile phone supports only time. */ + GDT_DateOnly, /* The mobile phone supports only date. */ + GDT_DateTime /* Wonderful phone - it supports date and time. */ +} GSM_DateTimeSupport; + +/* Define enums for RF units. GRF_CSQ asks for units in form used + in AT+CSQ command as defined by GSM 07.07 */ + +typedef enum { + GRF_Arbitrary, + GRF_dBm, + GRF_mV, + GRF_uV, + GRF_CSQ, + GRF_Percentage +} GSM_RFUnits; + +/* Define enums for Battery units. */ + +typedef enum { + GBU_Arbitrary, + GBU_Volts, + GBU_Minutes, + GBU_Percentage +} GSM_BatteryUnits; + +/* Define enums for Calendar Note types */ + +typedef enum { + GCN_REMINDER=1, /* Reminder */ + GCN_CALL, /* Call */ + GCN_MEETING, /* Meeting */ + GCN_BIRTHDAY /* Birthday */ +} GSM_CalendarNoteType; + +/* Calendar note type */ + +typedef struct { + int Location; /* The number of the note in the phone memory */ + GSM_CalendarNoteType Type; /* The type of the note */ + GSM_DateTime Time; /* The time of the note */ + GSM_DateTime Alarm; /* The alarm of the note */ + char Text[20]; /* The text of the note */ + char Phone[20]; /* For Call only: the phone number */ + double Recurance; /* Recurance of the note */ +} GSM_CalendarNote; + +/* This structure is provided to allow common information about the particular + model to be looked up in a model independant way. Some of the values here + define minimum and maximum levels for values retrieved by the various Get + functions for example battery level. They are not defined as constants to + allow model specific code to set them during initialisation */ + +typedef struct { + + char *Models; /* Models covered by this type, pipe '|' delimited. */ + +/* Minimum and maximum levels for RF signal strength. Units are as per the + setting of RFLevelUnits. The setting of RFLevelUnits indicates the + default or "native" units used. In the case of the 3110 and 6110 series + these are arbitrary, ranging from 0 to 4. */ + + float MaxRFLevel; + float MinRFLevel; + GSM_RFUnits RFLevelUnits; + +/* Minimum and maximum levels for battery level. Again, units are as per the + setting of GSM_BatteryLevelUnits. The value that BatteryLevelUnits is set + to indicates the "native" or default value that the phone supports. In the + case of the 3110 and 6110 series these are arbitrary, ranging from 0 to 4. */ + + float MaxBatteryLevel; + float MinBatteryLevel; + GSM_BatteryUnits BatteryLevelUnits; + +/* FIXME: some very similar code is in common/misc.c */ + +/* Information about date, time and alarm support. In case of alarm + information we provide value for the number of alarms supported. */ + + GSM_DateTimeSupport DateTimeSupport; + GSM_DateTimeSupport AlarmSupport; + int MaximumAlarms; + u8 StartupLogoH; /* Logo Widths and Heights - if supported */ + u8 StartupLogoW; + u8 OpLogoH; + u8 OpLogoW; + u8 CallerLogoH; + u8 CallerLogoW; +} GSM_Information; + +/* This enum is used for display status. */ + +typedef enum { + DS_Call_In_Progress, /* Call in progress. */ + DS_Unknown, /* The meaning is unknown now :-( */ + DS_Unread_SMS, /* There is Unread SMS. */ + DS_Voice_Call, /* Voice call active. */ + DS_Fax_Call, /* Fax call active. */ + DS_Data_Call, /* Data call active. */ + DS_Keyboard_Lock, /* Keyboard lock status. */ + DS_SMS_Storage_Full /* Full SMS Memory. */ +} DisplayStatusEntity; + +/* Bitmap types. */ + +typedef enum { + GSM_None=0, + GSM_StartupLogo, + GSM_OperatorLogo, + GSM_CallerLogo, + GSM_PictureImage, + GSM_WelcomeNoteText, + GSM_DealerNoteText +} GSM_Bitmap_Types; + +#define GSM_MAX_BITMAP_SIZE 864 + +/* Structure to hold incoming/outgoing bitmaps (and welcome-notes). */ + +typedef struct { + u8 height; /* Bitmap height (pixels) */ + u8 width; /* Bitmap width (pixels) */ + u16 size; /* Bitmap size (bytes) */ + GSM_Bitmap_Types type; /* Bitmap type */ + char netcode[7]; /* Network operator code */ + char text[256]; /* Text used for welcome-note or callergroup name */ + char dealertext[256]; /* Text used for dealer welcome-note */ + bool dealerset; /* Is dealer welcome-note set now ? */ + unsigned char bitmap[GSM_MAX_BITMAP_SIZE]; /* Actual Bitmap */ + char number; /* Caller group number */ + char ringtone; /* Ringtone no sent with caller group */ +} GSM_Bitmap; + + +/* NoteValue is encoded as octave(scale)*14 + note */ +/* where for note: c=0, d=2, e=4 .... */ +/* ie. c#=1 and 5 and 13 are invalid */ +/* note=255 means a pause */ + +#define MAX_RINGTONE_NOTES 256 + +/* Structure to hold note of ringtone. */ + +typedef struct { + u8 duration; + u8 note; +} GSM_RingtoneNote; + +/* Structure to hold ringtones. */ + +typedef struct { + char name[20]; + u8 tempo; + u8 NrNotes; + GSM_RingtoneNote notes[MAX_RINGTONE_NOTES]; +} GSM_Ringtone; + +/* Structure to hold profile entries. */ + +typedef struct { + int Number; /* The number of the profile. */ + char Name[40]; /* The name of the profile. */ + int DefaultName; /* 0-6, when default name is used, -1, when not. */ + int KeypadTone; /* Volume level for keypad tones. */ + int Lights; /* Lights on/off. */ + int CallAlert; /* Incoming call alert. */ + int Ringtone; /* Ringtone for incoming call alert. */ + int Volume; /* Volume of the ringing. */ + int MessageTone; /* The tone for message indication. */ + int WarningTone; /* The tone for warning messages. */ + int Vibration; /* Vibration? */ + int CallerGroups; /* CallerGroups. */ + int AutomaticAnswer; /* Does the phone auto-answer incoming call? */ +} GSM_Profile; + + +#define FO_SUBMIT 0x01 +#define FO_RD 0x40 +#define FO_VPF_NONE 0x00 +#define FO_VPF_REL 0x10 +#define FO_VPF_ABS 0x18 +#define FO_VPF_ENH 0x08 +#define FO_SRR 0x20 +#define FO_UDHI 0x40 +#define FO_RP 0x80 +#define FO_DEFAULT (FO_SUBMIT | FO_VPF_REL | FO_SRR) + +#define PID_DEFAULT 0x00 +#define PID_TYPE0 0x40 +#define PID_REPLACE1 0x41 +#define PID_REPLACE2 0x42 +#define PID_REPLACE3 0x43 +#define PID_REPLACE4 0x44 +#define PID_REPLACE5 0x45 +#define PID_REPLACE6 0x46 +#define PID_REPLACE7 0x47 +#define PID_RETURN_CALL 0x5f + +#define DCS_DEFAULT 0x00 +#define DCS_MSG_WAIT_VOICE_DISCARD 0xc8 +#define DCS_MSG_WAIT_VOICE_OFF 0xc0 +#define DCS_MSG_WAIT_VOICE_STORE 0xd8 +#define DCS_DATA 0xf4 +#define DCS_CLASS0 0xf0 +#define DCS_CLASS1 0xf1 +#define DCS_CLASS2 0xf2 +#define DCS_CLASS3 0xf3 + +/* Limits for IMEI, Revision and Model string storage. */ +#define GSM_MAX_IMEI_LENGTH (20) +#define GSM_MAX_REVISION_LENGTH (6) +#define GSM_MAX_MODEL_LENGTH (6) + + + +/* This is a generic holder for high level information - eg a GSM_Bitmap */ + +typedef struct { + SMS_Folder *SMSFolder; + SMS_FolderList *SMSFolderList; + GSM_SMSMessage *SMSMessage; + GSM_PhonebookEntry *PhonebookEntry; + GSM_SpeedDial *SpeedDial; + GSM_MemoryStatus *MemoryStatus; + GSM_SMSMemoryStatus *SMSStatus; + SMS_MessageCenter *MessageCenter; + char *Imei; + char *Revision; + char *Model; + char *Manufacturer; + GSM_NetworkInfo *NetworkInfo; + GSM_CalendarNote *CalendarNote; + GSM_Bitmap *Bitmap; + GSM_Ringtone *Ringtone; + GSM_Profile *Profile; + GSM_BatteryUnits *BatteryUnits; + float *BatteryLevel; + GSM_RFUnits *RFUnits; + float *RFLevel; + GSM_Error (*OutputFn)(char *Display, char *Indicators); + char *IncomingCallNr; + GSM_PowerSource *PowerSource; + GSM_DateTime *DateTime; +} GSM_Data; + + +/* Global structures intended to be independant of phone etc */ +/* Obviously currently rather Nokia biased but I think most things */ +/* (eg at commands) can be enumerated */ + + +/* A structure to hold information about the particular link */ +/* The link comes 'under' the phone */ +typedef struct { + char PortDevice[20]; /* The port device */ + int InitLength; /* Number of chars sent to sync the serial port */ + GSM_ConnectionType ConnectionType; /* Connection type, serial, ir etc */ + + /* A regularly called loop function */ + /* timeout can be used to make the function block or not */ + GSM_Error (*Loop)(struct timeval *timeout); + + /* A pointer to the function used to send out a message */ + /* This is used by the phone specific code to send a message over the link */ + GSM_Error (*SendMessage)(u16 messagesize, u8 messagetype, void *message); + +} GSM_Link; + + +/* Small structure used in GSM_Phone */ +/* Messagetype is passed to the function in case it is a 'generic' one */ +typedef struct { + u8 MessageType; + GSM_Error (*Functions)(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +} GSM_IncomingFunctionType; + +typedef enum { + GOP_Init, + GOP_GetModel, + GOP_GetRevision, + GOP_GetImei, + GOP_GetManufacturer, + GOP_Identify, + GOP_GetBitmap, + GOP_SetBitmap, + GOP_GetBatteryLevel, + GOP_GetRFLevel, + GOP_DisplayOutput, + GOP_GetMemoryStatus, + GOP_ReadPhonebook, + GOP_WritePhonebook, + GOP_GetPowersource, + GOP_GetAlarm, + GOP_GetSMSStatus, + GOP_GetIncomingCallNr, + GOP_GetNetworkInfo, + GOP_GetSMS, + GOP_DeleteSMS, + GOP_SendSMS, + GOP_GetSpeedDial, + GOP_GetSMSCenter, + GOP_GetDateTime, + GOP_GetCalendarNote, + GOP_Max, /* don't append anything after this entry */ +} GSM_Operation; + +/* This structure contains the 'callups' needed by the statemachine */ +/* to deal with messages from the phone and other information */ + +typedef struct _GSM_Statemachine GSM_Statemachine; + +typedef struct { + /* These make up a list of functions, one for each message type and NULL terminated */ + GSM_IncomingFunctionType *IncomingFunctions; + GSM_Error (*DefaultFunction)(int messagetype, unsigned char *buffer, int length); + GSM_Information Info; + GSM_Error (*Functions)(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); +} GSM_Phone; + + +/* The states the statemachine can take */ + +typedef enum { + Startup, /* Not yet initialised */ + Initialised, /* Ready! */ + MessageSent, /* A command has been sent to the link(phone) */ + WaitingForResponse, /* We are waiting for a response from the link(phone) */ + ResponseReceived /* A response has been received - waiting for the phone layer to collect it */ +} GSM_State; + +/* How many message types we can wait for at one */ +#define SM_MAXWAITINGFOR 3 + + +/* All properties of the state machine */ + +struct _GSM_Statemachine{ + GSM_State CurrentState; + GSM_Link Link; + GSM_Phone Phone; + + /* Store last message for resend purposes */ + u8 LastMsgType; + u16 LastMsgSize; + void *LastMsg; + + /* The responses we are waiting for */ + unsigned char NumWaitingFor; + unsigned char NumReceived; + unsigned char WaitingFor[SM_MAXWAITINGFOR]; + GSM_Error ResponseError[SM_MAXWAITINGFOR]; + /* Data structure to be filled in with the response */ + GSM_Data *Data[SM_MAXWAITINGFOR]; +}; + + + +/* Define the structure used to hold pointers to the various API functions. + This is in effect the master list of functions provided by the gnokii API. + Modules containing the model specific code each contain one of these + structures which is "filled in" with the corresponding function within the + model specific code. If a function is not supported or not implemented, a + generic not implemented function is used to return a GE_NOTIMPLEMENTED + error code. */ + +typedef struct { + + /* FIXME: comment this. */ + + GSM_Error (*Initialise)( char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + + void (*Terminate)(void); + + GSM_Error (*GetMemoryLocation)( GSM_PhonebookEntry *entry ); + + GSM_Error (*WritePhonebookLocation)( GSM_PhonebookEntry *entry ); + + GSM_Error (*GetSpeedDial)( GSM_SpeedDial *entry); + + GSM_Error (*SetSpeedDial)( GSM_SpeedDial *entry); + + GSM_Error (*GetMemoryStatus)( GSM_MemoryStatus *Status); + + GSM_Error (*GetSMSStatus)( GSM_SMSMemoryStatus *Status); + + GSM_Error (*GetSMSCenter)( SMS_MessageCenter *MessageCenter ); + + GSM_Error (*SetSMSCenter)( SMS_MessageCenter *MessageCenter ); + + GSM_Error (*GetSMSMessage)( GSM_SMSMessage *Message ); + + GSM_Error (*DeleteSMSMessage)( GSM_SMSMessage *Message ); + + GSM_Error (*SendSMSMessage)( GSM_SMSMessage *Message, int size ); + + GSM_Error (*SaveSMSMessage)( GSM_SMSMessage *Message ); + + /* If units is set to a valid GSM_RFUnits value, the code + will return level in these units if it is able. Otherwise + value will be returned as GRF_Arbitary. If phone doesn't + support GetRFLevel, function returns GE_NOTSUPPORTED */ + GSM_Error (*GetRFLevel)( GSM_RFUnits *units, float *level ); + + /* Works the same as GetRFLevel, except returns battery + level if known. */ + GSM_Error (*GetBatteryLevel)( GSM_BatteryUnits *units, float *level ); + + GSM_Error (*GetPowerSource)( GSM_PowerSource *source); + + GSM_Error (*GetDisplayStatus)( int *Status); + + GSM_Error (*EnterSecurityCode)( GSM_SecurityCode Code); + + GSM_Error (*GetSecurityCodeStatus)( int *Status ); + + GSM_Error (*GetIMEI)( char *imei ); + + GSM_Error (*GetRevision)( char *revision ); + + GSM_Error (*GetModel)( char *model ); + + GSM_Error (*GetManufacturer)( char *manufacturer ); + + GSM_Error (*GetDateTime)( GSM_DateTime *date_time); + + GSM_Error (*SetDateTime)( GSM_DateTime *date_time); + + GSM_Error (*GetAlarm)( int alarm_number, GSM_DateTime *date_time ); + + GSM_Error (*SetAlarm)( int alarm_number, GSM_DateTime *date_time ); + + GSM_Error (*DialVoice)( char *Number); + + GSM_Error (*DialData)( char *Number, char type, void (* callpassup)(char c)); + + GSM_Error (*GetIncomingCallNr)( char *Number ); + + GSM_Error (*GetNetworkInfo) ( GSM_NetworkInfo *NetworkInfo ); + + GSM_Error (*GetCalendarNote) ( GSM_CalendarNote *CalendarNote); + + GSM_Error (*WriteCalendarNote) ( GSM_CalendarNote *CalendarNote); + + GSM_Error (*DeleteCalendarNote) ( GSM_CalendarNote *CalendarNote); + + GSM_Error (*NetMonitor) ( unsigned char mode, char *Screen ); + + GSM_Error (*SendDTMF) ( char *String ); + + GSM_Error (*GetBitmap) ( GSM_Bitmap *Bitmap ); + + GSM_Error (*SetBitmap) ( GSM_Bitmap *Bitmap ); + + GSM_Error (*SetRingtone) ( GSM_Ringtone *ringtone ); + + GSM_Error (*SendRingtone) ( GSM_Ringtone *ringtone, char *dest ); + + GSM_Error (*Reset) ( unsigned char type ); + + GSM_Error (*GetProfile) ( GSM_Profile *Profile ); + + GSM_Error (*SetProfile) ( GSM_Profile *Profile ); + + bool (*SendRLPFrame) ( RLP_F96Frame *frame, bool out_dtx ); + + GSM_Error (*CancelCall) (); + + GSM_Error (*EnableDisplayOutput) (); + + GSM_Error (*DisableDisplayOutput) (); + + GSM_Error (*EnableCellBroadcast) (); + + GSM_Error (*DisableCellBroadcast) (); + + GSM_Error (*ReadCellBroadcast) ( GSM_CBMessage *Message ); + + GSM_Error (*SetKey) (int c, int up); + + GSM_Error (*HandleString) (char *s); + + GSM_Error (*AnswerCall) (char s); + +} GSM_Functions; + +/* Undefined functions in fbus/mbus files */ +extern GSM_Error Unimplemented(void); +#define UNIMPLEMENTED (void *) Unimplemented + +extern GSM_MemoryType StrToMemoryType (const char *s); + +inline void GSM_DataClear(GSM_Data *data); + +#endif /* __gsm_common_h */ diff --git a/include/gsm-encoding.h b/include/gsm-encoding.h new file mode 100644 index 0000000..0e19f37 --- /dev/null +++ b/include/gsm-encoding.h @@ -0,0 +1,41 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Include file for encoding functions. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/11/08 16:34:20 pkot + Updates to work with new libsms + + Revision 1.1 2001/10/24 22:37:25 pkot + Moved encoding functions to a separate file + + +*/ + +#ifndef __gsm_encoding_h_ +#define __gsm_encoding_h_ + +int Unpack7BitCharacters(int offset, int in_length, int out_length, + unsigned char *input, unsigned char *output); +int Pack7BitCharacters(int offset, unsigned char *input, unsigned char *output); + +void DecodeUnicode (unsigned char* dest, const unsigned char* src, int len); +void EncodeUnicode (unsigned char* dest, const unsigned char* src, int len); + +void DecodeAscii (unsigned char* dest, const unsigned char* src, int len); +void EncodeAscii (unsigned char* dest, const unsigned char* src, int len); + +#endif diff --git a/include/gsm-error.h b/include/gsm-error.h new file mode 100644 index 0000000..f440722 --- /dev/null +++ b/include/gsm-error.h @@ -0,0 +1,84 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Error codes. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:19 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/11/08 16:34:20 pkot + Updates to work with new libsms + + Revision 1.1 2001/10/24 22:33:00 pkot + Moved error codes to a separate files + + +*/ + +#ifndef __gsm_error_h_ +#define __gsm_error_h_ + +/* Define standard GSM error/return code values. These codes are also used for + some internal functions such as SIM read/write in the model specific code. */ + +typedef enum { + GE_NONE = 0, /* 0. No error. */ + GE_DEVICEOPENFAILED, /* 1. Couldn't open specified serial device. */ + GE_UNKNOWNMODEL, /* 2. Model specified isn't known/supported. */ + GE_NOLINK, /* 3. Couldn't establish link with phone. */ + GE_TIMEOUT, /* 4. Command timed out. */ + GE_TRYAGAIN, /* 5. Try again. */ + GE_INVALIDSECURITYCODE, /* 6. Invalid Security code. */ + GE_NOTIMPLEMENTED, /* 7. Command called isn't implemented in model. */ + GE_INVALIDSMSLOCATION, /* 8. Invalid SMS location. */ + GE_INVALIDPHBOOKLOCATION, /* 9. Invalid phonebook location. */ + GE_INVALIDMEMORYTYPE, /* 10. Invalid type of memory. */ + GE_INVALIDSPEEDDIALLOCATION, /* 11. Invalid speed dial location. */ + GE_INVALIDCALNOTELOCATION,/* 12. Invalid calendar note location. */ + GE_INVALIDDATETIME, /* 13. Invalid date, time or alarm specification. */ + GE_EMPTYSMSLOCATION, /* 14. SMS location is empty. */ + GE_PHBOOKNAMETOOLONG, /* 15. Phonebook name is too long. */ + GE_PHBOOKNUMBERTOOLONG, /* 16. Phonebook number is too long. */ + GE_PHBOOKWRITEFAILED, /* 17. Phonebook write failed. */ + GE_SMSSENDOK, /* 18. SMS was send correctly. */ + GE_SMSSENDFAILED, /* 19. SMS send fail. */ + GE_SMSWAITING, /* 20. Waiting for the next part of SMS. */ + GE_SMSTOOLONG, /* 21. SMS message too long. */ + GE_SMSWRONGFORMAT, /* 22. Wrong format of the SMS */ + GE_NONEWCBRECEIVED, /* 23. Attempt to read CB when no new CB received */ + GE_INTERNALERROR, /* 24. Problem occured internal to model specific code. */ + GE_CANTOPENFILE, /* 25. Can't open file with bitmap/ringtone */ + GE_WRONGNUMBEROFCOLORS, /* 26. Wrong number of colors in specified bitmap file */ + GE_WRONGCOLORS, /* 27. Wrong colors in bitmap file */ + GE_INVALIDFILEFORMAT, /* 28. Invalid format of file */ + GE_SUBFORMATNOTSUPPORTED, /* 29. Subformat of file not supported */ + GE_FILETOOSHORT, /* 30. Too short file to read */ + GE_FILETOOLONG, /* 31. Too long file to read */ + GE_INVALIDIMAGESIZE, /* 32. Invalid size of bitmap (in file, sms etc.) */ + GE_NOTSUPPORTED, /* 33. Function not supported by the phone */ + GE_BUSY, /* 34. Command is still being executed. */ + GE_USERCANCELED, /* 35. */ + GE_UNKNOWN, /* 36. Unknown error - well better than nothing!! */ + GE_MEMORYFULL, /* 37. */ + GE_NOTWAITING, /* 38. Not waiting for a response from the phone */ + GE_NOTREADY, /* 39. */ + + /* The following are here in anticipation of data call requirements. */ + + GE_LINEBUSY, /* 40. Outgoing call requested reported line busy */ + GE_NOCARRIER /* 41. No Carrier error during data call setup ? */ +} GSM_Error; + +extern char *print_error(GSM_Error e); + +#endif diff --git a/include/gsm-filetypes.h b/include/gsm-filetypes.h new file mode 100644 index 0000000..0abc0c7 --- /dev/null +++ b/include/gsm-filetypes.h @@ -0,0 +1,91 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Functions to read and write common file types. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.10 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +int GSM_ReadVCalendarFile(char *FileName, GSM_CalendarNote *cnote, + int number); + +int GetvCalTime(GSM_DateTime *dt, char *time); +int FillCalendarNote(GSM_CalendarNote *note, char *type, + char *text, char *time, char *alarm); + + +/* Ringtone Files */ + +GSM_Error GSM_ReadRingtoneFile(char *FileName, GSM_Ringtone *ringtone); +GSM_Error GSM_SaveRingtoneFile(char *FileName, GSM_Ringtone *ringtone); + +int GetScale (char *num); +int GetDuration (char *num); + +/* Defines the character that separates fields in rtttl files. */ +#define RTTTL_SEP ":" + +GSM_Error saverttl(FILE *file, GSM_Ringtone *ringtone); +GSM_Error saveott(FILE *file, GSM_Ringtone *ringtone); + +GSM_Error loadrttl(FILE *file, GSM_Ringtone *ringtone); +GSM_Error loadott(FILE *file, GSM_Ringtone *ringtone); + + +/* Bitmap Files */ + +GSM_Error GSM_ReadBitmapFile(char *FileName, GSM_Bitmap *bitmap); +GSM_Error GSM_SaveBitmapFile(char *FileName, GSM_Bitmap *bitmap); +int GSM_SaveTextFile(char *FileName, char *text, int mode); +GSM_Error GSM_ShowBitmapFile(char *FileName); + +void savenol(FILE *file, GSM_Bitmap *bitmap); +void savengg(FILE *file, GSM_Bitmap *bitmap); +void savensl(FILE *file, GSM_Bitmap *bitmap); +void savenlm(FILE *file, GSM_Bitmap *bitmap); +void saveota(FILE *file, GSM_Bitmap *bitmap); +void savebmp(FILE *file, GSM_Bitmap *bitmap); + +#ifdef XPM + void savexpm(char *filename, GSM_Bitmap *bitmap); +#endif + +GSM_Error loadngg(FILE *file, GSM_Bitmap *bitmap); +GSM_Error loadnol(FILE *file, GSM_Bitmap *bitmap); +GSM_Error loadnsl(FILE *file, GSM_Bitmap *bitmap); +GSM_Error loadnlm(FILE *file, GSM_Bitmap *bitmap); +GSM_Error loadota(FILE *file, GSM_Bitmap *bitmap); +GSM_Error loadbmp(FILE *file, GSM_Bitmap *bitmap); + +#ifdef XPM + GSM_Error loadxpm(char *filename, GSM_Bitmap *bitmap); +#endif + +typedef enum { + None=0, + NOL, + NGG, + NSL, + NLM, + BMP, + OTA, + XPMF, + RTTL, + OTT +} GSM_Filetypes; diff --git a/include/gsm-networks.h b/include/gsm-networks.h new file mode 100644 index 0000000..8587430 --- /dev/null +++ b/include/gsm-networks.h @@ -0,0 +1,49 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for GSM networks. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __gsm_networks_h +#define __gsm_networks_h + +/* This type is used to hold information about various GSM networks. */ + +typedef struct { + char *Code; /* GSM network code */ + char *Name; /* GSM network name */ +} GSM_Network; + +/* This type is used to hold information about various GSM countries. */ + +typedef struct { + char *Code; /* GSM country code */ + char *Name; /* GSM country name */ +} GSM_Country; + +/* These functions are used to search the structure defined above.*/ +char *GSM_GetNetworkName(char *NetworkCode); +char *GSM_GetNetworkCode(char *NetworkName); + +char *GSM_GetCountryName(char *CountryCode); +char *GSM_GetCountryCode(char *CountryName); + +#endif /* __gsm_networks_h */ diff --git a/include/gsm-ringtones.h b/include/gsm-ringtones.h new file mode 100644 index 0000000..11c44b5 --- /dev/null +++ b/include/gsm-ringtones.h @@ -0,0 +1,140 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides definitions of macros from the Smart Messaging + Specification. It is mainly rewrite of the spec to C :-) Viva Nokia! + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __gsm_ringtones_h +#define __gsm_ringtones_h + +#include +#include +#include +#include +#include "misc.h" +#include "gsm-common.h" + +#define GetBit(Stream,BitNr) Stream[(BitNr)/8] & 1<<(7-((BitNr)%8)) +#define SetBit(Stream,BitNr) Stream[(BitNr)/8] |= 1<<(7-((BitNr)%8)) +#define ClearBit(Stream,BitNr) Stream[(BitNr)/8] &= 255 - (1 << (7-((BitNr)%8))) + +/* These values are from Smart Messaging Specification Revision 2.0.0 pages + 3-23, ..., 3-29 */ + +/* Command-Part Encoding */ + +#define CancelCommand (0x05<<1) /* binary 0000 101 */ +#define RingingToneProgramming (0x25<<1) /* binary 0100 101 */ +#define Sound (0x1d<<1) /* binary 0011 101 */ +#define Unicode (0x22<<1) /* binary 0100 010 */ + +/* Song-Type Encoding */ + +#define BasicSongType (0x01<<5) /* binary 001 */ +#define TemporarySongType (0x02<<5) /* binary 010 */ +#define MidiSongType (0x03<<5) /* binary 011 */ +#define DigitizedSongType (0x04<<5) /* binary 100 */ + +/* Instruction ID Encoding */ + +#define PatternHeaderId (0x00<<5) /* binary 000 */ +#define NoteInstructionId (0x01<<5) /* binary 001 */ +#define ScaleInstructionId (0x02<<5) /* binary 010 */ +#define StyleInstructionId (0x03<<5) /* binary 011 */ +#define TempoInstructionId (0x04<<5) /* binary 100 */ +#define VolumeInstructionId (0x05<<5) /* binary 101 */ + +/* Style-Value Encoding*/ + +#define NaturalStyle (0x00<<6) /* binary 00 */ +#define ContinuousStyle (0x01<<6) /* binary 01 */ +#define StaccatoStyle (0x02<<6) /* binary 11 */ + +/* Note-Scale Encoding */ + +#define Scale1 (0x00<<6) /* binary 00 */ +#define Scale2 (0x01<<6) /* binary 01 */ +#define Scale3 (0x02<<6) /* binary 10 */ +#define Scale4 (0x03<<6) /* binary 11 */ + +/* Note-Value Encoding */ + +#define Note_Pause (0x00<<4) /* binary 0000 */ +#define Note_C (0x01<<4) /* binary 0001 */ +#define Note_Cis (0x02<<4) /* binary 0010 */ +#define Note_D (0x03<<4) /* binary 0011 */ +#define Note_Dis (0x04<<4) /* binary 0100 */ +#define Note_E (0x05<<4) /* binary 0101 */ +#define Note_F (0x06<<4) /* binary 0110 */ +#define Note_Fis (0x07<<4) /* binary 0111 */ +#define Note_G (0x08<<4) /* binary 1000 */ +#define Note_Gis (0x09<<4) /* binary 1001 */ +#define Note_A (0x0a<<4) /* binary 1010 */ +#define Note_Ais (0x0b<<4) /* binary 1011 */ +#define Note_H (0x0c<<4) /* binary 1100 */ + +/* Note-Duration Encoding */ + +#define Duration_Full (0x00<<5) /* binary 000 */ +#define Duration_1_2 (0x01<<5) /* binary 001 */ +#define Duration_1_4 (0x02<<5) /* binary 010 */ +#define Duration_1_8 (0x03<<5) /* binary 011 */ +#define Duration_1_16 (0x04<<5) /* binary 100 */ +#define Duration_1_32 (0x05<<5) /* binary 101 */ + +/* Note-Duration-Specifier Encoding */ + +#define NoSpecialDuration (0x00<<6) /* binary 00 */ +#define DottedNote (0x01<<6) /* binary 01 */ +#define DoubleDottedNote (0x02<<6) /* binary 10 */ +#define Length_2_3 (0x03<<6) /* binary 11 */ + +/* Pattern ID Encoding */ +#define A_part (0x00<<6) /* binary 00 */ +#define B_part (0x01<<6) /* binary 01 */ +#define C_part (0x02<<6) /* binary 10 */ +#define D_part (0x03<<6) /* binary 11 */ + +/* Command-End */ + +#define CommandEnd (0x00) /* binary 00000000 */ + +/* Definition of the Note type */ + +typedef struct { + int Scale; + int NoteID; + int Duration; + int DurationSpecifier; +} Note; + +#define GSM_MAX_RINGTONE_PACKAGE_LENGTH 200 + +/* From PC Composer help */ +#define GSM_MAX_RINGTONE_NOTES 130 + +u8 GSM_PackRingtone(GSM_Ringtone *ringtone, char *package, int *maxlength); +GSM_Error GSM_UnPackRingtone(GSM_Ringtone *ringtone, char *package, int maxlength); + +int GSM_GetNote(int number); + +#endif /* __gsm_ringtones_h */ diff --git a/include/gsm-sms.h b/include/gsm-sms.h new file mode 100644 index 0000000..3ff3ba2 --- /dev/null +++ b/include/gsm-sms.h @@ -0,0 +1,387 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Include file for SMS library. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.6 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.5 2001/11/20 16:22:23 pkot + First attempt to read Picture Messages. They should appear when you enable DEBUG. Nokia seems to break own standards. :/ (Markus Plail) + + Revision 1.4 2001/11/19 13:09:40 pkot + Begin work on sms sending + + Revision 1.3 2001/11/18 00:54:32 pkot + Bugfixes. I18n of the user responses. UDH support in libsms. Business Card UDH Type + + Revision 1.2 2001/11/13 16:12:21 pkot + Preparing libsms to get to work. 6210/7110 SMS and SMS Folder updates + + Revision 1.1 2001/11/08 16:23:20 pkot + New version of libsms. Not functional yet, but it reasonably stable API. + + Revision 1.1 2001/07/09 23:06:26 pkot + Moved sms.* files from my hard disk to CVS + + +*/ + +#ifndef __gnokii_sms_h_ +#define __gnokii_sms_h_ + +#include "misc.h" +#include "gsm-error.h" + +/* Maximum length of SMS center name */ + +#define GSM_MAX_SMS_CENTER_NAME_LENGTH (20) + +/* Limits of SMS messages. */ + +#define GSM_MAX_SMS_CENTER_LENGTH (40) +#define GSM_MAX_SENDER_LENGTH (40) +#define GSM_MAX_DESTINATION_LENGTH (40) + +#define GSM_MAX_SMS_LENGTH (160) +#define GSM_MAX_8BIT_SMS_LENGTH (140) + +#define SMS_MAX_ADDRESS_LENGTH (40) + +/* FIXME: what value should be here? (Pawel Kot) */ +//#define GSM_MAX_USER_DATA_HEADER_LENGTH (10) +#define SMS_MAX_UDH_HEADER_NUMBER 10 + +/*** MEMORY INFO ***/ + +typedef struct { + int Unread; /* Number of unread messages */ + int Number; /* Number of all messages */ +} GSM_SMSMemoryStatus; + +/*** DATE AND TIME ***/ + +typedef struct { + int Year; /* The complete year specification - e.g. 1999. Y2K :-) */ + int Month; /* January = 1 */ + int Day; + int Hour; + int Minute; + int Second; + int Timezone; /* The difference between local time and GMT */ +} SMS_DateTime; + +/*** USER DATA HEADER ***/ + +/* types of User Data Header */ +typedef enum { + SMS_NoUDH = 0x00, + SMS_ConcatenatedMessages = 0x01, + SMS_OpLogo = 0x02, + SMS_CallerIDLogo = 0x03, + SMS_Ringtone = 0x04, + SMS_VoiceMessage = 0x05, + SMS_FaxMessage = 0x06, + SMS_EmailMessage = 0x07, + SMS_OtherMessage = 0x08, + SMS_BusinessCard = 0x09, + SMS_UnknownUDH = 0x0a +} SMS_UDHType; + +typedef struct { + SMS_UDHType Type; + union { + struct { + unsigned short ReferenceNumber; + unsigned short MaximumNumber; + unsigned short CurrentNumber; + } ConcatenatedShortMessage; /* SMS_ConcatenatedMessages */ + struct { + bool Store; + unsigned short MessageCount; + } SpecialSMSMessageIndication; /* SMS_VoiceMessage, SMS_FaxMessage, SMS_EmailMessage, SMS_OtherMessage */ + struct { + char NetworkCode[6]; +// ... + } Logo; /* SMS_OpLogo, SMS_CallerIDLogo */ + struct { +// ... + } Ringtone; /* SMS_Ringtone */ + } u; +} SMS_UDHInfo; + +typedef enum { + SMS_PID, /* Set Protocol Identifier to `Return Call Message' */ + SMS_DCS, /* Set Data Coding Scheme "to indicate the type of message waiting and whether there are some messages or no messages" */ + SMS_UDH /* Use User Data Header - Special SMS Message Indication; the maximium level of information, may not be supported by all phones */ +} SMS_MessageWaitingType; + +/*** DATA CODING SCHEME ***/ + +typedef enum { + SMS_GeneralDataCoding, + SMS_MessageWaiting +} SMS_DataCodingSchemeType; + +typedef enum { + SMS_DefaultAlphabet = 0x00, + SMS_8bit = 0x01, + SMS_UCS2 = 0x02 +} SMS_AlphabetType; + +typedef enum { + SMS_VoiceMail = 0x00, + SMS_Fax = 0x01, + SMS_Email = 0x02, + SMS_Text = 0x03, + SMS_Other = 0x04 +} SMS_IndicationType; + +typedef struct { + SMS_DataCodingSchemeType Type; + union { + struct { + unsigned short Class; /* 0 - no class + 1 - Class 0 + 2 - Class 1 + 3 - Class 2 + 4 - Class 3 */ + bool Compressed; + SMS_AlphabetType Alphabet; + } General; + struct { + bool Discard; + SMS_AlphabetType Alphabet; /* ucs16 not supported */ + bool Active; + SMS_IndicationType Type; + } MessageWaiting; + } u; +} SMS_DataCodingScheme; + +/*** VALIDITY PERIOD ***/ + +typedef enum { + SMS_NoValidityPeriod = 0x00, + SMS_EnhancedFormat = 0x01, + SMS_RelativeFormat = 0x02, + SMS_AbsoluteFormat = 0x03 +} SMS_ValidityPeriodFormat; + +typedef enum { + SMS_EnhancedNoValidityPeriod = 0x00, + SMS_EnhancedRelativeFormat = 0x01, + SMS_EnhancedRelativeSeconds = 0x02, /* Only one ocetet more is used */ + SMS_EnhancedRelativeSemiOctet = 0x03 /* 3 octets contain relative time in hours, minutes and seconds in semi-octet representation */ +} SMS_EnhancedValidityPeriodType; + +typedef struct { + bool extension; /* we need to set it to 0 at the moment; FIXME: how to handle `1' here? */ + bool single_shot; + SMS_EnhancedValidityPeriodType type; + union { + unsigned short relative; + unsigned short seconds; + SMS_DateTime hms; + } period; +} SMS_EnhancedValidityPeriod; + +/* Validity of SMS Messages. */ + +typedef enum { + SMS_V1H = 0x0b, + SMS_V6H = 0x47, + SMS_V24H = 0xa7, + SMS_V72H = 0xa9, + SMS_V1W = 0xad, + SMS_VMax = 0xff +} SMS_ValidityPeriod; + +typedef struct { + SMS_ValidityPeriodFormat VPF; + union { + SMS_EnhancedValidityPeriod Enhanced; + SMS_ValidityPeriod Relative; /* 8 bit */ + SMS_DateTime Absolute; + } u; +} SMS_MessageValidity; + + +/* This data-type is used to specify the type of the number. See the official + GSM specification 03.40, version 6.1.0, section 9.1.2.5, page 35-37. */ +typedef enum { + SMS_Unknown = 0x81, /* Unknown number */ + SMS_International = 0x91, /* International number */ + SMS_National = 0xa1, /* National number */ + SMS_Network = 0xb1, /* Network specific number */ + SMS_Subscriber = 0xc1, /* Subscriber number */ + SMS_Alphanumeric = 0xd0, /* Alphanumeric number */ + SMS_Abbreviated = 0xe1 /* Abbreviated number */ +} SMS_NumberType; + +/*** MESSAGE CENTER ***/ + +typedef struct { + int No; /* Number of the SMSC in the phone memory. */ + SMS_NumberType Type; + char Name[GSM_MAX_SMS_CENTER_NAME_LENGTH]; /* Name of the SMSC. */ + SMS_IndicationType Format; /* SMS is sent as text/fax/paging/email. */ + SMS_ValidityPeriod Validity; /* Validity of SMS Message. */ + char Number[GSM_MAX_SMS_CENTER_LENGTH]; /* Number of the SMSC. */ + char Recipient[GSM_MAX_SMS_CENTER_LENGTH]; /* Number of the default recipient. */ +} SMS_MessageCenter; + +/*** SHORT MESSAGE CORE ***/ + +typedef struct { + SMS_NumberType type; + char number[SMS_MAX_ADDRESS_LENGTH]; +} SMS_Number; + +typedef enum { /* Bits meaning */ + SMS_Deliver = 0x00, /* 00 0 First 2 digits are taken from */ + SMS_Delivery_Report = 0x01, /* 00 1 GSM 03.40 version 6.1.0 Release 1997 */ + SMS_Submit = 0x02, /* 01 0 */ + SMS_Submit_Report = 0x03, /* 01 1 */ + SMS_Command = 0x04, /* 10 0 mark a report */ + SMS_Status_Report = 0x05, /* 10 1 Section 9.2.3.1; 3rd digit is to */ + SMS_Picture = 0x07 /* Looks like Happy N*kia Engineers (TM) invention */ +} SMS_MessageType; + +typedef enum { + SMS_Enquiry = 0x00, /* Enquiry relating to previosly submitted short message; sets SRR to 1 */ + SMS_CancelStatusReport = 0x01, /* Cancel Status Report Request relating to previously submitted short message; sets SRR to 0 */ + SMS_DeleteSM = 0x02, /* Delete previousle submitted Short Message; sets SRR to 0 */ + SMS_EnableStatusReport = 0x03 /* Enable Status Report Request relating to previously submitted short message; sets SRR to 0 */ +} SMS_CommandType; + +typedef struct { + SMS_CommandType Type; +} SMS_MessageCommand; + +/* Datatype for SMS status */ +typedef enum { + SMS_Read = 0x01, + SMS_Unread = 0x03, + SMS_Sent = 0x05, + SMS_Unsent = 0x07 +} SMS_MessageStatus; + +/* In contrast to GSM_MemoryType, SMS_MemoryType is phone dependant */ +typedef enum { + GMT_IN = 0x08, /* Inbox in 6210/7110 */ + GMT_OU = 0x10, /* Outbox in 6210/7110 */ + GMT_AR = 0x18, /* Archive in 6210/6110 */ + GMT_TE = 0x20, /* Templates in 6210/7110 */ + GMT_F1 = 0x29, /* 1st CUSTOM FOLDER in 6210/7110*/ + GMT_F2 = 0x31, + GMT_F3 = 0x39, + GMT_F4 = 0x41, + GMT_F5 = 0x49, + GMT_F6 = 0x51, + GMT_F7 = 0x59, + GMT_F8 = 0x61, + GMT_F9 = 0x69, + GMT_F10 = 0x71, + GMT_F11 = 0x79, + GMT_F12 = 0x81, + GMT_F13 = 0x89, + GMT_F14 = 0x91, + GMT_F15 = 0x99, + GMT_F16 = 0xA1, + GMT_F17 = 0xA9, + GMT_F18 = 0xB1, + GMT_F19 = 0xB9, + GMT_F20 = 0xC1 /* 20th CUSTOM FOLDER in 6210/7110 */ +} SMS_MemoryType; + +/* Define datatype for SMS messages, describes precisely GSM Spec 03.40 */ +typedef struct { + /* Specification fields */ + SMS_MessageType Type; /* Message Type Indicator - 2 bits (9.2.3.1) */ + bool MoreMessages; /* More Messages to Send (9.2.3.2) */ + bool ReplyViaSameSMSC; /* Reply Path (9.2.3.17) - `Reply via same centre' in the phone */ + bool RejectDuplicates; /* Reject Duplicates (9.2.3.25) */ + bool Report; /* Status Report (9.2.3.4, 9.2.3.5 & 9.2.3.26) - `Delivery reports' in the phone */ + + unsigned short Number; /* Message Number - 8 bits (9.2.3.18) */ + unsigned short Reference; /* Message Reference - 8 bit (9.2.3.6) */ + unsigned short PID; /* Protocol Identifier - 8 bit (9.2.3.9) */ + unsigned short ReportStatus; /* Status - 8 bit (9.2.3.15), Failure Cause (9.2.3.22) */ + unsigned short Length; /* User Data Length (9.2.3.16), Command Data Length (9.2.3.20) */ + + SMS_MessageCenter MessageCenter; /* SMSC Address (9.2.3.7, 9.2.3.8, 9.2.3.14) */ + SMS_Number RemoteNumber; /* Origination, destination, Recipient Address (9.2.3.7, 9.2.3.8, 9.2.3.14) */ + unsigned char MessageText[GSM_MAX_SMS_LENGTH]; /* User Data (9.2.3.24), Command Data (9.2.3.21) */ + SMS_DataCodingScheme DCS; /* Data Coding Scheme (9.2.3.10) */ + SMS_MessageValidity Validity; /* Validity Period Format & Validity Period (9.2.3.3 & 9.2.3.12) - `Message validity' in the phone */ + + unsigned short UDH_No; /* Number of presend UDHs */ + unsigned int UDH_Length; /* Length of the whole UDH */ + SMS_UDHInfo UDH[SMS_MAX_UDH_HEADER_NUMBER]; /* User Data Header Indicator & User Data Header (9.2.3.23 & 9.2.3.24) */ + + SMS_DateTime SMSCTime; /* Service Centre Time Stamp (9.2.3.11) */ + SMS_DateTime Time; /* Discharge Time (9.2.3.13) */ + + /* Other fields */ + SMS_MemoryType MemoryType; /* memoryType (for 6210/7110: folder indicator */ + SMS_MessageStatus Status; /* Status of the message: sent/read or unsent/unread */ + +// SMS_CommandType Command; /* Command Type - 8 bits (9.2.3.19); FIXME: use it!!!! */ +// unsigned char Parameter[???]; /* Parameter Indicator (9.2.3.27); FIXME: how to use it??? */ +} GSM_SMSMessage; + +/*** FOLDERS ***/ + +/* Maximal number of SMS folders */ +#define MAX_SMS_FOLDERS 24 + +/* Datatype for SMS folders ins 6210/7110 */ +typedef struct { + char Name[15]; /* Name for SMS folder */ + bool SMSData; /* if folder contains sender, SMSC number and sending date */ + u8 locations[160]; /* locations of SMS messages in that folder (6210 specific) */ + u8 number; /* number of SMS messages in that folder*/ + u8 FolderID; /* ID od fthe current folder */ +} SMS_Folder; + +typedef struct { + SMS_Folder Folder[MAX_SMS_FOLDERS]; + u8 FolderID[MAX_SMS_FOLDERS]; /* ID specific for this folder and phone. */ + /* Used in internal functions. Do not use it. */ + u8 number; /* number of SMS folders */ +} SMS_FolderList; + +/*** CELL BROADCAST ***/ + +#define GSM_MAX_CB_MESSAGE (160) + +/* Define datatype for Cell Broadcast message */ +typedef struct { + int Channel; /* channel number */ + char Message[GSM_MAX_CB_MESSAGE + 1]; + int New; +} GSM_CBMessage; + +extern int EncodePDUSMS(GSM_SMSMessage *SMS, char *frame); +extern GSM_Error DecodePDUSMS(unsigned char *message, GSM_SMSMessage *SMS, int MessageLength); +/* Do not use these yet */ +extern GSM_Error EncodeTextSMS(); +extern GSM_Error DecodeTextSMS(unsigned char *message, GSM_SMSMessage *SMS); + +/* FIXME: make this static */ +extern char *GetBCDNumber(u8 *Number); + +#endif /* __gnokii_sms_h_ */ diff --git a/include/gsm-statemachine.h b/include/gsm-statemachine.h new file mode 100644 index 0000000..8571138 --- /dev/null +++ b/include/gsm-statemachine.h @@ -0,0 +1,44 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for the statemachine. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/06/27 23:52:52 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.1 2001/03/21 23:36:07 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + +*/ + +#ifndef __gsm_statemachine_h +#define __gsm_statemachine_h + +#include "gsm-common.h" + +GSM_Error SM_Initialise(GSM_Statemachine *state); +GSM_State SM_Loop(GSM_Statemachine *state, int timeout); +GSM_Error SM_SendMessage(GSM_Statemachine *state, u16 messagesize, u8 messagetype, void *message); +GSM_Error SM_WaitFor(GSM_Statemachine *state, GSM_Data *data, unsigned char messagetype); +void SM_IncomingFunction(GSM_Statemachine *state, u8 messagetype, void *message, u16 messagesize); +void SM_Reset(GSM_Statemachine *state); +GSM_Error SM_GetError(GSM_Statemachine *state, unsigned char messagetype); +GSM_Error SM_Block(GSM_Statemachine *state, GSM_Data *data, int waitfor); +GSM_Error SM_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *sm); + +#endif /* __gsm_statemachine_h */ diff --git a/include/links/atbus.h b/include/links/atbus.h new file mode 100644 index 0000000..b7e0a27 --- /dev/null +++ b/include/links/atbus.h @@ -0,0 +1,42 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for mobile phones. + + Copyright 2001 Manfred Jonsson + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.3 2001/11/19 13:03:18 pkot + nk3110.c cleanup + + Revision 1.2 2001/08/20 23:27:37 pkot + Add hardware shakehand to the link layer (Manfred Jonsson) + + Revision 1.1 2001/07/27 00:02:22 pkot + Generic AT support for the new structure (Manfred Jonsson) + + +*/ + +#ifndef __atbus_h +#define __atbus_h + +GSM_Error ATBUS_Initialise(GSM_Statemachine *state, int hw_handshake); + +#ifdef __atbus_c /* Prototype functions for atbus.c only */ + +GSM_Error ATBUS_Loop(struct timeval *timeout); +bool ATBUS_OpenSerial(int hw_handshake, char *device); +void ATBUS_RX_StateMachine(unsigned char rx_char); + +#endif /* #ifdef __atbus_c */ + +#endif /* #ifndef __atbus_h */ diff --git a/include/links/cbus.h b/include/links/cbus.h new file mode 100644 index 0000000..fba955e --- /dev/null +++ b/include/links/cbus.h @@ -0,0 +1,57 @@ +#ifndef __cbus_h +#define __cbus_h + +#define CBUS_MAX_FRAME_LENGTH 256 +#define CBUS_MAX_TRANSMIT_LENGTH 256 +#define CBUS_MAX_MSG_LENGTH 256 + +enum CBUS_RX_States { + CBUS_RX_Header, + CBUS_RX_FrameType1, + CBUS_RX_FrameType2, + CBUS_RX_GetLengthLB, + CBUS_RX_GetLengthHB, + CBUS_RX_GetMessage, + CBUS_RX_GetCSum +}; + + +typedef struct{ + int checksum; + int BufferCount; + enum CBUS_RX_States state; + int FrameHeader1; + int FrameHeader2; + int FrameType1; + int FrameType2; + int MessageLength; + unsigned char buffer[CBUS_MAX_FRAME_LENGTH]; + u8 prev_rx_byte; +} CBUS_IncomingFrame; + +typedef struct { + int message_length; + unsigned char buffer[CBUS_MAX_MSG_LENGTH]; +} CBUS_OutgoingMessage; + +typedef struct{ + CBUS_IncomingFrame i; +} CBUS_Link; + +GSM_Error CBUS_Initialise(GSM_Statemachine *state); + +void sendat(char *msg); + +#ifdef __cbus_c /* Prototype functions for cbus.c only */ + +GSM_Error CBUS_Loop(struct timeval *timeout); +bool CBUS_OpenSerial(); +void CBUS_RX_StateMachine(unsigned char rx_byte); +int CBUS_TX_SendFrame(u8 message_length, u8 message_type, u8 *buffer); +int CBUS_SendMessage(u16 messagesize, u8 messagetype, void *message); +int CBUS_TX_SendAck(u8 message_type, u8 message_seq); + +#endif /* #ifdef __cbus_c */ + +#endif /* #ifndef __cbus_h */ + diff --git a/include/links/fbus-phonet.h b/include/links/fbus-phonet.h new file mode 100644 index 0000000..44d7160 --- /dev/null +++ b/include/links/fbus-phonet.h @@ -0,0 +1,73 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions via fbus over irda. + See README for more details on supported mobile phones. + + The various routines are called PHONET_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/03/21 23:36:07 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.1 2001/02/21 19:57:12 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/06 21:15:37 chris + Preliminary irda support for 7110 etc. Not well tested! + + +*/ + +#ifndef __links_fbus_phonet_h +#define __links_fbus_phonet_h + + +#define PHONET_MAX_FRAME_LENGTH 1010 +#define PHONET_MAX_TRANSMIT_LENGTH 1010 +#define PHONET_MAX_CONTENT_LENGTH 1000 + + +/* This byte is at the beginning of all GSM Frames sent over PhoNet. */ +#define FBUS_PHONET_FRAME_ID 0x14 + + +GSM_Error PHONET_Initialise(GSM_Link *newlink, GSM_Statemachine *state); + + +#ifdef __links_fbus_phonet_c /* Prototype functions for fbus-phonet.c only */ + +typedef struct{ + int BufferCount; + enum FBUS_RX_States state; + int MessageSource; + int MessageDestination; + int MessageType; + int MessageLength; + char MessageBuffer[PHONET_MAX_FRAME_LENGTH]; +} PHONET_IncomingMessage; + + +bool PHONET_OpenSerial(); +void PHONET_RX_StateMachine(unsigned char rx_byte); +int PHONET_TX_SendFrame(u8 message_length, u8 message_type, u8 *buffer); +GSM_Error PHONET_SendMessage(u16 messagesize, u8 messagetype, void *message); +int PHONET_TX_SendAck(u8 message_type, u8 message_seq); + +#endif /* #ifdef __links_fbus_phonet_c */ + +#endif /* #ifndef __links_fbus_phonet_h */ diff --git a/include/links/fbus.h b/include/links/fbus.h new file mode 100644 index 0000000..c425ea1 --- /dev/null +++ b/include/links/fbus.h @@ -0,0 +1,162 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides an API for accessing functions via fbus. + See README for more details on supported mobile phones. + + The various routines are called FBUS_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.5 2001/11/15 12:04:06 pkot + Faster initialization for 6100 series (don't check for dlr3 cable) + + Revision 1.4 2001/03/21 23:36:08 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.3 2001/03/19 23:44:57 pkot + DLR3 cable support + + Revision 1.2 2001/03/13 01:23:19 pkot + Windows updates (Manfred Jonsson) + + Revision 1.1 2001/02/21 19:57:12 chris + More fiddling with the directory layout + + Revision 1.3 2001/02/06 21:15:36 chris + Preliminary irda support for 7110 etc. Not well tested! + + Revision 1.2 2001/01/17 02:54:55 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.1 2001/01/14 22:47:01 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + + +*/ + +#ifndef __links_fbus_h +#define __links_fbus_h + +#include +#include "gsm-statemachine.h" + +#ifdef WIN32 +#include +#include +#endif + +#define FBUS_MAX_FRAME_LENGTH 256 +#define FBUS_MAX_MESSAGE_TYPES 128 +#define FBUS_MAX_TRANSMIT_LENGTH 256 +#define FBUS_MAX_CONTENT_LENGTH 120 + +/* Nokia mobile phone. */ +#define FBUS_DEVICE_PHONE 0x00 + +/* Our PC. */ +#define FBUS_DEVICE_PC 0x0c + + +/* This byte is at the beginning of all GSM Frames sent over FBUS to Nokia + phones. This may have to become a phone dependant parameter... */ +#define FBUS_FRAME_ID 0x1e + +/* This byte is at the beginning of all GSM Frames sent over IR to Nokia phones. */ +#define FBUS_IR_FRAME_ID 0x1c + + +/* Every (well, almost every) frame from the computer starts with this + sequence. */ + +#define FBUS_FRAME_HEADER 0x00, 0x01, 0x00 + + +/* States for receive code. */ + +enum FBUS_RX_States { + FBUS_RX_Sync, + FBUS_RX_Discarding, + FBUS_RX_GetDestination, + FBUS_RX_GetSource, + FBUS_RX_GetType, + FBUS_RX_GetLength1, + FBUS_RX_GetLength2, + FBUS_RX_GetMessage +}; + + +typedef struct{ + int checksum[2]; + int BufferCount; +#ifndef WIN32 + struct timeval time_now; + struct timeval time_last; +#else + struct _timeb time_now; + struct _timeb time_last; +#endif + enum FBUS_RX_States state; + int MessageSource; + int MessageDestination; + int MessageType; + int FrameLength; + char MessageBuffer[FBUS_MAX_FRAME_LENGTH]; +} FBUS_IncomingFrame; + +typedef struct{ + int MessageLength; + unsigned char *MessageBuffer; + char FramesToGo; + int Malloced; +} FBUS_IncomingMessage; + +typedef struct { + u16 message_length; + u8 message_type; + u8 *buffer; +} FBUS_OutgoingMessage; + + +typedef struct{ + FBUS_IncomingFrame i; + FBUS_IncomingMessage messages[FBUS_MAX_MESSAGE_TYPES]; + u8 RequestSequenceNumber; +} FBUS_Link; + +GSM_Error FBUS_Initialise(GSM_Link *newlink, GSM_Statemachine *state, int type); + + +#ifdef __links_fbus_c /* Prototype functions for fbus-generic.c only */ + +bool FBUS_OpenSerial(bool dlr3); +void FBUS_RX_StateMachine(unsigned char rx_byte); +int FBUS_TX_SendFrame(u8 message_length, u8 message_type, u8 *buffer); +GSM_Error FBUS_SendMessage(u16 messagesize, u8 messagetype, void *message); +int FBUS_TX_SendAck(u8 message_type, u8 message_seq); + +#endif /* #ifdef __links_fbus_c */ + +#endif /* #ifndef __links_fbus_h */ + + + + + + + + diff --git a/include/links/utils.h b/include/links/utils.h new file mode 100644 index 0000000..2f22f53 --- /dev/null +++ b/include/links/utils.h @@ -0,0 +1,5 @@ +#ifndef LINKS_UTILS +#define LINKS_UTILS + + +#endif diff --git a/include/linuxirda.h b/include/linuxirda.h new file mode 100644 index 0000000..74b5f54 --- /dev/null +++ b/include/linuxirda.h @@ -0,0 +1,223 @@ +/********************************************************************* + * + * Filename: irda.h + * Version: 1.0 + * Description: IrDA header file to be used by IrDA applications + * Status: Experimental. + * Author: Dag Brattli + * Created at: Mon Mar 8 14:06:12 1999 + * Modified at: Sat Dec 25 16:07:54 1999 + * Modified by: Dag Brattli + * + * Copyright (c) 1999 Dag Brattli, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * Neither Dag Brattli nor University of Tromsø admit liability nor + * provide warranty for any of this software. This material is + * provided "AS-IS" and at no charge. + * + ********************************************************************/ + +/* + * $Id$ + * + * GNOKII modifications: + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:20 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.3 2001/07/05 10:54:53 pkot + * Solaris 2.7 fixes - should be harmless for other OSes (Michael Wiedmann) + * + * Revision 1.2 2001/07/03 00:03:37 pkot + * Small fixes to let gnokii compile and work under solaris (thanks to Artur Kubiak) + * + */ + +#ifndef IRDA_H +#define IRDA_H + +#include +#include + +/* Hint bit positions for first hint byte */ +#define HINT_PNP 0x01 +#define HINT_PDA 0x02 +#define HINT_COMPUTER 0x04 +#define HINT_PRINTER 0x08 +#define HINT_MODEM 0x10 +#define HINT_FAX 0x20 +#define HINT_LAN 0x40 +#define HINT_EXTENSION 0x80 + +/* Hint bit positions for second hint byte (first extension byte) */ +#define HINT_TELEPHONY 0x01 +#define HINT_FILE_SERVER 0x02 +#define HINT_COMM 0x04 +#define HINT_MESSAGE 0x08 +#define HINT_HTTP 0x10 +#define HINT_OBEX 0x20 + +/* IrLMP character code values */ +#define CS_ASCII 0x00 +#define CS_ISO_8859_1 0x01 +#define CS_ISO_8859_2 0x02 +#define CS_ISO_8859_3 0x03 +#define CS_ISO_8859_4 0x04 +#define CS_ISO_8859_5 0x05 +#define CS_ISO_8859_6 0x06 +#define CS_ISO_8859_7 0x07 +#define CS_ISO_8859_8 0x08 +#define CS_ISO_8859_9 0x09 +#define CS_UNICODE 0xff + +/* These are the currently known dongles */ +typedef enum { + IRDA_TEKRAM_DONGLE = 0, + IRDA_ESI_DONGLE = 1, + IRDA_ACTISYS_DONGLE = 2, + IRDA_ACTISYS_PLUS_DONGLE = 3, + IRDA_GIRBIL_DONGLE = 4, + IRDA_LITELINK_DONGLE = 5, + IRDA_AIRPORT_DONGLE = 6, + IRDA_OLD_BELKIN_DONGLE = 7, +} IRDA_DONGLE; + +/* Protocol types to be used for SOCK_DGRAM */ +enum { + IRDAPROTO_UNITDATA = 0, + IRDAPROTO_ULTRA = 1, + IRDAPROTO_MAX +}; + +#define SOL_IRLMP 266 /* Same as SOL_IRDA for now */ +#define SOL_IRTTP 266 /* Same as SOL_IRDA for now */ + +#define IRLMP_ENUMDEVICES 1 +#define IRLMP_IAS_SET 2 +#define IRLMP_IAS_QUERY 3 +#define IRLMP_HINTS_SET 4 +#define IRLMP_QOS_SET 5 +#define IRLMP_QOS_GET 6 +#define IRLMP_MAX_SDU_SIZE 7 +#define IRLMP_IAS_GET 8 + +#define IRTTP_MAX_SDU_SIZE IRLMP_MAX_SDU_SIZE /* Compatibility */ + +/* LM-IAS Limits */ +#define IAS_MAX_STRING 256 +#define IAS_MAX_OCTET_STRING 1024 +#define IAS_MAX_CLASSNAME 64 +#define IAS_MAX_ATTRIBNAME 256 + +/* LM-IAS Attribute types */ +#define IAS_MISSING 0 +#define IAS_INTEGER 1 +#define IAS_OCT_SEQ 2 +#define IAS_STRING 3 + +#define LSAP_ANY 0xff +#define DEV_ADDR_ANY 0xffffffff + +struct sockaddr_irda { + sa_family_t sir_family; /* AF_IRDA */ + uint8_t sir_lsap_sel; /* LSAP selector */ + uint32_t sir_addr; /* Device address */ + char sir_name[25]; /* Usually :IrDA:TinyTP */ +}; + +struct irda_device_info { + uint32_t saddr; /* Address of local interface */ + uint32_t daddr; /* Address of remote device */ + char info[22]; /* Description */ + uint8_t charset; /* Charset used for description */ + uint8_t hints[2]; /* Hint bits */ +}; + +struct irda_device_list { + uint32_t len; + struct irda_device_info dev[1]; +}; + +struct irda_ias_set { + char irda_class_name[IAS_MAX_CLASSNAME]; + char irda_attrib_name[IAS_MAX_ATTRIBNAME]; + unsigned int irda_attrib_type; + union { + unsigned int irda_attrib_int; + struct { + unsigned short len; + u_char octet_seq[IAS_MAX_OCTET_STRING]; + } irda_attrib_octet_seq; + struct { + unsigned char len; + unsigned char charset; + unsigned char string[IAS_MAX_STRING]; + } irda_attrib_string; + } attribute; + uint32_t daddr; + +}; + +/* Some private IOCTL's (max 16) */ +#define SIOCSDONGLE (SIOCDEVPRIVATE + 0) +#define SIOCGDONGLE (SIOCDEVPRIVATE + 1) +#define SIOCSBANDWIDTH (SIOCDEVPRIVATE + 2) +#define SIOCSMEDIABUSY (SIOCDEVPRIVATE + 3) +#define SIOCGMEDIABUSY (SIOCDEVPRIVATE + 4) +#define SIOCGRECEIVING (SIOCDEVPRIVATE + 5) +#define SIOCSMODE (SIOCDEVPRIVATE + 6) +#define SIOCGMODE (SIOCDEVPRIVATE + 7) +#define SIOCSDTRRTS (SIOCDEVPRIVATE + 8) +#define SIOCGQOS (SIOCDEVPRIVATE + 9) + +/* No reason to include just because of this one ;-) */ +#define IRNAMSIZ 16 + +/* IrDA quality of service information (must not exceed 16 bytes) */ +struct if_irda_qos { + uint32_t baudrate; + uint16_t data_size; + uint16_t window_size; + uint16_t min_turn_time; + uint16_t max_turn_time; + uint8_t add_bofs; + uint8_t link_disc; +}; + +/* For setting RTS and DTR lines of a dongle */ +struct if_irda_line { + unsigned char dtr; + unsigned char rts; +}; + +/* IrDA interface configuration (data part must not exceed 16 bytes) */ +struct if_irda_req { + union { + char ifrn_name[IRNAMSIZ]; /* if name, e.g. "irda0" */ + } ifr_ifrn; + + /* Data part */ + union { + struct if_irda_line ifru_line; + struct if_irda_qos ifru_qos; + unsigned short ifru_flags; + unsigned int ifru_receiving; + unsigned int ifru_mode; + unsigned int ifru_dongle; + } ifr_ifru; +}; + +#define ifr_baudrate ifr_ifru.ifru_qos.baudrate +#define ifr_receiving ifr_ifru.ifru_receiving +#define ifr_dongle ifr_ifru.ifru_dongle +#define ifr_mode ifr_ifru.ifru_mode +#define ifr_dtr ifr_ifru.ifru_line.dtr +#define ifr_rts ifr_ifru.ifru_line.rts + +#endif /* IRDA_H */ diff --git a/include/mbus-2110.h b/include/mbus-2110.h new file mode 100644 index 0000000..de395da --- /dev/null +++ b/include/mbus-2110.h @@ -0,0 +1,37 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for 2110 code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.21 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __mbus_2110_h +#define __mbus_2110_h + +#ifndef __gsm_common_h +#include "gsm-common.h" /* Needed for GSM_Error etc. */ +#endif + + /* Global variables */ +extern bool MB21_LinkOK; +extern GSM_Functions MB21_Functions; +extern GSM_Information MB21_Information; + +#endif /* __mbus_2110_h */ diff --git a/include/mbus-6160.h b/include/mbus-6160.h new file mode 100644 index 0000000..ea1708d --- /dev/null +++ b/include/mbus-6160.h @@ -0,0 +1,203 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for 6160 code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.16 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __mbus_6160_h +#define __mbus_6160_h + +#ifndef __gsm_common_h +#include "gsm-common.h" /* Needed for GSM_Error etc. */ +#endif + + /* Global variables */ +extern bool MB61_LinkOK; +extern GSM_Functions MB61_Functions; +extern GSM_Information MB61_Information; + + + /* Prototypes for the functions designed to be used externally. */ +GSM_Error MB61_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + +bool MB61_OpenSerial(void); +void MB61_Terminate(void); + +int MB61_GetMemoryType(GSM_MemoryType memory_type); + +GSM_Error MB61_GetMemoryLocation(GSM_PhonebookEntry *entry); + +GSM_Error MB61_WritePhonebookLocation(GSM_PhonebookEntry *entry); + +GSM_Error MB61_GetSpeedDial(GSM_SpeedDial *entry); + +GSM_Error MB61_SetSpeedDial(GSM_SpeedDial *entry); + +GSM_Error MB61_GetMemoryStatus(GSM_MemoryStatus *Status); + +GSM_Error MB61_GetSMSStatus(GSM_SMSStatus *Status); +GSM_Error MB61_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error MB61_GetSMSMessage(GSM_SMSMessage *message); + +GSM_Error MB61_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error MB61_SetSMSCenter(GSM_MessageCenter *MessageCenter); + +GSM_Error MB61_DeleteSMSMessage(GSM_SMSMessage *message); + +GSM_Error MB61_SendSMSMessage(GSM_SMSMessage *SMS, int size); + +GSM_Error MB61_GetRFLevel(GSM_RFUnits *units, float *level); + +GSM_Error MB61_GetBatteryLevel(GSM_BatteryUnits *units, float *level); + + /* These aren't presently implemented. */ +GSM_Error MB61_SaveSMSMessage(GSM_SMSMessage *SMS); +GSM_Error MB61_GetPowerSource(GSM_PowerSource *source); +GSM_Error MB61_GetDisplayStatus(int *Status); + +GSM_Error MB61_EnterSecurityCode(GSM_SecurityCode SecurityCode); +GSM_Error MB61_GetSecurityCodeStatus(int *Status); + +GSM_Error MB61_GetIMEI(char *imei); +GSM_Error MB61_GetRevision(char *revision); +GSM_Error MB61_GetModel(char *model); +GSM_Error MB61_GetDateTime(GSM_DateTime *date_time); +GSM_Error MB61_SetDateTime(GSM_DateTime *date_time); +GSM_Error MB61_GetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error MB61_SetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error MB61_DialVoice(char *Number); +GSM_Error MB61_DialData(char *Number, char type, void (* callpassup)(char c)); +GSM_Error MB61_GetIncomingCallNr(char *Number); +GSM_Error MB61_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo); +GSM_Error MB61_GetCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB61_WriteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB61_DeleteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB61_Netmonitor(unsigned char mode, char *Screen); +GSM_Error MB61_SendDTMF(char *String); +GSM_Error MB61_GetBitmap(GSM_Bitmap *Bitmap); +GSM_Error MB61_SetBitmap(GSM_Bitmap *Bitmap); +GSM_Error MB61_SetRingTone(GSM_Ringtone *ringtone); +GSM_Error MB61_SendRingTone(GSM_Ringtone *ringtone, char *dest); +GSM_Error MB61_Reset(unsigned char type); +GSM_Error MB61_GetProfile(GSM_Profile *Profile); +GSM_Error MB61_SetProfile(GSM_Profile *Profile); +bool MB61_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx); +GSM_Error MB61_CancelCall(void); + +GSM_Error MB61_EnableDisplayOutput(); +GSM_Error MB61_DisableDisplayOutput(); + +GSM_Error MB61_EnableCellBroadcast (); +GSM_Error MB61_DisableCellBroadcast(void); +GSM_Error MB61_ReadCellBroadcast (GSM_CBMessage *Message); + /* All defines and prototypes from here down are specific to + this model and so are #ifdef out if __mbus_6160_c isn't + defined. */ +#ifdef __mbus_6160_c + +#define MB61_MAX_RECEIVE_LENGTH (160) + +#define MB61_MAX_TRANSMIT_LENGTH (200) /* Arbitrary */ +#define MSG_ADDR_PC (0x1d) +#define MSG_ADDR_PHONE (0x00) +#define MSG_ADDR_SERVICE (0x10) +#define MSG_ADDR_UNKNOWN (0xf8) +#define MSG_ADDR_GLOBAL (0xff) + +#define MAX_5160_PHONEBOOK_ENTRIES (100) +#define MAX_5160_PHONEBOOK_NUMBER_LENGTH (16) +#define MAX_5160_PHONEBOOK_NAME_LENGTH (16) + +#define MAX_6160_PHONEBOOK_ENTRIES (199) +#define MAX_6161_PHONEBOOK_ENTRIES (199) /* Assumed */ +#define MAX_6162_PHONEBOOK_ENTRIES (199) /* Assumed */ +#define MAX_616X_PHONEBOOK_NUMBER_LENGTH (16) +#define MAX_616X_PHONEBOOK_NAME_LENGTH (16) + +#define MAX_6185_PHONEBOOK_ENTRIES (200) /* Assumed */ +#define MAX_6185_PHONEBOOK_NUMBER_LENGTH (16) /* Assumed */ +#define MAX_6185_PHONEBOOK_NAME_LENGTH (16) /* Assumed */ + + /* States for receive code. */ +enum MB61_RX_States {MB61_RX_Sync, + MB61_RX_GetDestination, + MB61_RX_GetSource, + MB61_RX_GetCommand, + MB61_RX_GetLengthMSB, + MB61_RX_GetLengthLSB, + MB61_RX_GetMessage, + MB61_RX_GetCSum}; + + /* This table duplicates info in xgnokii, maybe we need a single + data structure for this someplace in the common codebase ... HAB */ +enum MB61_Models {MB61_ModelUnknown, + MB61_Model5160, /* NSW-1 */ + MB61_Model6110, /* NSE-3 */ + MB61_Model6160, /* NSW-3 */ + MB61_Model6161, /* ????? */ + MB61_Model6162, /* ????? */ + MB61_Model6185, /* NSD-3 */ + MB61_Model7110 /* NSE-5 */ + +}; + + + /* We need to keep track of what response is expected as there + is no unambiguous field in responses from the phone to + provide this information. */ +enum MB61_Responses {MB61_Response_Unknown, + MB61_Response_0xD0_Init, + MB61_Response_0xD2_ID, + MB61_Response_0xD2_Version, + MB61_Response_0x40_WriteAcknowledge, + MB61_Response_0x40_PhonebookRead, + MB61_Response_0x40_LongPhonebookRead}; + + /* Prototypes for internal functions. */ +void MB61_ThreadLoop(void); +void MB61_SigHandler(int status); +void MB61_ThreadLoop(void); +void MB61_UpdateSequenceNumber(void); + +bool MB61_TX_SendStandardAcknowledge(u8 sequence_number); + +int MB61_TX_SendMessage(u8 destination, u8 source, u8 command, u8 sequence_byte, int message_length, u8 *buffer); +void MB61_TX_SendPhoneIDRequest(void); +bool MB61_TX_SendPhonebookReadRequest(u8 entry); +bool MB61_TX_SendLongPhonebookReadRequest(u8 entry); +GSM_Error MB61_TX_SendPhonebookWriteRequest(GSM_PhonebookEntry *entry); + +bool MB61_InitialiseLink(void); +void MB61_SetExpectedResponse(enum MB61_Responses response); +bool MB61_WaitForExpectedResponse(int timeout); +void MB61_RX_StateMachine(char rx_byte); +enum MB61_RX_States MB61_RX_DispatchMessage(void); +void MB61_RX_DisplayMessage(void); +void MB61_RX_Handle0x40_PhonebookRead(void); +void MB61_RX_Handle0x40_LongPhonebookRead(void); +void MB61_RX_Handle0xD2_ID(void); +void MB61_RX_Handle0xD2_Version(void); + +#endif /* __mbus_6160_c */ + +#endif /* __mbus_6160_h */ diff --git a/include/mbus-640.h b/include/mbus-640.h new file mode 100644 index 0000000..ef37f38 --- /dev/null +++ b/include/mbus-640.h @@ -0,0 +1,128 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for 640 code. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:20 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.10 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __mbus_640_h +#define __mbus_640_h + +#ifndef __gsm_common_h +#include "gsm-common.h" /* Needed for GSM_Error etc. */ +#endif + + /* Global variables */ +extern bool MB640_LinkOK; +extern GSM_Functions MB640_Functions; +extern GSM_Information MB640_Information; + + + /* Prototypes for the functions designed to be used externally. */ +GSM_Error MB640_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); + +void MB640_Terminate(void); + +int MB640_GetMemoryType(GSM_MemoryType memory_type); + +GSM_Error MB640_GetMemoryLocation(GSM_PhonebookEntry *entry); + +GSM_Error MB640_WritePhonebookLocation(GSM_PhonebookEntry *entry); + +GSM_Error MB640_GetSpeedDial(GSM_SpeedDial *entry); + +GSM_Error MB640_SetSpeedDial(GSM_SpeedDial *entry); + +GSM_Error MB640_GetMemoryStatus(GSM_MemoryStatus *Status); + +GSM_Error MB640_GetSMSStatus(GSM_SMSStatus *Status); +GSM_Error MB640_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error MB640_GetSMSMessage(GSM_SMSMessage *message); + +GSM_Error MB640_GetSMSCenter(GSM_MessageCenter *MessageCenter); +GSM_Error MB640_SetSMSCenter(GSM_MessageCenter *MessageCenter); + +GSM_Error MB640_DeleteSMSMessage(GSM_SMSMessage *message); + +GSM_Error MB640_SendSMSMessage(GSM_SMSMessage *SMS, int data_size); +GSM_Error MB640_SaveSMSMessage(GSM_SMSMessage *SMS); + +GSM_Error MB640_GetRFLevel(GSM_RFUnits *units, float *level); + +GSM_Error MB640_GetBatteryLevel(GSM_BatteryUnits *units, float *level); + + /* These aren't presently implemented. */ +GSM_Error MB640_GetPowerSource(GSM_PowerSource *source); +GSM_Error MB640_GetDisplayStatus(int *Status); + +GSM_Error MB640_EnterSecurityCode(GSM_SecurityCode SecurityCode); +GSM_Error MB640_GetSecurityCodeStatus(int *Status); + +GSM_Error MB640_GetIMEI(char *imei); +GSM_Error MB640_GetRevision(char *revision); +GSM_Error MB640_GetModel(char *model); +GSM_Error MB640_GetDateTime(GSM_DateTime *date_time); +GSM_Error MB640_SetDateTime(GSM_DateTime *date_time); +GSM_Error MB640_GetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error MB640_SetAlarm(int alarm_number, GSM_DateTime *date_time); +GSM_Error MB640_DialVoice(char *Number); +GSM_Error MB640_DialData(char *Number, char type, void (* callpassup)(char c)); +GSM_Error MB640_GetIncomingCallNr(char *Number); +GSM_Error MB640_GetNetworkInfo(GSM_NetworkInfo *NetworkInfo); +GSM_Error MB640_GetCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB640_WriteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB640_DeleteCalendarNote(GSM_CalendarNote *CalendarNote); +GSM_Error MB640_Netmonitor(unsigned char mode, char *Screen); +GSM_Error MB640_SendDTMF(char *String); +GSM_Error MB640_GetBitmap(GSM_Bitmap *Bitmap); +GSM_Error MB640_SetBitmap(GSM_Bitmap *Bitmap); +GSM_Error MB640_SetRingTone(GSM_Ringtone *ringtone); +GSM_Error MB640_SendRingTone(GSM_Ringtone *ringtone, char *dest); +GSM_Error MB640_Reset(unsigned char type); +GSM_Error MB640_GetProfile(GSM_Profile *Profile); +GSM_Error MB640_SetProfile(GSM_Profile *Profile); +bool MB640_SendRLPFrame(RLP_F96Frame *frame, bool out_dtx); +GSM_Error MB640_CancelCall(void); + +GSM_Error MB640_EnableDisplayOutput(); +GSM_Error MB640_DisableDisplayOutput(); + +GSM_Error MB640_EnableCellBroadcast (); +GSM_Error MB640_DisableCellBroadcast(void); +GSM_Error MB640_ReadCellBroadcast (GSM_CBMessage *Message); + /* All defines and prototypes from here down are specific to + this model and so are #ifdef out if __mbus_640_c isn't + defined. */ +#ifdef __mbus_640_c + +#define MB640_MAX_MODEL_LENGTH (8) + + /* Prototypes for internal functions. */ +void MB640_ThreadLoop(void); +void MB640_SigHandler(int status); +bool MB640_OpenSerial(void); +GSM_Error MB640_SendPacket( u8 *buffer, u8 length ); + + +#endif /* __mbus_640_c */ + +#endif /* __mbus_640_h */ diff --git a/include/misc.h b/include/misc.h new file mode 100644 index 0000000..3e91ff0 --- /dev/null +++ b/include/misc.h @@ -0,0 +1,179 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Header file for miscellaneous defines, typedefs etc. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:21 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.26 2001/11/14 10:46:12 pkot + Small cleanup with __unices__ + + Revision 1.25 2001/07/03 15:27:14 pkot + AT commands for SMS handling support (Tamas Bondar) + Small at-emulator code cleanup (me) + + Revision 1.24 2001/06/28 00:28:46 pkot + Small docs updates (Pawel Kot) + + +*/ + +#ifndef __misc_h +#define __misc_h + +#include "config.h" + +/* Some general defines. */ + +#ifndef false + #define false (0) +#endif + +#ifndef true + #define true (!false) +#endif + +#ifndef bool + #define bool int +#endif + +/* A define to make debug printfs neat */ +#ifndef DEBUG +#define dprintf(a...) do { } while (0) +#else +#define dprintf(a...) do { fprintf(stderr, a); fflush(stderr); } while (0) +#endif + +/* Use gsprintf instead of sprintf and sprintf */ +#ifdef HAVE_SNPRINTF +# define gsprintf(a, b, c...) snprintf(a, b, c) +#else +# define gsprintf(a, b, c...) sprintf(a, c) +#endif + +/* Get rid of long defines. Use #if __unices__ */ +#define __unices__ defined(__svr4__) || defined(__FreeBSD__) || defined(__bsdi__) +#if __unices__ +# include +# include +#endif + +/* This one is for NLS. */ +#ifdef USE_NLS + #include + #define _(x) gettext(x) +#else + #define _(x) (x) +#endif /* USE_NLS */ + +/* Definitions for u8, u16, u32 and u64, borrowed from + /usr/src/linux/include/asm-i38/types.h */ + +#ifndef u8 + typedef unsigned char u8; +#endif + +#ifndef u16 + typedef unsigned short u16; +#endif + +#ifndef u32 + typedef unsigned int u32; +#endif + +#ifndef s32 + typedef int s32; +#endif + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) + #ifndef u64 + typedef unsigned long long u64; + #endif + + #ifndef s64 + typedef signed long long s64; + #endif +#endif + +/* This one is for FreeBSD and similar systems without __ptr_t_ */ +/* FIXME: autoconf should take care of this. */ + +#ifndef __ptr_t + typedef void * __ptr_t; +#endif /* __ptr_t */ + + +/* Add here any timer operations which are not supported by libc5 */ + +#ifndef HAVE_TIMEOPS +#ifdef WIN32 + +#include +#include +#define timersub(a, b, result) + do { + (result)->tv_sec = (a)->time - (b)->time; + (result)->tv_usec = ((a)->millitm - (b)->millitm) * 1000; + if ((result)->tv_usec < 0) { + --(result)->tv_sec; + (result)->tv_usec += 1000000; + } + } while (0) +#define gettimeofday(a, b) _ftime(a) + +#else +#include + +#ifndef timersub +#define timersub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ + } while (0) +#endif + +#endif /* WIN32 */ +#endif /* HAVE_TIMEOPS */ + + +#include +extern int GetLine(FILE *File, char *Line, int count); + +/* For models table */ +typedef struct { + char *model; + char *number; + int flags; +} PhoneModel; + +#define PM_CALLERGROUP 0x0001 +#define PM_NETMONITOR 0x0002 +#define PM_KEYBOARD 0x0004 +#define PM_SMS 0x0008 +#define PM_CALENDAR 0x0010 +#define PM_DTMF 0x0020 +#define PM_DATA 0x0040 +#define PM_SPEEDDIAL 0x0080 +#define PM_EXTPBK 0x0100 +#define PM_AUTHENTICATION 0x0200 + +extern char *GetModel (const char *); +extern PhoneModel *GetPhoneModel (const char *); + +#endif /* __misc_h */ + diff --git a/include/phones/generic.h b/include/phones/generic.h new file mode 100644 index 0000000..18231a3 --- /dev/null +++ b/include/phones/generic.h @@ -0,0 +1,67 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copytight (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides useful functions for all phones + See README for more details on supported mobile phones. + + The various routines are called PGEN_... + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.3 2001/03/21 23:36:08 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.2 2001/03/11 11:12:21 machek + Added header for PGEN_IncomingDefault. + + Revision 1.1 2001/02/21 19:57:12 chris + More fiddling with the directory layout + + Revision 1.4 2001/01/29 17:14:44 chris + dprintf now in misc.h (and fiddling with 7110 code) + + Revision 1.3 2001/01/23 15:32:44 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.2 2001/01/17 02:54:56 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + +*/ + +#ifndef __phones_generic_h +#define __phones_generic_h + +#include "gsm-common.h" +#include "misc.h" + +/* Generic Functions */ + +GSM_Error PGEN_DebugMessage(int type, unsigned char *mes, int len); +GSM_Error PGEN_IncomingDefault(int messagetype, unsigned char *buffer, int length); + + +#endif + + + + + + + + diff --git a/include/phones/nk2110.h b/include/phones/nk2110.h new file mode 100644 index 0000000..dce5448 --- /dev/null +++ b/include/phones/nk2110.h @@ -0,0 +1,40 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Pavel Machek + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 2110 series. + See README for more details on supported mobile phones. + + The various routines are called P2110_(whatever). + +*/ + +#ifndef __phones_nk2110_h +#define __phones_nk2110_h + +#define LM_SMS_EVENT 0x37 +#define LM_SMS_COMMAND 0x38 +#define LM_SMS_READ_STORED_DATA 0x02 /* These are really subcommands of LM_SMS_COMMAND */ +#define LM_SMS_RECEIVED_PP_DATA 0x06 +#define LM_SMS_FORWARD_STORED_DATA 0x0b +#define LM_SMS_RESERVE_PP 0x12 +#define LN_SMS_NORMAL_RESERVE 1 +#define LN_SMS_NEW_MSG_INDICATION 2 + +#define LM_SMS_NEW_MESSAGE_INDICATION 0x1a +#define LM_SMS_ALIVE_TEST 0x1e +#define LM_SMS_ALIVE_ACK 0x1f +#define LM_SMS_PP_RESERVE_COMPLETE 22 + + +#define LN_LOC_COMMAND 0x1f + +#endif /* #ifndef __phones_nk2110_h */ diff --git a/include/phones/nk3110.h b/include/phones/nk3110.h new file mode 100644 index 0000000..6f27177 --- /dev/null +++ b/include/phones/nk3110.h @@ -0,0 +1,86 @@ + +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 3110 series. + See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.1 2001/11/08 16:39:09 pkot + 3810/3110 support for the new structure (Tamas Bondar) + + +*/ + +#ifndef __phones_nk3110_h +#define __phones_nk3110_h + +#include +#include "gsm-statemachine.h" + +/* Phone Memory Sizes */ +#define P3110_MEMORY_SIZE_SM 20 +#define P3110_MEMORY_SIZE_ME 0 + +/* 2 seconds idle timeout */ +#define P3110_KEEPALIVE_TIMEOUT 20; + +/* Number of times to try resending SMS (empirical) */ +#define P3110_SMS_SEND_RETRY_COUNT 4 + +#ifdef __phones_nk3110_c /* Prototype functions for phone-3110.c only */ + +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_Initialise(GSM_Statemachine *state); +static GSM_Error P3110_GetSMSInfo(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_GetPhoneInfo(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_GetStatusInfo(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_Identify(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_GetSMSMessage(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_DeleteSMSMessage(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_SendSMSMessage(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P3110_IncomingNothing(int messagetype, unsigned char *message, int length, GSM_Data *data); +static GSM_Error P3110_IncomingCall(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingCallAnswered(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingCallEstablished(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingEndOfOutgoingCall(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingEndOfIncomingCall(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingEndOfOutgoingCall2(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingRestart(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingInitFrame_0x15(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingInitFrame_0x16(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingInitFrame_0x17(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSUserData(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSSend(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSSendError(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSHeader(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSError(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSDelete(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSDeleteError(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSDelivered(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingNoSMSInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingSMSInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingPINEntered(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingStatusInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P3110_IncomingPhoneInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +void P3110_KeepAliveLoop(GSM_Statemachine *state); +void P3110_DecodeTime(unsigned char *b, GSM_DateTime *dt); +int P3110_bcd2int(u8 x); + +#endif /* #ifdef __phones_nk3110_c */ + +#endif /* #ifndef __phones_nk3110_h */ diff --git a/include/phones/nk6100.h b/include/phones/nk6100.h new file mode 100644 index 0000000..01950a8 --- /dev/null +++ b/include/phones/nk6100.h @@ -0,0 +1,76 @@ +/* + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Pawe³ Kot + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 6100/5100 series. + See README for more details on supported mobile phones. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.3 2001/11/17 16:44:07 pkot + Cleanup. Reading SMS for 6100 series. Not that it has some bugs more and does not support UDH yet + + Revision 1.2 2001/11/15 12:15:04 pkot + smslib updates. begin work on sms in 6100 series + + Revision 1.1 2001/07/09 23:55:36 pkot + Initial support for 6100 series in the new structure (me) + +*/ + +#ifndef __phones_nk6100_h +#define __phones_nk6100_h + +#include +#include "gsm-statemachine.h" + +/* Phone Memory types */ + +#define P6100_MEMORY_MT 0x09 /* ?? combined ME and SIM phonebook */ +#define P6100_MEMORY_ME 0x05 /* ME (Mobile Equipment) phonebook */ +#define P6100_MEMORY_SM 0x06 /* SIM phonebook */ +#define P6100_MEMORY_FD 0x04 /* ?? SIM fixdialling-phonebook */ +#define P6100_MEMORY_ON 0x07 /* ?? SIM (or ME) own numbers list */ +#define P6100_MEMORY_EN 0x08 /* ?? SIM (or ME) emergency number */ +#define P6100_MEMORY_DC 0x01 /* ME dialled calls list */ +#define P6100_MEMORY_RC 0x03 /* ME received calls list */ +#define P6100_MEMORY_MC 0x02 /* ME missed (unanswered received) calls list */ +#define P6100_MEMORY_VOICE 0x0b /* Voice Mailbox */ +/* This is used when the memory type is unknown. */ +#define P6100_MEMORY_XX 0xff + +#ifdef __phones_nk6100_c /* Prototype functions for phone-6100.c only */ + +static GSM_Error Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); +static GSM_Error Initialise(GSM_Statemachine *state); +static GSM_Error GetModelName(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetRevision(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetIMEI(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error Identify(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetBatteryLevel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetRFLevel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error GetSMSMessage(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error IncomingPhoneInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error IncomingModelInfo(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error IncomingSMS(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error Incoming0x03(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error Incoming0x0a(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error Incoming0x17(int messagetype, unsigned char *buffer, int length, GSM_Data *data); + + +static int GetMemoryType(GSM_MemoryType memory_type); + +#endif /* #ifdef __phones_nk6100_c */ + +#endif /* #ifndef __phones_nk6100_h */ diff --git a/include/phones/nk7110.h b/include/phones/nk7110.h new file mode 100644 index 0000000..885e4f3 --- /dev/null +++ b/include/phones/nk7110.h @@ -0,0 +1,242 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copytight (C) 2000 Chris Kemp + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides functions specific to the 7110 series. + See README for more details on supported mobile phones. + + The various routines are called P7110_(whatever). + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.7 2001/11/22 17:56:53 pkot + smslib update. sms sending + + Revision 1.6 2001/11/08 16:47:48 pkot + Start fiddling with 7110 and SMS + + Revision 1.5 2001/06/27 23:52:52 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.4 2001/05/24 20:47:30 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.3 2001/03/23 13:40:25 chris + Pavel's patch and a few fixes. + + Revision 1.2 2001/03/21 23:36:08 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.1 2001/02/21 19:57:13 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/16 14:29:54 chris + Restructure of common/. Fixed a problem in fbus-phonet.c + Lots of dprintfs for Marcin + Any size xpm can now be loaded (eg for 7110 startup logos) + nk7110 code detects 7110/6210 and alters startup logo size to suit + Moved Marcin's extended phonebook code into gnokii.c + + Revision 1.4 2001/01/29 17:14:44 chris + dprintf now in misc.h (and fiddling with 7110 code) + + Revision 1.3 2001/01/23 15:32:44 chris + Pavel's 'break' and 'static' corrections. + Work on logos for 7110. + + Revision 1.2 2001/01/17 02:54:56 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.1 2001/01/14 22:47:01 chris + Preliminary 7110 support (dlr9 only) and the beginnings of a new structure + + +*/ + +#ifndef __phones_nk7110_h +#define __phones_nk7110_h + +#include +#include "gsm-statemachine.h" + +extern bool P7110_LinkOK; + +/* Message types */ +#define P7110_MSG_COMMSTATUS 0x01 /* Communication status */ +#define P7110_MSG_SMS 0x02 /* SMS handling */ +#define P7110_MSG_PHONEBOOK 0x03 /* Phonebook functions */ +#define P7110_MSG_NETSTATUS 0x0a /* Network status */ +#define P7110_MSG_CALENDAR 0x13 /* Calendar notes */ +#define P7110_MSG_FOLDER 0x14 /* Folders handling */ +#define P7110_MSG_BATTERY 0x17 /* Battery info */ +#define P7110_MSG_CLOCK 0x19 /* Date & alarm */ +#define P7110_MSG_IDENTITY 0x1b /* Brief product info */ +#define P7110_MSG_RINGTONE 0x1f /* Ringtone handling */ +#define P7110_MSG_SECURITY 0x40 /* Security */ +#define P7110_MSG_STLOGO 0x7a /* Startup logo */ +#define P7110_MSG_VERREQ 0xd1 /* HW&SW version request */ +#define P7110_MSG_VERRESP 0xd2 /* HW&SW version response */ + +/* SMS handling message subtypes (send) */ +#define P7110_SUBSMS_SEND_SMS 0x01 /* Send SMS */ +#define P7110_SUBSMS_SET_CELLBRD 0x20 /* Set cell broadcast */ +#define P7110_SUBSMS_SET_SMSC 0x30 /* Set SMS center */ +#define P7110_SUBSMS_GET_SMSC 0x33 /* Get SMS center */ +/* SMS handling message subtypes (recv) */ +#define P7110_SUBSMS_SMS_SENT 0x02 /* SMS sent */ +#define P7110_SUBSMS_SEND_FAIL 0x03 /* SMS send failed */ +#define P7110_SUBSMS_SMS_RCVD 0x10 /* SMS received */ +#define P7110_SUBSMS_CELLBRD_OK 0x21 /* Set cell broadcast success*/ +#define P7110_SUBSMS_CELLBRD_FAIL 0x22 /* Set cell broadcast failure */ +#define P7110_SUBSMS_READ_CELLBRD 0x23 /* Read cell broadcast */ +#define P7110_SUBSMS_SMSC_OK 0x31 /* Set SMS center success*/ +#define P7110_SUBSMS_SMSC_FAIL 0x32 /* Set SMS center failure */ +#define P7110_SUBSMS_SMSC_RCVD 0x34 /* SMS center received */ +#define P7110_SUBSMS_SMSC_RCVFAIL 0x35 /* SMS center receive failure */ + +/* Clock handling message subtypes (send) */ +#define P7110_SUBCLO_GET_DATE 0x62 /* Get date & time */ +#define P7110_SUBCLO_GET_ALARM 0x6D /* Get alarm */ +/* Clock handling message subtypes (recv) */ +#define P7110_SUBCLO_DATE_RCVD 0x63 /* Received date & time */ +#define P7110_SUBCLO_ALARM_RCVD 0x6E /* Received alarm */ +/* Alarm on/off */ +#define P7110_ALARM_ENABLED 0x02 /* Alarm enabled */ +#define P7110_ALARM_DISABLED 0x01 /* Alarm disabled */ + +/* Calendar handling message subtypes (send) */ +#define P7110_SUBCAL_ADD_MEETING 0x01 /* Add meeting note */ +#define P7110_SUBCAL_ADD_CALL 0x03 /* Add call note */ +#define P7110_SUBCAL_ADD_BIRTHDAY 0x05 /* Add birthday note */ +#define P7110_SUBCAL_ADD_REMINDER 0x07 /* Add reminder note */ +#define P7110_SUBCAL_DEL_NOTE 0x0b /* Delete note */ +#define P7110_SUBCAL_GET_NOTE 0x19 /* Get note */ +#define P7110_SUBCAL_GET_FREEPOS 0x31 /* Get first free position */ +#define P7110_SUBCAL_GET_INFO 0x3a /* Calendar sumary */ +/* Calendar handling message subtypes (recv) */ +#define P7110_SUBCAL_ADD_MEETING_RESP 0x02 /* Add meeting note response */ +#define P7110_SUBCAL_ADD_CALL_RESP 0x04 /* Add call note response */ +#define P7110_SUBCAL_ADD_BIRTHDAY_RESP 0x06 /* Add birthday note response */ +#define P7110_SUBCAL_ADD_REMINDER_RESP 0x08 /* Add reminder note response */ +#define P7110_SUBCAL_DEL_NOTE_RESP 0x0c /* Dletete note response */ +#define P7110_SUBCAL_NOTE_RCVD 0x1a /* Received note */ +#define P7110_SUBCAL_FREEPOS_RCVD 0x32 /* Received first free position */ +#define P7110_SUBCAL_INFO_RCVD 0x3b /* Received calendar summary*/ +/* Calendar note types */ +#define P7110_NOTE_MEETING 0x01 /* Metting */ +#define P7110_NOTE_CALL 0x02 /* Call */ +#define P7110_NOTE_BIRTHDAY 0x04 /* Birthday */ +#define P7110_NOTE_REMINDER 0x08 /* Reminder */ + +/* Phone Memory types */ +#define P7110_MEMORY_DIALLED 0x01 /* Dialled numbers */ +#define P7110_MEMORY_MISSED 0x02 /* Missed calls */ +#define P7110_MEMORY_RECEIVED 0x03 /* Received calls */ +#define P7110_MEMORY_PHONE 0x05 /* Telephone phonebook */ +#define P7110_MEMORY_SIM 0x06 /* SIM phonebook */ +#define P7110_MEMORY_SPEEDDIALS 0x0e /* Speed dials */ +#define P7110_MEMORY_GROUPS 0x10 /* Caller groups */ + +#define P7110_MEMORY_DC 0x01 /* ME dialled calls list */ +#define P7110_MEMORY_MC 0x02 /* ME missed (unanswered received) calls list */ +#define P7110_MEMORY_RC 0x03 /* ME received calls list */ +#define P7110_MEMORY_FD 0x04 /* ?? SIM fixdialling-phonebook */ +#define P7110_MEMORY_ME 0x05 /* ME (Mobile Equipment) phonebook */ +#define P7110_MEMORY_SM 0x06 /* SIM phonebook */ +#define P7110_MEMORY_ON 0x07 /* ?? SIM (or ME) own numbers list */ +#define P7110_MEMORY_EN 0x08 /* ?? SIM (or ME) emergency number */ +#define P7110_MEMORY_MT 0x09 /* ?? combined ME and SIM phonebook */ +#define P7110_MEMORY_VOICE 0x0b /* Voice Mailbox */ + +/* This is used when the memory type is unknown. */ +#define P7110_MEMORY_XX 0xff + +/* Entry Types for the enhanced phonebook */ +#define P7110_ENTRYTYPE_POINTER 0x04 /* Pointer to other memory */ +#define P7110_ENTRYTYPE_NAME 0x07 /* Name always the only one */ +#define P7110_ENTRYTYPE_EMAIL 0x08 /* Email Adress (TEXT) */ +#define P7110_ENTRYTYPE_POSTAL 0x09 /* Postal Address (Text) */ +#define P7110_ENTRYTYPE_NOTE 0x0a /* Note (Text) */ +#define P7110_ENTRYTYPE_NUMBER 0x0b /* Phonenumber */ +#define P7110_ENTRYTYPE_RINGTONE 0x0c /* Ringtone */ +#define P7110_ENTRYTYPE_DATE 0x13 /* Date for a Called List */ +#define P7110_ENTRYTYPE_LOGO 0x1b /* Group logo */ +#define P7110_ENTRYTYPE_LOGOSWITCH 0x1c /* Group logo on/off */ +#define P7110_ENTRYTYPE_GROUP 0x1e /* Group number for phonebook entry */ + +#ifdef __phones_nk7110_c /* Prototype functions for phone-7110.c only */ + +static GSM_Error P7110_Functions(GSM_Operation op, GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_Initialise(GSM_Statemachine *state); +static GSM_Error P7110_GetModel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetRevision(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetIMEI(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_Identify(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetBatteryLevel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetRFLevel(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetMemoryStatus(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_SetBitmap(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetBitmap(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_WritePhonebookLocation(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_ReadPhonebook(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetNetworkInfo(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetSpeedDial(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetSMSCenter(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetClock(char req_type, GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetCalendarNote(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetSMS(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_SendSMS(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetSMSFolders(GSM_Data *data, GSM_Statemachine *state); +static GSM_Error P7110_GetSMSFolderStatus(GSM_Data *data, GSM_Statemachine *state); + +static GSM_Error P7110_Incoming0x1b(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingPhonebook(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingNetwork(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingBattLevel(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingStartup(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingSMS(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingFolder(int messagetype, unsigned char *buffer, int length, GSM_Data *data); +static GSM_Error P7110_IncomingClock(int messagetype, unsigned char *message, int length, GSM_Data *data); +static GSM_Error P7110_IncomingCalendar(int messagetype, unsigned char *message, int length, GSM_Data *data); + +static int GetMemoryType(GSM_MemoryType memory_type); + +#if 0 +static GSM_Error P7110_Initialise(char *port_device, char *initlength, + GSM_ConnectionType connection, + void (*rlp_callback)(RLP_F96Frame *frame)); +static GSM_Error P7110_GenericCRHandler(int messagetype, unsigned char *buffer, int length); +static GSM_Error P7110_IncomingDefault(int messagetype, unsigned char *buffer, int length); +static GSM_Error P7110_GetIMEI(char *imei); +static GSM_Error P7110_GetRevision(char *revision); +static GSM_Error P7110_GetModel(char *model); +static GSM_Error P7110_ReadPhonebook(GSM_PhonebookEntry *entry); +static GSM_Error P7110_WritePhonebookLocation(GSM_PhonebookEntry *entry); +static GSM_Error P7110_GetMemoryStatus(GSM_MemoryStatus *status); +static GSM_Error P7110_GetBatteryLevel(GSM_BatteryUnits *units, float *level); +static GSM_Error P7110_GetRFLevel(GSM_RFUnits *units, float *level); +static GSM_Error P7110_GetBitmap(GSM_Bitmap *bitmap); +static GSM_Error P7110_SetBitmap(GSM_Bitmap *bitmap); +static GSM_Error P7110_DialVoice(char *Number); +static void P7110_Terminate(); +static bool P7110_SendRLPFrame( RLP_F96Frame *frame, bool out_dtx ); + +#endif + + +#endif /* #ifdef __phones_nk7110_c */ + +#endif /* #ifndef __phones_nk7110_h */ diff --git a/include/phones/nokia.h b/include/phones/nokia.h new file mode 100644 index 0000000..11c3801 --- /dev/null +++ b/include/phones/nokia.h @@ -0,0 +1,40 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 2000 Hugh Blemings & Pavel Janík ml. + Copyright (C) 2001 Manfred Jonsson + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This file provides useful functions for all phones + See README for more details on supported mobile phones. + + The various routines are called PNOK_... + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:22 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/11/15 12:12:34 pkot + 7110 and 6110 series phones introduce as Nokia + + Revision 1.1 2001/02/21 19:57:13 chris + More fiddling with the directory layout + + Revision 1.1 2001/02/01 15:19:41 pkot + Fixed --identify and added Manfred's manufacturer patch + + +*/ + +#ifndef __phones_nokia_h +#define __phones_nokia_h + +GSM_Error PNOK_GetManufacturer(char *manufacturer); + +#endif diff --git a/include/win32/getopt.h b/include/win32/getopt.h new file mode 100644 index 0000000..0abce6e --- /dev/null +++ b/include/win32/getopt.h @@ -0,0 +1,127 @@ +/* Declarations for getopt. + Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +#if __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if __STDC__ || defined(PROTO) +#if defined(__GNU_LIBRARY__) +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int argc, char *const *argv, const char *shortopts); +#endif /* not __GNU_LIBRARY__ */ +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ +extern int getopt (); +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +#endif /* not __STDC__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* _GETOPT_H */ diff --git a/include/win32/winserial.h b/include/win32/winserial.h new file mode 100644 index 0000000..14a4f9a --- /dev/null +++ b/include/win32/winserial.h @@ -0,0 +1,10 @@ +typedef void (*sigcallback)(char); +typedef void (*keepalive)(); + +int OpenConnection(char *szPort, sigcallback fn, keepalive ka); +int CloseConnection(); +int WriteCommBlock(LPSTR lpByte, DWORD dwBytesToWrite); + +int ReadCommBlock(LPSTR lpszBlock, int nMaxLength); +void device_changespeed(int speed); +void device_setdtrrts(int dtr, int rts); diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100644 index 0000000..6b3b5fc --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id$ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/packaging/Debian/README.debian b/packaging/Debian/README.debian new file mode 100644 index 0000000..7830020 --- /dev/null +++ b/packaging/Debian/README.debian @@ -0,0 +1,7 @@ +Gnokii for DEBIAN +------------------- + +This package was debianized by Karel Zak and later +taken over by Erik Rossen . + + diff --git a/packaging/Debian/changelog b/packaging/Debian/changelog new file mode 100644 index 0000000..cd99585 --- /dev/null +++ b/packaging/Debian/changelog @@ -0,0 +1,50 @@ +gnokii (0.3.3) unstable; urgency=low + + * Pawel has be notified that lintian does not like the "_" and he has + promised to change this in the future + * included a test in debian/rules to check for ./configure or run autoconf, + but commented it out since ./configure should usually be supplied + * deleting xlogos binary to stop lintian complaints about a missing manpage + * setting mgnokiidev root SUID in postinst script rather than "make install" + * rewrote postrm script to do all of its work on "purge" + * updated Build-Depends to include libc6-dev, xlibs-dev, xutils (for xmkmf), + and libgtk1.2-dev. Note that autoconf is recommended. + * added "touch Makefile.global" to debian/rules to allow "make clean" on + un"./configure"d builds + + -- Erik Rossen (Linux consultant) Sat, 1 Sep 2001 14:04:02 +0200 + +gnokii (0.3.3_pre25) unstable; urgency=low + + * incorporation of IRDA patch + * incorporation of Debian packaging patches + * incorporation of Makefile patch to break up the install targets + into pieces in preparation for proper Debian-style package building + + -- Erik Rossen (Linux consultant) Thu, 21 Jun 2001 10:54:02 +0200 + +gnokii (0.3.3_pre24) unstable; urgency=low + + * other itsy-bitsy changes in order to get gnokii to pass lintian + * moving gnokii group deletion from postinst to gnokii.postrm + * splitting-out examples and man pages listings to gnokii.examples + and gnokii.manpages + + -- Erik Rossen (Linux consultant) Mon, 18 Jun 2001 21:16:56 +0200 + +gnokii (0.3.2) stable; urgency=low + + * No changes for debian package in source + * This file generate gnokii's build system (sorry deb's guru..) + + -- Karel Zak Wed, 17 May 2000 13:56:28 +0100 + +gnokii (0.3.2_pre1) unstable; urgency=low + + * No changes for debian package in source + + -- Karel Zak Tue, 11 Jan 2000 16:57:00 +0100 + +Local variables: +mode: debian-changelog +End: diff --git a/packaging/Debian/conffiles b/packaging/Debian/conffiles new file mode 100644 index 0000000..6a3dcd4 --- /dev/null +++ b/packaging/Debian/conffiles @@ -0,0 +1 @@ +/etc/gnokiirc diff --git a/packaging/Debian/control b/packaging/Debian/control new file mode 100644 index 0000000..d68850d --- /dev/null +++ b/packaging/Debian/control @@ -0,0 +1,14 @@ +Source: gnokii +Section: comm +Priority: optional +Build-Depends: debhelper, libc6-dev, xlibs-dev, xutils, libgtk1.2-dev +Maintainer: Erik Rossen (Linux consultant) +Standards-Version: 3.1.0.0 + +Package: gnokii +Architecture: any +Depends: adduser, ${shlibs:Depends} +Description: Linux/Unix tool suite for Nokia mobile phones + Gnokii is a Linux/Unix tool suite and (eventually) modem/fax driver + for Nokia mobile phones, released under the GPL. + diff --git a/packaging/Debian/copyright b/packaging/Debian/copyright new file mode 100644 index 0000000..049061c --- /dev/null +++ b/packaging/Debian/copyright @@ -0,0 +1,30 @@ +GNOKII - A Linux/Unix toolset and driver for the Nokia 3x10/8110/51x0/61x0 + Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA. + +You can contact authors by mail at + +hugh@linuxcare.com Pavel.Janik@suse.cz +Hugh Blemings Mgr. Pavel Janík, SuSE CR, s.r.o. +PO Box 234 Pod Pekárnami 338/12 +Belconnen ACT 2616 190 00 Praha 9 +Australia Czech Republic + +We would be delighted to receive a postcard from you if you use gnokii but +this is not a requirement of these licence terms! :) + +Any trademarks in this or other gnokii documents/files are the property of +their respective owners. diff --git a/packaging/Debian/docs b/packaging/Debian/docs new file mode 100644 index 0000000..43a1a30 --- /dev/null +++ b/packaging/Debian/docs @@ -0,0 +1,13 @@ +Docs/CREDITS +Docs/README +Docs/README-3810 +Docs/README-6110 +Docs/README-2110 +Docs/README-WIN32 +Docs/DataCalls-QuickStart +Docs/gettext-howto +Docs/gnokii-ir-howto +Docs/packaging-howto +Docs/gnokii.nol +Docs/FAQ +TODO diff --git a/packaging/Debian/examples b/packaging/Debian/examples new file mode 100644 index 0000000..3dbdb61 --- /dev/null +++ b/packaging/Debian/examples @@ -0,0 +1,5 @@ +Docs/sample/gnokiirc +Docs/sample/options +Docs/sample/pap-secrets +Docs/sample/ppp-gnokii +Docs/sample/ppp-on diff --git a/packaging/Debian/files b/packaging/Debian/files new file mode 100644 index 0000000..6e11a3d --- /dev/null +++ b/packaging/Debian/files @@ -0,0 +1 @@ +gnokii_0.3.3_pre24_i386.deb comm optional diff --git a/packaging/Debian/manpages b/packaging/Debian/manpages new file mode 100644 index 0000000..ddb1e0d --- /dev/null +++ b/packaging/Debian/manpages @@ -0,0 +1,5 @@ +./Docs/man/gnokii.1 +./Docs/man/mgnokiidev.8 +./Docs/man/xgnokii.1x +./Docs/man/gnokiid.8 +./Docs/man/todologo.1 diff --git a/packaging/Debian/menu b/packaging/Debian/menu new file mode 100644 index 0000000..2ccf430 --- /dev/null +++ b/packaging/Debian/menu @@ -0,0 +1 @@ +?package(gnokii):needs="X11" section="Apps/Net" title="XGnokii" command="/usr/bin/xgnokii" diff --git a/packaging/Debian/postinst b/packaging/Debian/postinst new file mode 100644 index 0000000..125800a --- /dev/null +++ b/packaging/Debian/postinst @@ -0,0 +1,8 @@ +#!/bin/sh -e + +echo 'Setting /usr/sbin/mgnokiidev SUID root, executable only by the "gnokii" group.' +echo 'Read /usr/share/doc/gnokii/FAQ and README concerning the security risk.' +chown root.gnokii /usr/sbin/mgnokiidev +chmod 4750 /usr/sbin/mgnokiidev + +#DEBHELPER# diff --git a/packaging/Debian/postinst.debhelper b/packaging/Debian/postinst.debhelper new file mode 100644 index 0000000..46d70ce --- /dev/null +++ b/packaging/Debian/postinst.debhelper @@ -0,0 +1,10 @@ +# Automatically added by dh_installdocs +if [ "$1" = "configure" ]; then + if [ -d /usr/doc -a ! -e /usr/doc/gnokii -a -d /usr/share/doc/gnokii ]; then + ln -sf ../share/doc/gnokii /usr/doc/gnokii + fi +fi +# End automatically added section +# Automatically added by dh_installmenu +if [ "$1" = "configure" -a -x /usr/bin/update-menus ]; then update-menus ; fi +# End automatically added section diff --git a/packaging/Debian/postrm b/packaging/Debian/postrm new file mode 100644 index 0000000..44203a7 --- /dev/null +++ b/packaging/Debian/postrm @@ -0,0 +1,27 @@ +#!/bin/sh -e + +case "$1" in + remove|upgrade) + ;; + + purge) + rm -f /etc/gnokii + if [ ! -z "`grep -e '^gnokii:' /etc/group`" ] + then + echo 'deleting group "gnokii"' + /usr/sbin/groupdel gnokii + else + echo 'group "gnokii" already deleted' + fi + ;; + + failed-upgrade|abort-install|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# diff --git a/packaging/Debian/postrm.debhelper b/packaging/Debian/postrm.debhelper new file mode 100644 index 0000000..b3c6867 --- /dev/null +++ b/packaging/Debian/postrm.debhelper @@ -0,0 +1,3 @@ +# Automatically added by dh_installmenu +if [ -x /usr/bin/update-menus ]; then update-menus ; fi +# End automatically added section diff --git a/packaging/Debian/preinst b/packaging/Debian/preinst new file mode 100644 index 0000000..82814da --- /dev/null +++ b/packaging/Debian/preinst @@ -0,0 +1,11 @@ +#!/bin/sh -e + +if [ -z "`grep -e '^gnokii:' /etc/group`" ] +then + /usr/sbin/groupadd gnokii +else + echo 'notice: group "gnokii" already exists' + echo 'I assume that you have used a gnokii before, Mr. Bond.' +fi + +#DEBHELPER# diff --git a/packaging/Debian/prerm.debhelper b/packaging/Debian/prerm.debhelper new file mode 100644 index 0000000..29f5208 --- /dev/null +++ b/packaging/Debian/prerm.debhelper @@ -0,0 +1,5 @@ +# Automatically added by dh_installdocs +if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/gnokii ]; then + rm -f /usr/doc/gnokii +fi +# End automatically added section diff --git a/packaging/Debian/rules b/packaging/Debian/rules new file mode 100755 index 0000000..d964aae --- /dev/null +++ b/packaging/Debian/rules @@ -0,0 +1,90 @@ +#!/usr/bin/make -f + +export DH_VERBOSE=1 +export DH_COMPAT=3 + +export build_dir=$(shell pwd)/debian/gnokii + +build: build-stamp +build-stamp: + dh_testdir +# if [ ! -f ./configure ] ; then autoconf ; fi + ./configure --prefix=/usr --with-x +# ./configure --prefix=/usr --with-x --enable-debug --enable-xdebug --enable-rlpdebug + make + touch build + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build build-stamp config.* + touch Makefile.global + make clean + dh_clean + +# Build architecture-independent files here. +binary-indep: build + +# There are no architecture-independent files to be uploaded +# generated by this package. If there were any they would be +# made here. + +binary-arch: build +# dh_testversion + dh_testdir + dh_testroot + dh_installdirs +# The following two lines are to prevent the install process from installing +# mgnokiidev owned by the probably not-yet-existing group "gnokii". mgnokiidev +# gets SGID after dpkg runs preinst which creates the group "gnokii". + mv utils/Makefile utils/Makefile.ORIG + sed 's#-o root -g gnokii -m 4750 ##' < utils/Makefile.ORIG > utils/Makefile +# + make install prefix=$(build_dir)/usr +# +# just to leave the sources in a pristine state... + mv utils/Makefile.ORIG utils/Makefile +# + mkdir -p $(build_dir)/etc + sed 's#/usr/local/sbin/#/usr/sbin/#' < Docs/sample/gnokiirc > $(build_dir)/etc/gnokiirc +# lintian complains if there are multiple licence files in one package, hence +# the next two commands + sed 's#"COPYING"#"file:/usr/share/doc/gnokii/copyright"#' < \ + xgnokii/docs/help/en_US/faq.html > \ + $(build_dir)/usr/share/xgnokii/help/en_US/faq.html + rm -f $(build_dir)/usr/share/xgnokii/help/en_US/COPYING +# lintian complains if there is a binary that does not have a man page. +# Pawel says that xlogos will soon be dumped anyways, so... + rm -f $(build_dir)/usr/bin/xlogos +# dh_installdebconf + dh_installexamples + dh_installdocs + dh_installmenu +# dh_installemacsen +# dh_installpam +# dh_installinit +# dh_installcron + dh_installman +# dh_installinfo +# dh_undocumented + dh_installchangelogs + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_makeshlibs + dh_installdeb +# dh_perl + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary + diff --git a/packaging/Debian/substvars b/packaging/Debian/substvars new file mode 100644 index 0000000..59d60a7 --- /dev/null +++ b/packaging/Debian/substvars @@ -0,0 +1 @@ +shlibs:Depends=libc6 (>= 2.2.3-1), libglib1.2 (>= 1.2.0), libgtk1.2 (>= 1.2.10-1), xlibs (>> 4.0.3) diff --git a/packaging/RedHat/gnokii.spec.in b/packaging/RedHat/gnokii.spec.in new file mode 100644 index 0000000..66f6d57 --- /dev/null +++ b/packaging/RedHat/gnokii.spec.in @@ -0,0 +1,147 @@ +%define name @PACKAGE@ +%define version @VERSION@ +%define release 1 + +Summary: Linux/Unix tool suite for Nokia mobile phones +Name: %{name} +Version: %{version} +Release: %{release} +Copyright: GPL +Packager: Pavel Janik ml. , Jan Derfinak +Group: Applications/Communications +Source: ftp://ftp.gnokii.org/pub/gnokii/%{name}-%{version}.tar.gz +BuildRoot: /var/tmp/%{name}-%{version}-root + +%description +Gnokii is a Linux/Unix tool suite and (eventually) modem/fax driver for +Nokia's mobile phones, released under the GPL. + +%package xgnokii +Summary: Graphical Linux/Unix tool suite for Nokia mobile phones. +Group: X11/Applications +%description xgnokii +Xgnokii is graphical Linux/Unix tool suite for Nokia's mobile phones. It +allows you to edit your contacts book, send/read SMS's from/in +computer and more other features. + +%prep + +%setup -q + +%build +./configure --prefix=/usr --with-x --enable-nls #--enable-debug --enable-rlpdebug +make + +%install +rm -rf ${RPM_BUILD_ROOT} + +make prefix=${RPM_BUILD_ROOT}/usr install + +mkdir -p ${RPM_BUILD_ROOT}/etc/ + +sed 's#/usr/local/sbin/#/usr/sbin/#' ${RPM_BUILD_ROOT}/etc/gnokiirc + +%pre +/usr/sbin/groupadd -r -f gnokii >/dev/null 2>&1 + +%postun +/usr/sbin/groupdel gnokii >/dev/null 2>&1 + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%doc Docs/CREDITS Docs/DataCalls-QuickStart Docs/FAQ Docs/README +%doc Docs/README-3810 Docs/README-6110 Docs/README-2110 Docs/README-WIN32 +%doc Docs/gettext-howto Docs/gnokii.nol Docs/gnokii-ir-howto Docs/packaging-howto +%doc Docs/README-dancall Docs/logos.txt Docs/gnokii.xpm Docs/Bugs +%doc Docs/sample/gnokiirc Docs/sample/options Docs/sample/pap-secrets +%doc Docs/sample/ppp-gnokii Docs/sample/ppp-on +%doc Docs/protocol/nk2110.txt Docs/protocol/nk3110.txt Docs/protocol/nk6110.txt Docs/protocol/nk6160.txt +%doc Docs/protocol/nk6185.txt Docs/protocol/nk640.txt Docs/protocol/nk7110.txt Docs/protocol/nokia.txt +%attr(0750, root, gnokii) /usr/bin/gnokii +%attr(0750, root, gnokii) /usr/sbin/gnokiid +%attr(4750, root, gnokii) /usr/sbin/mgnokiidev +%config /etc/gnokiirc + +%files xgnokii +%defattr(-,root,root) +/usr/X11R6/bin/xgnokii +/usr/bin/todologo +/usr/share/xgnokii + +%changelog + +* Fri Sep 28 2001 Pawel Kot +- last minute fixes. + +* Thu Sep 27 2001 Pawel Kot +- updates to 0.3.3 version - new docs, new ftp server + +* Sun Sep 2 2001 Pawel Kot +- removes xlogos + +* Thu Jan 11 2001 Pawel Kot +- misc updates + +* Fri Oct 27 2000 Pavel Janik ml. +- todologo added to the package + +* Mon May 15 2000 Pavel Janik ml. +- proper access rights for gnokiid, gnokii and mgnokiidev + +* Sat May 13 2000 Pavel Janik ml. +- new doc files added + +* Tue Mar 21 2000 Pavel Janik ml. +- permission on /usr/sbin fixed +- correct /etc/gnokiirc file + +* Mon Mar 20 2000 Pavel Janik ml. +- mkdir of directories in install removed +- xgnokii package should contain lib/xgnokii directory + +* Mon Mar 20 2000 Jan Derfinak +- split package into gnokii and xgnokii +- added configure +- correct xgnokii installation +- installation with make install +- fixing paths + +* Thu Aug 5 1999 Pavel Janik ml. +- documentation files changed + +* Thu Aug 5 1999 Pavel Janik ml. +- xkeyb and xlogos added to RPM package + +* Sat Jul 24 1999 Pavel Janik ml. +- stripping of binaries + +* Thu Jul 22 1999 Pavel Janik ml. +- gnokii.nol added - nice example for logo uploading + +* Sun Jul 18 1999 Pavel Janik ml. +- mgnokiidev added to RPM package +- config file in /etc (it is not used now...) + +* Sat Jul 10 1999 Pavel Janik ml. +- use of ~/.gnokiirc so not magic model stuff +- new doc files + +* Mon Jun 28 1999 Pavel Janik ml. +- Nokia auth. protocol is there now +- xgnokii and gnokiid added to RPM + +* Sun May 9 1999 Pavel Janik ml. +- included 6110-patch updated to my prepatches + +* Thu May 6 1999 Pavel Janik ml. +- TODO-6110 file added to documentation files + +* Sun Mar 28 1999 Pavel Janik ml. +- upgraded to gnokii-0.2.4 +- 6110 version of gnokii added + +* Fri Mar 5 1999 Pavel Janik ml. +- the first SPEC file for gnokii diff --git a/packaging/Slackware/SlackBuild.in b/packaging/Slackware/SlackBuild.in new file mode 100644 index 0000000..0853b6a --- /dev/null +++ b/packaging/Slackware/SlackBuild.in @@ -0,0 +1,81 @@ +#!/bin/sh + +# +# Script for building GNOKII package +# Written by Pawe³ Kot +# + +PN=@PACKAGE@ +PV=@VERSION@ + +ARCH="i386" +BUILD=1 + +DOCS1="Docs/*" +DOCS2="Docs/protocol Docs/sample" +CONF="Docs/sample/gnokiirc" + +CWD=`pwd` + +# There will be the sources placed +if [ "$TMP" = "" ]; then + TMP=/tmp +fi +if [ ! -d $TMP ]; then + mkdir -p $TMP +fi + +# The package will be built there +PKG=$TMP/package-$PN-$PV +if [ ! -d $PKG ]; then + mkdir -p $PKG +fi + +# Untar the sources +cd $TMP +tar xzvf $CWD/$PN-$PV.tar.gz +cd $PN-$PV + +# Configure and make package +./configure --prefix=/usr --with-xgnokiidir=/usr/X11R6 i386-slackware-linux +make +make prefix=$PKG/usr xgnokii_libdir=$PKG/usr/X11R6 install + +# Copy the docs +mkdir -p $PKG/usr/doc/$PN-$PV +cp $DOCS1 $PKG/usr/doc/$PN-$PV +cp -r $DOCS2 $PKG/usr/doc/$PN-$PV + +# and the configuration +mkdir -p $PKG/etc +sed "s|/usr/local/sbin|/usr/sbin|" < $CONF > $PKG/etc/gnokiirc.new + +# Now, add gnokii group, set the permissions +GROUPADD=`which groupadd` +cd $PKG +mkdir install +cat > install/doinst.sh </dev/null 2>&1 +chown root.gnokii /usr/bin/gnokii +chmod 750 /usr/bin/gnokii +chown root.gnokii /usr/sbin/gnokiid +chmod 750 /usr/sbin/gnokiid +chown root.gnokii /usr/sbin/mgnokiidev +chmod 4750 /usr/sbin/mgnokiidev + +if [ -f /etc/gnokiirc ]; then + rm -f /etc/gnokiirc.new +else + mv /etc/gnokiirc.new /etc/gnokiirc +fi +EOF + +# and build the package answering "yes" twice +echo "y +y" | makepkg $TMP/$PN-$PV-$ARCH-$BUILD.tgz + +# Cleanup +rm -rf $TMP/$PN-$PV +rm -rf $PKG diff --git a/packaging/Slackware/disk b/packaging/Slackware/disk new file mode 100644 index 0000000..b531914 --- /dev/null +++ b/packaging/Slackware/disk @@ -0,0 +1,6 @@ +gnokii: Linux/Unix tool suite for Nokia mobile phones +gnokii: +gnokii: Gnokii is a Linux/Unix tool suite and (eventually) modem/fax +gnokii: driver for Nokia's mobile phones, released under the GPL. +gnokii: +gnokii: diff --git a/packaging/make_dist b/packaging/make_dist new file mode 100755 index 0000000..614d028 --- /dev/null +++ b/packaging/make_dist @@ -0,0 +1,38 @@ +#!/bin/bash + +# +# This script is used for preparing the tarballs. +# Do not use it, please. +# + +# +# DeMorgan rules applied :-) I like math... +# + +if [ "x`whoami`" != xpavel -a "x`whoami`" != xhugh -a "x`whoami`" != xpkot ] +then + echo "No way to test this :-)" +fi + +VERSION=`cat ../VERSION` + +rm -rf /tmp/gnokii-${VERSION} +cp -r ../../gnokii /tmp/gnokii-${VERSION} + +# Some files and directories in CVS are useless +rm -rf /tmp/gnokii-${VERSION}/xkeyb + +( + cd /tmp/gnokii-${VERSION} + autoconf + ./configure + cp packaging/RedHat/gnokii.spec . + make distclean + chmod 755 mkinstalldirs + cd .. + tar cvfz /tmp/gnokii-${VERSION}.tar.gz gnokii-${VERSION} --exclude CVS +) + +rm -rf /tmp/gnokii-${VERSION} + +echo "Distribution generated in /tmp/gnokii-${VERSION}.tar.gz" diff --git a/patches/IR-Dongles/README-Tekram_IRmate_210 b/patches/IR-Dongles/README-Tekram_IRmate_210 new file mode 100644 index 0000000..9d13d37 --- /dev/null +++ b/patches/IR-Dongles/README-Tekram_IRmate_210 @@ -0,0 +1,20 @@ +This file contains some information how to get your infrared dongle device +Tekram IRmate 210 work with your Nokia mobile phones even if Nokia tells you +that you can not use this dongle to communication with Nokia. + +In this directory you can find file device_tekram_irmate_210.c which is the +driver for this dongle. You can install it via: + + cp device_tekram_irmate_210.c ../../device.c + +Just recompile gnokii and put something like this to ~/.gnokiirc: + +[global] +port = /dev/ttyS0 +model = 6110 +initlength = 1 +connection = infrared +bindir = /usr/local/sbin/ + +And try gnokii --identify. Also note that you should activate IR on your +mobile phone. Just press Menu-9. That's all folks. diff --git a/patches/IR-Dongles/device_tekram_irmate_210.c b/patches/IR-Dongles/device_tekram_irmate_210.c new file mode 100644 index 0000000..968128e --- /dev/null +++ b/patches/IR-Dongles/device_tekram_irmate_210.c @@ -0,0 +1,118 @@ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Wed Dec 15 00:17:17 MET 1999 + Modified by Marcel Holtmann + +*/ + +#include "unixserial.h" +#include "device.h" + +#define TEKRAM_B115200 0x00 +#define TEKRAM_B57600 0x01 +#define TEKRAM_B38400 0x02 +#define TEKRAM_B19200 0x03 +#define TEKRAM_B9600 0x04 + +#define TEKRAM_PW 0x10 /* Pulse select bit */ + + +/* + * Structure to store the filedescriptor we use. + * + */ + +int device_portfd = -1; + +int device_getfd(void) { + + return device_portfd; +} + +int device_open(__const char *__file) { + + device_portfd = serial_opendevice(__file); + + return (device_portfd >= 0); +} + +void device_close(void) { + + serial_setdtrrts(device_portfd, 0, 0); + + serial_close(device_portfd); +} + +void device_reset(void) { + + serial_setdtrrts(device_portfd, 0, 0); + + usleep(50000); + + serial_setdtrrts(device_portfd, 1, 0); + + usleep(1000); + + serial_setdtrrts(device_portfd, 1, 1); + + usleep(50); + + + serial_changespeed(device_portfd, 9600); +} + +void device_setdtrrts(int __dtr, int __rts) { + + serial_setdtrrts(device_portfd, __dtr, __rts); +} + +void device_changespeed(int __speed) { + + unsigned char speedbyte; + + + switch (__speed) { + + default: + case 9600: speedbyte = TEKRAM_PW | TEKRAM_B9600; break; + case 19200: speedbyte = TEKRAM_PW | TEKRAM_B19200; break; + case 38400: speedbyte = TEKRAM_PW | TEKRAM_B38400; break; + case 57600: speedbyte = TEKRAM_PW | TEKRAM_B57600; break; + case 115200: speedbyte = TEKRAM_PW | TEKRAM_B115200; break; + + } + + + device_reset(); + + serial_setdtrrts(device_portfd, 1, 0); + + usleep(7); + + serial_write(device_portfd, &speedbyte, 1); + + usleep(100000); + + serial_setdtrrts(device_portfd, 1, 1); + + + serial_changespeed(device_portfd, __speed); +} + +size_t device_read(__ptr_t __buf, size_t __nbytes) { + + return (serial_read(device_portfd, __buf, __nbytes)); +} + +size_t device_write(__const __ptr_t __buf, size_t __n) { + + return (serial_write(device_portfd, __buf, __n)); +} diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..f9aa397 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,217 @@ +# +# +# Makefile for gnokii I18n, +# based on the Makefile.in.in that comes with gettext +# +# Erwin Dieterich, 20. 1. 1998 Erwin.Dieterich.ED@Bayer-AG.de +# +# +# +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = @SHELL@ +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = $(prefix)/@DATADIRNAME@ +localedir = @LOCALEDIR@ +gnulocaledir = @LOCALEDIR@ +subdir = po + +INSTALL = @INSTALL@ +#INSTALL_DATA = @INSTALL_DATA@ +INSTALL_DATA = @INSTALL@ -m 644 + +CC = @CC@ +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +MSGMERGE = @MSGMERGE@ + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + + + +all: all-@USE_NLS@ + +all-yes: $(PACKAGE).pot $(CATALOGS) +all-no: + @echo "No support for NLS requested" + +$(PACKAGE).pot: $(POTFILES) + if test -n "$(XGETTEXT)"; then \ + $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(srcdir)/.. \ + --c++ --keyword=_ --files-from=$(srcdir)/POTFILES.in; \ + mv $(PACKAGE).po $(PACKAGE).pot; \ + else \ + echo "xgettext not available: $(PACKAGE).pot not updated" 1>&2; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + ${SHELL} $(top_srcdir)/mkinstalldirs $(datadir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \ + dir=$$destdir/$$lang/LC_MESSAGES; \ + ${SHELL} $(top_srcdir)/mkinstalldirs $$dir; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + done + rm -f $(gettextsrcdir)/po-Makefile.in.in + +check: all + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox *.old.po *.gmo + rm -fr *.o *~ + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo *.gmo *.msg *.cat.m $(PACKAGE).pot + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: update-po $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(PACKAGE).pot + PATH=`pwd`/../src:$$PATH; \ + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + lang=`echo $$cat | sed 's/$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ + fi; \ + done + +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + sed -e '/^#/d' -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" \ + -e '$$s/\(.*\) \\/\1/' < $(srcdir)/POTFILES.in > POTFILES ) + +#Makefile: Makefile.in.in ../config.status POTFILES +# cd .. \ +# && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ +# $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..4d03e12 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,34 @@ +common/cfgreader.c +common/data/rlp-common.c +common/data/virtmodem.c +common/devices/unixserial.c +common/gsm-bitmaps.c +common/gsm-filetypes.c +common/gsm-ringtones.c +common/links/cbus.c +common/links/fbus.c +common/links/fbus-phonet.c +common/misc.c +common/phones/generic.c +common/phones/nk7110.c +common/phones/nk6100.c +common/phones/nk3110.c +common/phones/nk2110.c +common/vcal.c +common/vcal.lx +gnokiid/gnokiid.c +gnokii/gnokii.c +smsd/lowlevel.c +xgnokii/xgnokii.c +xgnokii/xgnokii_calendar.c +xgnokii/xgnokii_cfg.c +xgnokii/xgnokii_common.c +xgnokii/xgnokii_contacts.c +xgnokii/xgnokii_data.c +xgnokii/xgnokii_dtmf.c +xgnokii/xgnokii_logos.c +xgnokii/xgnokii_lowlevel.c +xgnokii/xgnokii_netmon.c +xgnokii/xgnokii_sms.c +xgnokii/xgnokii_speed.c +xgnokii/xgnokii_xkeyb.c diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..5bf2813 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,2554 @@ +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 1999-03-13 18:25:30+0100\n" +"PO-Revision-Date: 1999-03-13 18:25:30+0100\n" +"Last-Translator: Pavel Janik ml. \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n" + +#: fbus-6110.c:2545 +msgid " %d. SMS Center name is %s\n" +msgstr " %d. SMS centrum má jméno %s\n" + +#: fbus-6110.c:3490 gnokii.c:1510 +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Varování: %d-%02d-%02d\n" + +#: fbus-6110.c:3372 +msgid " Alarm is %s\n" +msgstr " Budík je %s\n" + +#: fbus-6110.c:3494 gnokii.c:1514 +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Èas varování: %02d:%02d:%02d\n" + +#: fbus-6110.c:3371 +msgid " Alarm: %02d:%02d\n" +msgstr " Budík: %02d:%02d\n" + +#: fbus-6110.c:2993 +msgid " Battery Level: %d\n" +msgstr " Kapacita baterie: %d\n" + +#: gnokii.c:1585 +msgid " Calendar note deleted.\n" +msgstr " Poznámka v kalendáøi byla smazána.\n" + +#: fbus-6110.c:3217 +msgid " CellID: %s\n" +msgstr " CellID: %s\n" + +#: fbus-6110.c:3334 +msgid " Date: %4d/%02d/%02d\n" +msgstr " Datum: %4d/%02d/%02d\n" + +#: fbus-6110.c:3479 gnokii.c:1501 +msgid " Date: %d-%02d-%02d\n" +msgstr " Datum: %d-%02d-%02d\n" + +#: fbus-6110.c:2512 +msgid " Date: %s\n" +msgstr " Datum: %s\n" + +#: fbus-6110.c:3714 +msgid " Date: %s GMT" +msgstr " Datum: %s GMT" + +#: fbus-6110.c:4016 +msgid " Empty SMS location.\n" +msgstr " Pamì»ové místo pro SMS je prázdné.\n" + +#: fbus-6110.c:2363 fbus-6110.c:2458 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Pøesný význam doposud není znám :-(\n" + +#: fbus-6110.c:4142 +msgid " Firmware: %s\n" +msgstr " Firmware: %s\n" + +#: fbus-6110.c:2764 +msgid " Free: %d\n" +msgstr " Volné místo: %d\n" + +#: fbus-6110.c:4140 +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: fbus-3810.c:2274 +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: fbus-6110.c:4134 +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: fbus-6110.c:4006 +msgid " Invalid location!\n" +msgstr "" + +#: fbus-6110.c:2701 +msgid " Invalid memory type!\n" +msgstr " ©patný typ pamìti!\n" + +#: fbus-6110.c:3583 +msgid " Item number: %d\n" +msgstr "" + +#: fbus-6110.c:3218 +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: fbus-6110.c:2875 +msgid " Location: %d\n" +msgstr "" + +#: fbus-6110.c:4147 +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Magické bajty: %02x %02x %02x %02x\n" + +#: fbus-6110.c:2762 +msgid " Memory Type: %s\n" +msgstr " Typ pamìti: %s\n" + +#: fbus-6110.c:2876 +msgid " MemoryType: %s\n" +msgstr "" + +#: fbus-6110.c:2934 +msgid " Mode: " +msgstr " Mód: " + +#: fbus-3810.c:2276 +msgid " Model: %s\n" +msgstr "" + +#: fbus-6110.c:4136 +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: fbus-3810.c:2180 +msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n" +msgstr " Délka zprávy %d, Èíslo zprávy %d, Neznámé bajty: %02x %02x %02x %02x %02x %02x\n" + +#: fbus-6110.c:2401 fbus-6110.c:2656 +msgid " Name: " +msgstr " Jméno: " + +#: fbus-6110.c:3219 +msgid " Network code: %s\n" +msgstr " Kód sítì: %s\n" + +#: fbus-6110.c:3220 +msgid " Network name: %s (%s)\n" +msgstr " Jméno sítì: %s (%s)\n" + +#: fbus-6110.c:3235 +msgid " Network selection: %s\n" +msgstr "" + +#: fbus-6110.c:2393 fbus-6110.c:2672 +msgid " Number: " +msgstr " Èíslo: " + +#: fbus-6110.c:2877 +msgid " Number: %d\n" +msgstr " Èíslo: %d\n" + +#: fbus-6110.c:3503 gnokii.c:1522 +msgid " Phone: %s\n" +msgstr "" + +#: fbus-6110.c:2971 +msgid " Power source: " +msgstr " Zdroj napájení: " + +#: fbus-6110.c:4138 +msgid " Production Code: %s\n" +msgstr " Výrobní èíslo: %s\n" + +#: fbus-6110.c:2511 fbus-6110.c:3746 +msgid " Remote number: %s\n" +msgstr " Èíslo volajícího: %s\n" + +#: fbus-3810.c:2278 +msgid " Revision: %s\n" +msgstr " Revize: %s\n" + +#: fbus-6110.c:2548 +msgid " SMS Center message format is " +msgstr "" + +#: fbus-6110.c:2574 +msgid " SMS Center message validity is " +msgstr "" + +#: fbus-6110.c:2546 +msgid " SMS Center number is %s\n" +msgstr "" + +#: fbus-6110.c:2507 fbus-6110.c:3745 +msgid " SMS center number: %s\n" +msgstr " Èíslo SMS centra: %s\n" + +#: fbus-6110.c:2513 +msgid " SMS: " +msgstr " Text zprávy: " + +#: fbus-6110.c:3729 +msgid " SMSC response date: %s GMT" +msgstr "" + +#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457 +msgid " Sequence nr. of the call: %d\n" +msgstr " Poøadové èíslo hovoru: %d\n" + +#: fbus-6110.c:2994 +msgid " Signal strength: %d\n" +msgstr " Úroveò signálu: %d\n" + +#: fbus-6110.c:3223 +msgid " Status: " +msgstr "" + +#: fbus-6110.c:3500 gnokii.c:1519 +msgid " Text: %s\n" +msgstr "" + +#: fbus-6110.c:4040 +msgid " The number of messages: %d\n" +msgstr " Poèet zpráv: %d\n" + +#: fbus-6110.c:2622 +msgid " The request for SMS Center failed.\n" +msgstr " Po¾adavek na SMS centrum selhal.\n" + +#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505 +msgid " Time: %02d:%02d:%02d\n" +msgstr " Èas: %02d:%02d:%02d\n" + +#: gnokii.c:1476 +msgid " Type of the note: " +msgstr "" + +#: fbus-6110.c:3499 +msgid " Type: %d\n" +msgstr "" + +#: fbus-6110.c:2711 fbus-6110.c:2749 +msgid " Unknown error!\n" +msgstr " Neznámá chyba!\n" + +#: fbus-6110.c:4041 +msgid " Unread messages: %d\n" +msgstr " Poèet nepøeètených zpráv: %d\n" + +#: fbus-6110.c:2763 +msgid " Used: %d\n" +msgstr " Pou¾ito: %d\n" + +#: gnokii.c:86 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --sendoplogoviasms destionation logofile [network code]\n" +" gnokii --setdatetime [YYYY MM DD HH MM]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n" +" gnokii --reset [soft|hard]\n" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken from\n" +" phone memory from address [message_center_index].\n" +" If this argument is ommited SMSC number is taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --sendoplogoviasms send the logofile to destination as operator\n" +" logo\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number [index] from calendar.\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +msgstr "" + +#: gnokiid.c:63 +msgid " usage: gnokiid {--help|--version}" +msgstr " pou¾ití: gnokiid {--help|--version}" + +#: xgnokii/xgnokii_sms.c:81 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:76 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh" +msgstr "" + +#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032 +msgid "%d" +msgstr "" + +#: gnokii.c:978 +msgid "%d. Delivery Report " +msgstr "" + +#: gnokii.c:1017 +msgid "%d. Inbox Message " +msgstr "" + +#: gnokii.c:965 +msgid "%d. Outbox Message " +msgstr "" + +#: gnokii.c:802 +msgid "%d. SMS center (%s) number is %s\n" +msgstr "" + +#: fbus-6110.c:3722 fbus-6110.c:3738 +msgid "%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035 +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553 +msgid "%s: line %d: Can't get ME memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598 +msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1343 +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1310 +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" + +#: gnokii.c:1893 +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "" + +#: gnokii.c:982 gnokii.c:1022 +msgid "(not read)\n" +msgstr "" + +#: gnokii.c:970 +msgid "(not sent)\n" +msgstr "" + +#: gnokii.c:980 gnokii.c:1020 +msgid "(read)\n" +msgstr "" + +#: gnokii.c:968 +msgid "(sent)\n" +msgstr "" + +#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030 +msgid "+%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:78 +msgid "/help/contacts.html" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:35 +msgid "/help/dtmf.html" +msgstr "" + +#: xgnokii/xgnokii.c:153 +msgid "/help/index.html" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:38 +msgid "/help/netmon.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:38 +msgid "/help/sms.html" +msgstr "" + +#: fbus-3810.c:1946 +msgid "0x10 Write failed!" +msgstr "" + +#: fbus-3810.c:1222 +msgid "0x15 Registration Response 0x%02x\n" +msgstr "" + +#: fbus-3810.c:1783 +msgid "0x15 Write failed!" +msgstr "" + +#: fbus-3810.c:1236 +msgid "0x16 Registration Response 0x%02x 0x%02x\n" +msgstr "" + +#: fbus-3810.c:1879 +msgid "0x27 Write failed!" +msgstr "" + +#: fbus-3810.c:2022 +msgid "0x2c Write failed!" +msgstr "" + +#: fbus-3810.c:1574 +msgid "0x3f Write failed!" +msgstr "" + +#: fbus-3810.c:1549 +msgid "0x4a Write failed!" +msgstr "" + +#: fbus-3810.c:1917 +msgid "0x4b Write failed!" +msgstr "" + +#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090 +msgid "1 h" +msgstr "" + +#: fbus-6110.c:2579 gnokii.c:835 +msgid "1 hour" +msgstr "" + +#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118 +msgid "1 week" +msgstr "" + +#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104 +msgid "24 h" +msgstr "" + +#: fbus-6110.c:2587 gnokii.c:843 +msgid "24 hours" +msgstr "" + +#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097 +msgid "6 h" +msgstr "" + +#: fbus-6110.c:2583 gnokii.c:839 +msgid "6 hours" +msgstr "" + +#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111 +msgid "72 h" +msgstr "" + +#: fbus-6110.c:2591 gnokii.c:847 +msgid "72 hours" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:384 +msgid "?Constant voltage charging display" +msgstr "" + +#: gnokii.c:1747 +msgid "AC/DC" +msgstr "sí»ový adaptér" + +#: fbus-6110.c:2977 +msgid "AC/DC\n" +msgstr "sí»ový adaptér\n" + +#: xgnokii/xgnokii_netmon.c:496 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807 +msgid "About" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:381 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338 +msgid "Active cell" +msgstr "" + +#: xgnokii/xgnokii.c:1725 +msgid "Address:" +msgstr "" + +#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351 +msgid "Alarm" +msgstr "" + +#: xgnokii/xgnokii.c:1337 +msgid "Alarm setting" +msgstr "" + +#: gnokii.c:1687 +msgid "Alarm: %s\n" +msgstr "Budík: %s\n" + +#: xgnokii/xgnokii.c:1227 +msgid "Apply" +msgstr "" + +#: rlp-common.c:509 +msgid "BAD" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:375 +msgid "BTS TEST" +msgstr "" + +#: fbus-6110.c:4341 +msgid "Bad checksum!\n" +msgstr "" + +#: gnokii.c:1744 +msgid "Battery: %d\n" +msgstr "Kapacita baterie: %d\n" + +#: xgnokii/xgnokii.c:1309 +msgid "Bindir:" +msgstr "" + +#: gnokii.c:1493 +msgid "Birthday\n" +msgstr "" + +#: xgnokii/xgnokii.c:1812 +msgid "Busines Cards" +msgstr "" + +#: xgnokii/xgnokii.c:1552 +msgid "Business Card" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "C2" +msgstr "" + +#: fbus-6110.c:2136 +msgid "CAR is %s.\n" +msgstr "CAR je %s.\n" + +#: xgnokii/xgnokii_netmon.c:378 +msgid "CELL BARR-Flag" +msgstr "" + +#: fbus-3810.c:1115 +msgid "CS Fail %02x != %02x" +msgstr "" + +#: fbus-6110.c:2137 +msgid "CTS is %s.\n" +msgstr "CTS je %s.\n" + +#: gnokii.c:1485 +msgid "Call\n" +msgstr "" + +#: gnokii.c:2096 +msgid "Call in progress: %s\n" +msgstr "" + +#: fbus-6110.c:2818 +msgid "Caller group name: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:752 +msgid "Caller group:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:449 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562 +msgid "Can't change memory type!" +msgstr "" + +#: xgnokii/xgnokii_common.c:182 +msgid "Can't exec %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993 +msgid "Can't find free memory." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:652 +msgid "Can't find pattern!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1988 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1503 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74 +msgid "Can't open file %s for reading!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110 +msgid "Can't open file %s for writing!" +msgstr "" + +#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303 +msgid "Cancel" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:359 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Center number" +msgstr "" + +#: xgnokii/xgnokii.c:1018 +msgid "Center:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1034 +msgid "Changing memory type" +msgstr "" + +#: fbus-3810.c:1446 +msgid "" +"Checksum: %02x \n" +" " +msgstr "" + +#: xgnokii/xgnokii.c:1243 +msgid "Close" +msgstr "" + +#: gnokii.c:1221 +msgid "Code ok.\n" +msgstr "" + +#: xgnokii/xgnokii.c:2007 +msgid "Colleagues" +msgstr "" + +#: xgnokii/xgnokii.c:1627 +msgid "Company:" +msgstr "" + +#: fbus-6110.c:3840 fbus-6110.c:3933 +msgid "Congestion" +msgstr "" + +#: xgnokii/xgnokii.c:1265 +msgid "Connection" +msgstr "" + +#: fbus-6110.c:3884 +msgid "Connection rejected by SME" +msgstr "" + +#: xgnokii/xgnokii.c:1321 +msgid "Connection:" +msgstr "" + +#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437 +msgid "Contacts" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1041 +msgid "Continue" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Control of task information displays" +msgstr "" + +#: fbus-3810.c:977 +msgid "Couldn't open FB38 device: " +msgstr "" + +#: fbus-6110.c:2206 +msgid "Couldn't open FB61 device: " +msgstr "" + +#: fbus-6110.c:658 +msgid "Couldn't open FB61 infrared device: " +msgstr "" + +#: virtmodem.c:179 +msgid "Couldn't open pty!\n" +msgstr "" + +#: gnokii.c:679 +msgid "Couldn't read from stdin!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: gnokii.c:1756 +msgid "DC: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:765 +msgid "DTMF" +msgstr "" + +#: fbus-6110.c:2134 +msgid "DTR is %s.\n" +msgstr "DTR je %s.\n" + +#: xgnokii/xgnokii_netmon.c:362 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: gnokii.c:2101 +msgid "Data call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Date" +msgstr "" + +#: gnokii.c:1024 +msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:206 +msgid "Date: " +msgstr "" + +#: gnokii.c:1650 +msgid "Date: %4d/%02d/%02d\n" +msgstr "" + +#: fbus-3810.c:1764 +msgid "Delete SMS Mem Loc write failed!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:842 +msgid "Delete entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2502 +msgid "Delete entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:303 +msgid "Delete message" +msgstr "" + +#: gnokii.c:1162 +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" + +#: gnokii.c:1155 +msgid "Deleted SMS %s %d\n" +msgstr "" + +#: fbus-6110.c:3809 +msgid "Delivered" +msgstr "" + +#: fbus-6110.c:3705 +msgid "Delivery Report\n" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:207 +msgid "Dial Tone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2509 +msgid "Dial voice" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:873 +msgid "Do you want delete selected entries?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1380 +msgid "Don't save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494 +msgid "Duplicate entry" +msgstr "" + +#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060 +msgid "E-Mail" +msgstr "" + +#: xgnokii/xgnokii.c:1700 +msgid "E-Mail:" +msgstr "" + +#: gnokii.c:1759 +msgid "EN: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:152 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:164 +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:182 +msgid "ERROR: Can't write file config file!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1411 +msgid "Edit" +msgstr "" + +#: xgnokii/xgnokii.c:978 +msgid "Edit SMS Setting" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498 +msgid "Edit entry" +msgstr "" + +#: fbus-6110.c:2565 gnokii.c:821 +msgid "Email" +msgstr "" + +#: gnokii.c:1213 +msgid "Enter your code: " +msgstr "" + +#: gnokii.c:1729 +msgid "Entering monitor mode...\n" +msgstr "Zapínám monitorovací re¾im...\n" + +#: xgnokii/xgnokii_common.c:45 +msgid "Error" +msgstr "" + +#: fbus-6110.c:3860 fbus-6110.c:3953 +msgid "Error in SME" +msgstr "" + +#: xgnokii/xgnokii.c:722 +msgid "Error saving SMS centers!" +msgstr "" + +#: xgnokii/xgnokii.c:728 +msgid "Error writing configuration file!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538 +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "" + +#: gnokii.c:1219 +msgid "Error: invalid code\n" +msgstr "" + +#: fbus-3810.c:1564 +msgid "Explore Write failed!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1791 +msgid "Export" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2483 +msgid "Export to file" +msgstr "" + +#: gnokii.c:1762 +msgid "FD: Used %d, Free %d\n" +msgstr "" + +#: fbus-6110.c:3828 +msgid "Failed" +msgstr "" + +#: xgnokii/xgnokii.c:2004 +msgid "Familly" +msgstr "" + +#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046 +msgid "Fax" +msgstr "" + +#: gnokii.c:2100 +msgid "Fax call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1676 +msgid "Fax:" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143 +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086 +msgid "Find" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Format" +msgstr "" + +#: gnokii.c:1960 +msgid "Format problem on line %d [%s]\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:292 +msgid "Forward Message" +msgstr "" + +#: rlp-common.c:621 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "" + +#: xgnokii/xgnokii.c:2006 +msgid "Friends" +msgstr "" + +#: xgnokii/xgnokii_sms.c:198 +msgid "From: " +msgstr "" + +#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883 +msgid "Function not implemented in %s model!\n" +msgstr "" + +#: gnokii.c:72 +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" + +#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "" + +#: gnokii.c:1065 +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" + +#: gnokii.c:1403 +msgid "Getting Logo.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1527 +msgid "Getting entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Group" +msgstr "" + +#: xgnokii/xgnokii.c:1766 +msgid "Group %d:" +msgstr "" + +#: xgnokii/xgnokii.c:1757 +msgid "Groups" +msgstr "" + +#: xgnokii/xgnokii.c:1750 +msgid "Groups names" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:412 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:415 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:473 +msgid "Hardware version" +msgstr "" + +#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786 +msgid "Help" +msgstr "" + +#: xgnokii/xgnokii.c:1779 +msgid "Help viewer" +msgstr "" + +#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "" + +#: gnokii.c:2150 +msgid "IMEI: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1061 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2099 +msgid "Import" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2479 +msgid "Import from file" +msgstr "" + +#: xgnokii/xgnokii_sms.c:337 +msgid "Inbox" +msgstr "" + +#: fbus-3810.c:2178 +msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n" +msgstr "" + +#: fbus-3810.c:1853 +msgid "Incoming call - status %02x %02x %02x, Number %s.\n" +msgstr "" + +#: fbus-3810.c:1992 +msgid "Incoming call answered.\n" +msgstr "" + +#: fbus-3810.c:1964 +msgid "Incoming call terminated.\n" +msgstr "" + +#: gnokii.c:1780 +msgid "Incoming call: %s\n" +msgstr "" + +#: fbus-6110.c:3880 +msgid "Incompatibile destination" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "Information of OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Information of task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "Information of task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Information of task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "Information of the current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii.c:1297 +msgid "Init length:" +msgstr "" + +#: gnokii.c:1730 +msgid "Initialising GSM interface...\n" +msgstr "Inicializuji GSM rozhraní...\n" + +#: fbus-6110.c:4281 +msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n" +msgstr "" + +#: gnokii.c:1053 +msgid "Invalid location: %s %d\n" +msgstr "" + +#: gnokii.c:2102 +msgid "Keyboard lock: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "L2-Timeouts" +msgstr "" + +#: gnokii.c:1765 +msgid "LD: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1788 +msgid "Leaving monitor mode...\n" +msgstr "Opou¹tím monitorovací re¾im...\n" + +#: xgnokii/xgnokii_dtmf.c:91 +msgid "Load" +msgstr "" + +#: gnokii.c:1448 +msgid "Logo file error.\n" +msgstr "" + +#: gnokii.c:1768 +msgid "MC: Used %d, Free %d\n" +msgstr "" + +#: fbus-3810.c:1108 +msgid "MT Fail %02x" +msgstr "" + +#: xgnokii/xgnokii.c:1083 +msgid "Max. Time" +msgstr "" + +#: xgnokii/xgnokii.c:452 +msgid "Max. time" +msgstr "" + +#: fbus-6110.c:2599 gnokii.c:855 +msgid "Maximum time" +msgstr "" + +#: gnokii.c:1489 +msgid "Meeting\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Memory" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "Memory status before reset" +msgstr "" + +#: gnokii.c:1888 +msgid "Memory type %s not supported!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:733 +msgid "Memory:" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Message" +msgstr "" + +#: gnokii.c:830 +msgid "Message validity is " +msgstr "" + +#: fbus-6110.c:3370 +msgid "Message: Alarm\n" +msgstr "" + +#: fbus-6110.c:3348 +msgid "Message: Alarm set correctly\n" +msgstr "" + +#: fbus-6110.c:3582 +msgid "Message: Calendar Alarm active\n" +msgstr "" + +#: fbus-6110.c:3556 +msgid "Message: Calendar note can't be deleted\n" +msgstr "" + +#: fbus-6110.c:3545 +msgid "Message: Calendar note deleted\n" +msgstr "" + +#: fbus-6110.c:3566 +msgid "Message: Calendar note deleting error\n" +msgstr "" + +#: fbus-6110.c:3523 +msgid "Message: Calendar note error\n" +msgstr "" + +#: fbus-6110.c:3513 +msgid "Message: Calendar note not available\n" +msgstr "" + +#: fbus-6110.c:3477 +msgid "Message: Calendar note received.\n" +msgstr "" + +#: fbus-6110.c:3421 fbus-6110.c:3431 +msgid "Message: Calendar note write failed!\n" +msgstr "" + +#: fbus-6110.c:3411 +msgid "Message: Calendar note write succesfull!\n" +msgstr "" + +#: fbus-6110.c:2421 +msgid "Message: Call answered.\n" +msgstr "" + +#: fbus-6110.c:2432 +msgid "Message: Call ended by your phone.\n" +msgstr "" + +#: fbus-6110.c:2361 +msgid "Message: Call message, type 0x03:" +msgstr "" + +#: fbus-6110.c:2456 +msgid "Message: Call message, type 0x0a:" +msgstr "" + +#: fbus-6110.c:2837 +msgid "Message: Caller group data received but not requested!\n" +msgstr "" + +#: fbus-6110.c:2855 +msgid "Message: Caller group data set correctly.\n" +msgstr "" + +#: fbus-6110.c:2817 +msgid "Message: Caller group logo etc.\n" +msgstr "" + +#: fbus-6110.c:3332 +msgid "Message: Date and time\n" +msgstr "" + +#: fbus-6110.c:3302 +msgid "Message: Date and time set correctly\n" +msgstr "" + +#: fbus-6110.c:3312 fbus-6110.c:3358 +msgid "Message: Date and time set error\n" +msgstr "" + +#: fbus-6110.c:2847 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "" + +#: fbus-6110.c:2863 +msgid "Message: Error attempting to set caller group data\n" +msgstr "" + +#: fbus-6110.c:3113 +msgid "Message: Error getting operator logo!\n" +msgstr "" + +#: fbus-6110.c:3078 +msgid "Message: Error setting operator logo!\n" +msgstr "" + +#: fbus-6110.c:2387 +msgid "Message: Incoming call alert:\n" +msgstr "" + +#: fbus-6110.c:2786 +msgid "Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" + +#: fbus-6110.c:2779 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" + +#: fbus-6110.c:2793 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "" + +#: fbus-6110.c:2760 +msgid "Message: Memory status received:\n" +msgstr "" + +#: fbus-6110.c:4133 +msgid "Message: Mobile phone identification received:\n" +msgstr "" + +#: fbus-6110.c:4084 +msgid "Message: Netmonitor correctly set.\n" +msgstr "" + +#: fbus-6110.c:4094 +msgid "Message: Netmonitor menu %d received:\n" +msgstr "" + +#: fbus-6110.c:3215 +msgid "Message: Network informations:\n" +msgstr "" + +#: fbus-6110.c:3088 +msgid "Message: Operator Logo received.\n" +msgstr "" + +#: fbus-6110.c:3069 +msgid "Message: Operator logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3104 +msgid "Message: Operator logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:3693 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "" + +#: fbus-6110.c:2933 +msgid "Message: Phone status received:\n" +msgstr "" + +#: fbus-6110.c:2655 +msgid "Message: Phonebook entry received:\n" +msgstr "" + +#: fbus-6110.c:2739 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "" + +#: fbus-6110.c:2693 +msgid "Message: Phonebook read entry error received:\n" +msgstr "" + +#: fbus-6110.c:2722 +msgid "Message: Phonebook written correctly.\n" +msgstr "" + +#: fbus-6110.c:3702 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "" + +#: fbus-6110.c:2374 +msgid "Message: Remote end hang up.\n" +msgstr "" + +#: fbus-6110.c:2528 +msgid "Message: SMS Center correctly set.\n" +msgstr "" + +#: fbus-6110.c:2621 +msgid "Message: SMS Center error received:\n" +msgstr "" + +#: fbus-6110.c:2544 +msgid "Message: SMS Center received:\n" +msgstr "" + +#: fbus-6110.c:2506 +msgid "Message: SMS Message Received\n" +msgstr "" + +#: fbus-6110.c:2486 +msgid "Message: SMS Message correctly sent.\n" +msgstr "" + +#: fbus-6110.c:4039 +msgid "Message: SMS Status Received\n" +msgstr "" + +#: fbus-6110.c:4053 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "" + +#: fbus-6110.c:4029 +msgid "Message: SMS deleted successfully.\n" +msgstr "" + +#: fbus-6110.c:3998 +msgid "Message: SMS reading failed.\n" +msgstr "" + +#: fbus-6110.c:3131 +msgid "Message: Security Code status received: " +msgstr "" + +#: fbus-6110.c:3179 +msgid "Message: Security code accepted.\n" +msgstr "" + +#: fbus-6110.c:3189 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "" + +#: fbus-6110.c:2497 +msgid "Message: Sending SMS Message failed.\n" +msgstr "" + +#: fbus-6110.c:2887 +msgid "Message: Speed dial entry error\n" +msgstr "" + +#: fbus-6110.c:2874 +msgid "Message: Speed dial entry received:\n" +msgstr "" + +#: fbus-6110.c:2897 +msgid "Message: Speed dial entry set.\n" +msgstr "" + +#: fbus-6110.c:2907 +msgid "Message: Speed dial entry setting error.\n" +msgstr "" + +#: fbus-6110.c:3024 +msgid "Message: Startup Logo received.\n" +msgstr "" + +#: fbus-6110.c:3062 +msgid "Message: Startup logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3053 +msgid "Message: Startup logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:4177 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "" + +#: fbus-6110.c:4195 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "" + +#: fbus-6110.c:2800 +msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" + +#: fbus-6110.c:2468 +msgid "Message: Unknown message of type 0x01\n" +msgstr "" + +#: fbus-6110.c:2917 +msgid "Message: Unknown message of type 0x03\n" +msgstr "" + +#: fbus-6110.c:3006 +msgid "Message: Unknown message of type 0x04\n" +msgstr "" + +#: fbus-6110.c:3245 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "" + +#: fbus-6110.c:3388 +msgid "Message: Unknown message of type 0x11\n" +msgstr "" + +#: fbus-6110.c:3591 +msgid "Message: Unknown message of type 0x13\n" +msgstr "" + +#: fbus-6110.c:4206 +msgid "Message: Unknown message.\n" +msgstr "" + +#: fbus-6110.c:3606 +msgid "Message: the rest of the SMS message received.\n" +msgstr "" + +#: gnokii.c:804 +msgid "Messages sent as " +msgstr "" + +#: fbus-3810.c:2273 +msgid "Mobile phone identification received:\n" +msgstr "" + +#: xgnokii/xgnokii.c:1285 +msgid "Model:" +msgstr "" + +#: gnokii.c:2151 +msgid "Model: %s\n" +msgstr "" + +#: fbus-6110.c:4419 +msgid "Msg Dest: %s\n" +msgstr "" + +#: fbus-6110.c:4425 +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" + +#: fbus-3810.c:1444 +msgid "Msg Len: %02x " +msgstr "" + +#: fbus-6110.c:4420 +msgid "Msg Source: %s\n" +msgstr "" + +#: fbus-6110.c:4422 +msgid "Msg Type: %02x\n" +msgstr "" + +#: fbus-3810.c:1443 +msgid "Msg Type: %02x " +msgstr "" + +#: fbus-6110.c:4424 +msgid "Msg Unknown: %02x\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:499 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:502 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:341 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:344 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:347 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433 +msgid "Name" +msgstr "" + +#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708 +msgid "Name:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:446 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271 +msgid "Net Monitor" +msgstr "" + +#: gnokii.c:1783 +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490 +msgid "New entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:288 +msgid "New message" +msgstr "" + +#: xgnokii/xgnokii_common.c:98 +msgid "No" +msgstr "" + +#: xgnokii/xgnokii.c:2009 +msgid "No group" +msgstr "" + +#: fbus-6110.c:3896 +msgid "No internetworking available" +msgstr "" + +#: fbus-6110.c:3848 fbus-6110.c:3941 +msgid "No response from SME" +msgstr "" + +#: fbus-6110.c:3888 +msgid "Not obtainable" +msgstr "" + +#: fbus-6110.c:3712 +msgid "Not read\n" +msgstr "" + +#: fbus-6110.c:3698 +msgid "Not sent\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433 +msgid "Number" +msgstr "" + +#: fbus-3810.c:2338 +msgid "Number field empty." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:721 +msgid "Number:" +msgstr "" + +#: fbus-3810.c:2341 +msgid "Number: " +msgstr "" + +#: fbus-6110.c:3688 +msgid "Number: %d\n" +msgstr "" + +#: gnokii.c:1771 +msgid "ON: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296 +msgid "Ok" +msgstr "" + +#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222 +msgid "Options" +msgstr "" + +#: xgnokii/xgnokii.c:2008 +msgid "Other" +msgstr "" + +#: xgnokii/xgnokii_sms.c:343 +msgid "Outbox" +msgstr "" + +#: fbus-3810.c:2006 +msgid "Outgoing call answered - status bytes %02x %02x %02x.\n" +msgstr "" + +#: fbus-3810.c:1950 +msgid "Outgoing call terminated (0x10 message).\n" +msgstr "" + +#: fbus-3810.c:1978 +msgid "Outgoing call terminated (0x12 message).\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142 +msgid "Overwrite file?" +msgstr "" + +#: fbus-6110.c:4401 +msgid "PC" +msgstr "" + +#: fbus-6110.c:4496 +msgid "PC: " +msgstr "" + +#: fbus-3810.c:1377 +msgid "PIN [possibly] entered.\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:533 +msgid "Page:" +msgstr "" + +#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053 +msgid "Paging" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1108 +msgid "Pattern:" +msgstr "" + +#: fbus-6110.c:3925 +msgid "Pending" +msgstr "" + +#: fbus-6110.c:3871 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:4398 +msgid "Phone" +msgstr "" + +#: xgnokii/xgnokii.c:1258 +msgid "Phone and connection type" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1247 +msgid "Phone memory..." +msgstr "" + +#: fbus-3810.c:1386 +msgid "Phone powering off..." +msgstr "" + +#: gnokii.c:1753 +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefon: pou¾ito: %d, volné %d\n" + +#: fbus-6110.c:4282 +msgid "Please report it ...\n" +msgstr "" + +#: xgnokii/xgnokii.c:1272 +msgid "Port:" +msgstr "" + +#: gnokii.c:1747 +msgid "Power Source: %s\n" +msgstr "Zdroj napájení: %s\n" + +#: xgnokii/xgnokii_netmon.c:350 +msgid "Prefered/Denied networks" +msgstr "" + +#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949 +msgid "Quality of service not aviable" +msgstr "" + +#: gnokii.c:1774 +msgid "RC: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1741 +msgid "RFLevel: %d\n" +msgstr "Úroveò signálu: %d\n" + +#: rlp-common.c:643 +msgid "RLP state 0.\n" +msgstr "" + +#: rlp-common.c:660 +msgid "RLP state 1.\n" +msgstr "" + +#: fbus-6110.c:2135 +msgid "RTS is %s.\n" +msgstr "RTS je %s.\n" + +#: fbus-6110.c:3710 +msgid "Read\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2468 +msgid "Read from phone" +msgstr "" + +#: gnokii.c:1010 +msgid "Receiver: %s Msg Center: %s\n" +msgstr "" + +#: gnokii.c:1481 +msgid "Reminder\n" +msgstr "" + +#: fbus-6110.c:3876 +msgid "Remote procedure error" +msgstr "" + +#: xgnokii/xgnokii_sms.c:296 +msgid "Reply message" +msgstr "" + +#: fbus-3810.c:1647 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "" + +#: fbus-3810.c:1634 +msgid "Request Mem Loc Write failed!" +msgstr "" + +#: fbus-3810.c:1741 +msgid "Request SMS Mem Loc Write failed!" +msgstr "" + +#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967 +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:409 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Reset-Counter" +msgstr "" + +#: gnokii.c:997 +msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: gnokii.c:2152 +msgid "Revision: %s\n" +msgstr "Revize: %s\n" + +#: xgnokii/xgnokii_netmon.c:493 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1258 +msgid "SIM memory..." +msgstr "" + +#: gnokii.c:1750 +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: pou¾ito %d, volné %d\n" + +#: fbus-6110.c:3908 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: fbus-6110.c:3900 +msgid "SM Validity Period Expired" +msgstr "" + +#: fbus-6110.c:3904 +msgid "SM deleted by originating SME" +msgstr "" + +#: fbus-6110.c:3912 +msgid "SM does not exist" +msgstr "" + +#: fbus-6110.c:3817 +msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: fbus-6110.c:3814 +msgid "SM received by the SME" +msgstr "" + +#: fbus-6110.c:3820 +msgid "SM replaced by the SC" +msgstr "" + +#: fbus-6110.c:3844 fbus-6110.c:3937 +msgid "SME busy" +msgstr "" + +#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382 +msgid "SMS" +msgstr "" + +#: fbus-3810.c:2332 +msgid "SMS Message Center Data status bytes =" +msgstr "" + +#: gnokii.c:1777 +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "SMS zprávy: nepøeètené %d, celkem %d\n" + +#: fbus-3810.c:559 +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "" + +#: gnokii.c:782 gnokii.c:1360 +msgid "SMS Send failed (error=%d)\n" +msgstr "" + +#: gnokii.c:866 +msgid "SMS center can not be found :-(\n" +msgstr "" + +#: gnokii.c:1059 +msgid "SMS location %s %d empty.\n" +msgstr "" + +#: gnokii.c:2103 +msgid "SMS storage full: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:328 +msgid "SMS's" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158 +msgid "Save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1365 +msgid "Save changes?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2472 +msgid "Save to phone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1285 +msgid "Saving entries" +msgstr "" + +#: gnokii.c:1237 +msgid "Security code status: " +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2293 +msgid "Select contacts" +msgstr "" + +#: fbus-3810.c:1718 +msgid "Send SMS block %d failed!" +msgstr "" + +#: fbus-3810.c:1691 +msgid "Send SMS header failed!" +msgstr "" + +#: gnokii.c:780 gnokii.c:1358 +msgid "Send succeeded!\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Sender" +msgstr "" + +#: gnokii.c:1037 +msgid "Sender: %s Msg Center: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1031 +msgid "Sending Format:" +msgstr "" + +#: gnokii.c:1454 +msgid "Sending Logo.\n" +msgstr "" + +#: fbus-3810.c:456 fbus-6110.c:1870 +msgid "Sending SMS to %s via message center %s\n" +msgstr "" + +#: gnokii.c:984 +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: fbus-6110.c:3696 +msgid "Sent\n" +msgstr "" + +#: fbus-3810.c:1445 +msgid "Sequence Number: %02x " +msgstr "" + +#: fbus-3810.c:1008 +msgid "Serial TIOCMGET failed: " +msgstr "" + +#: fbus-3810.c:1015 +msgid "Serial TIOCMSET failed: " +msgstr "" + +#: fbus-6110.c:2133 +msgid "Serial flags dump:\n" +msgstr "Stav sériového portu: \n" + +#: fbus-6110.c:3852 fbus-6110.c:3945 +msgid "Service rejected" +msgstr "" + +#: xgnokii/xgnokii.c:399 +msgid "Set %d" +msgstr "" + +#: fbus-3810.c:1535 fbus-3810.c:1610 +msgid "Set Mem Loc Write failed!" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Set name" +msgstr "" + +#: xgnokii/xgnokii.c:1005 +msgid "Set name:" +msgstr "" + +#: fbus-6110.c:2175 +msgid "Setting FBUS communication...\n" +msgstr "Navazuji FBUS komunikaci...\n" + +#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258 +msgid "Short Message Service" +msgstr "" + +#: xgnokii/xgnokii.c:272 +msgid "Short Message received" +msgstr "" + +#: virtmodem.c:191 +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" + +#: gnokii.c:1996 +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: fbus-3810.c:1415 +msgid "Standard Ack write failed!" +msgstr "" + +#: fbus-6110.c:764 +msgid "Starting IR mode...!\n" +msgstr "" + +#: fbus-6110.c:3041 +msgid "Startup Text: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Status" +msgstr "" + +#: fbus-3810.c:1936 +msgid "Status: Connection Status %02x Batt %02x RF %02x.\n" +msgstr "" + +#: gnokii.c:1565 gnokii.c:2034 +msgid "Succesfully written!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:353 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:356 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: fbus-3810.c:1800 +msgid "TX_SendMessage - message too long!\n" +msgstr "" + +#: fbus-3810.c:1826 +msgid "TX_SendMessage - write:" +msgstr "" + +#: xgnokii/xgnokii.c:1652 +msgid "Telephone:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:452 +msgid "Temporary counters of DSP" +msgstr "" + +#: fbus-6110.c:3835 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:3929 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "" + +#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039 +msgid "Text" +msgstr "" + +#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038 +msgid "" +"Text: %s\n" +"\n" +msgstr "" + +#: gnokii.c:1588 +msgid "The calendar note can not be deleted\n" +msgstr "" + +#: gnokii.c:1526 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii.c:1688 +msgid "Time: %02d:%02d\n" +msgstr "" + +#: gnokii.c:1651 +msgid "Time: %02d:%02d:%02d\n" +msgstr "" + +#: fbus-6110.c:633 +msgid "Timeout in IR-mode\n" +msgstr "" + +#: xgnokii/xgnokii.c:1602 +msgid "Title:" +msgstr "" + +#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859 +msgid "Unknown" +msgstr "" + +#: gnokii.c:1497 +msgid "Unknown\n" +msgstr "" + +#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023 +msgid "Unknown memory type %s!\n" +msgstr "" + +#: fbus-6110.c:3283 +msgid "Unknown message of type 0x0d.\n" +msgstr "" + +#: fbus-6110.c:3440 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "" + +#: fbus-6110.c:4110 +msgid "Unknown message of type 0x40.\n" +msgstr "" + +#: fbus-6110.c:2633 +msgid "Unknown message!\n" +msgstr "" + +#: gnokii.c:641 +msgid "Unknown option: %d\n" +msgstr "" + +#: fbus-6110.c:3707 +msgid "Unknown type\n" +msgstr "" + +#: fbus-6110.c:3167 gnokii.c:1273 +msgid "Unknown!\n" +msgstr "" + +#: rlp-common.c:448 +msgid "Unknown!!! " +msgstr "" + +#: fbus-3810.c:1441 +msgid "Unknown: " +msgstr "" + +#: gnokii.c:2097 +msgid "Unknown: %s\n" +msgstr "" + +#: gnokii.c:2098 +msgid "Unread SMS: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:372 +msgid "Uplink DTX" +msgstr "" + +#: gnokii.c:467 +msgid "Use '%s --help' for usage informations.\n" +msgstr "" + +#: xgnokii/xgnokii.c:1559 +msgid "User" +msgstr "" + +#: xgnokii/xgnokii.c:2005 +msgid "VIP" +msgstr "" + +#: virtmodem.c:87 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: virtmodem.c:77 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: virtmodem.c:82 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Validity" +msgstr "" + +#: xgnokii/xgnokii.c:1075 +msgid "Validity Period:" +msgstr "" + +#: xgnokii/xgnokii.c:1793 +msgid "Viewer:" +msgstr "" + +#: gnokii.c:2099 +msgid "Voice call: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "" + +#: gnokii.c:2184 +msgid "What kind of reset do you want??\n" +msgstr "" + +#: gnokii.c:1976 +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: gnokii.c:1974 +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298 +msgid "Write failed!" +msgstr "Zápis selhal!" + +#: gnokii.c:651 +msgid "Wrong number of arguments\n" +msgstr "" + +#: xgnokii/xgnokii_common.c:89 +msgid "Yes" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1404 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Want you save these changes into phone?\n" +msgstr "" + +#: fbus-6110.c:4164 +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "" + +#: fbus-6110.c:4570 +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "" + +#: fbus-6110.c:3235 +msgid "automatic" +msgstr "" + +#: gnokii.c:1747 +msgid "battery" +msgstr "baterie" + +#: fbus-6110.c:2983 +msgid "battery\n" +msgstr "baterie\n" + +#: fbus-6110.c:2949 +msgid "call in progress\n" +msgstr "" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "down" +msgstr "shozen" + +#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94 +msgid "error opening %s, using default config\n" +msgstr "" + +#: gnokiid.c:51 +msgid "gnokiid Version %s" +msgstr "" + +#: virtmodem.c:187 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "" + +#: fbus-6110.c:3226 +msgid "home network selected" +msgstr "" + +#: xgnokii/xgnokii.c:1325 +msgid "infrared" +msgstr "" + +#: fbus-6110.c:3235 +msgid "manual" +msgstr "" + +#: fbus-6110.c:3229 +msgid "not registered in the network" +msgstr "" + +#: fbus-6110.c:3162 gnokii.c:1268 +msgid "nothing to enter.\n" +msgstr "" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "off" +msgstr "" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "on" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:737 +msgid "phone" +msgstr "" + +#: fbus-6110.c:2961 +msgid "powered off\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:71 +msgid "read" +msgstr "" + +#: fbus-6110.c:2940 +msgid "registered within the network\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:69 +msgid "report" +msgstr "" + +#: fbus-6110.c:3228 +msgid "requesting network" +msgstr "" + +#: fbus-3810.c:1052 +msgid "restarting.\n" +msgstr "znovu startuji.\n" + +#: fbus-6110.c:3227 +msgid "roaming network" +msgstr "" + +#: xgnokii/xgnokii_sms.c:119 +msgid "sent" +msgstr "" + +#: xgnokii/xgnokii.c:1329 +msgid "serial" +msgstr "" + +#: fbus-6110.c:3230 +msgid "unknown" +msgstr "" + +#: fbus-6110.c:2967 fbus-6110.c:2989 +msgid "unknown\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:73 +msgid "unread" +msgstr "" + +#: xgnokii/xgnokii_sms.c:121 +msgid "unsent" +msgstr "" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "up" +msgstr "nastaven" + +#: fbus-6110.c:3142 gnokii.c:1248 +msgid "waiting for PIN.\n" +msgstr "" + +#: fbus-6110.c:3147 gnokii.c:1253 +msgid "waiting for PIN2.\n" +msgstr "" + +#: fbus-6110.c:3152 gnokii.c:1258 +msgid "waiting for PUK.\n" +msgstr "" + +#: fbus-6110.c:3157 gnokii.c:1263 +msgid "waiting for PUK2.\n" +msgstr "" + +#: fbus-6110.c:3137 gnokii.c:1243 +msgid "waiting for Security Code.\n" +msgstr "" + +#: fbus-6110.c:2955 +msgid "waiting for security code\n" +msgstr "" + +#: xgnokii/xgnokii.c:824 +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Jan\355k ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" +# msgid "Enter your PIN: " +# msgstr "Zadejte vá¹ PIN: " +# +# msgid " %d. SMS Center number is %s\n" +# msgstr " %d SMS centrum má èíslo %s\n" +# +# msgid " Text: " +# msgstr " Text: " +# +# msgid " usage: gnokii {--help|--monitor|--version}" +# msgstr " pou¾ití: gnokii {--help|--monitor|--version}" +# +# msgid "" +# " Code Error\n" +# " You're not my big owner :-)\n" +# msgstr "" +# " PIN nebyl akceptován\n" +# " Nejsi mùj vellký majitel :-)\n" +# +# msgid " Code Accepted\n" +# msgstr " PIN byl akceptován\n" +# +# msgid " Keyboard is %s\n" +# msgstr " Klávesnice je %s\n" +# diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..b624964 --- /dev/null +++ b/po/de.po @@ -0,0 +1,3185 @@ +# This is the German locale definition for Gnokii. +# Copyright (C) 1999, 2000 Free Software Foundation, Inc. +# Daniel Egger , 1999, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 2000-05-08 21:27+0200\n" +"PO-Revision-Date: 2000-05-08 18:25:30+0100\n" +"Last-Translator: Daniel Egger \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c " +"fbus-6110.c gnokii.c gsm-api.c\n" + +#: common/fbus-3810.c:525 common/fbus-6110.c:2037 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "Sende SMS an %s via SMS-Center %s\n" + +#: common/fbus-3810.c:629 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "SMS Sendeversuch fehlgeschlagen, probiere es nochmal (%d von %d)\n" + +#: common/fbus-3810.c:1161 +msgid "Couldn't open FB38 device: " +msgstr "Konnte FB38 Gerät nicht öffnen: " + +#: common/fbus-3810.c:1253 +msgid "restarting.\n" +msgstr "starte neu.\n" + +#: common/fbus-3810.c:1309 +#, c-format +msgid "MT Fail %02x" +msgstr "MT fehlgeschlagen %02x" + +#: common/fbus-3810.c:1316 common/mbus-6160.c:689 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "Cs-Fehler %02x != %02x" + +#: common/fbus-3810.c:1430 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 Registrierungs-Antwort 0x%02x\n" + +#: common/fbus-3810.c:1446 +msgid "0x16 Registration Response 0x%02x\n" +msgstr "0x16 Registrierungs-Antwort 0x%02x\n" + +#: common/fbus-3810.c:1447 +msgid "SIM access: %s.\n" +msgstr "SIM Zugriff: %s\n" + +#: common/fbus-3810.c:1523 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS an 0x%02x gespeichert\n" + +#: common/fbus-3810.c:1533 +msgid "SMS Store failed: 0x%02x\n" +msgstr "SMS speichern fehlgeschlagen (Fehler=%d)\n" + +#: common/fbus-3810.c:1654 +msgid "PIN [possibly] entered.\n" +msgstr "PIN wurde (möglicherweise) eingegeben.\n" + +#: common/fbus-3810.c:1663 +msgid "Phone powering off..." +msgstr "Mobilphone schaltet sich ab..." + +#: common/fbus-3810.c:1692 +msgid "Standard Ack write failed!" +msgstr "Senden der Standardbestätigung schlug fehl!" + +#: common/fbus-3810.c:1718 +msgid "Unknown: " +msgstr "Unbekannt: " + +#: common/fbus-3810.c:1720 +#, c-format +msgid "Msg Type: %02x " +msgstr "Nachrichtentyp: %02x" + +#: common/fbus-3810.c:1721 +#, c-format +msgid "Msg Len: %02x " +msgstr "Nachrichtenlänge: %02x" + +#: common/fbus-3810.c:1722 +#, c-format +msgid "Sequence Number: %02x " +msgstr "Sequenznummer: %02x" + +#: common/fbus-3810.c:1723 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Prüfsumme: %02x \n" +" " + +#: common/fbus-3810.c:1815 common/fbus-3810.c:1936 +msgid "Set Mem Loc Write failed!" +msgstr "Schreiben der Speicherzelle schlug fehl!" + +#: common/fbus-3810.c:1860 +msgid "TX_SendRLPFrame - write:" +msgstr "TX_SendRLPFrame - schreiben:" + +#: common/fbus-3810.c:1875 +msgid "0x4a Write failed!" +msgstr "0x4a Schreiben erfolglos!" + +#: common/fbus-3810.c:1890 +msgid "Explore Write failed!" +msgstr "Schreiben fehlgeschlagen!" + +#: common/fbus-3810.c:1900 +msgid "0x3f Write failed!" +msgstr "0x3f Schreiben erfolglos!" + +#: common/fbus-3810.c:1960 +msgid "Request Mem Loc Write failed!" +msgstr "Anforderung zum Schreiben einer Speicherzelle fehlgeschlagen!" + +#: common/fbus-3810.c:1973 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "Anforderung IMEI/Revision/Modell schreiben fehlgeschlagen!" + +#: common/fbus-3810.c:2016 +msgid "Send SMS header failed!" +msgstr "Senden des SMS-Headers erfolglos!" + +#: common/fbus-3810.c:2075 +msgid "Store SMS header failed!" +msgstr "Speichern des SMS-Headers erfolglos!" + +#: common/fbus-3810.c:2100 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "Senden des SMS-Blocks %d erfolglos!" + +#: common/fbus-3810.c:2123 +msgid "Request SMS Mem Loc Write failed!" +msgstr "Anforderung zum Schreiben einer SMS Speicherzelle fehlgeschlagen!" + +#: common/fbus-3810.c:2146 +msgid "Delete SMS Mem Loc write failed!" +msgstr "Löschen von SMS fehlgeschlagen!" + +#: common/fbus-3810.c:2165 +msgid "0x15 Write failed!" +msgstr "0x15 Schreiben erfolglos!" + +#: common/fbus-3810.c:2182 common/mbus-6160.c:759 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - Nachricht zu lang!\n" + +#: common/fbus-3810.c:2208 common/mbus-6160.c:788 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - schreiben:" + +#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368 +#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530 +#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688 +msgid "Write failed!" +msgstr "Schreiben fehlgeschlagen!" + +#: common/fbus-3810.c:2235 +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Ankommender Anruf - Art: %s. %02x, Nummer %s.\n" + +#: common/fbus-3810.c:2262 +msgid "0x27 Write failed!" +msgstr "0x27 Schreiben erfolglos!" + +#: common/fbus-3810.c:2310 +msgid "0x4b Write failed!" +msgstr "0x4b Schreiben erfolglos!" + +#: common/fbus-3810.c:2329 +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Status: %s. Batterie %02x RF %02x.\n" + +#: common/fbus-3810.c:2340 +msgid "0x10 Write failed!" +msgstr "0x10 Schreiben erfolglos!" + +#: common/fbus-3810.c:2344 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Anruf von Telefon beendet (0x10 Nachricht).\n" + +#: common/fbus-3810.c:2358 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Anruf vom gegnerischen Teilnehmer (oder vom Netz) beendet.\n" + +#: common/fbus-3810.c:2372 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Anruf vom Telefon beendet (0x12 Nachricht).\n" + +#: common/fbus-3810.c:2386 +msgid "Incoming call answered from phone.\n" +msgstr "Ankommender Anruf vom Telefon beantwortet.\n" + +#: common/fbus-3810.c:2400 +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "%s Anruf aufgebaut Abgehender Statusbytes %02x %02x.\n" + +#: common/fbus-3810.c:2417 +msgid "0x2c Write failed!" +msgstr "0x2c Schreiben erfolglos!" + +#: common/fbus-3810.c:2504 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Zeitzone:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2571 +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"Ankommende SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Absender: %s(Typ %02x) " +"SMS-Center: %s\n" + +#: common/fbus-3810.c:2573 +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" +" Nachrichtenlänge %d, Nachrichtenspeicher %d Nachrichtennummer %d, " +"PID: %02x DCS: %02x Ünbekannt: %02x\n" + +#: common/fbus-3810.c:2666 +msgid "Mobile phone identification received:\n" +msgstr "Identifikation des Telefons erhalten:\n" + +#: common/fbus-3810.c:2667 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2669 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-3810.c:2671 +#, c-format +msgid " Revision: %s\n" +msgstr " Revision: %s\n" + +#: common/fbus-3810.c:2739 +msgid "SMS Message Center Data:\n" +msgstr "SMS-Center Daten:\n" + +#: common/fbus-3810.c:2740 +msgid "Selected memory: 0x%02x\n" +msgstr "Ausgewählter Speicher 0x%02x\n" + +#: common/fbus-3810.c:2741 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Nachrichten im Telefon: 0x%02x Ungelesen: 0x%02x\n" + +#: common/fbus-3810.c:2743 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Nachrichten auf SIM: 0x%02x Ungelesen: 0x%02x\n" + +#: common/fbus-3810.c:2745 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "Antwort über eigenes Center: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2747 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Transportnachrichten: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2749 +msgid "Messages sent as: 0x%02x\n" +msgstr "Nachrichten geschickt als: 0x%02x\n" + +#: common/fbus-3810.c:2750 +msgid "Message validity: 0x%02x\n" +msgstr "Nachrichtengültigkeit: 0x%02x\n" + +#: common/fbus-3810.c:2751 +msgid "Unknown: 0x%02x\n" +msgstr "Unbekannt: 0x%02x\n" + +#: common/fbus-3810.c:2754 +msgid "UnknownNumber field empty." +msgstr "Unbekanntes leeres Nummernfeld." + +#: common/fbus-3810.c:2756 +msgid "UnknownNumber: " +msgstr "Unbekannte Zahl: " + +#: common/fbus-3810.c:2763 +msgid "Number field empty." +msgstr "Nummernfeld leer." + +#: common/fbus-3810.c:2766 +msgid "Number: " +msgstr "Nummer: " + +#: common/fbus-6110-ringtones.c:242 +msgid "File can not be opened!\n" +msgstr "Datei kann nicht geöffnet werden!\n" + +#: common/fbus-6110.c:770 +msgid "Timeout in IR-mode\n" +msgstr "" + +#: common/fbus-6110.c:802 +msgid "Couldn't open FB61 infrared device" +msgstr "Konnte FB61 Infrarotgerät nicht öffnen" + +#: common/fbus-6110.c:870 +msgid "Starting IR mode...!\n" +msgstr "Starte Infratotmodus...!\n" + +#: common/fbus-6110.c:2325 +msgid "Serial flags dump:\n" +msgstr "Ausgabe der seriellen Zustände:\n" + +#: common/fbus-6110.c:2326 common/mbus-640.c:893 +#, c-format +msgid "DTR is %s.\n" +msgstr "DTR ist %s.\n" + +#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328 +#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894 +msgid "up" +msgstr "aktiv" + +#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328 +#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894 +msgid "down" +msgstr "inaktiv" + +#: common/fbus-6110.c:2327 common/mbus-640.c:894 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS ist %s.\n" + +#: common/fbus-6110.c:2328 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR ist %s.\n" + +#: common/fbus-6110.c:2329 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS ist %s.\n" + +#: common/fbus-6110.c:2364 +msgid "Setting FBUS communication...\n" +msgstr "Starte FBUS Verbindung...\n" + +#: common/fbus-6110.c:2395 +msgid "Couldn't open FB61 device" +msgstr "Konnte FB61 Gerät nicht öffnen" + +#: common/fbus-6110.c:2521 +msgid "Message: Call message, type 0x03:" +msgstr "Nachricht: Anrufnachricht, Typ 0x03:" + +#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554 +#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Reihenfolge des Anrufs: %d\n" + +#: common/fbus-6110.c:2523 common/fbus-6110.c:2621 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Exakte Bedeutung ist noch unklar :-(\n" + +#: common/fbus-6110.c:2536 +msgid "Message: Remote end hang up.\n" +msgstr "Nachricht: Gegner hat aufgelegt.\n" + +#: common/fbus-6110.c:2549 +msgid "Message: Incoming call alert:\n" +msgstr "Nachricht: Ankommender Anruf:\n" + +#: common/fbus-6110.c:2555 common/fbus-6110.c:2835 +msgid " Number: " +msgstr " Nummer: " + +#: common/fbus-6110.c:2563 common/fbus-6110.c:2819 +msgid " Name: " +msgstr " Name: " + +#: common/fbus-6110.c:2584 +msgid "Message: Call answered.\n" +msgstr "Nachricht: Anruf angenommen.\n" + +#: common/fbus-6110.c:2595 +msgid "Message: Call ended by your phone.\n" +msgstr "Nachricht: Anruf aufgelegt von Ihnen.\n" + +#: common/fbus-6110.c:2619 +msgid "Message: Call message, type 0x0a:" +msgstr "Nachricht: Anrufnachricht, Typ 0x0a:" + +#: common/fbus-6110.c:2631 +msgid "Message: Unknown message of type 0x01\n" +msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x01\n" + +#: common/fbus-6110.c:2649 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Nachricht: SMS Nachricht korrekt versendet.\n" + +#: common/fbus-6110.c:2660 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Nachricht: SMS Nachricht senden fehlgeschlagen.\n" + +#: common/fbus-6110.c:2669 +msgid "Message: SMS Message Received\n" +msgstr "Nachricht: SMS Nachricht erhalten\n" + +#: common/fbus-6110.c:2670 common/fbus-6110.c:3997 +#, c-format +msgid " SMS center number: %s\n" +msgstr " SMS Zentralennummer: %s\n" + +#: common/fbus-6110.c:2674 common/fbus-6110.c:3998 +#, c-format +msgid " Remote number: %s\n" +msgstr " Gegnernummer: %s\n" + +#: common/fbus-6110.c:2675 +#, c-format +msgid " Date: %s\n" +msgstr " Datum: %s\n" + +#: common/fbus-6110.c:2676 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:2691 +msgid "Message: SMS Center correctly set.\n" +msgstr "Nachricht: SMS Center richtig gesetzt.\n" + +#: common/fbus-6110.c:2707 +msgid "Message: SMS Center received:\n" +msgstr "Nachricht: SMS Center erhalten:\n" + +#: common/fbus-6110.c:2708 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Die SMS Zentrale heißt %s\n" + +#: common/fbus-6110.c:2709 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " SMS Center Nummer ist %s\n" + +#: common/fbus-6110.c:2711 +msgid " SMS Center message format is " +msgstr " SMS Center Nachrichtenformat ist " + +#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604 +#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335 +msgid "Text" +msgstr "Text" + +#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608 +#: xgnokii/xgnokii.c:1349 +msgid "Paging" +msgstr "Pagerruf" + +#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612 +#: xgnokii/xgnokii.c:1342 +msgid "Fax" +msgstr "Fax" + +#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062 +msgid "Email" +msgstr "Email" + +#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228 +#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108 +msgid "Unknown" +msgstr "Unbekannt" + +#: common/fbus-6110.c:2737 +msgid " SMS Center message validity is " +msgstr " SMS Center Nachrichtengültigkeit ist " + +#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084 +msgid "1 hour" +msgstr "1 Stunde" + +#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088 +msgid "6 hours" +msgstr "6 Stunden" + +#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092 +msgid "24 hours" +msgstr "24 Stunden" + +#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096 +msgid "72 hours" +msgstr "72 Stunden" + +#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656 +#: xgnokii/xgnokii.c:1414 +msgid "1 week" +msgstr "1 Woche" + +#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104 +msgid "Maximum time" +msgstr "Maximale Zeit" + +#: common/fbus-6110.c:2784 +msgid "Message: SMS Center error received:\n" +msgstr "Nachricht: SMS Center fehler erhalten:\n" + +#: common/fbus-6110.c:2785 +msgid " The request for SMS Center failed.\n" +msgstr " Anfrage nach SMS Zentrale fehlgeschlagen.\n" + +#: common/fbus-6110.c:2796 +msgid "Unknown message!\n" +msgstr "Unbekannte Nachricht!\n" + +#: common/fbus-6110.c:2818 +msgid "Message: Phonebook entry received:\n" +msgstr "Nachricht: Telefonbuckeintrag erhalten:\n" + +#: common/fbus-6110.c:2855 +msgid " Date: " +msgstr " Datum: " + +#: common/fbus-6110.c:2857 +msgid " Time: " +msgstr " Zeit: " + +#: common/fbus-6110.c:2870 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Nachricht: Telefonbucheintrag lesen schlug fehl:\n" + +#: common/fbus-6110.c:2878 +msgid " Invalid memory type!\n" +msgstr " Falscher Speicertyp!\n" + +#: common/fbus-6110.c:2888 common/fbus-6110.c:2926 +msgid " Unknown error!\n" +msgstr " Unbekannter Fehler!\n" + +#: common/fbus-6110.c:2899 +msgid "Message: Phonebook written correctly.\n" +msgstr "Nachricht: Telefonbuch korrekt geschrieben.\n" + +#: common/fbus-6110.c:2916 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "Nachricht: Telefonbuch nicht geschrieben - Name ist zu lang.\n" + +#: common/fbus-6110.c:2937 +msgid "Message: Memory status received:\n" +msgstr "Nachricht: Speicherstatus erhalten:\n" + +#: common/fbus-6110.c:2939 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Speicherart: %s\n" + +#: common/fbus-6110.c:2940 +#, c-format +msgid " Used: %d\n" +msgstr " Benutzt: %d\n" + +#: common/fbus-6110.c:2941 +#, c-format +msgid " Free: %d\n" +msgstr " Frei: %d\n" + +#: common/fbus-6110.c:2956 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" +"Nachricht: Speicherstatusfehler, Telefon ist vermutlich ausgeschaltet.\n" + +#: common/fbus-6110.c:2963 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" +"Nachricht: Speicherstatusfehler, Speicherart wird von Model nicht " +"unterstützt.\n" + +#: common/fbus-6110.c:2970 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "" + +#: common/fbus-6110.c:2977 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" +"Nachricht: Unbekannter Speicherstatusfehler, Untertyp (Messagebuffer[4] = " +"%02x\n" + +#: common/fbus-6110.c:2994 +msgid "Message: Caller group logo etc.\n" +msgstr "Nachricht: Gruppenlogo etc.\n" + +#: common/fbus-6110.c:2995 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Gruppenname: %s\n" + +#: common/fbus-6110.c:3015 +msgid "Message: Caller group data received but not requested!\n" +msgstr "Nachricht: Gruppendaten erhalten aber nicht angefordert!\n" + +#: common/fbus-6110.c:3025 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "Nachricht: Fehler beim Versuch Gruppendaten zu bekommen.\n" + +#: common/fbus-6110.c:3033 +msgid "Message: Caller group data set correctly.\n" +msgstr "Nachricht: Gruppendaten richtig gesetzt.\n" + +#: common/fbus-6110.c:3041 +msgid "Message: Error attempting to set caller group data\n" +msgstr "Nachricht: Fehler beim Gruppendaten einstellen.\n" + +#: common/fbus-6110.c:3052 +msgid "Message: Speed dial entry received:\n" +msgstr "Nachricht: Kurzwahl erhalten:\n" + +#: common/fbus-6110.c:3053 +#, c-format +msgid " Location: %d\n" +msgstr " Ort: %d\n" + +#: common/fbus-6110.c:3054 +#, c-format +msgid " MemoryType: %s\n" +msgstr " Speichertyp: %s\n" + +#: common/fbus-6110.c:3055 +#, c-format +msgid " Number: %d\n" +msgstr " Nummer: %d\n" + +#: common/fbus-6110.c:3065 +msgid "Message: Speed dial entry error\n" +msgstr "Nachricht: Kurzwahleintrag Fehler\n" + +#: common/fbus-6110.c:3075 +msgid "Message: Speed dial entry set.\n" +msgstr "Nachricht: Kurzwahleintrag gesetzt.\n" + +#: common/fbus-6110.c:3085 +msgid "Message: Speed dial entry setting error.\n" +msgstr "Nachricht: Fehler beim Kurzwahleintrag setzen.\n" + +#: common/fbus-6110.c:3095 +msgid "Message: Unknown message of type 0x03\n" +msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x03\n" + +#: common/fbus-6110.c:3111 +msgid "Message: Phone status received:\n" +msgstr "Nachricht: Telefonstatus erhalten:\n" + +#: common/fbus-6110.c:3112 +msgid " Mode: " +msgstr " Modus: " + +#: common/fbus-6110.c:3118 +msgid "registered within the network\n" +msgstr "am Netzwerk angemeldet\n" + +#: common/fbus-6110.c:3127 +msgid "call in progress\n" +msgstr "Anruf in Bearbeitung\n" + +#: common/fbus-6110.c:3133 +msgid "waiting for security code\n" +msgstr "warte auf Sicherheitscode\n" + +#: common/fbus-6110.c:3139 +msgid "powered off\n" +msgstr "ausgeschaltet\n" + +#: common/fbus-6110.c:3145 common/fbus-6110.c:3167 +msgid "unknown\n" +msgstr "unbekannt\n" + +#: common/fbus-6110.c:3149 +msgid " Power source: " +msgstr " Stromquelle: " + +#: common/fbus-6110.c:3155 +msgid "AC/DC\n" +msgstr "Gleichspannung\n" + +#: common/fbus-6110.c:3161 +msgid "battery\n" +msgstr "Batterie\n" + +#: common/fbus-6110.c:3171 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Batteriezustand: %d\n" + +#: common/fbus-6110.c:3172 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Signalstärke: %d\n" + +#: common/fbus-6110.c:3184 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x04\n" + +#: common/fbus-6110.c:3257 +msgid "Message: Startup Logo received.\n" +msgstr "Nachricht: Einschaltlogo erhalten.\n" + +#: common/fbus-6110.c:3274 +#, c-format +msgid "Startup Text: %s\n" +msgstr "Einschalttext: %s\n" + +#: common/fbus-6110.c:3286 +msgid "Message: Startup logo received but not requested!\n" +msgstr "" + +#: common/fbus-6110.c:3295 +msgid "Message: Startup logo correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:3329 +msgid "Message: Operator logo correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:3338 +msgid "Message: Error setting operator logo!\n" +msgstr "" + +#: common/fbus-6110.c:3348 +msgid "Message: Operator Logo received.\n" +msgstr "" + +#: common/fbus-6110.c:3365 +msgid "Message: Operator logo received but not requested!\n" +msgstr "" + +#: common/fbus-6110.c:3374 +msgid "Message: Error getting operator logo!\n" +msgstr "" + +#: common/fbus-6110.c:3392 +msgid "Message: Security Code status received: " +msgstr "" + +#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507 +msgid "waiting for Security Code.\n" +msgstr "" + +#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512 +msgid "waiting for PIN.\n" +msgstr "" + +#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517 +msgid "waiting for PIN2.\n" +msgstr "" + +#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522 +msgid "waiting for PUK.\n" +msgstr "" + +#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527 +msgid "waiting for PUK2.\n" +msgstr "" + +#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532 +msgid "nothing to enter.\n" +msgstr "" + +#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537 +msgid "Unknown!\n" +msgstr "" + +#: common/fbus-6110.c:3440 +msgid "Message: Security code accepted.\n" +msgstr "" + +#: common/fbus-6110.c:3450 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "" + +#: common/fbus-6110.c:3477 +msgid "Message: Network informations:\n" +msgstr "Nachricht: Netzwerkinformationen\n" + +#: common/fbus-6110.c:3479 +#, c-format +msgid " CellID: %s\n" +msgstr " Zellnummer: %s\n" + +#: common/fbus-6110.c:3480 +#, c-format +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: common/fbus-6110.c:3481 +#, c-format +msgid " Network code: %s\n" +msgstr " Netzwerknummer: %s\n" + +#: common/fbus-6110.c:3482 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Netzwerkname: %s (%s)\n" + +#: common/fbus-6110.c:3485 +msgid " Status: " +msgstr " Status: " + +#: common/fbus-6110.c:3488 +msgid "home network selected" +msgstr "Heimnetz ausgewählt:" + +#: common/fbus-6110.c:3489 +msgid "roaming network" +msgstr "" + +#: common/fbus-6110.c:3490 +msgid "requesting network" +msgstr "" + +#: common/fbus-6110.c:3491 +msgid "not registered in the network" +msgstr "" + +#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199 +#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219 +msgid "unknown" +msgstr "unbekannt" + +#: common/fbus-6110.c:3497 +#, c-format +msgid " Network selection: %s\n" +msgstr " Netzwerkauswahl: %s\n" + +#: common/fbus-6110.c:3497 +msgid "manual" +msgstr "von Hand" + +#: common/fbus-6110.c:3497 +msgid "automatic" +msgstr "automatisch" + +#: common/fbus-6110.c:3507 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "" + +#: common/fbus-6110.c:3545 +msgid "Unknown message of type 0x0d.\n" +msgstr "" + +#: common/fbus-6110.c:3564 +msgid "Message: Date and time set correctly\n" +msgstr "Nachricht: Datum und Zeit richtig gesetzt\n" + +#: common/fbus-6110.c:3574 common/fbus-6110.c:3620 +msgid "Message: Date and time set error\n" +msgstr "" + +#: common/fbus-6110.c:3594 +msgid "Message: Date and time\n" +msgstr "Nachricht: Datum und Zeit\n" + +#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Zeit: %02d:x02d:x02d\n" + +#: common/fbus-6110.c:3596 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Datum: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:3610 +msgid "Message: Alarm set correctly\n" +msgstr "Nachricht: Alarm erfolgreich gesetzt\n" + +#: common/fbus-6110.c:3632 +msgid "Message: Alarm\n" +msgstr "Nachricht: Alarm\n" + +#: common/fbus-6110.c:3633 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Alarm: %02d:%02d\n" + +#: common/fbus-6110.c:3634 +#, c-format +msgid " Alarm is %s\n" +msgstr " Der Alarm ist %s\n" + +#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467 +#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470 +#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473 +msgid "on" +msgstr "an" + +#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467 +#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470 +#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473 +msgid "off" +msgstr "out" + +#: common/fbus-6110.c:3650 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x11\n" + +#: common/fbus-6110.c:3673 +msgid "Message: Calendar note write succesfull!\n" +msgstr "" + +#: common/fbus-6110.c:3683 common/fbus-6110.c:3693 +msgid "Message: Calendar note write failed!\n" +msgstr "" + +#: common/fbus-6110.c:3702 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "" + +#: common/fbus-6110.c:3742 +msgid "Message: Calendar note received.\n" +msgstr "Nachricht: Kalendarbenachrichtingung erhalten.\n" + +#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Datum: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Alarmdatum: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Alarmzeit: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3764 +#, c-format +msgid " Type: %d\n" +msgstr " Typ: %d\n" + +#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877 +#, c-format +msgid " Text: %s\n" +msgstr " Text: %s\n" + +#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefon: %s\n" + +#: common/fbus-6110.c:3778 +msgid "Message: Calendar note not available\n" +msgstr "" + +#: common/fbus-6110.c:3788 +msgid "Message: Calendar note error\n" +msgstr "" + +#: common/fbus-6110.c:3810 +msgid "Message: Calendar note deleted\n" +msgstr "" + +#: common/fbus-6110.c:3821 +msgid "Message: Calendar note can't be deleted\n" +msgstr "" + +#: common/fbus-6110.c:3831 +msgid "Message: Calendar note deleting error\n" +msgstr "" + +#: common/fbus-6110.c:3847 +msgid "Message: Calendar Alarm active\n" +msgstr "" + +#: common/fbus-6110.c:3848 +#, c-format +msgid " Item number: %d\n" +msgstr "" + +#: common/fbus-6110.c:3856 +msgid "Message: Unknown message of type 0x13\n" +msgstr "Nachricht: Unbekannte Nachricht vom Typ 0x13\n" + +#: common/fbus-6110.c:3919 +msgid "Concatenated message!!!\n" +msgstr "Zusammengefügte Nachricht!!!\n" + +#: common/fbus-6110.c:3940 +#, c-format +msgid "Number: %d\n" +msgstr "Nummer: %d\n" + +#: common/fbus-6110.c:3945 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "Nachtricht: Ausgehende Nachricht (zum Mobiltelefon)\n" + +#: common/fbus-6110.c:3948 +msgid "Sent\n" +msgstr "Gesendet\n" + +#: common/fbus-6110.c:3950 +msgid "Not sent\n" +msgstr "Nicht gesendet\n" + +#: common/fbus-6110.c:3954 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "Nachricht: SMS erhalten\n" + +#: common/fbus-6110.c:3957 +msgid "Delivery Report\n" +msgstr "Auslieferreport\n" + +#: common/fbus-6110.c:3959 +msgid "Unknown type\n" +msgstr "Unbekannter Typ\n" + +#: common/fbus-6110.c:3962 +msgid "Read\n" +msgstr "Gelesen\n" + +#: common/fbus-6110.c:3964 +msgid "Not read\n" +msgstr "Nicht gelesen\n" + +#: common/fbus-6110.c:3966 +msgid " Date: %s " +msgstr " Datum: %s " + +#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241 +#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281 +#, c-format +msgid "%02d00" +msgstr "%02d00" + +#: common/fbus-6110.c:3981 +msgid " SMSC response date: %s " +msgstr " SMSC Antwortdatum: %s " + +#: common/fbus-6110.c:4074 +msgid "Delivered" +msgstr "Versandt" + +#: common/fbus-6110.c:4079 +msgid "SM received by the SME" +msgstr "SM von SME erhalten" + +#: common/fbus-6110.c:4082 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: common/fbus-6110.c:4085 +msgid "SM replaced by the SC" +msgstr "SM durch SC ersetzt" + +#: common/fbus-6110.c:4093 +msgid "Failed" +msgstr "Fehlgeschlagen" + +#: common/fbus-6110.c:4100 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "" + +#: common/fbus-6110.c:4105 common/fbus-6110.c:4198 +msgid "Congestion" +msgstr "Stau" + +#: common/fbus-6110.c:4109 common/fbus-6110.c:4202 +msgid "SME busy" +msgstr "" + +#: common/fbus-6110.c:4113 common/fbus-6110.c:4206 +msgid "No response from SME" +msgstr "" + +#: common/fbus-6110.c:4117 common/fbus-6110.c:4210 +msgid "Service rejected" +msgstr "Service abgelehnt" + +#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214 +msgid "Quality of service not aviable" +msgstr "QoS nicht verfügbar" + +#: common/fbus-6110.c:4125 common/fbus-6110.c:4218 +msgid "Error in SME" +msgstr "Fehler in SME" + +#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222 +#: common/fbus-6110.c:4232 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: common/fbus-6110.c:4136 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "" + +#: common/fbus-6110.c:4141 +msgid "Remote procedure error" +msgstr "" + +#: common/fbus-6110.c:4145 +msgid "Incompatibile destination" +msgstr "Inkompatibles Ziel" + +#: common/fbus-6110.c:4149 +msgid "Connection rejected by SME" +msgstr "Verbindung durch SME abgelehnt" + +#: common/fbus-6110.c:4153 +msgid "Not obtainable" +msgstr "Nicht verfügbar" + +#: common/fbus-6110.c:4161 +msgid "No internetworking available" +msgstr "Keine Zwischenverbindung verfügbar" + +#: common/fbus-6110.c:4165 +msgid "SM Validity Period Expired" +msgstr "" + +#: common/fbus-6110.c:4169 +msgid "SM deleted by originating SME" +msgstr "" + +#: common/fbus-6110.c:4173 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: common/fbus-6110.c:4177 +msgid "SM does not exist" +msgstr "SM existiert nicht" + +#: common/fbus-6110.c:4190 +msgid "Pending" +msgstr "Warte" + +#: common/fbus-6110.c:4194 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "" + +#: common/fbus-6110.c:4260 +msgid "Message: SMS reading failed.\n" +msgstr "Nachricht: SMS lesen fehlgeschlagen.\n" + +#: common/fbus-6110.c:4268 +msgid " Invalid location!\n" +msgstr " Ungültiger Ort!\n" + +#: common/fbus-6110.c:4278 +msgid " Empty SMS location.\n" +msgstr " Leerer SMS Platz.\n" + +#: common/fbus-6110.c:4291 +msgid "Message: SMS deleted successfully.\n" +msgstr "Nachricht: SMS erfolgreich gelöscht.\n" + +#: common/fbus-6110.c:4301 +msgid "Message: SMS Status Received\n" +msgstr "Nachricht: SMS Status erhalten\n" + +#: common/fbus-6110.c:4302 +#, c-format +msgid " The number of messages: %d\n" +msgstr " Anzahl der Nachrichten: %d\n" + +#: common/fbus-6110.c:4303 +#, c-format +msgid " Unread messages: %d\n" +msgstr " Ungelesene Nachrichten: %d\n" + +#: common/fbus-6110.c:4315 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "" +"Nachricht: SMS Status fehler, möglichweise nicht über PIN authorisiert\n" + +#: common/fbus-6110.c:4346 +msgid "Message: Netmonitor correctly set.\n" +msgstr "Nachricht: Netzmonitor richtig gesetzt.\n" + +#: common/fbus-6110.c:4356 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "Nachricht: Netzmonitor Menü %d erhalten:\n" + +#: common/fbus-6110.c:4372 +msgid "Unknown message of type 0x40.\n" +msgstr "Unbekannte Nachricht vom Typ 0x40.\n" + +#: common/fbus-6110.c:4394 +msgid "Message: Mobile phone identification received:\n" +msgstr "Nachricht: Mobiltelefonidentifikation erhalten:\n" + +#: common/fbus-6110.c:4395 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-6110.c:4397 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-6110.c:4399 +#, c-format +msgid " Production Code: %s\n" +msgstr " Produktionszahl: %s\n" + +#: common/fbus-6110.c:4401 +#, c-format +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: common/fbus-6110.c:4403 +#, c-format +msgid " Firmware: %s\n" +msgstr " Firmware: %s\n" + +#: common/fbus-6110.c:4409 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Magische Zahlen: %02x %02x %02x %02x\n" + +#: common/fbus-6110.c:4429 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "[Erhielt Bestätigung vom Typ %02x, Seq: %2x]\n" + +#: common/fbus-6110.c:4447 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 1.\n" + +#: common/fbus-6110.c:4471 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "Nachricht: Das Telefon wurde eingeschalten - Stufe 2.\n" + +#: common/fbus-6110.c:4487 +msgid "Message: Unknown message.\n" +msgstr "Nachricht: Unbekannte Nachricht.\n" + +#: common/fbus-6110.c:4564 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "" + +#: common/fbus-6110.c:4565 +msgid "Please report it ...\n" +msgstr "Bitte melden sie das ...\n" + +#: common/fbus-6110.c:4624 +msgid "Bad checksum!\n" +msgstr "Falsche Prüfsumme!\n" + +#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648 +msgid "Phone" +msgstr "Telefon" + +#: common/fbus-6110.c:4684 +msgid "PC" +msgstr "PC" + +#: common/fbus-6110.c:4702 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Nachricht Ziel: %s\n" + +#: common/fbus-6110.c:4703 +#, c-format +msgid "Msg Source: %s\n" +msgstr "Nachrichtquelle: %s\n" + +#: common/fbus-6110.c:4705 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "Nachrichtart: %02x\n" + +#: common/fbus-6110.c:4707 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "Nachricht unbekannt: %02x\n" + +#: common/fbus-6110.c:4708 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" +"Nachrichtlänge: %02x\n" +"Telefon: " + +#: common/fbus-6110.c:4779 +msgid "PC: " +msgstr "PC: " + +#: common/fbus-6110.c:4853 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "[Sende Bestätigung vom Typ %02x, Seq: %x]\n" + +#: common/mbus-6160.c:719 +msgid "Couldn't open MB61 device: " +msgstr "Konnte MB61-Gerät nicht öffnen: " + +#: common/mbus-640.c:786 +msgid "Phone: " +msgstr "Telefon: " + +#: common/mbus-640.c:816 common/mbus-640.c:916 +msgid "PC : " +msgstr "PC : " + +#: common/mbus-640.c:826 common/mbus-640.c:929 +msgid "Write error!\n" +msgstr "Schreibfehler!\n" + +#: common/mbus-640.c:853 +msgid "Setting MBUS communication...\n" +msgstr "Starte MBUS Verbindung...\n" + +#: common/rlp-common.c:706 +msgid "Unknown!!! " +msgstr "Unbekannt!!! " + +#: common/rlp-common.c:771 +msgid "BAD" +msgstr "FALSCH" + +#: common/rlp-common.c:893 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "" + +#: common/rlp-common.c:1006 +msgid "Send_TXU()\n" +msgstr "" + +#: common/rlp-common.c:1007 +#, c-format +msgid "XID_R_State=%d\n" +msgstr "" + +#: common/rlp-common.c:1371 +msgid "RLP state 0.\n" +msgstr "" + +#: common/rlp-common.c:1408 +msgid "RLP state 1.\n" +msgstr "" + +#: common/rlp-common.c:1473 +msgid "RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1507 +msgid "UA received in RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1564 +msgid "RLP state 3.\n" +msgstr "" + +#: common/rlp-common.c:1622 +msgid "RLP state 4.\n" +msgstr "" + +#: common/rlp-common.c:1732 +msgid "RLP state 5.\n" +msgstr "" + +#: common/rlp-common.c:1791 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "" + +#: common/rlp-common.c:1821 +msgid "RLP state 7.\n" +msgstr "" + +#: common/rlp-common.c:1863 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "" + +#: gnokii/gnokii.c:207 +#, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" + +#: gnokii/gnokii.c:221 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destionation logofile [network " +"code]\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group " +"number]\n" +" gnokii --sendringtone destionation rtttlfile\n" +" gnokii --reset [soft|hard]\n" +msgstr "" + +#: gnokii/gnokii.c:255 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" + +#: gnokii/gnokii.c:260 +msgid "" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output " +"of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken " +"from\n" +" phone memory from address " +"[message_center_index].\n" +" If this argument is ommited SMSC number is " +"taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +" [--long n] - send no more then n characters,\n" +" default is 160\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number index from calendar.\n" +" [-v] - output in vCalendar 1.0 format\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --sendlogo send the logofile to destination as operator\n" +" or CLI logo\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --sendringtone send the rtttlfile to destination as ringtone\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +msgstr "" + +#: gnokii/gnokii.c:344 +msgid "" +" --entersecuritycode asks for the code and sends it to the phone\n" +"\n" +" --getsecuritycodestatus show if a security code is needed\n" +"\n" +msgstr "" + +#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282 +#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "GSM/FBUS Init fehlgeschlagen (Unbekanntes Model?). Beende.\n" + +#: gnokii/gnokii.c:382 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende.\n" + +#: gnokii/gnokii.c:636 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "" + +#: gnokii/gnokii.c:815 +#, c-format +msgid "Unknown option: %d\n" +msgstr "" + +#: gnokii/gnokii.c:825 +msgid "Wrong number of arguments\n" +msgstr "" + +#: gnokii/gnokii.c:897 gnokii/gnokii.c:955 +msgid "Input too long!\n" +msgstr "Eingabe zu lang!\n" + +#: gnokii/gnokii.c:950 +msgid "Couldn't read from stdin!\n" +msgstr "Konnte nicht von stdin lesen!\n" + +#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692 +msgid "Send succeeded!\n" +msgstr "Senden erfolgreich!\n" + +#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "SMS senden fehlgeschlagen (Fehler=%d)\n" + +#: gnokii/gnokii.c:1042 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "" + +#: gnokii/gnokii.c:1044 +msgid "Messages sent as " +msgstr "Nachricht gesendet als " + +#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621 +msgid "ERMES" +msgstr "ERMES" + +#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625 +msgid "X.400" +msgstr "X.400" + +#: gnokii/gnokii.c:1079 +msgid "Message validity is " +msgstr "Nachrichtgültigkeit ist " + +#: gnokii/gnokii.c:1115 +msgid "SMS center can not be found :-(\n" +msgstr "SMS Center konnte nicht gefunden werden :-(\n" + +#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225 +#: gnokii/gnokii.c:2392 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Unbekannter Speichertyp %s!\n" + +#: gnokii/gnokii.c:1214 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Ausgehende Nachricht " + +#: gnokii/gnokii.c:1217 +msgid "(sent)\n" +msgstr "(geschickt)\n" + +#: gnokii/gnokii.c:1219 +msgid "(not sent)\n" +msgstr "(nicht geschickt)\n" + +#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "" +"Text: %s\n" +"\n" + +#: gnokii/gnokii.c:1227 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Auslieferreport " + +#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269 +msgid "(read)\n" +msgstr "(gelesen)\n" + +#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271 +msgid "(not read)\n" +msgstr "(nicht gelesen)\n" + +#: gnokii/gnokii.c:1233 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Sendedatum/-zeit: %d-%d-%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279 +#, c-format +msgid "+%02d00" +msgstr "+%02d00" + +#: gnokii/gnokii.c:1246 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "" + +#: gnokii/gnokii.c:1259 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "" + +#: gnokii/gnokii.c:1266 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Eingehende Nachricht " + +#: gnokii/gnokii.c:1273 +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Datum/Zeit: %d-%d-%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1285 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "Absender: %s SMS Center: %s\n" + +#: gnokii/gnokii.c:1291 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Verbunden (%d/%d):\n" + +#: gnokii/gnokii.c:1297 +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" +"Text:\n" +"%s\n" +"\n" + +#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483 +#: gnokii/gnokii.c:2252 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "Funktion nicht implementiert für Modell %s!\n" + +#: gnokii/gnokii.c:1312 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "" + +#: gnokii/gnokii.c:1318 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "SMS Ort %s %d leer.\n" + +#: gnokii/gnokii.c:1324 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"GetSMS %s %d fehlgeschlagen!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1414 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "SMS %s %d gelöscht\n" + +#: gnokii/gnokii.c:1421 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"SMS löschen %s %d fehlgeschlagen!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1472 +msgid "Enter your code: " +msgstr "" + +#: gnokii/gnokii.c:1479 +msgid "Error: invalid code.\n" +msgstr "" + +#: gnokii/gnokii.c:1481 +msgid "Code ok.\n" +msgstr "" + +#: gnokii/gnokii.c:1485 +msgid "Other error.\n" +msgstr "" + +#: gnokii/gnokii.c:1501 +msgid "Security code status: " +msgstr "" + +#: gnokii/gnokii.c:1603 +msgid "Sending operator logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1607 +msgid "Sending caller line identification logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1609 +msgid "You should specify what kind of logo to send!\n" +msgstr "" + +#: gnokii/gnokii.c:1628 +msgid "Operator code: %s\n" +msgstr "Netzwerkcode: %s\n" + +#: gnokii/gnokii.c:1706 +msgid "Getting Logo.\n" +msgstr "Hole Logo.\n" + +#: gnokii/gnokii.c:1752 +msgid "Logo file error.\n" +msgstr "Logodatei Fehler.\n" + +#: gnokii/gnokii.c:1758 +msgid "Sending Logo.\n" +msgstr "Schicke Logo.\n" + +#: gnokii/gnokii.c:1800 +msgid "BEGIN:VCALENDAR\n" +msgstr "" + +#: gnokii/gnokii.c:1801 +msgid "VERSION:1.0\n" +msgstr "" + +#: gnokii/gnokii.c:1802 +msgid "BEGIN:VEVENT\n" +msgstr "" + +#: gnokii/gnokii.c:1803 +msgid "CATEGORIES:" +msgstr "" + +#: gnokii/gnokii.c:1806 +msgid "MISCELLANEOUS\n" +msgstr "" + +#: gnokii/gnokii.c:1809 +msgid "PHONE CALL\n" +msgstr "" + +#: gnokii/gnokii.c:1812 +msgid "MEETING\n" +msgstr "" + +#: gnokii/gnokii.c:1815 +msgid "SPECIAL OCCASION\n" +msgstr "" + +#: gnokii/gnokii.c:1818 +msgid "UNKNOWN\n" +msgstr "" + +#: gnokii/gnokii.c:1821 +#, c-format +msgid "SUMMARY:%s\n" +msgstr "" + +#: gnokii/gnokii.c:1822 +#, c-format +msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n" +msgstr "" + +#: gnokii/gnokii.c:1826 +#, c-format +msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n" +msgstr "" + +#: gnokii/gnokii.c:1830 +msgid "END:VEVENT\n" +msgstr "" + +#: gnokii/gnokii.c:1831 +msgid "END:VCALENDAR\n" +msgstr "" + +#: gnokii/gnokii.c:1834 +msgid " Type of the note: " +msgstr " Art der Notiz: " + +#: gnokii/gnokii.c:1839 +msgid "Reminder\n" +msgstr "Erinnerung\n" + +#: gnokii/gnokii.c:1843 +msgid "Call\n" +msgstr "Anruf\n" + +#: gnokii/gnokii.c:1847 +msgid "Meeting\n" +msgstr "Treffen\n" + +#: gnokii/gnokii.c:1851 +msgid "Birthday\n" +msgstr "Geburtstag\n" + +#: gnokii/gnokii.c:1855 +msgid "Unknown\n" +msgstr "Unbekannt\n" + +#: gnokii/gnokii.c:1884 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403 +msgid "Succesfully written!\n" +msgstr "Erfolgreich geschrieben!\n" + +#: gnokii/gnokii.c:1943 +msgid " Calendar note deleted.\n" +msgstr " Kalendereintrag gelöscht.\n" + +#: gnokii/gnokii.c:1946 +msgid "The calendar note can not be deleted\n" +msgstr "Der Kalendereintrag kann nicht gelöscht werden\n" + +#: gnokii/gnokii.c:2015 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Datum: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:2016 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Zeit: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2052 +#, c-format +msgid "Alarm: %s\n" +msgstr "Alarm: %s\n" + +#: gnokii/gnokii.c:2053 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Zeit: %02d:%02d\n" + +#: gnokii/gnokii.c:2094 +msgid "Entering monitor mode...\n" +msgstr "Betrete Monitormodus...\n" + +#: gnokii/gnokii.c:2095 +msgid "Initialising GSM interface...\n" +msgstr "Initialisiere GSM-Schnittstelle...\n" + +#: gnokii/gnokii.c:2106 +#, c-format +msgid "RFLevel: %d\n" +msgstr "Empfangsstärke: %d\n" + +#: gnokii/gnokii.c:2109 +#, c-format +msgid "Battery: %d\n" +msgstr "Batterie: %d\n" + +#: gnokii/gnokii.c:2112 +#, c-format +msgid "Power Source: %s\n" +msgstr "Stromquelle: %s\n" + +#: gnokii/gnokii.c:2112 +msgid "AC/DC" +msgstr "Gleichspannung" + +#: gnokii/gnokii.c:2112 +msgid "battery" +msgstr "Batterie" + +#: gnokii/gnokii.c:2115 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2118 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefon: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2121 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2124 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2127 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2130 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2133 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2136 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2139 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: Benutzt %d, Frei %d\n" + +#: gnokii/gnokii.c:2142 +#, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "SMS Nachrichten: Ungelesen %d, Anzahl %d\n" + +#: gnokii/gnokii.c:2145 +#, c-format +msgid "Incoming call: %s\n" +msgstr "Ankommender Anruf: %s\n" + +#: gnokii/gnokii.c:2148 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "Netzwerk: %s (%s), LAC: %s, Zellnummer: %s\n" + +#: gnokii/gnokii.c:2153 +msgid "Leaving monitor mode...\n" +msgstr "Verlasse Monitormodus...\n" + +#: gnokii/gnokii.c:2257 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "Speichertyp %s nicht unterstützt!\n" + +#: gnokii/gnokii.c:2262 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Falscher Ort oder anderer Fehler!(%d)\n" + +#: gnokii/gnokii.c:2329 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Formatproblem in Zeile %d [%s]\n" + +#: gnokii/gnokii.c:2343 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Schreiben erfolgreich: Speicherart: %s, Ort: %d, Name: %s, Nummer: %s\n" + +#: gnokii/gnokii.c:2345 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Schreiben fehlgeschlagen(%d): Speichertyp: %s, Ort: %d, Name: %s, Nummer: " +"%s\n" + +#: gnokii/gnokii.c:2365 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103 +#, c-format +msgid "error opening %s, using default config\n" +msgstr "Fehler beim Öffnen von %s, benutze Standardkonfiguration\n" + +#: gnokii/gnokii.c:2466 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Anruf in Arbeit: %s\n" + +#: gnokii/gnokii.c:2467 +#, c-format +msgid "Unknown: %s\n" +msgstr "Unbekannt: %s\n" + +#: gnokii/gnokii.c:2468 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "Ungelesene SMS: %s\n" + +#: gnokii/gnokii.c:2469 +#, c-format +msgid "Voice call: %s\n" +msgstr "Sprachanruf: %s\n" + +#: gnokii/gnokii.c:2470 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Aktiver Faxanruf: %s\n" + +#: gnokii/gnokii.c:2471 +#, c-format +msgid "Data call active: %s\n" +msgstr "Aktiver Datenanruf: %s\n" + +#: gnokii/gnokii.c:2472 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Tastatursperre: %s\n" + +#: gnokii/gnokii.c:2473 +#, c-format +msgid "SMS storage full: %s\n" +msgstr "SMS Speicher voll: %s\n" + +#: gnokii/gnokii.c:2525 +#, c-format +msgid "IMEI: %s\n" +msgstr "IMEI: %s\n" + +#: gnokii/gnokii.c:2526 +#, c-format +msgid "Model: %s\n" +msgstr "Model: %s\n" + +#: gnokii/gnokii.c:2527 +#, c-format +msgid "Revision: %s\n" +msgstr "Revision: %s\n" + +#: gnokii/gnokii.c:2559 +msgid "What kind of reset do you want??\n" +msgstr "Welche Art Reset wünschen sie??\n" + +#: gnokiid/gnokiid.c:58 +#, c-format +msgid "gnokiid Version %s" +msgstr "gnokiid Version %s" + +#: gnokiid/gnokiid.c:70 +msgid " usage: gnokiid {--help|--version}" +msgstr " Benutzung: gnokiid {--help|--version}" + +#: gnokiid/virtmodem.c:85 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:93 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:99 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:104 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:212 +msgid "Couldn't open pty!\n" +msgstr "Konnte pty nicht öffnen!\n" + +#: gnokiid/virtmodem.c:220 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "gnokiid sollte als setuid root installiert werden!\n" + +#: gnokiid/virtmodem.c:224 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "Unter-pty ist %s, benutzte %s um /dev/gnokii zu erstellen.\n" + +#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM_LinkOK wahr nie aktiv. Beende. \n" + +#: xgnokii/xgnokii.c:175 +msgid "/help/index.html" +msgstr "/help/index.html" + +#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973 +msgid "Familly" +msgstr "Familie" + +#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982 +msgid "VIP" +msgstr "VIP" + +#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991 +msgid "Friends" +msgstr "Freunde" + +#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000 +msgid "Colleagues" +msgstr "Kollegen" + +#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009 +msgid "Other" +msgstr "Andere" + +#: xgnokii/xgnokii.c:244 +msgid "No group" +msgstr "Keine Gruppe" + +#: xgnokii/xgnokii.c:383 +msgid "Short Message received" +msgstr "Kurznachricht erhalten" + +#: xgnokii/xgnokii.c:398 +msgid "Call in progress" +msgstr "Anruf in Bearbeitung" + +#: xgnokii/xgnokii.c:411 +msgid "Hide" +msgstr "Verstecken" + +#: xgnokii/xgnokii.c:539 +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "Ankommender Anruf von: %s\n" +"Zeit: %s" + +#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571 +#, c-format +msgid "Set %d" +msgstr "Setze %d" + +#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356 +msgid "E-Mail" +msgstr "E-Mail" + +#: xgnokii/xgnokii.c:629 +msgid "Voice" +msgstr "Sprache" + +#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386 +msgid "1 h" +msgstr "1 Stunde" + +#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393 +msgid "6 h" +msgstr "6 Stunden" + +#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400 +msgid "24 h" +msgstr "24 Stunden" + +#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407 +msgid "72 h" +msgstr "72 Stunden" + +#: xgnokii/xgnokii.c:660 +msgid "Max. time" +msgstr "Maximale Zeit" + +#: xgnokii/xgnokii.c:962 +msgid "Error saving SMS centers!" +msgstr "" + +#: xgnokii/xgnokii.c:1020 +msgid "Error writing configuration file!" +msgstr "" + +#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572 +msgid "Contacts" +msgstr "Kontakte" + +#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760 +msgid "SMS" +msgstr "SMS" + +#: xgnokii/xgnokii.c:1044 +msgid "DTMF" +msgstr "Tonwahl" + +#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487 +msgid "Speed Dial" +msgstr "Kurzwahl" + +#: xgnokii/xgnokii.c:1057 +msgid "Keyboard" +msgstr "Tastatur" + +#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271 +msgid "Net Monitor" +msgstr "Netzmonitor" + +#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518 +msgid "Options" +msgstr "Optionen" + +#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042 +msgid "Help" +msgstr "Hilfe" + +#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103 +msgid "About" +msgstr "Über" + +#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280 +#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914 +#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428 +#: xgnokii/xgnokii_sms.c:470 +msgid "Ok" +msgstr "Ok" + +#: xgnokii/xgnokii.c:1120 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Janík ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" + +#: xgnokii/xgnokii.c:1274 +msgid "Edit SMS Setting" +msgstr "Bearbeite SMS Einstellungen" + +#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148 +#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788 +#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145 +#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270 +#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435 +#: xgnokii/xgnokii_sms.c:478 +msgid "Cancel" +msgstr "Abrechen" + +#: xgnokii/xgnokii.c:1301 +msgid "Set name:" +msgstr "Schreibe Namen:" + +#: xgnokii/xgnokii.c:1314 +msgid "Center:" +msgstr "Center:" + +#: xgnokii/xgnokii.c:1327 +msgid "Sending Format:" +msgstr "Sendeformat:" + +#: xgnokii/xgnokii.c:1371 +msgid "Validity Period:" +msgstr "Gültigkeitsperiode:" + +#: xgnokii/xgnokii.c:1379 +msgid "Max. Time" +msgstr "Maximale Zeit" + +#: xgnokii/xgnokii.c:1515 +msgid "Set name" +msgstr "Schreibe Namen:" + +#: xgnokii/xgnokii.c:1515 +msgid "Center number" +msgstr "Centernummer" + +#: xgnokii/xgnokii.c:1515 +msgid "Format" +msgstr "Format" + +#: xgnokii/xgnokii.c:1515 +msgid "Validity" +msgstr "Gültigkeit" + +#: xgnokii/xgnokii.c:1523 +msgid "Apply" +msgstr "Anwenden" + +#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510 +#: xgnokii/xgnokii_dtmf.c:158 +msgid "Save" +msgstr "Sichern" + +#: xgnokii/xgnokii.c:1539 +msgid "Close" +msgstr "Schließen" + +#: xgnokii/xgnokii.c:1554 +msgid "Phone and connection type" +msgstr "Telefon und Verbindungsart" + +#: xgnokii/xgnokii.c:1561 +msgid "Connection" +msgstr "Verbindung" + +#: xgnokii/xgnokii.c:1568 +msgid "Port:" +msgstr "Anschluß:" + +#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655 +msgid "Model:" +msgstr "Model:" + +#: xgnokii/xgnokii.c:1598 +msgid "Init length:" +msgstr "" + +#: xgnokii/xgnokii.c:1613 +msgid "Bindir:" +msgstr "" + +#: xgnokii/xgnokii.c:1628 +msgid "Connection:" +msgstr "Verbindung:" + +#: xgnokii/xgnokii.c:1632 +msgid "infrared" +msgstr "infrarot" + +#: xgnokii/xgnokii.c:1636 +msgid "serial" +msgstr "seriell" + +#: xgnokii/xgnokii.c:1641 +msgid "Phone information" +msgstr "Telefoninformationen" + +#: xgnokii/xgnokii.c:1670 +msgid "Version:" +msgstr "Version:" + +#: xgnokii/xgnokii.c:1685 +msgid "Revision:" +msgstr "Revision:" + +#: xgnokii/xgnokii.c:1700 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1715 +msgid "Alarm setting" +msgstr "Alarmeinstellung" + +#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729 +msgid "Alarm" +msgstr "Alarm" + +#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318 +msgid "Short Message Service" +msgstr "Kurznachrichtendienst" + +#: xgnokii/xgnokii.c:1789 +msgid "Edit" +msgstr "Bearbeiten" + +#: xgnokii/xgnokii.c:1803 +msgid "Business Card" +msgstr "Visitenkarte" + +#: xgnokii/xgnokii.c:1810 +msgid "User" +msgstr "Benutzer" + +#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801 +msgid "Name:" +msgstr "Name:" + +#: xgnokii/xgnokii.c:1854 +msgid "Title:" +msgstr "Titel:" + +#: xgnokii/xgnokii.c:1880 +msgid "Company:" +msgstr "Firma:" + +#: xgnokii/xgnokii.c:1906 +msgid "Telephone:" +msgstr "Telefon:" + +#: xgnokii/xgnokii.c:1931 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:1956 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:1982 +msgid "Address:" +msgstr "Adresse:" + +#: xgnokii/xgnokii.c:2006 +msgid "Caller groups names" +msgstr "Gruppenname" + +#: xgnokii/xgnokii.c:2013 +msgid "Groups" +msgstr "Gruppen" + +#: xgnokii/xgnokii.c:2022 +#, c-format +msgid "Group %d:" +msgstr "Gruppe %d:" + +#: xgnokii/xgnokii.c:2035 +msgid "Help viewer" +msgstr "Hilfeanzeiger" + +#: xgnokii/xgnokii.c:2049 +msgid "Viewer:" +msgstr "Anzeiger:" + +#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:154 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:166 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:184 +msgid "ERROR: Can't write file config file!\n" +msgstr "" + +#: xgnokii/xgnokii_common.c:141 +msgid "Error" +msgstr "Fehler" + +#: xgnokii/xgnokii_common.c:187 +msgid "Yes" +msgstr "Ja" + +#: xgnokii/xgnokii_common.c:196 +msgid "No" +msgstr "Nein" + +#: xgnokii/xgnokii_common.c:281 +#, c-format +msgid "Can't exec %s\n" +msgstr "Kann %s nicht ausführen\n" + +#: xgnokii/xgnokii_contacts.c:88 +msgid "/help/contacts.html" +msgstr "/help/contacts.html" + +#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243 +#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429 +#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584 +msgid "Can't change memory type!" +msgstr "Kann Speichertyp nicht ändern!" + +#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:674 +msgid "Can't find pattern!" +msgstr "Kann Muster nicht finden!" + +#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279 +msgid "Number:" +msgstr "Nummer:" + +#: xgnokii/xgnokii_contacts.c:827 +msgid "Memory:" +msgstr "Speicher:" + +#: xgnokii/xgnokii_contacts.c:831 +msgid "phone" +msgstr "Telefon" + +#: xgnokii/xgnokii_contacts.c:846 +msgid "Caller group:" +msgstr "Gruppe:" + +#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633 +#: xgnokii/xgnokii_speed.c:540 +msgid "Edit entry" +msgstr "Eintrag bearbeiten" + +#: xgnokii/xgnokii_contacts.c:907 +msgid "Delete entries" +msgstr "Einträge löschen" + +#: xgnokii/xgnokii_contacts.c:939 +msgid "Do you want delete selected entries?" +msgstr "Wollen sie die gewählten Einträge löschen?" + +#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625 +msgid "New entry" +msgstr "Neuer Eintrag" + +#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629 +msgid "Duplicate entry" +msgstr "Eintrag duplizieren" + +#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062 +#: xgnokii/xgnokii_contacts.c:1087 +msgid "Can't find free memory." +msgstr "Kann keinen freien Speicher finden." + +#: xgnokii/xgnokii_contacts.c:1128 +msgid "Changing memory type" +msgstr "Wechlse Speicherart" + +#: xgnokii/xgnokii_contacts.c:1136 +msgid "Continue" +msgstr "Fortfahren" + +#: xgnokii/xgnokii_contacts.c:1156 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181 +msgid "Find" +msgstr "Suchen" + +#: xgnokii/xgnokii_contacts.c:1203 +msgid "Pattern:" +msgstr "Muster:" + +#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568 +#: xgnokii/xgnokii_speed.c:484 +msgid "Name" +msgstr "Name" + +#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568 +#: xgnokii/xgnokii_speed.c:484 +msgid "Number" +msgstr "Nummer" + +#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644 +msgid "Dial voice" +msgstr "Sprachanruf" + +#: xgnokii/xgnokii_contacts.c:1385 +msgid "Phone memory..." +msgstr "Telefonspeicher..." + +#: xgnokii/xgnokii_contacts.c:1396 +msgid "SIM memory..." +msgstr "Kartenspeicher..." + +#: xgnokii/xgnokii_contacts.c:1423 +msgid "Saving entries" +msgstr "Sichere Einträge" + +#: xgnokii/xgnokii_contacts.c:1448 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1481 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1503 +msgid "Save changes?" +msgstr "Sichere Änderungen" + +#: xgnokii/xgnokii_contacts.c:1519 +msgid "Don't save" +msgstr "Nicht sichern" + +#: xgnokii/xgnokii_contacts.c:1543 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Want you save these changes into phone?\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1641 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1665 +msgid "Getting entries" +msgstr "Hole Einträge" + +#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719 +#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691 +#, c-format +msgid "%s: line %d: Can't get ME memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736 +#, c-format +msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110 +#: xgnokii/xgnokii_speed.c:378 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142 +#: xgnokii/xgnokii_speed.c:418 +msgid "Overwrite file?" +msgstr "Datei überschreiben?" + +#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143 +#: xgnokii/xgnokii_speed.c:419 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436 +msgid "Export" +msgstr "Exportieren" + +#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74 +#: xgnokii/xgnokii_speed.c:280 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2130 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357 +msgid "Import" +msgstr "Importieren" + +#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036 +msgid "Select contacts" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673 +#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2568 +msgid "Memory" +msgstr "Speicher" + +#: xgnokii/xgnokii_contacts.c:2568 +msgid "Group" +msgstr "Gruppe" + +#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518 +msgid "Read from phone" +msgstr "Aus Telefon auslesen" + +#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522 +msgid "Save to phone" +msgstr "In Telefon schreiben" + +#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529 +msgid "Import from file" +msgstr "Aus Datei importieren" + +#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533 +msgid "Export to file" +msgstr "In Datei exportieren" + +#: xgnokii/xgnokii_contacts.c:2637 +msgid "Delete entry" +msgstr "Eintrag löscehn" + +#: xgnokii/xgnokii_dtmf.c:35 +msgid "/help/dtmf.html" +msgstr "/help/dtmf.html" + +#: xgnokii/xgnokii_dtmf.c:91 +msgid "Load" +msgstr "Öffnen" + +#: xgnokii/xgnokii_dtmf.c:207 +msgid "Dial Tone" +msgstr "Wählton" + +#: xgnokii/xgnokii_netmon.c:38 +msgid "/help/netmon.html" +msgstr "/help/netmon.html" + +#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338 +msgid "Active cell" +msgstr "Aktive Zelle" + +#: xgnokii/xgnokii_netmon.c:341 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:344 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:347 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:350 +msgid "Prefered/Denied networks" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:353 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:356 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:359 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:362 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:372 +msgid "Uplink DTX" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:375 +msgid "BTS TEST" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:378 +msgid "CELL BARR-Flag" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:381 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:384 +msgid "?Constant voltage charging display" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Reset-Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:409 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:412 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:415 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "L2-Timeouts" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "Memory status before reset" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:446 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:449 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:452 +msgid "Temporary counters of DSP" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Control of task information displays" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Information of task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Information of task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "Information of task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "Information of OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "Information of the current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:473 +msgid "Hardware version" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:493 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "C2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:496 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:499 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:502 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:533 +msgid "Page:" +msgstr "" + +#: xgnokii/xgnokii_sms.c:83 +msgid "/help/sms.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:88 +msgid "/help/sms_send.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:234 +msgid "report" +msgstr "Report" + +#: xgnokii/xgnokii_sms.c:236 +msgid "read" +msgstr "gelesen" + +#: xgnokii/xgnokii_sms.c:238 +msgid "unread" +msgstr "ungelesen" + +#: xgnokii/xgnokii_sms.c:294 +msgid "sent" +msgstr "gesendet" + +#: xgnokii/xgnokii_sms.c:296 +msgid "unsent" +msgstr "nicht gesendet" + +#: xgnokii/xgnokii_sms.c:380 +msgid "From: " +msgstr "Von: " + +#: xgnokii/xgnokii_sms.c:388 +msgid "Date: " +msgstr "Datum: " + +#: xgnokii/xgnokii_sms.c:438 +msgid "Function not implemented!" +msgstr "Funktion nicht implementiert!" + +#: xgnokii/xgnokii_sms.c:443 +msgid "Delete SMS failed!" +msgstr "SMS löschen fehlgeschlagen!" + +#: xgnokii/xgnokii_sms.c:463 +msgid "Delete SMS" +msgstr "SMS löschen" + +#: xgnokii/xgnokii_sms.c:495 +msgid "Do you want delete selected SMS?" +msgstr "Wollen sie die ausgewählte SMS löschen?" + +#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817 +msgid "Address line contains illegal address!" +msgstr "Addresszeile enthält eine falsche Adresse!" + +#: xgnokii/xgnokii_sms.c:791 +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "SMS senden zu %s fehlgeschlagen\n" +"(Fehler=%d)" + +#: xgnokii/xgnokii_sms.c:988 +msgid "Send message" +msgstr "Schicke Nachricht" + +#: xgnokii/xgnokii_sms.c:992 +msgid "Save message to outbox" +msgstr "" + +#: xgnokii/xgnokii_sms.c:999 +msgid "Check names" +msgstr "Überprüfe Namen" + +#: xgnokii/xgnokii_sms.c:1012 +msgid "To:" +msgstr "An:" + +#: xgnokii/xgnokii_sms.c:1084 +msgid "Delivery report" +msgstr "Auslieferreport" + +#: xgnokii/xgnokii_sms.c:1088 +msgid "Send as Long SMS" +msgstr "Schicke als lange SMS" + +#: xgnokii/xgnokii_sms.c:1092 +msgid "SMS Center:" +msgstr "SMS Center:" + +#: xgnokii/xgnokii_sms.c:1110 +msgid "New Message" +msgstr "Neue Nachricht" + +#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352 +msgid "Forward Message" +msgstr "Nachricht weiterleiten" + +#: xgnokii/xgnokii_sms.c:1177 +msgid "Reply Message" +msgstr "Nachricht beantworten" + +#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361 +msgid "Bussiness Card" +msgstr "Visitenkarte" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Status" +msgstr "Status" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Date / Time" +msgstr "Datum / Zeit" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Sender" +msgstr "Sender" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Message" +msgstr "Nachricht" + +#: xgnokii/xgnokii_sms.c:1348 +msgid "New message" +msgstr "Neue Nachricht" + +#: xgnokii/xgnokii_sms.c:1356 +msgid "Reply message" +msgstr "Nachricht beantworten" + +#: xgnokii/xgnokii_sms.c:1368 +msgid "Delete message" +msgstr "Nachricht löschen" + +#: xgnokii/xgnokii_sms.c:1393 +msgid "SMS's" +msgstr "SMS's" + +#: xgnokii/xgnokii_sms.c:1402 +msgid "Inbox" +msgstr "" + +#: xgnokii/xgnokii_sms.c:1408 +msgid "Outbox" +msgstr "" + +#: xgnokii/xgnokii_speed.c:42 +msgid "/help/speeddial.html" +msgstr "" + +#: xgnokii/xgnokii_speed.c:180 +msgid "Cannot allocate memory!" +msgstr "" + +#: xgnokii/xgnokii_speed.c:226 +#, c-format +msgid "" +"Error writing speed\n" +"dial for key %d!\n" +msgstr "" + +#: xgnokii/xgnokii_speed.c:298 +msgid "Cannot allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338 +msgid "Error reading file!" +msgstr "Fehler beim Datei lesen!" + +#: xgnokii/xgnokii_speed.c:484 +msgid "Key" +msgstr "Schöüssel" + +#: xgnokii/xgnokii_xkeyb.c:90 +msgid "/help/xkeyb.html" +msgstr "/help/xkeyb.html" + +#: xgnokii/xgnokii_xkeyb.c:149 +msgid "Cannot load background pixmap!" +msgstr "Kann Hintergrundbild nicht öffnen!" + +#: xgnokii/xgnokii_xkeyb.c:201 +msgid "/_File" +msgstr "/_Datei" + +#: xgnokii/xgnokii_xkeyb.c:202 +msgid "/File/_Close" +msgstr "/Datei/_Schließen" + +#: xgnokii/xgnokii_xkeyb.c:203 +msgid "/_Help" +msgstr "/_Hilfe" + +#: xgnokii/xgnokii_xkeyb.c:204 +msgid "/Help/_Help" +msgstr "/Hilfe/_Hilfe" + +#: xgnokii/xgnokii_xkeyb.c:205 +msgid "/Help/_About" +msgstr "/Hilfe/_Über" + +#: xgnokii/xgnokii_xkeyb.c:218 +msgid "XGnokii Keyboard" +msgstr "XGnokii Tastatur" diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..42417ea --- /dev/null +++ b/po/et.po @@ -0,0 +1,4112 @@ +# Nokia DataSuite asendaja Linux keskkonnas GNOKII eestindus. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Hans Mõtshärg ,2000 +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 2001-02-01 14:12+0200\n" +"PO-Revision-Date: 2001-01-01 11:43:00+0200\n" +"Last-Translator: Hans Mõtshärg \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c " +"fbus-6110.c gnokii.c gsm-api.c\n" + +#: common/fbus-3810.c:582 common/fbus-6110.c:1649 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "Saadan SMS'i %s kasutades saatekeskust %s\n" + +#: common/fbus-3810.c:686 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "SMS saatmine ebaõnnestus, proovin veel (katse %d %d-st)\n" + +#: common/fbus-3810.c:1304 +msgid "Couldn't open FB38 device" +msgstr "Ei suuda avada FB38 seadet:" + +#: common/fbus-3810.c:1397 +msgid "restarting.\n" +msgstr "käivitun uuesti.\n" + +#: common/fbus-3810.c:1453 +#, c-format +msgid "MT Fail %02x" +msgstr "MT Viga %02x" + +#: common/fbus-3810.c:1460 common/mbus-6160.c:992 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "CS Viga %02x != %02x" + +#: common/fbus-3810.c:1572 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 Registreerimise vastus 0x%02x\n" + +#: common/fbus-3810.c:1588 +#, c-format +msgid "0x16 Registration Response 0x%02x\n" +msgstr "0x15 Registreerimise vastus 0x%02x\n" + +#: common/fbus-3810.c:1589 +#, c-format +msgid "SIM access: %s.\n" +msgstr "" + +#: common/fbus-3810.c:1665 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS salvestatud 0x%02x\n" + +#: common/fbus-3810.c:1675 +#, c-format +msgid "SMS Store failed: 0x%02x\n" +msgstr "SMS salvestamine 0x%02x ebaõnnestus\n" + +#: common/fbus-3810.c:1796 +msgid "PIN [possibly] entered.\n" +msgstr "PIN [tõenäoliselt] sisestatud.\n" + +#: common/fbus-3810.c:1805 +msgid "Phone powering off..." +msgstr "Telefon lülitub välja" + +#: common/fbus-3810.c:1834 common/mbus-6160.c:599 +msgid "Standard Ack write failed!" +msgstr "" + +#: common/fbus-3810.c:1860 +msgid "Unknown: " +msgstr "Tundmatu: " + +#: common/fbus-3810.c:1862 +#, c-format +msgid "Msg Type: %02x " +msgstr "Msg Tüüp: %02x " + +#: common/fbus-3810.c:1863 +#, c-format +msgid "Msg Len: %02x " +msgstr "Msg pikkus: %02x" + +#: common/fbus-3810.c:1864 +#, c-format +msgid "Sequence Number: %02x " +msgstr "Järjenumber: %02x " + +#: common/fbus-3810.c:1865 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Kontrollsumma: %02x \n" +" " + +#: common/fbus-3810.c:1957 common/fbus-3810.c:2087 +msgid "Set Mem Loc Write failed!" +msgstr "" + +#: common/fbus-3810.c:2002 +msgid "TX_SendRLPFrame - write:" +msgstr "" + +#: common/fbus-3810.c:2014 +msgid "Request HangupMessage Write failed!" +msgstr "" + +#: common/fbus-3810.c:2026 +msgid "0x4a Write failed!" +msgstr "0x4a Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2041 +msgid "Explore Write failed!" +msgstr "" + +#: common/fbus-3810.c:2051 +msgid "0x3f Write failed!" +msgstr "0x3f Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2111 +msgid "Request Mem Loc Write failed!" +msgstr "" + +#: common/fbus-3810.c:2124 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "" + +#: common/fbus-3810.c:2167 +msgid "Send SMS header failed!" +msgstr "SMS päise saatmine ebaõnnestus!" + +#: common/fbus-3810.c:2226 +msgid "Store SMS header failed!" +msgstr "SMS päise salvestamine ebaõnnestus!" + +#: common/fbus-3810.c:2251 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "" + +#: common/fbus-3810.c:2274 +msgid "Request SMS Mem Loc Write failed!" +msgstr "" + +#: common/fbus-3810.c:2297 +msgid "Delete SMS Mem Loc write failed!" +msgstr "SMS kustutamine mälupesast ebaõnnestus!" + +#: common/fbus-3810.c:2316 +msgid "0x15 Write failed!" +msgstr "0x15 Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2333 common/mbus-6160.c:1070 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - sõnum on liiga pikk!\n" + +#: common/fbus-3810.c:2359 common/mbus-6160.c:873 common/mbus-6160.c:1102 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - kirjuta:" + +#: common/fbus-3810.c:2372 common/fbus-3810.c:2508 common/fbus-3810.c:2526 +#: common/fbus-3810.c:2544 common/fbus-3810.c:2558 common/fbus-3810.c:2692 +#: common/fbus-3810.c:2753 common/fbus-3810.c:2812 common/fbus-3810.c:2852 +msgid "Write failed!" +msgstr "Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2386 +#, c-format +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Saabuv kõne - Tüüp: %s. %02x, Number %s.\n" + +#: common/fbus-3810.c:2413 +msgid "0x27 Write failed!" +msgstr "0x27 Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2461 +msgid "0x4b Write failed!" +msgstr "0x4b Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2480 +#, c-format +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Olek: %s Batt %02x RF %02x.\n" + +#: common/fbus-3810.c:2491 +msgid "0x10 Write failed!" +msgstr "0x10 Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2495 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Kõne telefonilt katkestatud (0x10 teade).\n" + +#: common/fbus-3810.c:2512 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Kõne katkestatud vastuvõtja või võrgu poolt.\n" + +#: common/fbus-3810.c:2530 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Väljuv kõne katkestatud (0x12 teade).\n" + +#: common/fbus-3810.c:2548 +msgid "Incoming call answered from phone.\n" +msgstr "Saabuv kõne vastatud.\n" + +#: common/fbus-3810.c:2562 +#, c-format +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "%s kõne moodustatud - staatuse bitid %02x %02x.\n" + +#: common/fbus-3810.c:2579 +msgid "0x2c Write failed!" +msgstr "0x2c Kirjutamine ebaõnnestus!" + +#: common/fbus-3810.c:2666 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Ajavöönd:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2733 +#, c-format +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"Saabuv SMS sõnum %d/%d/%d %d:%02d:%02d AV:0x%02x Saatja: %s(%02x tüüpi) Msg " +"Keskus: %s\n" + +#: common/fbus-3810.c:2735 +#, c-format +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" +" Msg pikkus %d, Msg mälukoht %d Msg number %d, PID: %02x DCS: %02x " +"Tundmatud baidid: %02x\n" + +#: common/fbus-3810.c:2828 +msgid "Mobile phone identification received:\n" +msgstr "Mobiiltelefeni identifikaator saabus:\n" + +#: common/fbus-3810.c:2829 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2831 +#, c-format +msgid " Model: %s\n" +msgstr " Mudel: %s\n" + +#: common/fbus-3810.c:2833 +#, c-format +msgid " Revision: %s\n" +msgstr " Versioon: %s\n" + +#: common/fbus-3810.c:2907 +msgid "SMS Message Center Data:\n" +msgstr "SMS Keskuse info: \n" + +#: common/fbus-3810.c:2908 +#, c-format +msgid "Selected memory: 0x%02x\n" +msgstr "Valitud mälu: 0x%02x\n" + +#: common/fbus-3810.c:2909 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Lühisõnumeid Telefonis: 0x%02x Lugemata: 0x%02x\n" + +#: common/fbus-3810.c:2911 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Lühisõnumeid SIM kaardil: 0x%02x Lugemata: 0x%02x\n" + +#: common/fbus-3810.c:2913 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "" + +#: common/fbus-3810.c:2915 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Saateraport: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2917 +#, c-format +msgid "Messages sent as: 0x%02x\n" +msgstr "Sõnum saadetud nagu 0x%02x\n" + +#: common/fbus-3810.c:2918 +#, c-format +msgid "Message validity: 0x%02x\n" +msgstr "Sõnumi kehtivus on 0x%02x\n" + +#: common/fbus-3810.c:2919 +#, c-format +msgid "Unknown: 0x%02x\n" +msgstr "Tundmatu: 0x%02x\n" + +#: common/fbus-3810.c:2922 +msgid "UnknownNumber field empty." +msgstr "TundmatuNumber väli on tühi." + +#: common/fbus-3810.c:2924 +msgid "UnknownNumber: " +msgstr "TundmatuNumber: " + +#: common/fbus-3810.c:2931 +msgid "Number field empty." +msgstr "Numbriväli on tühi." + +#: common/fbus-3810.c:2934 xgnokii/xgnokii_calendar.c:229 +msgid "Number: " +msgstr "Number: " + +#: common/fbus-6110-ringtones.c:352 +#, c-format +msgid "Error in PackRingtone - StartBit different to HowLong %d - %d)\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:411 +msgid "Not header\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:418 +msgid "Not RingingToneProgramming\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:429 +msgid "Not Sound\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:436 +msgid "Not BasicSongType\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:454 +msgid "Not PatternHeaderId\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:556 +msgid "Unsupported block\n" +msgstr "" + +#: common/fbus-6110.c:761 +msgid "Timeout in IR-mode\n" +msgstr "" + +#: common/fbus-6110.c:795 +msgid "Couldn't open FB61 infrared device" +msgstr "Ei suuda avada FB61 IR-seadet" + +#: common/fbus-6110.c:875 +msgid "Starting IR mode...!\n" +msgstr "Alustan IR ühendust...!\n" + +#: common/fbus-6110.c:2051 gnokii/gnokii.c:978 gnokii/gnokii.c:1808 +#: gnokii/gnokii.c:3215 gnokii/gnokii.c:3242 +msgid "Send succeeded!\n" +msgstr "Saatmine õnnestus!\n" + +#: common/fbus-6110.c:2052 gnokii/gnokii.c:980 gnokii/gnokii.c:1810 +#: gnokii/gnokii.c:3217 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "SMS saatmine ebaõnnestus (viga=%d)\n" + +#: common/fbus-6110.c:2075 +msgid "Serial flags dump:\n" +msgstr "Serialpordi lippude olek:\n" + +#: common/fbus-6110.c:2076 common/mbus-640.c:774 +#, c-format +msgid "DTR is %s.\n" +msgstr "DTR on %s.\n" + +#: common/fbus-6110.c:2076 common/fbus-6110.c:2077 common/fbus-6110.c:2078 +#: common/fbus-6110.c:2079 common/mbus-640.c:774 common/mbus-640.c:775 +msgid "up" +msgstr "püsti" + +#: common/fbus-6110.c:2076 common/fbus-6110.c:2077 common/fbus-6110.c:2078 +#: common/fbus-6110.c:2079 common/mbus-640.c:774 common/mbus-640.c:775 +msgid "down" +msgstr "pikali" + +#: common/fbus-6110.c:2077 common/mbus-640.c:775 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS on %s.\n" + +#: common/fbus-6110.c:2078 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR on %s.\n" + +#: common/fbus-6110.c:2079 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS on %s.\n" + +#: common/fbus-6110.c:2112 +msgid "Setting FBUS communication...\n" +msgstr "Seadistan FBUS ühendust...\n" + +#: common/fbus-6110.c:2146 +msgid "Couldn't open FB61 device" +msgstr "Ei suuda avada FB61 seadet" + +#: common/fbus-6110.c:2253 +msgid "Message: Call message, type 0x02:" +msgstr "Teade: Kõneteade, tüüp 0x02:" + +#: common/fbus-6110.c:2254 common/fbus-6110.c:2261 common/fbus-6110.c:2326 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Täpne tagamõte hetkel tundmatu ... :-(\n" + +#: common/fbus-6110.c:2259 +msgid "Message: Call message, type 0x03:" +msgstr "Teade: Kõneteade, tüüp 0x03:" + +#: common/fbus-6110.c:2260 common/fbus-6110.c:2271 common/fbus-6110.c:2280 +#: common/fbus-6110.c:2299 common/fbus-6110.c:2305 common/fbus-6110.c:2325 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Kõne järjenumber: %d\n" + +#: common/fbus-6110.c:2270 +msgid "Message: Remote end hang up.\n" +msgstr "Teade: Teine pool katkestas kõne.\n" + +#: common/fbus-6110.c:2277 +msgid "Message: Incoming call alert:\n" +msgstr "Teade: Saabuva kõne hoiatus:\n" + +#: common/fbus-6110.c:2281 common/fbus-6110.c:2476 +msgid " Number: " +msgstr " Number: " + +#: common/fbus-6110.c:2286 common/fbus-6110.c:2464 +msgid " Name: " +msgstr " Nimi: " + +#: common/fbus-6110.c:2298 +msgid "Message: Call answered.\n" +msgstr "Sõnum: Kõne vastatud.\n" + +#: common/fbus-6110.c:2304 +msgid "Message: Call ended by your phone.\n" +msgstr "Teade: Kõne lõpetatud oma telefoni poolt.\n" + +#: common/fbus-6110.c:2324 +msgid "Message: Call message, type 0x0a:" +msgstr "Teade: Kõneteade, tüüp 0x0a:" + +#: common/fbus-6110.c:2333 +msgid "Message: Unknown message of type 0x01\n" +msgstr "Teade: Tundmatu 0x01 tüüpi sõnum\n" + +#: common/fbus-6110.c:2343 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Teade: SMS sõnum korrektselt saadetud.\n" + +#: common/fbus-6110.c:2348 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Teade: SMS sõnumi saatmine ebaõnnestus.\n" + +#: common/fbus-6110.c:2353 +msgid "Message: SMS Message Received\n" +msgstr "Teade: SMS sõnum saabus\n" + +#: common/fbus-6110.c:2354 common/fbus-6110.c:3299 +#, c-format +msgid " SMS center number: %s\n" +msgstr " SMS keskuse number: %s\n" + +#: common/fbus-6110.c:2358 common/fbus-6110.c:3300 +#, c-format +msgid " Remote number: %s\n" +msgstr " Teise poole number: %s\n" + +#: common/fbus-6110.c:2359 +#, c-format +msgid " Date: %s\n" +msgstr " Kuupäev: %s\n" + +#: common/fbus-6110.c:2360 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:2370 +msgid "Message: Cell Broadcast enabled/disabled successfully.\n" +msgstr "" + +#: common/fbus-6110.c:2379 +msgid "Message: CB received.\n" +msgstr "" + +#: common/fbus-6110.c:2380 +#, c-format +msgid "Message: channel number %i\n" +msgstr "Teade: kanal number %i\n" + +#: common/fbus-6110.c:2392 +msgid "Message: SMS Center correctly set.\n" +msgstr "Teade: SMS keskus korrektselt paigas.\n" + +#: common/fbus-6110.c:2404 +msgid "Message: SMS Center received:\n" +msgstr "Teade: SMS keskus saabus:\n" + +#: common/fbus-6110.c:2405 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. SMS Keskuse nimi on %s\n" + +#: common/fbus-6110.c:2406 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " SMS keskuse number on %s\n" + +#: common/fbus-6110.c:2407 +msgid " SMS Center message format is " +msgstr " SMS keskuse teate formaat on " + +#: common/fbus-6110.c:2410 gnokii/gnokii.c:1117 xgnokii/xgnokii.c:546 +#: xgnokii/xgnokii.c:575 xgnokii/xgnokii.c:1445 xgnokii/xgnokii_calendar.c:862 +msgid "Text" +msgstr "Tekst" + +#: common/fbus-6110.c:2411 gnokii/gnokii.c:1121 xgnokii/xgnokii.c:550 +#: xgnokii/xgnokii.c:1459 +msgid "Paging" +msgstr "Piipar" + +#: common/fbus-6110.c:2412 gnokii/gnokii.c:1125 xgnokii/xgnokii.c:554 +#: xgnokii/xgnokii.c:1452 xgnokii/xgnokii_contacts.c:1784 +msgid "Fax" +msgstr "Faks" + +#: common/fbus-6110.c:2413 gnokii/gnokii.c:1130 +msgid "Email" +msgstr "" + +#: common/fbus-6110.c:2414 common/fbus-6110.c:2428 common/fbus-6110.c:3467 +#: common/fbus-6110.c:3879 gnokii/gnokii.c:1142 gnokii/gnokii.c:1176 +#: xgnokii/xgnokii_calendar.c:153 +msgid "Unknown" +msgstr "Tundmatu" + +#: common/fbus-6110.c:2419 +msgid " SMS Center message validity is " +msgstr " SMS keskuse teate kehtivusaeg on " + +#: common/fbus-6110.c:2422 gnokii/gnokii.c:1152 +msgid "1 hour" +msgstr "1 tund" + +#: common/fbus-6110.c:2423 gnokii/gnokii.c:1156 +msgid "6 hours" +msgstr "6 tundi" + +#: common/fbus-6110.c:2424 gnokii/gnokii.c:1160 +msgid "24 hours" +msgstr "24 tundi" + +#: common/fbus-6110.c:2425 gnokii/gnokii.c:1164 +msgid "72 hours" +msgstr "72 tundi" + +#: common/fbus-6110.c:2426 gnokii/gnokii.c:1168 xgnokii/xgnokii.c:598 +#: xgnokii/xgnokii.c:1524 +msgid "1 week" +msgstr "1 nädal" + +#: common/fbus-6110.c:2427 gnokii/gnokii.c:1172 +msgid "Maximum time" +msgstr "Maksimaalne aeg" + +#: common/fbus-6110.c:2438 +msgid "Message: SMS Center error received:\n" +msgstr "Teade: SMS keskuse viga saabus:\n" + +#: common/fbus-6110.c:2439 +msgid " The request for SMS Center failed.\n" +msgstr " Sõnumikeskuse päring ebaõnnestus.\n" + +#: common/fbus-6110.c:2446 +msgid "Unknown message!\n" +msgstr "Tundmatu sõnum!\n" + +#: common/fbus-6110.c:2463 +msgid "Message: Phonebook entry received:\n" +msgstr "Teade: Telefoniraamatu kirje saabus:\n" + +#: common/fbus-6110.c:2492 +msgid " Date: " +msgstr " Kuupäev: " + +#: common/fbus-6110.c:2494 +msgid " Time: " +msgstr " Kellaaeg: " + +#: common/fbus-6110.c:2504 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Teade: Telefoniraamatu lugemise viga saabus:\n" + +#: common/fbus-6110.c:2507 +msgid " Invalid memory type!\n" +msgstr " Vale mälu tüüp!\n" + +#: common/fbus-6110.c:2511 common/fbus-6110.c:2534 +msgid " Unknown error!\n" +msgstr " Tundmatu viga!\n" + +#: common/fbus-6110.c:2518 +msgid "Message: Phonebook written correctly.\n" +msgstr "Teade: Telefoniraamat korrektselt kirjutatud.\n" + +#: common/fbus-6110.c:2529 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "Teade: Telefoniraamatusse ei kirjutatud - nimi on liiga pikk.\n" + +#: common/fbus-6110.c:2542 +msgid "Message: Memory status received:\n" +msgstr "Teade: Mälu olek saabus:\n" + +#: common/fbus-6110.c:2543 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Mälu tüüp: %s\n" + +#: common/fbus-6110.c:2544 +#, c-format +msgid " Used: %d\n" +msgstr " Kasutatud: %d\n" + +#: common/fbus-6110.c:2545 +#, c-format +msgid " Free: %d\n" +msgstr " Vaba: %d\n" + +#: common/fbus-6110.c:2554 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "Teade: Mälu oleku viga, telefon on tõenäoliselt väljalülitatud.\n" + +#: common/fbus-6110.c:2559 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "Teade: Mälu oleku viga, mälu tüüp pole telefoni poolt toetatud.\n" + +#: common/fbus-6110.c:2564 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "Teade: Mälu oleku viga, ootan turvakoodi.\n" + +#: common/fbus-6110.c:2569 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" + +#: common/fbus-6110.c:2584 +msgid "Message: Caller group logo etc.\n" +msgstr "Teade: Helistaja grupi Logo jms.\n" + +#: common/fbus-6110.c:2585 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Helistaja grupi nimi: %s\n" + +#: common/fbus-6110.c:2602 +msgid "Message: Caller group data received but not requested!\n" +msgstr "Teade: Helistaja grupi andmed saabusid kuid polnud küsitud!\n" + +#: common/fbus-6110.c:2608 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "Teade: Helistajagrupi andmete saamise viga.\n" + +#: common/fbus-6110.c:2613 +msgid "Message: Caller group data set correctly.\n" +msgstr "Teade: Helistaja grupi andmed korrektselt seatud.\n" + +#: common/fbus-6110.c:2618 +msgid "Message: Error attempting to set caller group data\n" +msgstr "Teade: Helistajagrupi andmete seadmise viga.\n" + +#: common/fbus-6110.c:2624 +msgid "Message: Speed dial entry received:\n" +msgstr "Teade: kiirvalimise kirje saabus:\n" + +#: common/fbus-6110.c:2625 +#, c-format +msgid " Location: %d\n" +msgstr " Asukoht: %d\n" + +#: common/fbus-6110.c:2626 +#, c-format +msgid " MemoryType: %s\n" +msgstr " Mälu tüüp: %s\n" + +#: common/fbus-6110.c:2627 +#, c-format +msgid " Number: %d\n" +msgstr " Number: %d\n" + +#: common/fbus-6110.c:2632 +msgid "Message: Speed dial entry error\n" +msgstr "Teade: kiirvalimise sisestuse viga\n" + +#: common/fbus-6110.c:2637 +msgid "Message: Speed dial entry set.\n" +msgstr "Teade: kiirvalimise kirje seatud.\n" + +#: common/fbus-6110.c:2642 +msgid "Message: Speed dial entry setting error.\n" +msgstr "Teade: kiirvalimise kirje seade viga.\n" + +#: common/fbus-6110.c:2647 +msgid "Message: Unknown message of type 0x03\n" +msgstr "Teade: Tundmatu 0x03 tüüpi sõnum\n" + +#: common/fbus-6110.c:2658 +msgid "Message: Phone status received:\n" +msgstr "Teade: Telefoni olek saabunud:\n" + +#: common/fbus-6110.c:2659 +msgid " Mode: " +msgstr " Olek: " + +#: common/fbus-6110.c:2661 +msgid "registered within the network\n" +msgstr "registreeritud võrkku\n" + +#: common/fbus-6110.c:2664 +msgid "call in progress\n" +msgstr "kõne käimas\n" + +#: common/fbus-6110.c:2665 +msgid "waiting for security code\n" +msgstr "ootan turvakoodi.\n" + +#: common/fbus-6110.c:2666 +msgid "powered off\n" +msgstr "toide välja\n" + +#: common/fbus-6110.c:2667 common/fbus-6110.c:2673 +msgid "unknown\n" +msgstr "tundmatu\n" + +#: common/fbus-6110.c:2669 +msgid " Power source: " +msgstr " Toiteallikas: " + +#: common/fbus-6110.c:2671 +msgid "AC/DC\n" +msgstr "Vahelduvvool/Alalisvool\n" + +#: common/fbus-6110.c:2672 +msgid "battery\n" +msgstr "aku\n" + +#: common/fbus-6110.c:2675 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Aku laadumus: %d\n" + +#: common/fbus-6110.c:2676 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Signaali väljatugevus: %d\n" + +#: common/fbus-6110.c:2684 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Teade: Tundmatu 0x04 tüüpi sõnum\n" + +#: common/fbus-6110.c:2695 +msgid "Message: Profile feature change result.\n" +msgstr "Teade: Profiili omadus muutis tulemust.\n" + +#: common/fbus-6110.c:2737 +msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n" +msgstr "Teade: Saabusid Startup Logo, Teretere teade ja diileri tervitusteade.\n" + +#: common/fbus-6110.c:2755 +msgid "Startup logo supported - " +msgstr "Startup Logo on toetatud - " + +#: common/fbus-6110.c:2756 +msgid "currently set\n" +msgstr "hetkel seatud\n" + +#: common/fbus-6110.c:2757 common/fbus-6110.c:2772 common/fbus-6110.c:2788 +#: gnokii/gnokii.c:1913 +msgid "currently empty\n" +msgstr "hetkel tühi\n" + +#: common/fbus-6110.c:2766 +msgid "Startup Text supported - " +msgstr "Startup Tekst on toetatud - " + +#: common/fbus-6110.c:2768 common/fbus-6110.c:2785 +msgid "currently set to \"" +msgstr "hetkel seatud \"" + +#: common/fbus-6110.c:2769 common/fbus-6110.c:2786 +#, c-format +msgid "%c" +msgstr "" + +#: common/fbus-6110.c:2770 common/fbus-6110.c:2787 +msgid "\"\n" +msgstr "" + +#: common/fbus-6110.c:2783 +msgid "Dealer Welcome supported - " +msgstr "" + +#: common/fbus-6110.c:2796 +msgid "Message: Startup logo received but not requested!\n" +msgstr "Teade: Startup logo saabus, kuid pole küsitud!\n" + +#: common/fbus-6110.c:2801 +msgid "" +"Message: Startup logo, welcome note or dealer welcome note correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:2820 +msgid "Message: Operator logo correctly set.\n" +msgstr "Teade: Operaatori Logo korrektselt paigas.\n" + +#: common/fbus-6110.c:2826 +msgid "Message: Error setting operator logo!\n" +msgstr "Teade: Viga operaatori logo kehtestamisel!\n" + +#: common/fbus-6110.c:2841 +#, c-format +msgid "Message: Operator Logo for %s (%s) network received.\n" +msgstr "Teade: Saabus Operaatori Logo võrgule %s (%s).\n" + +#: common/fbus-6110.c:2855 +msgid "Message: Operator logo received but not requested!\n" +msgstr "Teade: Operaatori Logo saabunud, kuid mitte küsitud!\n" + +#: common/fbus-6110.c:2859 +msgid "Message: Error getting operator logo!\n" +msgstr "Teade: Viga operaatori logo võtmisel!\n" + +#: common/fbus-6110.c:2871 +msgid "Message: Security Code status received: " +msgstr "Teade: Security koodi olek saabus: " + +#: common/fbus-6110.c:2873 gnokii/gnokii.c:1659 +msgid "waiting for Security Code.\n" +msgstr "ootan Security koodi.\n" + +#: common/fbus-6110.c:2874 gnokii/gnokii.c:1664 +msgid "waiting for PIN.\n" +msgstr "ootan PIN koodi.\n" + +#: common/fbus-6110.c:2875 gnokii/gnokii.c:1669 +msgid "waiting for PIN2.\n" +msgstr "ootan PIN2 koodi.\n" + +#: common/fbus-6110.c:2876 gnokii/gnokii.c:1674 +msgid "waiting for PUK.\n" +msgstr "ootan PUK koodi.\n" + +#: common/fbus-6110.c:2877 gnokii/gnokii.c:1679 +msgid "waiting for PUK2.\n" +msgstr "ootan PUK2 koodi.\n" + +#: common/fbus-6110.c:2878 gnokii/gnokii.c:1684 +msgid "nothing to enter.\n" +msgstr "pole midagi sisestada.\n" + +#: common/fbus-6110.c:2879 gnokii/gnokii.c:1689 +msgid "Unknown!\n" +msgstr "Tundmatu!\n" + +#: common/fbus-6110.c:2885 +msgid "Message: Security code accepted.\n" +msgstr "Teade: Security kood aksepteeritud.\n" + +#: common/fbus-6110.c:2890 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "Teade: Security kood on vale. Sa pole telefoni õige omanik :-)\n" + +#: common/fbus-6110.c:2909 +msgid "Message: Network information:\n" +msgstr "Teade: Võrgu informatsioon:\n" + +#: common/fbus-6110.c:2911 +#, c-format +msgid " CellID: %s\n" +msgstr " KärjeID: %s\n" + +#: common/fbus-6110.c:2912 +#, c-format +msgid " LAC: %s\n" +msgstr "" + +#: common/fbus-6110.c:2913 +#, c-format +msgid " Network code: %s\n" +msgstr " Võrgu kood: %s\n" + +#: common/fbus-6110.c:2914 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Võrgu nimi: %s (%s)\n" + +#: common/fbus-6110.c:2917 +msgid " Status: " +msgstr " Olek: " + +#: common/fbus-6110.c:2920 +msgid "home network selected" +msgstr "koduvõrk valitud" + +#: common/fbus-6110.c:2921 +msgid "roaming network" +msgstr "roaming võrk" + +#: common/fbus-6110.c:2922 +msgid "requesting network" +msgstr "võrgupäring" + +#: common/fbus-6110.c:2923 +msgid "not registered in the network" +msgstr "pole võrkku registreerunud" + +#: common/fbus-6110.c:2924 xgnokii/xgnokii_lowlevel.c:116 +#: xgnokii/xgnokii_lowlevel.c:191 xgnokii/xgnokii_lowlevel.c:193 +#: xgnokii/xgnokii_lowlevel.c:194 +msgid "unknown" +msgstr "tundmatu" + +#: common/fbus-6110.c:2929 +#, c-format +msgid " Network selection: %s\n" +msgstr " Võrgu valik: %s\n" + +#: common/fbus-6110.c:2929 +msgid "manual" +msgstr "käsiraamat" + +#: common/fbus-6110.c:2929 +msgid "automatic" +msgstr "automaatne" + +#: common/fbus-6110.c:2935 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "Teade: Tundmatu 0x0a tüüpi sõnum\n" + +#: common/fbus-6110.c:2958 gnokii/gnokii.c:3048 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Kõne on käimas: %s\n" + +#: common/fbus-6110.c:2959 gnokii/gnokii.c:3049 +#, c-format +msgid "Unknown: %s\n" +msgstr "Tundmatu: %s\n" + +#: common/fbus-6110.c:2960 gnokii/gnokii.c:3050 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "Lugemata SMS: %s\n" + +#: common/fbus-6110.c:2961 gnokii/gnokii.c:3051 +#, c-format +msgid "Voice call: %s\n" +msgstr "" + +#: common/fbus-6110.c:2962 gnokii/gnokii.c:3052 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Faxi kõne aktiivne: %s\n" + +#: common/fbus-6110.c:2963 gnokii/gnokii.c:3053 +#, c-format +msgid "Data call active: %s\n" +msgstr "Andmekõne aktiivne: %\n" + +#: common/fbus-6110.c:2964 gnokii/gnokii.c:3054 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Klaviatuuri lukk: %s\n" + +#: common/fbus-6110.c:2965 gnokii/gnokii.c:3055 +#, c-format +msgid "SMS storage full: %s\n" +msgstr "SMS varamu on täis: %s\n" + +#: common/fbus-6110.c:2971 +msgid "Display output successfully disabled/enabled.\n" +msgstr "" + +#: common/fbus-6110.c:2977 +msgid "Unknown message of type 0x0d.\n" +msgstr "Tundmatu 0x0d tüüpi sõnum.\n" + +#: common/fbus-6110.c:2989 +msgid "Message: Date and time set correctly\n" +msgstr "Teade: Kuupäev ja kellaaeg seatud korrektselt\n" + +#: common/fbus-6110.c:2994 common/fbus-6110.c:3024 +msgid "Message: Date and time set error\n" +msgstr "Teade: Kuupäeva ja kellaaja seade viga\n" + +#: common/fbus-6110.c:3009 +msgid "Message: Date and time\n" +msgstr "Teade: Kuupäev ja kellaaeg\n" + +#: common/fbus-6110.c:3010 common/fbus-6110.c:3109 gnokii/gnokii.c:2276 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Kellaaeg: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3011 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Kuupäev: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:3019 +msgid "Message: Alarm set correctly\n" +msgstr "Teade: Äratus seatud õieti\n" + +#: common/fbus-6110.c:3031 +msgid "Message: Alarm\n" +msgstr "Teade: Äratus\n" + +#: common/fbus-6110.c:3032 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Äratus: %02d:%02d\n" + +#: common/fbus-6110.c:3033 +#, c-format +msgid " Alarm is %s\n" +msgstr " Äratus on %s\n" + +#: common/fbus-6110.c:3033 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049 +#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052 +#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055 +msgid "on" +msgstr "sisse" + +#: common/fbus-6110.c:3033 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049 +#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052 +#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055 +msgid "off" +msgstr "välja" + +#: common/fbus-6110.c:3043 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Teade: Tundmatu 0x11 tüüpi sõnum\n" + +#: common/fbus-6110.c:3055 +msgid "Message: Calendar note write succesfull!\n" +msgstr "Teade: Kalendri teate kirjutamine õnnestus!\n" + +#: common/fbus-6110.c:3059 common/fbus-6110.c:3063 +msgid "Message: Calendar note write failed!\n" +msgstr "Teade: Kalendri teate kirjutamine ebaõnnestus!\n" + +#: common/fbus-6110.c:3067 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "Tundmatu 0x13 tüüpi ja 0x65 alamtüüpi sõnum.\n" + +#: common/fbus-6110.c:3105 +msgid "Message: Calendar note received.\n" +msgstr "Teade: Kalendri teade saabus\n" + +#: common/fbus-6110.c:3106 gnokii/gnokii.c:2272 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Kuupäev: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3116 gnokii/gnokii.c:2281 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Äratuse kuupäev: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3119 gnokii/gnokii.c:2285 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Äratusaeg: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3124 +#, c-format +msgid " Type: %d\n" +msgstr " Tüüp: %d\n" + +#: common/fbus-6110.c:3125 gnokii/gnokii.c:2290 +#, c-format +msgid " Text: %s\n" +msgstr " Tekst: %s\n" + +#: common/fbus-6110.c:3127 gnokii/gnokii.c:2293 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefon: %s\n" + +#: common/fbus-6110.c:3132 +msgid "Message: Calendar note not available\n" +msgstr "Teade: Kalendri teade pole võimalik\n" + +#: common/fbus-6110.c:3137 +msgid "Message: Calendar note error\n" +msgstr "Teade: Kalendri teate viga\n" + +#: common/fbus-6110.c:3149 +msgid "Message: Calendar note deleted\n" +msgstr "Teade: Kalendri teade kustutatud\n" + +#: common/fbus-6110.c:3153 +msgid "Message: Calendar note can't be deleted\n" +msgstr "Teade: Kalendri teadet ei saa kustutada\n" + +#: common/fbus-6110.c:3157 +msgid "Message: Calendar note deleting error\n" +msgstr "Teade: Kalendri teate kustutamise viga\n" + +#: common/fbus-6110.c:3167 +msgid "Message: Calendar Alarm active\n" +msgstr "Teade: Kalendri alarm aktiivne\n" + +#: common/fbus-6110.c:3168 +#, c-format +msgid " Item number: %d\n" +msgstr "" + +#: common/fbus-6110.c:3172 +msgid "Message: Unknown message of type 0x13\n" +msgstr "Teade: Tundmatu 0x13 tüüpi sõnum\n" + +#: common/fbus-6110.c:3224 +msgid "Concatenated message!!!\n" +msgstr "" + +#: common/fbus-6110.c:3253 +#, c-format +msgid "Number: %d\n" +msgstr "Number: %d\n" + +#: common/fbus-6110.c:3256 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "" + +#: common/fbus-6110.c:3258 +msgid "Sent\n" +msgstr "Saadetud\n" + +#: common/fbus-6110.c:3260 +msgid "Not sent\n" +msgstr "Saatmata\n" + +#: common/fbus-6110.c:3264 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "Teade: SMS sõnum saabus (telefon katkestas)\n" + +#: common/fbus-6110.c:3266 +msgid "Delivery Report\n" +msgstr "Saateraport\n" + +#: common/fbus-6110.c:3268 +msgid "Unknown type\n" +msgstr "Tundmatu tüüp\n" + +#: common/fbus-6110.c:3271 +msgid "Read\n" +msgstr "Loe\n" + +#: common/fbus-6110.c:3273 +msgid "Not read\n" +msgstr "Lugemata\n" + +#: common/fbus-6110.c:3275 +#, c-format +msgid " Date: %s " +msgstr " Kuupäev: %s " + +#: common/fbus-6110.c:3283 common/fbus-6110.c:3295 gnokii/gnokii.c:1352 +#: gnokii/gnokii.c:1365 gnokii/gnokii.c:1392 +#, c-format +msgid "%02d00" +msgstr "" + +#: common/fbus-6110.c:3288 +#, c-format +msgid " SMSC response date: %s " +msgstr " SMSC vastuse kuupäev: %s " + +#: common/fbus-6110.c:3353 +msgid "Delivered" +msgstr "Saadetud" + +#: common/fbus-6110.c:3356 +msgid "SM received by the SME" +msgstr "" + +#: common/fbus-6110.c:3359 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: common/fbus-6110.c:3362 +msgid "SM replaced by the SC" +msgstr "" + +#: common/fbus-6110.c:3368 +msgid "Failed" +msgstr "Ebaõnnestus" + +#: common/fbus-6110.c:3373 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "Ajutine viga, SC ei proovi enam uuesti saata\n" + +#: common/fbus-6110.c:3377 common/fbus-6110.c:3444 +msgid "Congestion" +msgstr "" + +#: common/fbus-6110.c:3380 common/fbus-6110.c:3447 +msgid "SME busy" +msgstr "SME on hõivatud" + +#: common/fbus-6110.c:3383 common/fbus-6110.c:3450 +msgid "No response from SME" +msgstr "SME ei vasta..." + +#: common/fbus-6110.c:3386 common/fbus-6110.c:3453 +msgid "Service rejected" +msgstr "Teenus tagasilykatud" + +#: common/fbus-6110.c:3389 common/fbus-6110.c:3414 common/fbus-6110.c:3456 +msgid "Quality of service not aviable" +msgstr "" + +#: common/fbus-6110.c:3392 common/fbus-6110.c:3459 +msgid "Error in SME" +msgstr "Viga SME-s" + +#: common/fbus-6110.c:3395 common/fbus-6110.c:3432 common/fbus-6110.c:3462 +#: common/fbus-6110.c:3470 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: common/fbus-6110.c:3399 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "Püsiv viga, SC ei proovi enam saatmist korrata\n" + +#: common/fbus-6110.c:3402 +msgid "Remote procedure error" +msgstr "" + +#: common/fbus-6110.c:3405 +msgid "Incompatibile destination" +msgstr "Kokkusobimatu sihtpunkt" + +#: common/fbus-6110.c:3408 +msgid "Connection rejected by SME" +msgstr "Ühendusest keelduti SME poolt" + +#: common/fbus-6110.c:3411 +msgid "Not obtainable" +msgstr "Ei saa kätte" + +#: common/fbus-6110.c:3417 +msgid "No internetworking available" +msgstr "" + +#: common/fbus-6110.c:3420 +msgid "SM Validity Period Expired" +msgstr "" + +#: common/fbus-6110.c:3423 +msgid "SM deleted by originating SME" +msgstr "" + +#: common/fbus-6110.c:3426 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: common/fbus-6110.c:3429 +msgid "SM does not exist" +msgstr "" + +#: common/fbus-6110.c:3438 +msgid "Pending" +msgstr "Ootel" + +#: common/fbus-6110.c:3441 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "Ajutine viga, SC püüab ikkagi saata SM'i\n" + +#: common/fbus-6110.c:3489 +#, c-format +msgid "Message stored at %d\n" +msgstr "" + +#: common/fbus-6110.c:3494 +msgid "SMS saving failed\n" +msgstr "SMS salvestamine ebaõnnestus\n" + +#: common/fbus-6110.c:3497 +msgid " All locations busy.\n" +msgstr "" + +#: common/fbus-6110.c:3501 common/fbus-6110.c:3516 +msgid " Invalid location!\n" +msgstr " Vale asukoht!\n" + +#: common/fbus-6110.c:3505 +msgid " Unknown error.\n" +msgstr " Tundmatu viga.\n" + +#: common/fbus-6110.c:3513 +msgid "Message: SMS reading failed.\n" +msgstr "Teade: SMS lugemine ebaõnnestus.\n" + +#: common/fbus-6110.c:3520 +msgid " Empty SMS location.\n" +msgstr " Tühi SMS mälupesa.\n" + +#: common/fbus-6110.c:3527 +msgid "Message: SMS deleted successfully.\n" +msgstr "Teade: SMS kustutamine õnnestus.\n" + +#: common/fbus-6110.c:3532 +msgid "Message: SMS Status Received\n" +msgstr "Teade: SMS olek saabus\n" + +#: common/fbus-6110.c:3533 +#, c-format +msgid " The number of messages: %d\n" +msgstr " Sõnumite arv: %d\n" + +#: common/fbus-6110.c:3534 +#, c-format +msgid " Unread messages: %d\n" +msgstr " Lugemata sõnumeid: %d\n" + +#: common/fbus-6110.c:3541 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "Teade: SMS oleku viga, tõenäoliselt PIN koodiga autoriseerimata\n" + +#: common/fbus-6110.c:3563 +msgid "Message: Netmonitor correctly set.\n" +msgstr "Teade: Võrgumonitor korrektselt paigas.\n" + +#: common/fbus-6110.c:3567 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "Teade: Võrgumonitori menüü %d saabunud:\n" + +#: common/fbus-6110.c:3577 +msgid "Unknown message of type 0x40.\n" +msgstr "Tundmatu 0x40 tüüpi sõnum.\n" + +#: common/fbus-6110.c:3595 +msgid "Message: Mobile phone identification received:\n" +msgstr "Teade: Mobiiltelefoni identiteet saabunud:\n" + +#: common/fbus-6110.c:3596 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-6110.c:3597 +#, c-format +msgid " Model: %s\n" +msgstr " Mudel: %s\n" + +#: common/fbus-6110.c:3598 +#, c-format +msgid " Production Code: %s\n" +msgstr " Valmistuskood: %s\n" + +#: common/fbus-6110.c:3599 +#, c-format +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: common/fbus-6110.c:3600 +#, c-format +msgid " Firmware: %s\n" +msgstr " Riistvara: %s\n" + +#: common/fbus-6110.c:3606 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Maagilised baidid: %02x %02x %02x %02x\n" + +#: common/fbus-6110.c:3617 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "" + +#: common/fbus-6110.c:3624 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "" + +#: common/fbus-6110.c:3638 +#, c-format +msgid "" +"Phone info:\n" +"%s\n" +msgstr "" +"Telefoni info:\n" +"%s\n" + +#: common/fbus-6110.c:3648 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "" + +#: common/fbus-6110.c:3655 +msgid "Message: Unknown message.\n" +msgstr "Teade: Tundmatu sõnum.\n" + +#: common/fbus-6110.c:3756 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "" + +#: common/fbus-6110.c:3757 +msgid "Please report it ...\n" +msgstr "Palun teata sellest ... \n" + +#: common/fbus-6110.c:3783 +msgid "FB61: Message buffer overun - resetting\n" +msgstr "" + +#: common/fbus-6110.c:3808 +msgid "Bad checksum!\n" +msgstr "Vale kontrollsumma!\n" + +#: common/fbus-6110.c:3873 xgnokii/xgnokii.c:1759 +msgid "Phone" +msgstr "Telefon" + +#: common/fbus-6110.c:3876 +msgid "PC" +msgstr "" + +#: common/fbus-6110.c:3893 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Msg sihtpunkt: %s\n" + +#: common/fbus-6110.c:3894 +#, c-format +msgid "Msg Source: %s\n" +msgstr "Msg allikas: %s\n" + +#: common/fbus-6110.c:3895 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "Msg tüüp: %02x\n" + +#: common/fbus-6110.c:3896 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "Msg tundmatu: %02x\n" + +#: common/fbus-6110.c:3897 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" +"Msg pikkus: %02x\n" +"Telefon: " + +#: common/fbus-6110.c:3963 +msgid "PC: " +msgstr "" + +#: common/fbus-6110.c:4029 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "" + +#: common/mbus-6160.c:551 +msgid "Standard Ack write (0x40) failed!" +msgstr "" + +#: common/mbus-6160.c:577 +msgid "Standard Ack write (0xd2) failed!" +msgstr "" + +#: common/mbus-6160.c:1022 +msgid "Couldn't open MB61 device: " +msgstr "Ei suuda avada MB61 seadet: " + +#: common/mbus-640.c:667 +msgid "Phone: " +msgstr "Telefon: " + +#: common/mbus-640.c:697 common/mbus-640.c:797 +msgid "PC : " +msgstr "PC : " + +#: common/mbus-640.c:707 common/mbus-640.c:810 +msgid "Write error!\n" +msgstr "Kirjutamine ebaõnnestus!\n" + +#: common/mbus-640.c:734 +msgid "Setting MBUS communication...\n" +msgstr "Seadistan MBUS ühendust...\n" + +#: common/rlp-common.c:705 +msgid "Unknown!!! " +msgstr "Tundmatu!!!" + +#: common/rlp-common.c:770 +msgid "BAD" +msgstr "" + +#: common/rlp-common.c:892 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "FCS blokk on vigane. Ignoreerin ...\n" + +#: common/rlp-common.c:1007 +msgid "Send_TXU()\n" +msgstr "" + +#: common/rlp-common.c:1008 +#, c-format +msgid "XID_R_State=%d\n" +msgstr "" + +#: common/rlp-common.c:1380 +msgid "RLP state 0.\n" +msgstr "" + +#: common/rlp-common.c:1417 +msgid "RLP state 1.\n" +msgstr "" + +#: common/rlp-common.c:1465 +msgid "RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1499 +msgid "UA received in RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1556 +msgid "RLP state 3.\n" +msgstr "" + +#: common/rlp-common.c:1614 +msgid "RLP state 4.\n" +msgstr "" + +#: common/rlp-common.c:1753 +msgid "RLP state 5.\n" +msgstr "" + +#: common/rlp-common.c:1812 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "" + +#: common/rlp-common.c:1843 +msgid "RLP state 7.\n" +msgstr "" + +#: common/rlp-common.c:1885 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "" + +#: gnokii/gnokii.c:206 +#, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"gnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no warranty for gnokii. See GPL for details.\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Versioon %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"gnokii on vabavara, GNU General Public License alusel, \n" +"seda võib muuta ja/või levitada programmi koopiaid vastavlt reeglitele.\n" +"gnokii ei oma mitte mingisugust garantiid toimivuse kohta. Vaata GPL tingimusi.\n" +"Eestikeelne tõlge Hans Mõtshärg , 2000\n" +"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n" + +#: gnokii/gnokii.c:223 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start [end]\n" +" gnokii --writephonebook [-i]\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start [end] [-f file] [-d]\n" +" gnokii --deletesms memory_type start [end]\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --savesms [-m] [-l n] [-i]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote vcardfile number\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destination logofile [network code]\n" +" gnokii --sendringtone destination rtttlfile\n" +" gnokii --setlogo op [logofile] [network code]\n" +" gnokii --setlogo startup [logofile]\n" +" gnokii --setlogo caller [logofile] [caller group number] [group " +"name]\n" +" gnokii --setlogo {dealer|text} [text]\n" +" gnokii --getlogo op [logofile] [network code]\n" +" gnokii --getlogo startup [logofile] [network code]\n" +" gnokii --getlogo caller [logofile][caller group number][network " +"code]\n" +" gnokii --getlogo {dealer|text}\n" +" gnokii --setringtone rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +" gnokii --displayoutput\n" +" gnokii --keysequence\n" +msgstr "" + +#: gnokii/gnokii.c:266 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" + +#: common/virtmodem.c:292 gnokii/gnokii.c:293 gnokii/gnokii.c:3187 +#: xgnokii/xgnokii_lowlevel.c:171 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "" +"GSM/FBUS initsialiseerimine ebaõnnestus! (Tundmatu mudel?). Lõpetan....)\n" + +#: gnokii/gnokii.c:304 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan.\n" + +#: gnokii/gnokii.c:580 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "Kasuta '%s --help' kasutusinfo saamiseks.\n" + +#: gnokii/gnokii.c:778 +#, c-format +msgid "Unknown option: %d\n" +msgstr "Tundmatu valik: %d\n" + +#: gnokii/gnokii.c:788 +msgid "Wrong number of arguments\n" +msgstr "Vale argumentide kogus\n" + +#: gnokii/gnokii.c:859 gnokii/gnokii.c:917 gnokii/gnokii.c:1076 +msgid "Input too long!\n" +msgstr "Sisend on liiga pikk!\n" + +#: gnokii/gnokii.c:912 gnokii/gnokii.c:1071 +msgid "Couldn't read from stdin!\n" +msgstr "Ei suuda lugeda standard sisendist!\n" + +#: gnokii/gnokii.c:1046 +msgid "Message at specified location exists. " +msgstr "" + +#: gnokii/gnokii.c:1048 gnokii/gnokii.c:1421 gnokii/gnokii.c:2948 +msgid "Overwrite? (yes/no) " +msgstr "Kas kirjutan üle? (yes/no)" + +#: gnokii/gnokii.c:1056 +msgid "Invalid location\n" +msgstr "Vale asukoht\n" + +#: gnokii/gnokii.c:1062 +#, c-format +msgid "Location %d empty. Saving\n" +msgstr "Asukoht %d on tühi. Salvestan\n" + +#: gnokii/gnokii.c:1087 +msgid "Saved!\n" +msgstr "Salvestatud!\n" + +#: gnokii/gnokii.c:1089 +#, c-format +msgid "Saving failed (error=%d)\n" +msgstr "" + +#: gnokii/gnokii.c:1110 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "%d. SMS keskuse (%s) number on %s\n" + +#: gnokii/gnokii.c:1112 +msgid "Messages sent as " +msgstr "Sõnum saadetud nagu " + +#: gnokii/gnokii.c:1134 xgnokii/xgnokii.c:563 +msgid "ERMES" +msgstr "" + +#: gnokii/gnokii.c:1138 xgnokii/xgnokii.c:567 +msgid "X.400" +msgstr "" + +#: gnokii/gnokii.c:1147 +msgid "Message validity is " +msgstr "Sõnumi kehtivus on" + +#: gnokii/gnokii.c:1183 +msgid "SMS center can not be found :-(\n" +msgstr "" + +#: gnokii/gnokii.c:1256 gnokii/gnokii.c:2805 gnokii/gnokii.c:3016 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Tundmatu mälu tüüp %s!\n" + +#: gnokii/gnokii.c:1283 +#, c-format +msgid "Saving into %s\n" +msgstr "" + +#: gnokii/gnokii.c:1287 +msgid "Filename too long - will be truncated to 63 charactera.\n" +msgstr "" + +#: gnokii/gnokii.c:1325 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Saadetud Sõnumid " + +#: gnokii/gnokii.c:1328 +msgid "(sent)\n" +msgstr "(saadetud)\n" + +#: gnokii/gnokii.c:1330 +msgid "(not sent)\n" +msgstr "(ei saadetud)\n" + +#: gnokii/gnokii.c:1332 gnokii/gnokii.c:1371 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "" +"Tekst: %s\n" +"\n" + +#: gnokii/gnokii.c:1338 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Saateraport " + +#: gnokii/gnokii.c:1340 gnokii/gnokii.c:1380 +msgid "(read)\n" +msgstr "(loetud)\n" + +#: gnokii/gnokii.c:1342 gnokii/gnokii.c:1382 +msgid "(not read)\n" +msgstr "(ei loetud)\n" + +#: gnokii/gnokii.c:1344 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Saatmise kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1350 gnokii/gnokii.c:1363 gnokii/gnokii.c:1390 +#, c-format +msgid "+%02d00" +msgstr "" + +#: gnokii/gnokii.c:1357 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Vastuse kuupäev/kellaaeg: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1370 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "Saaja: %s Msg keskus: %s\n" + +#: gnokii/gnokii.c:1377 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Saabunud Sõnumid " + +#: gnokii/gnokii.c:1384 +#, c-format +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Kuupäv/kellaeg: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1396 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "Saatja: %s Msg kekus: %s\n" + +#: gnokii/gnokii.c:1402 +#, c-format +msgid "GSM operator logo for %s (%s) network.\n" +msgstr "GSM Operaatori Logo võrgule %s (%s).\n" + +#: gnokii/gnokii.c:1404 +msgid "Saved by Logo Express\n" +msgstr "" + +#: gnokii/gnokii.c:1405 +msgid "Saved by Operator Logo Uploader by Thomas Kessler\n" +msgstr "" + +#: gnokii/gnokii.c:1420 +#, c-format +msgid "File %s exists.\n" +msgstr "Fail %s on olemas.\n" + +#: gnokii/gnokii.c:1427 +#, c-format +msgid "Couldn't save logofile %s!\n" +msgstr "Ei suuda logofaili %s salvestada!\n" + +#: gnokii/gnokii.c:1435 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Seotud (%d/%d):\n" + +#: gnokii/gnokii.c:1437 +#, c-format +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" +"Tekst:\n" +"%s\n" +"\n" + +#: gnokii/gnokii.c:1442 gnokii/gnokii.c:2268 +msgid "Unknown\n" +msgstr "Tundmatu\n" + +#: gnokii/gnokii.c:1449 +msgid "(delete failed)\n" +msgstr "(kustutamine ebaõnnestus)\n" + +#: gnokii/gnokii.c:1451 +msgid "(message deleted)\n" +msgstr "(teade kustutatud)\n" + +#: gnokii/gnokii.c:1457 gnokii/gnokii.c:1569 gnokii/gnokii.c:1635 +#: gnokii/gnokii.c:2723 gnokii/gnokii.c:2833 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "%s mudelis pole see funktsioon rakendatud!\n" + +#: gnokii/gnokii.c:1463 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "Sobimatu asukoht: %s %d\n" + +#: gnokii/gnokii.c:1469 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "SMS asukoht %s %d on tühi.\n" + +#: gnokii/gnokii.c:1475 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"LaeSMS %s %d ebõnnestus!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1545 +#, c-format +msgid "Unknown memory type %s (use ME,SM,....)!\n" +msgstr "Tundmatu mälu tüüp %s (kasuta ME,SM,....)!\n" + +#: gnokii/gnokii.c:1566 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "Kustutatud SMS %s %d\n" + +#: gnokii/gnokii.c:1573 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"KustutaSMS %s %d ei õnnestunud!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1624 +msgid "Enter your code: " +msgstr "Sisesta oma kood: " + +#: gnokii/gnokii.c:1631 +msgid "Error: invalid code.\n" +msgstr "VIGA: Vale kood.\n" + +#: gnokii/gnokii.c:1633 +msgid "Code ok.\n" +msgstr "Kood OK.\n" + +#: gnokii/gnokii.c:1637 +msgid "Other error.\n" +msgstr "Muu viga.\n" + +#: gnokii/gnokii.c:1653 +msgid "Security code status: " +msgstr "Turvakoodi olek:" + +#: gnokii/gnokii.c:1755 +msgid "Sending operator logo.\n" +msgstr "Saadan operaatori logo.\n" + +#: gnokii/gnokii.c:1759 +msgid "Sending caller line identification logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1761 +msgid "You should specify what kind of logo to send!\n" +msgstr "" + +#: gnokii/gnokii.c:1780 +#, c-format +msgid "Operator code: %s\n" +msgstr "Operaatori kood: %s\n" + +#: gnokii/gnokii.c:1829 +#, c-format +msgid "Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? " +msgstr "" + +#: gnokii/gnokii.c:1837 +msgid "Enter name of new file: " +msgstr "" + +#: gnokii/gnokii.c:1847 +#, c-format +msgid "Failed to write file \"%s\"\n" +msgstr "" + +#: gnokii/gnokii.c:1898 +msgid "Getting Logo\n" +msgstr "Võtan logo\n" + +#: gnokii/gnokii.c:1905 +msgid "Dealer welcome note " +msgstr "" + +#: gnokii/gnokii.c:1906 +msgid "Welcome note " +msgstr "" + +#: gnokii/gnokii.c:1911 +#, c-format +msgid "currently set to \"%s\"\n" +msgstr "hetkel seatud \"%s\"\n" + +#: gnokii/gnokii.c:1969 +msgid "Function not implemented !\n" +msgstr "See funktsioon pole rakendatud!\n" + +#: gnokii/gnokii.c:1972 +msgid "This kind of logo is not supported !\n" +msgstr "Sellist tüüpi logo toetus pole rakendatud !\n" + +#: gnokii/gnokii.c:1975 +msgid "Error getting logo !\n" +msgstr "Viga logo võtmisel !\n" + +#: gnokii/gnokii.c:1981 +msgid "What kind of logo do you want to get ?\n" +msgstr "" + +#: gnokii/gnokii.c:1998 +#, c-format +msgid "Failed to read file \"%s\"\n" +msgstr "" + +#: gnokii/gnokii.c:2000 +#, c-format +msgid "" +"Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n" +msgstr "" +"Vale värvide kogus \"%s\" logofailis (toetatud on ainult 2 värvi)!\n" + +#: gnokii/gnokii.c:2002 +#, c-format +msgid "Wrong colors in \"%s\" logofile !\n" +msgstr "\"%s\" logofailis on valed värvid !\n" + +#: gnokii/gnokii.c:2004 +#, c-format +msgid "Invalid format of \"%s\" logofile !\n" +msgstr "Sobimatu formaat \"%s\" logofailile !\n" + +#: gnokii/gnokii.c:2006 +#, c-format +msgid "Sorry, gnokii doesn't support used subformat in file \"%s\" !\n" +msgstr "" + +#: gnokii/gnokii.c:2008 +#, c-format +msgid "\"%s\" logofile is too short !\n" +msgstr "\"%s\" logofail on liiga lühike !\n" + +#: gnokii/gnokii.c:2010 +msgid "" +"Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 " +"and 72x28 !\n" +msgstr "" + +#: gnokii/gnokii.c:2090 +msgid "Setting Logo.\n" +msgstr "Määran logo.\n" + +#: gnokii/gnokii.c:2104 +msgid "Removing Logo.\n" +msgstr "Eemaldan logo.\n" + +#: gnokii/gnokii.c:2108 +msgid "What kind of logo do you want to set ?\n" +msgstr "" + +#: gnokii/gnokii.c:2124 +msgid "Error setting" +msgstr "" + +#: gnokii/gnokii.c:2125 +msgid " dealer" +msgstr "" + +#: gnokii/gnokii.c:2126 +msgid " welcome note - " +msgstr "" + +#: gnokii/gnokii.c:2144 +msgid "SIM card and PIN is required\n" +msgstr "" + +#: gnokii/gnokii.c:2148 +#, c-format +msgid "too long, truncated to \"%s\" (length %i)\n" +msgstr "liiga pikk, lühendatud \"%s\" (pikkus %i)\n" + +#: gnokii/gnokii.c:2156 +msgid "Error setting startup logo - SIM card and PIN is required\n" +msgstr "" + +#: gnokii/gnokii.c:2164 +msgid "Done.\n" +msgstr "Tehtud.\n" + +#: gnokii/gnokii.c:2166 +msgid "Function not implemented.\n" +msgstr "See funktsioon pole rakendatud.\n" + +#: gnokii/gnokii.c:2168 +msgid "This kind of logo is not supported.\n" +msgstr "" + +#: gnokii/gnokii.c:2170 +msgid "Error !\n" +msgstr "Viga !\n" + +#: gnokii/gnokii.c:2247 +msgid " Type of the note: " +msgstr " Märke tüüp :" + +#: gnokii/gnokii.c:2252 +msgid "Reminder\n" +msgstr "Meeldetuletus\n" + +#: gnokii/gnokii.c:2256 +msgid "Call\n" +msgstr "Kõne\n" + +#: gnokii/gnokii.c:2260 +msgid "Meeting\n" +msgstr "Koosolek\n" + +#: gnokii/gnokii.c:2264 +msgid "Birthday\n" +msgstr "Sünnipäev\n" + +#: gnokii/gnokii.c:2297 +msgid "The calendar note can not be read\n" +msgstr "Kalendri kirjet ei saa lugeda\n" + +#: gnokii/gnokii.c:2315 +msgid "Failed to load vCalendar file.\n" +msgstr "" + +#: gnokii/gnokii.c:2323 gnokii/gnokii.c:3027 +msgid "Succesfully written!\n" +msgstr "Edukalt kirjutatud!\n" + +#: gnokii/gnokii.c:2325 +msgid "Failed to write calendar note!\n" +msgstr "Kalendri kirje kirjutamine ebaõnnestus!\n" + +#: gnokii/gnokii.c:2344 +msgid " Calendar note deleted.\n" +msgstr " Kalendri kirje kustutatud.\n" + +#: gnokii/gnokii.c:2347 +msgid "The calendar note can not be deleted\n" +msgstr "Kalendri kirjet ei saa kustutada\n" + +#: gnokii/gnokii.c:2416 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Kuupäev: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:2417 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Kellaaeg: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2453 +#, c-format +msgid "Alarm: %s\n" +msgstr "Äratus: %s\n" + +#: gnokii/gnokii.c:2454 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Kellaaeg: %02d:%02d\n" + +#: gnokii/gnokii.c:2496 +msgid "Entering monitor mode...\n" +msgstr "Siirdun monitooringu olekusse...\n" + +#: gnokii/gnokii.c:2497 +msgid "Initialising GSM interface...\n" +msgstr "Initsialiseerin GSM liidest...\n" + +#: gnokii/gnokii.c:2511 +#, c-format +msgid "RFLevel: %d\n" +msgstr "Väljatugevus: %d \"pulka\"\n" + +#: gnokii/gnokii.c:2514 +#, c-format +msgid "Battery: %d\n" +msgstr "Aku: %d \"pulka\"\n" + +#: gnokii/gnokii.c:2517 +#, c-format +msgid "Power Source: %s\n" +msgstr "Toiteallikas: %s\n" + +#: gnokii/gnokii.c:2517 +msgid "AC/DC" +msgstr "Vahelduvvool/Alalisvool" + +#: gnokii/gnokii.c:2517 +msgid "battery" +msgstr "aku" + +#: gnokii/gnokii.c:2520 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "Kaardi mälukasutus : kasutusel on %d mälupesa, kasutamata %d mälupesa.\n" + +#: gnokii/gnokii.c:2523 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefoni mälukasutus: kasutusel on %d mälupesa, kasutamata %d mälupesa.\n" + +#: gnokii/gnokii.c:2526 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2529 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2532 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2535 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2538 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2541 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2544 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: Kasutusel %d, Vaba %d\n" + +#: gnokii/gnokii.c:2547 +#, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "Tekstisõnumid: lugemata sõnumeid %d, kokku sõnumeid %d.\n" + +#: gnokii/gnokii.c:2550 +#, c-format +msgid "Incoming call: %s\n" +msgstr "Saabuv kõne: %s\n" + +#: gnokii/gnokii.c:2553 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "Võrk: %s (%s), LAC: %s, KärjeID: %s\n" + +#: gnokii/gnokii.c:2556 +#, c-format +msgid "Cell broadcast received on channel %d: %s\n" +msgstr "Kanalil %d: saabus võrguteade %s\n" + +#: gnokii/gnokii.c:2561 +msgid "Leaving monitor mode...\n" +msgstr "Lahkun monitooringu olekust...\n" + +#: gnokii/gnokii.c:2586 +msgid "Entering display monitoring mode...\n" +msgstr "Siirdun monitooringu olekusse...\n" + +#: gnokii/gnokii.c:2594 +msgid "Leaving display monitor mode...\n" +msgstr "" + +#: gnokii/gnokii.c:2598 gnokii/gnokii.c:2600 +msgid "Error!\n" +msgstr "Viga!\n" + +#: gnokii/gnokii.c:2649 +#, c-format +msgid "Profile number must be value from 1 to %d!\n" +msgstr "Profiili number peab olema vahemikust 1 kuni %d!\n" + +#: gnokii/gnokii.c:2656 +#, c-format +msgid "This phone supports only %d profiles!\n" +msgstr "See telefon toetab ainult %d profiile!\n" + +#: gnokii/gnokii.c:2728 +msgid "Unspecified error\n" +msgstr "Dokumenteerimata viga\n" + +#: gnokii/gnokii.c:2838 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "Mälu tüüp %s pole toetatud!\n" + +#: gnokii/gnokii.c:2843 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Vale asukoht või muu viga!(%d)\n" + +#: gnokii/gnokii.c:2902 gnokii/gnokii.c:2917 gnokii/gnokii.c:2935 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Formaadi probleem real %d [%s]\n" + +#: gnokii/gnokii.c:2946 +msgid "Location busy. " +msgstr "" + +#: gnokii/gnokii.c:2956 +#, c-format +msgid "Unknown error (%d)\n" +msgstr "Tundmatu viga (%d)\n" + +#: gnokii/gnokii.c:2967 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Salvestamine õnnestus: mälu tüüp: %s, asukoht: %d, nimi: %s, number: %s\n" + +#: gnokii/gnokii.c:2969 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Salvestamine(%d) EBAÕNNESTUS: mälu tüüp: %s, asukoht: %d, nimi: %s, number: " +"%s\n" + +#: gnokii/gnokii.c:2989 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "Kiirvalik nr. %d: %d:%d\n" + +#: gnokii/gnokii.c:3108 +#, c-format +msgid "IMEI: %s\n" +msgstr "" + +#: gnokii/gnokii.c:3109 +#, c-format +msgid "Model: %s\n" +msgstr "Mudel: %s\n" + +#: gnokii/gnokii.c:3110 +#, c-format +msgid "Revision: %s\n" +msgstr "Versioon: %s\n" + +#: gnokii/gnokii.c:3142 +msgid "What kind of reset do you want??\n" +msgstr "" + +#: gnokii/gnokii.c:3205 gnokii/gnokii.c:3231 +msgid "Failed to load ringtone.\n" +msgstr "" + +#: gnokii/gnokii.c:3244 +msgid "Send failed\n" +msgstr "Saatmine ebaõnnestus!\n" + +#: gnokii/gnokii.c:3271 +msgid "Key press simulation failed.\n" +msgstr "" + +#: gnokiid/gnokiid.c:56 +#, c-format +msgid "" +"gnokiid Version %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Versioon %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Eestikeelne tõlge Hans Mõtshärg , 2000\n" +"Kompileeritud %s %s telefonimudelile %s, ühendus pordis %s \n" + +#: gnokiid/gnokiid.c:68 +msgid "" +" usage: gnokiid {--help|--version}\n" +" --help display usage information. --version " +" displays version and copyright information. --debug " +"uses stdin/stdout for virtual modem comms.\n" +msgstr "" + +#: common/virtmodem.c:119 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: common/virtmodem.c:126 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: common/virtmodem.c:131 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: common/virtmodem.c:136 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "" + +#: common/virtmodem.c:229 +msgid "Couldn't open pty!\n" +msgstr "" + +#: common/virtmodem.c:237 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "gnokiid ei tohiks setuid root õigusega installerida!\n" + +#: common/virtmodem.c:242 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "" + +#: common/virtmodem.c:304 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM_LinkOK ei tekkinud. Lõpetan. \n" + +#: xgnokii/xgnokii.c:214 +msgid "Reading caller groups names ..." +msgstr "Loen helistajagruppide nimesid...." + +#: xgnokii/xgnokii.c:218 xgnokii/xgnokii.c:1045 +msgid "Familly" +msgstr "Perekond" + +#: xgnokii/xgnokii.c:219 xgnokii/xgnokii.c:1057 +msgid "VIP" +msgstr "" + +#: xgnokii/xgnokii.c:220 xgnokii/xgnokii.c:1069 +msgid "Friends" +msgstr "Sõbrad" + +#: xgnokii/xgnokii.c:221 xgnokii/xgnokii.c:1081 +msgid "Colleagues" +msgstr "Kolleegid" + +#: xgnokii/xgnokii.c:222 xgnokii/xgnokii.c:1093 +msgid "Other" +msgstr "Muud" + +#: xgnokii/xgnokii.c:223 +msgid "No group" +msgstr "Grupita" + +#: xgnokii/xgnokii.c:348 +msgid "Short Message received" +msgstr "Saabus Lühisõnum" + +#: xgnokii/xgnokii.c:354 +msgid "Working ..." +msgstr "Toimetan..." + +#: xgnokii/xgnokii.c:371 +msgid "Call in progress" +msgstr "kõne käimas" + +#: xgnokii/xgnokii.c:384 +msgid "Hide" +msgstr "Peida" + +#: xgnokii/xgnokii.c:481 +#, c-format +msgid "" +"Outgoing call in progress:\n" +"Time: %s" +msgstr "" +"Kõne on käimas:\n" +"Aeg: %s" + +#: xgnokii/xgnokii.c:484 +#, c-format +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "" +"Saabuv kõne: %s\n" +"Kellaaeg: %s" + +#: xgnokii/xgnokii.c:537 xgnokii/xgnokii_sms.c:687 +#, c-format +msgid "Set %d" +msgstr "Sea %d" + +#: xgnokii/xgnokii.c:559 xgnokii/xgnokii.c:1466 +msgid "E-Mail" +msgstr "" + +#: xgnokii/xgnokii.c:571 +msgid "Voice" +msgstr "Kõne" + +#: xgnokii/xgnokii.c:582 xgnokii/xgnokii.c:1496 +msgid "1 h" +msgstr "1 t" + +#: xgnokii/xgnokii.c:586 xgnokii/xgnokii.c:1503 +msgid "6 h" +msgstr "6 t" + +#: xgnokii/xgnokii.c:590 xgnokii/xgnokii.c:606 xgnokii/xgnokii.c:1510 +msgid "24 h" +msgstr "24 t" + +#: xgnokii/xgnokii.c:594 xgnokii/xgnokii.c:1517 +msgid "72 h" +msgstr "72 t" + +#: xgnokii/xgnokii.c:602 +msgid "Max. time" +msgstr "Max. aeg" + +#: xgnokii/xgnokii.c:649 +msgid "Reading SMS centers ..." +msgstr "Laadin SMS keskusi ..." + +#: xgnokii/xgnokii.c:910 +msgid "SMS not supported!" +msgstr "SMS pole toetatud!" + +#: xgnokii/xgnokii.c:918 +msgid "Calendar not supported!" +msgstr "Kalender pole toetatud!" + +#: xgnokii/xgnokii.c:1106 +msgid "Error writing configuration file!" +msgstr "Viga konfiguratsioonifaili salvestamisel!" + +#: xgnokii/xgnokii.c:1118 xgnokii/xgnokii_contacts.c:3025 +msgid "Contacts" +msgstr "Kontaktid" + +#: xgnokii/xgnokii.c:1124 xgnokii/xgnokii.c:1902 +msgid "SMS" +msgstr "Lühisõnumid" + +#: xgnokii/xgnokii.c:1129 xgnokii/xgnokii_calendar.c:867 +msgid "Calendar" +msgstr "Kalender" + +#: xgnokii/xgnokii.c:1134 xgnokii/xgnokii_logos.c:1339 +msgid "Logos" +msgstr "Logod" + +#: xgnokii/xgnokii.c:1140 +msgid "DTMF" +msgstr "DTMF" + +#: xgnokii/xgnokii.c:1145 xgnokii/xgnokii_speed.c:559 +msgid "Speed Dial" +msgstr "Kiirvalik" + +#: xgnokii/xgnokii.c:1150 +msgid "Keyboard" +msgstr "Klaviatuur" + +#: xgnokii/xgnokii.c:1155 xgnokii/xgnokii_netmon.c:317 +msgid "Net Monitor" +msgstr "Võrgu Monitor" + +#: xgnokii/xgnokii.c:1160 +msgid "Data calls" +msgstr "Andmekõned" + +#: xgnokii/xgnokii.c:1169 xgnokii/xgnokii.c:1629 +msgid "Options" +msgstr "Valikud" + +#: xgnokii/xgnokii.c:1179 xgnokii/xgnokii.c:2207 +msgid "Help" +msgstr "Abi" + +#: xgnokii/xgnokii.c:1185 xgnokii/xgnokii.c:1202 +msgid "About" +msgstr "Üldist" + +#: xgnokii/xgnokii.c:1206 xgnokii/xgnokii.c:1390 +#: xgnokii/xgnokii_calendar.c:495 xgnokii/xgnokii_calendar.c:541 +#: xgnokii/xgnokii_calendar.c:616 xgnokii/xgnokii_calendar.c:766 +#: xgnokii/xgnokii_contacts.c:839 xgnokii/xgnokii_contacts.c:1035 +#: xgnokii/xgnokii_contacts.c:1400 xgnokii/xgnokii_contacts.c:2846 +#: xgnokii/xgnokii_sms.c:480 +msgid "Ok" +msgstr "Ok" + +#: xgnokii/xgnokii.c:1219 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999,2000 Pavel Janík ml.,\n" +"Hugh Blemings, Jan Derfinak and others\n" +"xgnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no waranty for xgnokii. See GPL for details.\n" +msgstr "" + +#: xgnokii/xgnokii.c:1384 +msgid "Edit SMS Setting" +msgstr "Muuda SMS seadeid" + +#: xgnokii/xgnokii.c:1398 xgnokii/xgnokii_calendar.c:504 +#: xgnokii/xgnokii_calendar.c:550 xgnokii/xgnokii_calendar.c:624 +#: xgnokii/xgnokii_calendar.c:774 xgnokii/xgnokii_common.c:64 +#: xgnokii/xgnokii_common.c:150 xgnokii/xgnokii_contacts.c:847 +#: xgnokii/xgnokii_contacts.c:1043 xgnokii/xgnokii_contacts.c:1272 +#: xgnokii/xgnokii_contacts.c:1318 xgnokii/xgnokii_contacts.c:1409 +#: xgnokii/xgnokii_contacts.c:1682 xgnokii/xgnokii_contacts.c:1797 +#: xgnokii/xgnokii_contacts.c:2853 xgnokii/xgnokii_sms.c:488 +msgid "Cancel" +msgstr "Tühista" + +#: xgnokii/xgnokii.c:1411 +msgid "Set's name:" +msgstr "Seade nimi:" + +#: xgnokii/xgnokii.c:1424 +msgid "Center:" +msgstr "Keskus:" + +#: xgnokii/xgnokii.c:1437 +msgid "Sending Format:" +msgstr "Saate Formaat:" + +#: xgnokii/xgnokii.c:1481 +msgid "Validity Period:" +msgstr "Kehtivus periood:" + +#: xgnokii/xgnokii.c:1489 +msgid "Max. Time" +msgstr "Max. Aeg" + +#: xgnokii/xgnokii.c:1626 +msgid "Set's name" +msgstr "Seade nimi" + +#: xgnokii/xgnokii.c:1626 +msgid "Center number" +msgstr "Keskuse number" + +#: xgnokii/xgnokii.c:1626 +msgid "Format" +msgstr "Formaat" + +#: xgnokii/xgnokii.c:1626 +msgid "Validity" +msgstr "Kehtivus" + +#: xgnokii/xgnokii.c:1634 +msgid "Apply" +msgstr "Kehtesta" + +#: xgnokii/xgnokii.c:1643 xgnokii/xgnokii_contacts.c:1666 +#: xgnokii/xgnokii_dtmf.c:178 +msgid "Save" +msgstr "Salvesta" + +#: xgnokii/xgnokii.c:1650 +msgid "Close" +msgstr "Sulge" + +#: xgnokii/xgnokii.c:1665 +msgid "Phone and connection type" +msgstr "Telefon ja ühenduse tüüp" + +#: xgnokii/xgnokii.c:1672 +msgid "Connection" +msgstr "Ühendus" + +#: xgnokii/xgnokii.c:1679 +msgid "Port:" +msgstr "Pordis:" + +#: xgnokii/xgnokii.c:1694 xgnokii/xgnokii.c:1766 +msgid "Model:" +msgstr "Mudel:" + +#: xgnokii/xgnokii.c:1709 +msgid "Init length:" +msgstr "Init pikkus:" + +#: xgnokii/xgnokii.c:1724 +msgid "Bindir:" +msgstr "BIN kataloog:" + +#: xgnokii/xgnokii.c:1739 +msgid "Connection:" +msgstr "Ühendus:" + +#: xgnokii/xgnokii.c:1743 +msgid "infrared" +msgstr "infrapunane" + +#: xgnokii/xgnokii.c:1747 +msgid "serial" +msgstr "kaabliga" + +#: xgnokii/xgnokii.c:1752 +msgid "Phone information" +msgstr "Telefoni info" + +#: xgnokii/xgnokii.c:1781 +msgid "Version:" +msgstr "Versioon:" + +#: xgnokii/xgnokii.c:1796 +msgid "Revision:" +msgstr "Revision:" + +#: xgnokii/xgnokii.c:1811 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1826 +msgid "Names length:" +msgstr "Nime pikkus:" + +#: xgnokii/xgnokii.c:1834 +msgid "SIM:" +msgstr "Kaardil:" + +#: xgnokii/xgnokii.c:1852 +msgid "Phone:" +msgstr "Telefonis:" + +#: xgnokii/xgnokii.c:1859 +msgid "Alarm setting" +msgstr "Äratuse seaded" + +#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii.c:1873 +#: xgnokii/xgnokii_calendar.c:688 xgnokii/xgnokii_calendar.c:863 +msgid "Alarm" +msgstr "Meenutus" + +#: xgnokii/xgnokii.c:1896 xgnokii/xgnokii_sms.c:1544 +msgid "Short Message Service" +msgstr "Lühisõnumi teenus" + +#: xgnokii/xgnokii.c:1930 +msgid "Edit" +msgstr "Redigeeri" + +#: xgnokii/xgnokii.c:1944 +msgid "Business Card" +msgstr "Visiitkaart" + +#: xgnokii/xgnokii.c:1950 +msgid "User" +msgstr "Kasutaja" + +#: xgnokii/xgnokii.c:1968 xgnokii/xgnokii_contacts.c:860 +msgid "Name:" +msgstr "Nimi:" + +#: xgnokii/xgnokii.c:1994 +msgid "Title:" +msgstr "Amet:" + +#: xgnokii/xgnokii.c:2020 +msgid "Company:" +msgstr "Ettevõte:" + +#: xgnokii/xgnokii.c:2046 +msgid "Telephone:" +msgstr "Telefon:" + +#: xgnokii/xgnokii.c:2071 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:2096 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:2122 +msgid "Address:" +msgstr "Aadress:" + +#: xgnokii/xgnokii.c:2146 +msgid "Caller groups names" +msgstr "Helistaja grupi nimi" + +#: xgnokii/xgnokii.c:2153 +msgid "Groups" +msgstr "Grupid" + +#: xgnokii/xgnokii.c:2162 +#, c-format +msgid "Group %d:" +msgstr "Grupp %d:" + +#: xgnokii/xgnokii.c:2175 +msgid "Mailbox" +msgstr "" + +#: xgnokii/xgnokii.c:2182 +msgid "Mail" +msgstr "" + +#: xgnokii/xgnokii.c:2189 +msgid "Path to mailbox:" +msgstr "" + +#: xgnokii/xgnokii.c:2200 +msgid "Help viewer" +msgstr "Abi lehitseja" + +#: xgnokii/xgnokii.c:2214 +msgid "Viewer:" +msgstr "Lehitseja:" + +#: xgnokii/xgnokii_calendar.c:123 +msgid "Reminder" +msgstr "Meeldetuletus" + +#: xgnokii/xgnokii_calendar.c:130 +msgid "Call" +msgstr "Kõne" + +#: xgnokii/xgnokii_calendar.c:138 +msgid "Meeting" +msgstr "Koosolek" + +#: xgnokii/xgnokii_calendar.c:146 +msgid "Birthday" +msgstr "Sünnipäev" + +#: xgnokii/xgnokii_calendar.c:194 +msgid "Type: " +msgstr "Tüüp: " + +#: xgnokii/xgnokii_calendar.c:202 xgnokii/xgnokii_sms.c:384 +msgid "Date: " +msgstr "Kuupäev: " + +#: xgnokii/xgnokii_calendar.c:217 +msgid "Alarm: " +msgstr "Meenutus: " + +#: xgnokii/xgnokii_calendar.c:238 +msgid "Text: " +msgstr "Tekst: " + +#: xgnokii/xgnokii_calendar.c:488 xgnokii/xgnokii_calendar.c:534 +msgid "Choose date" +msgstr "Vali kuupäev" + +#: xgnokii/xgnokii_calendar.c:571 +msgid "Alarm time:" +msgstr "Meenutuse aeg:" + +#: xgnokii/xgnokii_calendar.c:609 xgnokii/xgnokii_calendar.c:929 +msgid "Add reminder" +msgstr "Lisa meenutus" + +#: xgnokii/xgnokii_calendar.c:641 +msgid "Date:" +msgstr "Kuupäev:" + +#: xgnokii/xgnokii_calendar.c:676 +msgid "Subject:" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:759 +msgid "Delete calendar note" +msgstr "Kustuta kalendri kirje" + +#: xgnokii/xgnokii_calendar.c:791 +msgid "Do you want to delete selected note(s)?" +msgstr "Kas soovid valitud kirje(d) kustutada?" + +#: xgnokii/xgnokii_calendar.c:826 xgnokii/xgnokii_contacts.c:2980 +#: xgnokii/xgnokii_dtmf.c:217 xgnokii/xgnokii_logos.c:1292 +#: xgnokii/xgnokii_netmon.c:259 xgnokii/xgnokii_sms.c:1121 +#: xgnokii/xgnokii_sms.c:1507 xgnokii/xgnokii_speed.c:527 +#: xgnokii/xgnokii_xkeyb.c:242 +msgid "/_File" +msgstr "/_Fail" + +#: xgnokii/xgnokii_calendar.c:827 xgnokii/xgnokii_contacts.c:2981 +#: xgnokii/xgnokii_speed.c:528 +msgid "/File/_Read from phone" +msgstr "/Fail/Loe telefonist" + +#: xgnokii/xgnokii_calendar.c:828 xgnokii/xgnokii_contacts.c:2982 +#: xgnokii/xgnokii_speed.c:529 +msgid "/File/_Save to phone" +msgstr "/Fail/_Salvesta telefoni" + +#: xgnokii/xgnokii_calendar.c:829 xgnokii/xgnokii_contacts.c:2983 +#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_logos.c:1296 +#: xgnokii/xgnokii_sms.c:1124 xgnokii/xgnokii_sms.c:1510 +#: xgnokii/xgnokii_speed.c:530 +msgid "/File/Sep1" +msgstr "/Fail/Sep1" + +#: xgnokii/xgnokii_calendar.c:830 +msgid "/File/Send via S_MS" +msgstr "/Fail/Saada S_MS abil" + +#: xgnokii/xgnokii_calendar.c:831 xgnokii/xgnokii_contacts.c:2986 +#: xgnokii/xgnokii_logos.c:1300 xgnokii/xgnokii_sms.c:1127 +#: xgnokii/xgnokii_speed.c:533 +msgid "/File/Sep2" +msgstr "/Fail/Sep2" + +#: xgnokii/xgnokii_calendar.c:832 xgnokii/xgnokii_contacts.c:2984 +#: xgnokii/xgnokii_speed.c:531 +msgid "/File/_Import from file" +msgstr "/Fail/_Impordi failist" + +#: xgnokii/xgnokii_calendar.c:833 xgnokii/xgnokii_contacts.c:2985 +#: xgnokii/xgnokii_speed.c:532 +msgid "/File/_Export to file" +msgstr "/Fail/Salv_esta faili" + +#: xgnokii/xgnokii_calendar.c:834 +msgid "/File/Sep3" +msgstr "/Fail/Sep3" + +#: xgnokii/xgnokii_calendar.c:835 xgnokii/xgnokii_contacts.c:2987 +#: xgnokii/xgnokii_dtmf.c:221 xgnokii/xgnokii_logos.c:1301 +#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1128 +#: xgnokii/xgnokii_sms.c:1511 xgnokii/xgnokii_speed.c:534 +#: xgnokii/xgnokii_xkeyb.c:243 +msgid "/File/_Close" +msgstr "/Fail/Sulge" + +#: xgnokii/xgnokii_calendar.c:836 xgnokii/xgnokii_contacts.c:2988 +#: xgnokii/xgnokii_logos.c:1302 xgnokii/xgnokii_speed.c:535 +msgid "/_Edit" +msgstr "/R_edigeeri" + +#: xgnokii/xgnokii_calendar.c:837 +msgid "/Edit/Add _reminder" +msgstr "/Redigeeri/Lisa meenutus" + +#: xgnokii/xgnokii_calendar.c:838 +msgid "/Edit/Add _call" +msgstr "/Redigeeri/Lisa kõne" + +#: xgnokii/xgnokii_calendar.c:839 +msgid "/Edit/Add _meeting" +msgstr "/Redigeeri/Lisa koosolek" + +#: xgnokii/xgnokii_calendar.c:840 +msgid "/Edit/Add _birthday" +msgstr "/Redigeeri/Lisa sünnipäev" + +#: xgnokii/xgnokii_calendar.c:841 xgnokii/xgnokii_contacts.c:2991 +#: xgnokii/xgnokii_speed.c:536 +msgid "/Edit/_Edit" +msgstr "/Redigeeri/Paranda" + +#: xgnokii/xgnokii_calendar.c:842 xgnokii/xgnokii_contacts.c:2992 +msgid "/Edit/_Delete" +msgstr "/Redigeeri/Kustuta" + +#: xgnokii/xgnokii_calendar.c:843 xgnokii/xgnokii_contacts.c:2995 +#: xgnokii/xgnokii_logos.c:1310 +msgid "/Edit/Sep4" +msgstr "/Redigeeri/Sep4" + +#: xgnokii/xgnokii_calendar.c:844 xgnokii/xgnokii_contacts.c:2999 +msgid "/Edit/Select _all" +msgstr "/Redigeeri/V_ali kõik" + +#: xgnokii/xgnokii_calendar.c:845 xgnokii/xgnokii_contacts.c:3002 +#: xgnokii/xgnokii_dtmf.c:222 xgnokii/xgnokii_netmon.c:264 +#: xgnokii/xgnokii_sms.c:1129 xgnokii/xgnokii_sms.c:1519 +#: xgnokii/xgnokii_speed.c:537 xgnokii/xgnokii_xkeyb.c:244 +msgid "/_Help" +msgstr "/Abi" + +#: xgnokii/xgnokii_calendar.c:846 xgnokii/xgnokii_contacts.c:3003 +#: xgnokii/xgnokii_dtmf.c:223 xgnokii/xgnokii_netmon.c:265 +#: xgnokii/xgnokii_sms.c:1130 xgnokii/xgnokii_sms.c:1520 +#: xgnokii/xgnokii_speed.c:538 xgnokii/xgnokii_xkeyb.c:245 +msgid "/Help/_Help" +msgstr "/Abi/Abi" + +#: xgnokii/xgnokii_calendar.c:847 xgnokii/xgnokii_contacts.c:3004 +#: xgnokii/xgnokii_dtmf.c:224 xgnokii/xgnokii_netmon.c:266 +#: xgnokii/xgnokii_sms.c:1131 xgnokii/xgnokii_sms.c:1521 +#: xgnokii/xgnokii_speed.c:539 xgnokii/xgnokii_xkeyb.c:246 +msgid "/Help/_About" +msgstr "/Abi/Üldine" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "#" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Type" +msgstr "Tüüp" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Date" +msgstr "Kuupäev" + +#: xgnokii/xgnokii_calendar.c:863 xgnokii/xgnokii_contacts.c:1350 +#: xgnokii/xgnokii_contacts.c:3020 xgnokii/xgnokii_speed.c:554 +msgid "Number" +msgstr "Number" + +#: xgnokii/xgnokii_calendar.c:896 xgnokii/xgnokii_contacts.c:3056 +#: xgnokii/xgnokii_speed.c:590 +msgid "Read from phone" +msgstr "Loe telefonist" + +#: xgnokii/xgnokii_calendar.c:900 xgnokii/xgnokii_contacts.c:3060 +#: xgnokii/xgnokii_speed.c:594 +msgid "Save to phone" +msgstr "Salvesta telefoni" + +#: xgnokii/xgnokii_calendar.c:907 +msgid "Send via SMS" +msgstr "Saada SMS abil" + +#: xgnokii/xgnokii_calendar.c:914 xgnokii/xgnokii_contacts.c:3067 +#: xgnokii/xgnokii_logos.c:1386 xgnokii/xgnokii_speed.c:601 +msgid "Import from file" +msgstr "Ava fail" + +#: xgnokii/xgnokii_calendar.c:918 xgnokii/xgnokii_contacts.c:3071 +#: xgnokii/xgnokii_logos.c:1390 xgnokii/xgnokii_speed.c:605 +msgid "Export to file" +msgstr "Salvesta fail" + +#: xgnokii/xgnokii_calendar.c:925 +msgid "Edit note" +msgstr "Muuda kirjet" + +#: xgnokii/xgnokii_calendar.c:933 +msgid "Add call" +msgstr "Lisa kõne" + +#: xgnokii/xgnokii_calendar.c:937 +msgid "Add meeting" +msgstr "Lisa koosolek" + +#: xgnokii/xgnokii_calendar.c:941 +msgid "Add birthday" +msgstr "Lisa sünnipäev" + +#: xgnokii/xgnokii_calendar.c:945 +msgid "Delete note" +msgstr "Kustuta kirje" + +#: xgnokii/xgnokii_calendar.c:1005 xgnokii/xgnokii_contacts.c:2876 +#: xgnokii/xgnokii_contacts.c:3126 xgnokii/xgnokii_sms.c:1686 +#: xgnokii/xgnokii_speed.c:637 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "VIGA: %s: rida %d: Ei suuda eraldada mälu!\n" + +#: xgnokii/xgnokii_calendar.c:1034 xgnokii/xgnokii_sms.c:1719 +msgid "couldn't allocate colour" +msgstr "ei suuda värvi määratleda" + +#: xgnokii/xgnokii_cfg.c:80 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "HOIATUS: Ei leia HOME keskkonnamuutujat!\n" + +#: xgnokii/xgnokii_cfg.c:86 xgnokii/xgnokii_cfg.c:101 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "HOIATUS: Ei suuda eraldada mälu konfiguratsiooni lugemiseks!\n" + +#: xgnokii/xgnokii_cfg.c:185 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "VIGA: Ei leia HOME keskkonnamuutujat!\n" + +#: xgnokii/xgnokii_cfg.c:191 xgnokii/xgnokii_cfg.c:209 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "VIGA: Ei suuda eraldada konfiguratsiooni kirjutamiseks mälu!\n" + +#: xgnokii/xgnokii_cfg.c:197 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "VIGA: Ei suuda faili %s lugemiseks avada!\n" + +#: xgnokii/xgnokii_cfg.c:215 +msgid "ERROR: Can't write config file!\n" +msgstr "VIGA: Ei saa kirjutada konfiguratsioonifaili!\n" + +#: xgnokii/xgnokii_common.c:57 +msgid "Error" +msgstr "Viga" + +#: xgnokii/xgnokii_common.c:96 +msgid "Info" +msgstr "Hangin Infot ...." + +#: xgnokii/xgnokii_common.c:134 +msgid "Yes" +msgstr "Jah" + +#: xgnokii/xgnokii_common.c:143 +msgid "No" +msgstr "Ei" + +#: xgnokii/xgnokii_common.c:230 +#, c-format +msgid "Can't exec %s\n" +msgstr "Ei saa käivitada %s\n" + +#: xgnokii/xgnokii_contacts.c:246 xgnokii/xgnokii_contacts.c:279 +#: xgnokii/xgnokii_contacts.c:448 xgnokii/xgnokii_contacts.c:473 +#: xgnokii/xgnokii_contacts.c:613 xgnokii/xgnokii_contacts.c:635 +msgid "Can't change memory type!" +msgstr "Ei saa muuta mälu tüüpi!" + +#: xgnokii/xgnokii_contacts.c:290 xgnokii/xgnokii_contacts.c:337 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" +"SIM kaardile ei mahu nii pikk nimi, \n" +"lühendan nime, nii et mahuks kaardile!" + +#: xgnokii/xgnokii_contacts.c:484 xgnokii/xgnokii_contacts.c:523 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" +"SIM kaardile ei mahu nii pikk nimi, \n" +"lühendan nime, nii et mahuks kaardile!" + +#: xgnokii/xgnokii_contacts.c:729 +msgid "Can't find pattern!" +msgstr "Ei leia sobivust!" + +#: xgnokii/xgnokii_contacts.c:873 xgnokii/xgnokii_contacts.c:1418 +msgid "Number:" +msgstr "Number:" + +#: xgnokii/xgnokii_contacts.c:888 +msgid "Extended:" +msgstr "Laiendatud:" + +#: xgnokii/xgnokii_contacts.c:905 +msgid "Memory:" +msgstr "Mälu:" + +#: xgnokii/xgnokii_contacts.c:909 +msgid "phone" +msgstr "telefon" + +#: xgnokii/xgnokii_contacts.c:922 +msgid "Caller group:" +msgstr "Helistajagrupp:" + +#: xgnokii/xgnokii_contacts.c:939 xgnokii/xgnokii_contacts.c:3086 +#: xgnokii/xgnokii_speed.c:612 +msgid "Edit entry" +msgstr "Muuda kirjet" + +#: xgnokii/xgnokii_contacts.c:1028 +msgid "Delete entries" +msgstr "Kustuta kirjed" + +#: xgnokii/xgnokii_contacts.c:1060 +msgid "Do you want to delete selected entries?" +msgstr "Kas soovid valitud kirje kustutada?" + +#: xgnokii/xgnokii_contacts.c:1072 xgnokii/xgnokii_contacts.c:3078 +msgid "New entry" +msgstr "Uus kirje" + +#: xgnokii/xgnokii_contacts.c:1111 xgnokii/xgnokii_contacts.c:3082 +msgid "Duplicate entry" +msgstr "Kopeeri kirjet" + +#: xgnokii/xgnokii_contacts.c:1177 xgnokii/xgnokii_contacts.c:1187 +#: xgnokii/xgnokii_contacts.c:1212 +msgid "Can't find free memory." +msgstr "Ei leia vaba mälu." + +#: xgnokii/xgnokii_contacts.c:1256 +msgid "Changing memory type" +msgstr "Muudan mälu tüüpi" + +#: xgnokii/xgnokii_contacts.c:1263 +msgid "Continue" +msgstr "Jätka" + +#: xgnokii/xgnokii_contacts.c:1283 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" +"Kirje muutmisel telefonimälust SIM kaardile\n" +"võivad mõned kirjed muutuda lühemaks." + +#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:1309 +msgid "Find" +msgstr "Otsi" + +#: xgnokii/xgnokii_contacts.c:1331 +msgid "Pattern:" +msgstr "Mask:" + +#: xgnokii/xgnokii_contacts.c:1344 xgnokii/xgnokii_contacts.c:3020 +#: xgnokii/xgnokii_speed.c:554 +msgid "Name" +msgstr "Nimi" + +#: xgnokii/xgnokii_contacts.c:1394 xgnokii/xgnokii_contacts.c:3097 +msgid "Dial voice" +msgstr "Helista" + +#: xgnokii/xgnokii_contacts.c:1520 +msgid "Phone memory..." +msgstr "Telefoni mälu..." + +#: xgnokii/xgnokii_contacts.c:1531 +msgid "SIM memory..." +msgstr "SIM (kaardi) mälu..." + +#: xgnokii/xgnokii_contacts.c:1560 +msgid "Saving entries" +msgstr "Salvestan kirjeid" + +#: xgnokii/xgnokii_contacts.c:1594 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "%s: rida %d:Ei suuda kirjutada ME mälupessa %d! Viga: %d\n" + +#: xgnokii/xgnokii_contacts.c:1636 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "%s: rida %d:Ei suuda kirjutada SM mälupessa %d! Viga: %d\n" + +#: xgnokii/xgnokii_contacts.c:1659 +msgid "Save changes?" +msgstr "Salvesta muudatused?" + +#: xgnokii/xgnokii_contacts.c:1675 +msgid "Don't save" +msgstr "Ära salvesta" + +#: xgnokii/xgnokii_contacts.c:1699 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Do you want save these changes into phone?\n" +msgstr "" +"Tegid muudatusi\n" +"kontaktide kataloogis.\n" +"\n" +"\n" +"Kas soovid muudatused telefoni salvestada?\n" + +#: xgnokii/xgnokii_contacts.c:1760 +msgid "Which Extended Phonebook Entry?" +msgstr "Milline laienadatud telefoniraamatu kirje?" + +#: xgnokii/xgnokii_contacts.c:1766 +msgid "General" +msgstr "Üldine" + +#: xgnokii/xgnokii_contacts.c:1772 +msgid "Mobile" +msgstr "Mobiil" + +#: xgnokii/xgnokii_contacts.c:1778 +msgid "Work" +msgstr "Tööl" + +#: xgnokii/xgnokii_contacts.c:1790 +msgid "Home" +msgstr "Kodus" + +#: xgnokii/xgnokii_contacts.c:1883 xgnokii/xgnokii_contacts.c:1910 +#: xgnokii/xgnokii_contacts.c:2555 xgnokii/xgnokii_contacts.c:2579 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "%s: rida %d: Ei suuda mälu eraldada!\n" + +#: xgnokii/xgnokii_contacts.c:2005 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" +"Ei suuda tuvastada SM mälu olekut!\n" +"\n" +"oletan max SIM kirjete arvuks 100!\n" + +#: xgnokii/xgnokii_contacts.c:2030 +msgid "Getting entries" +msgstr "Loen kirjeid ...." + +#: xgnokii/xgnokii_contacts.c:2163 xgnokii/xgnokii_dtmf.c:128 +#: xgnokii/xgnokii_speed.c:426 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "Ei suuda faili %s kirjutamiseks avada!" + +#: xgnokii/xgnokii_contacts.c:2257 xgnokii/xgnokii_dtmf.c:161 +#: xgnokii/xgnokii_logos.c:1169 xgnokii/xgnokii_speed.c:468 +msgid "Overwrite file?" +msgstr "Kas kirjutan faili üle?" + +#: xgnokii/xgnokii_contacts.c:2258 xgnokii/xgnokii_dtmf.c:162 +#: xgnokii/xgnokii_logos.c:1170 xgnokii/xgnokii_speed.c:469 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" +"Fail %s on olemas.\n" +"Kas kirjutan üle?" + +#: xgnokii/xgnokii_contacts.c:2276 xgnokii/xgnokii_speed.c:487 +msgid "Export" +msgstr "Ekspordi" + +#: xgnokii/xgnokii_contacts.c:2476 xgnokii/xgnokii_dtmf.c:90 +#: xgnokii/xgnokii_speed.c:326 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "Ei suuda faili %s lugemiseks avada!" + +#: xgnokii/xgnokii_contacts.c:2530 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" +"Ei suuda tuvastada SM mälu olekut!\n" +"\n" +"max SIM kirjete arv on 100!\n" + +#: xgnokii/xgnokii_contacts.c:2645 xgnokii/xgnokii_speed.c:404 +msgid "Import" +msgstr "Impordi" + +#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_sms.c:1233 +msgid "Select contacts" +msgstr "Vali kontaktid" + +#: xgnokii/xgnokii_contacts.c:2989 +msgid "/Edit/_New" +msgstr "/Redigeeri/Uus" + +#: xgnokii/xgnokii_contacts.c:2990 +msgid "/Edit/D_uplicate" +msgstr "/Redigeeri/Palj_unda" + +#: xgnokii/xgnokii_contacts.c:2993 xgnokii/xgnokii_logos.c:1305 +msgid "/Edit/Sep3" +msgstr "/Redigeeri/Sep3" + +#: xgnokii/xgnokii_contacts.c:2994 +msgid "/Edit/_Change memory type" +msgstr "/Redigeeri/Muuda mälu tüüp" + +#: xgnokii/xgnokii_contacts.c:2996 +msgid "/Edit/_Find" +msgstr "/Redigeeri/Leia" + +#: xgnokii/xgnokii_contacts.c:2997 +msgid "/Edit/Find ne_xt" +msgstr "/Redigeeri/Leia järgmine" + +#: xgnokii/xgnokii_contacts.c:2998 +msgid "/Edit/Sep5" +msgstr "/Redigeeri/Sep5" + +#: xgnokii/xgnokii_contacts.c:3000 +msgid "/_Dial" +msgstr "/Vali numbri_d" + +#: xgnokii/xgnokii_contacts.c:3001 +msgid "/Dial/Dial _voice" +msgstr "/Vali numbrid/_Vali kõne" + +#: xgnokii/xgnokii_contacts.c:3020 +msgid "Memory" +msgstr "Mälu" + +#: xgnokii/xgnokii_contacts.c:3020 +msgid "Group" +msgstr "Grupp" + +#: xgnokii/xgnokii_contacts.c:3090 +msgid "Delete entry" +msgstr "Kustuta kirje" + +#: xgnokii/xgnokii_data.c:42 +msgid "" +"Data calls are currently\n" +"Disabled\n" +" " +msgstr "" +"Andmekõned on hetkel\n" +"Keelatud\n" +" " + +#: xgnokii/xgnokii_data.c:44 +msgid "" +"Data calls are currently\n" +"Enabled\n" +" " +msgstr "" +"Andmekõned on hetkel\n" +"Lubatud\n" +" " + +#: xgnokii/xgnokii_data.c:101 +msgid "Virtual Modem" +msgstr "" + +#: xgnokii/xgnokii_data.c:119 +msgid "Enable" +msgstr "Luba" + +#: xgnokii/xgnokii_data.c:125 +msgid "Disable" +msgstr "Keela" + +#: xgnokii/xgnokii_dtmf.c:108 +msgid "Load" +msgstr "Laadi" + +#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1293 +msgid "/File/_Open" +msgstr "/Fail/Ava" + +#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1294 +#: xgnokii/xgnokii_sms.c:1123 xgnokii/xgnokii_sms.c:1508 +msgid "/File/_Save" +msgstr "/Fail/_Salvesta" + +#: xgnokii/xgnokii_dtmf.c:245 +msgid "Dial Tone" +msgstr "Vali toon" + +#: xgnokii/xgnokii_logos.c:823 +#, c-format +msgid "" +"Error getting network info\n" +"(error=%d)" +msgstr "" +"Võrguinfo saamise viga\n" +"(viga=%d)" + +#: xgnokii/xgnokii_logos.c:862 +#, c-format +msgid "" +"Error getting bitmap\n" +"(error=%d)" +msgstr "" +"Pildi saamise viga\n" +"(viga=%d)" + +#: xgnokii/xgnokii_logos.c:907 +#, c-format +msgid "" +"Error setting bitmap\n" +"(error=%d)" +msgstr "" +"Pildi seadmise viga\n" +"(viga=%d)" + +#: xgnokii/xgnokii_logos.c:1141 +#, c-format +msgid "" +"Error saving file\n" +"(error=%d)" +msgstr "" +"Faili salvestamise viga\n" +"(viga=%d)" + +#: xgnokii/xgnokii_logos.c:1191 +#, c-format +msgid "Can't open file %s for reading !" +msgstr "Ei suuda faili %s lugemiseks avada!" + +#: xgnokii/xgnokii_logos.c:1200 +#, c-format +msgid "" +"Error reading file\n" +"(error=%d)" +msgstr "" +"Faili lugemise viga\n" +"(viga=%d)" + +#: xgnokii/xgnokii_logos.c:1295 +msgid "/File/Save _as ..." +msgstr "/Fail/Salvest_a nagu ..." + +#: xgnokii/xgnokii_logos.c:1297 +msgid "/File/_Get operator" +msgstr "/Fail/Tuvasta operaator" + +#: xgnokii/xgnokii_logos.c:1298 +msgid "/File/Get _logo" +msgstr "/Fail/Võta _logo" + +#: xgnokii/xgnokii_logos.c:1299 +msgid "/File/Se_t logo" +msgstr "/Fail/Sea logo" + +#: xgnokii/xgnokii_logos.c:1303 +msgid "/Edit/_Clear" +msgstr "/Redigeeri/Tühjenda" + +#: xgnokii/xgnokii_logos.c:1304 +msgid "/Edit/_Invert" +msgstr "/Redigeeri/Peegelpilt" + +#: xgnokii/xgnokii_logos.c:1306 +msgid "/Edit/_Up logo" +msgstr "/Redigeeri/Pilt samm üles" + +#: xgnokii/xgnokii_logos.c:1307 +msgid "/Edit/_Down logo" +msgstr "/Redigeeri/Pilt samm alla" + +#: xgnokii/xgnokii_logos.c:1308 +msgid "/Edit/_Left logo" +msgstr "/Redigeeri/Pi_lt samm vasakule" + +#: xgnokii/xgnokii_logos.c:1309 +msgid "/Edit/_Right logo" +msgstr "/Redigeeri/Pilt samm pa_remale" + +#: xgnokii/xgnokii_logos.c:1311 +msgid "/Edit/Flip _horizontal" +msgstr "/Redigeeri/Pööra _horisontaalis" + +#: xgnokii/xgnokii_logos.c:1312 +msgid "/Edit/Flip _vertical" +msgstr "/Redigeeri/Pööra _vertikaalis" + +#: xgnokii/xgnokii_logos.c:1604 +msgid "Load preview pixmap error, feature disabled." +msgstr "Eelvaate pildi laadimise viga, omadust ei kasutata." + +#: xgnokii/xgnokii_lowlevel.c:353 +#, c-format +msgid "%s: line %d: Can't get memory entry number %d from memory %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_lowlevel.c:874 +msgid "Connecting..." +msgstr "Kontakteerun...." + +#: xgnokii/xgnokii_lowlevel.c:907 +msgid "Refreshing SMSes..." +msgstr "Uuendan SMS'e ..." + +#: xgnokii/xgnokii_lowlevel.c:965 +msgid "Working..." +msgstr "Toimetan..." + +#: xgnokii/xgnokii_lowlevel.c:968 +#, c-format +msgid "Event %d failed with return code %d!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:261 +msgid "/_Tools" +msgstr "/_Tööriistad" + +#: xgnokii/xgnokii_netmon.c:262 +msgid "/Tools/Net monitor o_n" +msgstr "/Tööriistad/Võrgu mo_nitor peale" + +#: xgnokii/xgnokii_netmon.c:263 +msgid "/Tools/Net monitor o_ff" +msgstr "/Tööriistad/Võrgu monitor maha" + +#: xgnokii/xgnokii_netmon.c:380 xgnokii/xgnokii_netmon.c:383 +msgid "Active cell" +msgstr "Aktiivne kärg" + +#: xgnokii/xgnokii_netmon.c:386 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:389 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:392 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:395 +msgid "Prefered/Denied networks" +msgstr "Eelistatud/keelatud võrgud" + +#: xgnokii/xgnokii_netmon.c:398 +msgid "System information bits" +msgstr "Süsteemi informatsiooni bitid" + +#: xgnokii/xgnokii_netmon.c:401 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:404 +msgid "Cells info" +msgstr "Kärje info" + +#: xgnokii/xgnokii_netmon.c:407 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:417 +msgid "Uplink DTX" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:420 +msgid "BTS TEST" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:423 +msgid "CELL BARR-Flag" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:426 +msgid "Accumulator, Charge status" +msgstr "Aku, laadimise staatus" + +#: xgnokii/xgnokii_netmon.c:429 +msgid "?Constant voltage charging display" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:432 +msgid "?Battery full detection" +msgstr "?Aku laadumuse proov" + +#: xgnokii/xgnokii_netmon.c:435 +msgid "Accumulator" +msgstr "Aku" + +#: xgnokii/xgnokii_netmon.c:438 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:441 +msgid "Reset-Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:444 +msgid "Cause codes for last connection abortion" +msgstr "Viimase ühenduse katkestamise põhjuskoodid" + +#: xgnokii/xgnokii_netmon.c:454 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:457 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:460 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:463 +msgid "L2-Timeouts" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:466 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:469 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:475 +msgid "Memory status before reset" +msgstr "Mälu olek enne resetti" + +#: xgnokii/xgnokii_netmon.c:478 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:481 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:491 +msgid "Neighbourhood measurement" +msgstr "Keskkonnaparameetrite mõõtmine" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "Calls" +msgstr "Kõnesid" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "Temporary counters of DSP" +msgstr "DSP ajutised loendurid" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "Control of task information displays" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:503 +msgid "Information about task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:506 +msgid "Information about task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:509 +msgid "Information about task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:512 +msgid "Information about OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:515 +msgid "Information about current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:518 +msgid "Hardware version" +msgstr "Riistvara versioon" + +#: xgnokii/xgnokii_netmon.c:537 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:538 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:539 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:540 +msgid "C2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:541 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:542 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:543 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:544 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:545 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:546 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:547 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:578 +msgid "Page:" +msgstr "Leht:" + +#: xgnokii/xgnokii_sms.c:236 +msgid "report" +msgstr "raport" + +#: xgnokii/xgnokii_sms.c:241 +msgid "read" +msgstr "loetud" + +#: xgnokii/xgnokii_sms.c:246 +msgid "unread" +msgstr "lugemata" + +#: xgnokii/xgnokii_sms.c:306 +msgid "sent" +msgstr "saadetud" + +#: xgnokii/xgnokii_sms.c:308 +msgid "unsent" +msgstr "saatmata" + +#: xgnokii/xgnokii_sms.c:376 +msgid "From: " +msgstr "Saatja: " + +#: xgnokii/xgnokii_sms.c:473 +msgid "Delete SMS" +msgstr "Kustuta SMS" + +#: xgnokii/xgnokii_sms.c:505 +msgid "Do you want to delete selected SMS?" +msgstr "Kas soovid valitud SMS kustutada?" + +#: xgnokii/xgnokii_sms.c:529 +#, c-format +msgid "Cannot open mailbox %s for appending!" +msgstr "Ei suuda faili %s lisamiseks avada!" + +#: xgnokii/xgnokii_sms.c:543 +#, c-format +msgid "" +"Cannot save to mailbox %s.\n" +"%s is locked for process %d!" +msgstr "" +"Ei suuda salvestada %s mailbox'i.\n" +"%s on protsessi %d jaoks lukus!" + +#: xgnokii/xgnokii_sms.c:558 +#, c-format +msgid "Cannot lock mailbox %s!" +msgstr "Ei suuda %s mailbox'i lukustada!" + +#: xgnokii/xgnokii_sms.c:609 +#, c-format +msgid "Cannot unlock mailbox %s!" +msgstr "Ei suuda %s mailbox'i lukku vabastada!" + +#: xgnokii/xgnokii_sms.c:827 xgnokii/xgnokii_sms.c:958 +msgid "Address line contains illegal address!" +msgstr "Aadressi real on sobimatu aadress!" + +#: xgnokii/xgnokii_sms.c:930 +#, c-format +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "" +"SMS saatmine %s ebõnnestus!\n" +"(viga=%d)" + +#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_sms.c:1057 +#, c-format +msgid "Sending SMS to %s (%d/%d) ...\n" +msgstr "Saadan SMS'i %s (%d/%d) ...\n" + +#: xgnokii/xgnokii_sms.c:1084 +#, c-format +msgid "Sending SMS to %s ...\n" +msgstr "Saadan SMS'i %s ...\n" + +#: xgnokii/xgnokii_sms.c:1122 +msgid "/File/Sen_d" +msgstr "/Fail/Saa_da" + +#: xgnokii/xgnokii_sms.c:1125 +msgid "/File/Check _Names" +msgstr "/Fail/_Nime kontroll" + +#: xgnokii/xgnokii_sms.c:1126 +msgid "/File/C_ontacts" +msgstr "/Fail/K_ontaktid" + +#: xgnokii/xgnokii_sms.c:1185 +msgid "Send message" +msgstr "Saada sõnum" + +#: xgnokii/xgnokii_sms.c:1189 +msgid "Save message to outbox" +msgstr "Salvesta sõnum outbox'i" + +#: xgnokii/xgnokii_sms.c:1196 +msgid "Check names" +msgstr "Kontrolli nimesid" + +#: xgnokii/xgnokii_sms.c:1209 +msgid "To:" +msgstr "Saaja:" + +#: xgnokii/xgnokii_sms.c:1281 +msgid "Delivery report" +msgstr "Saateraport" + +#: xgnokii/xgnokii_sms.c:1285 +msgid "Send as Long SMS" +msgstr "Saada pika SMS'na" + +#: xgnokii/xgnokii_sms.c:1289 +msgid "SMS Center:" +msgstr "SMS Keskus:" + +#: xgnokii/xgnokii_sms.c:1308 +msgid "New Message" +msgstr "Uus sõnum" + +#: xgnokii/xgnokii_sms.c:1335 +msgid "Forward Message" +msgstr "Edasta sõnum" + +#: xgnokii/xgnokii_sms.c:1379 +msgid "Reply Message" +msgstr "Vasta sõnumile" + +#: xgnokii/xgnokii_sms.c:1415 xgnokii/xgnokii_sms.c:1586 +msgid "Bussiness Card" +msgstr "Visiitkaart" + +#: xgnokii/xgnokii_sms.c:1509 +msgid "/File/Save to mailbo_x" +msgstr "/Fail/Salvesta mailbo_xi" + +#: xgnokii/xgnokii_sms.c:1512 +msgid "/_Messages" +msgstr "/Sõnu_mid" + +#: xgnokii/xgnokii_sms.c:1513 +msgid "/_Messages/_New" +msgstr "/Sõnu_mid/Uus sõnum" + +#: xgnokii/xgnokii_sms.c:1514 +msgid "/_Messages/_Forward" +msgstr "/Sõnu_mid/Saada sõnum edasi" + +#: xgnokii/xgnokii_sms.c:1515 +msgid "/_Messages/_Reply" +msgstr "/Sõnu_mid/Vasta sõnumile" + +#: xgnokii/xgnokii_sms.c:1516 +msgid "/_Messages/_Delete" +msgstr "/Sõnu_mid/Kustuta sõnum" + +#: xgnokii/xgnokii_sms.c:1517 +msgid "/Messages/Sep3" +msgstr "/Sõnu_mid/Sep3" + +#: xgnokii/xgnokii_sms.c:1518 +msgid "/_Messages/_Bussiness card" +msgstr "/Sõnu_mid/Visiitkaart" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Status" +msgstr "Olek" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Date / Time" +msgstr "Kuupäev/Kellaaeg" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Sender" +msgstr "Saatja" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Message" +msgstr "Sõnum" + +#: xgnokii/xgnokii_sms.c:1573 +msgid "New message" +msgstr "Uus sõnum" + +#: xgnokii/xgnokii_sms.c:1577 +msgid "Forward message" +msgstr "Saada sõnum edasi" + +#: xgnokii/xgnokii_sms.c:1581 +msgid "Reply message" +msgstr "Vasta sõnumile" + +#: xgnokii/xgnokii_sms.c:1593 +msgid "Delete message" +msgstr "Kustuta sõnum" + +#: xgnokii/xgnokii_sms.c:1618 +msgid "SMS's" +msgstr "Lühisõnumid" + +#: xgnokii/xgnokii_sms.c:1627 +msgid "Inbox" +msgstr "Saadud lühisõnumid" + +#: xgnokii/xgnokii_sms.c:1633 +msgid "Outbox" +msgstr "Saadetud lühisõnumid" + +#: xgnokii/xgnokii_speed.c:180 +msgid "Reading data ..." +msgstr "Loen andmeid ..." + +#: xgnokii/xgnokii_speed.c:191 xgnokii/xgnokii_speed.c:197 +#: xgnokii/xgnokii_speed.c:256 +msgid "Cannot allocate memory!" +msgstr "Ei suuda mälu eraldada!" + +#: xgnokii/xgnokii_speed.c:344 +msgid "Cannot allocate memory!\n" +msgstr "Ei suuda mälu eraldada!\n" + +#: xgnokii/xgnokii_speed.c:356 xgnokii/xgnokii_speed.c:384 +msgid "Error reading file!" +msgstr "Viga faili lugemisel!" + +#: xgnokii/xgnokii_speed.c:554 +msgid "Key" +msgstr "Klahv" + +#: xgnokii/xgnokii_xkeyb.c:183 +msgid "Cannot load background pixmap!" +msgstr "Ei suuda laadida taustapilti!" + +#: xgnokii/xgnokii_xkeyb.c:260 +msgid "XGnokii Keyboard" +msgstr "XGnokii Klaviatuur" + +#~ msgid "Alarm date:" +#~ msgstr "Meenutuse kuupäev:" + +#~ msgid "Message: Result of key " +#~ msgstr " " + +#~ msgid "press\n" +#~ msgstr "vajuta\n" + +#~ msgid "release\n" +#~ msgstr "vabasta\n" + +#~ msgid "press or release - error\n" +#~ msgstr "vajuta või vabasta - viga\n" + +#~ msgid "Message: Unknown message of type 0x0c\n" +#~ msgstr "Teade: Tundmatu 0x0c tüüpi sõnum\n" + +#~ msgid "Message: Security code received: " +#~ msgstr "Teade: Turvakood saabus: " + +#~ msgid "Security code" +#~ msgstr "Turvakood" + +#~ msgid "unknown !" +#~ msgstr "tundmatu !" + +#~ msgid "Unknown key: %c !\n" +#~ msgstr "Tundmatu võti: %c !\n" + +#~ msgid "Can't press key !\n" +#~ msgstr "Nuppu ei saa vajutada?! \n" + +#~ msgid "Can't release key !\n" +#~ msgstr "Nuppu ei saa vabastada?! \n" + +#~ msgid "security code" +#~ msgstr "Turvakood" + +#~ msgid " not allowed\n" +#~ msgstr " pole lubatud\n" + +#~ msgid " is %s\n" +#~ msgstr " on %s\n" + +#~ msgid "Files can't have the same names !\n" +#~ msgstr "Failidel ei saa olla sama nimi !!\n" + +#~ msgid "Couldn't open %s or /etc/gnokiirc, using default config\n" +#~ msgstr "" +#~ "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni " +#~ "vaikeväärtusi!\n" + +#~ msgid "Error saving SMS centers!" +#~ msgstr "Viga SMS keskuste salvestamisel!" + +#~ msgid "Couldn't open %s or /etc/gnokiirc, using default config!\n" +#~ msgstr "" +#~ "Ei suuda %s avada ega ka /etc/gnokiirc, kasutan konfiguratsiooni " +#~ "vaikeväärtusi!\n" + +#~ msgid "Logo file error.\n" +#~ msgstr "Logo faili viga.\n" + +#~ msgid "Sending Logo.\n" +#~ msgstr "Saadan Logo.\n" + +#~ msgid " Date: %s GMT" +#~ msgstr " Kuupäev: %s GMT" + +#~ msgid " usage: gnokiid {--help|--version}" +#~ msgstr " kasutus: gnokiid {--help|--version}" + +#~ msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +#~ msgstr "%s: rida %d: Ei saa kätte SM mälu asukoha numbrit %d! %d\n" + +#~ msgid "0x16 Registration Response 0x%02x 0x%02x\n" +#~ msgstr "0x16 Registreerimise vastus 0x%02x 0x%02x\n" + +#~ msgid "Groups names" +#~ msgstr "Gruppide nimed" + +#~ msgid "Incoming call terminated.\n" +#~ msgstr "Saabuv kõne katkestatud. \n" + +#~ msgid "Message: Startup Logo received.\n" +#~ msgstr "Teade: Startup Logo saabus.\n" + +#~ msgid "Message: the rest of the SMS message received.\n" +#~ msgstr "Teade: ülejäänud SMS sõnum saabus.\n" + +#~ msgid "gnokiid Version %s" +#~ msgstr "gnokiid Versioon %s" diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..f86b5fa --- /dev/null +++ b/po/fi.po @@ -0,0 +1,2559 @@ +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 1999-03-13 18:25:30+0100\n" +"PO-Revision-Date: 1999-03-13 18:25:30+0100\n" +"Last-Translator: Pavel Janik ml. \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n""Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n" + +#: fbus-6110.c:2545 +msgid " %d. SMS Center name is %s\n" +msgstr "" + +#: fbus-6110.c:3490 gnokii.c:1510 +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Herätyspäivämäärä: %d-%02d-%02d\n" + +#: fbus-6110.c:3372 +msgid " Alarm is %s\n" +msgstr " Herätys on %s\n" + +#: fbus-6110.c:3494 gnokii.c:1514 +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Herätysaika: %02d:%02d:%02d\n" + +#: fbus-6110.c:3371 +msgid " Alarm: %02d:%02d\n" +msgstr " Herätys: %02d:%02d\n" + +#: fbus-6110.c:2993 +msgid " Battery Level: %d\n" +msgstr " Akun varaus: %d\n" + +#: gnokii.c:1585 +msgid " Calendar note deleted.\n" +msgstr "" + +#: fbus-6110.c:3217 +msgid " CellID: %s\n" +msgstr "" + +#: fbus-6110.c:3334 +msgid " Date: %4d/%02d/%02d\n" +msgstr " Päivämäärä: %4d/%02d/%02d\n" + +#: fbus-6110.c:3479 gnokii.c:1501 +msgid " Date: %d-%02d-%02d\n" +msgstr " Päivämäärä: %d-%02d-%02d\n" + +#: fbus-6110.c:2512 +msgid " Date: %s\n" +msgstr " Päivämäärä: %s\n" + +#: fbus-6110.c:3714 +msgid " Date: %s GMT" +msgstr "" + +#: fbus-6110.c:4016 +msgid " Empty SMS location.\n" +msgstr " Tyhjä tekstiviestimuistipaikka.\n" + +#: fbus-6110.c:2363 fbus-6110.c:2458 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Tarkoitus toistaiseksi tuntematon :-(\n" + +#: fbus-6110.c:4142 +msgid " Firmware: %s\n" +msgstr " Laitteistoversio: %s\n" + +#: fbus-6110.c:2764 +msgid " Free: %d\n" +msgstr " Vapaana: %d\n" + +#: fbus-6110.c:4140 +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: fbus-3810.c:2274 +msgid " IMEI: %s\n" +msgstr "" + +#: fbus-6110.c:4134 +msgid " IMEI: %s\n" +msgstr "" + +#: fbus-6110.c:4006 +msgid " Invalid location!\n" +msgstr "" + +#: fbus-6110.c:2701 +msgid " Invalid memory type!\n" +msgstr " Virheellinen muistityyppi!\n" + +#: fbus-6110.c:3583 +msgid " Item number: %d\n" +msgstr "" + +#: fbus-6110.c:3218 +msgid " LAC: %s\n" +msgstr "" + +#: fbus-6110.c:2875 +msgid " Location: %d\n" +msgstr "" + +#: fbus-6110.c:4147 +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Maagiset tavut: %02x %02x %02x %02x\n" + +#: fbus-6110.c:2762 +msgid " Memory Type: %s\n" +msgstr " Muistityyppi: %s\n" + +#: fbus-6110.c:2876 +msgid " MemoryType: %s\n" +msgstr "" + +#: fbus-6110.c:2934 +msgid " Mode: " +msgstr " Tila: " + +#: fbus-3810.c:2276 +msgid " Model: %s\n" +msgstr "" + +#: fbus-6110.c:4136 +msgid " Model: %s\n" +msgstr "" + +#: fbus-3810.c:2180 +msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n" +msgstr " Viestin pituus %d, Viestin numero %d, Tuntemattomat tavut: %02x %02x %02x %02x %02x %02x\n" + +#: fbus-6110.c:2401 fbus-6110.c:2656 +msgid " Name: " +msgstr " Nimi: " + +#: fbus-6110.c:3219 +msgid " Network code: %s\n" +msgstr " Verkon koodi: %s\n" + +#: fbus-6110.c:3220 +msgid " Network name: %s (%s)\n" +msgstr "" + +#: fbus-6110.c:3235 +msgid " Network selection: %s\n" +msgstr "" + +#: fbus-6110.c:2393 fbus-6110.c:2672 +msgid " Number: " +msgstr " Numero: " + +#: fbus-6110.c:2877 +msgid " Number: %d\n" +msgstr " Numero: %d\n" + +#: fbus-6110.c:3503 gnokii.c:1522 +msgid " Phone: %s\n" +msgstr "" + +#: fbus-6110.c:2971 +msgid " Power source: " +msgstr " Virtalähde: " + +#: fbus-6110.c:4138 +msgid " Production Code: %s\n" +msgstr " Valmistekoodi: %s\n" + +#: fbus-6110.c:2511 fbus-6110.c:3746 +msgid " Remote number: %s\n" +msgstr " Vastapuolen numero: %s\n" + +#: fbus-3810.c:2278 +msgid " Revision: %s\n" +msgstr "" + +#: fbus-6110.c:2548 +msgid " SMS Center message format is " +msgstr "" + +#: fbus-6110.c:2574 +msgid " SMS Center message validity is " +msgstr "" + +#: fbus-6110.c:2546 +msgid " SMS Center number is %s\n" +msgstr "" + +#: fbus-6110.c:2507 fbus-6110.c:3745 +msgid " SMS center number: %s\n" +msgstr " Viestikeskuksen numero: %s\n" + +#: fbus-6110.c:2513 +msgid " SMS: " +msgstr " Tekstiviesti: " + +#: fbus-6110.c:3729 +msgid " SMSC response date: %s GMT" +msgstr "" + +#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457 +msgid " Sequence nr. of the call: %d\n" +msgstr " Puhelun järjestysnumero: %d\n" + +#: fbus-6110.c:2994 +msgid " Signal strength: %d\n" +msgstr " Kenttävoimakkuus: %d\n" + +#: fbus-6110.c:3223 +msgid " Status: " +msgstr "" + +#: fbus-6110.c:3500 gnokii.c:1519 +msgid " Text: %s\n" +msgstr "" + +#: fbus-6110.c:4040 +msgid " The number of messages: %d\n" +msgstr " Viestien lukumäärä: %d\n" + +#: fbus-6110.c:2622 +msgid " The request for SMS Center failed.\n" +msgstr " Tekstiviestikeskuskutsu epäonnistui.\n" + +#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505 +msgid " Time: %02d:%02d:%02d\n" +msgstr "" + +#: gnokii.c:1476 +msgid " Type of the note: " +msgstr "" + +#: fbus-6110.c:3499 +msgid " Type: %d\n" +msgstr "" + +#: fbus-6110.c:2711 fbus-6110.c:2749 +msgid " Unknown error!\n" +msgstr " Tuntematon virhe!\n" + +#: fbus-6110.c:4041 +msgid " Unread messages: %d\n" +msgstr " Lukemattomia viestejä: %d\n" + +#: fbus-6110.c:2763 +msgid " Used: %d\n" +msgstr "" + +#: gnokii.c:86 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --sendoplogoviasms destionation logofile [network code]\n" +" gnokii --setdatetime [YYYY MM DD HH MM]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n" +" gnokii --reset [soft|hard]\n" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken from\n" +" phone memory from address [message_center_index].\n" +" If this argument is ommited SMSC number is taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --sendoplogoviasms send the logofile to destination as operator\n" +" logo\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number [index] from calendar.\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +msgstr "" + +#: gnokiid.c:63 +msgid " usage: gnokiid {--help|--version}" +msgstr "" + +#: xgnokii/xgnokii_sms.c:81 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:76 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh" +msgstr "" + +#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032 +msgid "%d" +msgstr "" + +#: gnokii.c:978 +msgid "%d. Delivery Report " +msgstr "" + +#: gnokii.c:1017 +msgid "%d. Inbox Message " +msgstr "" + +#: gnokii.c:965 +msgid "%d. Outbox Message " +msgstr "" + +#: gnokii.c:802 +msgid "%d. SMS center (%s) number is %s\n" +msgstr "" + +#: fbus-6110.c:3722 fbus-6110.c:3738 +msgid "%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035 +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553 +msgid "%s: line %d: Can't get ME memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598 +msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1343 +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1310 +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" + +#: gnokii.c:1893 +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "" + +#: gnokii.c:982 gnokii.c:1022 +msgid "(not read)\n" +msgstr "" + +#: gnokii.c:970 +msgid "(not sent)\n" +msgstr "" + +#: gnokii.c:980 gnokii.c:1020 +msgid "(read)\n" +msgstr "" + +#: gnokii.c:968 +msgid "(sent)\n" +msgstr "" + +#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030 +msgid "+%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:78 +msgid "/help/contacts.html" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:35 +msgid "/help/dtmf.html" +msgstr "" + +#: xgnokii/xgnokii.c:153 +msgid "/help/index.html" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:38 +msgid "/help/netmon.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:38 +msgid "/help/sms.html" +msgstr "" + +#: fbus-3810.c:1946 +msgid "0x10 Write failed!" +msgstr "" + +#: fbus-3810.c:1222 +msgid "0x15 Registration Response 0x%02x\n" +msgstr "" + +#: fbus-3810.c:1783 +msgid "0x15 Write failed!" +msgstr "" + +#: fbus-3810.c:1236 +msgid "0x16 Registration Response 0x%02x 0x%02x\n" +msgstr "" + +#: fbus-3810.c:1879 +msgid "0x27 Write failed!" +msgstr "" + +#: fbus-3810.c:2022 +msgid "0x2c Write failed!" +msgstr "" + +#: fbus-3810.c:1574 +msgid "0x3f Write failed!" +msgstr "" + +#: fbus-3810.c:1549 +msgid "0x4a Write failed!" +msgstr "" + +#: fbus-3810.c:1917 +msgid "0x4b Write failed!" +msgstr "" + +#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090 +msgid "1 h" +msgstr "" + +#: fbus-6110.c:2579 gnokii.c:835 +msgid "1 hour" +msgstr "" + +#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118 +msgid "1 week" +msgstr "" + +#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104 +msgid "24 h" +msgstr "" + +#: fbus-6110.c:2587 gnokii.c:843 +msgid "24 hours" +msgstr "" + +#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097 +msgid "6 h" +msgstr "" + +#: fbus-6110.c:2583 gnokii.c:839 +msgid "6 hours" +msgstr "" + +#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111 +msgid "72 h" +msgstr "" + +#: fbus-6110.c:2591 gnokii.c:847 +msgid "72 hours" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:384 +msgid "?Constant voltage charging display" +msgstr "" + +#: gnokii.c:1747 +msgid "AC/DC" +msgstr "Virtalähde" + +#: fbus-6110.c:2977 +msgid "AC/DC\n" +msgstr "Virtalähde\n" + +#: xgnokii/xgnokii_netmon.c:496 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807 +msgid "About" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:381 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338 +msgid "Active cell" +msgstr "" + +#: xgnokii/xgnokii.c:1725 +msgid "Address:" +msgstr "" + +#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351 +msgid "Alarm" +msgstr "" + +#: xgnokii/xgnokii.c:1337 +msgid "Alarm setting" +msgstr "" + +#: gnokii.c:1687 +msgid "Alarm: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1227 +msgid "Apply" +msgstr "" + +#: rlp-common.c:509 +msgid "BAD" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:375 +msgid "BTS TEST" +msgstr "" + +#: fbus-6110.c:4341 +msgid "Bad checksum!\n" +msgstr "" + +#: gnokii.c:1744 +msgid "Battery: %d\n" +msgstr "Akun varaus: %d\n" + +#: xgnokii/xgnokii.c:1309 +msgid "Bindir:" +msgstr "" + +#: gnokii.c:1493 +msgid "Birthday\n" +msgstr "" + +#: xgnokii/xgnokii.c:1812 +msgid "Busines Cards" +msgstr "" + +#: xgnokii/xgnokii.c:1552 +msgid "Business Card" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "C2" +msgstr "" + +#: fbus-6110.c:2136 +msgid "CAR is %s.\n" +msgstr "CAR on %s.\n" + +#: xgnokii/xgnokii_netmon.c:378 +msgid "CELL BARR-Flag" +msgstr "" + +#: fbus-3810.c:1115 +msgid "CS Fail %02x != %02x" +msgstr "" + +#: fbus-6110.c:2137 +msgid "CTS is %s.\n" +msgstr "CTS on %s.\n" + +#: gnokii.c:1485 +msgid "Call\n" +msgstr "" + +#: gnokii.c:2096 +msgid "Call in progress: %s\n" +msgstr "" + +#: fbus-6110.c:2818 +msgid "Caller group name: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:752 +msgid "Caller group:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:449 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562 +msgid "Can't change memory type!" +msgstr "" + +#: xgnokii/xgnokii_common.c:182 +msgid "Can't exec %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993 +msgid "Can't find free memory." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:652 +msgid "Can't find pattern!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1988 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1503 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74 +msgid "Can't open file %s for reading!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110 +msgid "Can't open file %s for writing!" +msgstr "" + +#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303 +msgid "Cancel" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:359 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Center number" +msgstr "" + +#: xgnokii/xgnokii.c:1018 +msgid "Center:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1034 +msgid "Changing memory type" +msgstr "" + +#: fbus-3810.c:1446 +msgid "" +"Checksum: %02x \n" +" " +msgstr "" + +#: xgnokii/xgnokii.c:1243 +msgid "Close" +msgstr "" + +#: gnokii.c:1221 +msgid "Code ok.\n" +msgstr "" + +#: xgnokii/xgnokii.c:2007 +msgid "Colleagues" +msgstr "" + +#: xgnokii/xgnokii.c:1627 +msgid "Company:" +msgstr "" + +#: fbus-6110.c:3840 fbus-6110.c:3933 +msgid "Congestion" +msgstr "" + +#: xgnokii/xgnokii.c:1265 +msgid "Connection" +msgstr "" + +#: fbus-6110.c:3884 +msgid "Connection rejected by SME" +msgstr "" + +#: xgnokii/xgnokii.c:1321 +msgid "Connection:" +msgstr "" + +#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437 +msgid "Contacts" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1041 +msgid "Continue" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Control of task information displays" +msgstr "" + +#: fbus-3810.c:977 +msgid "Couldn't open FB38 device: " +msgstr "" + +#: fbus-6110.c:2206 +msgid "Couldn't open FB61 device: " +msgstr "" + +#: fbus-6110.c:658 +msgid "Couldn't open FB61 infrared device: " +msgstr "" + +#: virtmodem.c:179 +msgid "Couldn't open pty!\n" +msgstr "" + +#: gnokii.c:679 +msgid "Couldn't read from stdin!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: gnokii.c:1756 +msgid "DC: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:765 +msgid "DTMF" +msgstr "" + +#: fbus-6110.c:2134 +msgid "DTR is %s.\n" +msgstr "DTR on %s.\n" + +#: xgnokii/xgnokii_netmon.c:362 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: gnokii.c:2101 +msgid "Data call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Date" +msgstr "" + +#: gnokii.c:1024 +msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:206 +msgid "Date: " +msgstr "" + +#: gnokii.c:1650 +msgid "Date: %4d/%02d/%02d\n" +msgstr "" + +#: fbus-3810.c:1764 +msgid "Delete SMS Mem Loc write failed!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:842 +msgid "Delete entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2502 +msgid "Delete entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:303 +msgid "Delete message" +msgstr "" + +#: gnokii.c:1162 +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" + +#: gnokii.c:1155 +msgid "Deleted SMS %s %d\n" +msgstr "" + +#: fbus-6110.c:3809 +msgid "Delivered" +msgstr "" + +#: fbus-6110.c:3705 +msgid "Delivery Report\n" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:207 +msgid "Dial Tone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2509 +msgid "Dial voice" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:873 +msgid "Do you want delete selected entries?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1380 +msgid "Don't save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494 +msgid "Duplicate entry" +msgstr "" + +#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060 +msgid "E-Mail" +msgstr "" + +#: xgnokii/xgnokii.c:1700 +msgid "E-Mail:" +msgstr "" + +#: gnokii.c:1759 +msgid "EN: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:152 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:164 +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:182 +msgid "ERROR: Can't write file config file!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1411 +msgid "Edit" +msgstr "" + +#: xgnokii/xgnokii.c:978 +msgid "Edit SMS Setting" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498 +msgid "Edit entry" +msgstr "" + +#: fbus-6110.c:2565 gnokii.c:821 +msgid "Email" +msgstr "" + +#: gnokii.c:1213 +msgid "Enter your code: " +msgstr "" + +#: gnokii.c:1729 +msgid "Entering monitor mode...\n" +msgstr "Siirrytään tarkkailutilaan...\n" + +#: xgnokii/xgnokii_common.c:45 +msgid "Error" +msgstr "" + +#: fbus-6110.c:3860 fbus-6110.c:3953 +msgid "Error in SME" +msgstr "" + +#: xgnokii/xgnokii.c:722 +msgid "Error saving SMS centers!" +msgstr "" + +#: xgnokii/xgnokii.c:728 +msgid "Error writing configuration file!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538 +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "" + +#: gnokii.c:1219 +msgid "Error: invalid code\n" +msgstr "" + +#: fbus-3810.c:1564 +msgid "Explore Write failed!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1791 +msgid "Export" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2483 +msgid "Export to file" +msgstr "" + +#: gnokii.c:1762 +msgid "FD: Used %d, Free %d\n" +msgstr "" + +#: fbus-6110.c:3828 +msgid "Failed" +msgstr "" + +#: xgnokii/xgnokii.c:2004 +msgid "Familly" +msgstr "" + +#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046 +msgid "Fax" +msgstr "" + +#: gnokii.c:2100 +msgid "Fax call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1676 +msgid "Fax:" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143 +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086 +msgid "Find" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Format" +msgstr "" + +#: gnokii.c:1960 +msgid "Format problem on line %d [%s]\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:292 +msgid "Forward Message" +msgstr "" + +#: rlp-common.c:621 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "" + +#: xgnokii/xgnokii.c:2006 +msgid "Friends" +msgstr "" + +#: xgnokii/xgnokii_sms.c:198 +msgid "From: " +msgstr "" + +#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883 +msgid "Function not implemented in %s model!\n" +msgstr "" + +#: gnokii.c:72 +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" + +#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "" + +#: gnokii.c:1065 +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" + +#: gnokii.c:1403 +msgid "Getting Logo.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1527 +msgid "Getting entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Group" +msgstr "" + +#: xgnokii/xgnokii.c:1766 +msgid "Group %d:" +msgstr "" + +#: xgnokii/xgnokii.c:1757 +msgid "Groups" +msgstr "" + +#: xgnokii/xgnokii.c:1750 +msgid "Groups names" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:412 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:415 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:473 +msgid "Hardware version" +msgstr "" + +#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786 +msgid "Help" +msgstr "" + +#: xgnokii/xgnokii.c:1779 +msgid "Help viewer" +msgstr "" + +#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "" + +#: gnokii.c:2150 +msgid "IMEI: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1061 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2099 +msgid "Import" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2479 +msgid "Import from file" +msgstr "" + +#: xgnokii/xgnokii_sms.c:337 +msgid "Inbox" +msgstr "" + +#: fbus-3810.c:2178 +msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n" +msgstr "" + +#: fbus-3810.c:1853 +msgid "Incoming call - status %02x %02x %02x, Number %s.\n" +msgstr "" + +#: fbus-3810.c:1992 +msgid "Incoming call answered.\n" +msgstr "" + +#: fbus-3810.c:1964 +msgid "Incoming call terminated.\n" +msgstr "" + +#: gnokii.c:1780 +msgid "Incoming call: %s\n" +msgstr "" + +#: fbus-6110.c:3880 +msgid "Incompatibile destination" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "Information of OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Information of task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "Information of task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Information of task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "Information of the current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii.c:1297 +msgid "Init length:" +msgstr "" + +#: gnokii.c:1730 +msgid "Initialising GSM interface...\n" +msgstr "Alustetaan GSM-liitäntää...\n" + +#: fbus-6110.c:4281 +msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n" +msgstr "" + +#: gnokii.c:1053 +msgid "Invalid location: %s %d\n" +msgstr "" + +#: gnokii.c:2102 +msgid "Keyboard lock: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "L2-Timeouts" +msgstr "" + +#: gnokii.c:1765 +msgid "LD: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1788 +msgid "Leaving monitor mode...\n" +msgstr "Lopetetaan tarkkailutila...\n" + +#: xgnokii/xgnokii_dtmf.c:91 +msgid "Load" +msgstr "" + +#: gnokii.c:1448 +msgid "Logo file error.\n" +msgstr "" + +#: gnokii.c:1768 +msgid "MC: Used %d, Free %d\n" +msgstr "" + +#: fbus-3810.c:1108 +msgid "MT Fail %02x" +msgstr "" + +#: xgnokii/xgnokii.c:1083 +msgid "Max. Time" +msgstr "" + +#: xgnokii/xgnokii.c:452 +msgid "Max. time" +msgstr "" + +#: fbus-6110.c:2599 gnokii.c:855 +msgid "Maximum time" +msgstr "" + +#: gnokii.c:1489 +msgid "Meeting\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Memory" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "Memory status before reset" +msgstr "" + +#: gnokii.c:1888 +msgid "Memory type %s not supported!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:733 +msgid "Memory:" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Message" +msgstr "" + +#: gnokii.c:830 +msgid "Message validity is " +msgstr "" + +#: fbus-6110.c:3370 +msgid "Message: Alarm\n" +msgstr "" + +#: fbus-6110.c:3348 +msgid "Message: Alarm set correctly\n" +msgstr "" + +#: fbus-6110.c:3582 +msgid "Message: Calendar Alarm active\n" +msgstr "" + +#: fbus-6110.c:3556 +msgid "Message: Calendar note can't be deleted\n" +msgstr "" + +#: fbus-6110.c:3545 +msgid "Message: Calendar note deleted\n" +msgstr "" + +#: fbus-6110.c:3566 +msgid "Message: Calendar note deleting error\n" +msgstr "" + +#: fbus-6110.c:3523 +msgid "Message: Calendar note error\n" +msgstr "" + +#: fbus-6110.c:3513 +msgid "Message: Calendar note not available\n" +msgstr "" + +#: fbus-6110.c:3477 +msgid "Message: Calendar note received.\n" +msgstr "" + +#: fbus-6110.c:3421 fbus-6110.c:3431 +msgid "Message: Calendar note write failed!\n" +msgstr "" + +#: fbus-6110.c:3411 +msgid "Message: Calendar note write succesfull!\n" +msgstr "" + +#: fbus-6110.c:2421 +msgid "Message: Call answered.\n" +msgstr "" + +#: fbus-6110.c:2432 +msgid "Message: Call ended by your phone.\n" +msgstr "" + +#: fbus-6110.c:2361 +msgid "Message: Call message, type 0x03:" +msgstr "" + +#: fbus-6110.c:2456 +msgid "Message: Call message, type 0x0a:" +msgstr "" + +#: fbus-6110.c:2837 +msgid "Message: Caller group data received but not requested!\n" +msgstr "" + +#: fbus-6110.c:2855 +msgid "Message: Caller group data set correctly.\n" +msgstr "" + +#: fbus-6110.c:2817 +msgid "Message: Caller group logo etc.\n" +msgstr "" + +#: fbus-6110.c:3332 +msgid "Message: Date and time\n" +msgstr "" + +#: fbus-6110.c:3302 +msgid "Message: Date and time set correctly\n" +msgstr "" + +#: fbus-6110.c:3312 fbus-6110.c:3358 +msgid "Message: Date and time set error\n" +msgstr "" + +#: fbus-6110.c:2847 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "" + +#: fbus-6110.c:2863 +msgid "Message: Error attempting to set caller group data\n" +msgstr "" + +#: fbus-6110.c:3113 +msgid "Message: Error getting operator logo!\n" +msgstr "" + +#: fbus-6110.c:3078 +msgid "Message: Error setting operator logo!\n" +msgstr "" + +#: fbus-6110.c:2387 +msgid "Message: Incoming call alert:\n" +msgstr "" + +#: fbus-6110.c:2786 +msgid "Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" + +#: fbus-6110.c:2779 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" + +#: fbus-6110.c:2793 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "" + +#: fbus-6110.c:2760 +msgid "Message: Memory status received:\n" +msgstr "" + +#: fbus-6110.c:4133 +msgid "Message: Mobile phone identification received:\n" +msgstr "" + +#: fbus-6110.c:4084 +msgid "Message: Netmonitor correctly set.\n" +msgstr "" + +#: fbus-6110.c:4094 +msgid "Message: Netmonitor menu %d received:\n" +msgstr "" + +#: fbus-6110.c:3215 +msgid "Message: Network informations:\n" +msgstr "" + +#: fbus-6110.c:3088 +msgid "Message: Operator Logo received.\n" +msgstr "" + +#: fbus-6110.c:3069 +msgid "Message: Operator logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3104 +msgid "Message: Operator logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:3693 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "" + +#: fbus-6110.c:2933 +msgid "Message: Phone status received:\n" +msgstr "" + +#: fbus-6110.c:2655 +msgid "Message: Phonebook entry received:\n" +msgstr "" + +#: fbus-6110.c:2739 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "" + +#: fbus-6110.c:2693 +msgid "Message: Phonebook read entry error received:\n" +msgstr "" + +#: fbus-6110.c:2722 +msgid "Message: Phonebook written correctly.\n" +msgstr "" + +#: fbus-6110.c:3702 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "" + +#: fbus-6110.c:2374 +msgid "Message: Remote end hang up.\n" +msgstr "" + +#: fbus-6110.c:2528 +msgid "Message: SMS Center correctly set.\n" +msgstr "" + +#: fbus-6110.c:2621 +msgid "Message: SMS Center error received:\n" +msgstr "" + +#: fbus-6110.c:2544 +msgid "Message: SMS Center received:\n" +msgstr "" + +#: fbus-6110.c:2506 +msgid "Message: SMS Message Received\n" +msgstr "" + +#: fbus-6110.c:2486 +msgid "Message: SMS Message correctly sent.\n" +msgstr "" + +#: fbus-6110.c:4039 +msgid "Message: SMS Status Received\n" +msgstr "" + +#: fbus-6110.c:4053 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "" + +#: fbus-6110.c:4029 +msgid "Message: SMS deleted successfully.\n" +msgstr "" + +#: fbus-6110.c:3998 +msgid "Message: SMS reading failed.\n" +msgstr "" + +#: fbus-6110.c:3131 +msgid "Message: Security Code status received: " +msgstr "" + +#: fbus-6110.c:3179 +msgid "Message: Security code accepted.\n" +msgstr "" + +#: fbus-6110.c:3189 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "" + +#: fbus-6110.c:2497 +msgid "Message: Sending SMS Message failed.\n" +msgstr "" + +#: fbus-6110.c:2887 +msgid "Message: Speed dial entry error\n" +msgstr "" + +#: fbus-6110.c:2874 +msgid "Message: Speed dial entry received:\n" +msgstr "" + +#: fbus-6110.c:2897 +msgid "Message: Speed dial entry set.\n" +msgstr "" + +#: fbus-6110.c:2907 +msgid "Message: Speed dial entry setting error.\n" +msgstr "" + +#: fbus-6110.c:3024 +msgid "Message: Startup Logo received.\n" +msgstr "" + +#: fbus-6110.c:3062 +msgid "Message: Startup logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3053 +msgid "Message: Startup logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:4177 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "" + +#: fbus-6110.c:4195 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "" + +#: fbus-6110.c:2800 +msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" + +#: fbus-6110.c:2468 +msgid "Message: Unknown message of type 0x01\n" +msgstr "" + +#: fbus-6110.c:2917 +msgid "Message: Unknown message of type 0x03\n" +msgstr "" + +#: fbus-6110.c:3006 +msgid "Message: Unknown message of type 0x04\n" +msgstr "" + +#: fbus-6110.c:3245 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "" + +#: fbus-6110.c:3388 +msgid "Message: Unknown message of type 0x11\n" +msgstr "" + +#: fbus-6110.c:3591 +msgid "Message: Unknown message of type 0x13\n" +msgstr "" + +#: fbus-6110.c:4206 +msgid "Message: Unknown message.\n" +msgstr "" + +#: fbus-6110.c:3606 +msgid "Message: the rest of the SMS message received.\n" +msgstr "" + +#: gnokii.c:804 +msgid "Messages sent as " +msgstr "" + +#: fbus-3810.c:2273 +msgid "Mobile phone identification received:\n" +msgstr "" + +#: xgnokii/xgnokii.c:1285 +msgid "Model:" +msgstr "" + +#: gnokii.c:2151 +msgid "Model: %s\n" +msgstr "" + +#: fbus-6110.c:4419 +msgid "Msg Dest: %s\n" +msgstr "" + +#: fbus-6110.c:4425 +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" + +#: fbus-3810.c:1444 +msgid "Msg Len: %02x " +msgstr "" + +#: fbus-6110.c:4420 +msgid "Msg Source: %s\n" +msgstr "" + +#: fbus-6110.c:4422 +msgid "Msg Type: %02x\n" +msgstr "" + +#: fbus-3810.c:1443 +msgid "Msg Type: %02x " +msgstr "" + +#: fbus-6110.c:4424 +msgid "Msg Unknown: %02x\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:499 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:502 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:341 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:344 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:347 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433 +msgid "Name" +msgstr "" + +#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708 +msgid "Name:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:446 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271 +msgid "Net Monitor" +msgstr "" + +#: gnokii.c:1783 +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490 +msgid "New entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:288 +msgid "New message" +msgstr "" + +#: xgnokii/xgnokii_common.c:98 +msgid "No" +msgstr "" + +#: xgnokii/xgnokii.c:2009 +msgid "No group" +msgstr "" + +#: fbus-6110.c:3896 +msgid "No internetworking available" +msgstr "" + +#: fbus-6110.c:3848 fbus-6110.c:3941 +msgid "No response from SME" +msgstr "" + +#: fbus-6110.c:3888 +msgid "Not obtainable" +msgstr "" + +#: fbus-6110.c:3712 +msgid "Not read\n" +msgstr "" + +#: fbus-6110.c:3698 +msgid "Not sent\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433 +msgid "Number" +msgstr "" + +#: fbus-3810.c:2338 +msgid "Number field empty." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:721 +msgid "Number:" +msgstr "" + +#: fbus-3810.c:2341 +msgid "Number: " +msgstr "" + +#: fbus-6110.c:3688 +msgid "Number: %d\n" +msgstr "" + +#: gnokii.c:1771 +msgid "ON: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296 +msgid "Ok" +msgstr "" + +#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222 +msgid "Options" +msgstr "" + +#: xgnokii/xgnokii.c:2008 +msgid "Other" +msgstr "" + +#: xgnokii/xgnokii_sms.c:343 +msgid "Outbox" +msgstr "" + +#: fbus-3810.c:2006 +msgid "Outgoing call answered - status bytes %02x %02x %02x.\n" +msgstr "" + +#: fbus-3810.c:1950 +msgid "Outgoing call terminated (0x10 message).\n" +msgstr "" + +#: fbus-3810.c:1978 +msgid "Outgoing call terminated (0x12 message).\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142 +msgid "Overwrite file?" +msgstr "" + +#: fbus-6110.c:4401 +msgid "PC" +msgstr "" + +#: fbus-6110.c:4496 +msgid "PC: " +msgstr "" + +#: fbus-3810.c:1377 +msgid "PIN [possibly] entered.\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:533 +msgid "Page:" +msgstr "" + +#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053 +msgid "Paging" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1108 +msgid "Pattern:" +msgstr "" + +#: fbus-6110.c:3925 +msgid "Pending" +msgstr "" + +#: fbus-6110.c:3871 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:4398 +msgid "Phone" +msgstr "" + +#: xgnokii/xgnokii.c:1258 +msgid "Phone and connection type" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1247 +msgid "Phone memory..." +msgstr "" + +#: fbus-3810.c:1386 +msgid "Phone powering off..." +msgstr "" + +#: gnokii.c:1753 +msgid "Phone: Used %d, Free %d\n" +msgstr "Puhelin: käytöss: %d, vapaana %d\n" + +#: fbus-6110.c:4282 +msgid "Please report it ...\n" +msgstr "" + +#: xgnokii/xgnokii.c:1272 +msgid "Port:" +msgstr "" + +#: gnokii.c:1747 +msgid "Power Source: %s\n" +msgstr "Virtalähde: %s\n" + +#: xgnokii/xgnokii_netmon.c:350 +msgid "Prefered/Denied networks" +msgstr "" + +#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949 +msgid "Quality of service not aviable" +msgstr "" + +#: gnokii.c:1774 +msgid "RC: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1741 +msgid "RFLevel: %d\n" +msgstr "Kenttävoimakkuus: %d\n" + +#: rlp-common.c:643 +msgid "RLP state 0.\n" +msgstr "" + +#: rlp-common.c:660 +msgid "RLP state 1.\n" +msgstr "" + +#: fbus-6110.c:2135 +msgid "RTS is %s.\n" +msgstr "RTS on %s.\n" + +#: fbus-6110.c:3710 +msgid "Read\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2468 +msgid "Read from phone" +msgstr "" + +#: gnokii.c:1010 +msgid "Receiver: %s Msg Center: %s\n" +msgstr "" + +#: gnokii.c:1481 +msgid "Reminder\n" +msgstr "" + +#: fbus-6110.c:3876 +msgid "Remote procedure error" +msgstr "" + +#: xgnokii/xgnokii_sms.c:296 +msgid "Reply message" +msgstr "" + +#: fbus-3810.c:1647 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "" + +#: fbus-3810.c:1634 +msgid "Request Mem Loc Write failed!" +msgstr "" + +#: fbus-3810.c:1741 +msgid "Request SMS Mem Loc Write failed!" +msgstr "" + +#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967 +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:409 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Reset-Counter" +msgstr "" + +#: gnokii.c:997 +msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: gnokii.c:2152 +msgid "Revision: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:493 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1258 +msgid "SIM memory..." +msgstr "" + +#: gnokii.c:1750 +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: käytössä %d, vapaaana %d\n" + +#: fbus-6110.c:3908 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: fbus-6110.c:3900 +msgid "SM Validity Period Expired" +msgstr "" + +#: fbus-6110.c:3904 +msgid "SM deleted by originating SME" +msgstr "" + +#: fbus-6110.c:3912 +msgid "SM does not exist" +msgstr "" + +#: fbus-6110.c:3817 +msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: fbus-6110.c:3814 +msgid "SM received by the SME" +msgstr "" + +#: fbus-6110.c:3820 +msgid "SM replaced by the SC" +msgstr "" + +#: fbus-6110.c:3844 fbus-6110.c:3937 +msgid "SME busy" +msgstr "" + +#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382 +msgid "SMS" +msgstr "" + +#: fbus-3810.c:2332 +msgid "SMS Message Center Data status bytes =" +msgstr "" + +#: gnokii.c:1777 +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "Tekstiviesejä: lukematon %d, numero %d\n" + +#: fbus-3810.c:559 +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "" + +#: gnokii.c:782 gnokii.c:1360 +msgid "SMS Send failed (error=%d)\n" +msgstr "" + +#: gnokii.c:866 +msgid "SMS center can not be found :-(\n" +msgstr "" + +#: gnokii.c:1059 +msgid "SMS location %s %d empty.\n" +msgstr "" + +#: gnokii.c:2103 +msgid "SMS storage full: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:328 +msgid "SMS's" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158 +msgid "Save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1365 +msgid "Save changes?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2472 +msgid "Save to phone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1285 +msgid "Saving entries" +msgstr "" + +#: gnokii.c:1237 +msgid "Security code status: " +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2293 +msgid "Select contacts" +msgstr "" + +#: fbus-3810.c:1718 +msgid "Send SMS block %d failed!" +msgstr "" + +#: fbus-3810.c:1691 +msgid "Send SMS header failed!" +msgstr "" + +#: gnokii.c:780 gnokii.c:1358 +msgid "Send succeeded!\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Sender" +msgstr "" + +#: gnokii.c:1037 +msgid "Sender: %s Msg Center: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1031 +msgid "Sending Format:" +msgstr "" + +#: gnokii.c:1454 +msgid "Sending Logo.\n" +msgstr "" + +#: fbus-3810.c:456 fbus-6110.c:1870 +msgid "Sending SMS to %s via message center %s\n" +msgstr "" + +#: gnokii.c:984 +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: fbus-6110.c:3696 +msgid "Sent\n" +msgstr "" + +#: fbus-3810.c:1445 +msgid "Sequence Number: %02x " +msgstr "" + +#: fbus-3810.c:1008 +msgid "Serial TIOCMGET failed: " +msgstr "" + +#: fbus-3810.c:1015 +msgid "Serial TIOCMSET failed: " +msgstr "" + +#: fbus-6110.c:2133 +msgid "Serial flags dump:\n" +msgstr "Sarjaliitännän lippujen tila: \n" + +#: fbus-6110.c:3852 fbus-6110.c:3945 +msgid "Service rejected" +msgstr "" + +#: xgnokii/xgnokii.c:399 +msgid "Set %d" +msgstr "" + +#: fbus-3810.c:1535 fbus-3810.c:1610 +msgid "Set Mem Loc Write failed!" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Set name" +msgstr "" + +#: xgnokii/xgnokii.c:1005 +msgid "Set name:" +msgstr "" + +#: fbus-6110.c:2175 +msgid "Setting FBUS communication...\n" +msgstr "Asetetaan FBUS-yhteyttä...\n" + +#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258 +msgid "Short Message Service" +msgstr "" + +#: xgnokii/xgnokii.c:272 +msgid "Short Message received" +msgstr "" + +#: virtmodem.c:191 +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" + +#: gnokii.c:1996 +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: fbus-3810.c:1415 +msgid "Standard Ack write failed!" +msgstr "" + +#: fbus-6110.c:764 +msgid "Starting IR mode...!\n" +msgstr "" + +#: fbus-6110.c:3041 +msgid "Startup Text: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Status" +msgstr "" + +#: fbus-3810.c:1936 +msgid "Status: Connection Status %02x Batt %02x RF %02x.\n" +msgstr "" + +#: gnokii.c:1565 gnokii.c:2034 +msgid "Succesfully written!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:353 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:356 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: fbus-3810.c:1800 +msgid "TX_SendMessage - message too long!\n" +msgstr "" + +#: fbus-3810.c:1826 +msgid "TX_SendMessage - write:" +msgstr "" + +#: xgnokii/xgnokii.c:1652 +msgid "Telephone:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:452 +msgid "Temporary counters of DSP" +msgstr "" + +#: fbus-6110.c:3835 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:3929 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "" + +#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039 +msgid "Text" +msgstr "" + +#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038 +msgid "" +"Text: %s\n" +"\n" +msgstr "" + +#: gnokii.c:1588 +msgid "The calendar note can not be deleted\n" +msgstr "" + +#: gnokii.c:1526 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii.c:1688 +msgid "Time: %02d:%02d\n" +msgstr "" + +#: gnokii.c:1651 +msgid "Time: %02d:%02d:%02d\n" +msgstr "" + +#: fbus-6110.c:633 +msgid "Timeout in IR-mode\n" +msgstr "" + +#: xgnokii/xgnokii.c:1602 +msgid "Title:" +msgstr "" + +#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859 +msgid "Unknown" +msgstr "" + +#: gnokii.c:1497 +msgid "Unknown\n" +msgstr "" + +#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023 +msgid "Unknown memory type %s!\n" +msgstr "" + +#: fbus-6110.c:3283 +msgid "Unknown message of type 0x0d.\n" +msgstr "" + +#: fbus-6110.c:3440 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "" + +#: fbus-6110.c:4110 +msgid "Unknown message of type 0x40.\n" +msgstr "" + +#: fbus-6110.c:2633 +msgid "Unknown message!\n" +msgstr "" + +#: gnokii.c:641 +msgid "Unknown option: %d\n" +msgstr "" + +#: fbus-6110.c:3707 +msgid "Unknown type\n" +msgstr "" + +#: fbus-6110.c:3167 gnokii.c:1273 +msgid "Unknown!\n" +msgstr "" + +#: rlp-common.c:448 +msgid "Unknown!!! " +msgstr "" + +#: fbus-3810.c:1441 +msgid "Unknown: " +msgstr "" + +#: gnokii.c:2097 +msgid "Unknown: %s\n" +msgstr "" + +#: gnokii.c:2098 +msgid "Unread SMS: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:372 +msgid "Uplink DTX" +msgstr "" + +#: gnokii.c:467 +msgid "Use '%s --help' for usage informations.\n" +msgstr "" + +#: xgnokii/xgnokii.c:1559 +msgid "User" +msgstr "" + +#: xgnokii/xgnokii.c:2005 +msgid "VIP" +msgstr "" + +#: virtmodem.c:87 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: virtmodem.c:77 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: virtmodem.c:82 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Validity" +msgstr "" + +#: xgnokii/xgnokii.c:1075 +msgid "Validity Period:" +msgstr "" + +#: xgnokii/xgnokii.c:1793 +msgid "Viewer:" +msgstr "" + +#: gnokii.c:2099 +msgid "Voice call: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "" + +#: gnokii.c:2184 +msgid "What kind of reset do you want??\n" +msgstr "" + +#: gnokii.c:1976 +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: gnokii.c:1974 +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298 +msgid "Write failed!" +msgstr "Kirjoittaminen epäonnistui!" + +#: gnokii.c:651 +msgid "Wrong number of arguments\n" +msgstr "" + +#: xgnokii/xgnokii_common.c:89 +msgid "Yes" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1404 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Want you save these changes into phone?\n" +msgstr "" + +#: fbus-6110.c:4164 +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "" + +#: fbus-6110.c:4570 +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "" + +#: fbus-6110.c:3235 +msgid "automatic" +msgstr "" + +#: gnokii.c:1747 +msgid "battery" +msgstr "akku" + +#: fbus-6110.c:2983 +msgid "battery\n" +msgstr "akku\n" + +#: fbus-6110.c:2949 +msgid "call in progress\n" +msgstr "" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "down" +msgstr "poissa" + +#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94 +msgid "error opening %s, using default config\n" +msgstr "" + +#: gnokiid.c:51 +msgid "gnokiid Version %s" +msgstr "" + +#: virtmodem.c:187 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "" + +#: fbus-6110.c:3226 +msgid "home network selected" +msgstr "" + +#: xgnokii/xgnokii.c:1325 +msgid "infrared" +msgstr "" + +#: fbus-6110.c:3235 +msgid "manual" +msgstr "" + +#: fbus-6110.c:3229 +msgid "not registered in the network" +msgstr "" + +#: fbus-6110.c:3162 gnokii.c:1268 +msgid "nothing to enter.\n" +msgstr "" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "off" +msgstr "" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "on" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:737 +msgid "phone" +msgstr "" + +#: fbus-6110.c:2961 +msgid "powered off\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:71 +msgid "read" +msgstr "" + +#: fbus-6110.c:2940 +msgid "registered within the network\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:69 +msgid "report" +msgstr "" + +#: fbus-6110.c:3228 +msgid "requesting network" +msgstr "" + +#: fbus-3810.c:1052 +msgid "restarting.\n" +msgstr "käynnistyy uudelleen.\n" + +#: fbus-6110.c:3227 +msgid "roaming network" +msgstr "" + +#: xgnokii/xgnokii_sms.c:119 +msgid "sent" +msgstr "" + +#: xgnokii/xgnokii.c:1329 +msgid "serial" +msgstr "" + +#: fbus-6110.c:3230 +msgid "unknown" +msgstr "" + +#: fbus-6110.c:2967 fbus-6110.c:2989 +msgid "unknown\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:73 +msgid "unread" +msgstr "" + +#: xgnokii/xgnokii_sms.c:121 +msgid "unsent" +msgstr "" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "up" +msgstr "päällä" + +#: fbus-6110.c:3142 gnokii.c:1248 +msgid "waiting for PIN.\n" +msgstr "" + +#: fbus-6110.c:3147 gnokii.c:1253 +msgid "waiting for PIN2.\n" +msgstr "" + +#: fbus-6110.c:3152 gnokii.c:1258 +msgid "waiting for PUK.\n" +msgstr "" + +#: fbus-6110.c:3157 gnokii.c:1263 +msgid "waiting for PUK2.\n" +msgstr "" + +#: fbus-6110.c:3137 gnokii.c:1243 +msgid "waiting for Security Code.\n" +msgstr "" + +#: fbus-6110.c:2955 +msgid "waiting for security code\n" +msgstr "" + +#: xgnokii/xgnokii.c:824 +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Jan\355k ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" +# msgid "" +# " Code Error\n" +# " You're not my big owner :-)\n" +# msgstr "" +# " PIN-koodi virheellinen\n" +# " Et ole oikea omistajani :-)\n" +# +# msgid " Code Accepted\n" +# msgstr " PIN-koodi hyväksytty\n" +# +# msgid "Enter your PIN: " +# msgstr "Anna PIN-koodi: " +# +# msgid " Text: " +# msgstr " Teksti: " +# +# msgid " Keyboard is %s\n" +# msgstr " Näppäimistö on %s\n" +# +# msgid " LAC: %02x%02x\n" +# msgstr " LAC: %02x%02x\n" +# +# msgid " CellID: %02x%2x\n" +# msgstr " Solun tunniste: %02x%2x\n" +# +# msgid " Network name: %s\n" +# msgstr " Verkon nimi: %s\n" +# +# msgid " Serial No. %s\n" +# msgstr " Sarjanumero: %s\n" +# diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..c25a92d --- /dev/null +++ b/po/it.po @@ -0,0 +1,4052 @@ +# This is the Italian locale definition for Gnokii. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Gabriele Stella , 2000. +# +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 2001-01-30 12:18+0100\n" +"PO-Revision-Date: 2001-01-29 22:23+0100\n" +"Last-Translator: Gabriele Stella \n" +"Language-Team: gnokii \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c " +"fbus-6110.c gnokii.c gsm-api.c\n" + +#: common/fbus-3810.c:582 common/fbus-6110.c:2219 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "Invia un SMS a %s con il centro messaggi %s\n" + +#: common/fbus-3810.c:686 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "Invio SMS fallito, nuovo tentativo (%d di %d)\n" + +#: common/fbus-3810.c:1304 +msgid "Couldn't open FB38 device" +msgstr "Impossibile aprire il dispositivo FB38" + +#: common/fbus-3810.c:1397 +msgid "restarting.\n" +msgstr "riavvio.\n" + +#: common/fbus-3810.c:1453 +#, c-format +msgid "MT Fail %02x" +msgstr "MT Fallito %02x" + +#: common/fbus-3810.c:1460 common/mbus-6160.c:992 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "CS Fallito %02x != %02x" + +#: common/fbus-3810.c:1572 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "" + +#: common/fbus-3810.c:1588 +#, c-format +msgid "0x16 Registration Response 0x%02x\n" +msgstr "" + +#: common/fbus-3810.c:1589 +#, c-format +msgid "SIM access: %s.\n" +msgstr "Accesso alla SIM: %s.\n" + +#: common/fbus-3810.c:1665 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS Memorizzato nella locazione 0x%02x\n" + +#: common/fbus-3810.c:1675 +#, c-format +msgid "SMS Store failed: 0x%02x\n" +msgstr "Memorizzazione SMS fallita: 0x%02x\n" + +#: common/fbus-3810.c:1796 +msgid "PIN [possibly] entered.\n" +msgstr "PIN [forse] digitato.\n" + +#: common/fbus-3810.c:1805 +msgid "Phone powering off..." +msgstr "Spegnimento telefono..." + +#: common/fbus-3810.c:1834 common/mbus-6160.c:599 +msgid "Standard Ack write failed!" +msgstr "" + +#: common/fbus-3810.c:1860 +msgid "Unknown: " +msgstr "Sconosciuto: " + +#: common/fbus-3810.c:1862 +#, c-format +msgid "Msg Type: %02x " +msgstr "Msg Tipo: %02x " + +#: common/fbus-3810.c:1863 +#, c-format +msgid "Msg Len: %02x " +msgstr "Msg Lung.: %02x " + +#: common/fbus-3810.c:1864 +#, c-format +msgid "Sequence Number: %02x " +msgstr "" + +#: common/fbus-3810.c:1865 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Checksum: %02x \n" +" " + +#: common/fbus-3810.c:1957 common/fbus-3810.c:2087 +msgid "Set Mem Loc Write failed!" +msgstr "Scrittura Set Mem Loc fallita!" + +#: common/fbus-3810.c:2002 +msgid "TX_SendRLPFrame - write:" +msgstr "" + +#: common/fbus-3810.c:2014 +msgid "Request HangupMessage Write failed!" +msgstr "" + +#: common/fbus-3810.c:2026 +msgid "0x4a Write failed!" +msgstr "" + +#: common/fbus-3810.c:2041 +msgid "Explore Write failed!" +msgstr "" + +#: common/fbus-3810.c:2051 +msgid "0x3f Write failed!" +msgstr "" + +#: common/fbus-3810.c:2111 +msgid "Request Mem Loc Write failed!" +msgstr "" + +#: common/fbus-3810.c:2124 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "" + +#: common/fbus-3810.c:2167 +msgid "Send SMS header failed!" +msgstr "Invio intestazione SMS fallita!" + +#: common/fbus-3810.c:2226 +msgid "Store SMS header failed!" +msgstr "Memorizzazione intestazione SMS fallita!" + +#: common/fbus-3810.c:2251 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "Invio blocco SMS %d fallita!" + +#: common/fbus-3810.c:2274 +msgid "Request SMS Mem Loc Write failed!" +msgstr "" + +#: common/fbus-3810.c:2297 +msgid "Delete SMS Mem Loc write failed!" +msgstr "" + +#: common/fbus-3810.c:2316 +msgid "0x15 Write failed!" +msgstr "" + +#: common/fbus-3810.c:2333 common/mbus-6160.c:1070 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - messaggio troppo lungo!\n" + +#: common/fbus-3810.c:2359 common/mbus-6160.c:873 common/mbus-6160.c:1102 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - scrittura:" + +#: common/fbus-3810.c:2372 common/fbus-3810.c:2508 common/fbus-3810.c:2526 +#: common/fbus-3810.c:2544 common/fbus-3810.c:2558 common/fbus-3810.c:2692 +#: common/fbus-3810.c:2753 common/fbus-3810.c:2812 common/fbus-3810.c:2852 +msgid "Write failed!" +msgstr "Scrittura fallita!" + +#: common/fbus-3810.c:2386 +#, c-format +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Chiamata in arrivo - Tipo: %s. %02x, Numero %s.\n" + +#: common/fbus-3810.c:2413 +msgid "0x27 Write failed!" +msgstr "" + +#: common/fbus-3810.c:2461 +msgid "0x4b Write failed!" +msgstr "" + +#: common/fbus-3810.c:2480 +#, c-format +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Stato: %s. Batt %02x RF %02x.\n" + +#: common/fbus-3810.c:2491 +msgid "0x10 Write failed!" +msgstr "" + +#: common/fbus-3810.c:2495 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Chiamata terminata dal telefono (avviso 0x10).\n" + +#: common/fbus-3810.c:2512 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Telefonata terminata dal chiamante (o dalla rete).\n" + +#: common/fbus-3810.c:2530 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Chiamata terminata dal telefono (avviso 0x12).\n" + +#: common/fbus-3810.c:2548 +msgid "Incoming call answered from phone.\n" +msgstr "Risposta del telefono ad una chiamata in arrivo.\n" + +#: common/fbus-3810.c:2562 +#, c-format +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "%s ha stabilito un collegamento - stato dei byte %02x %02x.\n" + +#: common/fbus-3810.c:2579 +msgid "0x2c Write failed!" +msgstr "" + +#: common/fbus-3810.c:2666 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2733 +#, c-format +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"SMS in arrivo %d/%d/%d %d:%02d:%02d tz:0x%02x Mittente: %s(Tipo %02x) Centro " +"Msg: %s\n" + +#: common/fbus-3810.c:2735 +#, c-format +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" + +#: common/fbus-3810.c:2828 +msgid "Mobile phone identification received:\n" +msgstr "" + +#: common/fbus-3810.c:2829 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2831 +#, c-format +msgid " Model: %s\n" +msgstr " Modello: %s\n" + +#: common/fbus-3810.c:2833 +#, c-format +msgid " Revision: %s\n" +msgstr " Versione : %s\n" + +#: common/fbus-3810.c:2907 +msgid "SMS Message Center Data:\n" +msgstr "Centro Messaggi SMS:\n" + +#: common/fbus-3810.c:2908 +#, c-format +msgid "Selected memory: 0x%02x\n" +msgstr "Memoria in uso: 0x%02x\n" + +#: common/fbus-3810.c:2909 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Messaggi nel Telefono: 0x%02x Da leggere: 0x%02x\n" + +#: common/fbus-3810.c:2911 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Messaggi nella SIM: 0x%02x Da leggere: 0x%02x\n" + +#: common/fbus-3810.c:2913 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "Risposta stesso centro: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2915 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Conferma invio: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2917 +#, c-format +msgid "Messages sent as: 0x%02x\n" +msgstr "Messaggio inviato come: 0x%02x\n" + +#: common/fbus-3810.c:2918 +#, c-format +msgid "Message validity: 0x%02x\n" +msgstr "Validità messaggio: 0x%02x\n" + +#: common/fbus-3810.c:2919 +#, c-format +msgid "Unknown: 0x%02x\n" +msgstr "Anonimo: 0x%02x\n" + +#: common/fbus-3810.c:2922 +msgid "UnknownNumber field empty." +msgstr "" + +#: common/fbus-3810.c:2924 +msgid "UnknownNumber: " +msgstr "" + +#: common/fbus-3810.c:2931 +msgid "Number field empty." +msgstr "" + +#: common/fbus-3810.c:2934 xgnokii/xgnokii_calendar.c:229 +msgid "Number: " +msgstr "Numero: " + +#: common/fbus-6110-ringtones.c:352 +#, c-format +msgid "Error in PackRingtone - StartBit different to HowLong %d - %d)\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:411 +msgid "Not header\n" +msgstr "Non intestato\n" + +#: common/fbus-6110-ringtones.c:418 +msgid "Not RingingToneProgramming\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:429 +msgid "Not Sound\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:436 +msgid "Not BasicSongType\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:454 +msgid "Not PatternHeaderId\n" +msgstr "" + +#: common/fbus-6110-ringtones.c:556 +msgid "Unsupported block\n" +msgstr "" + +#: common/fbus-6110.c:937 +msgid "Timeout in IR-mode\n" +msgstr "Timeout in modalità IR\n" + +#: common/fbus-6110.c:974 +msgid "Couldn't open FB61 infrared device" +msgstr "Impossibile aprire il dispositivo ad infrarossi FB61" + +#: common/fbus-6110.c:1049 +msgid "Starting IR mode...!\n" +msgstr "Avvio modalità IR...!\n" + +#: common/fbus-6110.c:2758 gnokii/gnokii.c:978 gnokii/gnokii.c:1808 +#: gnokii/gnokii.c:3215 gnokii/gnokii.c:3242 +msgid "Send succeeded!\n" +msgstr "Invio effettuato!\n" + +#: common/fbus-6110.c:2760 gnokii/gnokii.c:980 gnokii/gnokii.c:1810 +#: gnokii/gnokii.c:3217 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "Invio SMS non riuscito (errore=%d)\n" + +#: common/fbus-6110.c:2791 +msgid "Serial flags dump:\n" +msgstr "Stato dei Serial flags:\n" + +#: common/fbus-6110.c:2792 common/mbus-640.c:774 +#, c-format +msgid "DTR is %s.\n" +msgstr "Il DTR è %s.\n" + +#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794 +#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775 +msgid "up" +msgstr "attivo" + +#: common/fbus-6110.c:2792 common/fbus-6110.c:2793 common/fbus-6110.c:2794 +#: common/fbus-6110.c:2795 common/mbus-640.c:774 common/mbus-640.c:775 +msgid "down" +msgstr "disattivo" + +#: common/fbus-6110.c:2793 common/mbus-640.c:775 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS è %s.\n" + +#: common/fbus-6110.c:2794 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR è %s.\n" + +#: common/fbus-6110.c:2795 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS è %s.\n" + +#: common/fbus-6110.c:2830 +msgid "Setting FBUS communication...\n" +msgstr "Attivazione comunicazione FBUS...\n" + +#: common/fbus-6110.c:2865 +msgid "Couldn't open FB61 device" +msgstr "Impossibile aprire il dispositivo FB61" + +#: common/fbus-6110.c:2999 +msgid "Message: Call message, type 0x02:" +msgstr "Messaggio: Call message, tipo 0x02:" + +#: common/fbus-6110.c:3000 common/fbus-6110.c:3012 common/fbus-6110.c:3114 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr "" + +#: common/fbus-6110.c:3010 +msgid "Message: Call message, type 0x03:" +msgstr "Messaggio: Call message, tipo 0x03:" + +#: common/fbus-6110.c:3011 common/fbus-6110.c:3027 common/fbus-6110.c:3045 +#: common/fbus-6110.c:3076 common/fbus-6110.c:3087 common/fbus-6110.c:3113 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Nr. sequenziale della chiamata: %d\n" + +#: common/fbus-6110.c:3026 +msgid "Message: Remote end hang up.\n" +msgstr "Avviso: Il chiamato ha chiuso la comunicazione.\n" + +#: common/fbus-6110.c:3040 +msgid "Message: Incoming call alert:\n" +msgstr "Avviso: Chiamata in arrivo:\n" + +#: common/fbus-6110.c:3046 common/fbus-6110.c:3358 +msgid " Number: " +msgstr " Numero: " + +#: common/fbus-6110.c:3054 common/fbus-6110.c:3342 +msgid " Name: " +msgstr " Nome: " + +#: common/fbus-6110.c:3075 +msgid "Message: Call answered.\n" +msgstr "Avviso: Chiamata risposta.\n" + +#: common/fbus-6110.c:3086 +msgid "Message: Call ended by your phone.\n" +msgstr "Avviso: Chiamata terminata dal vostro telefono.\n" + +#: common/fbus-6110.c:3112 +msgid "Message: Call message, type 0x0a:" +msgstr "" + +#: common/fbus-6110.c:3125 +msgid "Message: Unknown message of type 0x01\n" +msgstr "" + +#: common/fbus-6110.c:3143 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Avviso: messaggio SMS inviato regolarmente.\n" + +#: common/fbus-6110.c:3154 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Avviso: Invio SMS fallito.\n" + +#: common/fbus-6110.c:3163 +msgid "Message: SMS Message Received\n" +msgstr "Avviso: Ricevuto SMS\n" + +#: common/fbus-6110.c:3164 common/fbus-6110.c:4617 +#, c-format +msgid " SMS center number: %s\n" +msgstr " Numero centro messaggi SMS: %s\n" + +#: common/fbus-6110.c:3168 common/fbus-6110.c:4618 +#, c-format +msgid " Remote number: %s\n" +msgstr " Numero chiamato: %s\n" + +#: common/fbus-6110.c:3169 +#, c-format +msgid " Date: %s\n" +msgstr " Data: %s\n" + +#: common/fbus-6110.c:3170 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:3184 +msgid "Message: Cell Broadcast enabled/disabled successfully.\n" +msgstr "" +"Avviso: Informazioni Microcella abilitato/disabilitato correttamente.\n" + +#: common/fbus-6110.c:3196 +msgid "Message: CB received.\n" +msgstr "Avviso: ricevuto CB.\n" + +#: common/fbus-6110.c:3198 +#, c-format +msgid "Message: channel number %i\n" +msgstr "Avviso: numero di canale %i\n" + +#: common/fbus-6110.c:3214 +msgid "Message: SMS Center correctly set.\n" +msgstr "Messaggio: Centro messaggi SMS impostato.\n" + +#: common/fbus-6110.c:3230 +msgid "Message: SMS Center received:\n" +msgstr "Avviso: ricevuto Centro SMS:\n" + +#: common/fbus-6110.c:3231 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Il nome del Centro SMS è %s\n" + +#: common/fbus-6110.c:3232 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " Il numero del centro SMS è %s\n" + +#: common/fbus-6110.c:3234 +msgid " SMS Center message format is " +msgstr " Il formato dei messaggi SMS è " + +#: common/fbus-6110.c:3239 gnokii/gnokii.c:1117 xgnokii/xgnokii.c:546 +#: xgnokii/xgnokii.c:575 xgnokii/xgnokii.c:1445 xgnokii/xgnokii_calendar.c:862 +msgid "Text" +msgstr "Testo" + +#: common/fbus-6110.c:3243 gnokii/gnokii.c:1121 xgnokii/xgnokii.c:550 +#: xgnokii/xgnokii.c:1459 +msgid "Paging" +msgstr "Paging" + +#: common/fbus-6110.c:3247 gnokii/gnokii.c:1125 xgnokii/xgnokii.c:554 +#: xgnokii/xgnokii.c:1452 xgnokii/xgnokii_contacts.c:1784 +msgid "Fax" +msgstr "Fax" + +#: common/fbus-6110.c:3251 gnokii/gnokii.c:1130 +msgid "Email" +msgstr "Email" + +#: common/fbus-6110.c:3255 common/fbus-6110.c:3289 common/fbus-6110.c:4840 +#: common/fbus-6110.c:5388 gnokii/gnokii.c:1142 gnokii/gnokii.c:1176 +#: xgnokii/xgnokii_calendar.c:153 +msgid "Unknown" +msgstr "Sconosciuto" + +#: common/fbus-6110.c:3260 +msgid " SMS Center message validity is " +msgstr " La permanenza dei messaggi nel centro SMS è " + +#: common/fbus-6110.c:3265 gnokii/gnokii.c:1152 +msgid "1 hour" +msgstr "1 ora" + +#: common/fbus-6110.c:3269 gnokii/gnokii.c:1156 +msgid "6 hours" +msgstr "6 ore" + +#: common/fbus-6110.c:3273 gnokii/gnokii.c:1160 +msgid "24 hours" +msgstr "24 ore" + +#: common/fbus-6110.c:3277 gnokii/gnokii.c:1164 +msgid "72 hours" +msgstr "72 ore" + +#: common/fbus-6110.c:3281 gnokii/gnokii.c:1168 xgnokii/xgnokii.c:598 +#: xgnokii/xgnokii.c:1524 +msgid "1 week" +msgstr "1 settimana" + +#: common/fbus-6110.c:3285 gnokii/gnokii.c:1172 +msgid "Maximum time" +msgstr "Tempo massimo" + +#: common/fbus-6110.c:3307 +msgid "Message: SMS Center error received:\n" +msgstr "" + +#: common/fbus-6110.c:3308 +msgid " The request for SMS Center failed.\n" +msgstr "" + +#: common/fbus-6110.c:3319 +msgid "Unknown message!\n" +msgstr "" + +#: common/fbus-6110.c:3341 +msgid "Message: Phonebook entry received:\n" +msgstr "" + +#: common/fbus-6110.c:3378 +msgid " Date: " +msgstr " Data: " + +#: common/fbus-6110.c:3380 +msgid " Time: " +msgstr " Ora: " + +#: common/fbus-6110.c:3393 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Avviso: voce in Rubrica errata:\n" + +#: common/fbus-6110.c:3401 +msgid " Invalid memory type!\n" +msgstr " Tipo memoria errata!\n" + +#: common/fbus-6110.c:3411 common/fbus-6110.c:3449 +msgid " Unknown error!\n" +msgstr " Errore indeterminato!\n" + +#: common/fbus-6110.c:3422 +msgid "Message: Phonebook written correctly.\n" +msgstr "Avviso: Scrittura Rubrica effettuata correttamente.\n" + +#: common/fbus-6110.c:3439 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "" +"Avviso: Scrittura in Rubrica non effettuata - il nome è troppo lungo.\n" + +#: common/fbus-6110.c:3460 +msgid "Message: Memory status received:\n" +msgstr "Avviso: Ricezione condizioni memoria:\n" + +#: common/fbus-6110.c:3462 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Tipo di memoria: %s\n" + +#: common/fbus-6110.c:3463 +#, c-format +msgid " Used: %d\n" +msgstr " In uso: %d\n" + +#: common/fbus-6110.c:3464 +#, c-format +msgid " Free: %d\n" +msgstr " Libera: %d\n" + +#: common/fbus-6110.c:3479 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" +"Avviso: Errore analizzando la memoria, il telefono potrebbe essere spento.\n" + +#: common/fbus-6110.c:3486 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" +"Avviso: Errore di memoria, il tipo non è supportato dal modello di " +"telefono.\n" + +#: common/fbus-6110.c:3493 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "" + +#: common/fbus-6110.c:3500 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" + +#: common/fbus-6110.c:3517 +msgid "Message: Caller group logo etc.\n" +msgstr "Avvisssso: Logo gruppo chiamante etc.\n" + +#: common/fbus-6110.c:3518 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Nome Gruppo chiamante: %s\n" + +#: common/fbus-6110.c:3538 +msgid "Message: Caller group data received but not requested!\n" +msgstr "" + +#: common/fbus-6110.c:3548 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "" + +#: common/fbus-6110.c:3556 +msgid "Message: Caller group data set correctly.\n" +msgstr "" + +#: common/fbus-6110.c:3564 +msgid "Message: Error attempting to set caller group data\n" +msgstr "" + +#: common/fbus-6110.c:3575 +msgid "Message: Speed dial entry received:\n" +msgstr "" + +#: common/fbus-6110.c:3576 +#, c-format +msgid " Location: %d\n" +msgstr "" + +#: common/fbus-6110.c:3577 +#, c-format +msgid " MemoryType: %s\n" +msgstr "" + +#: common/fbus-6110.c:3578 +#, c-format +msgid " Number: %d\n" +msgstr "" + +#: common/fbus-6110.c:3588 +msgid "Message: Speed dial entry error\n" +msgstr "" + +#: common/fbus-6110.c:3598 +msgid "Message: Speed dial entry set.\n" +msgstr "" + +#: common/fbus-6110.c:3608 +msgid "Message: Speed dial entry setting error.\n" +msgstr "" + +#: common/fbus-6110.c:3618 +msgid "Message: Unknown message of type 0x03\n" +msgstr "" + +#: common/fbus-6110.c:3634 +msgid "Message: Phone status received:\n" +msgstr "" + +#: common/fbus-6110.c:3635 +msgid " Mode: " +msgstr "" + +#: common/fbus-6110.c:3641 +msgid "registered within the network\n" +msgstr "" + +#: common/fbus-6110.c:3650 +msgid "call in progress\n" +msgstr "chiamata in corso\n" + +#: common/fbus-6110.c:3656 +msgid "waiting for security code\n" +msgstr "fornire codice di sicurezza\n" + +#: common/fbus-6110.c:3662 +msgid "powered off\n" +msgstr "spegnimento\n" + +#: common/fbus-6110.c:3668 common/fbus-6110.c:3690 +msgid "unknown\n" +msgstr "sconosciuto\n" + +#: common/fbus-6110.c:3672 +msgid " Power source: " +msgstr " Alimentazione: " + +#: common/fbus-6110.c:3678 +msgid "AC/DC\n" +msgstr "CA/CC\n" + +#: common/fbus-6110.c:3684 +msgid "battery\n" +msgstr "batteria\n" + +#: common/fbus-6110.c:3694 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Livello batteria: %d\n" + +#: common/fbus-6110.c:3695 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Ampiezza segnale: %d\n" + +#: common/fbus-6110.c:3707 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Avviso: Messaggio sconosciuto del tipo 0x04\n" + +#: common/fbus-6110.c:3723 +msgid "Message: Profile feature change result.\n" +msgstr "" + +#: common/fbus-6110.c:3781 +msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n" +msgstr "" + +#: common/fbus-6110.c:3805 +msgid "Startup logo supported - " +msgstr "" + +#: common/fbus-6110.c:3808 +msgid "currently set\n" +msgstr "" + +#: common/fbus-6110.c:3810 common/fbus-6110.c:3829 common/fbus-6110.c:3849 +#: gnokii/gnokii.c:1913 +msgid "currently empty\n" +msgstr "" + +#: common/fbus-6110.c:3822 +msgid "Startup Text supported - " +msgstr "" + +#: common/fbus-6110.c:3825 common/fbus-6110.c:3845 +msgid "currently set to \"" +msgstr "" + +#: common/fbus-6110.c:3826 common/fbus-6110.c:3846 +#, c-format +msgid "%c" +msgstr "" + +#: common/fbus-6110.c:3827 common/fbus-6110.c:3847 +msgid "\"\n" +msgstr "" + +#: common/fbus-6110.c:3842 +msgid "Dealer Welcome supported - " +msgstr "" + +#: common/fbus-6110.c:3862 +msgid "Message: Startup logo received but not requested!\n" +msgstr "" + +#: common/fbus-6110.c:3872 +msgid "" +"Message: Startup logo, welcome note or dealer welcome note correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:3898 +msgid "Message: Operator logo correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:3907 +msgid "Message: Error setting operator logo!\n" +msgstr "" + +#: common/fbus-6110.c:3930 +#, c-format +msgid "Message: Operator Logo for %s (%s) network received.\n" +msgstr "" + +#: common/fbus-6110.c:3948 +msgid "Message: Operator logo received but not requested!\n" +msgstr "" + +#: common/fbus-6110.c:3957 +msgid "Message: Error getting operator logo!\n" +msgstr "" + +#: common/fbus-6110.c:3975 +msgid "Message: Security Code status received: " +msgstr "" + +#: common/fbus-6110.c:3981 gnokii/gnokii.c:1659 +msgid "waiting for Security Code.\n" +msgstr "fornire il Codice di Sicurezza.\n" + +#: common/fbus-6110.c:3986 gnokii/gnokii.c:1664 +msgid "waiting for PIN.\n" +msgstr "fornire il PIN.\n" + +#: common/fbus-6110.c:3991 gnokii/gnokii.c:1669 +msgid "waiting for PIN2.\n" +msgstr "fornire il PIN2.\n" + +#: common/fbus-6110.c:3996 gnokii/gnokii.c:1674 +msgid "waiting for PUK.\n" +msgstr "fornire il PUK.\n" + +#: common/fbus-6110.c:4001 gnokii/gnokii.c:1679 +msgid "waiting for PUK2.\n" +msgstr "fornire il PUK2.\n" + +#: common/fbus-6110.c:4006 gnokii/gnokii.c:1684 +msgid "nothing to enter.\n" +msgstr "nothing to enter.\n" + +#: common/fbus-6110.c:4011 gnokii/gnokii.c:1689 +msgid "Unknown!\n" +msgstr "Sconosciuto!\n" + +#: common/fbus-6110.c:4023 +msgid "Message: Security code accepted.\n" +msgstr "Messaggio: Codice di Sicurezza valido.\n" + +#: common/fbus-6110.c:4033 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "" +"Messaggio: Codice di Sicurezza errato. Non sei il mio proprietario :-)\n" + +#: common/fbus-6110.c:4060 +msgid "Message: Network informations:\n" +msgstr "Messaggio: Informazioni sulla rete:\n" + +#: common/fbus-6110.c:4062 +#, c-format +msgid " CellID: %s\n" +msgstr " CellID: %s\n" + +#: common/fbus-6110.c:4063 +#, c-format +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: common/fbus-6110.c:4064 +#, c-format +msgid " Network code: %s\n" +msgstr " Codice della rete : %s\n" + +#: common/fbus-6110.c:4065 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Nome della rete : %s (%s)\n" + +#: common/fbus-6110.c:4068 +msgid " Status: " +msgstr " Stato : " + +#: common/fbus-6110.c:4071 +msgid "home network selected" +msgstr "selezionata rete locale" + +#: common/fbus-6110.c:4072 +msgid "roaming network" +msgstr "rete in roaming" + +#: common/fbus-6110.c:4073 +msgid "requesting network" +msgstr "richiesta rete" + +#: common/fbus-6110.c:4074 +msgid "not registered in the network" +msgstr "non registrato nella rete" + +#: common/fbus-6110.c:4075 xgnokii/xgnokii_lowlevel.c:116 +#: xgnokii/xgnokii_lowlevel.c:191 xgnokii/xgnokii_lowlevel.c:193 +#: xgnokii/xgnokii_lowlevel.c:194 +msgid "unknown" +msgstr "sconosciuto" + +#: common/fbus-6110.c:4080 +#, c-format +msgid " Network selection: %s\n" +msgstr " Selezione rete : %s\n" + +#: common/fbus-6110.c:4080 +msgid "manual" +msgstr "manuale" + +#: common/fbus-6110.c:4080 +msgid "automatic" +msgstr "automatica" + +#: common/fbus-6110.c:4090 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "" + +#: common/fbus-6110.c:4125 gnokii/gnokii.c:3048 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Chiamata in corso: %s\n" + +#: common/fbus-6110.c:4126 gnokii/gnokii.c:3049 +#, c-format +msgid "Unknown: %s\n" +msgstr "Sconosciuto: %s\n" + +#: common/fbus-6110.c:4127 gnokii/gnokii.c:3050 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "SMS Non letti: %s\n" + +#: common/fbus-6110.c:4128 gnokii/gnokii.c:3051 +#, c-format +msgid "Voice call: %s\n" +msgstr "Chiamata vocale: %s\n" + +#: common/fbus-6110.c:4129 gnokii/gnokii.c:3052 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Chiamata fax attiva: %s\n" + +#: common/fbus-6110.c:4130 gnokii/gnokii.c:3053 +#, c-format +msgid "Data call active: %s\n" +msgstr "Chiamata dati in corso: %s\n" + +#: common/fbus-6110.c:4131 gnokii/gnokii.c:3054 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Tastiera bloccata: %s\n" + +#: common/fbus-6110.c:4132 gnokii/gnokii.c:3055 +#, c-format +msgid "SMS storage full: %s\n" +msgstr "Memoria SMS piena: %s\n" + +#: common/fbus-6110.c:4145 +msgid "Display output successfully disabled/enabled.\n" +msgstr "" + +#: common/fbus-6110.c:4155 +msgid "Unknown message of type 0x0d.\n" +msgstr "" + +#: common/fbus-6110.c:4174 +msgid "Message: Date and time set correctly\n" +msgstr "Avviso: Date eed ora impostate correttamente\n" + +#: common/fbus-6110.c:4184 common/fbus-6110.c:4230 +msgid "Message: Date and time set error\n" +msgstr "Avviso: Errore nell'impostazione di data e ora\n" + +#: common/fbus-6110.c:4204 +msgid "Message: Date and time\n" +msgstr "Avviso: Data ed ora\n" + +#: common/fbus-6110.c:4205 common/fbus-6110.c:4358 gnokii/gnokii.c:2276 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Ora: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:4206 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Data: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:4220 +msgid "Message: Alarm set correctly\n" +msgstr "Avviso: Sveglia impostata regolarmente\n" + +#: common/fbus-6110.c:4242 +msgid "Message: Alarm\n" +msgstr "Avviso: Allarme\n" + +#: common/fbus-6110.c:4243 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Sveglia: %02d:%02d\n" + +#: common/fbus-6110.c:4244 +#, c-format +msgid " Alarm is %s\n" +msgstr " La sveglia è %s\n" + +#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049 +#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052 +#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055 +msgid "on" +msgstr "on" + +#: common/fbus-6110.c:4244 gnokii/gnokii.c:3048 gnokii/gnokii.c:3049 +#: gnokii/gnokii.c:3050 gnokii/gnokii.c:3051 gnokii/gnokii.c:3052 +#: gnokii/gnokii.c:3053 gnokii/gnokii.c:3054 gnokii/gnokii.c:3055 +msgid "off" +msgstr "off" + +#: common/fbus-6110.c:4260 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Avviso: Informazione sconosciuta tipo 0x11\n" + +#: common/fbus-6110.c:4283 +msgid "Message: Calendar note write succesfull!\n" +msgstr "Avviso: Nota in agenda salvata correttamente!\n" + +#: common/fbus-6110.c:4293 common/fbus-6110.c:4303 +msgid "Message: Calendar note write failed!\n" +msgstr "Avviso: Impossibile salvare la nota nell'agenda!\n" + +#: common/fbus-6110.c:4312 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "" + +#: common/fbus-6110.c:4352 +msgid "Message: Calendar note received.\n" +msgstr "Avviso: Ricevuta nota in agenda.\n" + +#: common/fbus-6110.c:4354 gnokii/gnokii.c:2272 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Data: %d-%02d-%02d\n" + +#: common/fbus-6110.c:4365 gnokii/gnokii.c:2281 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Data allarme: %d-%02d-%02d\n" + +#: common/fbus-6110.c:4369 gnokii/gnokii.c:2285 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Ora allarme: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:4374 +#, c-format +msgid " Type: %d\n" +msgstr " Tipo: %d\n" + +#: common/fbus-6110.c:4375 gnokii/gnokii.c:2290 +#, c-format +msgid " Text: %s\n" +msgstr " Testo: %s\n" + +#: common/fbus-6110.c:4378 gnokii/gnokii.c:2293 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefono: %s\n" + +#: common/fbus-6110.c:4388 +msgid "Message: Calendar note not available\n" +msgstr "Avviso: Nessuna nota diponibile nell'agenda\n" + +#: common/fbus-6110.c:4398 +msgid "Message: Calendar note error\n" +msgstr "Avviso: Errore nell' agenda\n" + +#: common/fbus-6110.c:4420 +msgid "Message: Calendar note deleted\n" +msgstr "Avviso: Nota in agenda eliminata\n" + +#: common/fbus-6110.c:4431 +msgid "Message: Calendar note can't be deleted\n" +msgstr "Avviso: Non è possibile eliminare ;a nota in agenda\n" + +#: common/fbus-6110.c:4441 +msgid "Message: Calendar note deleting error\n" +msgstr "Avviso: Errore eliminando la nota in agenda\n" + +#: common/fbus-6110.c:4457 +msgid "Message: Calendar Alarm active\n" +msgstr "Avviso: Allarme in agenda attivo\n" + +#: common/fbus-6110.c:4458 +#, c-format +msgid " Item number: %d\n" +msgstr " Numero elemento: %d\n" + +#: common/fbus-6110.c:4466 +msgid "Message: Unknown message of type 0x13\n" +msgstr "" + +#: common/fbus-6110.c:4529 +msgid "Concatenated message!!!\n" +msgstr "" + +#: common/fbus-6110.c:4560 +#, c-format +msgid "Number: %d\n" +msgstr "Numero: %d\n" + +#: common/fbus-6110.c:4565 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "" + +#: common/fbus-6110.c:4568 +msgid "Sent\n" +msgstr "" + +#: common/fbus-6110.c:4570 +msgid "Not sent\n" +msgstr "" + +#: common/fbus-6110.c:4574 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "" + +#: common/fbus-6110.c:4577 +msgid "Delivery Report\n" +msgstr "" + +#: common/fbus-6110.c:4579 +msgid "Unknown type\n" +msgstr "" + +#: common/fbus-6110.c:4582 +msgid "Read\n" +msgstr "" + +#: common/fbus-6110.c:4584 +msgid "Not read\n" +msgstr "" + +#: common/fbus-6110.c:4586 +#, c-format +msgid " Date: %s " +msgstr "" + +#: common/fbus-6110.c:4594 common/fbus-6110.c:4610 gnokii/gnokii.c:1352 +#: gnokii/gnokii.c:1365 gnokii/gnokii.c:1392 +#, c-format +msgid "%02d00" +msgstr "" + +#: common/fbus-6110.c:4601 +#, c-format +msgid " SMSC response date: %s " +msgstr "" + +#: common/fbus-6110.c:4686 +msgid "Delivered" +msgstr "" + +#: common/fbus-6110.c:4691 +msgid "SM received by the SME" +msgstr "" + +#: common/fbus-6110.c:4694 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: common/fbus-6110.c:4697 +msgid "SM replaced by the SC" +msgstr "" + +#: common/fbus-6110.c:4705 +msgid "Failed" +msgstr "" + +#: common/fbus-6110.c:4712 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "" + +#: common/fbus-6110.c:4717 common/fbus-6110.c:4810 +msgid "Congestion" +msgstr "" + +#: common/fbus-6110.c:4721 common/fbus-6110.c:4814 +msgid "SME busy" +msgstr "" + +#: common/fbus-6110.c:4725 common/fbus-6110.c:4818 +msgid "No response from SME" +msgstr "" + +#: common/fbus-6110.c:4729 common/fbus-6110.c:4822 +msgid "Service rejected" +msgstr "" + +#: common/fbus-6110.c:4733 common/fbus-6110.c:4769 common/fbus-6110.c:4826 +msgid "Quality of service not aviable" +msgstr "" + +#: common/fbus-6110.c:4737 common/fbus-6110.c:4830 +msgid "Error in SME" +msgstr "" + +#: common/fbus-6110.c:4741 common/fbus-6110.c:4793 common/fbus-6110.c:4834 +#: common/fbus-6110.c:4844 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: common/fbus-6110.c:4748 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "" + +#: common/fbus-6110.c:4753 +msgid "Remote procedure error" +msgstr "" + +#: common/fbus-6110.c:4757 +msgid "Incompatibile destination" +msgstr "" + +#: common/fbus-6110.c:4761 +msgid "Connection rejected by SME" +msgstr "" + +#: common/fbus-6110.c:4765 +msgid "Not obtainable" +msgstr "" + +#: common/fbus-6110.c:4773 +msgid "No internetworking available" +msgstr "" + +#: common/fbus-6110.c:4777 +msgid "SM Validity Period Expired" +msgstr "" + +#: common/fbus-6110.c:4781 +msgid "SM deleted by originating SME" +msgstr "" + +#: common/fbus-6110.c:4785 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: common/fbus-6110.c:4789 +msgid "SM does not exist" +msgstr "" + +#: common/fbus-6110.c:4802 +msgid "Pending" +msgstr "" + +#: common/fbus-6110.c:4806 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "" + +#: common/fbus-6110.c:4868 +#, c-format +msgid "Message stored at %d\n" +msgstr "Messaggio memorizzato in %d\n" + +#: common/fbus-6110.c:4873 +msgid "SMS saving failed\n" +msgstr "Salvataggio SMS fallito\n" + +#: common/fbus-6110.c:4876 +msgid " All locations busy.\n" +msgstr " Tutte le memorie sono occupate.\n" + +#: common/fbus-6110.c:4880 common/fbus-6110.c:4903 +msgid " Invalid location!\n" +msgstr " Indirizzo memoria non corretto!\n" + +#: common/fbus-6110.c:4884 +msgid " Unknown error.\n" +msgstr " Errore indeterminato.\n" + +#: common/fbus-6110.c:4895 +msgid "Message: SMS reading failed.\n" +msgstr "" + +#: common/fbus-6110.c:4913 +msgid " Empty SMS location.\n" +msgstr "" + +#: common/fbus-6110.c:4926 +msgid "Message: SMS deleted successfully.\n" +msgstr "" + +#: common/fbus-6110.c:4936 +msgid "Message: SMS Status Received\n" +msgstr "" + +#: common/fbus-6110.c:4937 +#, c-format +msgid " The number of messages: %d\n" +msgstr "" + +#: common/fbus-6110.c:4938 +#, c-format +msgid " Unread messages: %d\n" +msgstr "" + +#: common/fbus-6110.c:4950 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "" + +#: common/fbus-6110.c:4981 +msgid "Message: Netmonitor correctly set.\n" +msgstr "" + +#: common/fbus-6110.c:4991 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "" + +#: common/fbus-6110.c:5007 +msgid "Unknown message of type 0x40.\n" +msgstr "" + +#: common/fbus-6110.c:5029 +msgid "Message: Mobile phone identification received:\n" +msgstr "" + +#: common/fbus-6110.c:5030 +#, c-format +msgid " IMEI: %s\n" +msgstr "" + +#: common/fbus-6110.c:5032 +#, c-format +msgid " Model: %s\n" +msgstr "" + +#: common/fbus-6110.c:5034 +#, c-format +msgid " Production Code: %s\n" +msgstr "" + +#: common/fbus-6110.c:5036 +#, c-format +msgid " HW: %s\n" +msgstr "" + +#: common/fbus-6110.c:5038 +#, c-format +msgid " Firmware: %s\n" +msgstr "" + +#: common/fbus-6110.c:5044 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr "" + +#: common/fbus-6110.c:5064 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "" + +#: common/fbus-6110.c:5082 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "" + +#: common/fbus-6110.c:5106 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "" + +#: common/fbus-6110.c:5122 +msgid "Message: Unknown message.\n" +msgstr "" + +#: common/fbus-6110.c:5242 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "" + +#: common/fbus-6110.c:5243 +msgid "Please report it ...\n" +msgstr "" + +#: common/fbus-6110.c:5310 +msgid "Bad checksum!\n" +msgstr "" + +#: common/fbus-6110.c:5382 xgnokii/xgnokii.c:1759 +msgid "Phone" +msgstr "Telefono" + +#: common/fbus-6110.c:5385 +msgid "PC" +msgstr "PC" + +#: common/fbus-6110.c:5403 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Msg Dest: %s\n" + +#: common/fbus-6110.c:5404 +#, c-format +msgid "Msg Source: %s\n" +msgstr "" + +#: common/fbus-6110.c:5406 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "" + +#: common/fbus-6110.c:5408 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "" + +#: common/fbus-6110.c:5409 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" + +#: common/fbus-6110.c:5480 +msgid "PC: " +msgstr "" + +#: common/fbus-6110.c:5554 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "" + +#: common/mbus-6160.c:551 +msgid "Standard Ack write (0x40) failed!" +msgstr "" + +#: common/mbus-6160.c:577 +msgid "Standard Ack write (0xd2) failed!" +msgstr "" + +#: common/mbus-6160.c:1022 +msgid "Couldn't open MB61 device: " +msgstr "Impossibile aprire il dispositivo MB61: " + +#: common/mbus-640.c:667 +msgid "Phone: " +msgstr "Telefono: " + +#: common/mbus-640.c:697 common/mbus-640.c:797 +msgid "PC : " +msgstr "PC : " + +#: common/mbus-640.c:707 common/mbus-640.c:810 +msgid "Write error!\n" +msgstr "Errore in scrittura!\n" + +#: common/mbus-640.c:734 +msgid "Setting MBUS communication...\n" +msgstr "" + +#: common/rlp-common.c:705 +msgid "Unknown!!! " +msgstr "Sconosciuto!!! " + +#: common/rlp-common.c:770 +msgid "BAD" +msgstr "" + +#: common/rlp-common.c:892 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "" + +#: common/rlp-common.c:1007 +msgid "Send_TXU()\n" +msgstr "" + +#: common/rlp-common.c:1008 +#, c-format +msgid "XID_R_State=%d\n" +msgstr "" + +#: common/rlp-common.c:1380 +msgid "RLP state 0.\n" +msgstr "" + +#: common/rlp-common.c:1417 +msgid "RLP state 1.\n" +msgstr "" + +#: common/rlp-common.c:1465 +msgid "RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1499 +msgid "UA received in RLP state 2.\n" +msgstr "" + +#: common/rlp-common.c:1556 +msgid "RLP state 3.\n" +msgstr "" + +#: common/rlp-common.c:1614 +msgid "RLP state 4.\n" +msgstr "" + +#: common/rlp-common.c:1753 +msgid "RLP state 5.\n" +msgstr "" + +#: common/rlp-common.c:1812 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "" + +#: common/rlp-common.c:1843 +msgid "RLP state 7.\n" +msgstr "" + +#: common/rlp-common.c:1885 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "" + +#: gnokii/gnokii.c:206 +#, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"gnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no warranty for gnokii. See GPL for details.\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Versione %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"gnokii è free software, rilasciato sotto la GNU General Public License, e " +"potete\n" +"apportare modifiche e/o distribuire le copie rispettandone le condizioni.\n" +"Non esiste nessuna garanzia per gnokii. Vedere la GPL per i dettagli.\n" +"Compilato %s %s per %s su %s \n" + +#: gnokii/gnokii.c:223 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start [end]\n" +" gnokii --writephonebook [-i]\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start [end] [-f file] [-d]\n" +" gnokii --deletesms memory_type start [end]\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --savesms [-m] [-l n] [-i]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote vcardfile number\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destination logofile [network code]\n" +" gnokii --sendringtone destination rtttlfile\n" +" gnokii --setlogo op [logofile] [network code]\n" +" gnokii --setlogo startup [logofile]\n" +" gnokii --setlogo caller [logofile] [caller group number] [group " +"name]\n" +" gnokii --setlogo {dealer|text} [text]\n" +" gnokii --getlogo op [logofile] [network code]\n" +" gnokii --getlogo startup [logofile] [network code]\n" +" gnokii --getlogo caller [logofile][caller group number][network " +"code]\n" +" gnokii --getlogo {dealer|text}\n" +" gnokii --setringtone rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +" gnokii --displayoutput\n" +" gnokii --keysequence\n" +msgstr "" +" utilizzo: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory tipo_memoria inizio [fine]\n" +" gnokii --writephonebook [-i]\n" +" gnokii --getspeeddial numero\n" +" gnokii --setspeeddial numero tipo_memoria locazione\n" +" gnokii --getsms tipo_memoria inizio [fine] [-f file] -d\n" +" gnokii --deletesms tipo_memoria inizio [fine]\n" +" gnokii --sendsms destinazione [--smsc numero_centro_messaggi |\n" +" --smscno indice_centro_messaggi] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --savesms [-m] [-l n] [-i]\n" +" gnokii --getsmsc numero_centro_messaggi\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice numero\n" +" gnokii --getcalendarnote indice [-v]\n" +" gnokii --writecalendarnote vcardfile numero\n" +" gnokii --deletecalendarnote indice\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf stringa\n" +" gnokii --sendlogo {caller|op} destinazione logofile [network " +"code]\n" +" gnokii --sendringtone destinazione rtttlfile\n" +" gnokii --setlogo op [logofile] [network code]\n" +" gnokii --setlogo startup [logofile]\n" +" gnokii --setlogo caller [logofile] [caller group number] [group " +"name]\n" +" gnokii --setlogo {dealer|text} [text]\n" +" gnokii --getlogo op [logofile] [network code]\n" +" gnokii --getlogo startup [logofile] [network code]\n" +" gnokii --getlogo caller [logofile][caller group number][network " +"code]\n" +" gnokii --getlogo {dealer|text}\n" +" gnokii --setringtone rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +" gnokii --displayoutput\n" +" gnokii --keysequence\n" + +#: gnokii/gnokii.c:266 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" + +#: common/virtmodem.c:292 gnokii/gnokii.c:293 gnokii/gnokii.c:3187 +#: xgnokii/xgnokii_lowlevel.c:171 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "" +"Inizializzazione GSM/FBUS fallita! (Modello non supportato ?). Uscita.\n" + +#: gnokii/gnokii.c:304 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n" + +#: gnokii/gnokii.c:580 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "Usare '%s --help' per informazioni .\n" + +#: gnokii/gnokii.c:778 +#, c-format +msgid "Unknown option: %d\n" +msgstr "Opzione sconosciuta: %d\n" + +#: gnokii/gnokii.c:788 +msgid "Wrong number of arguments\n" +msgstr "Numero di argomenti non valido\n" + +#: gnokii/gnokii.c:859 gnokii/gnokii.c:917 gnokii/gnokii.c:1076 +msgid "Input too long!\n" +msgstr "Input too long!\n" + +#: gnokii/gnokii.c:912 gnokii/gnokii.c:1071 +msgid "Couldn't read from stdin!\n" +msgstr "Impossibile leggere da stdin!\n" + +#: gnokii/gnokii.c:1046 +msgid "Message at specified location exists. " +msgstr "" + +#: gnokii/gnokii.c:1048 gnokii/gnokii.c:1421 gnokii/gnokii.c:2948 +msgid "Overwrite? (yes/no) " +msgstr "Sovrascrivo (si/no) " + +#: gnokii/gnokii.c:1056 +msgid "Invalid location\n" +msgstr "" + +#: gnokii/gnokii.c:1062 +#, c-format +msgid "Location %d empty. Saving\n" +msgstr "" + +#: gnokii/gnokii.c:1087 +msgid "Saved!\n" +msgstr "Salvato!\n" + +#: gnokii/gnokii.c:1089 +#, c-format +msgid "Saving failed (error=%d)\n" +msgstr "Salvataggio non riuscito (errore=%d)\n" + +#: gnokii/gnokii.c:1110 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "%d centro SMS (%s) ha numero %s\n" + +#: gnokii/gnokii.c:1112 +msgid "Messages sent as " +msgstr "Invia messaggi come " + +#: gnokii/gnokii.c:1134 xgnokii/xgnokii.c:563 +msgid "ERMES" +msgstr "ERMES" + +#: gnokii/gnokii.c:1138 xgnokii/xgnokii.c:567 +msgid "X.400" +msgstr "X.400" + +#: gnokii/gnokii.c:1147 +msgid "Message validity is " +msgstr "La validità del messaggio è " + +#: gnokii/gnokii.c:1183 +msgid "SMS center can not be found :-(\n" +msgstr "Centro SMS non trovato :-(\n" + +#: gnokii/gnokii.c:1256 gnokii/gnokii.c:2805 gnokii/gnokii.c:3016 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Tipo di memoria %s sconosciuta!\n" + +#: gnokii/gnokii.c:1283 +#, c-format +msgid "Saving into %s\n" +msgstr "Salva in %s\n" + +#: gnokii/gnokii.c:1287 +msgid "Filename too long - will be truncated to 63 charactera.\n" +msgstr "Nome del file troppo lungo - sarà troncato a 63 caratteri.\n" + +#: gnokii/gnokii.c:1325 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Messaggi in Uscita " + +#: gnokii/gnokii.c:1328 +msgid "(sent)\n" +msgstr "(inviato)\n" + +#: gnokii/gnokii.c:1330 +msgid "(not sent)\n" +msgstr "(non inviato)\n" + +#: gnokii/gnokii.c:1332 gnokii/gnokii.c:1371 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "" +"Testo: %s\n" +"\n" + +#: gnokii/gnokii.c:1338 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Rapporto di Invio " + +#: gnokii/gnokii.c:1340 gnokii/gnokii.c:1380 +msgid "(read)\n" +msgstr "(letto)\n" + +#: gnokii/gnokii.c:1342 gnokii/gnokii.c:1382 +msgid "(not read)\n" +msgstr "(non letto)\n" + +#: gnokii/gnokii.c:1344 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Invio data/ora: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1350 gnokii/gnokii.c:1363 gnokii/gnokii.c:1390 +#, c-format +msgid "+%02d00" +msgstr "+%02d00" + +#: gnokii/gnokii.c:1357 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Risposta data/ora: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1370 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "Ricevente: %s Centro Msg: %s\n" + +#: gnokii/gnokii.c:1377 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Messaggi Ricevuti " + +#: gnokii/gnokii.c:1384 +#, c-format +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Data/ora: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1396 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "" + +#: gnokii/gnokii.c:1402 +#, c-format +msgid "GSM operator logo for %s (%s) network.\n" +msgstr "" + +#: gnokii/gnokii.c:1404 +msgid "Saved by Logo Express\n" +msgstr "" + +#: gnokii/gnokii.c:1405 +msgid "Saved by Operator Logo Uploader by Thomas Kessler\n" +msgstr "" + +#: gnokii/gnokii.c:1420 +#, c-format +msgid "File %s exists.\n" +msgstr "Il file %s esiste.\n" + +#: gnokii/gnokii.c:1427 +#, c-format +msgid "Couldn't save logofile %s!\n" +msgstr "Impossibile salvare il file dei loghi %s!\n" + +#: gnokii/gnokii.c:1435 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Collegato (%d/%d):\n" + +#: gnokii/gnokii.c:1437 +#, c-format +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" + +#: gnokii/gnokii.c:1442 gnokii/gnokii.c:2268 +msgid "Unknown\n" +msgstr "" + +#: gnokii/gnokii.c:1449 +msgid "(delete failed)\n" +msgstr "(eliminazione fallita\n" + +#: gnokii/gnokii.c:1451 +msgid "(message deleted)\n" +msgstr "(messaggio eliminato)\n" + +#: gnokii/gnokii.c:1457 gnokii/gnokii.c:1569 gnokii/gnokii.c:1635 +#: gnokii/gnokii.c:2723 gnokii/gnokii.c:2833 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "Funzione non implementata per il modello %s!\n" + +#: gnokii/gnokii.c:1463 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "Locazione non valida: %s %d\n" + +#: gnokii/gnokii.c:1469 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "La memoria SMS %s %d è vuota.\n" + +#: gnokii/gnokii.c:1475 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"GetSMS %s %d fallita!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1545 +#, c-format +msgid "Unknown memory type %s (use ME,SM,....)!\n" +msgstr "Tipo di memoria %s sconosciuta (usare ME,SM,...)!\n" + +#: gnokii/gnokii.c:1566 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "SMS %s %d eliminato\n" + +#: gnokii/gnokii.c:1573 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"DeleteSMS %s %d fallito!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1624 +msgid "Enter your code: " +msgstr "Digitate il vostro codice: " + +#: gnokii/gnokii.c:1631 +msgid "Error: invalid code.\n" +msgstr "Errore: codice errato.\n" + +#: gnokii/gnokii.c:1633 +msgid "Code ok.\n" +msgstr "Codice ok.\n" + +#: gnokii/gnokii.c:1637 +msgid "Other error.\n" +msgstr "Altro errore.\n" + +#: gnokii/gnokii.c:1653 +msgid "Security code status: " +msgstr "Stato del codice di sicurezza: " + +#: gnokii/gnokii.c:1755 +msgid "Sending operator logo.\n" +msgstr "Invio logo operatore.\n" + +#: gnokii/gnokii.c:1759 +msgid "Sending caller line identification logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1761 +msgid "You should specify what kind of logo to send!\n" +msgstr "" + +#: gnokii/gnokii.c:1780 +#, c-format +msgid "Operator code: %s\n" +msgstr "Codice operatore: %s\n" + +#: gnokii/gnokii.c:1829 +#, c-format +msgid "Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? " +msgstr "" + +#: gnokii/gnokii.c:1837 +msgid "Enter name of new file: " +msgstr "" + +#: gnokii/gnokii.c:1847 +#, c-format +msgid "Failed to write file \"%s\"\n" +msgstr "" + +#: gnokii/gnokii.c:1898 +msgid "Getting Logo\n" +msgstr "" + +#: gnokii/gnokii.c:1905 +msgid "Dealer welcome note " +msgstr "" + +#: gnokii/gnokii.c:1906 +msgid "Welcome note " +msgstr "" + +#: gnokii/gnokii.c:1911 +#, c-format +msgid "currently set to \"%s\"\n" +msgstr "" + +#: gnokii/gnokii.c:1969 +msgid "Function not implemented !\n" +msgstr "Funzione non implementata ! \n" + +#: gnokii/gnokii.c:1972 +msgid "This kind of logo is not supported !\n" +msgstr "" + +#: gnokii/gnokii.c:1975 +msgid "Error getting logo !\n" +msgstr "Errore ricevendo il logo !\n" + +#: gnokii/gnokii.c:1981 +msgid "What kind of logo do you want to get ?\n" +msgstr "Quale tipo di logo wolete avere ?\n" + +#: gnokii/gnokii.c:1998 +#, c-format +msgid "Failed to read file \"%s\"\n" +msgstr "Impossibile leggere il file \"%s\"\n" + +#: gnokii/gnokii.c:2000 +#, c-format +msgid "" +"Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n" +msgstr "" + +#: gnokii/gnokii.c:2002 +#, c-format +msgid "Wrong colors in \"%s\" logofile !\n" +msgstr "" + +#: gnokii/gnokii.c:2004 +#, c-format +msgid "Invalid format of \"%s\" logofile !\n" +msgstr "" + +#: gnokii/gnokii.c:2006 +#, c-format +msgid "Sorry, gnokii doesn't support used subformat in file \"%s\" !\n" +msgstr "" + +#: gnokii/gnokii.c:2008 +#, c-format +msgid "\"%s\" logofile is too short !\n" +msgstr "" + +#: gnokii/gnokii.c:2010 +msgid "" +"Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 " +"and 72x28 !\n" +msgstr "" + +#: gnokii/gnokii.c:2090 +msgid "Setting Logo.\n" +msgstr "Impostazione Logo.\n" + +#: gnokii/gnokii.c:2104 +msgid "Removing Logo.\n" +msgstr "Rimozione logo.\n" + +#: gnokii/gnokii.c:2108 +msgid "What kind of logo do you want to set ?\n" +msgstr "Quale tipo di logo volete impostare ?\n" + +#: gnokii/gnokii.c:2124 +msgid "Error setting" +msgstr "Errore di settaggio" + +#: gnokii/gnokii.c:2125 +msgid " dealer" +msgstr "" + +#: gnokii/gnokii.c:2126 +msgid " welcome note - " +msgstr "" + +#: gnokii/gnokii.c:2144 +msgid "SIM card and PIN is required\n" +msgstr "Necessari la SIM card ed il PIN\n" + +#: gnokii/gnokii.c:2148 +#, c-format +msgid "too long, truncated to \"%s\" (length %i)\n" +msgstr "" + +#: gnokii/gnokii.c:2156 +msgid "Error setting startup logo - SIM card and PIN is required\n" +msgstr "" + +#: gnokii/gnokii.c:2164 +msgid "Done.\n" +msgstr "Eseguito.\n" + +#: gnokii/gnokii.c:2166 +msgid "Function not implemented.\n" +msgstr "Funzione non implementata.\n" + +#: gnokii/gnokii.c:2168 +msgid "This kind of logo is not supported.\n" +msgstr "" + +#: gnokii/gnokii.c:2170 +msgid "Error !\n" +msgstr "Errore !\n" + +#: gnokii/gnokii.c:2247 +msgid " Type of the note: " +msgstr " Tipo di annotazione: " + +#: gnokii/gnokii.c:2252 +msgid "Reminder\n" +msgstr "Promemoria\n" + +#: gnokii/gnokii.c:2256 +msgid "Call\n" +msgstr "Chiamata\n" + +#: gnokii/gnokii.c:2260 +msgid "Meeting\n" +msgstr "Riunione\n" + +#: gnokii/gnokii.c:2264 +msgid "Birthday\n" +msgstr "Compleanno\n" + +#: gnokii/gnokii.c:2297 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii/gnokii.c:2315 +msgid "Failed to load vCalendar file.\n" +msgstr "" + +#: gnokii/gnokii.c:2323 gnokii/gnokii.c:3027 +msgid "Succesfully written!\n" +msgstr "" + +#: gnokii/gnokii.c:2325 +msgid "Failed to write calendar note!\n" +msgstr "" + +#: gnokii/gnokii.c:2344 +msgid " Calendar note deleted.\n" +msgstr " Nota eliminata dal calendario.\n" + +#: gnokii/gnokii.c:2347 +msgid "The calendar note can not be deleted\n" +msgstr "La nota non può essere eliminata dal calendrio\n" + +#: gnokii/gnokii.c:2416 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Data: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:2417 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Ora: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2453 +#, c-format +msgid "Alarm: %s\n" +msgstr "Sveglia: %s\n" + +#: gnokii/gnokii.c:2454 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Ora: %02d:%02d\n" + +#: gnokii/gnokii.c:2496 +msgid "Entering monitor mode...\n" +msgstr "Avvio della modalità monitor...\n" + +#: gnokii/gnokii.c:2497 +msgid "Initialising GSM interface...\n" +msgstr "Inizializzazione interfaccia GSM...\n" + +#: gnokii/gnokii.c:2511 +#, c-format +msgid "RFLevel: %d\n" +msgstr "Livello RF : %d\n" + +#: gnokii/gnokii.c:2514 +#, c-format +msgid "Battery: %d\n" +msgstr "Batteria: %d\n" + +#: gnokii/gnokii.c:2517 +#, c-format +msgid "Power Source: %s\n" +msgstr "Alimentazione: %s\n" + +#: gnokii/gnokii.c:2517 +msgid "AC/DC" +msgstr "AC/DC" + +#: gnokii/gnokii.c:2517 +msgid "battery" +msgstr "batteria" + +#: gnokii/gnokii.c:2520 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "Carta SIM: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2523 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefono: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2526 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2529 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2532 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2535 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2538 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2541 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2544 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: In uso %d, Libera %d\n" + +#: gnokii/gnokii.c:2547 +#, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "Messaggi SMS: Non letti %d, Numero %d\n" + +#: gnokii/gnokii.c:2550 +#, c-format +msgid "Incoming call: %s\n" +msgstr "Chiamata in arrivo: %s\n" + +#: gnokii/gnokii.c:2553 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "Rete : %s (%s), LAC: %s, CellID: %s\n" + +#: gnokii/gnokii.c:2556 +#, c-format +msgid "Cell broadcast received on channel %d: %s\n" +msgstr "Informazioni microcella ricevute sul canale %d: %s\n" + +#: gnokii/gnokii.c:2561 +msgid "Leaving monitor mode...\n" +msgstr "Chiusura modalità monitor...\n" + +#: gnokii/gnokii.c:2586 +msgid "Entering display monitoring mode...\n" +msgstr "Avvio della modalità monitor...\n" + +#: gnokii/gnokii.c:2594 +msgid "Leaving display monitor mode...\n" +msgstr "Chiusura modalità monitor...\n" + +#: gnokii/gnokii.c:2598 gnokii/gnokii.c:2600 +msgid "Error!\n" +msgstr "Errore!\n" + +#: gnokii/gnokii.c:2649 +#, c-format +msgid "Profile number must be value from 1 to %d!\n" +msgstr "Il valore del profilo è compreso fra 1 e %d!\n" + +#: gnokii/gnokii.c:2656 +#, c-format +msgid "This phone supports only %d profiles!\n" +msgstr "Questo telefono consente solo %d profili!\n" + +#: gnokii/gnokii.c:2728 +msgid "Unspecified error\n" +msgstr "Errore sconosciuto\n" + +#: gnokii/gnokii.c:2838 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "La memoria tipo %s non è supportata!\n" + +#: gnokii/gnokii.c:2843 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "" + +#: gnokii/gnokii.c:2902 gnokii/gnokii.c:2917 gnokii/gnokii.c:2935 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Problema di formato nella linea %d [%s]\n" + +#: gnokii/gnokii.c:2946 +msgid "Location busy. " +msgstr "Locazione impegnata. " + +#: gnokii/gnokii.c:2956 +#, c-format +msgid "Unknown error (%d)\n" +msgstr "Errore indeterminato (%d)\n" + +#: gnokii/gnokii.c:2967 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: gnokii/gnokii.c:2969 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: gnokii/gnokii.c:2989 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: gnokii/gnokii.c:3108 +#, c-format +msgid "IMEI: %s\n" +msgstr "IMEI: %s\n" + +#: gnokii/gnokii.c:3109 +#, c-format +msgid "Model: %s\n" +msgstr "Modello: %s\n" + +#: gnokii/gnokii.c:3110 +#, c-format +msgid "Revision: %s\n" +msgstr "Versione: %s\n" + +#: gnokii/gnokii.c:3142 +msgid "What kind of reset do you want??\n" +msgstr "Quale tipo di reset volete??\n" + +#: gnokii/gnokii.c:3205 gnokii/gnokii.c:3231 +msgid "Failed to load ringtone.\n" +msgstr "" + +#: gnokii/gnokii.c:3244 +msgid "Send failed\n" +msgstr "Invio fallito\n" + +#: gnokii/gnokii.c:3271 +msgid "Key press simulation failed.\n" +msgstr "" + +#: gnokiid/gnokiid.c:56 +#, c-format +msgid "" +"gnokiid Version %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n" +msgstr "" +"gnokiid Versione %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Compilato %s %s per %s su %s \n" + +#: gnokiid/gnokiid.c:68 +msgid "" +" usage: gnokiid {--help|--version}\n" +" --help display usage information. --version " +" displays version and copyright information. --debug " +"uses stdin/stdout for virtual modem comms.\n" +msgstr "" +" uso: gnokiid {--help|--version}\n" +" --help mostra le informazioni per l'uso. --version " +" mostra il copyright e la versione. --debug " +"utilizza stdin/stdout per comunicare con il modem virtuale.\n" + +#: common/virtmodem.c:119 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: common/virtmodem.c:126 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: common/virtmodem.c:131 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: common/virtmodem.c:136 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "" + +#: common/virtmodem.c:229 +msgid "Couldn't open pty!\n" +msgstr "Impossibile aprire pty!\n" + +#: common/virtmodem.c:237 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "" + +#: common/virtmodem.c:242 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "" + +#: common/virtmodem.c:304 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM_LinkOK non si è verificata. Esco.\n" + +#: xgnokii/xgnokii.c:214 +msgid "Reading caller groups names ..." +msgstr "Lettura nomi dei gruppi ..." + +#: xgnokii/xgnokii.c:218 xgnokii/xgnokii.c:1045 +msgid "Familly" +msgstr "Famiglia" + +#: xgnokii/xgnokii.c:219 xgnokii/xgnokii.c:1057 +msgid "VIP" +msgstr "VIP" + +#: xgnokii/xgnokii.c:220 xgnokii/xgnokii.c:1069 +msgid "Friends" +msgstr "Amici" + +#: xgnokii/xgnokii.c:221 xgnokii/xgnokii.c:1081 +msgid "Colleagues" +msgstr "Colleghi" + +#: xgnokii/xgnokii.c:222 xgnokii/xgnokii.c:1093 +msgid "Other" +msgstr "Altro" + +#: xgnokii/xgnokii.c:223 +msgid "No group" +msgstr "Nessuno" + +#: xgnokii/xgnokii.c:348 +msgid "Short Message received" +msgstr "Breve Messaggio ricevuto" + +#: xgnokii/xgnokii.c:354 +msgid "Working ..." +msgstr "In funzione..." + +#: xgnokii/xgnokii.c:371 +msgid "Call in progress" +msgstr "Chiamata in corso" + +#: xgnokii/xgnokii.c:384 +msgid "Hide" +msgstr "Nascondi" + +#: xgnokii/xgnokii.c:481 +#, c-format +msgid "" +"Outgoing call in progress:\n" +"Time: %s" +msgstr "" +"Chiamata in corso:\n" +"Durata: %s" + +#: xgnokii/xgnokii.c:484 +#, c-format +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "" +"Chiamata provenente da: %s\n" +"Durata: %s" + +#: xgnokii/xgnokii.c:537 xgnokii/xgnokii_sms.c:687 +#, c-format +msgid "Set %d" +msgstr "Set %d" + +#: xgnokii/xgnokii.c:559 xgnokii/xgnokii.c:1466 +msgid "E-Mail" +msgstr "E-Mail" + +#: xgnokii/xgnokii.c:571 +msgid "Voice" +msgstr "Voce" + +#: xgnokii/xgnokii.c:582 xgnokii/xgnokii.c:1496 +msgid "1 h" +msgstr "1 h" + +#: xgnokii/xgnokii.c:586 xgnokii/xgnokii.c:1503 +msgid "6 h" +msgstr "6 h" + +#: xgnokii/xgnokii.c:590 xgnokii/xgnokii.c:606 xgnokii/xgnokii.c:1510 +msgid "24 h" +msgstr "24 h" + +#: xgnokii/xgnokii.c:594 xgnokii/xgnokii.c:1517 +msgid "72 h" +msgstr "72 h" + +#: xgnokii/xgnokii.c:602 +msgid "Max. time" +msgstr "Tempo massimo" + +#: xgnokii/xgnokii.c:649 +msgid "Reading SMS centers ..." +msgstr "Lettura del centro SMS ..." + +#: xgnokii/xgnokii.c:910 +#, +msgid "SMS not supported!" +msgstr "SMS non supportato!" + +#: xgnokii/xgnokii.c:918 +msgid "Calendar not supported!" +msgstr "Calendario non supportato!" + +#: xgnokii/xgnokii.c:1106 +msgid "Error writing configuration file!" +msgstr "Errore scrivendo il file di configurazione!" + +#: xgnokii/xgnokii.c:1118 xgnokii/xgnokii_contacts.c:3025 +msgid "Contacts" +msgstr "Rubrica" + +#: xgnokii/xgnokii.c:1124 xgnokii/xgnokii.c:1902 +msgid "SMS" +msgstr "SMS" + +#: xgnokii/xgnokii.c:1129 xgnokii/xgnokii_calendar.c:867 +msgid "Calendar" +msgstr "Agenda" + +#: xgnokii/xgnokii.c:1134 xgnokii/xgnokii_logos.c:1339 +msgid "Logos" +msgstr "Loghi" + +#: xgnokii/xgnokii.c:1140 +msgid "DTMF" +msgstr "DTMF" + +#: xgnokii/xgnokii.c:1145 xgnokii/xgnokii_speed.c:559 +msgid "Speed Dial" +msgstr "Chiamata rapida" + +#: xgnokii/xgnokii.c:1150 +msgid "Keyboard" +msgstr "Tastiera" + +#: xgnokii/xgnokii.c:1155 xgnokii/xgnokii_netmon.c:317 +msgid "Net Monitor" +msgstr "Net Monitor" + +#: xgnokii/xgnokii.c:1160 +msgid "Data calls" +msgstr "Chiamata dati" + +#: xgnokii/xgnokii.c:1169 xgnokii/xgnokii.c:1629 +msgid "Options" +msgstr "Opzioni" + +#: xgnokii/xgnokii.c:1179 xgnokii/xgnokii.c:2207 +msgid "Help" +msgstr "Aiuto" + +#: xgnokii/xgnokii.c:1185 xgnokii/xgnokii.c:1202 +msgid "About" +msgstr "Informazioni su" + +#: xgnokii/xgnokii.c:1206 xgnokii/xgnokii.c:1390 +#: xgnokii/xgnokii_calendar.c:495 xgnokii/xgnokii_calendar.c:541 +#: xgnokii/xgnokii_calendar.c:616 xgnokii/xgnokii_calendar.c:766 +#: xgnokii/xgnokii_contacts.c:839 xgnokii/xgnokii_contacts.c:1035 +#: xgnokii/xgnokii_contacts.c:1400 xgnokii/xgnokii_contacts.c:2846 +#: xgnokii/xgnokii_sms.c:480 +msgid "Ok" +msgstr "Ok" + +#: xgnokii/xgnokii.c:1219 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999,2000 Pavel Janík ml.,\n" +"Hugh Blemings, Jan Derfinak and others\n" +"xgnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no waranty for xgnokii. See GPL for details.\n" +msgstr "" + +#: xgnokii/xgnokii.c:1384 +msgid "Edit SMS Setting" +msgstr "Modifica Impostazioni SMS" + +#: xgnokii/xgnokii.c:1398 xgnokii/xgnokii_calendar.c:504 +#: xgnokii/xgnokii_calendar.c:550 xgnokii/xgnokii_calendar.c:624 +#: xgnokii/xgnokii_calendar.c:774 xgnokii/xgnokii_common.c:64 +#: xgnokii/xgnokii_common.c:150 xgnokii/xgnokii_contacts.c:847 +#: xgnokii/xgnokii_contacts.c:1043 xgnokii/xgnokii_contacts.c:1272 +#: xgnokii/xgnokii_contacts.c:1318 xgnokii/xgnokii_contacts.c:1409 +#: xgnokii/xgnokii_contacts.c:1682 xgnokii/xgnokii_contacts.c:1797 +#: xgnokii/xgnokii_contacts.c:2853 xgnokii/xgnokii_sms.c:488 +msgid "Cancel" +msgstr "Annulla" + +#: xgnokii/xgnokii.c:1411 +msgid "Set's name:" +msgstr "Nome Set:" + +#: xgnokii/xgnokii.c:1424 +msgid "Center:" +msgstr "Centro:" + +#: xgnokii/xgnokii.c:1437 +msgid "Sending Format:" +msgstr "Formato di Invio:" + +#: xgnokii/xgnokii.c:1481 +msgid "Validity Period:" +msgstr "Periodo di Validità:" + +#: xgnokii/xgnokii.c:1489 +msgid "Max. Time" +msgstr "Tempo Massimo" + +#: xgnokii/xgnokii.c:1626 +msgid "Set's name" +msgstr "Nome Set" + +#: xgnokii/xgnokii.c:1626 +msgid "Center number" +msgstr "Numero Centro Messaggi" + +#: xgnokii/xgnokii.c:1626 +msgid "Format" +msgstr "Formato" + +#: xgnokii/xgnokii.c:1626 +msgid "Validity" +msgstr "Validità" + +#: xgnokii/xgnokii.c:1634 +msgid "Apply" +msgstr "Applica" + +#: xgnokii/xgnokii.c:1643 xgnokii/xgnokii_contacts.c:1666 +#: xgnokii/xgnokii_dtmf.c:178 +msgid "Save" +msgstr "Salva" + +#: xgnokii/xgnokii.c:1650 +msgid "Close" +msgstr "Chiudi" + +#: xgnokii/xgnokii.c:1665 +msgid "Phone and connection type" +msgstr "Telefono e tipo collegamento" + +#: xgnokii/xgnokii.c:1672 +msgid "Connection" +msgstr "Collegamento" + +#: xgnokii/xgnokii.c:1679 +msgid "Port:" +msgstr "Porta:" + +#: xgnokii/xgnokii.c:1694 xgnokii/xgnokii.c:1766 +msgid "Model:" +msgstr "Modello:" + +#: xgnokii/xgnokii.c:1709 +msgid "Init length:" +msgstr "Stringa di inizializzaaione:" + +#: xgnokii/xgnokii.c:1724 +msgid "Bindir:" +msgstr "Directory eseguibili:" + +#: xgnokii/xgnokii.c:1739 +msgid "Connection:" +msgstr "Collegamento:" + +#: xgnokii/xgnokii.c:1743 +msgid "infrared" +msgstr "infrarossi" + +#: xgnokii/xgnokii.c:1747 +msgid "serial" +msgstr "seriale" + +#: xgnokii/xgnokii.c:1752 +msgid "Phone information" +msgstr "Informazioni sul telefono" + +#: xgnokii/xgnokii.c:1781 +msgid "Version:" +msgstr "Modello:" + +#: xgnokii/xgnokii.c:1796 +msgid "Revision:" +msgstr "Versione:" + +#: xgnokii/xgnokii.c:1811 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1826 +msgid "Names length:" +msgstr "Lungezza nomi:" + +#: xgnokii/xgnokii.c:1834 +msgid "SIM:" +msgstr "SIM:" + +#: xgnokii/xgnokii.c:1852 +msgid "Phone:" +msgstr "Telefono:" + +#: xgnokii/xgnokii.c:1859 +msgid "Alarm setting" +msgstr "Impostazione allarme" + +#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii.c:1873 +#: xgnokii/xgnokii_calendar.c:688 xgnokii/xgnokii_calendar.c:863 +msgid "Alarm" +msgstr "Allarme" + +#: xgnokii/xgnokii.c:1896 xgnokii/xgnokii_sms.c:1544 +msgid "Short Message Service" +msgstr "Short Message Service" + +#: xgnokii/xgnokii.c:1930 +msgid "Edit" +msgstr "Modifica" + +#: xgnokii/xgnokii.c:1944 +msgid "Business Card" +msgstr "Biglietto da Visita" + +#: xgnokii/xgnokii.c:1950 +msgid "User" +msgstr "Utente" + +#: xgnokii/xgnokii.c:1968 xgnokii/xgnokii_contacts.c:860 +msgid "Name:" +msgstr "Nome:" + +#: xgnokii/xgnokii.c:1994 +msgid "Title:" +msgstr "Titolo:" + +#: xgnokii/xgnokii.c:2020 +msgid "Company:" +msgstr "Società:" + +#: xgnokii/xgnokii.c:2046 +msgid "Telephone:" +msgstr "Telefono:" + +#: xgnokii/xgnokii.c:2071 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:2096 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:2122 +msgid "Address:" +msgstr "Indirizzo:" + +#: xgnokii/xgnokii.c:2146 +msgid "Caller groups names" +msgstr "Nome gruppo chiamante" + +#: xgnokii/xgnokii.c:2153 +msgid "Groups" +msgstr "Gruppi" + +#: xgnokii/xgnokii.c:2162 +#, c-format +msgid "Group %d:" +msgstr "Gruppo %d:" + +#: xgnokii/xgnokii.c:2175 +msgid "Mailbox" +msgstr "Mailbox" + +#: xgnokii/xgnokii.c:2182 +msgid "Mail" +msgstr "Mail" + +#: xgnokii/xgnokii.c:2189 +msgid "Path to mailbox:" +msgstr "Percorso della mailbox:" + +#: xgnokii/xgnokii.c:2200 +msgid "Help viewer" +msgstr "Visualizzatore help" + +#: xgnokii/xgnokii.c:2214 +msgid "Viewer:" +msgstr "Visualizzatore:" + +#: xgnokii/xgnokii_calendar.c:123 +msgid "Reminder" +msgstr "Promemoria" + +#: xgnokii/xgnokii_calendar.c:130 +msgid "Call" +msgstr "Chiamata" + +#: xgnokii/xgnokii_calendar.c:138 +msgid "Meeting" +msgstr "Riunione" + +#: xgnokii/xgnokii_calendar.c:146 +msgid "Birthday" +msgstr "Compleanno" + +#: xgnokii/xgnokii_calendar.c:194 +msgid "Type: " +msgstr "Tipo: " + +#: xgnokii/xgnokii_calendar.c:202 xgnokii/xgnokii_sms.c:384 +msgid "Date: " +msgstr "Data: " + +#: xgnokii/xgnokii_calendar.c:217 +msgid "Alarm: " +msgstr "Allarme: " + +#: xgnokii/xgnokii_calendar.c:238 +msgid "Text: " +msgstr "Testo: " + +#: xgnokii/xgnokii_calendar.c:488 xgnokii/xgnokii_calendar.c:534 +msgid "Choose date" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:571 +msgid "Alarm time:" +msgstr "Ora allarme:" + +#: xgnokii/xgnokii_calendar.c:609 xgnokii/xgnokii_calendar.c:929 +msgid "Add reminder" +msgstr "Aggiunta promemoria" + +#: xgnokii/xgnokii_calendar.c:641 +msgid "Date:" +msgstr "Data:" + +#: xgnokii/xgnokii_calendar.c:676 +msgid "Subject:" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:759 +msgid "Delete calendar note" +msgstr "Elimina nota in calendario" + +#: xgnokii/xgnokii_calendar.c:791 +msgid "Do you want to delete selected note(s)?" +msgstr "Volete eliminare le/la nota/e selezionate?" + +#: xgnokii/xgnokii_calendar.c:826 xgnokii/xgnokii_contacts.c:2980 +#: xgnokii/xgnokii_dtmf.c:217 xgnokii/xgnokii_logos.c:1292 +#: xgnokii/xgnokii_netmon.c:259 xgnokii/xgnokii_sms.c:1121 +#: xgnokii/xgnokii_sms.c:1507 xgnokii/xgnokii_speed.c:527 +#: xgnokii/xgnokii_xkeyb.c:242 +msgid "/_File" +msgstr "/_File" + +#: xgnokii/xgnokii_calendar.c:827 xgnokii/xgnokii_contacts.c:2981 +#: xgnokii/xgnokii_speed.c:528 +msgid "/File/_Read from phone" +msgstr "/File/_Leggi dal telefono" + +#: xgnokii/xgnokii_calendar.c:828 xgnokii/xgnokii_contacts.c:2982 +#: xgnokii/xgnokii_speed.c:529 +msgid "/File/_Save to phone" +msgstr "/File/_Salva sul telefono" + +#: xgnokii/xgnokii_calendar.c:829 xgnokii/xgnokii_contacts.c:2983 +#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_logos.c:1296 +#: xgnokii/xgnokii_sms.c:1124 xgnokii/xgnokii_sms.c:1510 +#: xgnokii/xgnokii_speed.c:530 +msgid "/File/Sep1" +msgstr "/File/Sep1" + +#: xgnokii/xgnokii_calendar.c:830 +msgid "/File/Send via S_MS" +msgstr "/File/Invi_a con S_MS" + +#: xgnokii/xgnokii_calendar.c:831 xgnokii/xgnokii_contacts.c:2986 +#: xgnokii/xgnokii_logos.c:1300 xgnokii/xgnokii_sms.c:1127 +#: xgnokii/xgnokii_speed.c:533 +msgid "/File/Sep2" +msgstr "/File/Sep2" + +#: xgnokii/xgnokii_calendar.c:832 xgnokii/xgnokii_contacts.c:2984 +#: xgnokii/xgnokii_speed.c:531 +msgid "/File/_Import from file" +msgstr "/File/_Importa da file" + +#: xgnokii/xgnokii_calendar.c:833 xgnokii/xgnokii_contacts.c:2985 +#: xgnokii/xgnokii_speed.c:532 +msgid "/File/_Export to file" +msgstr "/File/_Esporta su file" + +#: xgnokii/xgnokii_calendar.c:834 +msgid "/File/Sep3" +msgstr "/File/Sep3" + +#: xgnokii/xgnokii_calendar.c:835 xgnokii/xgnokii_contacts.c:2987 +#: xgnokii/xgnokii_dtmf.c:221 xgnokii/xgnokii_logos.c:1301 +#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1128 +#: xgnokii/xgnokii_sms.c:1511 xgnokii/xgnokii_speed.c:534 +#: xgnokii/xgnokii_xkeyb.c:243 +msgid "/File/_Close" +msgstr "/File/_Chiudi" + +#: xgnokii/xgnokii_calendar.c:836 xgnokii/xgnokii_contacts.c:2988 +#: xgnokii/xgnokii_logos.c:1302 xgnokii/xgnokii_speed.c:535 +msgid "/_Edit" +msgstr "/_Modifica" + +#: xgnokii/xgnokii_calendar.c:837 +msgid "/Edit/Add _reminder" +msgstr "/Modifica/Aggiungi p_romemoria" + +#: xgnokii/xgnokii_calendar.c:838 +msgid "/Edit/Add _call" +msgstr "/Modifica/Aggiungi _chiamata" + +#: xgnokii/xgnokii_calendar.c:839 +msgid "/Edit/Add _meeting" +msgstr "/Modifica/Aggiungi _meeting" + +#: xgnokii/xgnokii_calendar.c:840 +msgid "/Edit/Add _birthday" +msgstr "/Modifica/Aggiungi c_ompleanno" + +#: xgnokii/xgnokii_calendar.c:841 xgnokii/xgnokii_contacts.c:2991 +#: xgnokii/xgnokii_speed.c:536 +msgid "/Edit/_Edit" +msgstr "/Modifica/_Modifica" + +#: xgnokii/xgnokii_calendar.c:842 xgnokii/xgnokii_contacts.c:2992 +msgid "/Edit/_Delete" +msgstr "/Modifica/_Cancella" + +#: xgnokii/xgnokii_calendar.c:843 xgnokii/xgnokii_contacts.c:2995 +#: xgnokii/xgnokii_logos.c:1310 +msgid "/Edit/Sep4" +msgstr "/Modifica/Sep4" + +#: xgnokii/xgnokii_calendar.c:844 xgnokii/xgnokii_contacts.c:2999 +msgid "/Edit/Select _all" +msgstr "/Modifica/Selezion_a tutti" + +#: xgnokii/xgnokii_calendar.c:845 xgnokii/xgnokii_contacts.c:3002 +#: xgnokii/xgnokii_dtmf.c:222 xgnokii/xgnokii_netmon.c:264 +#: xgnokii/xgnokii_sms.c:1129 xgnokii/xgnokii_sms.c:1519 +#: xgnokii/xgnokii_speed.c:537 xgnokii/xgnokii_xkeyb.c:244 +msgid "/_Help" +msgstr "/_Aiuto" + +#: xgnokii/xgnokii_calendar.c:846 xgnokii/xgnokii_contacts.c:3003 +#: xgnokii/xgnokii_dtmf.c:223 xgnokii/xgnokii_netmon.c:265 +#: xgnokii/xgnokii_sms.c:1130 xgnokii/xgnokii_sms.c:1520 +#: xgnokii/xgnokii_speed.c:538 xgnokii/xgnokii_xkeyb.c:245 +msgid "/Help/_Help" +msgstr "/Aiuto/_Aiuto" + +#: xgnokii/xgnokii_calendar.c:847 xgnokii/xgnokii_contacts.c:3004 +#: xgnokii/xgnokii_dtmf.c:224 xgnokii/xgnokii_netmon.c:266 +#: xgnokii/xgnokii_sms.c:1131 xgnokii/xgnokii_sms.c:1521 +#: xgnokii/xgnokii_speed.c:539 xgnokii/xgnokii_xkeyb.c:246 +msgid "/Help/_About" +msgstr "/Aiuto/_Informazioni" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "#" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Type" +msgstr "Tipo" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Date" +msgstr "Data" + +#: xgnokii/xgnokii_calendar.c:863 xgnokii/xgnokii_contacts.c:1350 +#: xgnokii/xgnokii_contacts.c:3020 xgnokii/xgnokii_speed.c:554 +msgid "Number" +msgstr "Numero" + +#: xgnokii/xgnokii_calendar.c:896 xgnokii/xgnokii_contacts.c:3056 +#: xgnokii/xgnokii_speed.c:590 +msgid "Read from phone" +msgstr "Leggi dal telefono" + +#: xgnokii/xgnokii_calendar.c:900 xgnokii/xgnokii_contacts.c:3060 +#: xgnokii/xgnokii_speed.c:594 +msgid "Save to phone" +msgstr "Salva sul telefono" + +#: xgnokii/xgnokii_calendar.c:907 +msgid "Send via SMS" +msgstr "Invia come SMS" + +#: xgnokii/xgnokii_calendar.c:914 xgnokii/xgnokii_contacts.c:3067 +#: xgnokii/xgnokii_logos.c:1386 xgnokii/xgnokii_speed.c:601 +msgid "Import from file" +msgstr "Importa da file" + +#: xgnokii/xgnokii_calendar.c:918 xgnokii/xgnokii_contacts.c:3071 +#: xgnokii/xgnokii_logos.c:1390 xgnokii/xgnokii_speed.c:605 +msgid "Export to file" +msgstr "Esporta su file" + +#: xgnokii/xgnokii_calendar.c:925 +msgid "Edit note" +msgstr "Modifica nota" + +#: xgnokii/xgnokii_calendar.c:933 +msgid "Add call" +msgstr "Aggiungi chiamata" + +#: xgnokii/xgnokii_calendar.c:937 +msgid "Add meeting" +msgstr "Aggiungi riunione" + +#: xgnokii/xgnokii_calendar.c:941 +msgid "Add birthday" +msgstr "Aggiungi compleanno" + +#: xgnokii/xgnokii_calendar.c:945 +msgid "Delete note" +msgstr "Elimina voci" + +#: xgnokii/xgnokii_calendar.c:1005 xgnokii/xgnokii_contacts.c:2876 +#: xgnokii/xgnokii_contacts.c:3126 xgnokii/xgnokii_sms.c:1686 +#: xgnokii/xgnokii_speed.c:637 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "Errore: %s: linea %d: Memoria esaurita!\n" + +#: xgnokii/xgnokii_calendar.c:1034 xgnokii/xgnokii_sms.c:1719 +msgid "couldn't allocate colour" +msgstr "impossibile utilizzare il colore" + +#: xgnokii/xgnokii_cfg.c:80 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "ATTENZIONE: non trovo la variabile di ambiente HOME !\n" + +#: xgnokii/xgnokii_cfg.c:86 xgnokii/xgnokii_cfg.c:101 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:185 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:191 xgnokii/xgnokii_cfg.c:209 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:197 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "ERRORE: impossibile scrivere sul file %s !\n" + +#: xgnokii/xgnokii_cfg.c:215 +msgid "ERROR: Can't write config file!\n" +msgstr "ERRORE: Impossibile scrivere il file di configurazione!\n" + +#: xgnokii/xgnokii_common.c:57 +msgid "Error" +msgstr "Errore" + +#: xgnokii/xgnokii_common.c:96 +msgid "Info" +msgstr "Info" + +#: xgnokii/xgnokii_common.c:134 +msgid "Yes" +msgstr "Si" + +#: xgnokii/xgnokii_common.c:143 +msgid "No" +msgstr "No" + +#: xgnokii/xgnokii_common.c:230 +#, c-format +msgid "Can't exec %s\n" +msgstr "Impossibile eseguire %s\n" + +#: xgnokii/xgnokii_contacts.c:246 xgnokii/xgnokii_contacts.c:279 +#: xgnokii/xgnokii_contacts.c:448 xgnokii/xgnokii_contacts.c:473 +#: xgnokii/xgnokii_contacts.c:613 xgnokii/xgnokii_contacts.c:635 +msgid "Can't change memory type!" +msgstr "Impossibile cambiare il tipo di memoria!" + +#: xgnokii/xgnokii_contacts.c:290 xgnokii/xgnokii_contacts.c:337 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" +"Spiacente, ma il nome della rubrica sarà troncato,\n" +"poichè è stato salvato nella memoria SIM!" + +#: xgnokii/xgnokii_contacts.c:484 xgnokii/xgnokii_contacts.c:523 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" +"Spiacente, ma il nominativo sarà troncato,\n" +"poichè è stato salvato nella memoria SIM!" + +#: xgnokii/xgnokii_contacts.c:729 +msgid "Can't find pattern!" +msgstr "Elemento non trovato!" + +#: xgnokii/xgnokii_contacts.c:873 xgnokii/xgnokii_contacts.c:1418 +msgid "Number:" +msgstr "Numero:" + +#: xgnokii/xgnokii_contacts.c:888 +msgid "Extended:" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:905 +msgid "Memory:" +msgstr "Memoria:" + +#: xgnokii/xgnokii_contacts.c:909 +msgid "phone" +msgstr "telefono" + +#: xgnokii/xgnokii_contacts.c:922 +msgid "Caller group:" +msgstr "Gruppo chiamante:" + +#: xgnokii/xgnokii_contacts.c:939 xgnokii/xgnokii_contacts.c:3086 +#: xgnokii/xgnokii_speed.c:612 +msgid "Edit entry" +msgstr "Modifica voce" + +#: xgnokii/xgnokii_contacts.c:1028 +msgid "Delete entries" +msgstr "Elimina voci" + +#: xgnokii/xgnokii_contacts.c:1060 +msgid "Do you want to delete selected entries?" +msgstr "Volete eliminare le voci selezionate?" + +#: xgnokii/xgnokii_contacts.c:1072 xgnokii/xgnokii_contacts.c:3078 +msgid "New entry" +msgstr "Nuova voce" + +#: xgnokii/xgnokii_contacts.c:1111 xgnokii/xgnokii_contacts.c:3082 +msgid "Duplicate entry" +msgstr "Duplica la voce" + +#: xgnokii/xgnokii_contacts.c:1177 xgnokii/xgnokii_contacts.c:1187 +#: xgnokii/xgnokii_contacts.c:1212 +msgid "Can't find free memory." +msgstr "Memoria esaurita." + +#: xgnokii/xgnokii_contacts.c:1256 +msgid "Changing memory type" +msgstr "Cambiare il tipo di memoria" + +#: xgnokii/xgnokii_contacts.c:1263 +msgid "Continue" +msgstr "Continua" + +#: xgnokii/xgnokii_contacts.c:1283 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." + +#: xgnokii/xgnokii_contacts.c:1303 xgnokii/xgnokii_contacts.c:1309 +msgid "Find" +msgstr "Cerca" + +#: xgnokii/xgnokii_contacts.c:1331 +msgid "Pattern:" +msgstr "Stringa:" + +#: xgnokii/xgnokii_contacts.c:1344 xgnokii/xgnokii_contacts.c:3020 +#: xgnokii/xgnokii_speed.c:554 +msgid "Name" +msgstr "Nome" + +#: xgnokii/xgnokii_contacts.c:1394 xgnokii/xgnokii_contacts.c:3097 +msgid "Dial voice" +msgstr "Chiamata vocale" + +#: xgnokii/xgnokii_contacts.c:1520 +msgid "Phone memory..." +msgstr "Memoria telefono..." + +#: xgnokii/xgnokii_contacts.c:1531 +msgid "SIM memory..." +msgstr "Memoria SIM..." + +#: xgnokii/xgnokii_contacts.c:1560 +msgid "Saving entries" +msgstr "Salva elementi" + +#: xgnokii/xgnokii_contacts.c:1594 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" +"%s: linea: %d:Impossibile scrivere nella memoria ME numero %d! Errore: %d\n" + +#: xgnokii/xgnokii_contacts.c:1636 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" +"%s: linea: %d:Impossibile scrivere nella memoria SM numero %d! Errore: %d\n" + +#: xgnokii/xgnokii_contacts.c:1659 +msgid "Save changes?" +msgstr "Salvare i cambiamenti?" + +#: xgnokii/xgnokii_contacts.c:1675 +msgid "Don't save" +msgstr "Non salvare" + +#: xgnokii/xgnokii_contacts.c:1699 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Do you want save these changes into phone?\n" +msgstr "" +"Sono state effettuate modifiche\n" +"nella rubrica.\n" +"\n" +"\n" +"Le si vuole inviare al telefono?\n" + +#: xgnokii/xgnokii_contacts.c:1760 +msgid "Which Extended Phonebook Entry?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1766 +msgid "General" +msgstr "Generale" + +#: xgnokii/xgnokii_contacts.c:1772 +msgid "Mobile" +msgstr "Cellulare" + +#: xgnokii/xgnokii_contacts.c:1778 +msgid "Work" +msgstr "Lavoro" + +#: xgnokii/xgnokii_contacts.c:1790 +msgid "Home" +msgstr "Casa" + +#: xgnokii/xgnokii_contacts.c:1883 xgnokii/xgnokii_contacts.c:1910 +#: xgnokii/xgnokii_contacts.c:2555 xgnokii/xgnokii_contacts.c:2579 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "%s: linea %d: Memoria esaurita!\n" + +#: xgnokii/xgnokii_contacts.c:2005 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" +"Non è possibile rilevare lo stato della memoria SM !\n" +"\n" +"Impostare il massimo delle voci nella SIM a 100!\n" + +#: xgnokii/xgnokii_contacts.c:2030 +msgid "Getting entries" +msgstr "Caricamento dati" + +#: xgnokii/xgnokii_contacts.c:2163 xgnokii/xgnokii_dtmf.c:128 +#: xgnokii/xgnokii_speed.c:426 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "Impossibile aprire il file %s in scrittura!" + +#: xgnokii/xgnokii_contacts.c:2257 xgnokii/xgnokii_dtmf.c:161 +#: xgnokii/xgnokii_logos.c:1169 xgnokii/xgnokii_speed.c:468 +msgid "Overwrite file?" +msgstr "Sovrascrivo il file?" + +#: xgnokii/xgnokii_contacts.c:2258 xgnokii/xgnokii_dtmf.c:162 +#: xgnokii/xgnokii_logos.c:1170 xgnokii/xgnokii_speed.c:469 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" +"Il file %s esiste.\n" +"Sovrascrivo?" + +#: xgnokii/xgnokii_contacts.c:2276 xgnokii/xgnokii_speed.c:487 +msgid "Export" +msgstr "Esporta" + +#: xgnokii/xgnokii_contacts.c:2476 xgnokii/xgnokii_dtmf.c:90 +#: xgnokii/xgnokii_speed.c:326 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "Impossibile aprire il file %s in lettura!" + +#: xgnokii/xgnokii_contacts.c:2530 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" +"Non è possibile rilevare lo stato della memoria SM !\n" +"\n" +"Impostare il massimo delle voci nella SIM a 100!\n" + +#: xgnokii/xgnokii_contacts.c:2645 xgnokii/xgnokii_speed.c:404 +msgid "Import" +msgstr "Importa" + +#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_sms.c:1233 +msgid "Select contacts" +msgstr "Seleziona nominativi" + +#: xgnokii/xgnokii_contacts.c:2989 +msgid "/Edit/_New" +msgstr "/Modifica/_Nuovo" + +#: xgnokii/xgnokii_contacts.c:2990 +msgid "/Edit/D_uplicate" +msgstr "/Modifica/_Duplica" + +#: xgnokii/xgnokii_contacts.c:2993 xgnokii/xgnokii_logos.c:1305 +msgid "/Edit/Sep3" +msgstr "/Modifica/Sep3" + +#: xgnokii/xgnokii_contacts.c:2994 +msgid "/Edit/_Change memory type" +msgstr "/Modifica/_Cambia il tipo di memoria" + +#: xgnokii/xgnokii_contacts.c:2996 +msgid "/Edit/_Find" +msgstr "/Modifica/_Trova" + +#: xgnokii/xgnokii_contacts.c:2997 +msgid "/Edit/Find ne_xt" +msgstr "/Modifica/Trova se_guente" + +#: xgnokii/xgnokii_contacts.c:2998 +msgid "/Edit/Sep5" +msgstr "/Modifica/Sep5" + +#: xgnokii/xgnokii_contacts.c:3000 +msgid "/_Dial" +msgstr "/_Chiamata" + +#: xgnokii/xgnokii_contacts.c:3001 +msgid "/Dial/Dial _voice" +msgstr "/Chiamata/Chiamata _vocale" + +#: xgnokii/xgnokii_contacts.c:3020 +msgid "Memory" +msgstr "Memoria" + +#: xgnokii/xgnokii_contacts.c:3020 +msgid "Group" +msgstr "Gruppo" + +#: xgnokii/xgnokii_contacts.c:3090 +msgid "Delete entry" +msgstr "Elimina elemento" + +#: xgnokii/xgnokii_data.c:42 +msgid "" +"Data calls are currently\n" +"Disabled\n" +" " +msgstr "" +"Le chimate dati sono ora\n" +"Disabilitate\n" +" " + +#: xgnokii/xgnokii_data.c:44 +msgid "" +"Data calls are currently\n" +"Enabled\n" +" " +msgstr "" +"Le chimate dati sono ora\n" +"Abilitate\n" +" " + +#: xgnokii/xgnokii_data.c:101 +msgid "Virtual Modem" +msgstr "Modem Virtuale" + +#: xgnokii/xgnokii_data.c:119 +msgid "Enable" +msgstr "Abilita" + +#: xgnokii/xgnokii_data.c:125 +msgid "Disable" +msgstr "Disabilita" + +#: xgnokii/xgnokii_dtmf.c:108 +msgid "Load" +msgstr "Carica" + +#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1293 +msgid "/File/_Open" +msgstr "/File/_Apri" + +#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1294 +#: xgnokii/xgnokii_sms.c:1123 xgnokii/xgnokii_sms.c:1508 +msgid "/File/_Save" +msgstr "/File/_Salva" + +#: xgnokii/xgnokii_dtmf.c:245 +msgid "Dial Tone" +msgstr "Tono di chiamata" + +#: xgnokii/xgnokii_logos.c:823 +#, c-format +msgid "" +"Error getting network info\n" +"(error=%d)" +msgstr "" +"Errore ricercando informazioni sulla rete\n" +"(errore=%d)" + +#: xgnokii/xgnokii_logos.c:862 +#, c-format +msgid "" +"Error getting bitmap\n" +"(error=%d)" +msgstr "" +"Errore caricando l'immagine bitmap\n" +"(errore=%d)" + +#: xgnokii/xgnokii_logos.c:907 +#, c-format +msgid "" +"Error setting bitmap\n" +"(error=%d)" +msgstr "" +"Errore impostando l'immagine bitmap\n" +"(errore=%d)" + +#: xgnokii/xgnokii_logos.c:1141 +#, c-format +msgid "" +"Error saving file\n" +"(error=%d)" +msgstr "" +"Errore salvando il file\n" +"(errore=%d)" + +#: xgnokii/xgnokii_logos.c:1191 +#, c-format +msgid "Can't open file %s for reading !" +msgstr "Impossibile aprire il file %s in lettura !" + +#: xgnokii/xgnokii_logos.c:1200 +#, c-format +msgid "" +"Error reading file\n" +"(error=%d)" +msgstr "" +"Errore leggendo il file\n" +"(errore=%d)" + +#: xgnokii/xgnokii_logos.c:1295 +msgid "/File/Save _as ..." +msgstr "/File/Salv_a come ..." + +#: xgnokii/xgnokii_logos.c:1297 +msgid "/File/_Get operator" +msgstr "/File/_Seleziona operatore" + +#: xgnokii/xgnokii_logos.c:1298 +msgid "/File/Get _logo" +msgstr "/File/Seleziona _logo" + +#: xgnokii/xgnokii_logos.c:1299 +msgid "/File/Se_t logo" +msgstr "/File/Impos_ta logo" + +#: xgnokii/xgnokii_logos.c:1303 +msgid "/Edit/_Clear" +msgstr "/Edit/_Cancella tutto" + +#: xgnokii/xgnokii_logos.c:1304 +msgid "/Edit/_Invert" +msgstr "/Edit/_Inverti" + +#: xgnokii/xgnokii_logos.c:1306 +msgid "/Edit/_Up logo" +msgstr "/Edit/Logo s_u" + +#: xgnokii/xgnokii_logos.c:1307 +msgid "/Edit/_Down logo" +msgstr "/Edit/Logo _giù" + +#: xgnokii/xgnokii_logos.c:1308 +msgid "/Edit/_Left logo" +msgstr "/Edit/Logo _sinistra" + +#: xgnokii/xgnokii_logos.c:1309 +msgid "/Edit/_Right logo" +msgstr "/Edit/Logo dest_ra" + +#: xgnokii/xgnokii_logos.c:1311 +msgid "/Edit/Flip _horizontal" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1312 +msgid "/Edit/Flip _vertical" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1604 +msgid "Load preview pixmap error, feature disabled." +msgstr "" + +#: xgnokii/xgnokii_lowlevel.c:353 +#, c-format +msgid "%s: line %d: Can't get memory entry number %d from memory %d! %d\n" +msgstr "" +"%s: linea: %d:Impossibile leggere la locazione %d dalla memoria %d! %d\n" + +#: xgnokii/xgnokii_lowlevel.c:874 +msgid "Connecting..." +msgstr "Connessione..." + +#: xgnokii/xgnokii_lowlevel.c:907 +msgid "Refreshing SMSes..." +msgstr "Rilettura SMS..." + +#: xgnokii/xgnokii_lowlevel.c:965 +msgid "Working..." +msgstr "Attendere..." + +#: xgnokii/xgnokii_lowlevel.c:968 +#, c-format +msgid "Event %d failed with return code %d!\n" +msgstr "Fallito evento %d con codice %d!\n" + +#: xgnokii/xgnokii_netmon.c:261 +msgid "/_Tools" +msgstr "/S_trumenti" + +#: xgnokii/xgnokii_netmon.c:262 +msgid "/Tools/Net monitor o_n" +msgstr "/Strumenti/_Net monitor attivo" + +#: xgnokii/xgnokii_netmon.c:263 +msgid "/Tools/Net monitor o_ff" +msgstr "/Strumenti/Net monitor disattiv_o" + +#: xgnokii/xgnokii_netmon.c:380 xgnokii/xgnokii_netmon.c:383 +msgid "Active cell" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:386 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:389 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:392 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:395 +msgid "Prefered/Denied networks" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:398 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:401 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:404 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:407 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:417 +msgid "Uplink DTX" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:420 +msgid "BTS TEST" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:423 +msgid "CELL BARR-Flag" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:426 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:429 +msgid "?Constant voltage charging display" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:432 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:435 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:438 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:441 +msgid "Reset-Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:444 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:454 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:457 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:460 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:463 +msgid "L2-Timeouts" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:466 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:469 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:475 +msgid "Memory status before reset" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:478 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:481 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:491 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "Temporary counters of DSP" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "Control of task information displays" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:503 +msgid "Information about task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:506 +msgid "Information about task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:509 +msgid "Information about task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:512 +msgid "Information about OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:515 +msgid "Information about current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:518 +msgid "Hardware version" +msgstr "Versione hardware" + +#: xgnokii/xgnokii_netmon.c:537 +msgid "Chan" +msgstr "Chan" + +#: xgnokii/xgnokii_netmon.c:538 +msgid "RxLv" +msgstr "RxLv" + +#: xgnokii/xgnokii_netmon.c:539 +msgid "C1" +msgstr "C1" + +#: xgnokii/xgnokii_netmon.c:540 +msgid "C2" +msgstr "C2" + +#: xgnokii/xgnokii_netmon.c:541 +msgid "ACT" +msgstr "ACT" + +#: xgnokii/xgnokii_netmon.c:542 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:543 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:544 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:545 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:546 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:547 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:578 +msgid "Page:" +msgstr "Pagina:" + +#: xgnokii/xgnokii_sms.c:236 +msgid "report" +msgstr "report" + +#: xgnokii/xgnokii_sms.c:241 +msgid "read" +msgstr "letto" + +#: xgnokii/xgnokii_sms.c:246 +msgid "unread" +msgstr "non letto" + +#: xgnokii/xgnokii_sms.c:306 +msgid "sent" +msgstr "inviato" + +#: xgnokii/xgnokii_sms.c:308 +msgid "unsent" +msgstr "non inviato" + +#: xgnokii/xgnokii_sms.c:376 +msgid "From: " +msgstr "Da :" + +#: xgnokii/xgnokii_sms.c:473 +msgid "Delete SMS" +msgstr "Elimina SMS" + +#: xgnokii/xgnokii_sms.c:505 +msgid "Do you want to delete selected SMS?" +msgstr "Volete veramente eliminare gli SMS selezionati?" + +#: xgnokii/xgnokii_sms.c:529 +#, c-format +msgid "Cannot open mailbox %s for appending!" +msgstr "Impossibile aprire la mailbox %s per aggiungere!" + +#: xgnokii/xgnokii_sms.c:543 +#, c-format +msgid "" +"Cannot save to mailbox %s.\n" +"%s is locked for process %d!" +msgstr "" +"Impossibile salvare nella mailbox %s.\n" +"%s is è bloccato dal processo %d!" + +#: xgnokii/xgnokii_sms.c:558 +#, c-format +msgid "Cannot lock mailbox %s!" +msgstr "Impossibile bloccare la mailbox %s!" + +#: xgnokii/xgnokii_sms.c:609 +#, c-format +msgid "Cannot unlock mailbox %s!" +msgstr "Impossibile sbloccare la mailbox %s!" + +#: xgnokii/xgnokii_sms.c:827 xgnokii/xgnokii_sms.c:958 +msgid "Address line contains illegal address!" +msgstr "L'indirizzo specificato non è valido!" + +#: xgnokii/xgnokii_sms.c:930 +#, c-format +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "" +"Invio SMS a %s fallito\n" +"(errore=%d)" + +#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_sms.c:1057 +#, c-format +msgid "Sending SMS to %s (%d/%d) ...\n" +msgstr "Invio SMS a %s (%d/%d) in corso ...\n" + +#: xgnokii/xgnokii_sms.c:1084 +#, c-format +msgid "Sending SMS to %s ...\n" +msgstr "Invio SMS a %s in corso ...\n" + +#: xgnokii/xgnokii_sms.c:1122 +msgid "/File/Sen_d" +msgstr "/File/Invi_a" + +#: xgnokii/xgnokii_sms.c:1125 +msgid "/File/Check _Names" +msgstr "/File/Verifica _Nomi" + +#: xgnokii/xgnokii_sms.c:1126 +msgid "/File/C_ontacts" +msgstr "/File/C_ontatti" + +#: xgnokii/xgnokii_sms.c:1185 +msgid "Send message" +msgstr "Invia il messaggio" + +#: xgnokii/xgnokii_sms.c:1189 +msgid "Save message to outbox" +msgstr "Salva il messaggio su messaggi in uscita" + +#: xgnokii/xgnokii_sms.c:1196 +msgid "Check names" +msgstr "Controlla i nominativi" + +#: xgnokii/xgnokii_sms.c:1209 +msgid "To:" +msgstr "A:" + +#: xgnokii/xgnokii_sms.c:1281 +msgid "Delivery report" +msgstr "Rapporto di invio" + +#: xgnokii/xgnokii_sms.c:1285 +msgid "Send as Long SMS" +msgstr "Invia come Long SMS" + +#: xgnokii/xgnokii_sms.c:1289 +msgid "SMS Center:" +msgstr "Centro SMS:" + +#: xgnokii/xgnokii_sms.c:1308 +msgid "New Message" +msgstr "Nuovo Messaggio" + +#: xgnokii/xgnokii_sms.c:1335 +msgid "Forward Message" +msgstr "Reinvia il Messaggio" + +#: xgnokii/xgnokii_sms.c:1379 +msgid "Reply Message" +msgstr "Rispondi al Messaggio" + +#: xgnokii/xgnokii_sms.c:1415 xgnokii/xgnokii_sms.c:1586 +msgid "Bussiness Card" +msgstr "Biglietto da visita" + +#: xgnokii/xgnokii_sms.c:1509 +msgid "/File/Save to mailbo_x" +msgstr "/File/Salva su mailbo_x" + +#: xgnokii/xgnokii_sms.c:1512 +msgid "/_Messages" +msgstr "/_Messaggi" + +#: xgnokii/xgnokii_sms.c:1513 +msgid "/_Messages/_New" +msgstr "/_Messaggi/_Nuovo" + +#: xgnokii/xgnokii_sms.c:1514 +msgid "/_Messages/_Forward" +msgstr "/_Messaggi/_Rispedisci" + +#: xgnokii/xgnokii_sms.c:1515 +msgid "/_Messages/_Reply" +msgstr "/_Messaggi/_Rispondi" + +#: xgnokii/xgnokii_sms.c:1516 +msgid "/_Messages/_Delete" +msgstr "/_Messaggi/_Elimina" + +#: xgnokii/xgnokii_sms.c:1517 +msgid "/Messages/Sep3" +msgstr "/Messaggi/Sep3" + +#: xgnokii/xgnokii_sms.c:1518 +msgid "/_Messages/_Bussiness card" +msgstr "/_Messaggi/_Biglietti da visita" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Status" +msgstr "Stato" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Date / Time" +msgstr "Data / Ora" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Sender" +msgstr "Mittente" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Message" +msgstr "Messaggio" + +#: xgnokii/xgnokii_sms.c:1573 +msgid "New message" +msgstr "Nuovo messaggio" + +#: xgnokii/xgnokii_sms.c:1577 +msgid "Forward message" +msgstr "Reinvia il messaggio" + +#: xgnokii/xgnokii_sms.c:1581 +msgid "Reply message" +msgstr "Rispondi al messaggio" + +#: xgnokii/xgnokii_sms.c:1593 +msgid "Delete message" +msgstr "Cancella messaggio" + +#: xgnokii/xgnokii_sms.c:1618 +msgid "SMS's" +msgstr "SMS " + +#: xgnokii/xgnokii_sms.c:1627 +msgid "Inbox" +msgstr "In arrivo" + +#: xgnokii/xgnokii_sms.c:1633 +msgid "Outbox" +msgstr "In uscita" + +#: xgnokii/xgnokii_speed.c:180 +msgid "Reading data ..." +msgstr "Lettura dati..." + +#: xgnokii/xgnokii_speed.c:191 xgnokii/xgnokii_speed.c:197 +#: xgnokii/xgnokii_speed.c:256 +msgid "Cannot allocate memory!" +msgstr "Memoria esaurita!" + +#: xgnokii/xgnokii_speed.c:344 +msgid "Cannot allocate memory!\n" +msgstr "Memoria esaurita!\n" + +#: xgnokii/xgnokii_speed.c:356 xgnokii/xgnokii_speed.c:384 +msgid "Error reading file!" +msgstr "Errore di lettura del file!" + +#: xgnokii/xgnokii_speed.c:554 +msgid "Key" +msgstr "Tasto" + +#: xgnokii/xgnokii_xkeyb.c:183 +msgid "Cannot load background pixmap!" +msgstr "Impossibile caricare l'immagine di sfondo!" + +#: xgnokii/xgnokii_xkeyb.c:260 +msgid "XGnokii Keyboard" +msgstr "Tastiera di XGnokii" diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..8d19833 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,2643 @@ +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 1999-03-13 18:25:30+0100\n" +"PO-Revision-Date: 1999-03-13 18:25:30+0100\n" +"Last-Translator: Pavel Janik ml. \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c fbus-6110.c gnokii.c gsm-api.c\n" + +#: fbus-6110.c:2545 +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Naam SMS dienst is %s\n" + +#: fbus-6110.c:3490 gnokii.c:1510 +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Alarm datum ingesteld op: %d-%02d-%02d\n" + +#: fbus-6110.c:3372 +msgid " Alarm is %s\n" +msgstr "" + +#: fbus-6110.c:3494 gnokii.c:1514 +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Alarm tijd ingesteld op: %02d:%02d:%02d\n" + +#: fbus-6110.c:3371 +msgid " Alarm: %02d:%02d\n" +msgstr "" + +#: fbus-6110.c:2993 +msgid " Battery Level: %d\n" +msgstr " Batterij niveau: %d\n" + +#: gnokii.c:1585 +msgid " Calendar note deleted.\n" +msgstr "" + +#: fbus-6110.c:3217 +msgid " CellID: %s\n" +msgstr "" + +#: fbus-6110.c:3334 +msgid " Date: %4d/%02d/%02d\n" +msgstr " Datum: %4d/%02d/%02d\n" + +#: fbus-6110.c:3479 gnokii.c:1501 +msgid " Date: %d-%02d-%02d\n" +msgstr " Datum: %d-%02d-%02d\n" + +#: fbus-6110.c:2512 +msgid " Date: %s\n" +msgstr " Datum: %s\n" + +#: fbus-6110.c:3714 +msgid " Date: %s GMT" +msgstr "" + +#: fbus-6110.c:4016 +msgid " Empty SMS location.\n" +msgstr " Geen SMS bericht.\n" + +#: fbus-6110.c:2363 fbus-6110.c:2458 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Betekenis onbekend, sorry :(\n" + +#: fbus-6110.c:4142 +msgid " Firmware: %s\n" +msgstr "" + +#: fbus-6110.c:2764 +msgid " Free: %d\n" +msgstr " Beschikbaar: %d\n" + +#: fbus-6110.c:4140 +msgid " HW: %s\n" +msgstr "" + +#: fbus-3810.c:2274 +msgid " IMEI: %s\n" +msgstr "" + +#: fbus-6110.c:4134 +msgid " IMEI: %s\n" +msgstr "" + +#: fbus-6110.c:4006 +msgid " Invalid location!\n" +msgstr "" + +#: fbus-6110.c:2701 +msgid " Invalid memory type!\n" +msgstr " Geheugentype fout!\n" + +#: fbus-6110.c:3583 +msgid " Item number: %d\n" +msgstr "" + +#: fbus-6110.c:3218 +msgid " LAC: %s\n" +msgstr "" + +#: fbus-6110.c:2875 +msgid " Location: %d\n" +msgstr "" + +#: fbus-6110.c:4147 +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr "" + +#: fbus-6110.c:2762 +msgid " Memory Type: %s\n" +msgstr " Geheugentype: %s\n" + +#: fbus-6110.c:2876 +msgid " MemoryType: %s\n" +msgstr "" + +#: fbus-6110.c:2934 +msgid " Mode: " +msgstr "" + +#: fbus-3810.c:2276 +msgid " Model: %s\n" +msgstr "" + +#: fbus-6110.c:4136 +msgid " Model: %s\n" +msgstr "" + +#: fbus-3810.c:2180 +msgid " Msg Length %d, Msg number %d, Unknown bytes: %02x %02x %02x %02x %02x %02x\n" +msgstr " Lengte bericht %d, Nummer bericht %d, Onbekende Bytes: %02x %02x %02x %02x %02x %02x\n" + +#: fbus-6110.c:2401 fbus-6110.c:2656 +msgid " Name: " +msgstr " Naam: " + +#: fbus-6110.c:3219 +msgid " Network code: %s\n" +msgstr " Netwerk Code: %s\n" + +#: fbus-6110.c:3220 +msgid " Network name: %s (%s)\n" +msgstr "" + +#: fbus-6110.c:3235 +msgid " Network selection: %s\n" +msgstr "" + +#: fbus-6110.c:2393 fbus-6110.c:2672 +msgid " Number: " +msgstr " Nummer: " + +#: fbus-6110.c:2877 +msgid " Number: %d\n" +msgstr " Nummer: %d\n" + +#: fbus-6110.c:3503 gnokii.c:1522 +msgid " Phone: %s\n" +msgstr "" + +#: fbus-6110.c:2971 +msgid " Power source: " +msgstr " Voeding type: " + +#: fbus-6110.c:4138 +msgid " Production Code: %s\n" +msgstr " Productie Code: %s\n" + +#: fbus-6110.c:2511 fbus-6110.c:3746 +msgid " Remote number: %s\n" +msgstr " Nummer inkomend gesprek: %s\n" + +#: fbus-3810.c:2278 +msgid " Revision: %s\n" +msgstr "" + +#: fbus-6110.c:2548 +msgid " SMS Center message format is " +msgstr "" + +#: fbus-6110.c:2574 +msgid " SMS Center message validity is " +msgstr "" + +#: fbus-6110.c:2546 +msgid " SMS Center number is %s\n" +msgstr "" + +#: fbus-6110.c:2507 fbus-6110.c:3745 +msgid " SMS center number: %s\n" +msgstr " Nummer SMS dienst: %s\n" + +#: fbus-6110.c:2513 +msgid " SMS: " +msgstr "" + +#: fbus-6110.c:3729 +msgid " SMSC response date: %s GMT" +msgstr "" + +#: fbus-6110.c:2362 fbus-6110.c:2375 fbus-6110.c:2392 fbus-6110.c:2422 fbus-6110.c:2433 fbus-6110.c:2457 +msgid " Sequence nr. of the call: %d\n" +msgstr " Rijnummmer van oproep: %d\n" + +#: fbus-6110.c:2994 +msgid " Signal strength: %d\n" +msgstr " Signaal sterkte: %d\n" + +#: fbus-6110.c:3223 +msgid " Status: " +msgstr "" + +#: fbus-6110.c:3500 gnokii.c:1519 +msgid " Text: %s\n" +msgstr "" + +#: fbus-6110.c:4040 +msgid " The number of messages: %d\n" +msgstr " Aantal berichten: %d\n" + +#: fbus-6110.c:2622 +msgid " The request for SMS Center failed.\n" +msgstr " Oproep naar SMS dienst mislukt.\n" + +#: fbus-6110.c:3333 fbus-6110.c:3483 gnokii.c:1505 +msgid " Time: %02d:%02d:%02d\n" +msgstr " Tijd: %02d:%02d:%02d\n" + +#: gnokii.c:1476 +msgid " Type of the note: " +msgstr "" + +#: fbus-6110.c:3499 +msgid " Type: %d\n" +msgstr "" + +#: fbus-6110.c:2711 fbus-6110.c:2749 +msgid " Unknown error!\n" +msgstr " Onbekende fout!\n" + +#: fbus-6110.c:4041 +msgid " Unread messages: %d\n" +msgstr " Ongelezen berichten: %d\n" + +#: fbus-6110.c:2763 +msgid " Used: %d\n" +msgstr " Gebruikt: %d\n" + +#: gnokii.c:86 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --sendoplogoviasms destionation logofile [network code]\n" +" gnokii --setdatetime [YYYY MM DD HH MM]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group number]\n" +" gnokii --reset [soft|hard]\n" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken from\n" +" phone memory from address [message_center_index].\n" +" If this argument is ommited SMSC number is taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --sendoplogoviasms send the logofile to destination as operator\n" +" logo\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number [index] from calendar.\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +msgstr "" + +#: gnokiid.c:63 +msgid " usage: gnokiid {--help|--version}" +msgstr "" + +#: xgnokii/xgnokii_sms.c:81 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:76 +msgid "%02d/%02d/%02d %02d:%02d:%02d GMT%+dh" +msgstr "" + +#: gnokii.c:992 gnokii.c:1005 gnokii.c:1032 +msgid "%d" +msgstr "" + +#: gnokii.c:978 +msgid "%d. Delivery Report " +msgstr "" + +#: gnokii.c:1017 +msgid "%d. Inbox Message " +msgstr "" + +#: gnokii.c:965 +msgid "%d. Outbox Message " +msgstr "" + +#: gnokii.c:802 +msgid "%d. SMS center (%s) number is %s\n" +msgstr "" + +#: fbus-6110.c:3722 fbus-6110.c:3738 +msgid "%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1536 xgnokii/xgnokii_contacts.c:1581 xgnokii/xgnokii_contacts.c:2012 xgnokii/xgnokii_contacts.c:2035 +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1548 xgnokii/xgnokii_contacts.c:1553 +msgid "%s: line %d: Can't get ME memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1593 xgnokii/xgnokii_contacts.c:1598 +msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1343 +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1310 +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" + +#: gnokii.c:1893 +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Foute locatie of andere fout!(%d)\n" + +#: gnokii.c:982 gnokii.c:1022 +msgid "(not read)\n" +msgstr "" + +#: gnokii.c:970 +msgid "(not sent)\n" +msgstr "" + +#: gnokii.c:980 gnokii.c:1020 +msgid "(read)\n" +msgstr "" + +#: gnokii.c:968 +msgid "(sent)\n" +msgstr "" + +#: gnokii.c:990 gnokii.c:1003 gnokii.c:1030 +msgid "+%dh" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:78 +msgid "/help/contacts.html" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:35 +msgid "/help/dtmf.html" +msgstr "" + +#: xgnokii/xgnokii.c:153 +msgid "/help/index.html" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:38 +msgid "/help/netmon.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:38 +msgid "/help/sms.html" +msgstr "" + +#: fbus-3810.c:1946 +msgid "0x10 Write failed!" +msgstr "0x10 Opslaan mislukt!" + +#: fbus-3810.c:1222 +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 Registratie Respons 0x%02x\n" + +#: fbus-3810.c:1783 +msgid "0x15 Write failed!" +msgstr "0x15 Opslaan mislukt!" + +#: fbus-3810.c:1236 +msgid "0x16 Registration Response 0x%02x 0x%02x\n" +msgstr "0x16 Registratie Response 0x%02x 0x%02x\n" + +#: fbus-3810.c:1879 +msgid "0x27 Write failed!" +msgstr "0x27 Opslaan mislukt!" + +#: fbus-3810.c:2022 +msgid "0x2c Write failed!" +msgstr "0x2c Opslaan mislukt!" + +#: fbus-3810.c:1574 +msgid "0x3f Write failed!" +msgstr "0x3f Opslaan mislukt!" + +#: fbus-3810.c:1549 +msgid "0x4a Write failed!" +msgstr "0x4a Opslaan mislukt!" + +#: fbus-3810.c:1917 +msgid "0x4b Write failed!" +msgstr "0x4b Opslaan mislukt!" + +#: xgnokii/xgnokii.c:432 xgnokii/xgnokii.c:1090 +msgid "1 h" +msgstr "" + +#: fbus-6110.c:2579 gnokii.c:835 +msgid "1 hour" +msgstr "" + +#: fbus-6110.c:2595 gnokii.c:851 xgnokii/xgnokii.c:448 xgnokii/xgnokii.c:1118 +msgid "1 week" +msgstr "" + +#: xgnokii/xgnokii.c:440 xgnokii/xgnokii.c:456 xgnokii/xgnokii.c:1104 +msgid "24 h" +msgstr "" + +#: fbus-6110.c:2587 gnokii.c:843 +msgid "24 hours" +msgstr "" + +#: xgnokii/xgnokii.c:436 xgnokii/xgnokii.c:1097 +msgid "6 h" +msgstr "" + +#: fbus-6110.c:2583 gnokii.c:839 +msgid "6 hours" +msgstr "" + +#: xgnokii/xgnokii.c:444 xgnokii/xgnokii.c:1111 +msgid "72 h" +msgstr "" + +#: fbus-6110.c:2591 gnokii.c:847 +msgid "72 hours" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:384 +msgid "?Constant voltage charging display" +msgstr "" + +#: gnokii.c:1747 +msgid "AC/DC" +msgstr "Lader" + +#: fbus-6110.c:2977 +msgid "AC/DC\n" +msgstr "Lader\n" + +#: xgnokii/xgnokii_netmon.c:496 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii.c:791 xgnokii/xgnokii.c:807 +msgid "About" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:381 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338 +msgid "Active cell" +msgstr "" + +#: xgnokii/xgnokii.c:1725 +msgid "Address:" +msgstr "" + +#: xgnokii/xgnokii.c:1344 xgnokii/xgnokii.c:1351 +msgid "Alarm" +msgstr "" + +#: xgnokii/xgnokii.c:1337 +msgid "Alarm setting" +msgstr "" + +#: gnokii.c:1687 +msgid "Alarm: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1227 +msgid "Apply" +msgstr "" + +#: rlp-common.c:509 +msgid "BAD" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:375 +msgid "BTS TEST" +msgstr "" + +#: fbus-6110.c:4341 +msgid "Bad checksum!\n" +msgstr "" + +#: gnokii.c:1744 +msgid "Battery: %d\n" +msgstr "Batterij: %d\n" + +#: xgnokii/xgnokii.c:1309 +msgid "Bindir:" +msgstr "" + +#: gnokii.c:1493 +msgid "Birthday\n" +msgstr "" + +#: xgnokii/xgnokii.c:1812 +msgid "Busines Cards" +msgstr "" + +#: xgnokii/xgnokii.c:1552 +msgid "Business Card" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "C2" +msgstr "" + +#: fbus-6110.c:2136 +msgid "CAR is %s.\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:378 +msgid "CELL BARR-Flag" +msgstr "" + +#: fbus-3810.c:1115 +msgid "CS Fail %02x != %02x" +msgstr "Cs-Fout %02x != %02x" + +#: fbus-6110.c:2137 +msgid "CTS is %s.\n" +msgstr "" + +#: gnokii.c:1485 +msgid "Call\n" +msgstr "" + +#: gnokii.c:2096 +msgid "Call in progress: %s\n" +msgstr "" + +#: fbus-6110.c:2818 +msgid "Caller group name: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:752 +msgid "Caller group:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:449 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:188 xgnokii/xgnokii_contacts.c:221 xgnokii/xgnokii_contacts.c:382 xgnokii/xgnokii_contacts.c:407 xgnokii/xgnokii_contacts.c:540 xgnokii/xgnokii_contacts.c:562 +msgid "Can't change memory type!" +msgstr "" + +#: xgnokii/xgnokii_common.c:182 +msgid "Can't exec %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:958 xgnokii/xgnokii_contacts.c:968 xgnokii/xgnokii_contacts.c:993 +msgid "Can't find free memory." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:652 +msgid "Can't find pattern!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1988 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1503 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1951 xgnokii/xgnokii_dtmf.c:74 +msgid "Can't open file %s for reading!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1701 xgnokii/xgnokii_dtmf.c:110 +msgid "Can't open file %s for writing!" +msgstr "" + +#: xgnokii/xgnokii.c:992 xgnokii/xgnokii_common.c:51 xgnokii/xgnokii_common.c:105 xgnokii/xgnokii_contacts.c:695 xgnokii/xgnokii_contacts.c:856 xgnokii/xgnokii_contacts.c:1050 xgnokii/xgnokii_contacts.c:1095 xgnokii/xgnokii_contacts.c:1387 xgnokii/xgnokii_contacts.c:2303 +msgid "Cancel" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:359 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Center number" +msgstr "" + +#: xgnokii/xgnokii.c:1018 +msgid "Center:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1034 +msgid "Changing memory type" +msgstr "" + +#: fbus-3810.c:1446 +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Prüfsumme: %02x \n" +" " + +#: xgnokii/xgnokii.c:1243 +msgid "Close" +msgstr "" + +#: gnokii.c:1221 +msgid "Code ok.\n" +msgstr "" + +#: xgnokii/xgnokii.c:2007 +msgid "Colleagues" +msgstr "" + +#: xgnokii/xgnokii.c:1627 +msgid "Company:" +msgstr "" + +#: fbus-6110.c:3840 fbus-6110.c:3933 +msgid "Congestion" +msgstr "" + +#: xgnokii/xgnokii.c:1265 +msgid "Connection" +msgstr "" + +#: fbus-6110.c:3884 +msgid "Connection rejected by SME" +msgstr "" + +#: xgnokii/xgnokii.c:1321 +msgid "Connection:" +msgstr "" + +#: xgnokii/xgnokii.c:740 xgnokii/xgnokii_contacts.c:2437 +msgid "Contacts" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1041 +msgid "Continue" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Control of task information displays" +msgstr "" + +#: fbus-3810.c:977 +msgid "Couldn't open FB38 device: " +msgstr "Openen FB38-Device mislukt: " + +#: fbus-6110.c:2206 +msgid "Couldn't open FB61 device: " +msgstr "Openen FB61-Device mislukt: " + +#: fbus-6110.c:658 +msgid "Couldn't open FB61 infrared device: " +msgstr "" + +#: virtmodem.c:179 +msgid "Couldn't open pty!\n" +msgstr "" + +#: gnokii.c:679 +msgid "Couldn't read from stdin!\n" +msgstr "Lezen van stdin mislukt!\n" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: gnokii.c:1756 +msgid "DC: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:765 +msgid "DTMF" +msgstr "" + +#: fbus-6110.c:2134 +msgid "DTR is %s.\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:362 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: gnokii.c:2101 +msgid "Data call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Date" +msgstr "" + +#: gnokii.c:1024 +msgid "Date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: xgnokii/xgnokii_sms.c:206 +msgid "Date: " +msgstr "" + +#: gnokii.c:1650 +msgid "Date: %4d/%02d/%02d\n" +msgstr "Datum: %4d/%02d/%02d\n" + +#: fbus-3810.c:1764 +msgid "Delete SMS Mem Loc write failed!" +msgstr "Verwijderen SMS van geheugenlocatie mislukt!" + +#: xgnokii/xgnokii_contacts.c:842 +msgid "Delete entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2502 +msgid "Delete entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:303 +msgid "Delete message" +msgstr "" + +#: gnokii.c:1162 +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "Verwijderen SMS %s %d mislukt!(%d)\n\n" + +#: gnokii.c:1155 +msgid "Deleted SMS %s %d\n" +msgstr "SMS %s %d verwijderd.\n" + +#: fbus-6110.c:3809 +msgid "Delivered" +msgstr "" + +#: fbus-6110.c:3705 +msgid "Delivery Report\n" +msgstr "" + +#: xgnokii/xgnokii_dtmf.c:207 +msgid "Dial Tone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2509 +msgid "Dial voice" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:873 +msgid "Do you want delete selected entries?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1380 +msgid "Don't save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:910 xgnokii/xgnokii_contacts.c:2494 +msgid "Duplicate entry" +msgstr "" + +#: xgnokii/xgnokii.c:421 xgnokii/xgnokii.c:1060 +msgid "E-Mail" +msgstr "" + +#: xgnokii/xgnokii.c:1700 +msgid "E-Mail:" +msgstr "" + +#: gnokii.c:1759 +msgid "EN: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:158 xgnokii/xgnokii_cfg.c:176 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:152 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:164 +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:182 +msgid "ERROR: Can't write file config file!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1411 +msgid "Edit" +msgstr "" + +#: xgnokii/xgnokii.c:978 +msgid "Edit SMS Setting" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:813 xgnokii/xgnokii_contacts.c:2498 +msgid "Edit entry" +msgstr "" + +#: fbus-6110.c:2565 gnokii.c:821 +msgid "Email" +msgstr "" + +#: gnokii.c:1213 +msgid "Enter your code: " +msgstr "" + +#: gnokii.c:1729 +msgid "Entering monitor mode...\n" +msgstr "Monitor modus wordt gestart...\n" + +#: xgnokii/xgnokii_common.c:45 +msgid "Error" +msgstr "" + +#: fbus-6110.c:3860 fbus-6110.c:3953 +msgid "Error in SME" +msgstr "" + +#: xgnokii/xgnokii.c:722 +msgid "Error saving SMS centers!" +msgstr "" + +#: xgnokii/xgnokii.c:728 +msgid "Error writing configuration file!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2327 xgnokii/xgnokii_contacts.c:2538 +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "" + +#: gnokii.c:1219 +msgid "Error: invalid code\n" +msgstr "" + +#: fbus-3810.c:1564 +msgid "Explore Write failed!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1791 +msgid "Export" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2483 +msgid "Export to file" +msgstr "" + +#: gnokii.c:1762 +msgid "FD: Used %d, Free %d\n" +msgstr "" + +#: fbus-6110.c:3828 +msgid "Failed" +msgstr "" + +#: xgnokii/xgnokii.c:2004 +msgid "Familly" +msgstr "" + +#: fbus-6110.c:2561 gnokii.c:817 xgnokii/xgnokii.c:417 xgnokii/xgnokii.c:1046 +msgid "Fax" +msgstr "" + +#: gnokii.c:2100 +msgid "Fax call active: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1676 +msgid "Fax:" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1773 xgnokii/xgnokii_dtmf.c:143 +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1080 xgnokii/xgnokii_contacts.c:1086 +msgid "Find" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Format" +msgstr "" + +#: gnokii.c:1960 +msgid "Format problem on line %d [%s]\n" +msgstr "Opmaakprobleem op regel %d [%s]\n" + +#: xgnokii/xgnokii_sms.c:292 +msgid "Forward Message" +msgstr "" + +#: rlp-common.c:621 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "" + +#: xgnokii/xgnokii.c:2006 +msgid "Friends" +msgstr "" + +#: xgnokii/xgnokii_sms.c:198 +msgid "From: " +msgstr "" + +#: gnokii.c:1047 gnokii.c:1158 gnokii.c:1883 +msgid "Function not implemented in %s model!\n" +msgstr "Funktie is (nog) niet beschikbaar op model %s!\n" + +#: gnokii.c:72 +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Jan\355k ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" + +#: gnokii.c:210 gnokii.c:2244 virtmodem.c:243 xgnokii/xgnokii.c:176 xkeyb.c:181 xlogos.c:130 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "GSM/FBUS int mislukt! (Model niet ondersteund?). Stop.\n" + +#: gnokii.c:1065 +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "GetSMS %s %d mislukt!(%d)\n" + +#: gnokii.c:1403 +msgid "Getting Logo.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1527 +msgid "Getting entries" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Group" +msgstr "" + +#: xgnokii/xgnokii.c:1766 +msgid "Group %d:" +msgstr "" + +#: xgnokii/xgnokii.c:1757 +msgid "Groups" +msgstr "" + +#: xgnokii/xgnokii.c:1750 +msgid "Groups names" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:412 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:415 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:473 +msgid "Hardware version" +msgstr "" + +#: xgnokii/xgnokii.c:785 xgnokii/xgnokii.c:1786 +msgid "Help" +msgstr "" + +#: xgnokii/xgnokii.c:1779 +msgid "Help viewer" +msgstr "" + +#: gnokii.c:221 virtmodem.c:255 xkeyb.c:192 xlogos.c:141 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM Link niet geinitialiseerd. Stop. \n" + +#: gnokii.c:2150 +msgid "IMEI: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1061 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2099 +msgid "Import" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2479 +msgid "Import from file" +msgstr "" + +#: xgnokii/xgnokii_sms.c:337 +msgid "Inbox" +msgstr "" + +#: fbus-3810.c:2178 +msgid "Incoming SMS %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n" +msgstr "Inkomend SMS-bericht %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n" + +#: fbus-3810.c:1853 +msgid "Incoming call - status %02x %02x %02x, Number %s.\n" +msgstr "" + +#: fbus-3810.c:1992 +msgid "Incoming call answered.\n" +msgstr "Inkomende oproep beantwoord.\n" + +#: fbus-3810.c:1964 +msgid "Incoming call terminated.\n" +msgstr "Inkomende oproep beeindigd.\n" + +#: gnokii.c:1780 +msgid "Incoming call: %s\n" +msgstr "Inkomende oproep: %s\n" + +#: fbus-6110.c:3880 +msgid "Incompatibile destination" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "Information of OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Information of task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "Information of task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Information of task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "Information of the current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii.c:1297 +msgid "Init length:" +msgstr "" + +#: gnokii.c:1730 +msgid "Initialising GSM interface...\n" +msgstr "Bezig met initialiseren GSM interface...\n" + +#: fbus-6110.c:4281 +msgid "Interrupted MultiFrame-Message - Ingnoring it !!!\n" +msgstr "" + +#: gnokii.c:1053 +msgid "Invalid location: %s %d\n" +msgstr "" + +#: gnokii.c:2102 +msgid "Keyboard lock: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "L2-Timeouts" +msgstr "" + +#: gnokii.c:1765 +msgid "LD: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1788 +msgid "Leaving monitor mode...\n" +msgstr "Monitor modus wordt beeindigd...\n" + +#: xgnokii/xgnokii_dtmf.c:91 +msgid "Load" +msgstr "" + +#: gnokii.c:1448 +msgid "Logo file error.\n" +msgstr "" + +#: gnokii.c:1768 +msgid "MC: Used %d, Free %d\n" +msgstr "" + +#: fbus-3810.c:1108 +msgid "MT Fail %02x" +msgstr "" + +#: xgnokii/xgnokii.c:1083 +msgid "Max. Time" +msgstr "" + +#: xgnokii/xgnokii.c:452 +msgid "Max. time" +msgstr "" + +#: fbus-6110.c:2599 gnokii.c:855 +msgid "Maximum time" +msgstr "" + +#: gnokii.c:1489 +msgid "Meeting\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2433 +msgid "Memory" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "Memory status before reset" +msgstr "" + +#: gnokii.c:1888 +msgid "Memory type %s not supported!\n" +msgstr "Geheugentype %s wordt niet ondersteund!\n" + +#: xgnokii/xgnokii_contacts.c:733 +msgid "Memory:" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Message" +msgstr "" + +#: gnokii.c:830 +msgid "Message validity is " +msgstr "" + +#: fbus-6110.c:3370 +msgid "Message: Alarm\n" +msgstr "Bericht: Alarm\n" + +#: fbus-6110.c:3348 +msgid "Message: Alarm set correctly\n" +msgstr "Bericht: Alarm correct ingesteld\n" + +#: fbus-6110.c:3582 +msgid "Message: Calendar Alarm active\n" +msgstr "" + +#: fbus-6110.c:3556 +msgid "Message: Calendar note can't be deleted\n" +msgstr "" + +#: fbus-6110.c:3545 +msgid "Message: Calendar note deleted\n" +msgstr "" + +#: fbus-6110.c:3566 +msgid "Message: Calendar note deleting error\n" +msgstr "" + +#: fbus-6110.c:3523 +msgid "Message: Calendar note error\n" +msgstr "" + +#: fbus-6110.c:3513 +msgid "Message: Calendar note not available\n" +msgstr "" + +#: fbus-6110.c:3477 +msgid "Message: Calendar note received.\n" +msgstr "Bericht: Kalender niet ontvangen.\n" + +#: fbus-6110.c:3421 fbus-6110.c:3431 +msgid "Message: Calendar note write failed!\n" +msgstr "" + +#: fbus-6110.c:3411 +msgid "Message: Calendar note write succesfull!\n" +msgstr "" + +#: fbus-6110.c:2421 +msgid "Message: Call answered.\n" +msgstr "Bericht: Oproep beantwoord.\n" + +#: fbus-6110.c:2432 +msgid "Message: Call ended by your phone.\n" +msgstr "Bericht: Oproep verbroken door toestel.\n" + +#: fbus-6110.c:2361 +msgid "Message: Call message, type 0x03:" +msgstr "" + +#: fbus-6110.c:2456 +msgid "Message: Call message, type 0x0a:" +msgstr "" + +#: fbus-6110.c:2837 +msgid "Message: Caller group data received but not requested!\n" +msgstr "" + +#: fbus-6110.c:2855 +msgid "Message: Caller group data set correctly.\n" +msgstr "" + +#: fbus-6110.c:2817 +msgid "Message: Caller group logo etc.\n" +msgstr "" + +#: fbus-6110.c:3332 +msgid "Message: Date and time\n" +msgstr "Bericht: Datum en tijd\n" + +#: fbus-6110.c:3302 +msgid "Message: Date and time set correctly\n" +msgstr "Bericht: Datum en tijd correct ingesteld\n" + +#: fbus-6110.c:3312 fbus-6110.c:3358 +msgid "Message: Date and time set error\n" +msgstr "" + +#: fbus-6110.c:2847 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "" + +#: fbus-6110.c:2863 +msgid "Message: Error attempting to set caller group data\n" +msgstr "" + +#: fbus-6110.c:3113 +msgid "Message: Error getting operator logo!\n" +msgstr "" + +#: fbus-6110.c:3078 +msgid "Message: Error setting operator logo!\n" +msgstr "" + +#: fbus-6110.c:2387 +msgid "Message: Incoming call alert:\n" +msgstr "Bericht: Inkomende oproep:\n" + +#: fbus-6110.c:2786 +msgid "Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" + +#: fbus-6110.c:2779 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" + +#: fbus-6110.c:2793 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "" + +#: fbus-6110.c:2760 +msgid "Message: Memory status received:\n" +msgstr "Bericht: Geheugenstatus ontvangen:\n" + +#: fbus-6110.c:4133 +msgid "Message: Mobile phone identification received:\n" +msgstr "" + +#: fbus-6110.c:4084 +msgid "Message: Netmonitor correctly set.\n" +msgstr "" + +#: fbus-6110.c:4094 +msgid "Message: Netmonitor menu %d received:\n" +msgstr "" + +#: fbus-6110.c:3215 +msgid "Message: Network informations:\n" +msgstr "" + +#: fbus-6110.c:3088 +msgid "Message: Operator Logo received.\n" +msgstr "" + +#: fbus-6110.c:3069 +msgid "Message: Operator logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3104 +msgid "Message: Operator logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:3693 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "" + +#: fbus-6110.c:2933 +msgid "Message: Phone status received:\n" +msgstr "" + +#: fbus-6110.c:2655 +msgid "Message: Phonebook entry received:\n" +msgstr "" + +#: fbus-6110.c:2739 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "" + +#: fbus-6110.c:2693 +msgid "Message: Phonebook read entry error received:\n" +msgstr "" + +#: fbus-6110.c:2722 +msgid "Message: Phonebook written correctly.\n" +msgstr "" + +#: fbus-6110.c:3702 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "" + +#: fbus-6110.c:2374 +msgid "Message: Remote end hang up.\n" +msgstr "" + +#: fbus-6110.c:2528 +msgid "Message: SMS Center correctly set.\n" +msgstr "" + +#: fbus-6110.c:2621 +msgid "Message: SMS Center error received:\n" +msgstr "" + +#: fbus-6110.c:2544 +msgid "Message: SMS Center received:\n" +msgstr "" + +#: fbus-6110.c:2506 +msgid "Message: SMS Message Received\n" +msgstr "" + +#: fbus-6110.c:2486 +msgid "Message: SMS Message correctly sent.\n" +msgstr "" + +#: fbus-6110.c:4039 +msgid "Message: SMS Status Received\n" +msgstr "" + +#: fbus-6110.c:4053 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "" + +#: fbus-6110.c:4029 +msgid "Message: SMS deleted successfully.\n" +msgstr "" + +#: fbus-6110.c:3998 +msgid "Message: SMS reading failed.\n" +msgstr "" + +#: fbus-6110.c:3131 +msgid "Message: Security Code status received: " +msgstr "" + +#: fbus-6110.c:3179 +msgid "Message: Security code accepted.\n" +msgstr "" + +#: fbus-6110.c:3189 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "" + +#: fbus-6110.c:2497 +msgid "Message: Sending SMS Message failed.\n" +msgstr "" + +#: fbus-6110.c:2887 +msgid "Message: Speed dial entry error\n" +msgstr "" + +#: fbus-6110.c:2874 +msgid "Message: Speed dial entry received:\n" +msgstr "" + +#: fbus-6110.c:2897 +msgid "Message: Speed dial entry set.\n" +msgstr "" + +#: fbus-6110.c:2907 +msgid "Message: Speed dial entry setting error.\n" +msgstr "" + +#: fbus-6110.c:3024 +msgid "Message: Startup Logo received.\n" +msgstr "" + +#: fbus-6110.c:3062 +msgid "Message: Startup logo correctly set.\n" +msgstr "" + +#: fbus-6110.c:3053 +msgid "Message: Startup logo received but not requested!\n" +msgstr "" + +#: fbus-6110.c:4177 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "" + +#: fbus-6110.c:4195 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "" + +#: fbus-6110.c:2800 +msgid "Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" + +#: fbus-6110.c:2468 +msgid "Message: Unknown message of type 0x01\n" +msgstr "" + +#: fbus-6110.c:2917 +msgid "Message: Unknown message of type 0x03\n" +msgstr "" + +#: fbus-6110.c:3006 +msgid "Message: Unknown message of type 0x04\n" +msgstr "" + +#: fbus-6110.c:3245 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "" + +#: fbus-6110.c:3388 +msgid "Message: Unknown message of type 0x11\n" +msgstr "" + +#: fbus-6110.c:3591 +msgid "Message: Unknown message of type 0x13\n" +msgstr "" + +#: fbus-6110.c:4206 +msgid "Message: Unknown message.\n" +msgstr "" + +#: fbus-6110.c:3606 +msgid "Message: the rest of the SMS message received.\n" +msgstr "" + +#: gnokii.c:804 +msgid "Messages sent as " +msgstr "" + +#: fbus-3810.c:2273 +msgid "Mobile phone identification received:\n" +msgstr "" + +#: xgnokii/xgnokii.c:1285 +msgid "Model:" +msgstr "" + +#: gnokii.c:2151 +msgid "Model: %s\n" +msgstr "" + +#: fbus-6110.c:4419 +msgid "Msg Dest: %s\n" +msgstr "" + +#: fbus-6110.c:4425 +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" + +#: fbus-3810.c:1444 +msgid "Msg Len: %02x " +msgstr "Lengte bericht: %02x" + +#: fbus-6110.c:4420 +msgid "Msg Source: %s\n" +msgstr "" + +#: fbus-6110.c:4422 +msgid "Msg Type: %02x\n" +msgstr "Bericht type: %02x\n" + +#: fbus-3810.c:1443 +msgid "Msg Type: %02x " +msgstr "Type bericht: %02x" + +#: fbus-6110.c:4424 +msgid "Msg Unknown: %02x\n" +msgstr "Bericht onbekend: %02x\n" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:499 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:502 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:341 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:344 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:347 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1121 xgnokii/xgnokii_contacts.c:2433 +msgid "Name" +msgstr "" + +#: xgnokii/xgnokii.c:1577 xgnokii/xgnokii_contacts.c:708 +msgid "Name:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:446 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii.c:759 xgnokii/xgnokii_netmon.c:271 +msgid "Net Monitor" +msgstr "" + +#: gnokii.c:1783 +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:886 xgnokii/xgnokii_contacts.c:2490 +msgid "New entry" +msgstr "" + +#: xgnokii/xgnokii_sms.c:288 +msgid "New message" +msgstr "" + +#: xgnokii/xgnokii_common.c:98 +msgid "No" +msgstr "" + +#: xgnokii/xgnokii.c:2009 +msgid "No group" +msgstr "" + +#: fbus-6110.c:3896 +msgid "No internetworking available" +msgstr "" + +#: fbus-6110.c:3848 fbus-6110.c:3941 +msgid "No response from SME" +msgstr "" + +#: fbus-6110.c:3888 +msgid "Not obtainable" +msgstr "" + +#: fbus-6110.c:3712 +msgid "Not read\n" +msgstr "" + +#: fbus-6110.c:3698 +msgid "Not sent\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1127 xgnokii/xgnokii_contacts.c:2433 +msgid "Number" +msgstr "" + +#: fbus-3810.c:2338 +msgid "Number field empty." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:721 +msgid "Number:" +msgstr "" + +#: fbus-3810.c:2341 +msgid "Number: " +msgstr "Nummer: " + +#: fbus-6110.c:3688 +msgid "Number: %d\n" +msgstr "" + +#: gnokii.c:1771 +msgid "ON: Used %d, Free %d\n" +msgstr "" + +#: xgnokii/xgnokii.c:811 xgnokii/xgnokii.c:984 xgnokii/xgnokii_contacts.c:687 xgnokii/xgnokii_contacts.c:848 xgnokii/xgnokii_contacts.c:2296 +msgid "Ok" +msgstr "" + +#: xgnokii/xgnokii.c:775 xgnokii/xgnokii.c:1222 +msgid "Options" +msgstr "" + +#: xgnokii/xgnokii.c:2008 +msgid "Other" +msgstr "" + +#: xgnokii/xgnokii_sms.c:343 +msgid "Outbox" +msgstr "" + +#: fbus-3810.c:2006 +msgid "Outgoing call answered - status bytes %02x %02x %02x.\n" +msgstr "Abgehender Anruf beantwortet - Statusbytes %02x %02x %02x.\n" + +#: fbus-3810.c:1950 +msgid "Outgoing call terminated (0x10 message).\n" +msgstr "Abgehender Anruf beendet (0x10 Nachricht).\n" + +#: fbus-3810.c:1978 +msgid "Outgoing call terminated (0x12 message).\n" +msgstr "Abgehender Anruf beendet (0x12 Nachricht).\n" + +#: xgnokii/xgnokii_contacts.c:1772 xgnokii/xgnokii_dtmf.c:142 +msgid "Overwrite file?" +msgstr "" + +#: fbus-6110.c:4401 +msgid "PC" +msgstr "" + +#: fbus-6110.c:4496 +msgid "PC: " +msgstr "" + +#: fbus-3810.c:1377 +msgid "PIN [possibly] entered.\n" +msgstr "PIN-Code is (wellicht) ingegeven.\n" + +#: xgnokii/xgnokii_netmon.c:533 +msgid "Page:" +msgstr "" + +#: fbus-6110.c:2557 gnokii.c:813 xgnokii/xgnokii.c:413 xgnokii/xgnokii.c:1053 +msgid "Paging" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1108 +msgid "Pattern:" +msgstr "" + +#: fbus-6110.c:3925 +msgid "Pending" +msgstr "" + +#: fbus-6110.c:3871 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:4398 +msgid "Phone" +msgstr "" + +#: xgnokii/xgnokii.c:1258 +msgid "Phone and connection type" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1247 +msgid "Phone memory..." +msgstr "" + +#: fbus-3810.c:1386 +msgid "Phone powering off..." +msgstr "Toestel schakelt uit..." + +#: gnokii.c:1753 +msgid "Phone: Used %d, Free %d\n" +msgstr "Toestel: Gebruikt %d, beschikbaar %d\n" + +#: fbus-6110.c:4282 +msgid "Please report it ...\n" +msgstr "" + +#: xgnokii/xgnokii.c:1272 +msgid "Port:" +msgstr "" + +#: gnokii.c:1747 +msgid "Power Source: %s\n" +msgstr "Voedingstype: %s\n" + +#: xgnokii/xgnokii_netmon.c:350 +msgid "Prefered/Denied networks" +msgstr "" + +#: fbus-6110.c:3856 fbus-6110.c:3892 fbus-6110.c:3949 +msgid "Quality of service not aviable" +msgstr "" + +#: gnokii.c:1774 +msgid "RC: Used %d, Free %d\n" +msgstr "" + +#: gnokii.c:1741 +msgid "RFLevel: %d\n" +msgstr "Signaalniveau: %d\n" + +#: rlp-common.c:643 +msgid "RLP state 0.\n" +msgstr "" + +#: rlp-common.c:660 +msgid "RLP state 1.\n" +msgstr "" + +#: fbus-6110.c:2135 +msgid "RTS is %s.\n" +msgstr "" + +#: fbus-6110.c:3710 +msgid "Read\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2468 +msgid "Read from phone" +msgstr "" + +#: gnokii.c:1010 +msgid "Receiver: %s Msg Center: %s\n" +msgstr "" + +#: gnokii.c:1481 +msgid "Reminder\n" +msgstr "" + +#: fbus-6110.c:3876 +msgid "Remote procedure error" +msgstr "" + +#: xgnokii/xgnokii_sms.c:296 +msgid "Reply message" +msgstr "" + +#: fbus-3810.c:1647 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "" + +#: fbus-3810.c:1634 +msgid "Request Mem Loc Write failed!" +msgstr "" + +#: fbus-3810.c:1741 +msgid "Request SMS Mem Loc Write failed!" +msgstr "" + +#: fbus-6110.c:3864 fbus-6110.c:3916 fbus-6110.c:3957 fbus-6110.c:3967 +msgid "Reserved/Specific to SC: %x" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:409 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Reset-Counter" +msgstr "" + +#: gnokii.c:997 +msgid "Response date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: gnokii.c:2152 +msgid "Revision: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:493 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1258 +msgid "SIM memory..." +msgstr "" + +#: gnokii.c:1750 +msgid "SIM: Used %d, Free %d\n" +msgstr "" + +#: fbus-6110.c:3908 +msgid "SM Deleted by SC Administration" +msgstr "" + +#: fbus-6110.c:3900 +msgid "SM Validity Period Expired" +msgstr "" + +#: fbus-6110.c:3904 +msgid "SM deleted by originating SME" +msgstr "" + +#: fbus-6110.c:3912 +msgid "SM does not exist" +msgstr "" + +#: fbus-6110.c:3817 +msgid "SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" + +#: fbus-6110.c:3814 +msgid "SM received by the SME" +msgstr "" + +#: fbus-6110.c:3820 +msgid "SM replaced by the SC" +msgstr "" + +#: fbus-6110.c:3844 fbus-6110.c:3937 +msgid "SME busy" +msgstr "" + +#: xgnokii/xgnokii.c:746 xgnokii/xgnokii.c:1382 +msgid "SMS" +msgstr "" + +#: fbus-3810.c:2332 +msgid "SMS Message Center Data status bytes =" +msgstr "" + +#: gnokii.c:1777 +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "SMS Berichten: Ongelezen %d, Aantal %d\n" + +#: fbus-3810.c:559 +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "" + +#: gnokii.c:782 gnokii.c:1360 +msgid "SMS Send failed (error=%d)\n" +msgstr "" + +#: gnokii.c:866 +msgid "SMS center can not be found :-(\n" +msgstr "" + +#: gnokii.c:1059 +msgid "SMS location %s %d empty.\n" +msgstr "" + +#: gnokii.c:2103 +msgid "SMS storage full: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:328 +msgid "SMS's" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii.c:1236 xgnokii/xgnokii_contacts.c:1371 xgnokii/xgnokii_dtmf.c:158 +msgid "Save" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1365 +msgid "Save changes?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2472 +msgid "Save to phone" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1285 +msgid "Saving entries" +msgstr "" + +#: gnokii.c:1237 +msgid "Security code status: " +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2293 +msgid "Select contacts" +msgstr "" + +#: fbus-3810.c:1718 +msgid "Send SMS block %d failed!" +msgstr "Verzenden SMS-Block %d mislukt!" + +#: fbus-3810.c:1691 +msgid "Send SMS header failed!" +msgstr "Verzenden SMS-Header mislukt!" + +#: gnokii.c:780 gnokii.c:1358 +msgid "Send succeeded!\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Sender" +msgstr "" + +#: gnokii.c:1037 +msgid "Sender: %s Msg Center: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1031 +msgid "Sending Format:" +msgstr "" + +#: gnokii.c:1454 +msgid "Sending Logo.\n" +msgstr "" + +#: fbus-3810.c:456 fbus-6110.c:1870 +msgid "Sending SMS to %s via message center %s\n" +msgstr "Verzend SMS naar %s via SMS-Dienst %s\n" + +#: gnokii.c:984 +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d GMT" +msgstr "" + +#: fbus-6110.c:3696 +msgid "Sent\n" +msgstr "" + +#: fbus-3810.c:1445 +msgid "Sequence Number: %02x " +msgstr "Volgnummer: %02x" + +#: fbus-3810.c:1008 +msgid "Serial TIOCMGET failed: " +msgstr "" + +#: fbus-3810.c:1015 +msgid "Serial TIOCMSET failed: " +msgstr "" + +#: fbus-6110.c:2133 +msgid "Serial flags dump:\n" +msgstr "" + +#: fbus-6110.c:3852 fbus-6110.c:3945 +msgid "Service rejected" +msgstr "" + +#: xgnokii/xgnokii.c:399 +msgid "Set %d" +msgstr "" + +#: fbus-3810.c:1535 fbus-3810.c:1610 +msgid "Set Mem Loc Write failed!" +msgstr "Opslaan geheugenlocatie mislukt!" + +#: xgnokii/xgnokii.c:1219 +msgid "Set name" +msgstr "" + +#: xgnokii/xgnokii.c:1005 +msgid "Set name:" +msgstr "" + + +#: fbus-6110.c:2175 +msgid "Setting FBUS communication...\n" +msgstr "Bezig met FBUS Communicatie initialiseren...\n" + +#: xgnokii/xgnokii.c:1375 xgnokii/xgnokii_sms.c:258 +msgid "Short Message Service" +msgstr "" + +#: xgnokii/xgnokii.c:272 +msgid "Short Message received" +msgstr "" + +#: virtmodem.c:191 +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:418 xgnokii/xgnokii_contacts.c:457 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:232 xgnokii/xgnokii_contacts.c:279 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" + +#: gnokii.c:1996 +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: fbus-3810.c:1415 +msgid "Standard Ack write failed!" +msgstr "Standaard bevestiging (ACK) sturen mislukt!" + +#: fbus-6110.c:764 +msgid "Starting IR mode...!\n" +msgstr "" + +#: fbus-6110.c:3041 +msgid "Startup Text: %s\n" +msgstr "" + +#: xgnokii/xgnokii_sms.c:254 +msgid "Status" +msgstr "" + +#: fbus-3810.c:1936 +msgid "Status: Connection Status %02x Batt %02x RF %02x.\n" +msgstr "" + +#: gnokii.c:1565 gnokii.c:2034 +msgid "Succesfully written!\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:353 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:356 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: fbus-3810.c:1800 +msgid "TX_SendMessage - message too long!\n" +msgstr "" + +#: fbus-3810.c:1826 +msgid "TX_SendMessage - write:" +msgstr "" + +#: xgnokii/xgnokii.c:1652 +msgid "Telephone:" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:452 +msgid "Temporary counters of DSP" +msgstr "" + +#: fbus-6110.c:3835 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "" + +#: fbus-6110.c:3929 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "" + +#: fbus-6110.c:2553 gnokii.c:809 xgnokii/xgnokii.c:409 xgnokii/xgnokii.c:425 xgnokii/xgnokii.c:1039 +msgid "Text" +msgstr "" + +#: gnokii.c:972 gnokii.c:1011 gnokii.c:1038 +msgid "" +"Text: %s\n" +"\n" +msgstr "Text: %s\n" + +#: gnokii.c:1588 +msgid "The calendar note can not be deleted\n" +msgstr "" + +#: gnokii.c:1526 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii.c:1688 +msgid "Time: %02d:%02d\n" +msgstr "Tijd: %02d:%02d\n" + +#: gnokii.c:1651 +msgid "Time: %02d:%02d:%02d\n" +msgstr "Tijd: %02d:%02d:%02d\n" + +#: fbus-6110.c:633 +msgid "Timeout in IR-mode\n" +msgstr "" + +#: xgnokii/xgnokii.c:1602 +msgid "Title:" +msgstr "" + +#: fbus-6110.c:2569 fbus-6110.c:2603 fbus-6110.c:3963 fbus-6110.c:4404 gnokii.c:825 gnokii.c:859 +msgid "Unknown" +msgstr "Onbekend" + +#: gnokii.c:1497 +msgid "Unknown\n" +msgstr "" + +#: gnokii.c:938 gnokii.c:1135 gnokii.c:1860 gnokii.c:2023 +msgid "Unknown memory type %s!\n" +msgstr "Onbekend geheugentype %2!\n" + +#: fbus-6110.c:3283 +msgid "Unknown message of type 0x0d.\n" +msgstr "" + +#: fbus-6110.c:3440 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "" + +#: fbus-6110.c:4110 +msgid "Unknown message of type 0x40.\n" +msgstr "" + +#: fbus-6110.c:2633 +msgid "Unknown message!\n" +msgstr "" + +#: gnokii.c:641 +msgid "Unknown option: %d\n" +msgstr "" + +#: fbus-6110.c:3707 +msgid "Unknown type\n" +msgstr "" + +#: fbus-6110.c:3167 gnokii.c:1273 +msgid "Unknown!\n" +msgstr "" + +#: rlp-common.c:448 +msgid "Unknown!!! " +msgstr "" + +#: fbus-3810.c:1441 +msgid "Unknown: " +msgstr "Onbekend: " + +#: gnokii.c:2097 +msgid "Unknown: %s\n" +msgstr "" + +#: gnokii.c:2098 +msgid "Unread SMS: %s\n" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:372 +msgid "Uplink DTX" +msgstr "" + +#: gnokii.c:467 +msgid "Use '%s --help' for usage informations.\n" +msgstr "" + +#: xgnokii/xgnokii.c:1559 +msgid "User" +msgstr "" + +#: xgnokii/xgnokii.c:2005 +msgid "VIP" +msgstr "" + +#: virtmodem.c:87 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: virtmodem.c:77 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: virtmodem.c:82 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1219 +msgid "Validity" +msgstr "" + +#: xgnokii/xgnokii.c:1075 +msgid "Validity Period:" +msgstr "" + +#: xgnokii/xgnokii.c:1793 +msgid "Viewer:" +msgstr "" + +#: gnokii.c:2099 +msgid "Voice call: %s\n" +msgstr "" + +#: xgnokii/xgnokii.c:1955 xgnokii/xgnokii_cfg.c:73 xgnokii/xgnokii_cfg.c:88 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii.c:1950 xgnokii/xgnokii_cfg.c:67 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "" + +#: gnokii.c:2184 +msgid "What kind of reset do you want??\n" +msgstr "" + +#: gnokii.c:1976 +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: gnokii.c:1974 +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" + +#: fbus-3810.c:1839 fbus-3810.c:1960 fbus-3810.c:1974 fbus-3810.c:1988 fbus-3810.c:2002 fbus-3810.c:2139 fbus-3810.c:2198 fbus-3810.c:2257 fbus-3810.c:2298 +msgid "Write failed!" +msgstr "Opslaan mislukt!" + +#: gnokii.c:651 +msgid "Wrong number of arguments\n" +msgstr "" + +#: xgnokii/xgnokii_common.c:89 +msgid "Yes" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1404 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Want you save these changes into phone?\n" +msgstr "" + +#: fbus-6110.c:4164 +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "" + +#: fbus-6110.c:4570 +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "" + +#: fbus-6110.c:3235 +msgid "automatic" +msgstr "" + +#: gnokii.c:1747 +msgid "battery" +msgstr "" + +#: fbus-6110.c:2983 +msgid "battery\n" +msgstr "" + +#: fbus-6110.c:2949 +msgid "call in progress\n" +msgstr "Oproep gaande\n" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "down" +msgstr "" + +#: gnokii.c:2064 xgnokii/xgnokii.c:1962 xkeyb.c:112 xlogos.c:94 +msgid "error opening %s, using default config\n" +msgstr "" + +#: gnokiid.c:51 +msgid "gnokiid Version %s" +msgstr "" + +#: virtmodem.c:187 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "" + +#: fbus-6110.c:3226 +msgid "home network selected" +msgstr "" + +#: xgnokii/xgnokii.c:1325 +msgid "infrared" +msgstr "" + +#: fbus-6110.c:3235 +msgid "manual" +msgstr "" + +#: fbus-6110.c:3229 +msgid "not registered in the network" +msgstr "" + +#: fbus-6110.c:3162 gnokii.c:1268 +msgid "nothing to enter.\n" +msgstr "" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "off" +msgstr "uit" + +#: fbus-6110.c:3372 gnokii.c:2096 gnokii.c:2097 gnokii.c:2098 gnokii.c:2099 gnokii.c:2100 gnokii.c:2101 gnokii.c:2102 gnokii.c:2103 +msgid "on" +msgstr "on-line" + +#: xgnokii/xgnokii_contacts.c:737 +msgid "phone" +msgstr "" + +#: fbus-6110.c:2961 +msgid "powered off\n" +msgstr "off-line\n" + +#: xgnokii/xgnokii_sms.c:71 +msgid "read" +msgstr "" + +#: fbus-6110.c:2940 +msgid "registered within the network\n" +msgstr "geregistreerd op het netwerk\n" + +#: xgnokii/xgnokii_sms.c:69 +msgid "report" +msgstr "" + +#: fbus-6110.c:3228 +msgid "requesting network" +msgstr "" + +#: fbus-3810.c:1052 +msgid "restarting.\n" +msgstr "Herstart.\n" + +#: fbus-6110.c:3227 +msgid "roaming network" +msgstr "" + +#: xgnokii/xgnokii_sms.c:119 +msgid "sent" +msgstr "" + +#: xgnokii/xgnokii.c:1329 +msgid "serial" +msgstr "" + +#: fbus-6110.c:3230 +msgid "unknown" +msgstr "" + +#: fbus-6110.c:2967 fbus-6110.c:2989 +msgid "unknown\n" +msgstr "onbekend\n" + +#: xgnokii/xgnokii_sms.c:73 +msgid "unread" +msgstr "" + +#: xgnokii/xgnokii_sms.c:121 +msgid "unsent" +msgstr "" + +#: fbus-6110.c:2134 fbus-6110.c:2135 fbus-6110.c:2136 fbus-6110.c:2137 +msgid "up" +msgstr "" + +#: fbus-6110.c:3142 gnokii.c:1248 +msgid "waiting for PIN.\n" +msgstr "" + +#: fbus-6110.c:3147 gnokii.c:1253 +msgid "waiting for PIN2.\n" +msgstr "" + +#: fbus-6110.c:3152 gnokii.c:1258 +msgid "waiting for PUK.\n" +msgstr "" + +#: fbus-6110.c:3157 gnokii.c:1263 +msgid "waiting for PUK2.\n" +msgstr "" + +#: fbus-6110.c:3137 gnokii.c:1243 +msgid "waiting for Security Code.\n" +msgstr "" + +#: fbus-6110.c:2955 +msgid "waiting for security code\n" +msgstr "" + +#: xgnokii/xgnokii.c:824 +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Jan\355k ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" +# msgid "Number field emtpy." +# msgstr "Nummer veld leeg." +# +# msgid "locked" +# msgstr "uit" +# +# msgid "unlocked" +# msgstr "aan" +# +# msgid "GNOKII Version %s" +# msgstr "GNOKII Versie %s" +# +# msgid "Enter your PIN: " +# msgstr "Geef uw PIN-Code:" +# +# msgid " %d. SMS Center number is %s\n" +# msgstr " %d. Nummer SMS dienst is %s\n" +# +# msgid "Date/time: %d/%d/%d %d:%02d:%02d Sender: %s Msg Center: %s\n" +# msgstr "Datum/tijd %d/%d/%d %d:%02d:%02d Afzender: %s SMS-Dienst: %s\n" +# +# msgid "Error: invalid PIN\n" +# msgstr "Fout: Ongedige PIN-Code\n" +# +# msgid " Text: " +# msgstr " Tekst: " +# +# msgid " usage: gnokii {--help|--monitor|--version}" +# msgstr " gebruik: gnokii {--help|--monitor|--version}" +# +# msgid "waiting for pin\n" +# msgstr "bezig met wachten op PIN" +# +# msgid "" +# " Code Error\n" +# " You're not my big owner :-)\n" +# msgstr " Code fout!\n" +# +# msgid " Code Accepted\n" +# msgstr " Code Ok\n" +# +# msgid "Message: Keyboard lock\n" +# msgstr "Bericht: Toetsenbord uit\n" +# +# msgid " Keyboard is %s\n" +# msgstr " Toetsen zijn %s\n" +# +# msgid " Network name: %s\n" +# msgstr " Netwerk Naam: %s\n" +# +# msgid "Status: RF %02x, Batt %02x, Connection Status %02x.\n" +# msgstr "Status: Signaal %02x, Batt %02x, Verbindingsstatus %02x.\n" +# +# msgid "Empty location: %s %d!\n" +# msgstr "Geen SMS bericht op Locatie: %s %d!\n" +# +# msgid "Message: Memory status error, probably not authorized by PIN\n" +# msgstr "Bericht: Geheugenstatus fout, waarschijnlijk niet geauthoriserd door PIN\n" +# +# msgid "SMS Send attempt failed, trying again (%d)\n" +# msgstr "SMS verzenden mislukt, automatische herhaling (%d)\n" +# +# msgid "Incomming call - status %02x %02x %02x, Number %s.\n" +# msgstr "Inkomende oproep - Status %02x %02x %02x, Nummer %s.\n" +# +# This was the dutch version +# +# ARE THESE NECESSARY? If so, somebody should do 'em some day :) +# +# goran (@8hz.com) +# +# +# msgid "GSM/fbus init failed! (Unknown model ?). Quitting. \n" +# msgstr "Initialisierung des GSM/fbus fehlgeschlagen! (Unbekanntes Modell?). Beenden. \n" +# +# msgid "SMS %s %d Unknown bytes: %02x %02x %02x %02x %02x %02x Length: %d\n" +# msgstr "SMS %s %d unbekannte Bytes: %02x %02x %02x %02x %02x %02x Länge: %d\n" +# +# msgid "SMS Send OK. Result code 0x%02x\n" +# msgstr "SMS-Versand erfolgreich. Ergebnis-Code 0x%02x\n" +# +# msgid "0x65 0x15 means SMS sending not enabled by network (probably...)\n" +# msgstr "0x65 0x15: Verschicken von SMS-Nachrichten nicht vom Provider freigeschaltet (wahrscheinlich...)\n" +# +# msgid "Write Succeeded: memory type:%s, loc:%d, name: %s, number: %s\n" +# msgstr "Speichern erfolgreich: Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n" +# +# msgid "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. \n" +# msgstr "GNOKII Version 0.3.1 Copyright (C) Hugh Blemings 1999. \n" +# +# msgid "SMS Send failed, gnokii error code was %d, network returned 0x%02x 0x%02x\n" +# msgstr "Senden der SMS-Nachricht fehlgeschlagen, gnokii Fehler-Nummer war %d, Netz antwortete mit 0x%02x 0x%02x\n" +# +# msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +# msgstr "Hmmm... GSM_LinkOK nie erhalten. Beenden. \n" +# +# msgid "Interrupted\n" +# msgstr "Unterbrochen\n" +# +# msgid "Monitor mode...\n" +# msgstr "Monitor Modus...\n" +# +# msgid "Write FAILED(%d): memory type:%s, loc:%d, name: %s, number: %s\n" +# msgstr "Speichern erfolglos(%d): Speichertyp:%s, Zelle:%d, Name: %s, Nummer %s\n" +# +# msgid " Built %s %s for %s on %s \n" +# msgstr " Kompiliert: %s %s für Modell %s an Port %s \n" +# +# msgid "%s|%d|Bad location or other error!\n" +# msgstr "%s|%d|Falsche Zelle oder anderer Fehler!\n" +# diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..78dcadc --- /dev/null +++ b/po/pl.po @@ -0,0 +1,3310 @@ +# This is the German locale definition for Gnokii. +# Copyright (C) 1999, 2000 Free Software Foundation, Inc. +# Daniel Egger , 1999, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 2000-05-08 21:27+0200\n" +"PO-Revision-Date: 2000-05-08 18:25:30+0100\n" +"Last-Translator: Jacek Fiok \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" +"Xgettext-Options: -a -k_ -s -v -d gnokii\n" +"Files: fbus-3810.h fbus-6110.h gsm-api.h gsm-common.h misc.h fbus-3810.c " +"fbus-6110.c gnokii.c gsm-api.c\n" + +#: common/fbus-3810.c:525 common/fbus-6110.c:2037 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "Wysy³am SMS do %s przez centrum wiadomo¶ci %s\n" + +#: common/fbus-3810.c:629 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "Próba wys³ania wiadomo¶ci SMS zakoñczona niepowodzeniem, nastêpna próba (%d z %d)\n" + +#: common/fbus-3810.c:1161 +msgid "Couldn't open FB38 device: " +msgstr "Nie mog³em otworzyæ urz±dzenia FB38: " + +#: common/fbus-3810.c:1253 +msgid "restarting.\n" +msgstr "ponowne uruchamianie.\n" + +#: common/fbus-3810.c:1309 +#, c-format +msgid "MT Fail %02x" +msgstr "Niepowodzenie MT %02x" + +#: common/fbus-3810.c:1316 common/mbus-6160.c:689 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "Niepowodzenie CS %02x != %02x" + +#: common/fbus-3810.c:1430 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 Odpowied¼ na rejestracjê 0x%02x\n" + +#: common/fbus-3810.c:1446 +msgid "0x16 Registration Response 0x%02x\n" +msgstr "0x16 Odpowied¼ na rejestracjê 0x%02x\n" + +#: common/fbus-3810.c:1447 +msgid "SIM access: %s.\n" +msgstr "Dostêp do SIM: %s\n" + +#: common/fbus-3810.c:1523 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS zapisany pod adresem 0x%02x\n" + +#: common/fbus-3810.c:1533 +msgid "SMS Store failed: 0x%02x\n" +msgstr "Zapisywanie SMSa nie powiod³o siê: 0x%02x\n" + +#: common/fbus-3810.c:1654 +msgid "PIN [possibly] entered.\n" +msgstr "PIN [prawdopodobnie] wprowadzony.\n" + +#: common/fbus-3810.c:1663 +msgid "Phone powering off..." +msgstr "Wy³±czanie zasilania telefonu..." + +#: common/fbus-3810.c:1692 +msgid "Standard Ack write failed!" +msgstr "Wys³anie standardowego potwierdzenia nie powiod³o siê!" + +#: common/fbus-3810.c:1718 +msgid "Unknown: " +msgstr "Nieznany: " + +#: common/fbus-3810.c:1720 +#, c-format +msgid "Msg Type: %02x " +msgstr "Typ wiadomo¶ci: %02x" + +#: common/fbus-3810.c:1721 +#, c-format +msgid "Msg Len: %02x " +msgstr "D³ugo¶æ wiadomo¶ci: %02x" + +#: common/fbus-3810.c:1722 +#, c-format +msgid "Sequence Number: %02x " +msgstr "Numer sekwencyjny: %02x" + +#: common/fbus-3810.c:1723 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Suma kontrolna: %02x \n" +" " + +#: common/fbus-3810.c:1815 common/fbus-3810.c:1936 +msgid "Set Mem Loc Write failed!" +msgstr "Operacja zapisu do komórki pamiêci nieudana!" + +#: common/fbus-3810.c:1860 +msgid "TX_SendRLPFrame - write:" +msgstr "TX_SendRLPFrame - zapisywanie:" + +#: common/fbus-3810.c:1875 +msgid "0x4a Write failed!" +msgstr "0x4a Operacja zapisu nieudana!" + +#: common/fbus-3810.c:1890 +msgid "Explore Write failed!" +msgstr "Operacja zapisu nieudana!" + +#: common/fbus-3810.c:1900 +msgid "0x3f Write failed!" +msgstr "0x3f Operacja zapisu nieudana!" + +#: common/fbus-3810.c:1960 +msgid "Request Mem Loc Write failed!" +msgstr "¯±danie zapisu do komórki pamiêci nie powiod³o siê!" + +#: common/fbus-3810.c:1973 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "¯±danie zapisu numerów IMEI/wersji/modelu nie powiod³o siê!" + +#: common/fbus-3810.c:2016 +msgid "Send SMS header failed!" +msgstr "Wys³anie nag³ówka wiadomo¶ci SMS nie powiod³o siê!" + +#: common/fbus-3810.c:2075 +msgid "Store SMS header failed!" +msgstr "Zapisanie nag³ówka wiadomo¶ci SMS nie powiod³o siê!" + +#: common/fbus-3810.c:2100 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "Wys³anie bloku %d wiadomo¶ci SMS nie powiod³o siê!" + +#: common/fbus-3810.c:2123 +msgid "Request SMS Mem Loc Write failed!" +msgstr "¯±danie zapisu wiadomo¶ci SMS do pamiêci nie powiod³o siê!" + +#: common/fbus-3810.c:2146 +msgid "Delete SMS Mem Loc write failed!" +msgstr "Usuniêcie wiadomo¶ci SMS z pamiêci nie powiod³o siê!" + +#: common/fbus-3810.c:2165 +msgid "0x15 Write failed!" +msgstr "0x15 Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2182 common/mbus-6160.c:759 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - wiadomo¶æ za d³uga!\n" + +#: common/fbus-3810.c:2208 common/mbus-6160.c:788 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - zapisywanie:" + +#: common/fbus-3810.c:2221 common/fbus-3810.c:2354 common/fbus-3810.c:2368 +#: common/fbus-3810.c:2382 common/fbus-3810.c:2396 common/fbus-3810.c:2530 +#: common/fbus-3810.c:2591 common/fbus-3810.c:2650 common/fbus-3810.c:2688 +msgid "Write failed!" +msgstr "Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2235 +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Po³±czenie przychodz±ce - Typ: %s. %02x, Numer %s.\n" + +#: common/fbus-3810.c:2262 +msgid "0x27 Write failed!" +msgstr "0x27 Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2310 +msgid "0x4b Write failed!" +msgstr "0x4b Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2329 +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Status: %s. Baterie %02x RF %02x.\n" + +#: common/fbus-3810.c:2340 +msgid "0x10 Write failed!" +msgstr "0x10 Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2344 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x10).\n" + +#: common/fbus-3810.c:2358 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Po³±czenie zakoñczone przez przeciwn± stronê (lub z siec).\n" + +#: common/fbus-3810.c:2372 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Po³±czenie zakoñczone z telefonu (komunikat 0x12).\n" + +#: common/fbus-3810.c:2386 +msgid "Incoming call answered from phone.\n" +msgstr "Po³±czenie przychodz±ce odebrane przez telefon.\n" + +#: common/fbus-3810.c:2400 +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "%s po³±czenie ustanowione - status %02x %02x.\n" + +#: common/fbus-3810.c:2417 +msgid "0x2c Write failed!" +msgstr "0x2c Operacja zapisu nieudana!" + +#: common/fbus-3810.c:2504 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Strefa czas.:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2571 +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"Przychodz±ca wiadomo¶æ SMS %d-%d-%d %d:%02d:%02d tz:0x%02x Nadawca: %s(Typ %02x) " +"Centrum wiadomo¶ci: %s\n" + +#: common/fbus-3810.c:2573 +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" +" D³ugo¶æ wiadomo¶ci %d, pamiêæ wiadomo¶ci %d numer wiadomo¶ci %d, " +"PID: %02x DCS: %02x Nieznane: %02x\n" + +#: common/fbus-3810.c:2666 +msgid "Mobile phone identification received:\n" +msgstr "Otrzymano identyfikacjê telefonu:\n" + +#: common/fbus-3810.c:2667 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2669 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-3810.c:2671 +#, c-format +msgid " Revision: %s\n" +msgstr " Wersja: %s\n" + +#: common/fbus-3810.c:2739 +msgid "SMS Message Center Data:\n" +msgstr "Dane centrum wiadomo¶ci SMS:\n" + +#: common/fbus-3810.c:2740 +msgid "Selected memory: 0x%02x\n" +msgstr "Wybrana pamiêæ: 0x%02x\n" + +#: common/fbus-3810.c:2741 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Wiadomo¶ci w pamiêci aparatu: 0x%02x Nieprzeczytanych: 0x%02x\n" + +#: common/fbus-3810.c:2743 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Wiadomo¶ci na karcie SIM: 0x%02x Nieprzeczytanych: 0x%02x\n" + +#: common/fbus-3810.c:2745 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "Odpowied¼ przez w³asne centrum wiadomo¶ci: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2747 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Raporty dorêczenia: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2749 +msgid "Messages sent as: 0x%02x\n" +msgstr "Wiadomo¶ci wysy³ane jako: 0x%02x\n" + +#: common/fbus-3810.c:2750 +msgid "Message validity: 0x%02x\n" +msgstr "Okres wa¿no¶ci wiadomo¶ci: 0x%02x\n" + +#: common/fbus-3810.c:2751 +msgid "Unknown: 0x%02x\n" +msgstr "Nieznane: 0x%02x\n" + +#: common/fbus-3810.c:2754 +msgid "UnknownNumber field empty." +msgstr "Nieznany: puste pole numeru." + +#: common/fbus-3810.c:2756 +msgid "UnknownNumber: " +msgstr "Nieznany numer: " + +#: common/fbus-3810.c:2763 +msgid "Number field empty." +msgstr "Puste pole numeru." + +#: common/fbus-3810.c:2766 +msgid "Number: " +msgstr "Numer: " + +#: common/fbus-6110-ringtones.c:242 +msgid "File can not be opened!\n" +msgstr "Nie mo¿na otworzyæ pliku!\n" + +#: common/fbus-6110.c:770 +msgid "Timeout in IR-mode\n" +msgstr "Przekroczenie czasu oczekiwania w trybie IR\n" + +#: common/fbus-6110.c:802 +msgid "Couldn't open FB61 infrared device" +msgstr "Nie mog³em otworzyæ urz±dzenia FB61" + +#: common/fbus-6110.c:870 +msgid "Starting IR mode...!\n" +msgstr "Uruchamiam tryb IR...!\n" + +#: common/fbus-6110.c:2325 +msgid "Serial flags dump:\n" +msgstr "Stan flag portu szeregowego:\n" + +#: common/fbus-6110.c:2326 common/mbus-640.c:893 +#, c-format +msgid "DTR is %s.\n" +msgstr "DTR jest %s.\n" + +#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328 +#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894 +msgid "up" +msgstr "w³±czony" + +#: common/fbus-6110.c:2326 common/fbus-6110.c:2327 common/fbus-6110.c:2328 +#: common/fbus-6110.c:2329 common/mbus-640.c:893 common/mbus-640.c:894 +msgid "down" +msgstr "wy³±czony" + +#: common/fbus-6110.c:2327 common/mbus-640.c:894 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS jest %s.\n" + +#: common/fbus-6110.c:2328 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR jest %s.\n" + +#: common/fbus-6110.c:2329 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS jest %s.\n" + +#: common/fbus-6110.c:2364 +msgid "Setting FBUS communication...\n" +msgstr "Ustanawiam komunikacjê FBUS...\n" + +#: common/fbus-6110.c:2395 +msgid "Couldn't open FB61 device" +msgstr "Nie mog³em otworzyæ urz±dzenia FB61" + +#: common/fbus-6110.c:2521 +msgid "Message: Call message, type 0x03:" +msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, typ 0x03:" + +#: common/fbus-6110.c:2522 common/fbus-6110.c:2537 common/fbus-6110.c:2554 +#: common/fbus-6110.c:2585 common/fbus-6110.c:2596 common/fbus-6110.c:2620 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Kolejny numer po³±czenia: %d\n" + +#: common/fbus-6110.c:2523 common/fbus-6110.c:2621 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Dok³adne znaczenie jeszcze nie jest znane, przykro mi :-(\n" + +#: common/fbus-6110.c:2536 +msgid "Message: Remote end hang up.\n" +msgstr "Wiadomo¶æ: Zdalna strona roz³±czy³a siê.\n" + +#: common/fbus-6110.c:2549 +msgid "Message: Incoming call alert:\n" +msgstr "Wiadomo¶æ: Ostrze¿enie o po³±czeniu:\n" + +#: common/fbus-6110.c:2555 common/fbus-6110.c:2835 +msgid " Number: " +msgstr " Numer: " + +#: common/fbus-6110.c:2563 common/fbus-6110.c:2819 +msgid " Name: " +msgstr " Nazwa: " + +#: common/fbus-6110.c:2584 +msgid "Message: Call answered.\n" +msgstr "Wiadomo¶æ: Po³±czenie odebrane.\n" + +#: common/fbus-6110.c:2595 +msgid "Message: Call ended by your phone.\n" +msgstr "Wiadomo¶æ: Po³±czenie zakoñczone przez Twój telefon.\n" + +#: common/fbus-6110.c:2619 +msgid "Message: Call message, type 0x0a:" +msgstr "Wiadomo¶æ: Wiadomo¶æ o po³±czeniu, Typ 0x0a:" + +#: common/fbus-6110.c:2631 +msgid "Message: Unknown message of type 0x01\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x01\n" + +#: common/fbus-6110.c:2649 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Wiadomo¶æ: Wiadomo¶æ SMS wys³ana prawid³owo.\n" + +#: common/fbus-6110.c:2660 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Wiadomo¶æ: Wys³anie wiadomo¶ci SMS nie powiod³o siê.\n" + +#: common/fbus-6110.c:2669 +msgid "Message: SMS Message Received\n" +msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n" + +#: common/fbus-6110.c:2670 common/fbus-6110.c:3997 +#, c-format +msgid " SMS center number: %s\n" +msgstr " Numer centrum wiadomo¶ci: %s\n" + +#: common/fbus-6110.c:2674 common/fbus-6110.c:3998 +#, c-format +msgid " Remote number: %s\n" +msgstr " Zdalny numer: %s\n" + +#: common/fbus-6110.c:2675 +#, c-format +msgid " Date: %s\n" +msgstr " Data: %s\n" + +#: common/fbus-6110.c:2676 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:2691 +msgid "Message: SMS Center correctly set.\n" +msgstr "Wiadomo¶æ: Poprawnie ustawione centrum wiadomo¶ci.\n" + +#: common/fbus-6110.c:2707 +msgid "Message: SMS Center received:\n" +msgstr "Wiadomo¶æ: Otrzymano centrum wiadomo¶ci:\n" + +#: common/fbus-6110.c:2708 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Nazwa centrum wiadomo¶ci to %s\n" + +#: common/fbus-6110.c:2709 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " Numer centrum wiadomo¶ci to %s\n" + +#: common/fbus-6110.c:2711 +msgid " SMS Center message format is " +msgstr " Format wiadomo¶ci to " + +#: common/fbus-6110.c:2716 gnokii/gnokii.c:1049 xgnokii/xgnokii.c:604 +#: xgnokii/xgnokii.c:633 xgnokii/xgnokii.c:1335 +msgid "Text" +msgstr "Tekst" + +#: common/fbus-6110.c:2720 gnokii/gnokii.c:1053 xgnokii/xgnokii.c:608 +#: xgnokii/xgnokii.c:1349 +msgid "Paging" +msgstr "Pager" + +#: common/fbus-6110.c:2724 gnokii/gnokii.c:1057 xgnokii/xgnokii.c:612 +#: xgnokii/xgnokii.c:1342 +msgid "Fax" +msgstr "Fax" + +#: common/fbus-6110.c:2728 gnokii/gnokii.c:1062 +msgid "Email" +msgstr "Email" + +#: common/fbus-6110.c:2732 common/fbus-6110.c:2766 common/fbus-6110.c:4228 +#: common/fbus-6110.c:4687 gnokii/gnokii.c:1074 gnokii/gnokii.c:1108 +msgid "Unknown" +msgstr "Nieznany" + +#: common/fbus-6110.c:2737 +msgid " SMS Center message validity is " +msgstr " Okres wa¿no¶ci wiadomo¶ci to " + +#: common/fbus-6110.c:2742 gnokii/gnokii.c:1084 +msgid "1 hour" +msgstr "1 godzina" + +#: common/fbus-6110.c:2746 gnokii/gnokii.c:1088 +msgid "6 hours" +msgstr "6 godzin" + +#: common/fbus-6110.c:2750 gnokii/gnokii.c:1092 +msgid "24 hours" +msgstr "24 godziny" + +#: common/fbus-6110.c:2754 gnokii/gnokii.c:1096 +msgid "72 hours" +msgstr "72 godziny" + +#: common/fbus-6110.c:2758 gnokii/gnokii.c:1100 xgnokii/xgnokii.c:656 +#: xgnokii/xgnokii.c:1414 +msgid "1 week" +msgstr "1 tydzieñ" + +#: common/fbus-6110.c:2762 gnokii/gnokii.c:1104 +msgid "Maximum time" +msgstr "Czas maksymalny" + +#: common/fbus-6110.c:2784 +msgid "Message: SMS Center error received:\n" +msgstr "Wiadomo¶æ: Otrzymano b³±d od centrum wiadomo¶ci:\n" + +#: common/fbus-6110.c:2785 +msgid " The request for SMS Center failed.\n" +msgstr " ¯±danie do centrum wiadomo¶ci nie powiod³o siê.\n" + +#: common/fbus-6110.c:2796 +msgid "Unknown message!\n" +msgstr "Nieznana wiadomo¶æ!\n" + +#: common/fbus-6110.c:2818 +msgid "Message: Phonebook entry received:\n" +msgstr "Wiadomo¶æ: Otrzymano wpis ksi±¿ki telefonicznej:\n" + +#: common/fbus-6110.c:2855 +msgid " Date: " +msgstr " Data: " + +#: common/fbus-6110.c:2857 +msgid " Time: " +msgstr " Czas: " + +#: common/fbus-6110.c:2870 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu wpisu ksi±¿ki telefonicznej:\n" + +#: common/fbus-6110.c:2878 +msgid " Invalid memory type!\n" +msgstr " Nieznany typ pamiêci!\n" + +#: common/fbus-6110.c:2888 common/fbus-6110.c:2926 +msgid " Unknown error!\n" +msgstr " Nieznany b³±d!\n" + +#: common/fbus-6110.c:2899 +msgid "Message: Phonebook written correctly.\n" +msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna zapisana prawid³owo.\n" + +#: common/fbus-6110.c:2916 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "Wiadomo¶æ: Ksi±¿ka telefoniczna nie zapisana - nazwa za d³uga.\n" + +#: common/fbus-6110.c:2937 +msgid "Message: Memory status received:\n" +msgstr "Wiadomo¶æ: Otrzymano stan pamiêci:\n" + +#: common/fbus-6110.c:2939 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Typ pamiêci: %s\n" + +#: common/fbus-6110.c:2940 +#, c-format +msgid " Used: %d\n" +msgstr " U¿ywane: %d\n" + +#: common/fbus-6110.c:2941 +#, c-format +msgid " Free: %d\n" +msgstr " Wolne: %d\n" + +#: common/fbus-6110.c:2956 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "Wiadomo¶æ: B³±d stanu pamiêci, telefon jest prawdopodobnie wy³±czony.\n" + +#: common/fbus-6110.c:2963 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" +"Wiadomo¶æ: B³±d stanu pamiêci, typ pamiêci nie obs³ugiwany przez ten model telefonu.\n" + +#: common/fbus-6110.c:2970 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "Wiadomo¶æ: B³±d stanu pamiêci, czekam na kod zabezpieczaj±cy.\n" + +#: common/fbus-6110.c:2977 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" +"Wiadomo¶æ: Nieznany b³±d stanu pamiêci, podtyp (MessageBuffer[4] = %02x\n" + +#: common/fbus-6110.c:2994 +msgid "Message: Caller group logo etc.\n" +msgstr "Wiadomo¶æ: Logo grupy dzwoni±cych etc.\n" + +#: common/fbus-6110.c:2995 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Nazwa grupy dzwoni±cych: %s\n" + +#: common/fbus-6110.c:3015 +msgid "Message: Caller group data received but not requested!\n" +msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych otrzymane bez uprzedniego ¿±dania!\n" + +#: common/fbus-6110.c:3025 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "Wiadomo¶æ: B³±d przy wyci±ganiu danych o grupie dzwoni±cych.\n" + +#: common/fbus-6110.c:3033 +msgid "Message: Caller group data set correctly.\n" +msgstr "Wiadomo¶æ: Dane grupy dzwoni±cych ustawione prawid³owo.\n" + +#: common/fbus-6110.c:3041 +msgid "Message: Error attempting to set caller group data\n" +msgstr "Wiadomo¶æ: B³±d przy ustawianiu danych o grupie dzwoni±cych.\n" + +#: common/fbus-6110.c:3052 +msgid "Message: Speed dial entry received:\n" +msgstr "Wiadomo¶æ: Wpis szybkiego wybierania otrzymany:\n" + +#: common/fbus-6110.c:3053 +#, c-format +msgid " Location: %d\n" +msgstr " Lokacja: %d\n" + +#: common/fbus-6110.c:3054 +#, c-format +msgid " MemoryType: %s\n" +msgstr " Typ pamiêci: %s\n" + +#: common/fbus-6110.c:3055 +#, c-format +msgid " Number: %d\n" +msgstr " Numer: %d\n" + +#: common/fbus-6110.c:3065 +msgid "Message: Speed dial entry error\n" +msgstr "Wiadomo¶æ: B³±d wpisu szybkiego wybierania\n" + +#: common/fbus-6110.c:3075 +msgid "Message: Speed dial entry set.\n" +msgstr "Wiadomo¶æ: Wpis szybkiego wybierania ustawiony.\n" + +#: common/fbus-6110.c:3085 +msgid "Message: Speed dial entry setting error.\n" +msgstr "Wiadomo¶æ: B³±d przy ustawianiu wpisu szybkiego wybierania.\n" + +#: common/fbus-6110.c:3095 +msgid "Message: Unknown message of type 0x03\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x03\n" + +#: common/fbus-6110.c:3111 +msgid "Message: Phone status received:\n" +msgstr "Wiadomo¶æ: Otrzymano status telefonu:\n" + +#: common/fbus-6110.c:3112 +msgid " Mode: " +msgstr " Tryb: " + +#: common/fbus-6110.c:3118 +msgid "registered within the network\n" +msgstr "zarejestrowany w sieci\n" + +#: common/fbus-6110.c:3127 +msgid "call in progress\n" +msgstr "po³±czenie w trakcie\n" + +#: common/fbus-6110.c:3133 +msgid "waiting for security code\n" +msgstr "oczekuje na kod zabezpieczaj±cy\n" + +#: common/fbus-6110.c:3139 +msgid "powered off\n" +msgstr "wy³±czony\n" + +#: common/fbus-6110.c:3145 common/fbus-6110.c:3167 +msgid "unknown\n" +msgstr "nieznany\n" + +#: common/fbus-6110.c:3149 +msgid " Power source: " +msgstr " ¬ród³o zasilania: " + +#: common/fbus-6110.c:3155 +msgid "AC/DC\n" +msgstr "sieæ zasilaj±ca\n" + +#: common/fbus-6110.c:3161 +msgid "battery\n" +msgstr "bateria\n" + +#: common/fbus-6110.c:3171 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Poziom baterii: %d\n" + +#: common/fbus-6110.c:3172 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Si³a sygna³u: %d\n" + +#: common/fbus-6110.c:3184 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x04\n" + +#: common/fbus-6110.c:3257 +msgid "Message: Startup Logo received.\n" +msgstr "Wiadomo¶æ: Otrzymano logo powitalne.\n" + +#: common/fbus-6110.c:3274 +#, c-format +msgid "Startup Text: %s\n" +msgstr "Tekst powitania: %s\n" + +#: common/fbus-6110.c:3286 +msgid "Message: Startup logo received but not requested!\n" +msgstr "Wiadomo¶æ: Otrzymano logo powitalne bez wcze¶niejszego ¿±dania!\n" + +#: common/fbus-6110.c:3295 +msgid "Message: Startup logo correctly set.\n" +msgstr "Wiadomo¶æ: Logo powitania ustawione prawid³owo.\n" + +#: common/fbus-6110.c:3329 +msgid "Message: Operator logo correctly set.\n" +msgstr "Wiadomo¶æ: Logo operatora ustawione prawid³owo.\n" + +#: common/fbus-6110.c:3338 +msgid "Message: Error setting operator logo!\n" +msgstr "Wiadomo¶æ: B³±d przy ustawianiu logo operatora!\n" + +#: common/fbus-6110.c:3348 +msgid "Message: Operator Logo received.\n" +msgstr "Wiadomo¶æ: Otrzymano logo operatora.\n" + +#: common/fbus-6110.c:3365 +msgid "Message: Operator logo received but not requested!\n" +msgstr "Wiadomo¶æ: Otrzymano logo operatora bez wcze¶niejszego ¿±dania!\n" + +#: common/fbus-6110.c:3374 +msgid "Message: Error getting operator logo!\n" +msgstr "Wiadomo¶æ: B³±d przy otrzymywaniu logo operatora!\n" + +#: common/fbus-6110.c:3392 +msgid "Message: Security Code status received: " +msgstr "Wiadomo¶æ: Otrzymany stan kodu zabezpieczj±cego: " + +#: common/fbus-6110.c:3398 gnokii/gnokii.c:1507 +msgid "waiting for Security Code.\n" +msgstr "czeka na kod zabezpieczaj±cy.\n" + +#: common/fbus-6110.c:3403 gnokii/gnokii.c:1512 +msgid "waiting for PIN.\n" +msgstr "czeka na PIN.\n" + +#: common/fbus-6110.c:3408 gnokii/gnokii.c:1517 +msgid "waiting for PIN2.\n" +msgstr "czeka na PIN2.\n" + +#: common/fbus-6110.c:3413 gnokii/gnokii.c:1522 +msgid "waiting for PUK.\n" +msgstr "czeka na PUK.\n" + +#: common/fbus-6110.c:3418 gnokii/gnokii.c:1527 +msgid "waiting for PUK2.\n" +msgstr "czeka na PUK2.\n" + +#: common/fbus-6110.c:3423 gnokii/gnokii.c:1532 +msgid "nothing to enter.\n" +msgstr "nic do wprowadzenia.\n" + +#: common/fbus-6110.c:3428 gnokii/gnokii.c:1537 +msgid "Unknown!\n" +msgstr "Nieznany!\n" + +#: common/fbus-6110.c:3440 +msgid "Message: Security code accepted.\n" +msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy przyjêty.\n" + +#: common/fbus-6110.c:3450 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "Wiadomo¶æ: Kod zabezpieczaj±cy jest nieprawid³owy. Nie jeste¶ moim prawowitym w³a¶cicielem :-)\n" + +#: common/fbus-6110.c:3477 +msgid "Message: Network informations:\n" +msgstr "Wiadomo¶æ: Informacje o sieci:\n" + +#: common/fbus-6110.c:3479 +#, c-format +msgid " CellID: %s\n" +msgstr " ID komórki: %s\n" + +#: common/fbus-6110.c:3480 +#, c-format +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: common/fbus-6110.c:3481 +#, c-format +msgid " Network code: %s\n" +msgstr " Kod sieci: %s\n" + +#: common/fbus-6110.c:3482 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Nazwa sieci: %s (%s)\n" + +#: common/fbus-6110.c:3485 +msgid " Status: " +msgstr " Status: " + +#: common/fbus-6110.c:3488 +msgid "home network selected" +msgstr "wybrana sieæ domowa" + +#: common/fbus-6110.c:3489 +msgid "roaming network" +msgstr "sieæ partnerska" + +#: common/fbus-6110.c:3490 +msgid "requesting network" +msgstr "szuka sieci" + +#: common/fbus-6110.c:3491 +msgid "not registered in the network" +msgstr "nie zarejestrowany w sieci" + +#: common/fbus-6110.c:3492 xgnokii/xgnokii.c:189 xgnokii/xgnokii.c:199 +#: xgnokii/xgnokii.c:210 xgnokii/xgnokii.c:219 +msgid "unknown" +msgstr "nieznany" + +#: common/fbus-6110.c:3497 +#, c-format +msgid " Network selection: %s\n" +msgstr " Wybór sieci: %s\n" + +#: common/fbus-6110.c:3497 +msgid "manual" +msgstr "rêczny" + +#: common/fbus-6110.c:3497 +msgid "automatic" +msgstr "automatyczny" + +#: common/fbus-6110.c:3507 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x0a\n" + +#: common/fbus-6110.c:3545 +msgid "Unknown message of type 0x0d.\n" +msgstr "Nieznana wiadomo¶æ typu 0x0d.\n" + +#: common/fbus-6110.c:3564 +msgid "Message: Date and time set correctly\n" +msgstr "Wiadomo¶æ: Data i czas ustawione prawid³owo\n" + +#: common/fbus-6110.c:3574 common/fbus-6110.c:3620 +msgid "Message: Date and time set error\n" +msgstr "Wiadomo¶æ: B³±d przy ustawianiu daty i czasu\n" + +#: common/fbus-6110.c:3594 +msgid "Message: Date and time\n" +msgstr "Wiadomo¶æ: Data i czas\n" + +#: common/fbus-6110.c:3595 common/fbus-6110.c:3748 gnokii/gnokii.c:1863 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Czas: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3596 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Data: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:3610 +msgid "Message: Alarm set correctly\n" +msgstr "Wiadomo¶æ: Alarm ustawiony prawid³owo\n" + +#: common/fbus-6110.c:3632 +msgid "Message: Alarm\n" +msgstr "Wiadomo¶æ: Alarm\n" + +#: common/fbus-6110.c:3633 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Alarm: %02d:%02d\n" + +#: common/fbus-6110.c:3634 +#, c-format +msgid " Alarm is %s\n" +msgstr " Alarm jest %s\n" + +#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467 +#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470 +#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473 +msgid "on" +msgstr "w³±czony" + +#: common/fbus-6110.c:3634 gnokii/gnokii.c:2466 gnokii/gnokii.c:2467 +#: gnokii/gnokii.c:2468 gnokii/gnokii.c:2469 gnokii/gnokii.c:2470 +#: gnokii/gnokii.c:2471 gnokii/gnokii.c:2472 gnokii/gnokii.c:2473 +msgid "off" +msgstr "wy³±czony" + +#: common/fbus-6110.c:3650 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x11\n" + +#: common/fbus-6110.c:3673 +msgid "Message: Calendar note write succesfull!\n" +msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza udany!\n" + +#: common/fbus-6110.c:3683 common/fbus-6110.c:3693 +msgid "Message: Calendar note write failed!\n" +msgstr "Wiadomo¶æ: Zapis wpisu do kalendarza nieudany!\n" + +#: common/fbus-6110.c:3702 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "Nieznana wiadomo¶æ typu 0x13 i podtypu 0x65\n" + +#: common/fbus-6110.c:3742 +msgid "Message: Calendar note received.\n" +msgstr "Wiadomo¶æ: Otrzymano wpis do kalendarza.\n" + +#: common/fbus-6110.c:3744 gnokii/gnokii.c:1859 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Data: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3755 gnokii/gnokii.c:1868 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Data alarmu: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3759 gnokii/gnokii.c:1872 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Czas alarmu: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3764 +#, c-format +msgid " Type: %d\n" +msgstr " Typ: %d\n" + +#: common/fbus-6110.c:3765 gnokii/gnokii.c:1877 +#, c-format +msgid " Text: %s\n" +msgstr " Tekst: %s\n" + +#: common/fbus-6110.c:3768 gnokii/gnokii.c:1880 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefon: %s\n" + +#: common/fbus-6110.c:3778 +msgid "Message: Calendar note not available\n" +msgstr "Wiadomo¶æ: Wpis kalendarza niedostêpny\n" + +#: common/fbus-6110.c:3788 +msgid "Message: Calendar note error\n" +msgstr "Wiadomo¶æ: B³±d wpisu do kalendarza\n" + +#: common/fbus-6110.c:3810 +msgid "Message: Calendar note deleted\n" +msgstr "Wiadomo¶æ: Wpis do kalendarza usuniêty\n" + +#: common/fbus-6110.c:3821 +msgid "Message: Calendar note can't be deleted\n" +msgstr "Wiadomo¶æ: Wpis do kalendarza nie mo¿e byæ usuniêty\n" + +#: common/fbus-6110.c:3831 +msgid "Message: Calendar note deleting error\n" +msgstr "Wiadomo¶æ: B³±d przy usuwaniu wpisu kalendarza\n" + +#: common/fbus-6110.c:3847 +msgid "Message: Calendar Alarm active\n" +msgstr "Wiadomo¶æ: Alarm kalendarza aktywny\n" + +#: common/fbus-6110.c:3848 +#, c-format +msgid " Item number: %d\n" +msgstr " Numer pozycji: %d\n" + +#: common/fbus-6110.c:3856 +msgid "Message: Unknown message of type 0x13\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ typu 0x13\n" + +#: common/fbus-6110.c:3919 +msgid "Concatenated message!!!\n" +msgstr "Sklejone wiadomo¶ci!!!\n" + +#: common/fbus-6110.c:3940 +#, c-format +msgid "Number: %d\n" +msgstr "Numer: %d\n" + +#: common/fbus-6110.c:3945 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "Wiadomo¶æ: Skrzynka nadawcza\n" + +#: common/fbus-6110.c:3948 +msgid "Sent\n" +msgstr "Wys³ane\n" + +#: common/fbus-6110.c:3950 +msgid "Not sent\n" +msgstr "Niewys³ane\n" + +#: common/fbus-6110.c:3954 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "Wiadomo¶æ: Otrzymano wiadomo¶æ SMS\n" + +#: common/fbus-6110.c:3957 +msgid "Delivery Report\n" +msgstr "Raport dostarczenia\n" + +#: common/fbus-6110.c:3959 +msgid "Unknown type\n" +msgstr "Nieznany typ\n" + +#: common/fbus-6110.c:3962 +msgid "Read\n" +msgstr "Przeczytane\n" + +#: common/fbus-6110.c:3964 +msgid "Not read\n" +msgstr "Nieprzeczytane\n" + +#: common/fbus-6110.c:3966 +msgid " Date: %s " +msgstr " Data: %s " + +#: common/fbus-6110.c:3974 common/fbus-6110.c:3990 gnokii/gnokii.c:1241 +#: gnokii/gnokii.c:1254 gnokii/gnokii.c:1281 +#, c-format +msgid "%02d00" +msgstr "%02d00" + +#: common/fbus-6110.c:3981 +msgid " SMSC response date: %s " +msgstr " Data odpowiedzi SMSC: %s " + +#: common/fbus-6110.c:4074 +msgid "Delivered" +msgstr "Dostarczone" + +#: common/fbus-6110.c:4079 +msgid "SM received by the SME" +msgstr "SM otzymany przez SME" + +#: common/fbus-6110.c:4082 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" +"SM przekazana przez SC do SME, ale SC nie móg³ potwierdziæ dostarczenia" + +#: common/fbus-6110.c:4085 +msgid "SM replaced by the SC" +msgstr "SM zast±piona przez SC" + +#: common/fbus-6110.c:4093 +msgid "Failed" +msgstr "Nieudane" + +#: common/fbus-6110.c:4100 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "B³±d tymczasowy, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n" + +#: common/fbus-6110.c:4105 common/fbus-6110.c:4198 +msgid "Congestion" +msgstr "" + +#: common/fbus-6110.c:4109 common/fbus-6110.c:4202 +msgid "SME busy" +msgstr "SME zajêty" + +#: common/fbus-6110.c:4113 common/fbus-6110.c:4206 +msgid "No response from SME" +msgstr "Nie ma odpowiedzi od SME" + +#: common/fbus-6110.c:4117 common/fbus-6110.c:4210 +msgid "Service rejected" +msgstr "Us³uga odrzucona" + +#: common/fbus-6110.c:4121 common/fbus-6110.c:4157 common/fbus-6110.c:4214 +msgid "Quality of service not aviable" +msgstr "QoS niedostêpne" + +#: common/fbus-6110.c:4125 common/fbus-6110.c:4218 +msgid "Error in SME" +msgstr "B³±d w SME" + +#: common/fbus-6110.c:4129 common/fbus-6110.c:4181 common/fbus-6110.c:4222 +#: common/fbus-6110.c:4232 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "Zarezerwowane/Specyficzne dla SC: %x" + +#: common/fbus-6110.c:4136 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "B³±d, SC nie próbuje podejmowaæ kolejnych prób dostarczenia\n" + +#: common/fbus-6110.c:4141 +msgid "Remote procedure error" +msgstr "B³±d zdalnej procedury" + +#: common/fbus-6110.c:4145 +msgid "Incompatibile destination" +msgstr "Niekompatybilne przeznaczenie" + +#: common/fbus-6110.c:4149 +msgid "Connection rejected by SME" +msgstr "Po³±czenie odrzucone przez SME" + +#: common/fbus-6110.c:4153 +msgid "Not obtainable" +msgstr "Niemo¿liwe do uzyskania" + +#: common/fbus-6110.c:4161 +msgid "No internetworking available" +msgstr "Brak po³±czenia miêdzysieciowego" + +#: common/fbus-6110.c:4165 +msgid "SM Validity Period Expired" +msgstr "Okres wa¿no¶ci SM przekroczony" + +#: common/fbus-6110.c:4169 +msgid "SM deleted by originating SME" +msgstr "SM wykasowana przez ¼ród³owe SME" + +#: common/fbus-6110.c:4173 +msgid "SM Deleted by SC Administration" +msgstr "SM skasowany przez zarz±d SC" + +#: common/fbus-6110.c:4177 +msgid "SM does not exist" +msgstr "SM nie istnieje" + +#: common/fbus-6110.c:4190 +msgid "Pending" +msgstr "Oczekuj±ce" + +#: common/fbus-6110.c:4194 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "B³±d tymczasowy, SC ca³y czas próbuje przekazaæ SM\n" + +#: common/fbus-6110.c:4260 +msgid "Message: SMS reading failed.\n" +msgstr "Wiadomo¶æ: Odczytanie wiadomo¶ci SMS nieudane.\n" + +#: common/fbus-6110.c:4268 +msgid " Invalid location!\n" +msgstr " Z³a lokacja!\n" + +#: common/fbus-6110.c:4278 +msgid " Empty SMS location.\n" +msgstr " Pusta lokacja SMS.\n" + +#: common/fbus-6110.c:4291 +msgid "Message: SMS deleted successfully.\n" +msgstr "Wiadomo¶æ: skasowanie SMS udane.\n" + +#: common/fbus-6110.c:4301 +msgid "Message: SMS Status Received\n" +msgstr "Wiadomo¶æ: Otrzymano status wiadomo¶ci SMS\n" + +#: common/fbus-6110.c:4302 +#, c-format +msgid " The number of messages: %d\n" +msgstr " Ilo¶æ wiadomo¶ci: %d\n" + +#: common/fbus-6110.c:4303 +#, c-format +msgid " Unread messages: %d\n" +msgstr " Nieprzeczytane wiadomo¶ci: %d\n" + +#: common/fbus-6110.c:4315 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "Wiadomo¶æ: B³±d statusu wiadomo¶ci, prawdopodobnie brak autoryzacji przez PIN\n" + +#: common/fbus-6110.c:4346 +msgid "Message: Netmonitor correctly set.\n" +msgstr "Wiadomo¶æ: Netmonitor ustawiony poprawnie.\n" + +#: common/fbus-6110.c:4356 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "Wiadomo¶æ: Otrzymano menu %d Netmonitora:\n" + +#: common/fbus-6110.c:4372 +msgid "Unknown message of type 0x40.\n" +msgstr "Nieznana wiadomo¶æ typu 0x40.\n" + +#: common/fbus-6110.c:4394 +msgid "Message: Mobile phone identification received:\n" +msgstr "Wiadomo¶æ: Otrzymano identyfikacjê aparatu:\n" + +#: common/fbus-6110.c:4395 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-6110.c:4397 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-6110.c:4399 +#, c-format +msgid " Production Code: %s\n" +msgstr " Kod produktu: %s\n" + +#: common/fbus-6110.c:4401 +#, c-format +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: common/fbus-6110.c:4403 +#, c-format +msgid " Firmware: %s\n" +msgstr " Firmware: %s\n" + +#: common/fbus-6110.c:4409 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Magiczny numer: %02x %02x %02x %02x\n" + +#: common/fbus-6110.c:4429 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "[Otrzymano potwierdzenie typu %02x, nr: %2x]\n" + +#: common/fbus-6110.c:4447 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 1.\n" + +#: common/fbus-6110.c:4471 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "Wiadomo¶æ: Telefon jest w³±czony - nr 2.\n" + +#: common/fbus-6110.c:4487 +msgid "Message: Unknown message.\n" +msgstr "Wiadomo¶æ: Nieznana wiadomo¶æ.\n" + +#: common/fbus-6110.c:4564 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "Przerwana wiadomo¶æ wieloramkowa - ignorujê j± !!!\n" + +#: common/fbus-6110.c:4565 +msgid "Please report it ...\n" +msgstr "Proszê to zg³osiæ ...\n" + +#: common/fbus-6110.c:4624 +msgid "Bad checksum!\n" +msgstr "Z³a suma kontrolna!\n" + +#: common/fbus-6110.c:4681 xgnokii/xgnokii.c:1648 +msgid "Phone" +msgstr "Telefon" + +#: common/fbus-6110.c:4684 +msgid "PC" +msgstr "PC" + +#: common/fbus-6110.c:4702 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Adresat wiadomo¶ci: %s\n" + +#: common/fbus-6110.c:4703 +#, c-format +msgid "Msg Source: %s\n" +msgstr "¬ród³o wiadomo¶ci: %s\n" + +#: common/fbus-6110.c:4705 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "Typ wiadomo¶ci: %02x\n" + +#: common/fbus-6110.c:4707 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "Wiadomo¶æ nieznana: %02x\n" + +#: common/fbus-6110.c:4708 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" +"D³ugo¶æ wiadomo¶ci: %02x\n" +"Telefon: " + +#: common/fbus-6110.c:4779 +msgid "PC: " +msgstr "PC: " + +#: common/fbus-6110.c:4853 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "[Wysy³am potwierdzenie typu %02x, nr: %x]\n" + +#: common/mbus-6160.c:719 +msgid "Couldn't open MB61 device: " +msgstr "Nie mog³em otworzyæ urz±dzenia MB61: " + +#: common/mbus-640.c:786 +msgid "Phone: " +msgstr "Telefon: " + +#: common/mbus-640.c:816 common/mbus-640.c:916 +msgid "PC : " +msgstr "PC : " + +#: common/mbus-640.c:826 common/mbus-640.c:929 +msgid "Write error!\n" +msgstr "B³±d zapisu!\n" + +#: common/mbus-640.c:853 +msgid "Setting MBUS communication...\n" +msgstr "Ustanawianie komunikacji MBUS...\n" + +#: common/rlp-common.c:706 +msgid "Unknown!!! " +msgstr "Nieznany!!! " + +#: common/rlp-common.c:771 +msgid "BAD" +msgstr "Z£Y" + +#: common/rlp-common.c:893 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "Ramka FCS jest nieprawid³owa. Ignorujê...\n" + +#: common/rlp-common.c:1006 +msgid "Send_TXU()\n" +msgstr "Send_TXU()\n" + +#: common/rlp-common.c:1007 +#, c-format +msgid "XID_R_State=%d\n" +msgstr "XID_R_State=%d\n" + +#: common/rlp-common.c:1371 +msgid "RLP state 0.\n" +msgstr "RLP stan 0.\n" + +#: common/rlp-common.c:1408 +msgid "RLP state 1.\n" +msgstr "RLP stan 1.\n" + +#: common/rlp-common.c:1473 +msgid "RLP state 2.\n" +msgstr "RLP stan 2.\n" + +#: common/rlp-common.c:1507 +msgid "UA received in RLP state 2.\n" +msgstr "UA otrzymane przy RLP w stanie 2.\n" + +#: common/rlp-common.c:1564 +msgid "RLP state 3.\n" +msgstr "RLP stan 3.\n" + +#: common/rlp-common.c:1622 +msgid "RLP state 4.\n" +msgstr "RLP stan 4.\n" + +#: common/rlp-common.c:1732 +msgid "RLP state 5.\n" +msgstr "RLP stan 5.\n" + +#: common/rlp-common.c:1791 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "RLP stan 5 - jeszcze nie zaimplementowany!\n" + +#: common/rlp-common.c:1821 +msgid "RLP state 7.\n" +msgstr "RLP stan 7.\n" + +#: common/rlp-common.c:1863 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "DEBUG: Nieznany stan RLP!\n" + +#: gnokii/gnokii.c:207 +#, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII wersja %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Budowane %s %s dla %s na %s \n" + +#: gnokii/gnokii.c:221 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destionation logofile [network " +"code]\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group " +"number]\n" +" gnokii --sendringtone destionation rtttlfile\n" +" gnokii --reset [soft|hard]\n" +msgstr "" +" u¿ycie: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory typ_pamiêci pocz±tek koniec \n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial numer\n" +" gnokii --setspeeddial numer typ_pamiêci lokacja\n" +" gnokii --getsms typ_pamiêci pocz±tek koniec\n" +" gnokii --deletesms typ_pamiêci pocz±tek koniec\n" +" gnokii --sendsms adresat [--smsc numer_centrum_wiadomo¶ci |\n" +" --smscno indeks_centrum] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --getsmsc numer_centrum_wiadomo¶ci\n" +" gnokii --setdatetime [RRRR [MM [DD [GG [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm GG MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote indeks [-v]\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote indeks\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf ci±g\n" +" gnokii --sendlogo {caller|op} cel plik_logo [kod " +"sieci]\n" +" gnokii --setlogo logofile [kod sieci]\n" +" gnokii --setlogo logofile [cz³onek grupy] [nazwa grupy]\n" +" gnokii --setlogo text [tekst powitania]\n" +" gnokii --getlogo logofile {caller|op|startup} [numer grupy]\n" +" gnokii --sendringtone cel plik_rtttl\n" +" gnokii --reset [soft|hard]\n" + +#: gnokii/gnokii.c:255 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" + +#: gnokii/gnokii.c:260 +msgid "" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output " +"of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken " +"from\n" +" phone memory from address " +"[message_center_index].\n" +" If this argument is ommited SMSC number is " +"taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +" [--long n] - send no more then n characters,\n" +" default is 160\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number index from calendar.\n" +" [-v] - output in vCalendar 1.0 format\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --sendlogo send the logofile to destination as operator\n" +" or CLI logo\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --sendringtone send the rtttlfile to destination as ringtone\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +msgstr "" +"\n" +" --help wy¶wietla informacje o u¿yciu.\n" +"\n" +" --monitor wy¶wietla w trybie ci±g³ym informacje otrzymane\n" +" z telefonu.\n" +"\n" +" --version wy¶wietla numer wersji i informacjê o prawach\n" +" autorskich.\n" +"\n" +" --getmemory wczytuje dany obszar pamiêci z telefonu.\n" +" Dostêpne typy pamiêci to:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook wczytuje dane ze standardowego wej¶cia i zapisuje\n" +" je do ksi±¿ki telefonicznej.\n" +" U¿ywa tego samego formatu co wyj¶cie z\n" +" polecenia getphonebook.\n" +"\n" +" --getspeeddial wczytuje ustawienia szybkiego wybierania z danej\n" +" pozycji.\n" +"\n" +" --setspeeddial ustawia szybkie wybieranie.\n" +"\n" +" --getsms wczytuje wiadomo¶ci SMS z podanej pamiêci\n" +" pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n" +" [koniec].\n" +" Wpisy s± podawane na standardowe wyj¶cie.\n" +"\n" +" --deletesms kasuje wiadomo¶ci SMS z podanej pamiêci\n" +" pocz±wszy od wpisu [pocz±tek] i koñcz±c na\n" +" [koniec].\n" +"\n" +" --sendsms wysy³a wiadomo¶ci do [adresata] przez\n" +" [numer_centrum_wiadomo¶ci] lub numer SMSC brany\n" +" z pamiêci telefonu z adresu [indeks_centrum].\n" +" Je¶li ten argument jest pominiêty, numer SMSC jest\n" +" brany z pamiêci z lokacji nr 1. Tekst wiadomo¶ci\n" +" jest brany ze standardowego wej¶cia. Ta funkcja\n" +" zosta³a tylko czê¶ciowo przetestowana i mo¿e w\n" +" ogóle nie dzia³aæ w Twojej sieci. Znaczenie innych\n" +" opcjonalnych parametrów:\n" +" [-r] - wymagaj raportu dostarczenia\n" +" [-C n] - Klasa wiadomo¶ci n, gdzie n = 0..3\n" +" [-v n] - okres wa¿no¶ci w minutach\n" +" [--long n] - wy¶lij nie wiêcej ni¿ n znaków,\n" +" domy¶lnie 160\n" +"\n" +" --getsmsc poka¿ numer SMSC z lokacji\n" +" [indeks_centrum_wiadomo¶ci].\n" +"\n" +" --setdatetime ustaw datê i czas telefonu.\n" +"\n" +" --getdatetime pokazuje aktualn± datê i czas.\n" +"\n" +" --setalarm ustawia budzik w telefonie.\n" +"\n" +" --getalarm pokazuje stan budzika.\n" +"\n" +" --dialvoice nawi±zuje po³±czenie g³osowe.\n" +"\n" +" --getcalendarnote wy¶wietla wpis z kalendarza z podanej daty.\n" +" [-v] - wyj¶cie w formacie vCalendar 1.0\n" +"\n" +" --writecalendarnote dodaj wpis do kalendarza.\n" +"\n" +" --deletecalendarnote usuñ wpis z numerek [indeks]\n" +" z kalendarza.\n" +"\n" +" --getdisplaystatus poka¿ jakie ikony s± wy¶wietlane.\n" +"\n" +" --netmonitor ustawianie/sprawdzanie trybu netmonitora.\n" +"\n" +" --identify sprawdzanie IMEI, wersji i modelu.\n" +"\n" +" --senddtmf wysy³anie sekwencji DTMF\n" +"\n" +" --sendlogo wysy³anie logo do adresata jako logo operatora\n" +" albo CLI\n" +"\n" +" --setlogo ustawienie logo dzwoni±cego, operatora lub powitalne\n" +"\n" +" --getlogo odebranie logo dzwoni±cego, operatora lub powitalne\n" +"\n" +" --sendringtone wy¶lij plik_rtttl do celu jako sygna³ telefonu\n" +"\n" +" --reset [soft|hard] resetuje telefon.\n" +"\n" + +#: gnokii/gnokii.c:344 +msgid "" +" --entersecuritycode asks for the code and sends it to the phone\n" +"\n" +" --getsecuritycodestatus show if a security code is needed\n" +"\n" +msgstr "" +" --entersecuritycode pyta o kod i przesy³a go do telefonu\n" +"\n" +" --getsecuritycodestatus pokazuje czy potrzebny jest kod\n" +" zabezpieczaj±cy\n" +"\n" + +#: gnokii/gnokii.c:371 gnokii/gnokii.c:2634 gnokiid/virtmodem.c:282 +#: xgnokii/xgnokii.c:281 xlogos/xlogos.c:139 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "Inicjalizacha GSM/FBUS nieudana! (Nieznany model?). Koñczê pracê.\n" + +#: gnokii/gnokii.c:382 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK nie zosta³ ustawiony. Koñczê pracê.\n" + +#: gnokii/gnokii.c:636 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "U¿yj '%s --help' ¿eby otrzymaæ pomoc.\n" + +#: gnokii/gnokii.c:815 +#, c-format +msgid "Unknown option: %d\n" +msgstr "Nieznana opcja: %d\n" + +#: gnokii/gnokii.c:825 +msgid "Wrong number of arguments\n" +msgstr "Z³a ilo¶æ argumentów\n" + +#: gnokii/gnokii.c:897 gnokii/gnokii.c:955 +msgid "Input too long!\n" +msgstr "Wej¶cie za d³ugie!\n" + +#: gnokii/gnokii.c:950 +msgid "Couldn't read from stdin!\n" +msgstr "B³±d podczas czytania z STDIN\n" + +#: gnokii/gnokii.c:1016 gnokii/gnokii.c:1656 gnokii/gnokii.c:2692 +msgid "Send succeeded!\n" +msgstr "Wys³ano OK.\n" + +#: gnokii/gnokii.c:1018 gnokii/gnokii.c:1658 gnokii/gnokii.c:2694 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "Wysy³anie nieudane (b³±d=%d)\n" + +#: gnokii/gnokii.c:1042 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "%d. Centrum SMS (%s) ma numer %s\n" + +#: gnokii/gnokii.c:1044 +msgid "Messages sent as " +msgstr "Wiadomo¶ci wys³ane jako " + +#: gnokii/gnokii.c:1066 xgnokii/xgnokii.c:621 +msgid "ERMES" +msgstr "ERMES" + +#: gnokii/gnokii.c:1070 xgnokii/xgnokii.c:625 +msgid "X.400" +msgstr "X.400" + +# nie wiem czy dobrze zrobione +#: gnokii/gnokii.c:1079 +msgid "Message validity is " +msgstr "Poprawno¶æ wiadomo¶ci to " + +#: gnokii/gnokii.c:1115 +msgid "SMS center can not be found :-(\n" +msgstr "Nie mo¿na znale¼æ centrum SMS :-(\n" + +#: gnokii/gnokii.c:1187 gnokii/gnokii.c:1394 gnokii/gnokii.c:2225 +#: gnokii/gnokii.c:2392 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Nieznany typ pamiêci %s!\n" + +#: gnokii/gnokii.c:1214 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Wiadomo¶æ z Outbox " + +#: gnokii/gnokii.c:1217 +msgid "(sent)\n" +msgstr "(wys³ano)\n" + +#: gnokii/gnokii.c:1219 +msgid "(not sent)\n" +msgstr "(nie wys³ano)\n" + +#: gnokii/gnokii.c:1221 gnokii/gnokii.c:1260 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "" +"Text: %s\n" +"\n" + +#: gnokii/gnokii.c:1227 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Raport dorêczenia " + +#: gnokii/gnokii.c:1229 gnokii/gnokii.c:1269 +msgid "(read)\n" +msgstr "(przeczytana)\n" + +#: gnokii/gnokii.c:1231 gnokii/gnokii.c:1271 +msgid "(not read)\n" +msgstr "(nieprzeczytana)\n" + +#: gnokii/gnokii.c:1233 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Data wys³ania: %d-%d-%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1239 gnokii/gnokii.c:1252 gnokii/gnokii.c:1279 +#, c-format +msgid "+%02d00" +msgstr "+%02d00" + +#: gnokii/gnokii.c:1246 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "" + +#: gnokii/gnokii.c:1259 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "" + +#: gnokii/gnokii.c:1266 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Wiadomo¶æ z Inbox " + +#: gnokii/gnokii.c:1273 +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Data/Czas: %d-%d-%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1285 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "Nadawca: %s Centrum SMS: %s\n" + +#: gnokii/gnokii.c:1291 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Po³±czony (%d/%d):\n" + +#: gnokii/gnokii.c:1297 +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" +"Text:\n" +"%s\n" +"\n" + +#: gnokii/gnokii.c:1306 gnokii/gnokii.c:1417 gnokii/gnokii.c:1483 +#: gnokii/gnokii.c:2252 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "Funkcja nie zaimplementowana w modelu %s!\n" + +#: gnokii/gnokii.c:1312 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "" + +#: gnokii/gnokii.c:1318 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "Lokacja SMS %s %d pusta.\n" + +#: gnokii/gnokii.c:1324 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"GetSMS %s %d nieudane!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1414 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "SMS %s %d skasowany\n" + +#: gnokii/gnokii.c:1421 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"Kasowanie SMS %s %d nieudane!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1472 +msgid "Enter your code: " +msgstr "" + +#: gnokii/gnokii.c:1479 +msgid "Error: invalid code.\n" +msgstr "" + +#: gnokii/gnokii.c:1481 +msgid "Code ok.\n" +msgstr "" + +#: gnokii/gnokii.c:1485 +msgid "Other error.\n" +msgstr "" + +#: gnokii/gnokii.c:1501 +msgid "Security code status: " +msgstr "" + +#: gnokii/gnokii.c:1603 +msgid "Sending operator logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1607 +msgid "Sending caller line identification logo.\n" +msgstr "" + +#: gnokii/gnokii.c:1609 +msgid "You should specify what kind of logo to send!\n" +msgstr "" + +#: gnokii/gnokii.c:1628 +msgid "Operator code: %s\n" +msgstr "Kod operatora: %s\n" + +#: gnokii/gnokii.c:1706 +msgid "Getting Logo.\n" +msgstr "Pobieranie logo.\n" + +#: gnokii/gnokii.c:1752 +msgid "Logo file error.\n" +msgstr "B³±d pliku z Logiem.\n" + +#: gnokii/gnokii.c:1758 +msgid "Sending Logo.\n" +msgstr "Wysy³anie Logo.\n" + +#: gnokii/gnokii.c:1800 +msgid "BEGIN:VCALENDAR\n" +msgstr "" + +#: gnokii/gnokii.c:1801 +msgid "VERSION:1.0\n" +msgstr "" + +#: gnokii/gnokii.c:1802 +msgid "BEGIN:VEVENT\n" +msgstr "" + +#: gnokii/gnokii.c:1803 +msgid "CATEGORIES:" +msgstr "" + +#: gnokii/gnokii.c:1806 +msgid "MISCELLANEOUS\n" +msgstr "" + +#: gnokii/gnokii.c:1809 +msgid "PHONE CALL\n" +msgstr "" + +#: gnokii/gnokii.c:1812 +msgid "MEETING\n" +msgstr "" + +#: gnokii/gnokii.c:1815 +msgid "SPECIAL OCCASION\n" +msgstr "" + +#: gnokii/gnokii.c:1818 +msgid "UNKNOWN\n" +msgstr "" + +#: gnokii/gnokii.c:1821 +#, c-format +msgid "SUMMARY:%s\n" +msgstr "" + +#: gnokii/gnokii.c:1822 +#, c-format +msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n" +msgstr "" + +#: gnokii/gnokii.c:1826 +#, c-format +msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n" +msgstr "" + +#: gnokii/gnokii.c:1830 +msgid "END:VEVENT\n" +msgstr "" + +#: gnokii/gnokii.c:1831 +msgid "END:VCALENDAR\n" +msgstr "" + +#: gnokii/gnokii.c:1834 +msgid " Type of the note: " +msgstr " Typ notatki: " + +#: gnokii/gnokii.c:1839 +msgid "Reminder\n" +msgstr "Przypomnienie\n" + +#: gnokii/gnokii.c:1843 +msgid "Call\n" +msgstr "Rozmowa\n" + +#: gnokii/gnokii.c:1847 +msgid "Meeting\n" +msgstr "Spotkanie\n" + +#: gnokii/gnokii.c:1851 +msgid "Birthday\n" +msgstr "Urodziny\n" + +#: gnokii/gnokii.c:1855 +msgid "Unknown\n" +msgstr "Nieznany\n" + +#: gnokii/gnokii.c:1884 +msgid "The calendar note can not be read\n" +msgstr "" + +#: gnokii/gnokii.c:1923 gnokii/gnokii.c:2403 +msgid "Succesfully written!\n" +msgstr "Zapisano OK!\n" + +#: gnokii/gnokii.c:1943 +msgid " Calendar note deleted.\n" +msgstr " Notatka skasowana.\n" + +#: gnokii/gnokii.c:1946 +msgid "The calendar note can not be deleted\n" +msgstr "Notatka nie mo¿e byæ skasowana\n" + +#: gnokii/gnokii.c:2015 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Data: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:2016 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Czas: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2052 +#, c-format +msgid "Alarm: %s\n" +msgstr "Alarm: %s\n" + +#: gnokii/gnokii.c:2053 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Czas: %02d:%02d\n" + +#: gnokii/gnokii.c:2094 +msgid "Entering monitor mode...\n" +msgstr "Uruchamiam tryb monitoruj±cy...\n" + +#: gnokii/gnokii.c:2095 +msgid "Initialising GSM interface...\n" +msgstr "Inicjalizacja interfejsu GSM...\n" + +#: gnokii/gnokii.c:2106 +#, c-format +msgid "RFLevel: %d\n" +msgstr "RFLevel: %d\n" + +#: gnokii/gnokii.c:2109 +#, c-format +msgid "Battery: %d\n" +msgstr "Bateria: %d\n" + +#: gnokii/gnokii.c:2112 +#, c-format +msgid "Power Source: %s\n" +msgstr "Zród³o zasilania: %s\n" + +#: gnokii/gnokii.c:2112 +msgid "AC/DC" +msgstr "z sieci" + +#: gnokii/gnokii.c:2112 +msgid "battery" +msgstr "bateria" + +#: gnokii/gnokii.c:2115 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2118 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefon: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2121 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2124 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2127 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2130 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2133 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2136 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2139 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: U¿ywane %d, Wolne %d\n" + +#: gnokii/gnokii.c:2142 +#, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "Wiadomo¶ci SMS: nieprzeczytanych %d, numer %d\n" + +#: gnokii/gnokii.c:2145 +#, c-format +msgid "Incoming call: %s\n" +msgstr "Rozmowa przychodz±ca: %s\n" + +#: gnokii/gnokii.c:2148 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "Sieæ: %s (%s), LAC (obszar wywo³añ): %s, CellID (ID komórki): %s\n" + +#: gnokii/gnokii.c:2153 +msgid "Leaving monitor mode...\n" +msgstr "Wyj¶cie z trybu monitoruj±cego...\n" + +#: gnokii/gnokii.c:2257 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "Typ pamiêci %s nie obs³ugiwany!\n" + +#: gnokii/gnokii.c:2262 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Z³a lokacja lub inny, niezidentyfikowany b³±d (%d)\n" + +#: gnokii/gnokii.c:2329 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Format problem on line %d [%s]\n" + +#: gnokii/gnokii.c:2343 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Zapisano OK: typ pamiêci: %s, Lokacja: %d, Nazwa: %s, Numer: %s\n" + +#: gnokii/gnokii.c:2345 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Nieudany zapis (%d): typ pamiêci: %s, lokacja: %d, nazwa: %s, numer: " +"%s\n" + +#: gnokii/gnokii.c:2365 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "" + +#: gnokii/gnokii.c:2434 xgnokii/xgnokii.c:2212 xlogos/xlogos.c:103 +#, c-format +msgid "error opening %s, using default config\n" +msgstr "B³±d podczas otwierania %s, u¿ywam konfiguracji domy¶lnej\n" + +#: gnokii/gnokii.c:2466 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Po³±czenie trwa: %s\n" + +#: gnokii/gnokii.c:2467 +#, c-format +msgid "Unknown: %s\n" +msgstr "Nieznany: %s\n" + +#: gnokii/gnokii.c:2468 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "Nieprzeczytany SMS: %s\n" + +#: gnokii/gnokii.c:2469 +#, c-format +msgid "Voice call: %s\n" +msgstr "Po³±czenie typu Voice: %s\n" + +#: gnokii/gnokii.c:2470 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Aktywne po³±czenie typu Fax: %s\n" + +#: gnokii/gnokii.c:2471 +#, c-format +msgid "Data call active: %s\n" +msgstr "Aktywne po³±czenie typu Data: %s\n" + +#: gnokii/gnokii.c:2472 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Blokada klawiatury: %s\n" + +#: gnokii/gnokii.c:2473 +#, c-format +msgid "SMS storage full: %s\n" +msgstr "Pamiêæ SMS pe³na: %s\n" + +#: gnokii/gnokii.c:2525 +#, c-format +msgid "IMEI: %s\n" +msgstr "IMEI: %s\n" + +#: gnokii/gnokii.c:2526 +#, c-format +msgid "Model: %s\n" +msgstr "Model: %s\n" + +#: gnokii/gnokii.c:2527 +#, c-format +msgid "Revision: %s\n" +msgstr "Revision: %s\n" + +#: gnokii/gnokii.c:2559 +msgid "What kind of reset do you want??\n" +msgstr "Jakiego typu resetu sobie ¿yczysz?\n" + +#: gnokiid/gnokiid.c:58 +#, c-format +msgid "gnokiid Version %s" +msgstr "gnokiid Version %s" + +#: gnokiid/gnokiid.c:70 +msgid " usage: gnokiid {--help|--version}" +msgstr " u¿ycie: gnokiid {--help|--version}" + +#: gnokiid/virtmodem.c:85 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:93 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:99 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:104 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "" + +#: gnokiid/virtmodem.c:212 +msgid "Couldn't open pty!\n" +msgstr "Nie mog³em otworzyæ pty!\n" + +#: gnokiid/virtmodem.c:220 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "gnokiid NIE powinien byæ zainstalowany z setuid root!\n" + +#: gnokiid/virtmodem.c:224 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "Slave pty = %s, wo³am %s dla stworzenia /dev/gnokii.\n" + +#: gnokiid/virtmodem.c:294 xlogos/xlogos.c:150 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Nie odebrano GSM_LinkOK. Koniec pracy. \n" + +#: xgnokii/xgnokii.c:175 +msgid "/help/index.html" +msgstr "/help/index.html" + +#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:973 +msgid "Familly" +msgstr "Rodzina" + +#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:982 +msgid "VIP" +msgstr "VIP" + +#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:991 +msgid "Friends" +msgstr "Przyjaciele" + +#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1000 +msgid "Colleagues" +msgstr "Znajomi" + +#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1009 +msgid "Other" +msgstr "Inni" + +#: xgnokii/xgnokii.c:244 +msgid "No group" +msgstr "Zadna grupa" + +#: xgnokii/xgnokii.c:383 +msgid "Short Message received" +msgstr "otrzymano SMS" + +#: xgnokii/xgnokii.c:398 +msgid "Call in progress" +msgstr "Rozmowa w trakcie" + +#: xgnokii/xgnokii.c:411 +msgid "Hide" +msgstr "Ukryj" + +#: xgnokii/xgnokii.c:539 +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "Rozmowa przychodz±ca od: %s\n" +"Czas: %s" + +#: xgnokii/xgnokii.c:595 xgnokii/xgnokii_sms.c:571 +#, c-format +msgid "Set %d" +msgstr "Zbiór %d" + +#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1356 +msgid "E-Mail" +msgstr "E-Mail" + +#: xgnokii/xgnokii.c:629 +msgid "Voice" +msgstr "Voice" + +#: xgnokii/xgnokii.c:640 xgnokii/xgnokii.c:1386 +msgid "1 h" +msgstr "1 godzina" + +#: xgnokii/xgnokii.c:644 xgnokii/xgnokii.c:1393 +msgid "6 h" +msgstr "6 godzin" + +#: xgnokii/xgnokii.c:648 xgnokii/xgnokii.c:664 xgnokii/xgnokii.c:1400 +msgid "24 h" +msgstr "24 godziny" + +#: xgnokii/xgnokii.c:652 xgnokii/xgnokii.c:1407 +msgid "72 h" +msgstr "72 godzin" + +#: xgnokii/xgnokii.c:660 +msgid "Max. time" +msgstr "Maksymalny mo¿liwy czas" + +#: xgnokii/xgnokii.c:962 +msgid "Error saving SMS centers!" +msgstr "" + +#: xgnokii/xgnokii.c:1020 +msgid "Error writing configuration file!" +msgstr "" + +#: xgnokii/xgnokii.c:1032 xgnokii/xgnokii_contacts.c:2572 +msgid "Contacts" +msgstr "Ksi±¿ka adresowa" + +#: xgnokii/xgnokii.c:1038 xgnokii/xgnokii.c:1760 +msgid "SMS" +msgstr "SMS" + +#: xgnokii/xgnokii.c:1044 +msgid "DTMF" +msgstr "DTMF" + +#: xgnokii/xgnokii.c:1050 xgnokii/xgnokii_speed.c:487 +msgid "Speed Dial" +msgstr "Speed Dial" + +#: xgnokii/xgnokii.c:1057 +msgid "Keyboard" +msgstr "Klawiatura" + +#: xgnokii/xgnokii.c:1062 xgnokii/xgnokii_netmon.c:271 +msgid "Net Monitor" +msgstr "Net Monitor" + +#: xgnokii/xgnokii.c:1071 xgnokii/xgnokii.c:1518 +msgid "Options" +msgstr "Opcje" + +#: xgnokii/xgnokii.c:1081 xgnokii/xgnokii.c:2042 +msgid "Help" +msgstr "Pomoc" + +#: xgnokii/xgnokii.c:1087 xgnokii/xgnokii.c:1103 +msgid "About" +msgstr "O..." + +#: xgnokii/xgnokii.c:1107 xgnokii/xgnokii.c:1280 +#: xgnokii/xgnokii_contacts.c:780 xgnokii/xgnokii_contacts.c:914 +#: xgnokii/xgnokii_contacts.c:1261 xgnokii/xgnokii_contacts.c:2428 +#: xgnokii/xgnokii_sms.c:470 +msgid "Ok" +msgstr "OK" + +#: xgnokii/xgnokii.c:1120 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Janík ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" + +#: xgnokii/xgnokii.c:1274 +msgid "Edit SMS Setting" +msgstr "Edycja ustawieñ SMS" + +#: xgnokii/xgnokii.c:1288 xgnokii/xgnokii_common.c:148 +#: xgnokii/xgnokii_common.c:203 xgnokii/xgnokii_contacts.c:788 +#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1145 +#: xgnokii/xgnokii_contacts.c:1190 xgnokii/xgnokii_contacts.c:1270 +#: xgnokii/xgnokii_contacts.c:1526 xgnokii/xgnokii_contacts.c:2435 +#: xgnokii/xgnokii_sms.c:478 +msgid "Cancel" +msgstr "Anuluj" + +#: xgnokii/xgnokii.c:1301 +msgid "Set name:" +msgstr "Podaj nazwê:" + +#: xgnokii/xgnokii.c:1314 +msgid "Center:" +msgstr "Centrum:" + +#: xgnokii/xgnokii.c:1327 +msgid "Sending Format:" +msgstr "Format wysy³ania:" + +#: xgnokii/xgnokii.c:1371 +msgid "Validity Period:" +msgstr "Validity Period:" + +#: xgnokii/xgnokii.c:1379 +msgid "Max. Time" +msgstr "Maksymalny czas" + +#: xgnokii/xgnokii.c:1515 +msgid "Set name" +msgstr "Podaj nazwê:" + +#: xgnokii/xgnokii.c:1515 +msgid "Center number" +msgstr "Numer centrum" + +#: xgnokii/xgnokii.c:1515 +msgid "Format" +msgstr "Format" + +#: xgnokii/xgnokii.c:1515 +msgid "Validity" +msgstr "Validity" + +#: xgnokii/xgnokii.c:1523 +msgid "Apply" +msgstr "Zastosuj" + +#: xgnokii/xgnokii.c:1532 xgnokii/xgnokii_contacts.c:1510 +#: xgnokii/xgnokii_dtmf.c:158 +msgid "Save" +msgstr "Zapisz" + +#: xgnokii/xgnokii.c:1539 +msgid "Close" +msgstr "Zamknij" + +#: xgnokii/xgnokii.c:1554 +msgid "Phone and connection type" +msgstr "Telefon i typ po³±czenia" + +#: xgnokii/xgnokii.c:1561 +msgid "Connection" +msgstr "Po³±czenie" + +#: xgnokii/xgnokii.c:1568 +msgid "Port:" +msgstr "Port:" + +#: xgnokii/xgnokii.c:1583 xgnokii/xgnokii.c:1655 +msgid "Model:" +msgstr "Model:" + +#: xgnokii/xgnokii.c:1598 +msgid "Init length:" +msgstr "" + +#: xgnokii/xgnokii.c:1613 +msgid "Bindir:" +msgstr "" + +#: xgnokii/xgnokii.c:1628 +msgid "Connection:" +msgstr "Po³±czenie:" + +#: xgnokii/xgnokii.c:1632 +msgid "infrared" +msgstr "podczerwieñ (IR)" + +#: xgnokii/xgnokii.c:1636 +msgid "serial" +msgstr "szeregowe (serial)" + +#: xgnokii/xgnokii.c:1641 +msgid "Phone information" +msgstr "Informacje o telefonie" + +#: xgnokii/xgnokii.c:1670 +msgid "Version:" +msgstr "Wersja:" + +#: xgnokii/xgnokii.c:1685 +msgid "Revision:" +msgstr "Wersja:" + +#: xgnokii/xgnokii.c:1700 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1715 +msgid "Alarm setting" +msgstr "Ustawianie alarmu" + +#: xgnokii/xgnokii.c:1722 xgnokii/xgnokii.c:1729 +msgid "Alarm" +msgstr "Alarm" + +#: xgnokii/xgnokii.c:1753 xgnokii/xgnokii_sms.c:1318 +msgid "Short Message Service" +msgstr "Short Message Service" + +#: xgnokii/xgnokii.c:1789 +msgid "Edit" +msgstr "Edycja" + +#: xgnokii/xgnokii.c:1803 +msgid "Business Card" +msgstr "Business Card" + +#: xgnokii/xgnokii.c:1810 +msgid "User" +msgstr "U¿ytkownik" + +#: xgnokii/xgnokii.c:1828 xgnokii/xgnokii_contacts.c:801 +msgid "Name:" +msgstr "Nazwa:" + +#: xgnokii/xgnokii.c:1854 +msgid "Title:" +msgstr "Tytu³:" + +#: xgnokii/xgnokii.c:1880 +msgid "Company:" +msgstr "Firma:" + +#: xgnokii/xgnokii.c:1906 +msgid "Telephone:" +msgstr "Telefon:" + +#: xgnokii/xgnokii.c:1931 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:1956 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:1982 +msgid "Address:" +msgstr "Adres:" + +#: xgnokii/xgnokii.c:2006 +msgid "Caller groups names" +msgstr "Nazwy grup dzwoni±cych" + +#: xgnokii/xgnokii.c:2013 +msgid "Groups" +msgstr "Grupy" + +#: xgnokii/xgnokii.c:2022 +#, c-format +msgid "Group %d:" +msgstr "Grupa %d:" + +#: xgnokii/xgnokii.c:2035 +msgid "Help viewer" +msgstr "Ogl±dacz pomocy" + +#: xgnokii/xgnokii.c:2049 +msgid "Viewer:" +msgstr "Ogl±dacz:" + +#: xgnokii/xgnokii.c:2200 xgnokii/xgnokii_cfg.c:69 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii.c:2205 xgnokii/xgnokii_cfg.c:75 xgnokii/xgnokii_cfg.c:90 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:154 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:160 xgnokii/xgnokii_cfg.c:178 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:166 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "" + +#: xgnokii/xgnokii_cfg.c:184 +msgid "ERROR: Can't write file config file!\n" +msgstr "" + +#: xgnokii/xgnokii_common.c:141 +msgid "Error" +msgstr "B³±d" + +#: xgnokii/xgnokii_common.c:187 +msgid "Yes" +msgstr "Tak" + +#: xgnokii/xgnokii_common.c:196 +msgid "No" +msgstr "Nie" + +#: xgnokii/xgnokii_common.c:281 +#, c-format +msgid "Can't exec %s\n" +msgstr "Nie mogê uruchomiæ %s\n" + +#: xgnokii/xgnokii_contacts.c:88 +msgid "/help/contacts.html" +msgstr "/help/contacts.html" + +#: xgnokii/xgnokii_contacts.c:210 xgnokii/xgnokii_contacts.c:243 +#: xgnokii/xgnokii_contacts.c:404 xgnokii/xgnokii_contacts.c:429 +#: xgnokii/xgnokii_contacts.c:562 xgnokii/xgnokii_contacts.c:584 +msgid "Can't change memory type!" +msgstr "Nie mogê zmieniæ typu pamiêci!" + +#: xgnokii/xgnokii_contacts.c:254 xgnokii/xgnokii_contacts.c:301 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:440 xgnokii/xgnokii_contacts.c:479 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:674 +msgid "Can't find pattern!" +msgstr "Nie mogê znale¼æ ¶cie¿ki!" + +#: xgnokii/xgnokii_contacts.c:814 xgnokii/xgnokii_contacts.c:1279 +msgid "Number:" +msgstr "Numer:" + +#: xgnokii/xgnokii_contacts.c:827 +msgid "Memory:" +msgstr "Pamiêæ:" + +#: xgnokii/xgnokii_contacts.c:831 +msgid "phone" +msgstr "telefon" + +#: xgnokii/xgnokii_contacts.c:846 +msgid "Caller group:" +msgstr "Grupa:" + +#: xgnokii/xgnokii_contacts.c:862 xgnokii/xgnokii_contacts.c:2633 +#: xgnokii/xgnokii_speed.c:540 +msgid "Edit entry" +msgstr "Edycja pozycji" + +#: xgnokii/xgnokii_contacts.c:907 +msgid "Delete entries" +msgstr "Kasowanie pozycji" + +#: xgnokii/xgnokii_contacts.c:939 +msgid "Do you want to delete selected entries?" +msgstr "Czy chcesz skasowaæ zaznaczone pozycje?" + +#: xgnokii/xgnokii_contacts.c:950 xgnokii/xgnokii_contacts.c:2625 +msgid "New entry" +msgstr "Nowa pozycja" + +#: xgnokii/xgnokii_contacts.c:988 xgnokii/xgnokii_contacts.c:2629 +msgid "Duplicate entry" +msgstr "Skopiuj pozycjê" + +#: xgnokii/xgnokii_contacts.c:1052 xgnokii/xgnokii_contacts.c:1062 +#: xgnokii/xgnokii_contacts.c:1087 +msgid "Can't find free memory." +msgstr "Brak wolnej pamiêci." + +#: xgnokii/xgnokii_contacts.c:1128 +msgid "Changing memory type" +msgstr "Zmieniam typ pamiêci" + +#: xgnokii/xgnokii_contacts.c:1136 +msgid "Continue" +msgstr "Dalej" + +#: xgnokii/xgnokii_contacts.c:1156 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:1181 +msgid "Find" +msgstr "Szukanie" + +#: xgnokii/xgnokii_contacts.c:1203 +msgid "Pattern:" +msgstr "Scie¿ka:" + +#: xgnokii/xgnokii_contacts.c:1216 xgnokii/xgnokii_contacts.c:2568 +#: xgnokii/xgnokii_speed.c:484 +msgid "Name" +msgstr "Nazwa" + +#: xgnokii/xgnokii_contacts.c:1222 xgnokii/xgnokii_contacts.c:2568 +#: xgnokii/xgnokii_speed.c:484 +msgid "Number" +msgstr "Numer" + +#: xgnokii/xgnokii_contacts.c:1255 xgnokii/xgnokii_contacts.c:2644 +msgid "Dial voice" +msgstr "Dzwoñ (voice)" + +#: xgnokii/xgnokii_contacts.c:1385 +msgid "Phone memory..." +msgstr "Pamiêæ telefonu..." + +#: xgnokii/xgnokii_contacts.c:1396 +msgid "SIM memory..." +msgstr "Pamiêæ karty SIM..." + +#: xgnokii/xgnokii_contacts.c:1423 +msgid "Saving entries" +msgstr "Zapisujê pozycje" + +#: xgnokii/xgnokii_contacts.c:1448 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1481 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1503 +msgid "Save changes?" +msgstr "Zapisaæ zmiany?" + +#: xgnokii/xgnokii_contacts.c:1519 +msgid "Don't save" +msgstr "Nie zapisuj" + +#: xgnokii/xgnokii_contacts.c:1543 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Want you save these changes into phone?\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1641 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1665 +msgid "Getting entries" +msgstr "Pobieranie danych" + +#: xgnokii/xgnokii_contacts.c:1674 xgnokii/xgnokii_contacts.c:1719 +#: xgnokii/xgnokii_contacts.c:2154 xgnokii/xgnokii_contacts.c:2177 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1686 xgnokii/xgnokii_contacts.c:1691 +#, c-format +msgid "%s: line %d: Can't get ME memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1731 xgnokii/xgnokii_contacts.c:1736 +#, c-format +msgid "%s: line %d: Can't get SM memory entry number %d! %d\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1843 xgnokii/xgnokii_dtmf.c:110 +#: xgnokii/xgnokii_speed.c:378 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1914 xgnokii/xgnokii_dtmf.c:142 +#: xgnokii/xgnokii_speed.c:418 +msgid "Overwrite file?" +msgstr "Nadpisaæ plik?" + +#: xgnokii/xgnokii_contacts.c:1915 xgnokii/xgnokii_dtmf.c:143 +#: xgnokii/xgnokii_speed.c:419 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:1933 xgnokii/xgnokii_speed.c:436 +msgid "Export" +msgstr "Export" + +#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:74 +#: xgnokii/xgnokii_speed.c:280 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2130 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2241 xgnokii/xgnokii_speed.c:357 +msgid "Import" +msgstr "Import" + +#: xgnokii/xgnokii_contacts.c:2425 xgnokii/xgnokii_sms.c:1036 +msgid "Select contacts" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2459 xgnokii/xgnokii_contacts.c:2673 +#: xgnokii/xgnokii_sms.c:1461 xgnokii/xgnokii_speed.c:566 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_contacts.c:2568 +msgid "Memory" +msgstr "Pamiêæ" + +#: xgnokii/xgnokii_contacts.c:2568 +msgid "Group" +msgstr "Grupa" + +#: xgnokii/xgnokii_contacts.c:2603 xgnokii/xgnokii_speed.c:518 +msgid "Read from phone" +msgstr "Odczyt z telefonu" + +#: xgnokii/xgnokii_contacts.c:2607 xgnokii/xgnokii_speed.c:522 +msgid "Save to phone" +msgstr "Zapis do telefonu" + +#: xgnokii/xgnokii_contacts.c:2614 xgnokii/xgnokii_speed.c:529 +msgid "Import from file" +msgstr "Import z pliku" + +#: xgnokii/xgnokii_contacts.c:2618 xgnokii/xgnokii_speed.c:533 +msgid "Export to file" +msgstr "Eksport do pliku" + +#: xgnokii/xgnokii_contacts.c:2637 +msgid "Delete entry" +msgstr "Skasuj pozycjê" + +#: xgnokii/xgnokii_dtmf.c:35 +msgid "/help/dtmf.html" +msgstr "/help/dtmf.html" + +#: xgnokii/xgnokii_dtmf.c:91 +msgid "Load" +msgstr "Odczyt" + +#: xgnokii/xgnokii_dtmf.c:207 +msgid "Dial Tone" +msgstr "Dial Tone" + +#: xgnokii/xgnokii_netmon.c:38 +msgid "/help/netmon.html" +msgstr "/help/netmon.html" + +#: xgnokii/xgnokii_netmon.c:335 xgnokii/xgnokii_netmon.c:338 +msgid "Active cell" +msgstr "Aktywna komórka" + +#: xgnokii/xgnokii_netmon.c:341 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:344 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:347 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:350 +msgid "Prefered/Denied networks" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:353 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:356 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:359 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:362 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:372 +msgid "Uplink DTX" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:375 +msgid "BTS TEST" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:378 +msgid "CELL BARR-Flag" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:381 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:384 +msgid "?Constant voltage charging display" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Reset-Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:409 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:412 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:415 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "L2-Timeouts" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "Memory status before reset" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "Reset Counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:446 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:449 +msgid "Calls" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:452 +msgid "Temporary counters of DSP" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Control of task information displays" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Information of task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Information of task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "Information of task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "Information of OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "Information of the current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:473 +msgid "Hardware version" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:493 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "C2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:496 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:499 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:502 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:533 +msgid "Page:" +msgstr "" + +#: xgnokii/xgnokii_sms.c:83 +msgid "/help/sms.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:88 +msgid "/help/sms_send.html" +msgstr "" + +#: xgnokii/xgnokii_sms.c:234 +msgid "report" +msgstr "raport" + +#: xgnokii/xgnokii_sms.c:236 +msgid "read" +msgstr "przeczytane" + +#: xgnokii/xgnokii_sms.c:238 +msgid "unread" +msgstr "nieprzeczytane" + +#: xgnokii/xgnokii_sms.c:294 +msgid "sent" +msgstr "wys³ane" + +#: xgnokii/xgnokii_sms.c:296 +msgid "unsent" +msgstr "nie wys³±ne" + +#: xgnokii/xgnokii_sms.c:380 +msgid "From: " +msgstr "Od: " + +#: xgnokii/xgnokii_sms.c:388 +msgid "Date: " +msgstr "Data: " + +#: xgnokii/xgnokii_sms.c:438 +msgid "Function not implemented!" +msgstr "Funkcja nie zaimplementowana!" + +#: xgnokii/xgnokii_sms.c:443 +msgid "Delete SMS failed!" +msgstr "Kasowanie SMS nieudane!" + +#: xgnokii/xgnokii_sms.c:463 +msgid "Delete SMS" +msgstr "Skasuj SMS" + +#: xgnokii/xgnokii_sms.c:495 +msgid "Do you want delete selected SMS?" +msgstr "Czy chcesz skasowaæ wybrane SMS-y?" + +#: xgnokii/xgnokii_sms.c:706 xgnokii/xgnokii_sms.c:817 +msgid "Address line contains illegal address!" +msgstr "Nieprawid³owa linia adresu!" + +#: xgnokii/xgnokii_sms.c:791 +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "wys³anie SMS do %s zakoñczone NIEpowodzeniem\n" +"(b³±d=%d)" + +#: xgnokii/xgnokii_sms.c:988 +msgid "Send message" +msgstr "Wy¶lij wiadomo¶æ" + +#: xgnokii/xgnokii_sms.c:992 +msgid "Save message to outbox" +msgstr "" + +#: xgnokii/xgnokii_sms.c:999 +msgid "Check names" +msgstr "Sprawd¼ nazwy" + +#: xgnokii/xgnokii_sms.c:1012 +msgid "To:" +msgstr "Do:" + +#: xgnokii/xgnokii_sms.c:1084 +msgid "Delivery report" +msgstr "Raport dorêczenia" + +#: xgnokii/xgnokii_sms.c:1088 +msgid "Send as Long SMS" +msgstr "Wy¶lij jako d³ugi SMS" + +#: xgnokii/xgnokii_sms.c:1092 +msgid "SMS Center:" +msgstr "Centrum SMS:" + +#: xgnokii/xgnokii_sms.c:1110 +msgid "New Message" +msgstr "Nowa wiadomo¶æ" + +#: xgnokii/xgnokii_sms.c:1137 xgnokii/xgnokii_sms.c:1352 +msgid "Forward Message" +msgstr "Prze¶lij dalej" + +#: xgnokii/xgnokii_sms.c:1177 +msgid "Reply Message" +msgstr "Odpowied¼" + +#: xgnokii/xgnokii_sms.c:1212 xgnokii/xgnokii_sms.c:1361 +msgid "Bussiness Card" +msgstr "Business Card" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Status" +msgstr "Status" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Date / Time" +msgstr "Data / Czas" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Sender" +msgstr "Nadawca" + +#: xgnokii/xgnokii_sms.c:1314 +msgid "Message" +msgstr "Wiadomo¶æ" + +#: xgnokii/xgnokii_sms.c:1348 +msgid "New message" +msgstr "Nowa wiadomo¶æ" + +#: xgnokii/xgnokii_sms.c:1356 +msgid "Reply message" +msgstr "Odpowiedz" + +#: xgnokii/xgnokii_sms.c:1368 +msgid "Delete message" +msgstr "Skasuj" + +#: xgnokii/xgnokii_sms.c:1393 +msgid "SMS's" +msgstr "SMS-y" + +#: xgnokii/xgnokii_sms.c:1402 +msgid "Inbox" +msgstr "" + +#: xgnokii/xgnokii_sms.c:1408 +msgid "Outbox" +msgstr "" + +#: xgnokii/xgnokii_speed.c:42 +msgid "/help/speeddial.html" +msgstr "" + +#: xgnokii/xgnokii_speed.c:180 +msgid "Cannot allocate memory!" +msgstr "" + +#: xgnokii/xgnokii_speed.c:226 +#, c-format +msgid "" +"Error writing speed\n" +"dial for key %d!\n" +msgstr "" + +#: xgnokii/xgnokii_speed.c:298 +msgid "Cannot allocate memory!\n" +msgstr "" + +#: xgnokii/xgnokii_speed.c:310 xgnokii/xgnokii_speed.c:338 +msgid "Error reading file!" +msgstr "B³±d odczytu pliku" + +#: xgnokii/xgnokii_speed.c:484 +msgid "Key" +msgstr "Klawisz" + +#: xgnokii/xgnokii_xkeyb.c:90 +msgid "/help/xkeyb.html" +msgstr "/help/xkeyb.html" + +#: xgnokii/xgnokii_xkeyb.c:149 +msgid "Cannot load background pixmap!" +msgstr "Nie mogê wczytaæ t³a" + +#: xgnokii/xgnokii_xkeyb.c:201 +msgid "/_File" +msgstr "/_Plik" + +#: xgnokii/xgnokii_xkeyb.c:202 +msgid "/File/_Close" +msgstr "/Plik/_Zamknij" + +#: xgnokii/xgnokii_xkeyb.c:203 +msgid "/_Help" +msgstr "/_Pomoc" + +#: xgnokii/xgnokii_xkeyb.c:204 +msgid "/Help/_Help" +msgstr "/Pomoc/_Pomoc" + +#: xgnokii/xgnokii_xkeyb.c:205 +msgid "/Help/_About" +msgstr "/Pomoc/_O..." + +#: xgnokii/xgnokii_xkeyb.c:218 +msgid "XGnokii Keyboard" +msgstr "Klawiatura XGnokii" diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..d1b04e9 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,3579 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii 0.3.2_pre23\n" +"POT-Creation-Date: 2000-05-20 11:57+0200\n" +"PO-Revision-Date: 2000-05-20 17:30+0200\n" +"Last-Translator: Stanislav Meduna \n" +"Language-Team: gnokii\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: common/fbus-3810.c:517 common/fbus-6110.c:2076 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "Posiela sa SMS pre %s prostredníctvom centra %s\n" + +#: common/fbus-3810.c:621 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "Poslanie SMS zlyhalo, nový pokus (%d z %d)\n" + +#: common/fbus-3810.c:1172 +msgid "Couldn't open FB38 device: " +msgstr "Nie je mo¾né otvori» zariadenie FB38: " + +#: common/fbus-3810.c:1264 +msgid "restarting.\n" +msgstr "nový ¹tart.\n" + +#: common/fbus-3810.c:1320 +#, c-format +msgid "MT Fail %02x" +msgstr "MT chyba %02x" + +#: common/fbus-3810.c:1327 common/mbus-6160.c:733 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "CS chyba %02x != %02x" + +#: common/fbus-3810.c:1441 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 registraèná odpoveï 0x%02x\n" + +#: common/fbus-3810.c:1457 +#, c-format +msgid "0x16 Registration Response 0x%02x\n" +msgstr "0x16 registraèná odpoveï 0x%02x\n" + +#: common/fbus-3810.c:1458 +#, c-format +msgid "SIM access: %s.\n" +msgstr "Prístup k SIM: %s.\n" + +#: common/fbus-3810.c:1534 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS zapísaná na pozíciu 0x%02x\n" + +#: common/fbus-3810.c:1544 +#, c-format +msgid "SMS Store failed: 0x%02x\n" +msgstr "Zápis SMS zlyhal: 0x%02x\n" + +#: common/fbus-3810.c:1665 +msgid "PIN [possibly] entered.\n" +msgstr "PIN bol [pravdepodobne] zadaný.\n" + +#: common/fbus-3810.c:1674 +msgid "Phone powering off..." +msgstr "Telefón sa vypína..." + +#: common/fbus-3810.c:1703 +msgid "Standard Ack write failed!" +msgstr "Zápis ¹tandardného potvrdenia zlyhal!" + +#: common/fbus-3810.c:1729 +msgid "Unknown: " +msgstr "Neznáma: " + +#: common/fbus-3810.c:1731 +#, c-format +msgid "Msg Type: %02x " +msgstr "Typ správy: %02x " + +#: common/fbus-3810.c:1732 +#, c-format +msgid "Msg Len: %02x " +msgstr "Då¾ka správy: %02x " + +#: common/fbus-3810.c:1733 +#, c-format +msgid "Sequence Number: %02x " +msgstr "Sekvenèné èíslo: %02x " + +#: common/fbus-3810.c:1734 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Kontrolný súèet: %02x \n" +" " + +#: common/fbus-3810.c:1826 common/fbus-3810.c:1956 +msgid "Set Mem Loc Write failed!" +msgstr "Poslanie správy Set Mem Loc zlyhalo!" + +#: common/fbus-3810.c:1871 +msgid "TX_SendRLPFrame - write:" +msgstr "TX_SendRLPFrame - zápis:" + +#: common/fbus-3810.c:1883 +msgid "Request HangupMessage Write failed!" +msgstr "Poslanie správy Request HangupMessage zlyhalo!" + +#: common/fbus-3810.c:1895 +msgid "0x4a Write failed!" +msgstr "Poslanie správy 0x4a zlyhalo!" + +#: common/fbus-3810.c:1910 +msgid "Explore Write failed!" +msgstr "Poslanie správy Explore zlyhalo!" + +#: common/fbus-3810.c:1920 +msgid "0x3f Write failed!" +msgstr "Poslanie správy 0x3f zlyhalo!" + +#: common/fbus-3810.c:1980 +msgid "Request Mem Loc Write failed!" +msgstr "Poslanie správy Request Mem Loc zlyhalo!" + +#: common/fbus-3810.c:1993 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "Poslanie správy Request IMEI/Revision/Model zlyhalo!" + +#: common/fbus-3810.c:2036 +msgid "Send SMS header failed!" +msgstr "Poslanie SMS hlavièky zlyhalo!" + +#: common/fbus-3810.c:2095 +msgid "Store SMS header failed!" +msgstr "Zápis SMS hlavièky zlyhal!" + +#: common/fbus-3810.c:2120 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "Poslanie SMS bloku %d zlyhalo!" + +#: common/fbus-3810.c:2143 +msgid "Request SMS Mem Loc Write failed!" +msgstr "Poslanie správy SMS Mem Loc zlyhalo!" + +#: common/fbus-3810.c:2166 +msgid "Delete SMS Mem Loc write failed!" +msgstr "Poslanie správy Delete SMS Mem Loc zlyhalo!" + +#: common/fbus-3810.c:2185 +msgid "0x15 Write failed!" +msgstr "Poslanie správy 0x15 zlyhalo!" + +#: common/fbus-3810.c:2202 common/mbus-6160.c:803 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - správa je príli¹ dlhá!\n" + +#: common/fbus-3810.c:2228 common/mbus-6160.c:832 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - zápis:" + +#: common/fbus-3810.c:2241 common/fbus-3810.c:2374 common/fbus-3810.c:2388 +#: common/fbus-3810.c:2402 common/fbus-3810.c:2416 common/fbus-3810.c:2550 +#: common/fbus-3810.c:2611 common/fbus-3810.c:2670 common/fbus-3810.c:2708 +msgid "Write failed!" +msgstr "Zápis zlyhal!" + +#: common/fbus-3810.c:2255 +#, c-format +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Prichádzajúce volanie: typ %s. %02x, èíslo %s.\n" + +#: common/fbus-3810.c:2282 +msgid "0x27 Write failed!" +msgstr "Poslanie správy 0x27 zlyhalo!" + +#: common/fbus-3810.c:2330 +msgid "0x4b Write failed!" +msgstr "Poslanie správy 0x4b zlyhalo!" + +#: common/fbus-3810.c:2349 +#, c-format +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Stav: %s. Batéria: %02x Signál: %02x.\n" + +#: common/fbus-3810.c:2360 +msgid "0x10 Write failed!" +msgstr "Poslanie správy 0x10 zlyhalo!" + +#: common/fbus-3810.c:2364 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Spojenie ukonèené telefónom (správa 0x10).\n" + +#: common/fbus-3810.c:2378 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Spojenie ukonèené protistranou (alebo sie»ou).\n" + +#: common/fbus-3810.c:2392 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Spojenie ukonèené telefónom (správa 0x12).\n" + +#: common/fbus-3810.c:2406 +msgid "Incoming call answered from phone.\n" +msgstr "Telefón prijal prichádzajúci hovor.\n" + +#: common/fbus-3810.c:2420 +#, c-format +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "Spojenie nadviazané: typ %s, stavové bajty %02x %02x.\n" + +#: common/fbus-3810.c:2437 +msgid "0x2c Write failed!" +msgstr "Poslanie správy 0x2c zlyhalo!" + +#: common/fbus-3810.c:2524 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Èas. pásmo:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2591 +#, c-format +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"Prichádzajúca SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Odosielateµ: %s(Typ %02x) " +"SMS centrum: %s\n" + +#: common/fbus-3810.c:2593 +#, c-format +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" +" Då¾ka %d, Pamä» %d Èíslo %d, PID: %02x DCS: %02x Neznáme: %02x\n" + +#: common/fbus-3810.c:2686 +msgid "Mobile phone identification received:\n" +msgstr "Identifikácia mobilného telefónu prijatá:\n" + +#: common/fbus-3810.c:2687 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2689 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-3810.c:2691 +#, c-format +msgid " Revision: %s\n" +msgstr " Revízia: %s\n" + +#: common/fbus-3810.c:2759 +msgid "SMS Message Center Data:\n" +msgstr "Údaje SMS centra:\n" + +#: common/fbus-3810.c:2760 +#, c-format +msgid "Selected memory: 0x%02x\n" +msgstr "Zvolená pamä»: 0x%02x\n" + +#: common/fbus-3810.c:2761 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Správ v telefóne: 0x%02x, nepreèítaných: 0x%02x\n" + +#: common/fbus-3810.c:2763 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Správ na SIM: 0x%02x, nepreèítaných: 0x%02x\n" + +#: common/fbus-3810.c:2765 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "Odpoveï prostredníctvom vlastného centra: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2767 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Potvrdenie o doruèení: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2769 +#, c-format +msgid "Messages sent as: 0x%02x\n" +msgstr "SPrávy posielané ako: 0x%02x\n" + +#: common/fbus-3810.c:2770 +#, c-format +msgid "Message validity: 0x%02x\n" +msgstr "Platnos» správ: 0x%02x\n" + +#: common/fbus-3810.c:2771 +#, c-format +msgid "Unknown: 0x%02x\n" +msgstr "Neznáme: 0x%02x\n" + +#: common/fbus-3810.c:2774 +msgid "UnknownNumber field empty." +msgstr "Pole UnknownNumber prázdne." + +#: common/fbus-3810.c:2776 +msgid "UnknownNumber: " +msgstr "UnknownNumber: " + +#: common/fbus-3810.c:2783 +msgid "Number field empty." +msgstr "Èíselné pole prázdne." + +#: common/fbus-3810.c:2786 +msgid "Number: " +msgstr "Èíslo: " + +#: common/fbus-6110-ringtones.c:256 +msgid "File can not be opened!\n" +msgstr "Súbor nie je mo¾né otvori»!\n" + +#: common/fbus-6110.c:808 +msgid "Timeout in IR-mode\n" +msgstr "Vypr¹anie èasového intervalu v IR-re¾ime\n" + +#: common/fbus-6110.c:840 +msgid "Couldn't open FB61 infrared device" +msgstr "Nie je mo¾né otvori» FB61 infrèervené zariadenie" + +#: common/fbus-6110.c:908 +msgid "Starting IR mode...!\n" +msgstr "©tart IR re¾imu...!\n" + +#: common/fbus-6110.c:2384 +msgid "Serial flags dump:\n" +msgstr "Výpis sériových príznakov:\n" + +#: common/fbus-6110.c:2385 common/mbus-640.c:899 +#, c-format +msgid "DTR is %s.\n" +msgstr "DTR je %s.\n" + +#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387 +#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900 +msgid "up" +msgstr "aktívne" + +#: common/fbus-6110.c:2385 common/fbus-6110.c:2386 common/fbus-6110.c:2387 +#: common/fbus-6110.c:2388 common/mbus-640.c:899 common/mbus-640.c:900 +msgid "down" +msgstr "inaktívne" + +#: common/fbus-6110.c:2386 common/mbus-640.c:900 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS je %s.\n" + +#: common/fbus-6110.c:2387 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR je %s.\n" + +#: common/fbus-6110.c:2388 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS je %s.\n" + +#: common/fbus-6110.c:2423 +msgid "Setting FBUS communication...\n" +msgstr "Nastavenie FBUS komunikácie...\n" + +#: common/fbus-6110.c:2454 +msgid "Couldn't open FB61 device" +msgstr "Nie je mo¾né otvori» FB61 zariadenie" + +#: common/fbus-6110.c:2580 +msgid "Message: Call message, type 0x02:" +msgstr "Správa: Volanie, typ 0x02:" + +#: common/fbus-6110.c:2581 common/fbus-6110.c:2593 common/fbus-6110.c:2695 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Presný význam zatiaµ nie je známy, µutujeme :-(\n" + +#: common/fbus-6110.c:2591 +msgid "Message: Call message, type 0x03:" +msgstr "Správa: Volanie, typ 0x03:" + +#: common/fbus-6110.c:2592 common/fbus-6110.c:2608 common/fbus-6110.c:2626 +#: common/fbus-6110.c:2657 common/fbus-6110.c:2668 common/fbus-6110.c:2694 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Sekvenèné èíslo volania: %d\n" + +#: common/fbus-6110.c:2607 +msgid "Message: Remote end hang up.\n" +msgstr "Správa: Protistrana zavesila.\n" + +#: common/fbus-6110.c:2621 +msgid "Message: Incoming call alert:\n" +msgstr "Správa: Prichádzajúce volanie:\n" + +#: common/fbus-6110.c:2627 common/fbus-6110.c:2910 +msgid " Number: " +msgstr " Èíslo: " + +#: common/fbus-6110.c:2635 common/fbus-6110.c:2894 +msgid " Name: " +msgstr " Meno: " + +#: common/fbus-6110.c:2656 +msgid "Message: Call answered.\n" +msgstr "Správa: Volanie prijaté.\n" + +#: common/fbus-6110.c:2667 +msgid "Message: Call ended by your phone.\n" +msgstr "Správa: Volanie ukonèené va¹ím telefónom.\n" + +#: common/fbus-6110.c:2693 +msgid "Message: Call message, type 0x0a:" +msgstr "Správa: Volanie, typ 0x0a:" + +#: common/fbus-6110.c:2706 +msgid "Message: Unknown message of type 0x01\n" +msgstr "Správa: Neznáma správa typu 0x01\n" + +#: common/fbus-6110.c:2724 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Správa: SMS správa úspe¹ne odoslaná.\n" + +#: common/fbus-6110.c:2735 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Správa: Odoslanie SMS správy zlyhalo.\n" + +#: common/fbus-6110.c:2744 +msgid "Message: SMS Message Received\n" +msgstr "Správa: SMS správa prijatá\n" + +#: common/fbus-6110.c:2745 common/fbus-6110.c:4102 +#, c-format +msgid " SMS center number: %s\n" +msgstr " Èíslo SMS centra: %s\n" + +#: common/fbus-6110.c:2749 common/fbus-6110.c:4103 +#, c-format +msgid " Remote number: %s\n" +msgstr " Èíslo odosielateµa: %s\n" + +#: common/fbus-6110.c:2750 +#, c-format +msgid " Date: %s\n" +msgstr " Dátum: %s\n" + +#: common/fbus-6110.c:2751 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:2766 +msgid "Message: SMS Center correctly set.\n" +msgstr "Správa: SMS centrum korektne nastavené.\n" + +#: common/fbus-6110.c:2782 +msgid "Message: SMS Center received:\n" +msgstr "Správa: SMS centrum prijaté:\n" + +#: common/fbus-6110.c:2783 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Názov SMS centra je %s\n" + +#: common/fbus-6110.c:2784 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " Èíslo SMS centra je %s\n" + +#: common/fbus-6110.c:2786 +msgid " SMS Center message format is " +msgstr " Formát správ SMS centra je " + +#: common/fbus-6110.c:2791 gnokii/gnokii.c:1021 xgnokii/xgnokii.c:525 +#: xgnokii/xgnokii.c:554 xgnokii/xgnokii.c:1376 +msgid "Text" +msgstr "Text" + +#: common/fbus-6110.c:2795 gnokii/gnokii.c:1025 xgnokii/xgnokii.c:529 +#: xgnokii/xgnokii.c:1390 +msgid "Paging" +msgstr "Paging" + +#: common/fbus-6110.c:2799 gnokii/gnokii.c:1029 xgnokii/xgnokii.c:533 +#: xgnokii/xgnokii.c:1383 +msgid "Fax" +msgstr "Fax" + +#: common/fbus-6110.c:2803 gnokii/gnokii.c:1034 +msgid "Email" +msgstr "Email" + +#: common/fbus-6110.c:2807 common/fbus-6110.c:2841 common/fbus-6110.c:4324 +#: common/fbus-6110.c:4817 gnokii/gnokii.c:1046 gnokii/gnokii.c:1080 +msgid "Unknown" +msgstr "Neznámy" + +#: common/fbus-6110.c:2812 +msgid " SMS Center message validity is " +msgstr " Platnos» správ SMS centra je " + +#: common/fbus-6110.c:2817 gnokii/gnokii.c:1056 +msgid "1 hour" +msgstr "1 hodina" + +#: common/fbus-6110.c:2821 gnokii/gnokii.c:1060 +msgid "6 hours" +msgstr "6 hodín" + +#: common/fbus-6110.c:2825 gnokii/gnokii.c:1064 +msgid "24 hours" +msgstr "24 hodín" + +#: common/fbus-6110.c:2829 gnokii/gnokii.c:1068 +msgid "72 hours" +msgstr "72 hodín" + +#: common/fbus-6110.c:2833 gnokii/gnokii.c:1072 xgnokii/xgnokii.c:577 +#: xgnokii/xgnokii.c:1455 +msgid "1 week" +msgstr "1 tý¾deò" + +#: common/fbus-6110.c:2837 gnokii/gnokii.c:1076 +msgid "Maximum time" +msgstr "Maximálny èas" + +#: common/fbus-6110.c:2859 +msgid "Message: SMS Center error received:\n" +msgstr "Správa: Prijatá chyba SMS centra:\n" + +#: common/fbus-6110.c:2860 +msgid " The request for SMS Center failed.\n" +msgstr " ®iados» o SMS centrum zlyhala.\n" + +#: common/fbus-6110.c:2871 +msgid "Unknown message!\n" +msgstr "Naznáma správa!\n" + +#: common/fbus-6110.c:2893 +msgid "Message: Phonebook entry received:\n" +msgstr "Správa: Príjem polo¾ky telefónneho zoznamu:\n" + +#: common/fbus-6110.c:2930 +msgid " Date: " +msgstr " Dátum: " + +#: common/fbus-6110.c:2932 +msgid " Time: " +msgstr " Èas: " + +#: common/fbus-6110.c:2945 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Správa: Prijatá chyba polo¾ky telefónneho zoznamu:\n" + +#: common/fbus-6110.c:2953 +msgid " Invalid memory type!\n" +msgstr " Chybný typ pamäti!\n" + +#: common/fbus-6110.c:2963 common/fbus-6110.c:3001 +msgid " Unknown error!\n" +msgstr " Neznáma chyba!\n" + +#: common/fbus-6110.c:2974 +msgid "Message: Phonebook written correctly.\n" +msgstr "Správa: Polo¾ka telefónneho zoznamu úspe¹ne zapísaná.\n" + +#: common/fbus-6110.c:2991 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "Správa: Polo¾ka telefónneho zoznamu nebola zapísaná - meno je príli¹ dlhé.\n" + +#: common/fbus-6110.c:3012 +msgid "Message: Memory status received:\n" +msgstr "Správa: Príjatý stav pamäti:\n" + +#: common/fbus-6110.c:3014 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Typ pamäti: %s\n" + +#: common/fbus-6110.c:3015 +#, c-format +msgid " Used: %d\n" +msgstr " Vyu¾ité: %d\n" + +#: common/fbus-6110.c:3016 +#, c-format +msgid " Free: %d\n" +msgstr " Voµné: %d\n" + +#: common/fbus-6110.c:3031 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "Správa: Chyba stavu pamäti, telefón je pravdepodobne vypnutý.\n" + +#: common/fbus-6110.c:3038 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" +"Správa: Chyba stavu pamäti, telefón tento typ nepodporuje.\n" + +#: common/fbus-6110.c:3045 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "Správa: Chyba stavu pamäti, èaká sa na bezpeènostný kód.\n" + +#: common/fbus-6110.c:3052 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" +"Správa: Neznáma chyba stavu pamäti, subkód (MessageBuffer[4]) = %02x\n" + +#: common/fbus-6110.c:3069 +msgid "Message: Caller group logo etc.\n" +msgstr "Správa: Logo skupiny volajúcich a.p.\n" + +#: common/fbus-6110.c:3070 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Názov skupiny: %s\n" + +#: common/fbus-6110.c:3090 +msgid "Message: Caller group data received but not requested!\n" +msgstr "Správa: Údaje o skupine volajúcich prijaté, ale neboli po¾adované!\n" + +#: common/fbus-6110.c:3100 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "Správa: Chyba pri pokuse získa» údaje o skupine volajúcich.\n" + +#: common/fbus-6110.c:3108 +msgid "Message: Caller group data set correctly.\n" +msgstr "Správa: Údaje o skupine volajúcich úspe¹ne nastavené.\n" + +#: common/fbus-6110.c:3116 +msgid "Message: Error attempting to set caller group data\n" +msgstr "Správa: Chyba pri pokuse zapísa» údaje o skupine volajúcich.\n" + +#: common/fbus-6110.c:3127 +msgid "Message: Speed dial entry received:\n" +msgstr "Správa: Polo¾ka skráteného volania prijatá:\n" + +#: common/fbus-6110.c:3128 +#, c-format +msgid " Location: %d\n" +msgstr " Pozícia: %d\n" + +#: common/fbus-6110.c:3129 +#, c-format +msgid " MemoryType: %s\n" +msgstr " Typ pamäti: %s\n" + +#: common/fbus-6110.c:3130 +#, c-format +msgid " Number: %d\n" +msgstr " Èíslo: %d\n" + +#: common/fbus-6110.c:3140 +msgid "Message: Speed dial entry error\n" +msgstr "Správa: Chyba polo¾ky skráteného volania\n" + +#: common/fbus-6110.c:3150 +msgid "Message: Speed dial entry set.\n" +msgstr "Správa: Polo¾ka skráteného volania zapísaná.\n" + +#: common/fbus-6110.c:3160 +msgid "Message: Speed dial entry setting error.\n" +msgstr "Správa: Chyba pri zápise polo¾ky skráteného volanie.\n" + +#: common/fbus-6110.c:3170 +msgid "Message: Unknown message of type 0x03\n" +msgstr "Správa: Neznáma správa typu 0x03\n" + +#: common/fbus-6110.c:3186 +msgid "Message: Phone status received:\n" +msgstr "Správa: Prijatý stav telefónu:\n" + +#: common/fbus-6110.c:3187 +msgid " Mode: " +msgstr " Re¾im: " + +#: common/fbus-6110.c:3193 +msgid "registered within the network\n" +msgstr "registrovaný v sieti\n" + +#: common/fbus-6110.c:3202 +msgid "call in progress\n" +msgstr "prebieha volanie\n" + +#: common/fbus-6110.c:3208 +msgid "waiting for security code\n" +msgstr "èakajúci na bezpeènostný kód\n" + +#: common/fbus-6110.c:3214 +msgid "powered off\n" +msgstr "vypnutý\n" + +#: common/fbus-6110.c:3220 common/fbus-6110.c:3242 +msgid "unknown\n" +msgstr "neznámy\n" + +#: common/fbus-6110.c:3224 +msgid " Power source: " +msgstr " Napájania: " + +#: common/fbus-6110.c:3230 +msgid "AC/DC\n" +msgstr "sie»\n" + +#: common/fbus-6110.c:3236 +msgid "battery\n" +msgstr "batéria\n" + +#: common/fbus-6110.c:3246 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Nabitie batérie: %d\n" + +#: common/fbus-6110.c:3247 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Sila signálu: %d\n" + +#: common/fbus-6110.c:3259 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Správa: Neznáma správa typu 0x04\n" + +#: common/fbus-6110.c:3275 +msgid "Message: Profile feature change result.\n" +msgstr "Správa: Výsledok zmeny profilu.\n" + +#: common/fbus-6110.c:3333 +msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n" +msgstr "Správa: Úvodné logo, privítanie a privítanie predajcu prijaté.\n" + +#: common/fbus-6110.c:3356 +msgid "Startup logo supported - " +msgstr "Úvodné logo podporované - " + +#: common/fbus-6110.c:3359 +msgid "currently set\n" +msgstr "nastavené\n" + +#: common/fbus-6110.c:3361 common/fbus-6110.c:3375 common/fbus-6110.c:3389 +msgid "currently empty\n" +msgstr "prázdne\n" + +#: common/fbus-6110.c:3370 +msgid "Startup Text supported - " +msgstr "Privítanie podporované - " + +#: common/fbus-6110.c:3373 common/fbus-6110.c:3387 +#, c-format +msgid "currently set to \"%s\"\n" +msgstr "nastavené na \"%s\"\n" + +#: common/fbus-6110.c:3384 +msgid "Dealer welcome note supported - " +msgstr "Privítanie predajcu podporované - " + +#: common/fbus-6110.c:3399 +msgid "Message: Startup logo received but not requested!\n" +msgstr "Správa: Úvodné logo prijaté, ale nepo¾adované!\n" + +#: common/fbus-6110.c:3408 +msgid "" +"Message: Startup logo, welcome note or dealer welcome note correctly set.\n" +msgstr "" +"Správa: Úvodné logo, privítanie alebo privítanie predajcu úspe¹ne nastavené.\n" + +#: common/fbus-6110.c:3434 +msgid "Message: Operator logo correctly set.\n" +msgstr "Správa: Logo operátora úspe¹ne nastavené.\n" + +#: common/fbus-6110.c:3443 +msgid "Message: Error setting operator logo!\n" +msgstr "Správa: Chyba pri nastavení loga operátora!\n" + +#: common/fbus-6110.c:3453 +msgid "Message: Operator Logo received.\n" +msgstr "Správa: Logo operátora prijaté.\n" + +#: common/fbus-6110.c:3470 +msgid "Message: Operator logo received but not requested!\n" +msgstr "Správa: Logo operátora prijaté, ale nepo¾adované!\n" + +#: common/fbus-6110.c:3479 +msgid "Message: Error getting operator logo!\n" +msgstr "Správa: Chyba pri získaní loga operátora!\n" + +#: common/fbus-6110.c:3497 +msgid "Message: Security Code status received: " +msgstr "Správa: Stav bezpeènostného kódu prijatý: " + +#: common/fbus-6110.c:3503 gnokii/gnokii.c:1476 +msgid "waiting for Security Code.\n" +msgstr "èaká sa na bzpeènostný kód.\n" + +#: common/fbus-6110.c:3508 gnokii/gnokii.c:1481 +msgid "waiting for PIN.\n" +msgstr "èaká sa na PIN.\n" + +#: common/fbus-6110.c:3513 gnokii/gnokii.c:1486 +msgid "waiting for PIN2.\n" +msgstr "èaká sa na PIN2.\n" + +#: common/fbus-6110.c:3518 gnokii/gnokii.c:1491 +msgid "waiting for PUK.\n" +msgstr "èaká sa na PUK.\n" + +#: common/fbus-6110.c:3523 gnokii/gnokii.c:1496 +msgid "waiting for PUK2.\n" +msgstr "èaká sa na PUK2.\n" + +#: common/fbus-6110.c:3528 gnokii/gnokii.c:1501 +msgid "nothing to enter.\n" +msgstr "netreba niè zada».\n" + +#: common/fbus-6110.c:3533 gnokii/gnokii.c:1506 +msgid "Unknown!\n" +msgstr "Neznámy!\n" + +#: common/fbus-6110.c:3545 +msgid "Message: Security code accepted.\n" +msgstr "Správa: Bezpeènostný kód akceptovaný.\n" + +#: common/fbus-6110.c:3555 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "Správa: Bezpeènostný kód je chybný. Vy nie ste môj pán :-)\n" + +#: common/fbus-6110.c:3582 +msgid "Message: Network informations:\n" +msgstr "Správa: Informácie o sieti:\n" + +#: common/fbus-6110.c:3584 +#, c-format +msgid " CellID: %s\n" +msgstr " ID bunky: %s\n" + +#: common/fbus-6110.c:3585 +#, c-format +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: common/fbus-6110.c:3586 +#, c-format +msgid " Network code: %s\n" +msgstr " Kód siete: %s\n" + +#: common/fbus-6110.c:3587 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Názov siete: %s (%s)\n" + +#: common/fbus-6110.c:3590 +msgid " Status: " +msgstr " Stav: " + +#: common/fbus-6110.c:3593 +msgid "home network selected" +msgstr "zvolená domáca sie»" + +#: common/fbus-6110.c:3594 +msgid "roaming network" +msgstr "roamingová sie»" + +#: common/fbus-6110.c:3595 +msgid "requesting network" +msgstr "¾iados» o sie»" + +#: common/fbus-6110.c:3596 +msgid "not registered in the network" +msgstr "neregistrovaný v sieti" + +#: common/fbus-6110.c:3597 +msgid "unknown" +msgstr "neznámy" + +#: common/fbus-6110.c:3602 +#, c-format +msgid " Network selection: %s\n" +msgstr " Výber siete: %s\n" + +#: common/fbus-6110.c:3602 +msgid "manual" +msgstr "manuálny" + +#: common/fbus-6110.c:3602 +msgid "automatic" +msgstr "automatický" + +#: common/fbus-6110.c:3612 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "Správa: Neznáma správa typu 0x0a\n" + +#: common/fbus-6110.c:3650 +msgid "Unknown message of type 0x0d.\n" +msgstr "Neznáma správa typu 0x0d\n" + +#: common/fbus-6110.c:3669 +msgid "Message: Date and time set correctly\n" +msgstr "Správa: Dátum a èas úspe¹ne nastavené\n" + +#: common/fbus-6110.c:3679 common/fbus-6110.c:3725 +msgid "Message: Date and time set error\n" +msgstr "Správa: Chyba pri nastavení dátumu a èasu\n" + +#: common/fbus-6110.c:3699 +msgid "Message: Date and time\n" +msgstr "Správa: Dátum a èas\n" + +#: common/fbus-6110.c:3700 common/fbus-6110.c:3853 gnokii/gnokii.c:1839 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Èas: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3701 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Dátum: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:3715 +msgid "Message: Alarm set correctly\n" +msgstr "Správa: Budík úspe¹ne nastavený\n" + +#: common/fbus-6110.c:3737 +msgid "Message: Alarm\n" +msgstr "Správa: Budík\n" + +#: common/fbus-6110.c:3738 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Budík: %02d:%02d\n" + +#: common/fbus-6110.c:3739 +#, c-format +msgid " Alarm is %s\n" +msgstr " Budík je %s\n" + +#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579 +#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582 +#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585 +msgid "on" +msgstr "zapnutý" + +#: common/fbus-6110.c:3739 gnokii/gnokii.c:2578 gnokii/gnokii.c:2579 +#: gnokii/gnokii.c:2580 gnokii/gnokii.c:2581 gnokii/gnokii.c:2582 +#: gnokii/gnokii.c:2583 gnokii/gnokii.c:2584 gnokii/gnokii.c:2585 +msgid "off" +msgstr "vypnutý" + +#: common/fbus-6110.c:3755 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Správa: Neznáma správa typu 0x11\n" + +#: common/fbus-6110.c:3778 +msgid "Message: Calendar note write succesfull!\n" +msgstr "Správa: Polo¾ka kalendára úspe¹ne zapísaná!\n" + +#: common/fbus-6110.c:3788 common/fbus-6110.c:3798 +msgid "Message: Calendar note write failed!\n" +msgstr "Správa: Zápis polo¾ky kalendára zlyhal!\n" + +#: common/fbus-6110.c:3807 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "Neznáma správa typu 0x13 a subtypu 0x65\n" + +#: common/fbus-6110.c:3847 +msgid "Message: Calendar note received.\n" +msgstr "Správa: Polo¾ka kalendára prijatá.\n" + +#: common/fbus-6110.c:3849 gnokii/gnokii.c:1835 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Dátum: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3860 gnokii/gnokii.c:1844 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Dátum upozornenia: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3864 gnokii/gnokii.c:1848 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Èas upozornenia: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3869 +#, c-format +msgid " Type: %d\n" +msgstr " Typ: %d\n" + +#: common/fbus-6110.c:3870 gnokii/gnokii.c:1853 +#, c-format +msgid " Text: %s\n" +msgstr " Text: %s\n" + +#: common/fbus-6110.c:3873 gnokii/gnokii.c:1856 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefón: %s\n" + +#: common/fbus-6110.c:3883 +msgid "Message: Calendar note not available\n" +msgstr "Správa: Polo¾ka kalendára nie je k dispozícii\n" + +#: common/fbus-6110.c:3893 +msgid "Message: Calendar note error\n" +msgstr "Správa: Chyba polo¾ky kalendára\n" + +#: common/fbus-6110.c:3915 +msgid "Message: Calendar note deleted\n" +msgstr "Správa: Polo¾ka kalendára vymazaná\n" + +#: common/fbus-6110.c:3926 +msgid "Message: Calendar note can't be deleted\n" +msgstr "Správa: Polo¾ka kalendára nemô¾e by» vymazaná\n" + +#: common/fbus-6110.c:3936 +msgid "Message: Calendar note deleting error\n" +msgstr "Správa: Chyba pri mazaní polo¾ky kalendára\n" + +#: common/fbus-6110.c:3952 +msgid "Message: Calendar Alarm active\n" +msgstr "Správa: Upozornenie kalendára aktívne\n" + +#: common/fbus-6110.c:3953 +#, c-format +msgid " Item number: %d\n" +msgstr " Èíslo polo¾ky: %d\n" + +#: common/fbus-6110.c:3961 +msgid "Message: Unknown message of type 0x13\n" +msgstr "Správa: Neznáma správa typu 0x13\n" + +#: common/fbus-6110.c:4024 +msgid "Concatenated message!!!\n" +msgstr "Zlo¾ená správa!!!\n" + +#: common/fbus-6110.c:4045 +#, c-format +msgid "Number: %d\n" +msgstr "Èíslo: %d\n" + +#: common/fbus-6110.c:4050 +msgid "Message: Outbox message (mobile originated)\n" +msgstr "Správa: Odchádzajúca správa\n" + +#: common/fbus-6110.c:4053 +msgid "Sent\n" +msgstr "Odoslaná\n" + +#: common/fbus-6110.c:4055 +msgid "Not sent\n" +msgstr "Neodoslaná\n" + +#: common/fbus-6110.c:4059 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "Správa: Príjem SMS\n" + +#: common/fbus-6110.c:4062 +msgid "Delivery Report\n" +msgstr "Potvrdenie o doruèení\n" + +#: common/fbus-6110.c:4064 +msgid "Unknown type\n" +msgstr "Neznámy typ\n" + +#: common/fbus-6110.c:4067 +msgid "Read\n" +msgstr "Preèítaná\n" + +#: common/fbus-6110.c:4069 +msgid "Not read\n" +msgstr "Nepreèítaná\n" + +#: common/fbus-6110.c:4071 +#, c-format +msgid " Date: %s " +msgstr " Dátum: %s " + +#: common/fbus-6110.c:4079 common/fbus-6110.c:4095 gnokii/gnokii.c:1210 +#: gnokii/gnokii.c:1223 gnokii/gnokii.c:1250 +#, c-format +msgid "%02d00" +msgstr "%02d00" + +#: common/fbus-6110.c:4086 +#, c-format +msgid " SMSC response date: %s " +msgstr " Dátum odpovede SMSC: %s " + +#: common/fbus-6110.c:4170 +msgid "Delivered" +msgstr "Doruèená" + +#: common/fbus-6110.c:4175 +msgid "SM received by the SME" +msgstr "Správa prijatá SME" + +#: common/fbus-6110.c:4178 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "" +"SC poslal správu SME, ale SC nie je schopné potvrdi» doruèenie" + +#: common/fbus-6110.c:4181 +msgid "SM replaced by the SC" +msgstr "Správa prepísaná SC" + +#: common/fbus-6110.c:4189 +msgid "Failed" +msgstr "Zlyhala" + +#: common/fbus-6110.c:4196 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "Doèasná chyba, SC sa nebude viac pokú¹a» o prenos\n" + +#: common/fbus-6110.c:4201 common/fbus-6110.c:4294 +msgid "Congestion" +msgstr "Pre»a¾enie" + +#: common/fbus-6110.c:4205 common/fbus-6110.c:4298 +msgid "SME busy" +msgstr "SME obsadené" + +#: common/fbus-6110.c:4209 common/fbus-6110.c:4302 +msgid "No response from SME" +msgstr "SME neodpovedal" + +#: common/fbus-6110.c:4213 common/fbus-6110.c:4306 +msgid "Service rejected" +msgstr "Slu¾ba odmietnutá" + +#: common/fbus-6110.c:4217 common/fbus-6110.c:4253 common/fbus-6110.c:4310 +msgid "Quality of service not aviable" +msgstr "Kvalita slu¾ieb nedostupná" + +#: common/fbus-6110.c:4221 common/fbus-6110.c:4314 +msgid "Error in SME" +msgstr "Chyba v SME" + +#: common/fbus-6110.c:4225 common/fbus-6110.c:4277 common/fbus-6110.c:4318 +#: common/fbus-6110.c:4328 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "Rezervované/SC ¹pecifické: %x" + +#: common/fbus-6110.c:4232 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "Trvalá chyba, SC sa nebude viac pokú¹a» o prenos\n" + +#: common/fbus-6110.c:4237 +msgid "Remote procedure error" +msgstr "Chyba procedúry protistrany" + +#: common/fbus-6110.c:4241 +msgid "Incompatibile destination" +msgstr "Nekompatibilný príjemca" + +#: common/fbus-6110.c:4245 +msgid "Connection rejected by SME" +msgstr "Spojenie odmietnuté SME" + +#: common/fbus-6110.c:4249 +msgid "Not obtainable" +msgstr "Nedá sa získa»" + +#: common/fbus-6110.c:4257 +msgid "No internetworking available" +msgstr "Internetworking nedostupný" + +#: common/fbus-6110.c:4261 +msgid "SM Validity Period Expired" +msgstr "Platnos» správy vypr¹ala" + +#: common/fbus-6110.c:4265 +msgid "SM deleted by originating SME" +msgstr "Správa vymazaná odosielajúcim SME" + +#: common/fbus-6110.c:4269 +msgid "SM Deleted by SC Administration" +msgstr "Správa zmazaná správcom SC" + +#: common/fbus-6110.c:4273 +msgid "SM does not exist" +msgstr "SPráva neexistuje" + +#: common/fbus-6110.c:4286 +msgid "Pending" +msgstr "Èakajúca" + +#: common/fbus-6110.c:4290 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "Doèasná chyba, SC sa stále pokú¹a správu doruèi»\n" + +#: common/fbus-6110.c:4356 +msgid "Message: SMS reading failed.\n" +msgstr "Správa: Èítanie SMS zlyhalo.\n" + +#: common/fbus-6110.c:4364 +msgid " Invalid location!\n" +msgstr " Chybná pozícia!\n" + +#: common/fbus-6110.c:4374 +msgid " Empty SMS location.\n" +msgstr " Prázdna pozícia.\n" + +#: common/fbus-6110.c:4387 +msgid "Message: SMS deleted successfully.\n" +msgstr "Správa: SMS úspe¹ne zmazaná.\n" + +#: common/fbus-6110.c:4397 +msgid "Message: SMS Status Received\n" +msgstr "Správa: Príjem stavu SMS\n" + +#: common/fbus-6110.c:4398 +#, c-format +msgid " The number of messages: %d\n" +msgstr " Poèet správ: %d\n" + +#: common/fbus-6110.c:4399 +#, c-format +msgid " Unread messages: %d\n" +msgstr " Nepreèítaných správ: %d\n" + +#: common/fbus-6110.c:4411 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "Správa: Chyba SMS stavu, pravdepodobne nebol zadaný PIN\n" + +#: common/fbus-6110.c:4442 +msgid "Message: Netmonitor correctly set.\n" +msgstr "Správa: Monitor siete úspe¹ne zapnutý.\n" + +#: common/fbus-6110.c:4452 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "Správa: Menu sie»ového monitora %d prijaté:\n" + +#: common/fbus-6110.c:4468 +msgid "Unknown message of type 0x40.\n" +msgstr "Neznáma správa typu 0x40.\n" + +#: common/fbus-6110.c:4490 +msgid "Message: Mobile phone identification received:\n" +msgstr "Správa: Identifikácia mobilného telefónu prijatá:\n" + +#: common/fbus-6110.c:4491 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-6110.c:4493 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-6110.c:4495 +#, c-format +msgid " Production Code: %s\n" +msgstr " Výrobné èíslo: %s\n" + +#: common/fbus-6110.c:4497 +#, c-format +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: common/fbus-6110.c:4499 +#, c-format +msgid " Firmware: %s\n" +msgstr " Firmware: %s\n" + +#: common/fbus-6110.c:4505 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Magické bajty: %02x %02x %02x %02x\n" + +#: common/fbus-6110.c:4525 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "[Prijaté potvrdenie typu %02x, sekv.: %2x]\n" + +#: common/fbus-6110.c:4543 +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "Správa: Telefón sa zapína - sekv. 1.\n" + +#: common/fbus-6110.c:4567 +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "Správa: Telefón sa zapína - sekv. 2.\n" + +#: common/fbus-6110.c:4583 +msgid "Message: Unknown message.\n" +msgstr "Správa: Neznáma správa.\n" + +#: common/fbus-6110.c:4681 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "Preru¹ená viacrámcová správa - ignorovaná !!!\n" + +#: common/fbus-6110.c:4682 +msgid "Please report it ...\n" +msgstr "Prosím ohláste to...\n" + +#: common/fbus-6110.c:4749 +msgid "Bad checksum!\n" +msgstr "Chybný kontrolný súèet!\n" + +#: common/fbus-6110.c:4811 xgnokii/xgnokii.c:1690 +msgid "Phone" +msgstr "Telefón" + +#: common/fbus-6110.c:4814 +msgid "PC" +msgstr "PC" + +#: common/fbus-6110.c:4832 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Cieµ správy: %s\n" + +#: common/fbus-6110.c:4833 +#, c-format +msgid "Msg Source: %s\n" +msgstr "Zdroj správy: %s\n" + +#: common/fbus-6110.c:4835 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "Typ správy: %02x\n" + +#: common/fbus-6110.c:4837 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "Neznáma správa: %02x\n" + +#: common/fbus-6110.c:4838 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" +"Då¾ka správy: %02x\n" +"Telefón: " + +#: common/fbus-6110.c:4909 +msgid "PC: " +msgstr "PC:" + +#: common/fbus-6110.c:4983 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "[Posiela sa potvrdenie typu %02x, sekv.: %x]\n" + +#: common/mbus-6160.c:763 +msgid "Couldn't open MB61 device: " +msgstr "Nie je mo¾né otvori» zariadenie MB61: " + +#: common/mbus-640.c:792 +msgid "Phone: " +msgstr "Telefón: " + +#: common/mbus-640.c:822 common/mbus-640.c:922 +msgid "PC : " +msgstr "PC: " + +#: common/mbus-640.c:832 common/mbus-640.c:935 +msgid "Write error!\n" +msgstr "Chyba zápisu!\n" + +#: common/mbus-640.c:859 +msgid "Setting MBUS communication...\n" +msgstr "Nastavenie MBUS komunikácie...\n" + +#: common/rlp-common.c:669 +msgid "Unknown!!! " +msgstr "Neznámy!!! " + +#: common/rlp-common.c:734 +msgid "BAD" +msgstr "CHYBA" + +#: common/rlp-common.c:856 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "Kontrolný súèet rámca je chybný. Ignoruje sa...\n" + +#: common/rlp-common.c:969 +msgid "Send_TXU()\n" +msgstr "Send_TXU()\n" + +#: common/rlp-common.c:970 +#, c-format +msgid "XID_R_State=%d\n" +msgstr "XID_R_State=%d\n" + +#: common/rlp-common.c:1334 +msgid "RLP state 0.\n" +msgstr "RLP stav 0.\n" + +#: common/rlp-common.c:1371 +msgid "RLP state 1.\n" +msgstr "RLP stav 1.\n" + +#: common/rlp-common.c:1436 +msgid "RLP state 2.\n" +msgstr "RLP stae 2.\n" + +#: common/rlp-common.c:1470 +msgid "UA received in RLP state 2.\n" +msgstr "UA prijatý v RLP stave 2.\n" + +#: common/rlp-common.c:1527 +msgid "RLP state 3.\n" +msgstr "RLP stav 3.\n" + +#: common/rlp-common.c:1585 +msgid "RLP state 4.\n" +msgstr "RLP stav 4.\n" + +#: common/rlp-common.c:1695 +msgid "RLP state 5.\n" +msgstr "RLP stav 5.\n" + +#: common/rlp-common.c:1754 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "RLP stav 6 - zatiaµ neimplementovaný!\n" + +#: common/rlp-common.c:1784 +msgid "RLP state 7.\n" +msgstr "RLP stav 7.\n" + +#: common/rlp-common.c:1826 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "DEBUG: Neznámy RLP stav!\n" + +#: gnokii/gnokii.c:168 +#, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII verzia %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Kompilácia: %s %s pre %s na %s \n" + +#: gnokii/gnokii.c:182 +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start end\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start end\n" +" gnokii --deletesms memory_type start end\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destionation logofile [network " +"code]\n" +" gnokii --setlogo logofile [network code]\n" +" gnokii --setlogo logofile [caller group number] [group name]\n" +" gnokii --setlogo text [startup text]\n" +" gnokii --setlogo dealer [dealer startup text]\n" +" gnokii --getlogo logofile {caller|op|startup} [caller group " +"number]\n" +" gnokii --sendringtone destionation rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +msgstr "" +" Pou¾itie: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory typ_pamäti zaèiatok koniec\n" +" gnokii --writephonebook\n" +" gnokii --getspeeddial èíslo\n" +" gnokii --setspeeddial èíslo typ_pamäti pozícia\n" +" gnokii --getsms typ_pamäti zaèiatok koniec\n" +" gnokii --deletesms typ_pamäti zaèiatok koniec\n" +" gnokii --sendsms cieµ [--smsc èíslo_centra_správ |\n" +" --smscno index_centra_správ] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --getsmsc èíslo_centra_správ\n" +" gnokii --setdatetime [RRRR [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice èíslo\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} cieµ logo_súbor [kód_siete]\n" +" gnokii --setlogo logo_súbor [kód_siete]\n" +" gnokii --setlogo logo_súbor [èíslo_skupiny] [názov_skupiny]\n" +" gnokii --setlogo text [úvodný_text]\n" +" gnokii --setlogo dealer [úvodný_text_predajcu]\n" +" gnokii --getlogo logofile {caller|op|startup} [èíslo_skupiny]\n" +" gnokii --sendringtone cieµ rtttl_súbor\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [èíslo]\n" + +#: gnokii/gnokii.c:218 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" + +#: gnokii/gnokii.c:223 +msgid "" +"\n" +" --help display usage information.\n" +"\n" +" --monitor continually updates phone status to stderr.\n" +"\n" +" --version displays version and copyright information.\n" +"\n" +" --getmemory reads specificed memory location from phone.\n" +" Valid memory types are:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook reads data from stdin and writes to phonebook.\n" +" Uses the same format as provided by the output " +"of\n" +" the getphonebook command.\n" +"\n" +" --getspeeddial reads speed dial from the specified location.\n" +"\n" +" --setspeeddial specify speed dial.\n" +"\n" +" --getsms gets SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +" Entries are dumped to stdout.\n" +"\n" +" --deletesms deletes SMS messages from specified memory type\n" +" starting at entry [start] and ending at [end].\n" +"\n" +" --sendsms sends an SMS message to [destination] via\n" +" [message_center_number] or SMSC number taken " +"from\n" +" phone memory from address " +"[message_center_index].\n" +" If this argument is ommited SMSC number is " +"taken\n" +" from phone memory from location 1. Message text\n" +" is taken from stdin. This function has had\n" +" limited testing and may not work at all on your\n" +" network. Meaning of other optional parameters:\n" +" [-r] - request for delivery report\n" +" [-C n] - Class Message n, where n can be 0..3\n" +" [-v n] - validity in minutes\n" +" [--long n] - send no more then n characters,\n" +" default is 160\n" +"\n" +" --getsmsc show the SMSC number from location\n" +" [message_center_number].\n" +"\n" +" --setdatetime set the date and the time of the phone.\n" +"\n" +" --getdatetime shows current date and time in the phone.\n" +"\n" +" --setalarm set the alarm of the phone.\n" +"\n" +" --getalarm shows current alarm.\n" +"\n" +" --dialvoice initiate voice call.\n" +"\n" +" --getcalendarnote get the note with number index from calendar.\n" +" [-v] - output in vCalendar 1.0 format\n" +"\n" +" --writecalendarnote write the note to calendar.\n" +"\n" +" --deletecalendarnote delete the note with number [index]\n" +" from calendar.\n" +"\n" +" --getdisplaystatus shows what icons are displayed.\n" +"\n" +" --netmonitor setting/querying netmonitor mode.\n" +"\n" +" --identify get IMEI, model and revision\n" +"\n" +" --senddtmf send DTMF sequence\n" +"\n" +" --sendlogo send the logofile to destination as operator\n" +" or CLI logo\n" +"\n" +" --setlogo set caller, startup or operator logo\n" +"\n" +" --getlogo get caller, startup or operator logo\n" +"\n" +" --sendringtone send the rtttlfile to destination as ringtone\n" +"\n" +" --reset [soft|hard] resets the phone.\n" +"\n" +" --getprofile [number] show settings for selected(all) profile(s)\n" +"\n" +msgstr "" +"\n" +" --help zobrazi» informáciu o pou¾ití.\n" +"\n" +" --monitor priebe¾ne vypisova» stav telefónu na ¹tandardný\n" +" chybový výstup.\n" +"\n" +" --version zobrazi» verziu a informáciu o copyrighte.\n" +"\n" +" --getmemory preèíta» zadanú pamä»ovú pozíciu z telefónu.\n" +" Platné typy pamäti sú:\n" +" ME, SM, FD, ON, EN, DC, RC, MC, LD\n" +"\n" +" --writephonebook preèíta» údaje zo ¹tandardného vstupu a zapísa».\n" +" ich do telefónneho zoznamu. Pou¾itý formát je\n" +" zhodný s výstupným formátom príkazu getphonebook.\n" +"\n" +" --getspeeddial preèíta» definíciu skráteného volania zo zadanej\n" +" pozície.\n" +"\n" +" --setspeeddial zadefinova» zrýchlené volanie.\n" +"\n" +" --getsms preèíta» krátke správy zo zadaného typu pamäti\n" +" od pozície [zaèiatok] po [koniec]. Záznamy sa\n" +" zapí¹u na ¹tandardný výstup.\n" +"\n" +" --deletesms zmaza» krátke správy zo zadaného typu pamäti\n" +" od pozície [zaèiatok] po [koniec].\n" +"\n" +" --sendsms posla» krátku správu pre [cieµ] prostredníctvom\n" +" [èísla_centra_správ] alebo èísla SMSC na pozícii\n" +" [index_centa_správ] v pamäti telefónu.\n" +" Pokiaµ je tento argument vynechaný, èíslo sa\n" +" preèíta z pozície 1 pamäti telefónu. Text správy\n" +" sa preèíta zo ¹tandardného vstupu. Táto funkcia\n" +" bola len èiastoène testovaná a vo va¹ej sieti\n" +" nemusí fungova». Význam ostatných voliteµných\n" +" parametrov je::\n" +" [-r] - vy¾iada» potvrdenie o doruèení\n" +" [-C n] - trieda správy n, kde n je 0 a¾ 3\n" +" [-v n] - èas platnosti v minútach\n" +" [--long n] - neposiela» viac ako n znakov,\n" +" prednastavená hodnota je 160\n" +"\n" +" --getsmsc ukáza» èíslo centra správ na pozícii\n" +" [èíslo_centra_správ].\n" +"\n" +" --setdatetime nastavi» dátum a èas v telefóne.\n" +"\n" +" --getdatetime zobrazi» dátum a èas telefónu.\n" +"\n" +" --setalarm nastavi» budík v telefóne.\n" +"\n" +" --getalarm zobrazi» aktuálny budík.\n" +"\n" +" --dialvoice zaèa» hlasové volanie.\n" +"\n" +" --getcalendarnote zobrazi» poznámku èíslo [index] z kalendára.\n" +" [-v] - výstup vo formáte vCalendar 1.0\n" +"\n" +" --writecalendarnote zapísa» poznámku do kalendára.\n" +"\n" +" --deletecalendarnote vymaza» poznámku èíslo [index]\n" +" z kalendára.\n" +"\n" +" --getdisplaystatus ukáza», ktoré ikony sú zobrazené.\n" +"\n" +" --netmonitor nastavi»/zisti» re¾im monitora siete.\n" +"\n" +" --identify zobrazi» IMEI, model a revíziu\n" +"\n" +" --senddtmf posla» DTMF sekvenciu\n" +"\n" +" --sendlogo posla» logo_súbor cieµu ako logo operátora\n" +" alebo skupiny\n" +"\n" +" --setlogo nastavi» úvodné logo, logo volajúceho alebo\n" +" logo operátora\n" +"\n" +" --getlogo získa» úvodné logo, logo volajúceho alebo\n" +" logo operátora\n" +"\n" +" --sendringtone posla» rtttl_súbor cieµu ako vyzváòanie\n" +"\n" +" --reset [soft|hard] resetova» telefón.\n" +"\n" +" --getprofile [number] zobrazi» nastavenia zvoleného (v¹etkých)\n" +" profilov\n" +"\n" + +#: gnokii/gnokii.c:309 +msgid "" +" --entersecuritycode asks for the code and sends it to the phone\n" +"\n" +" --getsecuritycodestatus show if a security code is needed\n" +"\n" +msgstr "" +" --entersecuritycode vypýta» kód a posla» ho telefónu\n" +"\n" +" --getsecuritycodestatus zobrazi», èi je po¾adovaný bezpeènostný kód\n" +"\n" + +#: gnokii/gnokii.c:336 gnokii/gnokii.c:2721 gnokiid/virtmodem.c:262 +#: xlogos/xlogos.c:139 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "GSM/FBUS inicializácia zlyhala (neznámy model?). Koniec.\n" + +#: gnokii/gnokii.c:347 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec.\n" + +#: gnokii/gnokii.c:605 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "Pou¾ite '%s --help' na získanie informácie o pou¾ití.\n" + +#: gnokii/gnokii.c:788 +#, c-format +msgid "Unknown option: %d\n" +msgstr "Neznáma voµba: %d\n" + +#: gnokii/gnokii.c:798 +msgid "Wrong number of arguments\n" +msgstr "Nesprávny poèet argumentov\n" + +#: gnokii/gnokii.c:869 gnokii/gnokii.c:927 +msgid "Input too long!\n" +msgstr "Vstup príli¹ dlhý!\n" + +#: gnokii/gnokii.c:922 +msgid "Couldn't read from stdin!\n" +msgstr "Nie je mo¾né èíta» zo ¹tandardného vstupu!\n" + +#: gnokii/gnokii.c:988 gnokii/gnokii.c:1625 gnokii/gnokii.c:2779 +msgid "Send succeeded!\n" +msgstr "Poslanie bolo úspe¹né!\n" + +#: gnokii/gnokii.c:990 gnokii/gnokii.c:1627 gnokii/gnokii.c:2781 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "Poslanie SMS zlyhalo (chyba=%d)\n" + +#: gnokii/gnokii.c:1014 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "%. Èíslo SMS centra (%s) je %s\n" + +#: gnokii/gnokii.c:1016 +msgid "Messages sent as " +msgstr "Správy poslané ako " + +#: gnokii/gnokii.c:1038 xgnokii/xgnokii.c:542 +msgid "ERMES" +msgstr "ERMES" + +#: gnokii/gnokii.c:1042 xgnokii/xgnokii.c:546 +msgid "X.400" +msgstr "X.400" + +#: gnokii/gnokii.c:1051 +msgid "Message validity is " +msgstr "Platnos» správy je " + +#: gnokii/gnokii.c:1087 +msgid "SMS center can not be found :-(\n" +msgstr "SMS centrum nie je mo¾né nájs» :-(\n" + +#: gnokii/gnokii.c:1156 gnokii/gnokii.c:1363 gnokii/gnokii.c:2334 +#: gnokii/gnokii.c:2504 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Neznámy typ pamäti %s!\n" + +#: gnokii/gnokii.c:1183 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Správa vo výstupnej schránke " + +#: gnokii/gnokii.c:1186 +msgid "(sent)\n" +msgstr "(odoslaná)\n" + +#: gnokii/gnokii.c:1188 +msgid "(not sent)\n" +msgstr "(neodoslaná)\n" + +#: gnokii/gnokii.c:1190 gnokii/gnokii.c:1229 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "" +"Text: %s\n" +"\n" + +#: gnokii/gnokii.c:1196 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Potvrdenie o doruèení" + +#: gnokii/gnokii.c:1198 gnokii/gnokii.c:1238 +msgid "(read)\n" +msgstr "(preèítaná)\n" + +#: gnokii/gnokii.c:1200 gnokii/gnokii.c:1240 +msgid "(not read)\n" +msgstr "(nepreèítaná)\n" + +#: gnokii/gnokii.c:1202 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Dátum a èas odoslania: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1208 gnokii/gnokii.c:1221 gnokii/gnokii.c:1248 +#, c-format +msgid "+%02d00" +msgstr "+%02d00" + +#: gnokii/gnokii.c:1215 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Dátum a èas odpovede: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1228 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "Príjemca: %s Centrum správ: %s\n" + +#: gnokii/gnokii.c:1235 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Správa vo vstupnej schránke " + +#: gnokii/gnokii.c:1242 +#, c-format +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Dátum/èas: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1254 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "Odosielateµ: %s Centrum správ: %s\n" + +#: gnokii/gnokii.c:1260 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Zre»azenie (%d/%d)\n" + +#: gnokii/gnokii.c:1266 +#, c-format +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" +"Text:\n" +"%s\n" +"\n" + +#: gnokii/gnokii.c:1275 gnokii/gnokii.c:1386 gnokii/gnokii.c:1452 +#: gnokii/gnokii.c:2252 gnokii/gnokii.c:2361 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "Funkcia nie je pre odel %s implementovaná!\n" + +#: gnokii/gnokii.c:1281 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "Nesprávna pozícia %s %d\n" + +#: gnokii/gnokii.c:1287 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "SMS pozícia %s %d je prázdna.\n" + +#: gnokii/gnokii.c:1293 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"GetSMS %s %d zlyhalo!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1383 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "Zmazaná SMS %s %d\n" + +#: gnokii/gnokii.c:1390 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"DeleteSMS %s %d zlyhalo!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1441 +msgid "Enter your code: " +msgstr "Zadajte vá¹ kód: " + +#: gnokii/gnokii.c:1448 +msgid "Error: invalid code.\n" +msgstr "Chyba: Nesprávny kód.\n" + +#: gnokii/gnokii.c:1450 +msgid "Code ok.\n" +msgstr "Kód v poriadku.\n" + +#: gnokii/gnokii.c:1454 +msgid "Other error.\n" +msgstr "Iná chyba.\n" + +#: gnokii/gnokii.c:1470 +msgid "Security code status: " +msgstr "Stav bezpeènostného kódu: " + +#: gnokii/gnokii.c:1572 +msgid "Sending operator logo.\n" +msgstr "Posielanie loga operátora.\n" + +#: gnokii/gnokii.c:1576 +msgid "Sending caller line identification logo.\n" +msgstr "Posielanie loga volajúceho.\n" + +#: gnokii/gnokii.c:1578 +msgid "You should specify what kind of logo to send!\n" +msgstr "Je potrebné zada» druh posielaného loga!\n" + +#: gnokii/gnokii.c:1597 +#, c-format +msgid "Operator code: %s\n" +msgstr "Kód operátora: %s\n" + +#: gnokii/gnokii.c:1675 +msgid "Getting Logo.\n" +msgstr "Získanie loga.\n" + +#: gnokii/gnokii.c:1728 +msgid "Logo file error.\n" +msgstr "Chyba v súbore s logom.\n" + +#: gnokii/gnokii.c:1734 +msgid "Sending Logo.\n" +msgstr "Posielanie loga.\n" + +#: gnokii/gnokii.c:1776 +msgid "BEGIN:VCALENDAR\n" +msgstr "BEGIN:VCALENDAR\n" + +#: gnokii/gnokii.c:1777 +msgid "VERSION:1.0\n" +msgstr "VERSION:1.0\n" + +#: gnokii/gnokii.c:1778 +msgid "BEGIN:VEVENT\n" +msgstr "BEGIN:VEVENT\n" + +#: gnokii/gnokii.c:1779 +msgid "CATEGORIES:" +msgstr "CATEGORIES:" + +#: gnokii/gnokii.c:1782 +msgid "MISCELLANEOUS\n" +msgstr "MISCELLANEOUS\n" + +#: gnokii/gnokii.c:1785 +msgid "PHONE CALL\n" +msgstr "PHONE CALL\n" + +#: gnokii/gnokii.c:1788 +msgid "MEETING\n" +msgstr "MEETING\n" + +#: gnokii/gnokii.c:1791 +msgid "SPECIAL OCCASION\n" +msgstr "SPECIAL OCCASION\n" + +#: gnokii/gnokii.c:1794 +msgid "UNKNOWN\n" +msgstr "UNKNOWN\n" + +#: gnokii/gnokii.c:1797 +#, c-format +msgid "SUMMARY:%s\n" +msgstr "SUMMARY:%s\n" + +#: gnokii/gnokii.c:1798 +#, c-format +msgid "DTSTART:%04d%02d%02dT%02d%02d%02d\n" +msgstr "DTSTART:%04d%02d%02dT%02d%02d%02d\n" + +#: gnokii/gnokii.c:1802 +#, c-format +msgid "DALARM:%04d%02d%02dT%02d%02d%02d\n" +msgstr "DALARM:%04d%02d%02dT%02d%02d%02d\n" + +#: gnokii/gnokii.c:1806 +msgid "END:VEVENT\n" +msgstr "END:VEVENT\n" + +#: gnokii/gnokii.c:1807 +msgid "END:VCALENDAR\n" +msgstr "END:VCALENDAR\n" + +#: gnokii/gnokii.c:1810 +msgid " Type of the note: " +msgstr " Typ poznámky: " + +#: gnokii/gnokii.c:1815 +msgid "Reminder\n" +msgstr "Pripomenutie\n" + +#: gnokii/gnokii.c:1819 +msgid "Call\n" +msgstr "Telefonát\n" + +#: gnokii/gnokii.c:1823 +msgid "Meeting\n" +msgstr "Stretnutie\n" + +#: gnokii/gnokii.c:1827 +msgid "Birthday\n" +msgstr "Narodeniny\n" + +#: gnokii/gnokii.c:1831 +msgid "Unknown\n" +msgstr "Neznámy\n" + +#: gnokii/gnokii.c:1860 +msgid "The calendar note can not be read\n" +msgstr "Polo¾ku kalendára nie je mo¾né preèíta»\n" + +#: gnokii/gnokii.c:1899 gnokii/gnokii.c:2515 +msgid "Succesfully written!\n" +msgstr "Zápis bol úspe¹ný!\n" + +#: gnokii/gnokii.c:1919 +msgid " Calendar note deleted.\n" +msgstr " Polo¾ka kalendára vymazaná.\n" + +#: gnokii/gnokii.c:1922 +msgid "The calendar note can not be deleted\n" +msgstr "Polo¾ku kalendára nie je mo¾né vymaza»\n" + +#: gnokii/gnokii.c:1991 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Dátum: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:1992 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Èas: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2028 +#, c-format +msgid "Alarm: %s\n" +msgstr "Upozornenie: %s\n" + +#: gnokii/gnokii.c:2029 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Èas: %02d:%02d\n" + +#: gnokii/gnokii.c:2070 +msgid "Entering monitor mode...\n" +msgstr "Aktivácia re¾imu monitorovania siete...\n" + +#: gnokii/gnokii.c:2071 +msgid "Initialising GSM interface...\n" +msgstr "Inicializácia GSM rozhrania...\n" + +#: gnokii/gnokii.c:2082 +#, c-format +msgid "RFLevel: %d\n" +msgstr "Sila signálu: %d\n" + +#: gnokii/gnokii.c:2085 +#, c-format +msgid "Battery: %d\n" +msgstr "Batéria: %d\n" + +#: gnokii/gnokii.c:2088 +#, c-format +msgid "Power Source: %s\n" +msgstr "Napájanie: %s\n" + +#: gnokii/gnokii.c:2088 +msgid "AC/DC" +msgstr "sie»" + +#: gnokii/gnokii.c:2088 +msgid "battery" +msgstr "batéria" + +#: gnokii/gnokii.c:2091 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2094 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefón: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2097 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2100 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2103 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2106 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2109 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2112 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2115 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: Pou¾itých %d, voµných %d\n" + +#: gnokii/gnokii.c:2118 +#, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "SMS správy: Nepreèítaných %d, poèet %d\n" + +#: gnokii/gnokii.c:2121 +#, c-format +msgid "Incoming call: %s\n" +msgstr "Prichádzajúci hovor: %s\n" + +#: gnokii/gnokii.c:2124 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "Sie»: %s (%s), LAC: %s, ID bunky: %s\n" + +#: gnokii/gnokii.c:2129 +msgid "Leaving monitor mode...\n" +msgstr "Deaktivácia re¾imu monitorovania siete...\n" + +#: gnokii/gnokii.c:2178 +#, c-format +msgid "Profile number must be value from 1 to %d!\n" +msgstr "Èíslo profilu musí by» od 1 po %d!\n" + +#: gnokii/gnokii.c:2185 +#, c-format +msgid "This phone supports only %d profiles!\n" +msgstr "Tento telefón podporuje iba %d profilov!\n" + +#: gnokii/gnokii.c:2257 +msgid "Unspecified error\n" +msgstr "Bli¾¹ie neurèená chyba\n" + +#: gnokii/gnokii.c:2366 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "Typ pamäti %s nie je podporovaný!\n" + +#: gnokii/gnokii.c:2371 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Chybná pozícia alebo iná chyba!(%d)\n" + +#: gnokii/gnokii.c:2440 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Problém formátu na riadku %d [%s]\n" + +#: gnokii/gnokii.c:2455 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "Zápis úspe¹ný: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n" + +#: gnokii/gnokii.c:2457 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "Zápis ZLYHAL: typ pamäti %s, pozícia %d, meno: %s, èíslo: %s\n" + +#: gnokii/gnokii.c:2477 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "Zrýchlená voµba è. %d: %d:%d\n" + +#: gnokii/gnokii.c:2546 xgnokii/xgnokii.c:2264 xlogos/xlogos.c:103 +#, c-format +msgid "error opening %s, using default config\n" +msgstr "chyba pri otváraní %s, pou¾itá prednastavená konfigurácia\n" + +#: gnokii/gnokii.c:2578 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Prebieha volanie: %s\n" + +#: gnokii/gnokii.c:2579 +#, c-format +msgid "Unknown: %s\n" +msgstr "Neznámy: %s\n" + +#: gnokii/gnokii.c:2580 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "Nepreèítané SMS: %s\n" + +#: gnokii/gnokii.c:2581 +#, c-format +msgid "Voice call: %s\n" +msgstr "Hlasové volanie: %s\n" + +#: gnokii/gnokii.c:2582 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Faxové volanie: %s\n" + +#: gnokii/gnokii.c:2583 +#, c-format +msgid "Data call active: %s\n" +msgstr "Dátové volanie: %s\n" + +#: gnokii/gnokii.c:2584 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Zámok klávesnice: %s\n" + +#: gnokii/gnokii.c:2585 +#, c-format +msgid "SMS storage full: %s\n" +msgstr "Pamä» SMS plná: %s\n" + +#: gnokii/gnokii.c:2637 +#, c-format +msgid "IMEI: %s\n" +msgstr "IMEI: %s\n" + +#: gnokii/gnokii.c:2638 +#, c-format +msgid "Model: %s\n" +msgstr "Model: %s\n" + +#: gnokii/gnokii.c:2639 +#, c-format +msgid "Revision: %s\n" +msgstr "Revízia: %s\n" + +#: gnokii/gnokii.c:2671 +msgid "What kind of reset do you want??\n" +msgstr "Aký druh resetu si ¾eláte??\n" + +#: gnokiid/gnokiid.c:58 +#, c-format +msgid "gnokiid Version %s" +msgstr "gnokiid verzia %s" + +#: gnokiid/gnokiid.c:70 +msgid " usage: gnokiid {--help|--version}" +msgstr " pou¾itie: gnokiid {--help|--version}" + +#: gnokiid/virtmodem.c:87 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "VM_Initialise - VM_GSMInitialise zlyhal!\n" + +#: gnokiid/virtmodem.c:94 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "VM_Initialise - VM_PtySetup zlyhal!\n" + +#: gnokiid/virtmodem.c:99 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "VM_Initialise - ATEM_Initialise zlyhal!\n" + +#: gnokiid/virtmodem.c:104 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "VM_Initialise - DP_Initialise zlyhal!\n" + +#: gnokiid/virtmodem.c:198 +msgid "Couldn't open pty!\n" +msgstr "Nie je mo¾né otvori» pseudoterminál!\n" + +#: gnokiid/virtmodem.c:206 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "gnokiid by nemal by» nain¹talovaný setuid na root-a!\n" + +#: gnokiid/virtmodem.c:210 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "Slave pseudoterminál je %s, volá sa %s pre vytvorenie /dev/gnokii.\n" + +#: gnokiid/virtmodem.c:274 xlogos/xlogos.c:150 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM_LinkOK nekdy nepre¹iel do stavu OK. Koniec. \n" + +#: xgnokii/xgnokii.c:194 xgnokii/xgnokii_contacts.c:2070 +msgid "Reading caller groups names ..." +msgstr "Èítajú sa názvy skupín volajúcich ..." + +#: xgnokii/xgnokii.c:198 xgnokii/xgnokii.c:991 +msgid "Familly" +msgstr "Rodina" + +#: xgnokii/xgnokii.c:199 xgnokii/xgnokii.c:1003 +msgid "VIP" +msgstr "VIP" + +#: xgnokii/xgnokii.c:200 xgnokii/xgnokii.c:1015 +msgid "Friends" +msgstr "Priatelia" + +#: xgnokii/xgnokii.c:201 xgnokii/xgnokii.c:1027 +msgid "Colleagues" +msgstr "Kolegovia" + +#: xgnokii/xgnokii.c:202 xgnokii/xgnokii.c:1039 +msgid "Other" +msgstr "Iní" + +#: xgnokii/xgnokii.c:203 +msgid "No group" +msgstr "®iadna skupina" + +#: xgnokii/xgnokii.c:321 +msgid "Short Message received" +msgstr "Krátka správa prijatá" + +#: xgnokii/xgnokii.c:333 +msgid "Working ..." +msgstr "Pracujem ..." + +#: xgnokii/xgnokii.c:350 +msgid "Call in progress" +msgstr "Prebieha volanie" + +#: xgnokii/xgnokii.c:363 +msgid "Hide" +msgstr "Skry»" + +#: xgnokii/xgnokii.c:460 +#, c-format +msgid "" +"Outgoing call in progress:\n" +"Time: %s" +msgstr "" +"Prebieha odchádzajúce volanie:\n" +"Èas: %s" + +#: xgnokii/xgnokii.c:463 +#, c-format +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "" +"Prichádzajúce volanie od: %s\n" +"Èas: %s" + +#: xgnokii/xgnokii.c:516 xgnokii/xgnokii_sms.c:571 +#, c-format +msgid "Set %d" +msgstr "Súbor %d" + +#: xgnokii/xgnokii.c:538 xgnokii/xgnokii.c:1397 +msgid "E-Mail" +msgstr "E-Mail" + +#: xgnokii/xgnokii.c:550 +msgid "Voice" +msgstr "Hlas" + +#: xgnokii/xgnokii.c:561 xgnokii/xgnokii.c:1427 +msgid "1 h" +msgstr "1 h" + +#: xgnokii/xgnokii.c:565 xgnokii/xgnokii.c:1434 +msgid "6 h" +msgstr "6 h" + +#: xgnokii/xgnokii.c:569 xgnokii/xgnokii.c:585 xgnokii/xgnokii.c:1441 +msgid "24 h" +msgstr "24 h" + +#: xgnokii/xgnokii.c:573 xgnokii/xgnokii.c:1448 +msgid "72 h" +msgstr "72 h" + +#: xgnokii/xgnokii.c:581 +msgid "Max. time" +msgstr "Max. èas" + +#: xgnokii/xgnokii.c:628 +msgid "Reading SMS centers ..." +msgstr "Naèítavajú sa SMS centrá ..." + +#: xgnokii/xgnokii.c:982 +msgid "Error saving SMS centers!" +msgstr "Chyba pri zápise SMS centier!" + +#: xgnokii/xgnokii.c:1052 +msgid "Error writing configuration file!" +msgstr "Chyba pri zápise konfiguraèného súboru!" + +#: xgnokii/xgnokii.c:1064 xgnokii/xgnokii_contacts.c:2880 +msgid "Contacts" +msgstr "Kontakty" + +#: xgnokii/xgnokii.c:1070 xgnokii/xgnokii.c:1800 +msgid "SMS" +msgstr "SMS" + +#: xgnokii/xgnokii.c:1075 +msgid "Calendar" +msgstr "Kalendár" + +#: xgnokii/xgnokii.c:1080 +msgid "DTMF" +msgstr "DTMF" + +#: xgnokii/xgnokii.c:1085 xgnokii/xgnokii_speed.c:565 +msgid "Speed Dial" +msgstr "Zrýchlená voµba" + +#: xgnokii/xgnokii.c:1090 +msgid "Keyboard" +msgstr "Klávesnica" + +#: xgnokii/xgnokii.c:1095 xgnokii/xgnokii_netmon.c:318 +msgid "Net Monitor" +msgstr "Monitor siete" + +#: xgnokii/xgnokii.c:1104 xgnokii/xgnokii.c:1560 +msgid "Options" +msgstr "Voµby" + +#: xgnokii/xgnokii.c:1114 xgnokii/xgnokii.c:2080 +msgid "Help" +msgstr "Nápoveda" + +#: xgnokii/xgnokii.c:1120 xgnokii/xgnokii.c:1137 +msgid "About" +msgstr "O aplikácii" + +#: xgnokii/xgnokii.c:1141 xgnokii/xgnokii.c:1321 +#: xgnokii/xgnokii_contacts.c:806 xgnokii/xgnokii_contacts.c:936 +#: xgnokii/xgnokii_contacts.c:1301 xgnokii/xgnokii_contacts.c:2712 +#: xgnokii/xgnokii_sms.c:468 +msgid "Ok" +msgstr "OK" + +#: xgnokii/xgnokii.c:1154 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999 Pavel Janík ml.,\n" +"Hugh Blemings & Jan Derfinak\n" +msgstr "" +"xgnokii verzia: %s\n" +"gnokii verzia: %s\n" +"\n" +"Copyright (C) 1999 Pavel Janík ml.,\n" +"Hugh Blemings & Ján Derfiòák\n" + +#: xgnokii/xgnokii.c:1315 +msgid "Edit SMS Setting" +msgstr "Zmena nastavení SMS" + +#: xgnokii/xgnokii.c:1329 xgnokii/xgnokii_common.c:240 +#: xgnokii/xgnokii_common.c:326 xgnokii/xgnokii_contacts.c:814 +#: xgnokii/xgnokii_contacts.c:944 xgnokii/xgnokii_contacts.c:1173 +#: xgnokii/xgnokii_contacts.c:1219 xgnokii/xgnokii_contacts.c:1310 +#: xgnokii/xgnokii_contacts.c:1590 xgnokii/xgnokii_contacts.c:2719 +#: xgnokii/xgnokii_sms.c:476 +msgid "Cancel" +msgstr "Zru¹i»" + +#: xgnokii/xgnokii.c:1342 +msgid "Set's name:" +msgstr "Meno súboru:" + +#: xgnokii/xgnokii.c:1355 +msgid "Center:" +msgstr "Centrum:" + +#: xgnokii/xgnokii.c:1368 +msgid "Sending Format:" +msgstr "Formát posielania:" + +#: xgnokii/xgnokii.c:1412 +msgid "Validity Period:" +msgstr "Èas platnosti:" + +#: xgnokii/xgnokii.c:1420 +msgid "Max. Time" +msgstr "Max. èas" + +#: xgnokii/xgnokii.c:1557 +msgid "Set's name" +msgstr "Meno súboru" + +#: xgnokii/xgnokii.c:1557 +msgid "Center number" +msgstr "Èíslo centra" + +#: xgnokii/xgnokii.c:1557 +msgid "Format" +msgstr "Formát" + +#: xgnokii/xgnokii.c:1557 +msgid "Validity" +msgstr "Platnos»" + +#: xgnokii/xgnokii.c:1565 +msgid "Apply" +msgstr "Pou¾i»" + +#: xgnokii/xgnokii.c:1574 xgnokii/xgnokii_contacts.c:1574 +#: xgnokii/xgnokii_dtmf.c:178 +msgid "Save" +msgstr "Ulo¾i»" + +#: xgnokii/xgnokii.c:1581 +msgid "Close" +msgstr "Zavrie»" + +#: xgnokii/xgnokii.c:1596 +msgid "Phone and connection type" +msgstr "Typ telefónu a pripojenia" + +#: xgnokii/xgnokii.c:1603 +msgid "Connection" +msgstr "Pripojenie" + +#: xgnokii/xgnokii.c:1610 +msgid "Port:" +msgstr "Port:" + +#: xgnokii/xgnokii.c:1625 xgnokii/xgnokii.c:1697 +msgid "Model:" +msgstr "Model:" + +#: xgnokii/xgnokii.c:1640 +msgid "Init length:" +msgstr "Då¾ka inicializácie:" + +#: xgnokii/xgnokii.c:1655 +msgid "Bindir:" +msgstr "Bindir:" + +#: xgnokii/xgnokii.c:1670 +msgid "Connection:" +msgstr "Pripojenie:" + +#: xgnokii/xgnokii.c:1674 +msgid "infrared" +msgstr "infraèervené" + +#: xgnokii/xgnokii.c:1678 +msgid "serial" +msgstr "sériové" + +#: xgnokii/xgnokii.c:1683 +msgid "Phone information" +msgstr "Informácia o telefóne" + +#: xgnokii/xgnokii.c:1712 +msgid "Version:" +msgstr "Verzia:" + +#: xgnokii/xgnokii.c:1727 +msgid "Revision:" +msgstr "Revízia:" + +#: xgnokii/xgnokii.c:1742 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1756 +msgid "Alarm setting" +msgstr "Nastavenie budíka" + +#: xgnokii/xgnokii.c:1763 xgnokii/xgnokii.c:1770 +msgid "Alarm" +msgstr "Budík" + +#: xgnokii/xgnokii.c:1794 xgnokii/xgnokii_sms.c:1423 +msgid "Short Message Service" +msgstr "Slu¾ba krátkych správ" + +#: xgnokii/xgnokii.c:1828 +msgid "Edit" +msgstr "Upravi»" + +#: xgnokii/xgnokii.c:1842 +msgid "Business Card" +msgstr "Vizitka" + +#: xgnokii/xgnokii.c:1848 +msgid "User" +msgstr "Pou¾ívateµ" + +#: xgnokii/xgnokii.c:1866 xgnokii/xgnokii_contacts.c:827 +msgid "Name:" +msgstr "Meno:" + +#: xgnokii/xgnokii.c:1892 +msgid "Title:" +msgstr "Titul:" + +#: xgnokii/xgnokii.c:1918 +msgid "Company:" +msgstr "Firma:" + +#: xgnokii/xgnokii.c:1944 +msgid "Telephone:" +msgstr "Telefón:" + +#: xgnokii/xgnokii.c:1969 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:1994 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:2020 +msgid "Address:" +msgstr "Adresa:" + +#: xgnokii/xgnokii.c:2044 +msgid "Caller groups names" +msgstr "Názvy skupín volajúcich" + +#: xgnokii/xgnokii.c:2051 +msgid "Groups" +msgstr "Skupiny" + +#: xgnokii/xgnokii.c:2060 +#, c-format +msgid "Group %d:" +msgstr "Skupina %d:" + +#: xgnokii/xgnokii.c:2073 +msgid "Help viewer" +msgstr "Prezeraè pomôcok" + +#: xgnokii/xgnokii.c:2087 +msgid "Viewer:" +msgstr "Prezeraè:" + +#: xgnokii/xgnokii.c:2247 xgnokii/xgnokii_cfg.c:71 +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "VAROVANIE: Nie je mo¾né nájs» premennú prostredia HOME!\n" + +#: xgnokii/xgnokii.c:2252 xgnokii/xgnokii_cfg.c:77 xgnokii/xgnokii_cfg.c:92 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "VAROVANIE: Nie je mo¾né prideli» pamä» pre èítanie konfigurácie!\n" + +#: xgnokii/xgnokii_cfg.c:156 +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "CHYBA: Nie je mo¾né nájs» premennú prostredia HOME!\n" + +#: xgnokii/xgnokii_cfg.c:162 xgnokii/xgnokii_cfg.c:180 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "CHYBA: Nie je mo¾né prideli» pamä» pre zápis konfigurácie!\n" + +#: xgnokii/xgnokii_cfg.c:168 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "CHYBA: Nie je mo¾né otvori» súbor %s pre zápis!\n" + +#: xgnokii/xgnokii_cfg.c:186 +msgid "ERROR: Can't write config file!\n" +msgstr "CHYBA: Nie je mo¾né zapísa» konfiguraèný súbor!\n" + +#: xgnokii/xgnokii_common.c:233 +msgid "Error" +msgstr "Chyba" + +#: xgnokii/xgnokii_common.c:272 +msgid "Info" +msgstr "Informácia" + +#: xgnokii/xgnokii_common.c:310 +msgid "Yes" +msgstr "Áno" + +#: xgnokii/xgnokii_common.c:319 +msgid "No" +msgstr "Nie" + +#: xgnokii/xgnokii_common.c:406 +#, c-format +msgid "Can't exec %s\n" +msgstr "Nie je mo¾né spusti» %s\n" + +#: xgnokii/xgnokii_contacts.c:230 xgnokii/xgnokii_contacts.c:263 +#: xgnokii/xgnokii_contacts.c:426 xgnokii/xgnokii_contacts.c:451 +#: xgnokii/xgnokii_contacts.c:585 xgnokii/xgnokii_contacts.c:607 +msgid "Can't change memory type!" +msgstr "Nie je mo¾né zmeni» typ pamäti!" + +#: xgnokii/xgnokii_contacts.c:274 xgnokii/xgnokii_contacts.c:321 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" +"Meno z telefónneho zoznamu bude ¾iaµ\n" +"pri zápise do pamäti na SIM skrátené!" + +#: xgnokii/xgnokii_contacts.c:462 xgnokii/xgnokii_contacts.c:501 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" +"Meno z telefónneho zoznamu bude ¾iaµ\n" +"pri zápise do pamäti na SIM skrátené!" + +#: xgnokii/xgnokii_contacts.c:696 +msgid "Can't find pattern!" +msgstr "Nie je mo¾né nájs» vzor!" + +#: xgnokii/xgnokii_contacts.c:840 xgnokii/xgnokii_contacts.c:1319 +msgid "Number:" +msgstr "Èíslo:" + +#: xgnokii/xgnokii_contacts.c:852 +msgid "Memory:" +msgstr "Pamä»:" + +#: xgnokii/xgnokii_contacts.c:856 +msgid "phone" +msgstr "telefón" + +#: xgnokii/xgnokii_contacts.c:869 +msgid "Caller group:" +msgstr "Skupina volajúcich:" + +#: xgnokii/xgnokii_contacts.c:883 xgnokii/xgnokii_contacts.c:2941 +#: xgnokii/xgnokii_speed.c:618 +msgid "Edit entry" +msgstr "Upravi» polo¾ku" + +#: xgnokii/xgnokii_contacts.c:929 +msgid "Delete entries" +msgstr "Vymaza» polo¾ky" + +#: xgnokii/xgnokii_contacts.c:961 +msgid "Do you want to delete selected entries?" +msgstr "®eláte si zmaza» zvolené polo¾ky?" + +#: xgnokii/xgnokii_contacts.c:973 xgnokii/xgnokii_contacts.c:2933 +msgid "New entry" +msgstr "Nová polo¾ka" + +#: xgnokii/xgnokii_contacts.c:1012 xgnokii/xgnokii_contacts.c:2937 +msgid "Duplicate entry" +msgstr "Duplikova» polo¾ku" + +#: xgnokii/xgnokii_contacts.c:1078 xgnokii/xgnokii_contacts.c:1088 +#: xgnokii/xgnokii_contacts.c:1113 +msgid "Can't find free memory." +msgstr "Voµná pamä» nie je k dispozícii." + +#: xgnokii/xgnokii_contacts.c:1157 +msgid "Changing memory type" +msgstr "Zmena typu pamäti" + +#: xgnokii/xgnokii_contacts.c:1164 +msgid "Continue" +msgstr "Pokraèova»" + +#: xgnokii/xgnokii_contacts.c:1184 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" +"Pri presune z pamäti telefónu na SIM mô¾u\n" +"by» niektoré polo¾ky skrátené." + +#: xgnokii/xgnokii_contacts.c:1204 xgnokii/xgnokii_contacts.c:1210 +msgid "Find" +msgstr "Nájs»" + +#: xgnokii/xgnokii_contacts.c:1232 +msgid "Pattern:" +msgstr "Vzor:" + +#: xgnokii/xgnokii_contacts.c:1245 xgnokii/xgnokii_contacts.c:2875 +#: xgnokii/xgnokii_speed.c:560 +msgid "Name" +msgstr "Meno" + +#: xgnokii/xgnokii_contacts.c:1251 xgnokii/xgnokii_contacts.c:2875 +#: xgnokii/xgnokii_speed.c:560 +msgid "Number" +msgstr "Èíslo" + +#: xgnokii/xgnokii_contacts.c:1295 xgnokii/xgnokii_contacts.c:2952 +msgid "Dial voice" +msgstr "Zavola»" + +#: xgnokii/xgnokii_contacts.c:1428 +msgid "Phone memory..." +msgstr "Pamä» telefónu..." + +#: xgnokii/xgnokii_contacts.c:1439 +msgid "SIM memory..." +msgstr "Pamä» SIM..." + +#: xgnokii/xgnokii_contacts.c:1468 +msgid "Saving entries" +msgstr "Ukladám polo¾ky" + +#: xgnokii/xgnokii_contacts.c:1502 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku ME pamäti èíslo %d! Chyba: %d\n" + +#: xgnokii/xgnokii_contacts.c:1544 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "%s: riadok: %d:Nie je mo¾né zapísa» polo¾ku SM pamäti èíslo %d! Chyba: %d\n" + +#: xgnokii/xgnokii_contacts.c:1567 +msgid "Save changes?" +msgstr "Ulo¾i» zmeny?" + +#: xgnokii/xgnokii_contacts.c:1583 +msgid "Don't save" +msgstr "Neulo¾i»" + +#: xgnokii/xgnokii_contacts.c:1607 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Do you want save these changes into phone?\n" +msgstr "" +"Vo va¹om adresári kontaktov\n" +"ste urobili zmeny.\n" +"\n" +"\n" +"®eláte si tieto zmeny zapísa» do telefónu?\n" + +#: xgnokii/xgnokii_contacts.c:1673 xgnokii/xgnokii_contacts.c:1700 +#: xgnokii/xgnokii_contacts.c:2424 xgnokii/xgnokii_contacts.c:2447 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "%s: riadok %d: Nie je mo¾né prideli» pamä»!\n" + +#: xgnokii/xgnokii_contacts.c:1796 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" +"Nie je mo¾né zisti» stav SM pamäti!\n" +"\n" +"Max. poèet SIM polo¾iek nastavený na 100!\n" + +#: xgnokii/xgnokii_contacts.c:1821 +msgid "Getting entries" +msgstr "Naèítavam polo¾ky" + +#: xgnokii/xgnokii_contacts.c:2093 xgnokii/xgnokii_dtmf.c:128 +#: xgnokii/xgnokii_speed.c:434 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "Nie je mo¾né otvori» súbor %s pre zápis!" + +#: xgnokii/xgnokii_contacts.c:2165 xgnokii/xgnokii_dtmf.c:161 +#: xgnokii/xgnokii_speed.c:476 +msgid "Overwrite file?" +msgstr "Prepísa» súbor?" + +#: xgnokii/xgnokii_contacts.c:2166 xgnokii/xgnokii_dtmf.c:162 +#: xgnokii/xgnokii_speed.c:477 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" +"Súbor %s u¾ existuje.\n" +"Prepísa»?" + +#: xgnokii/xgnokii_contacts.c:2184 xgnokii/xgnokii_speed.c:495 +msgid "Export" +msgstr "Export" + +#: xgnokii/xgnokii_contacts.c:2345 xgnokii/xgnokii_dtmf.c:90 +#: xgnokii/xgnokii_speed.c:334 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "Nie je mo¾né otvori» súbor %s pre èítanie!" + +#: xgnokii/xgnokii_contacts.c:2399 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" +"Nie je mo¾né zisti» stav SM pamäti!\n" +"\n" +"Max. poèet SIM polo¾iek nastavený na 100!\n" + +#: xgnokii/xgnokii_contacts.c:2512 xgnokii/xgnokii_speed.c:412 +msgid "Import" +msgstr "Import" + +#: xgnokii/xgnokii_contacts.c:2709 xgnokii/xgnokii_sms.c:1115 +msgid "Select contacts" +msgstr "Výber kontaktov" + +#: xgnokii/xgnokii_contacts.c:2742 xgnokii/xgnokii_contacts.c:2981 +#: xgnokii/xgnokii_sms.c:1565 xgnokii/xgnokii_speed.c:643 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "Chyba: %s: riadok %d: Nie je mo¾né prideli» pamä»!\n" + +#: xgnokii/xgnokii_contacts.c:2840 xgnokii/xgnokii_dtmf.c:217 +#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1005 +#: xgnokii/xgnokii_sms.c:1388 xgnokii/xgnokii_speed.c:535 +#: xgnokii/xgnokii_xkeyb.c:241 +msgid "/_File" +msgstr "/Súbor" + +#: xgnokii/xgnokii_contacts.c:2841 xgnokii/xgnokii_speed.c:536 +msgid "/File/_Read from phone" +msgstr "/Súbor/Naèíta» z telefónu" + +#: xgnokii/xgnokii_contacts.c:2842 xgnokii/xgnokii_speed.c:537 +msgid "/File/_Save to phone" +msgstr "/Súbor/Zapísa» do telefónu" + +#: xgnokii/xgnokii_contacts.c:2843 xgnokii/xgnokii_speed.c:538 +msgid "/File/_Import from file" +msgstr "/Súbor/Import zo súboru" + +#: xgnokii/xgnokii_contacts.c:2844 xgnokii/xgnokii_speed.c:539 +msgid "/File/_Export to file" +msgstr "/Súbor/Export do súboru" + +#: xgnokii/xgnokii_contacts.c:2845 xgnokii/xgnokii_dtmf.c:220 +#: xgnokii/xgnokii_netmon.c:261 xgnokii/xgnokii_sms.c:1010 +#: xgnokii/xgnokii_sms.c:1391 xgnokii/xgnokii_speed.c:540 +#: xgnokii/xgnokii_xkeyb.c:242 +msgid "/File/_Close" +msgstr "/Súbor/Zavrie»" + +#: xgnokii/xgnokii_contacts.c:2846 xgnokii/xgnokii_speed.c:541 +msgid "/_Edit" +msgstr "/Úpravy" + +#: xgnokii/xgnokii_contacts.c:2847 +msgid "/Edit/_New" +msgstr "/Úpravy/Nový" + +#: xgnokii/xgnokii_contacts.c:2848 +msgid "/Edit/D_uplicate" +msgstr "/Úpravy/Duplikova»" + +#: xgnokii/xgnokii_contacts.c:2849 xgnokii/xgnokii_speed.c:542 +msgid "/Edit/_Edit" +msgstr "/Úpravy/Upravi»" + +#: xgnokii/xgnokii_contacts.c:2850 +msgid "/Edit/_Delete" +msgstr "/Úpravy/Zmaza»" + +#: xgnokii/xgnokii_contacts.c:2851 +msgid "/Edit/_Change memory type" +msgstr "/Úpravy/Zmeni» typ pamäti" + +#: xgnokii/xgnokii_contacts.c:2852 +msgid "/Edit/_Find" +msgstr "/Úpravy/Vyhµada»" + +#: xgnokii/xgnokii_contacts.c:2853 +msgid "/Edit/Find ne_xt" +msgstr "/Úpravy/Vyhµada» ïal¹í" + +#: xgnokii/xgnokii_contacts.c:2854 +msgid "/Edit/Select _all" +msgstr "/Úpravy/Vybra» v¹etky" + +#: xgnokii/xgnokii_contacts.c:2855 +msgid "/_Dial" +msgstr "/Zavola»" + +#: xgnokii/xgnokii_contacts.c:2856 +msgid "/Dial/Dial _voice" +msgstr "/Zavola»/Zavola» (hlas)" + +#: xgnokii/xgnokii_contacts.c:2857 xgnokii/xgnokii_dtmf.c:221 +#: xgnokii/xgnokii_netmon.c:265 xgnokii/xgnokii_sms.c:1011 +#: xgnokii/xgnokii_sms.c:1398 xgnokii/xgnokii_speed.c:543 +#: xgnokii/xgnokii_xkeyb.c:243 +msgid "/_Help" +msgstr "/Nápoveda" + +#: xgnokii/xgnokii_contacts.c:2858 xgnokii/xgnokii_dtmf.c:222 +#: xgnokii/xgnokii_netmon.c:266 xgnokii/xgnokii_sms.c:1012 +#: xgnokii/xgnokii_sms.c:1399 xgnokii/xgnokii_speed.c:544 +#: xgnokii/xgnokii_xkeyb.c:244 +msgid "/Help/_Help" +msgstr "/Nápoveda/Nápoveda" + +#: xgnokii/xgnokii_contacts.c:2859 xgnokii/xgnokii_dtmf.c:223 +#: xgnokii/xgnokii_netmon.c:267 xgnokii/xgnokii_sms.c:1013 +#: xgnokii/xgnokii_sms.c:1400 xgnokii/xgnokii_speed.c:545 +#: xgnokii/xgnokii_xkeyb.c:245 +msgid "/Help/_About" +msgstr "/Nápoveda/O aplikácii" + +#: xgnokii/xgnokii_contacts.c:2875 +msgid "Memory" +msgstr "Pamä»" + +#: xgnokii/xgnokii_contacts.c:2875 +msgid "Group" +msgstr "Skupina" + +#: xgnokii/xgnokii_contacts.c:2911 xgnokii/xgnokii_speed.c:596 +msgid "Read from phone" +msgstr "Naèíta» z telefónu" + +#: xgnokii/xgnokii_contacts.c:2915 xgnokii/xgnokii_speed.c:600 +msgid "Save to phone" +msgstr "Zapísa» do telefónu" + +#: xgnokii/xgnokii_contacts.c:2922 xgnokii/xgnokii_speed.c:607 +msgid "Import from file" +msgstr "Import zo súboru" + +#: xgnokii/xgnokii_contacts.c:2926 xgnokii/xgnokii_speed.c:611 +msgid "Export to file" +msgstr "Export do súboru" + +#: xgnokii/xgnokii_contacts.c:2945 +msgid "Delete entry" +msgstr "Zmaza» polo¾ku" + +#: xgnokii/xgnokii_dtmf.c:108 +msgid "Load" +msgstr "Naèíta»" + +#: xgnokii/xgnokii_dtmf.c:218 +msgid "/File/_Open" +msgstr "/Súbor/Otvori»" + +#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_sms.c:1007 +#: xgnokii/xgnokii_sms.c:1389 +msgid "/File/_Save" +msgstr "/Súbor/Ulo¾i»" + +#: xgnokii/xgnokii_calendar.c:243 xgnokii/xgnokii_contacts.c:2843 +#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_sms.c:1012 +#: xgnokii/xgnokii_sms.c:1394 xgnokii/xgnokii_speed.c:538 +msgid "/File/Sep1" +msgstr "/Súbor/Sep1" + +#: xgnokii/xgnokii_calendar.c:245 xgnokii/xgnokii_contacts.c:2846 +#: xgnokii/xgnokii_sms.c:1015 xgnokii/xgnokii_speed.c:541 +msgid "/File/Sep2" +msgstr "/Súbor/Sep2" + +#: xgnokii/xgnokii_calendar.c:248 +msgid "/File/Sep3" +msgstr "/Súbor/Sep3" + +#: xgnokii/xgnokii_contacts.c:2853 +msgid "/Edit/Sep3" +msgstr "/Úpravy/Sep3" + +#: xgnokii/xgnokii_calendar.c:257 xgnokii/xgnokii_contacts.c:2855 +msgid "/Edit/Sep4" +msgstr "/Úpravy/Sep4" + +#: xgnokii/xgnokii_contacts.c:2858 +msgid "/Edit/Sep5" +msgstr "/Úpravy/Sep5" + +#: xgnokii/xgnokii_sms.c:1401 +msgid "/Messages/Sep3" +msgstr "/Správy/Sep3" + +#: xgnokii/xgnokii_calendar.c:244 +msgid "/File/Send via S_MS" +msgstr "/Súbor/Po¹li ako SMS" + +#: xgnokii/xgnokii_calendar.c:251 +msgid "/Edit/Add _reminder" +msgstr "/Úpravy/Pridaj pripomienku" + +#: xgnokii/xgnokii_calendar.c:252 +msgid "/Edit/Add _call" +msgstr "/Úpravy/Pridaj volanie" + +#: xgnokii/xgnokii_calendar.c:253 +msgid "/Edit/Add _meeting" +msgstr "/Úpravy/Pridaj schôdzku" + +#: xgnokii/xgnokii_calendar.c:254 +msgid "/Edit/Add _birthday" +msgstr "/Úpravy/Pridaj narodeniny" + +#: xgnokii/xgnokii_dtmf.c:244 +msgid "Dial Tone" +msgstr "Tónová voµba" + +#: xgnokii/xgnokii_netmon.c:262 +msgid "/_Tools" +msgstr "/Nástroje" + +#: xgnokii/xgnokii_netmon.c:263 +msgid "/Tools/Net monitor o_n" +msgstr "/Nástroje/Zapnú» monitor siete" + +#: xgnokii/xgnokii_netmon.c:264 +msgid "/Tools/Net monitor o_ff" +msgstr "/Nástroje/Vypnú» monitor siete" + +#: xgnokii/xgnokii_netmon.c:381 xgnokii/xgnokii_netmon.c:384 +msgid "Active cell" +msgstr "Aktívna bunka" + +#: xgnokii/xgnokii_netmon.c:387 +msgid "NCELL list I" +msgstr "NCELL zoznam I" + +#: xgnokii/xgnokii_netmon.c:390 +msgid "NCELL list II" +msgstr "NCELL zoznam II" + +#: xgnokii/xgnokii_netmon.c:393 +msgid "NCELL list III" +msgstr "NCELL zoznam III" + +#: xgnokii/xgnokii_netmon.c:396 +msgid "Prefered/Denied networks" +msgstr "Preferované/Zakázané siete" + +#: xgnokii/xgnokii_netmon.c:399 +msgid "System information bits" +msgstr "Systémové informácie" + +#: xgnokii/xgnokii_netmon.c:402 +msgid "TMSI, Paging, PLU" +msgstr "TMSI, Paging, PLU" + +#: xgnokii/xgnokii_netmon.c:405 +msgid "Cells info" +msgstr "Informácie o bunkách" + +#: xgnokii/xgnokii_netmon.c:408 +msgid "DTX, Cipher, Hopping" +msgstr "DTX, ©ifra, Hopping" + +#: xgnokii/xgnokii_netmon.c:418 +msgid "Uplink DTX" +msgstr "Uplink DTX" + +#: xgnokii/xgnokii_netmon.c:421 +msgid "BTS TEST" +msgstr "BTS TEST" + +#: xgnokii/xgnokii_netmon.c:424 +msgid "CELL BARR-Flag" +msgstr "CELL BARR-Príznak" + +#: xgnokii/xgnokii_netmon.c:427 +msgid "Accumulator, Charge status" +msgstr "Akumulátor, Stav nabitia" + +#: xgnokii/xgnokii_netmon.c:430 +msgid "?Constant voltage charging display" +msgstr "?Nabíjanie kon¹tantným napätím" + +#: xgnokii/xgnokii_netmon.c:433 +msgid "?Battery full detection" +msgstr "?Detekcia plného nabitia batérie" + +#: xgnokii/xgnokii_netmon.c:436 +msgid "Accumulator" +msgstr "Akumulátor" + +#: xgnokii/xgnokii_netmon.c:439 +msgid "SW-Resets" +msgstr "SW-Resety" + +#: xgnokii/xgnokii_netmon.c:442 +msgid "Reset-Counter" +msgstr "Èítaè resetov" + +#: xgnokii/xgnokii_netmon.c:445 +msgid "Cause codes for last connection abortion" +msgstr "Dôvod posledného zru¹enia spojenia" + +#: xgnokii/xgnokii_netmon.c:455 +msgid "Reset handover counters" +msgstr "Vynulova» èítaèe handoverov" + +#: xgnokii/xgnokii_netmon.c:458 +msgid "Handover Counter" +msgstr "Èítaè handoverov" + +#: xgnokii/xgnokii_netmon.c:461 +msgid "Handover Counter (Dual)" +msgstr "Èítaè handoverov (duálny)" + +#: xgnokii/xgnokii_netmon.c:464 +msgid "L2-Timeouts" +msgstr "L2-Timeouty" + +#: xgnokii/xgnokii_netmon.c:467 +msgid "SIM" +msgstr "SIM" + +#: xgnokii/xgnokii_netmon.c:470 +msgid "?Block display 1" +msgstr "?Block display 1" + +#: xgnokii/xgnokii_netmon.c:476 +msgid "Memory status before reset" +msgstr "Stav pamäti pred resetom" + +#: xgnokii/xgnokii_netmon.c:479 +msgid "Reset Counters" +msgstr "Èítaèe resetov" + +#: xgnokii/xgnokii_netmon.c:482 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "Èítaè vyhµadávania PLMN a nového výberu siete (Singleband)" + +#: xgnokii/xgnokii_netmon.c:492 +msgid "Neighbourhood measurement" +msgstr "Meranie susedstva" + +#: xgnokii/xgnokii_netmon.c:495 +msgid "Calls" +msgstr "Volania" + +#: xgnokii/xgnokii_netmon.c:498 +msgid "Temporary counters of DSP" +msgstr "Prechodné èítaèe DSP" + +#: xgnokii/xgnokii_netmon.c:501 +msgid "Control of task information displays" +msgstr "Riadenie zobrazenia informácií o úlohe" + +#: xgnokii/xgnokii_netmon.c:504 +msgid "Information about task numbers 0-7" +msgstr "Informácie o úlohách 0-7" + +#: xgnokii/xgnokii_netmon.c:507 +msgid "Information about task numbers 8-15" +msgstr "Informácie o úlohách 8-15" + +#: xgnokii/xgnokii_netmon.c:510 +msgid "Information about task numbers 16-23" +msgstr "Informácie o úlohách 16-23" + +#: xgnokii/xgnokii_netmon.c:513 +msgid "Information about OS_SYSTEM_STACK" +msgstr "Informácie o OS_SYSTEM_STACK" + +#: xgnokii/xgnokii_netmon.c:516 +msgid "Information about current MCU and DSP software versions" +msgstr "Informácia o aktuálnych verziách softvéru MCU a DSP" + +#: xgnokii/xgnokii_netmon.c:519 +msgid "Hardware version" +msgstr "Verzia hardvéru" + +#: xgnokii/xgnokii_netmon.c:538 +msgid "Chan" +msgstr "Chan" + +#: xgnokii/xgnokii_netmon.c:539 +msgid "RxLv" +msgstr "RxLv" + +#: xgnokii/xgnokii_netmon.c:540 +msgid "C1" +msgstr "C1" + +#: xgnokii/xgnokii_netmon.c:541 +msgid "C2" +msgstr "C2" + +#: xgnokii/xgnokii_netmon.c:542 +msgid "ACT" +msgstr "ACT" + +#: xgnokii/xgnokii_netmon.c:543 +msgid "NC2" +msgstr "NC2" + +#: xgnokii/xgnokii_netmon.c:544 +msgid "NC3" +msgstr "NC3" + +#: xgnokii/xgnokii_netmon.c:545 +msgid "NC4" +msgstr "NC4" + +#: xgnokii/xgnokii_netmon.c:546 +msgid "NC5" +msgstr "NC5" + +#: xgnokii/xgnokii_netmon.c:547 +msgid "NC6" +msgstr "NC6" + +#: xgnokii/xgnokii_netmon.c:548 +msgid "NC7" +msgstr "NC7" + +#: xgnokii/xgnokii_netmon.c:579 +msgid "Page:" +msgstr "Stránka:" + +#: xgnokii/xgnokii_sms.c:232 +msgid "report" +msgstr "potvrdenie" + +#: xgnokii/xgnokii_sms.c:234 +msgid "read" +msgstr "preèítaná" + +#: xgnokii/xgnokii_sms.c:236 +msgid "unread" +msgstr "nepreèítaná" + +#: xgnokii/xgnokii_sms.c:294 +msgid "sent" +msgstr "odoslaná" + +#: xgnokii/xgnokii_sms.c:296 +msgid "unsent" +msgstr "neodoslaná" + +#: xgnokii/xgnokii_sms.c:364 +msgid "From: " +msgstr "Od: " + +#: xgnokii/xgnokii_sms.c:372 +msgid "Date: " +msgstr "Dátum: " + +#: xgnokii/xgnokii_sms.c:461 +msgid "Delete SMS" +msgstr "Zmaza» SMS" + +#: xgnokii/xgnokii_sms.c:493 +msgid "Do you want to delete selected SMS?" +msgstr "®eláte si vymaza» zvolené SMS?" + +#: xgnokii/xgnokii_sms.c:711 xgnokii/xgnokii_sms.c:842 +msgid "Address line contains illegal address!" +msgstr "Riadok s adresou obsahuje neplatnú adresu!" + +#: xgnokii/xgnokii_sms.c:814 +#, c-format +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "" +"Odoslanie SMS pre %s zlyhalo\n" +"(chyba=%d)" + +#: xgnokii/xgnokii_sms.c:904 xgnokii/xgnokii_sms.c:941 +#, c-format +msgid "Sending SMS to %s (%d/%d) ...\n" +msgstr "Odosiela sa SMS pre %s (%d/%d) ...\n" + +#: xgnokii/xgnokii_sms.c:968 +#, c-format +msgid "Sending SMS to %s ...\n" +msgstr "Odosiela sa SMS pre %s ...\n" + +#: xgnokii/xgnokii_sms.c:1006 +msgid "/File/Sen_d" +msgstr "/Súbor/Posla»" + +#: xgnokii/xgnokii_sms.c:1008 +msgid "/File/Check _Names" +msgstr "/Súbor/Skontrolova» mená" + +#: xgnokii/xgnokii_sms.c:1009 +msgid "/File/C_ontacts" +msgstr "/Súbor/Kontakty" + +#: xgnokii/xgnokii_sms.c:1067 +msgid "Send message" +msgstr "Odosla» správu" + +#: xgnokii/xgnokii_sms.c:1071 +msgid "Save message to outbox" +msgstr "Ulo¾i» správu do výstupnej schránky" + +#: xgnokii/xgnokii_sms.c:1078 +msgid "Check names" +msgstr "Skontrolova» mená" + +#: xgnokii/xgnokii_sms.c:1091 +msgid "To:" +msgstr "Pre:" + +#: xgnokii/xgnokii_sms.c:1163 +msgid "Delivery report" +msgstr "Potvrdenie o doruèení" + +#: xgnokii/xgnokii_sms.c:1167 +msgid "Send as Long SMS" +msgstr "Odosla» ako dlhú SMS" + +#: xgnokii/xgnokii_sms.c:1171 +msgid "SMS Center:" +msgstr "SMS centrum:" + +#: xgnokii/xgnokii_sms.c:1190 +msgid "New Message" +msgstr "Nová správa" + +#: xgnokii/xgnokii_sms.c:1217 +msgid "Forward Message" +msgstr "Posla» správu inam" + +#: xgnokii/xgnokii_sms.c:1261 +msgid "Reply Message" +msgstr "Odpoveda» na správu" + +#: xgnokii/xgnokii_sms.c:1297 xgnokii/xgnokii_sms.c:1465 +msgid "Bussiness Card" +msgstr "Vizitka" + +#: xgnokii/xgnokii_sms.c:1390 +msgid "/File/_Refresh" +msgstr "/Súbor/Obnovi»" + +#: xgnokii/xgnokii_sms.c:1392 +msgid "/_Messages" +msgstr "/Správy" + +#: xgnokii/xgnokii_sms.c:1393 +msgid "/_Messages/_New" +msgstr "/Správy/Nová" + +#: xgnokii/xgnokii_sms.c:1394 +msgid "/_Messages/_Forward" +msgstr "/Správy/Posla» inam" + +#: xgnokii/xgnokii_sms.c:1395 +msgid "/_Messages/_Reply" +msgstr "/Správy/Odpoveda»" + +#: xgnokii/xgnokii_sms.c:1396 +msgid "/_Messages/_Delete" +msgstr "/Správy/Zmaza»" + +#: xgnokii/xgnokii_sms.c:1397 +msgid "/_Messages/_Bussiness card" +msgstr "/Správy/Vizitka" + +#: xgnokii/xgnokii_sms.c:1418 +msgid "Status" +msgstr "Stav" + +#: xgnokii/xgnokii_sms.c:1418 +msgid "Date / Time" +msgstr "Dátum / èas" + +#: xgnokii/xgnokii_sms.c:1418 +msgid "Sender" +msgstr "Odosielateµ" + +#: xgnokii/xgnokii_sms.c:1418 +msgid "Message" +msgstr "Správa" + +#: xgnokii/xgnokii_sms.c:1452 +msgid "New message" +msgstr "Nová správa" + +#: xgnokii/xgnokii_sms.c:1456 +msgid "Forward message" +msgstr "Posla» správu inam" + +#: xgnokii/xgnokii_sms.c:1460 +msgid "Reply message" +msgstr "Odpoveda» na správu" + +#: xgnokii/xgnokii_sms.c:1472 +msgid "Delete message" +msgstr "Zmaza» správu" + +#: xgnokii/xgnokii_sms.c:1497 +msgid "SMS's" +msgstr "SMS" + +#: xgnokii/xgnokii_sms.c:1506 +msgid "Inbox" +msgstr "Vstupná schránka" + +#: xgnokii/xgnokii_sms.c:1512 +msgid "Outbox" +msgstr "Výstupná schránka" + +#: xgnokii/xgnokii_speed.c:188 +msgid "Reading data ..." +msgstr "Naèítavajú sa údaje ..." + +#: xgnokii/xgnokii_speed.c:199 xgnokii/xgnokii_speed.c:205 +#: xgnokii/xgnokii_speed.c:264 +msgid "Cannot allocate memory!" +msgstr "Nie je mo¾né prideli» pamä»!" + +#: xgnokii/xgnokii_speed.c:352 +msgid "Cannot allocate memory!\n" +msgstr "Nie je mo¾né prideli» pamä»!\n" + +#: xgnokii/xgnokii_speed.c:364 xgnokii/xgnokii_speed.c:392 +msgid "Error reading file!" +msgstr "Chyba pri èítaní súboru!" + +#: xgnokii/xgnokii_speed.c:560 +msgid "Key" +msgstr "Klávesa" + +#: xgnokii/xgnokii_xkeyb.c:182 +msgid "Cannot load background pixmap!" +msgstr "Nie je mo¾né naèíta» obrázok pozadia!" + +#: xgnokii/xgnokii_xkeyb.c:259 +msgid "XGnokii Keyboard" +msgstr "XGnokii klávesnica" diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..0f5e040 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,4292 @@ +# Ggnokii project Slovenian .po file +# Copyright (C) 2001 Free Software Foundation, Inc. +# Bo¹tjan Müller , 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: gnokii\n" +"POT-Creation-Date: 2001-08-30 16:52+0200\n" +"PO-Revision-Date: 2001-07-09 01:14+0100\n" +"Last-Translator: Bo¹tjan Müller \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: common/fbus-3810.c:622 common/fbus-6110.c:1696 +#, c-format +msgid "Sending SMS to %s via message center %s\n" +msgstr "%s po¹iljam SMS preko centra za sporoèila s ¹tevilko %s\n" + +#: common/fbus-3810.c:747 +#, c-format +msgid "SMS Send attempt failed, trying again (%d of %d)\n" +msgstr "" +"Po¹iljanje SMS sporoèila je bilo neuspe¹o, poskusite ponovno (%d of %d)\n" + +#: common/fbus-3810.c:1212 +msgid "Couldn't open FB38 device" +msgstr "Naprave FB38 ni bilo mogoèe odpreti" + +#: common/fbus-3810.c:1305 +msgid "restarting.\n" +msgstr "ponovno zaganjam\n" + +#: common/fbus-3810.c:1361 +#, c-format +msgid "MT Fail %02x" +msgstr "MT Neuspel %02x" + +#: common/fbus-3810.c:1368 common/mbus-6160.c:1002 +#, c-format +msgid "CS Fail %02x != %02x" +msgstr "CS Neuspel %02x != %02x" + +#: common/fbus-3810.c:1480 +#, c-format +msgid "0x15 Registration Response 0x%02x\n" +msgstr "0x15 Odgovor Registracije 0x%02x\n" + +#: common/fbus-3810.c:1496 +#, c-format +msgid "0x16 Registration Response 0x%02x\n" +msgstr "0x16 Odgovor Registracije 0x%02x\n" + +#: common/fbus-3810.c:1497 +#, c-format +msgid "SIM access: %s.\n" +msgstr "Dostop do SIM-a: %s.\n" + +#: common/fbus-3810.c:1573 +#, c-format +msgid "SMS Stored into location 0x%02x\n" +msgstr "SMS Shranjen na polo¾aj 0x%02x\n" + +#: common/fbus-3810.c:1583 +#, c-format +msgid "SMS Store failed: 0x%02x\n" +msgstr "Shranjevanje SMS-a je bilo neuspe¹no: 0x%02x\n" + +#: common/fbus-3810.c:1704 +msgid "PIN [possibly] entered.\n" +msgstr "PIN [verjetno} vne¹en.\n" + +#: common/fbus-3810.c:1713 +msgid "Phone powering off..." +msgstr "Telefon se uga¹a..." + +#: common/fbus-3810.c:1742 common/mbus-6160.c:609 +msgid "Standard Ack write failed!" +msgstr "Pisanje standardnega Ack-a neuspe¹no!" + +#: common/fbus-3810.c:1768 +msgid "Unknown: " +msgstr "Neznan: " + +#: common/fbus-3810.c:1770 +#, c-format +msgid "Msg Type: %02x " +msgstr "Tip Sporocila: %02x " + +#: common/fbus-3810.c:1771 +#, c-format +msgid "Msg Len: %02x " +msgstr "Dol¾ina Sporoèila: %02x " + +#: common/fbus-3810.c:1772 +#, c-format +msgid "Sequence Number: %02x " +msgstr "Zaporedna ©tevilka: %02x " + +#: common/fbus-3810.c:1773 +#, c-format +msgid "" +"Checksum: %02x \n" +" " +msgstr "" +"Kontrolna vsota: %02x \n" +" " + +#: common/fbus-3810.c:1865 common/fbus-3810.c:1995 +msgid "Set Mem Loc Write failed!" +msgstr "Nastavitev Lok. Spomina za pisanje ni uspela!" + +#: common/fbus-3810.c:1910 +msgid "TX_SendRLPFrame - write:" +msgstr "TX_SendRLPFrame - pi¹i:" + +#: common/fbus-3810.c:1922 +msgid "Request HangupMessage Write failed!" +msgstr "Zahteva HangupMessage Pisanje neuspela" + +#: common/fbus-3810.c:1934 +msgid "0x4a Write failed!" +msgstr "0x4a Pisanje neuspelo!" + +#: common/fbus-3810.c:1949 +msgid "Explore Write failed!" +msgstr "Razi¹èi Pi¹i neuspelo!" + +#: common/fbus-3810.c:1959 +msgid "0x3f Write failed!" +msgstr "0x3f Pisanje neuspelo!" + +#: common/fbus-3810.c:2019 +msgid "Request Mem Loc Write failed!" +msgstr "Zahteva Mem Loc Pisanje neuspelo!" + +#: common/fbus-3810.c:2032 +msgid "Request IMEI/Revision/Model Write failed!" +msgstr "Zahteva IMEI/Revizija/Model Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2079 +msgid "Send SMS header failed!" +msgstr "Po¹iljanje glave SMS sporoèila je bilo neuspe¹no!" + +#: common/fbus-3810.c:2136 +msgid "Store SMS header failed!" +msgstr "Shranjevanje glave SMS sporoèila ni bilo uspe¹no!" + +#: common/fbus-3810.c:2161 +#, c-format +msgid "Send SMS block %d failed!" +msgstr "Po¹iljanje SMS blok-a %d ni uspelo!" + +#: common/fbus-3810.c:2184 +msgid "Request SMS Mem Loc Write failed!" +msgstr "Zahteva pisanja SMS Mem Loc ni uspela!" + +#: common/fbus-3810.c:2207 +msgid "Delete SMS Mem Loc write failed!" +msgstr "Brisanje SMS Mem Loc pisanje ni uspelo!" + +#: common/fbus-3810.c:2226 +msgid "0x15 Write failed!" +msgstr "0x15 Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2243 common/mbus-6160.c:1080 +msgid "TX_SendMessage - message too long!\n" +msgstr "TX_SendMessage - predolgo sporoèilo!\n" + +#: common/fbus-3810.c:2269 common/mbus-6160.c:883 common/mbus-6160.c:1112 +msgid "TX_SendMessage - write:" +msgstr "TX_SendMessage - pisanje:" + +#: common/fbus-3810.c:2282 common/fbus-3810.c:2418 common/fbus-3810.c:2436 +#: common/fbus-3810.c:2454 common/fbus-3810.c:2468 common/fbus-3810.c:2609 +#: common/fbus-3810.c:2670 common/fbus-3810.c:2729 common/fbus-3810.c:2769 +msgid "Write failed!" +msgstr "Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2296 +#, c-format +msgid "Incoming call - Type: %s. %02x, Number %s.\n" +msgstr "Dohodni klic - Tip: %s. %02x, ©tevilka %s.\n" + +#: common/fbus-3810.c:2323 +msgid "0x27 Write failed!" +msgstr "0x27 Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2371 +msgid "0x4b Write failed!" +msgstr "'x4b pisanje neuspe¹no!" + +#: common/fbus-3810.c:2390 +#, c-format +msgid "Status: %s. Batt %02x RF %02x.\n" +msgstr "Stanje: %s. Batt %02x RF %02x.\n" + +#: common/fbus-3810.c:2401 +msgid "0x10 Write failed!" +msgstr "0x10 Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2405 +msgid "Call terminated from phone (0x10 message).\n" +msgstr "Klic prekinjen z telefona (0x10 sporoèilo).\n" + +#: common/fbus-3810.c:2422 +msgid "Call terminated from opposite end of line (or from network).\n" +msgstr "Klic prekinjen z nasprotnega konca linije (ali z mre¾e).\n" + +#: common/fbus-3810.c:2440 +msgid "Call terminated from phone (0x12 message).\n" +msgstr "Klic prekinjen z telefona (0x12 sporoèilo).\n" + +#: common/fbus-3810.c:2458 +msgid "Incoming call answered from phone.\n" +msgstr "Dohodni klic odgovorjen z telefona.\n" + +#: common/fbus-3810.c:2472 +#, c-format +msgid "%s call established - status bytes %02x %02x.\n" +msgstr "%s klic vzpostavljen - status bytov %02x %02x.\n" + +#: common/fbus-3810.c:2489 +msgid "0x2c Write failed!" +msgstr "0x2c Pisanje neuspe¹no!" + +#: common/fbus-3810.c:2583 +#, c-format +msgid "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" +msgstr "PID:%02x DCS:%02x Timezone:%02x Stat1:%02x Stat2:%02x\n" + +#: common/fbus-3810.c:2650 +#, c-format +msgid "" +"Incoming SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Sender: %s(Type %02x) Msg " +"Center: %s\n" +msgstr "" +"Prihajajoè SMS %d/%d/%d %d:%02d:%02d tz:0x%02x Po¹iljatelj: %s(Type %02x) " +"Msg Center: %s\n" + +#: common/fbus-3810.c:2652 +#, c-format +msgid "" +" Msg Length %d, Msg memory %d Msg number %d, PID: %02x DCS: %02x Unknown: " +"%02x\n" +msgstr "" +" Dol¾ina Sporoèila %d, Kolièina spomina %d ¹tevilka sporoèila %d, PID: %" +"02x DCS: %02x Neznano: %02x\n" + +#: common/fbus-3810.c:2745 +msgid "Mobile phone identification received:\n" +msgstr "Identifikacija mobilnega telefona sprejeta:\n" + +#: common/fbus-3810.c:2746 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-3810.c:2748 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-3810.c:2750 +#, c-format +msgid " Revision: %s\n" +msgstr " Revizija: %s\n" + +#: common/fbus-3810.c:2824 +msgid "SMS Message Center Data:\n" +msgstr "Podatki Centra za SMS sporoèila:\n" + +#: common/fbus-3810.c:2825 +#, c-format +msgid "Selected memory: 0x%02x\n" +msgstr "Izbrnani spomin: 0x%02x\n" + +#: common/fbus-3810.c:2826 +#, c-format +msgid "Messages in Phone: 0x%02x Unread: 0x%02x\n" +msgstr "Sporoèil v telefonu: 0x%2x Neprebranih: 0x%02\n" + +#: common/fbus-3810.c:2828 +#, c-format +msgid "Messages in SIM: 0x%02x Unread: 0x%02x\n" +msgstr "Sporoèil v SIM kartici: 0x%02x Neprebranih: 0x%02x\n" + +#: common/fbus-3810.c:2830 +#, c-format +msgid "Reply via own centre: 0x%02x (%s)\n" +msgstr "Odgovori preko lastnega centra: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2832 +#, c-format +msgid "Delivery reports: 0x%02x (%s)\n" +msgstr "Sporoèilo o prejemu: 0x%02x (%s)\n" + +#: common/fbus-3810.c:2834 +#, c-format +msgid "Messages sent as: 0x%02x\n" +msgstr "Sporoèilo poslano kot: 0x%02x\n" + +#: common/fbus-3810.c:2835 +#, c-format +msgid "Message validity: 0x%02x\n" +msgstr "Veljavnost sporoèila: 0x%02x\n" + +#: common/fbus-3810.c:2836 +#, c-format +msgid "Unknown: 0x%02x\n" +msgstr "Nepoznano: 0x%02x\n" + +#: common/fbus-3810.c:2839 +msgid "UnknownNumber field empty." +msgstr "Neznana©tevilka polje prazno" + +#: common/fbus-3810.c:2841 +msgid "UnknownNumber: " +msgstr "Neznana©tevilka: " + +#: common/fbus-3810.c:2848 +msgid "Number field empty." +msgstr "©tevilèno polje prazno." + +#: common/fbus-3810.c:2851 xgnokii/xgnokii_calendar.c:229 +msgid "Number: " +msgstr "©tevilka: " + +#: common/fbus-6110-ringtones.c:356 +#, c-format +msgid "Error in PackRingtone - StartBit different to HowLong %d - %d)\n" +msgstr "Napaka v PackRingtone - StartBit je razlièen od HowLong %d - %d)\n" + +#: common/fbus-6110-ringtones.c:415 +msgid "Not header\n" +msgstr "Ni glava sporoèila\n" + +#: common/fbus-6110-ringtones.c:422 +msgid "Not RingingToneProgramming\n" +msgstr "Ni RingToneProgramming\n" + +#: common/fbus-6110-ringtones.c:433 +msgid "Not Sound\n" +msgstr "Ni Zvok\n" + +#: common/fbus-6110-ringtones.c:440 +msgid "Not BasicSongType\n" +msgstr "Ni BasicSongType\n" + +#: common/fbus-6110-ringtones.c:458 +msgid "Not PatternHeaderId\n" +msgstr "Ni PatternHeaderId\n" + +#: common/fbus-6110-ringtones.c:560 +msgid "Unsupported block\n" +msgstr "Nepodprt blok\n" + +#: common/fbus-6110.c:805 +msgid "Timeout in IR-mode\n" +msgstr "Iztekla se je èasovna omejitev v IR - naèinu\n" + +#: common/fbus-6110.c:839 +msgid "Couldn't open FB61 infrared device" +msgstr "FB61 infrardeèe naprave ni bilo mogoèe odpreti" + +#: common/fbus-6110.c:919 +msgid "Starting IR mode...!\n" +msgstr "Zagon IR naèina...!\n" + +#: common/fbus-6110.c:2098 gnokii/gnokii.c:906 gnokii/gnokii.c:1539 +#: gnokii/gnokii.c:2851 gnokii/gnokii.c:2874 +msgid "Send succeeded!\n" +msgstr "Po¹iljanje uspelo!\n" + +#: common/fbus-6110.c:2099 gnokii/gnokii.c:908 gnokii/gnokii.c:1541 +#: gnokii/gnokii.c:2853 +#, c-format +msgid "SMS Send failed (error=%d)\n" +msgstr "Po¹iljanje SMS neuspe¹no (napaka=%d)\n" + +#: common/fbus-6110.c:2122 +msgid "Serial flags dump:\n" +msgstr "Izpis serijskih oznak:\n" + +#: common/fbus-6110.c:2123 common/mbus-640.c:782 +#, c-format +msgid "DTR is %s.\n" +msgstr "DTR je %s.\n" + +#: common/fbus-6110.c:2123 common/fbus-6110.c:2124 common/fbus-6110.c:2125 +#: common/fbus-6110.c:2126 common/mbus-640.c:782 common/mbus-640.c:783 +msgid "up" +msgstr "gor" + +#: common/fbus-6110.c:2123 common/fbus-6110.c:2124 common/fbus-6110.c:2125 +#: common/fbus-6110.c:2126 common/mbus-640.c:782 common/mbus-640.c:783 +msgid "down" +msgstr "dol" + +#: common/fbus-6110.c:2124 common/mbus-640.c:783 +#, c-format +msgid "RTS is %s.\n" +msgstr "RTS je %s.\n" + +#: common/fbus-6110.c:2125 +#, c-format +msgid "CAR is %s.\n" +msgstr "CAR je %s.\n" + +#: common/fbus-6110.c:2126 +#, c-format +msgid "CTS is %s.\n" +msgstr "CTS je %s.\n" + +#: common/fbus-6110.c:2159 +msgid "Setting FBUS communication...\n" +msgstr "Nastavljanje FBUS komunikacije...\n" + +#: common/fbus-6110.c:2193 +msgid "Couldn't open FB61 device" +msgstr "Naprave FB61 ni bilo mogoèe odpreti" + +#: common/fbus-6110.c:2300 +msgid "Message: Call message, type 0x02:" +msgstr "Sporoèilo: Klicno sporoèilo, tip 0x02:" + +#: common/fbus-6110.c:2301 common/fbus-6110.c:2308 common/fbus-6110.c:2374 +msgid " Exact meaning not known yet, sorry :-(\n" +msgstr " Natanèen pomen ¹e ni znan, ¾al :-(\n" + +#: common/fbus-6110.c:2306 +msgid "Message: Call message, type 0x03:" +msgstr "Sporoèilo: Klicno sporoèilo, tip 0x03:" + +#: common/fbus-6110.c:2307 common/fbus-6110.c:2318 common/fbus-6110.c:2327 +#: common/fbus-6110.c:2347 common/fbus-6110.c:2353 common/fbus-6110.c:2373 +#, c-format +msgid " Sequence nr. of the call: %d\n" +msgstr " Zaporedna ¹t. klica: %d\n" + +#: common/fbus-6110.c:2317 +msgid "Message: Remote end hang up.\n" +msgstr "Sporoèilo: Oddaljeni konec je prekinil povezavo.\n" + +#: common/fbus-6110.c:2324 +msgid "Message: Incoming call alert:\n" +msgstr "Sporoèièo: Alarm za dohodni klic:\n" + +#: common/fbus-6110.c:2328 common/fbus-6110.c:2524 +msgid " Number: " +msgstr " ©tevilka: " + +#: common/fbus-6110.c:2333 common/fbus-6110.c:2512 +msgid " Name: " +msgstr " Ime: " + +#: common/fbus-6110.c:2346 +msgid "Message: Call answered.\n" +msgstr "Sporoèilo: Klic odgovorjen.\n" + +#: common/fbus-6110.c:2352 +msgid "Message: Call ended by your phone.\n" +msgstr "Sporoèilo: Klic konèan z va¹ega telefona.\n" + +#: common/fbus-6110.c:2372 +msgid "Message: Call message, type 0x0a:" +msgstr "Sporoèilo: Klicno sporoèilo, tip 0x0a:" + +#: common/fbus-6110.c:2381 +msgid "Message: Unknown message of type 0x01\n" +msgstr "Sporoèilo: Neznano sporoèilo tipa 0x01\n" + +#: common/fbus-6110.c:2391 +msgid "Message: SMS Message correctly sent.\n" +msgstr "Sporoèilo: SMS Sporoèilo pravilno poslano.\n" + +#: common/fbus-6110.c:2396 +msgid "Message: Sending SMS Message failed.\n" +msgstr "Sporoèilo: Po¹iljanje SMS Sporoèila neuspe¹no.\n" + +#: common/fbus-6110.c:2401 +msgid "Message: SMS Message Received\n" +msgstr "Sporoèio: SMS Sporoèilo Prejeto\n" + +#: common/fbus-6110.c:2402 common/fbus-6110.c:3347 +#, c-format +msgid " SMS center number: %s\n" +msgstr " ©tevilka centra za sporoèila: %s\n" + +#: common/fbus-6110.c:2406 common/fbus-6110.c:3348 +#, c-format +msgid " Remote number: %s\n" +msgstr " ©tevilka oddaljenega: %s\n" + +#: common/fbus-6110.c:2407 +#, c-format +msgid " Date: %s\n" +msgstr " Datum: %s\n" + +#: common/fbus-6110.c:2408 +msgid " SMS: " +msgstr " SMS: " + +#: common/fbus-6110.c:2418 +msgid "Message: Cell Broadcast enabled/disabled successfully.\n" +msgstr "Sporoèilo: Celièno Oddajanje omogoèeno/onemogoèeno uspe¹no.\n" + +#: common/fbus-6110.c:2427 +msgid "Message: CB received.\n" +msgstr "Sporoèilo: CB sprejet.\n" + +#: common/fbus-6110.c:2428 +#, c-format +msgid "Message: channel number %i\n" +msgstr "Sporoèilo: ¹tevilka kanala %i\n" + +#: common/fbus-6110.c:2440 +msgid "Message: SMS Center correctly set.\n" +msgstr "Sporoèilo: SMS Center je pravilno nastavljen.\n" + +#: common/fbus-6110.c:2452 +msgid "Message: SMS Center received:\n" +msgstr "Sporoèilo: SMS Center sprejet:\n" + +#: common/fbus-6110.c:2453 +#, c-format +msgid " %d. SMS Center name is %s\n" +msgstr " %d. Ime SMS Centra je %s\n" + +#: common/fbus-6110.c:2454 +#, c-format +msgid " SMS Center number is %s\n" +msgstr " ¹tevilka SMS Centra je %s\n" + +#: common/fbus-6110.c:2455 +msgid " SMS Center message format is " +msgstr " Format sporoèil SMS Centra je " + +#: common/fbus-6110.c:2458 gnokii/gnokii.c:1041 xgnokii/xgnokii.c:577 +#: xgnokii/xgnokii.c:606 xgnokii/xgnokii.c:1479 xgnokii/xgnokii_calendar.c:862 +msgid "Text" +msgstr "Tekst" + +#: common/fbus-6110.c:2459 gnokii/gnokii.c:1044 xgnokii/xgnokii.c:581 +#: xgnokii/xgnokii.c:1493 +msgid "Paging" +msgstr "Paging" + +#: common/fbus-6110.c:2460 gnokii/gnokii.c:1047 xgnokii/xgnokii.c:585 +#: xgnokii/xgnokii.c:1486 xgnokii/xgnokii_contacts.c:1991 +msgid "Fax" +msgstr "Faks" + +#: common/fbus-6110.c:2461 gnokii/gnokii.c:1051 +msgid "Email" +msgstr "Elektr. po¹ta" + +#: common/fbus-6110.c:2462 common/fbus-6110.c:2476 common/fbus-6110.c:3515 +#: common/fbus-6110.c:3933 gnokii/gnokii.c:1060 gnokii/gnokii.c:1087 +#: xgnokii/xgnokii_calendar.c:153 +msgid "Unknown" +msgstr "Neznano" + +#: common/fbus-6110.c:2467 +msgid " SMS Center message validity is " +msgstr " Veljavnost sporoèila SMS Centra je " + +#: common/fbus-6110.c:2470 gnokii/gnokii.c:1069 +msgid "1 hour" +msgstr "1 uro" + +#: common/fbus-6110.c:2471 gnokii/gnokii.c:1072 +msgid "6 hours" +msgstr "6 ur" + +#: common/fbus-6110.c:2472 gnokii/gnokii.c:1075 +msgid "24 hours" +msgstr "24 ur" + +#: common/fbus-6110.c:2473 gnokii/gnokii.c:1078 +msgid "72 hours" +msgstr "72 ur" + +#: common/fbus-6110.c:2474 gnokii/gnokii.c:1081 xgnokii/xgnokii.c:629 +#: xgnokii/xgnokii.c:1558 +msgid "1 week" +msgstr "1 teden" + +#: common/fbus-6110.c:2475 gnokii/gnokii.c:1084 +msgid "Maximum time" +msgstr "Najdalj¹i èas" + +#: common/fbus-6110.c:2486 +msgid "Message: SMS Center error received:\n" +msgstr "Sporoèilo: Sprejeta napaka SMS Centra:\n" + +#: common/fbus-6110.c:2487 +msgid " The request for SMS Center failed.\n" +msgstr " Zahteva po SMS Centru ni uspela.\n" + +#: common/fbus-6110.c:2494 +msgid "Unknown message!\n" +msgstr "Neznano sporoèilo!\n" + +#: common/fbus-6110.c:2511 +msgid "Message: Phonebook entry received:\n" +msgstr "Sporoèilo: Sprejet vnos v imenik:\n" + +#: common/fbus-6110.c:2540 +msgid " Date: " +msgstr " Datum: " + +#: common/fbus-6110.c:2542 +msgid " Time: " +msgstr " Èas: " + +#: common/fbus-6110.c:2552 +msgid "Message: Phonebook read entry error received:\n" +msgstr "Sporoèilo: Napaka pri branju imenika:\n" + +#: common/fbus-6110.c:2555 +msgid " Invalid memory type!\n" +msgstr " Napaèna vrsta spomina!\n" + +#: common/fbus-6110.c:2559 common/fbus-6110.c:2582 +msgid " Unknown error!\n" +msgstr " Neznana napaka\n" + +#: common/fbus-6110.c:2566 +msgid "Message: Phonebook written correctly.\n" +msgstr "Sporoèilo: Imenih pravilno zapisan.\n" + +#: common/fbus-6110.c:2577 +msgid "Message: Phonebook not written - name is too long.\n" +msgstr "Sporoèilo: Imenik ni bil zapisan - predolgo ime.\n" + +#: common/fbus-6110.c:2590 +msgid "Message: Memory status received:\n" +msgstr "Sporoèilo: Stanje spomina sprejeto:\n" + +#: common/fbus-6110.c:2591 +#, c-format +msgid " Memory Type: %s\n" +msgstr " Vrsta spomina je: %s\n" + +#: common/fbus-6110.c:2592 +#, c-format +msgid " Used: %d\n" +msgstr " Uporabljen: %d\n" + +#: common/fbus-6110.c:2593 +#, c-format +msgid " Free: %d\n" +msgstr " Prost: %d\n" + +#: common/fbus-6110.c:2602 +msgid "Message: Memory status error, phone is probably powered off.\n" +msgstr "" +"Sporoèilo: Napaka v stanju spomina, najverjetneje je telefon ugasnjen.\n" + +#: common/fbus-6110.c:2607 +msgid "" +"Message: Memory status error, memory type not supported by phone model.\n" +msgstr "" +"Sporoèilo: Napaka v stanju spomina, tip spomina pri tem modelu telefona ni " +"podprt.\n" + +#: common/fbus-6110.c:2612 +msgid "Message: Memory status error, waiting for security code.\n" +msgstr "Sporoèilo: Napaka v stanju spomina, èakam na varnostno kodo.\n" + +#: common/fbus-6110.c:2617 +#, c-format +msgid "" +"Message: Unknown Memory status error, subtype (MessageBuffer[4]) = %02x\n" +msgstr "" +"Sporoèilo: Neunana napaka v stanju spomina, podtip (MessageBuffer[4]) = %" +"02x\n" + +#: common/fbus-6110.c:2632 +msgid "Message: Caller group logo etc.\n" +msgstr "Sporoèilo: Logotip skupine klicoèih.\n" + +#: common/fbus-6110.c:2633 +#, c-format +msgid "Caller group name: %s\n" +msgstr "Ime skupine klicoèih: %s\n" + +#: common/fbus-6110.c:2650 +msgid "Message: Caller group data received but not requested!\n" +msgstr "" +"Sporoèilo: Podatki za skupino klicoèih sprejeti, vendar ne zahtevani!\n" + +#: common/fbus-6110.c:2656 +msgid "Message: Error attempting to get caller group data.\n" +msgstr "Sporoèilo: Napaka pri dostopu do podatkov skupine klicoèih.\n" + +#: common/fbus-6110.c:2661 +msgid "Message: Caller group data set correctly.\n" +msgstr "Sporoèilo: Podatki skupine klicoèih napaèno nastavljeni.\n" + +#: common/fbus-6110.c:2666 +msgid "Message: Error attempting to set caller group data\n" +msgstr "Sporoèilo: Napaka pri dostopu do podatkov skupine klicoèih\n" + +#: common/fbus-6110.c:2672 +msgid "Message: Speed dial entry received:\n" +msgstr "Sporoèilo: Sprejet vnos za hitro klicanje:\n" + +#: common/fbus-6110.c:2673 +#, c-format +msgid " Location: %d\n" +msgstr " Lokacija: %d\n" + +#: common/fbus-6110.c:2674 +#, c-format +msgid " MemoryType: %s\n" +msgstr " Vrsta spomina: %s\n" + +#: common/fbus-6110.c:2675 +#, c-format +msgid " Number: %d\n" +msgstr " ©tevilka: %d\n" + +#: common/fbus-6110.c:2680 +msgid "Message: Speed dial entry error\n" +msgstr "Sporoèilo: Napaka pri vna¹anju hitrega klicanja\n" + +#: common/fbus-6110.c:2685 +msgid "Message: Speed dial entry set.\n" +msgstr "Sporoèilo: Hitro klicanje nastavljeno.\n" + +#: common/fbus-6110.c:2690 +msgid "Message: Speed dial entry setting error.\n" +msgstr "Sporoèilo: Napaka pri nastavljanju hitrega klicanja.\n" + +#: common/fbus-6110.c:2695 +msgid "Message: Unknown message of type 0x03\n" +msgstr "Sporoèilo: Neznano sporoèilo tipa 0x03\n" + +#: common/fbus-6110.c:2706 +msgid "Message: Phone status received:\n" +msgstr "Sporoèilo: Stanje telefona sprejeto:\n" + +#: common/fbus-6110.c:2707 +msgid " Mode: " +msgstr " Mode: " + +#: common/fbus-6110.c:2709 +msgid "registered within the network\n" +msgstr "prijavljen v omre¾je\n" + +#: common/fbus-6110.c:2712 +msgid "call in progress\n" +msgstr "klic v teku\n" + +#: common/fbus-6110.c:2713 +msgid "waiting for security code\n" +msgstr "èakam na varnostno kodo\n" + +#: common/fbus-6110.c:2714 +msgid "powered off\n" +msgstr "vkljuèen\n" + +#: common/fbus-6110.c:2715 common/fbus-6110.c:2721 +msgid "unknown\n" +msgstr "neznan\n" + +#: common/fbus-6110.c:2717 +msgid " Power source: " +msgstr " Vrsta napajanja: " + +#: common/fbus-6110.c:2719 +#, fuzzy +msgid "AC/DC\n" +msgstr "AC/DC\n" + +#: common/fbus-6110.c:2720 +msgid "battery\n" +msgstr "baterija\n" + +#: common/fbus-6110.c:2723 +#, c-format +msgid " Battery Level: %d\n" +msgstr " Stanje napolnjenosti baterije: %d\n" + +#: common/fbus-6110.c:2724 +#, c-format +msgid " Signal strength: %d\n" +msgstr " Moè signala: %d\n" + +#: common/fbus-6110.c:2732 +msgid "Message: Unknown message of type 0x04\n" +msgstr "Sporoèilo: Neznano sporoèilo tipa 0x04\n" + +#: common/fbus-6110.c:2743 +msgid "Message: Profile feature change result.\n" +msgstr "Sporoèilo: Rezultat spremembe lastnosti profila.\n" + +#: common/fbus-6110.c:2785 +msgid "Message: Startup Logo, welcome note and dealer welcome note received.\n" +msgstr "" +"Sporoèilo: Zagonski Logo, dobrodo¹lica in zastopnikova dobrodo¹lica niso " +"bili sprejeti.\n" + +#: common/fbus-6110.c:2803 +msgid "Startup logo supported - " +msgstr "Zagonski logotip je podprt - " + +#: common/fbus-6110.c:2804 +msgid "currently set\n" +msgstr "trenutno nastavljen\n" + +#: common/fbus-6110.c:2805 common/fbus-6110.c:2820 common/fbus-6110.c:2836 +#: gnokii/gnokii.c:1633 +msgid "currently empty\n" +msgstr "trenutno prazen\n" + +#: common/fbus-6110.c:2814 +msgid "Startup Text supported - " +msgstr "Izpis teksta ob zagonu ni podprt - " + +#: common/fbus-6110.c:2816 common/fbus-6110.c:2833 +msgid "currently set to \"" +msgstr "trenutno nastavljen na \"" + +#: common/fbus-6110.c:2817 common/fbus-6110.c:2834 +#, c-format +msgid "%c" +msgstr "%c" + +#: common/fbus-6110.c:2818 common/fbus-6110.c:2835 +msgid "\"\n" +msgstr "\"\n" + +#: common/fbus-6110.c:2831 +msgid "Dealer Welcome supported - " +msgstr "Zastopnikova dobrodo¹lica podprta - " + +#: common/fbus-6110.c:2844 +msgid "Message: Startup logo received but not requested!\n" +msgstr "Sporoèilo: Zagonski logo sprejet vendar ne zahtevan!\n" + +#: common/fbus-6110.c:2849 +msgid "" +"Message: Startup logo, welcome note or dealer welcome note correctly set.\n" +msgstr "" +"Sporoèilo: Zagonski logo, dobrodo¹lica ali zastopnikova dobrodo¹lica " +"pravilno nastavljena.\n" + +#: common/fbus-6110.c:2868 +msgid "Message: Operator logo correctly set.\n" +msgstr "Sporoèilo: Operaterjev logo pravilno nastavljen.\n" + +#: common/fbus-6110.c:2874 +msgid "Message: Error setting operator logo!\n" +msgstr "Sporoèilo: Napaka pri nastavljanju operaterjevega logota!\n" + +#: common/fbus-6110.c:2889 +#, c-format +msgid "Message: Operator Logo for %s (%s) network received.\n" +msgstr "Sporoèilo: Operaterjev logo za %s (%s) omre¾je sprejet.\n" + +#: common/fbus-6110.c:2903 +msgid "Message: Operator logo received but not requested!\n" +msgstr "Sporoèilo: Operaterjev logo sprejet vendar ne zahtevan!\n" + +#: common/fbus-6110.c:2907 +msgid "Message: Error getting operator logo!\n" +msgstr "Sporoèilo: Napaka pri sprejemu operaterjevega logotipa!\n" + +#: common/fbus-6110.c:2919 +msgid "Message: Security Code status received: " +msgstr "Sporoèilo: Prejet status varnostne kode: " + +#: common/fbus-6110.c:2921 gnokii/gnokii.c:1408 +msgid "waiting for Security Code.\n" +msgstr "èakam na Varnostno Kodo.\n" + +#: common/fbus-6110.c:2922 gnokii/gnokii.c:1411 +msgid "waiting for PIN.\n" +msgstr "èakam na PIN.\n" + +#: common/fbus-6110.c:2923 gnokii/gnokii.c:1414 +msgid "waiting for PIN2.\n" +msgstr "èakam na PIN2.\n" + +#: common/fbus-6110.c:2924 gnokii/gnokii.c:1417 +msgid "waiting for PUK.\n" +msgstr "èakam na PUK.\n" + +#: common/fbus-6110.c:2925 gnokii/gnokii.c:1420 +msgid "waiting for PUK2.\n" +msgstr "èakam na PUK2.\n" + +#: common/fbus-6110.c:2926 gnokii/gnokii.c:1423 +#, fuzzy +msgid "nothing to enter.\n" +msgstr "niè za vnost.\n" + +#: common/fbus-6110.c:2927 gnokii/gnokii.c:1426 +msgid "Unknown!\n" +msgstr "Neznano!\n" + +#: common/fbus-6110.c:2933 +msgid "Message: Security code accepted.\n" +msgstr "Sporoèilo: Varnostna koda sprejeta.\n" + +#: common/fbus-6110.c:2938 +msgid "Message: Security code is wrong. You're not my big owner :-)\n" +msgstr "Sporoèilo: Varnostna koda je napaèna. Vi niste moj pravi lastnik :-)\n" + +#: common/fbus-6110.c:2957 +msgid "Message: Network information:\n" +msgstr "Sporoèilo: Podatki o omre¾ju:\n" + +#: common/fbus-6110.c:2959 +#, c-format +msgid " CellID: %s\n" +msgstr " CellID: %s\n" + +#: common/fbus-6110.c:2960 +#, c-format +msgid " LAC: %s\n" +msgstr " LAC: %s\n" + +#: common/fbus-6110.c:2961 +#, c-format +msgid " Network code: %s\n" +msgstr " Omre¾na koda: %s\n" + +#: common/fbus-6110.c:2962 +#, c-format +msgid " Network name: %s (%s)\n" +msgstr " Ime omre¾ja: %s (%s)\n" + +#: common/fbus-6110.c:2965 +msgid " Status: " +msgstr " Stanje: " + +#: common/fbus-6110.c:2968 +msgid "home network selected" +msgstr "domaèe omre¾je izbrano" + +#: common/fbus-6110.c:2969 +msgid "roaming network" +msgstr "gostujoèe omre¾je" + +#: common/fbus-6110.c:2970 +msgid "requesting network" +msgstr "zahtevano omre¾je" + +#: common/fbus-6110.c:2971 +msgid "not registered in the network" +msgstr "niste registrirani v omre¾ju" + +#: common/fbus-6110.c:2972 xgnokii/xgnokii_logos.c:1476 +#: xgnokii/xgnokii_lowlevel.c:138 xgnokii/xgnokii_lowlevel.c:216 +#: xgnokii/xgnokii_lowlevel.c:218 xgnokii/xgnokii_lowlevel.c:219 +msgid "unknown" +msgstr "neznan" + +#: common/fbus-6110.c:2977 +#, c-format +msgid " Network selection: %s\n" +msgstr " Izbira omre¾ja: %s\n" + +#: common/fbus-6110.c:2977 +msgid "manual" +msgstr "roèno" + +#: common/fbus-6110.c:2977 +msgid "automatic" +msgstr "avtomatsko" + +#: common/fbus-6110.c:2983 +msgid "Message: Unknown message of type 0x0a\n" +msgstr "Sporoèilo: Neznan tip sporoèila 0x0a\n" + +#: common/fbus-6110.c:3006 gnokii/gnokii.c:2717 +#, c-format +msgid "Call in progress: %s\n" +msgstr "Klic v poteku: %s\n" + +#: common/fbus-6110.c:3007 gnokii/gnokii.c:2718 +#, c-format +msgid "Unknown: %s\n" +msgstr "Neznan: %s\n" + +#: common/fbus-6110.c:3008 gnokii/gnokii.c:2719 +#, c-format +msgid "Unread SMS: %s\n" +msgstr "Neprebran SMS: %s\n" + +#: common/fbus-6110.c:3009 gnokii/gnokii.c:2720 +#, c-format +msgid "Voice call: %s\n" +msgstr "Glasovni klic: %s\n" + +#: common/fbus-6110.c:3010 gnokii/gnokii.c:2721 +#, c-format +msgid "Fax call active: %s\n" +msgstr "Fax klic aktiven: %s\n" + +#: common/fbus-6110.c:3011 gnokii/gnokii.c:2722 +#, c-format +msgid "Data call active: %s\n" +msgstr "Podatkovni klic aktiven: %s\n" + +#: common/fbus-6110.c:3012 gnokii/gnokii.c:2723 +#, c-format +msgid "Keyboard lock: %s\n" +msgstr "Zaklepanje tipkovnice: %s\n" + +#: common/fbus-6110.c:3013 gnokii/gnokii.c:2724 +#, fuzzy, c-format +msgid "SMS storage full: %s\n" +msgstr "SMS pomnilnik poln: %s\n" + +#: common/fbus-6110.c:3019 +msgid "Display output successfully disabled/enabled.\n" +msgstr "Prikaz na zaslon uspe¹no omogoèen/neomogoèen.\n" + +#: common/fbus-6110.c:3025 +msgid "Unknown message of type 0x0d.\n" +msgstr "Neznano sporoèilo tipa 0x0d.\n" + +#: common/fbus-6110.c:3037 +msgid "Message: Date and time set correctly\n" +msgstr "Sporoèilo: Datum in ura sta pravilno nastavljena\n" + +#: common/fbus-6110.c:3042 common/fbus-6110.c:3072 +msgid "Message: Date and time set error\n" +msgstr "Sporoèilo: Napaka v nastavitvi datuma in ure\n" + +#: common/fbus-6110.c:3057 +msgid "Message: Date and time\n" +msgstr "Sporoèilo: Datum in ura\n" + +#: common/fbus-6110.c:3058 common/fbus-6110.c:3157 gnokii/gnokii.c:1987 +#, c-format +msgid " Time: %02d:%02d:%02d\n" +msgstr " Ura: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3059 +#, c-format +msgid " Date: %4d/%02d/%02d\n" +msgstr " Datum: %4d/%02d/%02d\n" + +#: common/fbus-6110.c:3067 +msgid "Message: Alarm set correctly\n" +msgstr "Sporoèilo: Alarm je pravilno nastavljen\n" + +#: common/fbus-6110.c:3079 +msgid "Message: Alarm\n" +msgstr "Sporoèilo: Alarm\n" + +#: common/fbus-6110.c:3080 +#, c-format +msgid " Alarm: %02d:%02d\n" +msgstr " Alarm: %02d:%02d\n" + +#: common/fbus-6110.c:3081 +#, c-format +msgid " Alarm is %s\n" +msgstr " Alarm je %s\n" + +#: common/fbus-6110.c:3081 gnokii/gnokii.c:2717 gnokii/gnokii.c:2718 +#: gnokii/gnokii.c:2719 gnokii/gnokii.c:2720 gnokii/gnokii.c:2721 +#: gnokii/gnokii.c:2722 gnokii/gnokii.c:2723 gnokii/gnokii.c:2724 +msgid "on" +msgstr "vklopljen" + +#: common/fbus-6110.c:3081 gnokii/gnokii.c:2717 gnokii/gnokii.c:2718 +#: gnokii/gnokii.c:2719 gnokii/gnokii.c:2720 gnokii/gnokii.c:2721 +#: gnokii/gnokii.c:2722 gnokii/gnokii.c:2723 gnokii/gnokii.c:2724 +msgid "off" +msgstr "izklopljen" + +#: common/fbus-6110.c:3091 +msgid "Message: Unknown message of type 0x11\n" +msgstr "Sporoèilo: Neznano sporoèilo tipa 0x11\n" + +#: common/fbus-6110.c:3103 +msgid "Message: Calendar note write succesfull!\n" +msgstr "Sporoèilo: Uspe¹no zapisana opomba v koledar!\n" + +#: common/fbus-6110.c:3107 common/fbus-6110.c:3111 +msgid "Message: Calendar note write failed!\n" +msgstr "Sporoèilo: Neuspel zapis opombe v koledar!\n" + +#: common/fbus-6110.c:3115 +msgid "Unknown message of type 0x13 and subtype 0x65\n" +msgstr "Neznano sporoèilo tipa 0x13 in podtipa 0x65\n" + +#: common/fbus-6110.c:3153 +msgid "Message: Calendar note received.\n" +msgstr "Sporoèilo: Opomba koledarja sprejeta.\n" + +#: common/fbus-6110.c:3154 gnokii/gnokii.c:1983 +#, c-format +msgid " Date: %d-%02d-%02d\n" +msgstr " Datum: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3164 gnokii/gnokii.c:1992 +#, c-format +msgid " Alarm date: %d-%02d-%02d\n" +msgstr " Datum alarma: %d-%02d-%02d\n" + +#: common/fbus-6110.c:3167 gnokii/gnokii.c:1996 +#, c-format +msgid " Alarm time: %02d:%02d:%02d\n" +msgstr " Èas alarma: %02d:%02d:%02d\n" + +#: common/fbus-6110.c:3172 +#, c-format +msgid " Type: %d\n" +msgstr " Tip: %d\n" + +#: common/fbus-6110.c:3173 gnokii/gnokii.c:2001 +#, c-format +msgid " Text: %s\n" +msgstr " Tekst: %s\n" + +#: common/fbus-6110.c:3175 gnokii/gnokii.c:2004 +#, c-format +msgid " Phone: %s\n" +msgstr " Telefon: %s\n" + +#: common/fbus-6110.c:3180 +msgid "Message: Calendar note not available\n" +msgstr "Sporoèilo: Opomba koledarja ni na voljo\n" + +#: common/fbus-6110.c:3185 +msgid "Message: Calendar note error\n" +msgstr "Sporoèilo: Napaka v opombi koledarja\n" + +#: common/fbus-6110.c:3197 +msgid "Message: Calendar note deleted\n" +msgstr "Sporoèilo: Opomba koledarja izbrisana\n" + +#: common/fbus-6110.c:3201 +msgid "Message: Calendar note can't be deleted\n" +msgstr "Sporoèilo: Opomba koledarja ne more biti izbrisana\n" + +#: common/fbus-6110.c:3205 +msgid "Message: Calendar note deleting error\n" +msgstr "Sporoèilo: Napaka pri izbrisu opombe koledarja\n" + +#: common/fbus-6110.c:3215 +msgid "Message: Calendar Alarm active\n" +msgstr "Sporoèilo: Alarm Koledarja aktiven\n" + +#: common/fbus-6110.c:3216 +#, c-format +msgid " Item number: %d\n" +msgstr " ©tevilka predmeta: %d\n" + +#: common/fbus-6110.c:3220 +msgid "Message: Unknown message of type 0x13\n" +msgstr "Sporoèilo: Neznano sporoèilo tipa 0x13\n" + +#: common/fbus-6110.c:3272 +msgid "Concatenated message!!!\n" +msgstr "Povezana sporoèila!!!\n" + +#: common/fbus-6110.c:3301 +#, c-format +msgid "Number: %d\n" +msgstr "©tevilka: %d\n" + +#: common/fbus-6110.c:3304 +#, fuzzy +msgid "Message: Outbox message (mobile originated)\n" +msgstr "Sporoèilo: Sporoèilo iz \"Outbox-a\" (izvira iz mobilca)\n" + +#: common/fbus-6110.c:3306 +msgid "Sent\n" +msgstr "Poslano\n" + +#: common/fbus-6110.c:3308 +msgid "Not sent\n" +msgstr "Neposlano\n" + +#: common/fbus-6110.c:3312 +msgid "Message: Received SMS (mobile terminated)\n" +msgstr "Sporoèilo: Prejet SMS (mobilec prekinil)\n" + +#: common/fbus-6110.c:3314 +msgid "Delivery Report\n" +msgstr "Poroèilo o prejemu\n" + +#: common/fbus-6110.c:3316 +msgid "Unknown type\n" +msgstr "Neznan tip\n" + +#: common/fbus-6110.c:3319 +msgid "Read\n" +msgstr "Prebrano\n" + +#: common/fbus-6110.c:3321 +msgid "Not read\n" +msgstr "Neprebrano\n" + +#: common/fbus-6110.c:3323 +#, c-format +msgid " Date: %s " +msgstr " Datum: %s " + +#: common/fbus-6110.c:3331 common/fbus-6110.c:3343 gnokii/gnokii.c:1198 +#: gnokii/gnokii.c:1208 gnokii/gnokii.c:1227 +#, c-format +msgid "%02d00" +msgstr "%02d00" + +#: common/fbus-6110.c:3336 +#, c-format +msgid " SMSC response date: %s " +msgstr " datum SMSC odgovora: %s " + +#: common/fbus-6110.c:3401 +msgid "Delivered" +msgstr "Dostavljeno" + +#: common/fbus-6110.c:3404 +msgid "SM received by the SME" +msgstr "SM sprejet z SME" + +#: common/fbus-6110.c:3407 +msgid "" +"SM forwarded by the SC to the SME but the SC is unable to confirm delivery" +msgstr "SM posredovan preko SC na SME toda SC ni bil zmo¾en potrditi dostave" + +#: common/fbus-6110.c:3410 +msgid "SM replaced by the SC" +msgstr "SM zamenjan z SC" + +#: common/fbus-6110.c:3416 +msgid "Failed" +msgstr "Neuspelo" + +#: common/fbus-6110.c:3421 +msgid "Temporary error, SC is not making any more transfer attempts\n" +msgstr "Zaèasna napaka, SC ne bo veè opravljal prenosov\n" + +#: common/fbus-6110.c:3425 common/fbus-6110.c:3492 +msgid "Congestion" +msgstr "Prenatrpanost" + +#: common/fbus-6110.c:3428 common/fbus-6110.c:3495 +msgid "SME busy" +msgstr "SME zaseden" + +#: common/fbus-6110.c:3431 common/fbus-6110.c:3498 +msgid "No response from SME" +msgstr "Ni odziva od SME" + +#: common/fbus-6110.c:3434 common/fbus-6110.c:3501 +msgid "Service rejected" +msgstr "Storitev zavrnjena" + +#: common/fbus-6110.c:3437 common/fbus-6110.c:3462 common/fbus-6110.c:3504 +msgid "Quality of service not aviable" +msgstr "Kvaliteta storitve ni dosegljiva" + +#: common/fbus-6110.c:3440 common/fbus-6110.c:3507 +msgid "Error in SME" +msgstr "Napaka v SME" + +#: common/fbus-6110.c:3443 common/fbus-6110.c:3480 common/fbus-6110.c:3510 +#: common/fbus-6110.c:3518 +#, c-format +msgid "Reserved/Specific to SC: %x" +msgstr "Rezervirano/Specifièno za SC: %x" + +#: common/fbus-6110.c:3447 +msgid "Permanent error, SC is not making any more transfer attempts\n" +msgstr "Trajna napaka, SC ne bo veè opravljal prenosov\n" + +#: common/fbus-6110.c:3450 +msgid "Remote procedure error" +msgstr "Napaka v oddaljenem postopku" + +#: common/fbus-6110.c:3453 +#, fuzzy +msgid "Incompatibile destination" +msgstr "Nekompatibilen cilj" + +#: common/fbus-6110.c:3456 +msgid "Connection rejected by SME" +msgstr "Povezava zavrnjena od SME" + +#: common/fbus-6110.c:3459 +#, fuzzy +msgid "Not obtainable" +msgstr "Nepridobljivo" + +#: common/fbus-6110.c:3465 +#, fuzzy +msgid "No internetworking available" +msgstr "Internetworkinga ni bilo mogoèe doseèi" + +#: common/fbus-6110.c:3468 +msgid "SM Validity Period Expired" +msgstr "Veljavnost SM je potekla" + +#: common/fbus-6110.c:3471 +msgid "SM deleted by originating SME" +msgstr "SM izbrisan od izvornega SME" + +#: common/fbus-6110.c:3474 +msgid "SM Deleted by SC Administration" +msgstr "SM izbrisan od SC Administracije" + +#: common/fbus-6110.c:3477 +msgid "SM does not exist" +msgstr "SM ne obstaja" + +#: common/fbus-6110.c:3486 +msgid "Pending" +msgstr "V teku" + +#: common/fbus-6110.c:3489 +msgid "Temporary error, SC still trying to transfer SM\n" +msgstr "Zaèasna napaka, SC ¹e vednno prena¹a do SM\n" + +#: common/fbus-6110.c:3537 +#, c-format +msgid "Message stored at %d\n" +msgstr "Sporoèilo shranjeno na %d\n" + +#: common/fbus-6110.c:3542 +msgid "SMS saving failed\n" +msgstr "Shranjevanje SMS ni uspelo\n" + +#: common/fbus-6110.c:3545 +msgid " All locations busy.\n" +msgstr " Vse lokacije so zasedene.\n" + +#: common/fbus-6110.c:3549 common/fbus-6110.c:3564 +msgid " Invalid location!\n" +msgstr " Neveljavna lokacija!\n" + +#: common/fbus-6110.c:3553 +msgid " Unknown error.\n" +msgstr " Neznana napaka.\n" + +#: common/fbus-6110.c:3561 +msgid "Message: SMS reading failed.\n" +msgstr "Sporoèilo: branje SMS sporoèila neuspe¹no.\n" + +#: common/fbus-6110.c:3568 +msgid " Empty SMS location.\n" +msgstr " Prazna lokacija SMS-a.\n" + +#: common/fbus-6110.c:3575 +msgid "Message: SMS deleted successfully.\n" +msgstr "Sporoèilo: SMS uspe¹no izbrisan.\n" + +#: common/fbus-6110.c:3580 +msgid "Message: SMS Status Received\n" +msgstr "Sporoèilo: SMS Stanje Sprejeto\n" + +#: common/fbus-6110.c:3581 +#, c-format +msgid " The number of messages: %d\n" +msgstr " ©tevilo sporoèil je: %d\n" + +#: common/fbus-6110.c:3582 +#, c-format +msgid " Unread messages: %d\n" +msgstr " Neprebranih sporoèil: %d\n" + +#: common/fbus-6110.c:3589 +msgid "Message: SMS Status error, probably not authorized by PIN\n" +msgstr "Sporoèilo: napaka v SMS statusu, verjetno ni PIN avtorizacije\n" + +#: common/fbus-6110.c:3611 +msgid "Message: Netmonitor correctly set.\n" +msgstr "Sporoèilo: Netmonitor je pravilno nastavljen.\n" + +#: common/fbus-6110.c:3615 +#, c-format +msgid "Message: Netmonitor menu %d received:\n" +msgstr "Sporoèilo: Netmonitor menu %d sprejet:\n" + +#: common/fbus-6110.c:3625 +msgid "Unknown message of type 0x40.\n" +msgstr "Neznano sporoèilo tipa 0x40.\n" + +#: common/fbus-6110.c:3643 +msgid "Message: Mobile phone identification received:\n" +msgstr "Sporoèilo: Identifikacija mobilnega telefona je bila sprejeta:\n" + +#: common/fbus-6110.c:3644 +#, c-format +msgid " IMEI: %s\n" +msgstr " IMEI: %s\n" + +#: common/fbus-6110.c:3645 +#, c-format +msgid " Model: %s\n" +msgstr " Model: %s\n" + +#: common/fbus-6110.c:3646 +#, c-format +msgid " Production Code: %s\n" +msgstr " Za¹èitna Koda: %s\n" + +#: common/fbus-6110.c:3647 +#, c-format +msgid " HW: %s\n" +msgstr " HW: %s\n" + +#: common/fbus-6110.c:3648 +#, c-format +msgid " Firmware: %s\n" +msgstr " Firmware: %s\n" + +#: common/fbus-6110.c:3654 +#, c-format +msgid " Magic bytes: %02x %02x %02x %02x\n" +msgstr " Magièni bajti: %02x %02x %02x %02x\n" + +#: common/fbus-6110.c:3665 +#, c-format +msgid "[Received Ack of type %02x, seq: %2x]\n" +msgstr "[Sprejet Ack tipa %02x, seq: %2x]\n" + +#: common/fbus-6110.c:3672 +#, fuzzy +msgid "Message: The phone is powered on - seq 1.\n" +msgstr "Sporoèilo: Telefon poganja . seq 1.\n" + +#: common/fbus-6110.c:3686 +#, c-format +msgid "" +"Phone info:\n" +"%s\n" +msgstr "" +"Informacije o telefonu:\n" +"%s\n" + +#: common/fbus-6110.c:3697 +#, fuzzy +msgid "Message: The phone is powered on - seq 2.\n" +msgstr "Sporoèilo: Telefon poganja - seq 2.\n" + +#: common/fbus-6110.c:3704 +msgid "Message: Unknown message.\n" +msgstr "Sporoèilo: Neznano sporoèilo.\n" + +#: common/fbus-6110.c:3810 +msgid "Interrupted MultiFrame-Message - Ignoring it !!!\n" +msgstr "Prekinjeno MultiFrame-Sporoèilo - Ignoriram ga !!!\n" + +#: common/fbus-6110.c:3811 +msgid "Please report it ...\n" +msgstr "Prosim prijavite ...\n" + +#: common/fbus-6110.c:3837 +msgid "FB61: Message buffer overun - resetting\n" +msgstr "FB61: Buffer overun sporoèila - ponovno zaganjam\n" + +#: common/fbus-6110.c:3862 +msgid "Bad checksum!\n" +msgstr "Napaèna kontrolna vsota!\n" + +#: common/fbus-6110.c:3927 xgnokii/xgnokii.c:1799 +msgid "Phone" +msgstr "Telefon" + +#: common/fbus-6110.c:3930 +msgid "PC" +msgstr "PC" + +#: common/fbus-6110.c:3947 +#, c-format +msgid "Msg Dest: %s\n" +msgstr "Cilj sporoèila: %s\n" + +#: common/fbus-6110.c:3948 +#, c-format +msgid "Msg Source: %s\n" +msgstr "Izvor Sporoèila: %s\n" + +#: common/fbus-6110.c:3949 +#, c-format +msgid "Msg Type: %02x\n" +msgstr "Tip Sporoèila: %02x\n" + +#: common/fbus-6110.c:3950 +#, c-format +msgid "Msg Unknown: %02x\n" +msgstr "Neznano sporoèilo: %02x\n" + +#: common/fbus-6110.c:3951 +#, c-format +msgid "" +"Msg Len: %02x\n" +"Phone: " +msgstr "" +"Dol¾ina sporoèila: %02x\n" +"Telefon: " + +#: common/fbus-6110.c:4017 +msgid "PC: " +msgstr "PC: " + +#: common/fbus-6110.c:4083 +#, c-format +msgid "[Sending Ack of type %02x, seq: %x]\n" +msgstr "[Po¹iljam Ack tipa %02x, seq: %x]\n" + +#: common/mbus-6160.c:561 +msgid "Standard Ack write (0x40) failed!" +msgstr "Standardni Ack zapis (0x40) neuspe¹en!" + +#: common/mbus-6160.c:587 +msgid "Standard Ack write (0xd2) failed!" +msgstr "Standardni Ack zapis (0xd2) neuspe¹en!" + +#: common/mbus-6160.c:1032 +msgid "Couldn't open MB61 device: " +msgstr "Naprave MB61 ni bilo mogoèe odpreti" + +#: common/mbus-640.c:675 +msgid "Phone: " +msgstr "Telefon: " + +#: common/mbus-640.c:705 common/mbus-640.c:805 +msgid "PC : " +msgstr "PC : " + +#: common/mbus-640.c:715 common/mbus-640.c:818 +msgid "Write error!\n" +msgstr "Napaka pri pisanju!\n" + +#: common/mbus-640.c:742 +msgid "Setting MBUS communication...\n" +msgstr "Nastavljanje MBUS komunikacije...\n" + +#: common/data/rlp-common.c:746 +msgid "Unknown!!! " +msgstr "Neznano!!! " + +#: common/data/rlp-common.c:811 +msgid "BAD" +msgstr "SLAB" + +#: common/data/rlp-common.c:936 +msgid "Frame FCS is bad. Ignoring...\n" +msgstr "Okvir FCS je zaniè, Ignoriram...\n" + +#: common/data/rlp-common.c:1424 +msgid "RLP state 0.\n" +msgstr "RLP stanje 0.\n" + +#: common/data/rlp-common.c:1462 +msgid "RLP state 1.\n" +msgstr "RLP stanje 1.\n" + +#: common/data/rlp-common.c:1510 +msgid "RLP state 2.\n" +msgstr "RLP stanje 2.\n" + +#: common/data/rlp-common.c:1544 +msgid "UA received in RLP state 2.\n" +msgstr "UA je sprejel RLP stanje 2.\n" + +#: common/data/rlp-common.c:1601 +msgid "RLP state 3.\n" +msgstr "RLP stanje 3.\n" + +#: common/data/rlp-common.c:1660 +msgid "RLP state 4.\n" +msgstr "RLP stanje 4.\n" + +#: common/data/rlp-common.c:1799 +msgid "RLP state 5.\n" +msgstr "RLP stanje 5.\n" + +#: common/data/rlp-common.c:1858 +msgid "RLP state 6 - not yet implemented!\n" +msgstr "RLP stanje 6 - ¹e ni implementirano!\n" + +#: common/data/rlp-common.c:1889 +msgid "RLP state 7.\n" +msgstr "RLP stanje 7.\n" + +#: common/data/rlp-common.c:1931 +msgid "DEBUG: Unknown RLP state!\n" +msgstr "DEBUG: Neznano RLP stanje!\n" + +#: gnokii/gnokii.c:265 +#, fuzzy, c-format +msgid "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Copyright (C) Pavel Machek , 2001\n" +"Copyright (C) Pawe³ Kot , 2001\n" +"gnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no warranty for gnokii. See GPL for details.\n" +"Built %s %s for %s on %s \n" +msgstr "" +"GNOKII Version %s\n" +"Copyright (C) Hugh Blemings , 1999, 2000\n" +"Copyright (C) Pavel Janík ml. , 1999, 2000\n" +"Copyright (C) Pavel Machek , 2001\n" +"gnokii je prosto programje, katerega krije GNU General Public License, in " +"spremembe\n" +"kode in/ali distribucija kopij pod doloèenimi pogoji.\n" +"Za gnokii ni nikakr¹ne garancije. Za detajlen opis si oglejte GPL.\n" +"Prevedeno %s %s za %s na %s \n" + +#: gnokii/gnokii.c:282 +#, fuzzy +msgid "" +" usage: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory memory_type start [end]\n" +" gnokii --writephonebook [-i]\n" +" gnokii --getspeeddial number\n" +" gnokii --setspeeddial number memory_type location\n" +" gnokii --getsms memory_type start [end] [-f file] [-F file] [-d]\n" +" gnokii --deletesms memory_type start [end]\n" +" gnokii --sendsms destination [--smsc message_center_number |\n" +" --smscno message_center_index] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --savesms [-m] [-l n] [-i]\n" +" gnokii --getsmsc message_center_number\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice number\n" +" gnokii --getcalendarnote start [end] [-v]\n" +" gnokii --writecalendarnote vcardfile number\n" +" gnokii --deletecalendarnote start [end]\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf string\n" +" gnokii --sendlogo {caller|op} destination logofile [network code]\n" +" gnokii --sendringtone destination rtttlfile\n" +" gnokii --setlogo op [logofile] [network code]\n" +" gnokii --setlogo startup [logofile]\n" +" gnokii --setlogo caller [logofile] [caller group number] [group " +"name]\n" +" gnokii --setlogo {dealer|text} [text]\n" +" gnokii --getlogo op [logofile] [network code]\n" +" gnokii --getlogo startup [logofile] [network code]\n" +" gnokii --getlogo caller [logofile][caller group number][network " +"code]\n" +" gnokii --getlogo {dealer|text}\n" +" gnokii --viewlogo logofile\n" +" gnokii --setringtone rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +" gnokii --displayoutput\n" +" gnokii --keysequence\n" +msgstr "" +" uporaba: gnokii [--help|--monitor|--version]\n" +" gnokii --getmemory vrsta_spomina zaèetek [konec]\n" +" gnokii --writephonebook [-i]\n" +" gnokii --getspeeddial ¹tevilka\n" +" gnokii --setspeeddial ¹tevilka vrsta_spomina lokacija\n" +" gnokii --getsms vrsta_spomina start [konec] [-f datoteka] [-F " +"datoteka] [-d]\n" +" gnokii --deletesms vrsta_spomina zaèetek [konec]\n" +" gnokii --sendsms cilj [--smsc ¹tevilka_centra_za_sporoèila |\n" +" --smscno oznaka_centra_za_sporoèila] [-r] [-C n] [-v n]\n" +" [--long n]\n" +" gnokii --savesms [-m] [-l n] [-i]\n" +" gnokii --getsmsc ¹tevilka_centra_za_sporoèila\n" +" gnokii --setdatetime [YYYY [MM [DD [HH [MM]]]]]\n" +" gnokii --getdatetime\n" +" gnokii --setalarm HH MM\n" +" gnokii --getalarm\n" +" gnokii --dialvoice ¹tevilka\n" +" gnokii --getcalendarnote index [-v]\n" +" gnokii --writecalendarnote vcarddatoteka ¹tevilka\n" +" gnokii --deletecalendarnote index\n" +" gnokii --getdisplaystatus\n" +" gnokii --netmonitor {reset|off|field|devel|next|nr}\n" +" gnokii --identify\n" +" gnokii --senddtmf niz\n" +" gnokii --sendlogo {caller|op} cilj datoteka_z_logom [omre¾na " +"koda]\n" +" gnokii --sendringtone cilj rtttlfile\n" +" gnokii --setlogo op [datoteka_z_logom] [omre¾na_koda]\n" +" gnokii --setlogo startup [datoteka_z_logom]\n" +" gnokii --setlogo caller [datoteka_z_logom] [¹tevilka skupine " +"klicanih] [ime skupine]\n" +" gnokii --setlogo {zastopnik|tekst} [text]\n" +" gnokii --getlogo op [datoteka_z_logom] [omre¾na_koda]\n" +" gnokii --getlogo startup [datoteka_z_logom] [omre¾na_koda]\n" +" gnokii --getlogo caller [datoteka_z_logom][¹tevilka skupine " +"klicanih][omre¾na_koda]\n" +" gnokii --getlogo {zastopnik|tekst}\n" +" gnokii --viewlogo datoteka_z_logom\n" +" gnokii --setringtone rtttlfile\n" +" gnokii --reset [soft|hard]\n" +" gnokii --getprofile [number]\n" +" gnokii --displayoutput\n" +" gnokii --keysequence\n" + +#: gnokii/gnokii.c:325 +msgid "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" +msgstr "" +" gnokii --entersecuritycode PIN|PIN2|PUK|PUK2\n" +" gnokii --getsecuritycodestatus\n" + +#: common/data/virtmodem.c:294 gnokii/gnokii.c:353 gnokii/gnokii.c:2827 +#: xgnokii/xgnokii_lowlevel.c:196 +msgid "GSM/FBUS init failed! (Unknown model ?). Quitting.\n" +msgstr "GSM/FBUS init ni uspel! (Neznan model ?). Prekinjam.\n" + +#: gnokii/gnokii.c:364 +msgid "Hmmm... GSM_LinkOK never went true. Quitting.\n" +msgstr "Hmmm... GSM_LinkOK ni bil nikoli enak true. Prekinjam.\n" + +#: gnokii/gnokii.c:594 +#, c-format +msgid "Use '%s --help' for usage informations.\n" +msgstr "Uporabljajte '%s --help' za informacije o uporabi.\n" + +#: gnokii/gnokii.c:740 +#, c-format +msgid "Unknown option: %d\n" +msgstr "Neznana opcija: %d\n" + +#: gnokii/gnokii.c:747 +msgid "Wrong number of arguments\n" +msgstr "Napaèno ¹tevilo argumentov\n" + +#: gnokii/gnokii.c:810 gnokii/gnokii.c:850 gnokii/gnokii.c:1005 +#, fuzzy +msgid "Input too long!\n" +msgstr "Vhod predolg!\n" + +#: gnokii/gnokii.c:847 gnokii/gnokii.c:1000 +msgid "Couldn't read from stdin!\n" +msgstr "Branje z stdion je nemogoèe!\n" + +#: gnokii/gnokii.c:975 +msgid "Message at specified location exists. " +msgstr "Sporoèilo na navedeni lokaciji obstaja. " + +#: gnokii/gnokii.c:977 gnokii/gnokii.c:1245 gnokii/gnokii.c:2629 +msgid "Overwrite? (yes/no) " +msgstr "Prepi¹em? (yes/no) " + +#: gnokii/gnokii.c:985 +msgid "Invalid location\n" +msgstr "Napaèna lokacija\n" + +#: gnokii/gnokii.c:991 +#, c-format +msgid "Location %d empty. Saving\n" +msgstr "Lokacija %d prazna. Shranjujem\n" + +#: gnokii/gnokii.c:1016 +msgid "Saved!\n" +msgstr "Shranjeno!\n" + +#: gnokii/gnokii.c:1018 +#, c-format +msgid "Saving failed (error=%d)\n" +msgstr "Shranjevanje neuspe¹no (napaka=%d)\n" + +#: gnokii/gnokii.c:1036 +#, c-format +msgid "%d. SMS center (%s) number is %s\n" +msgstr "%d. ©tevilka centra za sporoèila (%s) je %s\n" + +#: gnokii/gnokii.c:1037 +msgid "Messages sent as " +msgstr "Sporoèilo poslano kot " + +#: gnokii/gnokii.c:1054 xgnokii/xgnokii.c:594 +msgid "ERMES" +msgstr "ERMES" + +#: gnokii/gnokii.c:1057 xgnokii/xgnokii.c:598 +msgid "X.400" +msgstr "X.400" + +#: gnokii/gnokii.c:1065 +msgid "Message validity is " +msgstr "Veljavnost sporoèila je " + +#: gnokii/gnokii.c:1095 gnokii/gnokii.c:1281 gnokii/gnokii.c:1331 +#: gnokii/gnokii.c:1389 gnokii/gnokii.c:2433 gnokii/gnokii.c:2484 +#, c-format +msgid "Function not implemented in %s model!\n" +msgstr "Funkcija ni implementirana v modelu %s!\n" + +#: gnokii/gnokii.c:1098 +msgid "SMS center can not be found :-(\n" +msgstr "SMS centra za sporoèila ni mogoèe najti :-(\n" + +#: gnokii/gnokii.c:1122 gnokii/gnokii.c:1313 gnokii/gnokii.c:2462 +#, c-format +msgid "Unknown memory type %s (use ME, SM, ...)!\n" +msgstr "Neznana vrsta spomina %s (uporabite ME, SM, ...)!\n" + +#: gnokii/gnokii.c:1147 +#, c-format +msgid "Saving into %s\n" +msgstr "Shranjujem v %s\n" + +#: gnokii/gnokii.c:1150 +msgid "Filename too long - will be truncated to 63 characters.\n" +msgstr "Ime datoteke predolgo - skraj¹ano bo na 63 znakov.\n" + +#: gnokii/gnokii.c:1178 +#, c-format +msgid "%d. Outbox Message " +msgstr "%d. Sporoèilo iz Outbox-a " + +#: gnokii/gnokii.c:1180 +msgid "(sent)\n" +msgstr "(poslano)\n" + +#: gnokii/gnokii.c:1182 +msgid "(not sent)\n" +msgstr "(neposlano)\n" + +#: gnokii/gnokii.c:1183 gnokii/gnokii.c:1212 +#, c-format +msgid "" +"Text: %s\n" +"\n" +msgstr "Tekst: %s\n" + +#: gnokii/gnokii.c:1186 +#, c-format +msgid "%d. Delivery Report " +msgstr "%d. Poroèilo o prejemu " + +#: gnokii/gnokii.c:1188 gnokii/gnokii.c:1217 +msgid "(read)\n" +msgstr "(prebrano)\n" + +#: gnokii/gnokii.c:1190 gnokii/gnokii.c:1219 +msgid "(not read)\n" +msgstr "(neprebrano)\n" + +#: gnokii/gnokii.c:1191 +#, c-format +msgid "Sending date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Po¹iljam datum/èas: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1196 gnokii/gnokii.c:1206 gnokii/gnokii.c:1225 +#, c-format +msgid "+%02d00" +msgstr "+%02d00" + +#: gnokii/gnokii.c:1201 +#, c-format +msgid "Response date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Odgovor datum/èas: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1211 +#, c-format +msgid "Receiver: %s Msg Center: %s\n" +msgstr "Prejemnik: %s Msg Center: %s\n" + +#: gnokii/gnokii.c:1215 +#, c-format +msgid "%d. Inbox Message " +msgstr "%d. Sporoèilo v Inbox-u " + +#: gnokii/gnokii.c:1220 +#, c-format +msgid "Date/time: %d/%d/%d %d:%02d:%02d " +msgstr "Datum/èas: %d/%d/%d %d:%02d:%02d " + +#: gnokii/gnokii.c:1230 +#, c-format +msgid "Sender: %s Msg Center: %s\n" +msgstr "Popiljatelj: %s Msg Center: %s\n" + +#: gnokii/gnokii.c:1233 +#, c-format +msgid "GSM operator logo for %s (%s) network.\n" +msgstr "Logotip GSM operaterja za %s (%s) omre¾je.\n" + +#: gnokii/gnokii.c:1234 +msgid "Saved by Logo Express\n" +msgstr "Shranjeno v Logo Express-u\n" + +#: gnokii/gnokii.c:1235 +msgid "Saved by Operator Logo Uploader by Thomas Kessler\n" +msgstr "Shranjeno z Thomas Kesslerjevim Operator Logo Updater-jem\n" + +#: gnokii/gnokii.c:1244 +#, c-format +msgid "File %s exists.\n" +msgstr "Datoteka %s obstaja.\n" + +#: gnokii/gnokii.c:1251 +#, c-format +msgid "Couldn't save logofile %s!\n" +msgstr "Datoteke z logotipom %s ni bilo mogoèe shraniti!\n" + +#: gnokii/gnokii.c:1258 +#, c-format +msgid "Linked (%d/%d):\n" +msgstr "Povezano (%d/%d):\n" + +#: gnokii/gnokii.c:1260 +#, c-format +msgid "" +"Text:\n" +"%s\n" +"\n" +msgstr "" +"Tekst:\n" +"%s\n" +"\n" + +#: gnokii/gnokii.c:1268 gnokii/gnokii.c:1979 +msgid "Unknown\n" +msgstr "Neznano\n" + +#: gnokii/gnokii.c:1275 +msgid "(delete failed)\n" +msgstr "(brisanje neuspe¹no)\n" + +#: gnokii/gnokii.c:1277 +msgid "(message deleted)\n" +msgstr "(sporoèilo izbrisano)\n" + +#: gnokii/gnokii.c:1285 +#, c-format +msgid "Invalid location: %s %d\n" +msgstr "Napaèna lokacija: %s &d\n" + +#: gnokii/gnokii.c:1288 +#, c-format +msgid "SMS location %s %d empty.\n" +msgstr "SMS lokacija %s %d prazna.\n" + +#: gnokii/gnokii.c:1291 +#, c-format +msgid "" +"GetSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"GetSMS %s %d neuspe¹en(%d)\n" +"\n" + +#: gnokii/gnokii.c:1328 +#, c-format +msgid "Deleted SMS %s %d\n" +msgstr "Izbrisan SMS %s %d\n" + +#: gnokii/gnokii.c:1335 +#, c-format +msgid "" +"DeleteSMS %s %d failed!(%d)\n" +"\n" +msgstr "" +"DeleSMS %s %d neuspe¹no!(%d)\n" +"\n" + +#: gnokii/gnokii.c:1380 +msgid "Enter your code: " +msgstr "Vpi¹ite svojo kodo: " + +#: gnokii/gnokii.c:1385 +msgid "Error: invalid code.\n" +msgstr "Napaka: napaèna koda.\n" + +#: gnokii/gnokii.c:1387 +#, fuzzy +msgid "Code ok.\n" +msgstr "Koda je v redu.\n" + +#: gnokii/gnokii.c:1391 +msgid "Other error.\n" +msgstr "Drugaèna napaka.\n" + +#: gnokii/gnokii.c:1404 +msgid "Security code status: " +msgstr "Stanje varnostne kode: " + +#: gnokii/gnokii.c:1489 +msgid "Sending operator logo.\n" +msgstr "Po¹iljam logo operaterja.\n" + +#: gnokii/gnokii.c:1493 +msgid "Sending caller line identification logo.\n" +msgstr "Po¹iljam logotip linije klicatelja.\n" + +#: gnokii/gnokii.c:1495 +msgid "You should specify what kind of logo to send!\n" +msgstr "Definirajte kateri tip logotipa bi radi poslali\n" + +#: gnokii/gnokii.c:1514 +#, c-format +msgid "Operator code: %s\n" +msgstr "Operaterjeva koda: %s\n" + +#: gnokii/gnokii.c:1559 +#, c-format +msgid "Saving logo. File \"%s\" exists. (O)verwrite, create (n)ew or (s)kip ? " +msgstr "" +"Shranjujem logo. Datoteka \"%s\" obstaja. (O)verwrite, create (new) ali (s)" +"kip ? " + +#: gnokii/gnokii.c:1567 +msgid "Enter name of new file: " +msgstr "Vpi¹ite ime nove datoteke: " + +#: gnokii/gnokii.c:1577 +#, c-format +msgid "Failed to write file \"%s\"\n" +msgstr "Pisanje v datoteko \"%s\" neuspe¹no\n" + +#: gnokii/gnokii.c:1621 +msgid "Getting Logo\n" +msgstr "Sprejemam logotip\n" + +#: gnokii/gnokii.c:1627 +msgid "Dealer welcome note " +msgstr "Zastopnikova dobrodo¹lica " + +#: gnokii/gnokii.c:1628 +msgid "Welcome note " +msgstr "Dobrodo¹lica " + +#: gnokii/gnokii.c:1631 +#, c-format +msgid "currently set to \"%s\"\n" +msgstr "trenutno natavljen na \"%s\"\n" + +#: gnokii/gnokii.c:1682 +msgid "Function not implemented !\n" +msgstr "Funkcija ni implementirana !\n" + +#: gnokii/gnokii.c:1685 +msgid "This kind of logo is not supported !\n" +msgstr "Logotip te vrste ni podprt !\n" + +#: gnokii/gnokii.c:1688 +msgid "Error getting logo !\n" +msgstr "Napaka pri sprejemu logotipa !\n" + +#: gnokii/gnokii.c:1692 +#, fuzzy +msgid "What kind of logo do you want to get ?\n" +msgstr "Kak¹ne vrste logotip bi radi sprejeli ?\n" + +#: gnokii/gnokii.c:1709 +#, c-format +msgid "Failed to read file \"%s\"\n" +msgstr "Branje datoteke \"%s\" ni uspelo\n" + +#: gnokii/gnokii.c:1712 +#, c-format +msgid "" +"Wrong number of colors in \"%s\" logofile (accepted only 2-colors files) !\n" +msgstr "" +"Napaèno ¹tevilo barv v \"%s\" datoteki z logotipom (sprejemljive so le " +"datoteke z 2 barvama) !\n" + +#: gnokii/gnokii.c:1715 +#, c-format +msgid "Wrong colors in \"%s\" logofile !\n" +msgstr "Napaène barve v \"%s\" datoteki z logotipom !\n" + +#: gnokii/gnokii.c:1718 +#, c-format +msgid "Invalid format of \"%s\" logofile !\n" +msgstr "Napaèen format datoteke z logotipom \"%s\" !\n" + +#: gnokii/gnokii.c:1721 +#, c-format +msgid "Sorry, gnokii doesn't support used subformat in file \"%s\" !\n" +msgstr "" +"Oprostite, gnokii ne podpira uporabljenega podformata v datoteki \"%s\" !\n" + +#: gnokii/gnokii.c:1724 +#, c-format +msgid "\"%s\" logofile is too short !\n" +msgstr "Datoteka z logotipom \"%s\" prekratka !\n" + +#: gnokii/gnokii.c:1727 +msgid "" +"Bitmap size doesn't supported by fileformat or different from 72x14, 84x48 " +"and 72x28 !\n" +msgstr "" +"Velikost bitmap datoteke ni podprta v formatu datoteke ali pa razlièna od " +"72x14, 84x48 in 72x28 !\n" + +#: gnokii/gnokii.c:1792 +msgid "Setting Logo.\n" +msgstr "Nastavljam logotip.\n" + +#: gnokii/gnokii.c:1805 +msgid "Removing Logo.\n" +msgstr "Odstranjam logotip.\n" + +#: gnokii/gnokii.c:1808 +msgid "What kind of logo do you want to set ?\n" +msgstr "Kak¹ne vrste logotip bi radi nastavili ?\n" + +#: gnokii/gnokii.c:1824 +msgid "Error setting" +msgstr "Napaka pri nastavitvi" + +#: gnokii/gnokii.c:1825 +msgid " dealer" +msgstr " zastopnik" + +#: gnokii/gnokii.c:1826 +msgid " welcome note - " +msgstr " dobrodo¹lica - " + +#: gnokii/gnokii.c:1844 +msgid "SIM card and PIN is required\n" +msgstr "SIM kartica ter PIN sta zahtevani\n" + +#: gnokii/gnokii.c:1848 +#, c-format +msgid "too long, truncated to \"%s\" (length %i)\n" +msgstr "predolgo, skraj¹ano v \"%s\" (dol¾ina %i)\n" + +#: gnokii/gnokii.c:1856 +msgid "Error setting startup logo - SIM card and PIN is required\n" +msgstr "" +"Napaka pri nastavljanju logoipa ob zagonu - SIM kartica in PIN koda sta " +"potrebni\n" + +#: gnokii/gnokii.c:1864 +msgid "Done.\n" +msgstr "Opravljeno.\n" + +#: gnokii/gnokii.c:1867 gnokii/gnokii.c:2008 +msgid "Function not implemented.\n" +msgstr "Funkcija ni implementirana.\n" + +#: gnokii/gnokii.c:1870 +msgid "This kind of logo is not supported.\n" +msgstr "Te vrste logotip ni podprt.\n" + +#: gnokii/gnokii.c:1873 +msgid "Error !\n" +msgstr "Napaka !\n" + +#: gnokii/gnokii.c:1963 +msgid " Type of the note: " +msgstr " Tip opombe: " + +#: gnokii/gnokii.c:1967 +msgid "Reminder\n" +msgstr "Opomin\n" + +#: gnokii/gnokii.c:1970 +msgid "Call\n" +msgstr "Klic\n" + +#: gnokii/gnokii.c:1973 +msgid "Meeting\n" +msgstr "Sreèanje\n" + +#: gnokii/gnokii.c:1976 +msgid "Birthday\n" +msgstr "Rojstni dan\n" + +#: gnokii/gnokii.c:2011 +msgid "The calendar note can not be read\n" +msgstr "Opombe koledarja se ne da prebrati\n" + +#: gnokii/gnokii.c:2026 +msgid "Failed to load vCalendar file.\n" +msgstr "VCalendar datoteke ni bilo mogoèe nalo¾iti.\n" + +#: gnokii/gnokii.c:2032 gnokii/gnokii.c:2703 +msgid "Succesfully written!\n" +msgstr "Uspe¹no zapisan!\n" + +#: gnokii/gnokii.c:2034 +msgid "Failed to write calendar note!\n" +msgstr "Opombe koledarja se ni dalo zapisati!\n" + +#: gnokii/gnokii.c:2055 +msgid " Calendar note deleted.\n" +msgstr " Opomba koledarja izbrisana.\n" + +#: gnokii/gnokii.c:2057 +msgid "The calendar note can not be deleted\n" +msgstr "Opombe koledarja se ni dalo izbrisati\n" + +#: gnokii/gnokii.c:2123 +#, c-format +msgid "Date: %4d/%02d/%02d\n" +msgstr "Datum: %4d/%02d/%02d\n" + +#: gnokii/gnokii.c:2124 +#, c-format +msgid "Time: %02d:%02d:%02d\n" +msgstr "Èas: %02d:%02d:%02d\n" + +#: gnokii/gnokii.c:2127 gnokii/gnokii.c:2168 gnokii/gnokii.c:2669 +#, c-format +msgid "Function not implemented in %s !\n" +msgstr "Funkcija ni implementirana v %s !\n" + +#: gnokii/gnokii.c:2130 gnokii/gnokii.c:2171 gnokii/gnokii.c:2672 +msgid "Internal error\n" +msgstr "Interna napaka\n" + +#: gnokii/gnokii.c:2164 +#, c-format +msgid "Alarm: %s\n" +msgstr "Alarm: %s\n" + +#: gnokii/gnokii.c:2165 +#, c-format +msgid "Time: %02d:%02d\n" +msgstr "Èas: %02d:%02d\n" + +#: gnokii/gnokii.c:2213 +msgid "Entering monitor mode...\n" +msgstr "Vstopam v nadzorni naèin...\n" + +#: gnokii/gnokii.c:2224 +#, c-format +msgid "RFLevel: %d\n" +msgstr "RFLevel: %d\n" + +#: gnokii/gnokii.c:2227 +#, c-format +msgid "Battery: %d\n" +msgstr "Baterija: %d\n" + +#: gnokii/gnokii.c:2230 +#, fuzzy, c-format +msgid "Power Source: %s\n" +msgstr " Vrsta napajanja: " + +#: gnokii/gnokii.c:2230 +#, fuzzy +msgid "AC/DC" +msgstr "AC/DC\n" + +#: gnokii/gnokii.c:2230 +#, fuzzy +msgid "battery" +msgstr "baterija\n" + +#: gnokii/gnokii.c:2233 +#, c-format +msgid "SIM: Used %d, Free %d\n" +msgstr "SIM: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2236 +#, c-format +msgid "Phone: Used %d, Free %d\n" +msgstr "Telefon: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2239 +#, c-format +msgid "DC: Used %d, Free %d\n" +msgstr "DC: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2242 +#, c-format +msgid "EN: Used %d, Free %d\n" +msgstr "EN: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2245 +#, c-format +msgid "FD: Used %d, Free %d\n" +msgstr "FD: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2248 +#, c-format +msgid "LD: Used %d, Free %d\n" +msgstr "LD: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2251 +#, c-format +msgid "MC: Used %d, Free %d\n" +msgstr "MC: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2254 +#, c-format +msgid "ON: Used %d, Free %d\n" +msgstr "ON: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2257 +#, c-format +msgid "RC: Used %d, Free %d\n" +msgstr "RC: V uporabi %d, Prosto %d\n" + +#: gnokii/gnokii.c:2260 +#, fuzzy, c-format +msgid "SMS Messages: UnRead %d, Number %d\n" +msgstr "Sporoèilo: ¹tevilka kanala %i\n" + +#: gnokii/gnokii.c:2263 +#, fuzzy, c-format +msgid "Incoming call: %s\n" +msgstr "Alarm za dohodni klic: %s\n" + +#: gnokii/gnokii.c:2266 +#, c-format +msgid "Network: %s (%s), LAC: %s, CellID: %s\n" +msgstr "" + +#: gnokii/gnokii.c:2269 +#, c-format +msgid "Cell broadcast received on channel %d: %s\n" +msgstr "" + +#: gnokii/gnokii.c:2274 +msgid "Leaving monitor mode...\n" +msgstr "Zapu¹èam nadzorni naèin...\n" + +#: gnokii/gnokii.c:2312 +#, fuzzy +msgid "Entered display monitoring mode...\n" +msgstr "Vstopil v nadzorni naèin zaslona...\n" + +#: gnokii/gnokii.c:2323 gnokii/gnokii.c:2893 +msgid "Key press simulation failed.\n" +msgstr "Simulacija pritiska tipke ni uspela.\n" + +#: gnokii/gnokii.c:2329 +msgid "Leaving display monitor mode...\n" +msgstr "Zapu¹èam nadzorni naèin zaslona...\n" + +#: gnokii/gnokii.c:2333 gnokii/gnokii.c:2335 +msgid "Error!\n" +msgstr "Napaka!\n" + +#: gnokii/gnokii.c:2374 +#, c-format +msgid "Profile number must be value from 1 to %d!\n" +msgstr "©tevilka profila mora biti vrednost od 1 do %d!\n" + +#: gnokii/gnokii.c:2380 +#, c-format +msgid "This phone supports only %d profiles!\n" +msgstr "Ta telefon podpira samo %d profila!\n" + +#: gnokii/gnokii.c:2397 +msgid " (name defined)\n" +msgstr "(ime definirano)\n" + +#: gnokii/gnokii.c:2399 +#, c-format +msgid "Incoming call alert: %s\n" +msgstr "Alarm za dohodni klic: %s\n" + +#: gnokii/gnokii.c:2404 +#, c-format +msgid "Ringing tone: %s (%d)\n" +msgstr "Melodija: %s (%d)\n" + +#: gnokii/gnokii.c:2406 +#, c-format +msgid "Ringtone number: %d\n" +msgstr "©tevilka melodije: %d\n" + +#: gnokii/gnokii.c:2408 +#, c-format +msgid "Ringing volume: %s\n" +msgstr "Glasnost melodije: %s\n" + +#: gnokii/gnokii.c:2410 +#, c-format +msgid "Message alert tone: %s\n" +msgstr "Zvok za alarm ob sporoèilu: %s\n" + +#: gnokii/gnokii.c:2412 +#, c-format +msgid "Keypad tones: %s\n" +msgstr "Zvoki tipk: %s\n" + +#: gnokii/gnokii.c:2414 +#, c-format +msgid "Warning and game tones: %s\n" +msgstr "Zvoki za opozorila in igre: %s\n" + +#: gnokii/gnokii.c:2417 +#, c-format +msgid "Lights: %s\n" +msgstr "Osvetlitev: %s\n" + +#: gnokii/gnokii.c:2417 gnokii/gnokii.c:2425 +#, fuzzy +msgid "On" +msgstr "Vklopljen" + +#: gnokii/gnokii.c:2417 +msgid "Automatic" +msgstr "Avtomatski" + +#: gnokii/gnokii.c:2419 +#, c-format +msgid "Vibration: %s\n" +msgstr "Vibracija: %s\n" + +#: gnokii/gnokii.c:2422 +#, c-format +msgid "Caller groups: 0x%02x\n" +msgstr "Skupine klicoèih: 0x%02x\n" + +#: gnokii/gnokii.c:2425 +#, c-format +msgid "Automatic answer: %s\n" +msgstr "Avtomatski odgovor: %s\n" + +#: gnokii/gnokii.c:2425 +#, fuzzy +msgid "Off" +msgstr "Izklop" + +#: gnokii/gnokii.c:2437 +msgid "Unspecified error\n" +msgstr "Nedoloèena napaka\n" + +#: gnokii/gnokii.c:2488 +#, c-format +msgid "Memory type %s not supported!\n" +msgstr "Vrsta spomina %s ni podprta!\n" + +#: gnokii/gnokii.c:2492 +#, c-format +msgid "%s|%d|Bad location or other error!(%d)\n" +msgstr "%s|%d|Napaèna lokacija ali druga napaka!(%d)\n" + +#: gnokii/gnokii.c:2535 gnokii/gnokii.c:2548 gnokii/gnokii.c:2562 +#, c-format +msgid "Format problem on line %d [%s]\n" +msgstr "Problem v formatu vrstice %d [%s]\n" + +#: gnokii/gnokii.c:2580 +#, c-format +msgid "Missing phone number type on line %d entry %d [%s]\n" +msgstr "Manjkajoèa ¹tevilka tipa v vrstici %d vnos %d [%s]\n" + +#: gnokii/gnokii.c:2595 +#, c-format +msgid "There is no phone number on line %d entry %d [%s]\n" +msgstr "Na vrstici %d vnosu %d [%s] ni telefonske ¹tevilke\n" + +#: gnokii/gnokii.c:2627 +msgid "Location busy. " +msgstr "Lokacija zaposlena. " + +#: gnokii/gnokii.c:2631 +msgid "yes" +msgstr "da" + +#: gnokii/gnokii.c:2632 +msgid "no" +msgstr "ne" + +#: gnokii/gnokii.c:2637 +#, c-format +msgid "Unknown error (%d)\n" +msgstr "Neznana napaka (%d)\n" + +#: gnokii/gnokii.c:2647 +#, c-format +msgid "Write Succeeded: memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "Zapis uspe¹en: vrsta spomina: %s, loc: %d, ime: %s, ¹tevilka: %s\n" + +#: gnokii/gnokii.c:2649 +#, c-format +msgid "Write FAILED(%d): memory type: %s, loc: %d, name: %s, number: %s\n" +msgstr "" +"Zapis NEUSPE©EN(%d): vrsta spomina: %s, loc: %d, ime: %s, ¹tevilka: %s\n" + +#: gnokii/gnokii.c:2666 +#, c-format +msgid "SpeedDial nr. %d: %d:%d\n" +msgstr "HitroKlicanje ¹t. %d: %d: %d\n" + +#: gnokii/gnokii.c:2695 +#, c-format +msgid "Unknown memory type %s!\n" +msgstr "Neznana vrsta spomina %s!\n" + +#: gnokii/gnokii.c:2775 +#, c-format +msgid "IMEI: %s\n" +msgstr "IMEI: %s\n" + +#: gnokii/gnokii.c:2776 +#, c-format +msgid "Manufacturer: %s\n" +msgstr "Proizvajalec: %s\n" + +#: gnokii/gnokii.c:2777 +#, c-format +msgid "Model: %s\n" +msgstr "Model: %s\n" + +#: gnokii/gnokii.c:2778 +#, c-format +msgid "Revision: %s\n" +msgstr "Revizija: %s\n" + +#: gnokii/gnokii.c:2804 +msgid "What kind of reset do you want??\n" +msgstr "Kak¹ne vrste reset bi ¾eleli??\n" + +#: gnokii/gnokii.c:2844 gnokii/gnokii.c:2867 +msgid "Failed to load ringtone.\n" +msgstr "Nalaganje melodije ni uspelo.\n" + +#: gnokii/gnokii.c:2876 +msgid "Send failed\n" +msgstr "Po¹iljane ni uspelo\n" + +#: gnokiid/gnokiid.c:62 +#, c-format +msgid "" +"gnokiid Version %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Built %s %s for %s on %s \n" +msgstr "" +"gnokiid Verzija %s\n" +"Copyright (C) Hugh Blemings , 1999\n" +"Copyright (C) Pavel Janík ml. , 1999\n" +"Prevedeno %s %s za %s na %s \n" + +#: gnokiid/gnokiid.c:74 +#, fuzzy +msgid "" +" usage: gnokiid {--help|--version}\n" +" --help display usage information. --" +"version displays version and copyright information. --" +"debug uses stdin/stdout for virtual modem comms.\n" +msgstr "" +" usage: gnokiid {--help|--version}\n" +" --help prika¾e informacije o uporabi. --" +"version prika¾e informacije o verziji ter avtorskih " +"pravicah. --debug uporablja stdin/stdout za virtualne " +"modemske comm-e.\n" + +#: common/data/virtmodem.c:121 +msgid "VM_Initialise - VM_GSMInitialise failed!\n" +msgstr "VM_Initialise - VM_GSMInitialise neuspe¹en!\n" + +#: common/data/virtmodem.c:128 +msgid "VM_Initialise - VM_PtySetup failed!\n" +msgstr "VM_Initialise - VM_PtySetup neuspe¹en!\n" + +#: common/data/virtmodem.c:133 +msgid "VM_Initialise - ATEM_Initialise failed!\n" +msgstr "VM_Initialise - ATEM_Initialise neuspe¹en!\n" + +#: common/data/virtmodem.c:138 +msgid "VM_Initialise - DP_Initialise failed!\n" +msgstr "VM_Initialise - DP_Initialise neuspe¹en!\n" + +#: common/data/virtmodem.c:231 +msgid "Couldn't open pty!\n" +msgstr "pty-ja ni bilo mogoèe odpreti!\n" + +#: common/data/virtmodem.c:239 +msgid "gnokiid should not be installed setuid root!\n" +msgstr "gnokiid nebi smel biti in¹taliran setudi root!\n" + +#: common/data/virtmodem.c:244 +#, c-format +msgid "Slave pty is %s, calling %s to create /dev/gnokii.\n" +msgstr "Podrejeni pty je %s, klièem %s za kreiranje /dev/gnokii.\n" + +#: common/data/virtmodem.c:306 +msgid "Hmmm... GSM_LinkOK never went true. Quitting. \n" +msgstr "Hmmm... GSM_LinkOK ni bil nikoli enak true. Prekinjam. \n" + +#: xgnokii/xgnokii.c:235 +msgid "Reading caller groups names ..." +msgstr "Berem imena skupin klicoèih ..." + +#: xgnokii/xgnokii.c:239 xgnokii/xgnokii.c:1079 +msgid "Familly" +msgstr "Dru¾ina" + +#: xgnokii/xgnokii.c:240 xgnokii/xgnokii.c:1091 +msgid "VIP" +msgstr "VIP" + +#: xgnokii/xgnokii.c:241 xgnokii/xgnokii.c:1103 +msgid "Friends" +msgstr "Prijatelji" + +#: xgnokii/xgnokii.c:242 xgnokii/xgnokii.c:1115 +msgid "Colleagues" +msgstr "Kolegi" + +#: xgnokii/xgnokii.c:243 xgnokii/xgnokii.c:1127 +msgid "Other" +msgstr "Ostali" + +#: xgnokii/xgnokii.c:244 +msgid "No group" +msgstr "Ni skupine" + +#: xgnokii/xgnokii.c:379 +msgid "Short Message received" +msgstr "Kratko sporoèilo sprejeto" + +#: xgnokii/xgnokii.c:385 +msgid "Working ..." +msgstr "Delam ..." + +#: xgnokii/xgnokii.c:402 +msgid "Call in progress" +msgstr "Klic v poteki" + +#: xgnokii/xgnokii.c:415 +msgid "Hide" +msgstr "Skrij" + +#: xgnokii/xgnokii.c:512 +#, c-format +msgid "" +"Outgoing call in progress:\n" +"Time: %s" +msgstr "" +"Izhodni klic v poteku:\n" +"Èas: %s" + +#: xgnokii/xgnokii.c:515 +#, c-format +msgid "" +"Incomming call from: %s\n" +"Time: %s" +msgstr "" +"Dohodni klic od: %s\n" +"Èas: %s" + +#: xgnokii/xgnokii.c:568 xgnokii/xgnokii_sms.c:687 +#, c-format +msgid "Set %d" +msgstr "Nastavljen %d" + +#: xgnokii/xgnokii.c:590 xgnokii/xgnokii.c:1500 +msgid "E-Mail" +msgstr "E-Mail" + +#: xgnokii/xgnokii.c:602 +msgid "Voice" +msgstr "Glas" + +#: xgnokii/xgnokii.c:613 xgnokii/xgnokii.c:1530 +msgid "1 h" +msgstr "1 ura" + +#: xgnokii/xgnokii.c:617 xgnokii/xgnokii.c:1537 +msgid "6 h" +msgstr "6 ur" + +#: xgnokii/xgnokii.c:621 xgnokii/xgnokii.c:637 xgnokii/xgnokii.c:1544 +msgid "24 h" +msgstr "24 ur" + +#: xgnokii/xgnokii.c:625 xgnokii/xgnokii.c:1551 +msgid "72 h" +msgstr "72 ur" + +#: xgnokii/xgnokii.c:633 +msgid "Max. time" +msgstr "Maksimalen èas" + +#: xgnokii/xgnokii.c:680 +msgid "Reading SMS centers ..." +msgstr "Berem SMS centre za sporoèila ..." + +#: xgnokii/xgnokii.c:944 +msgid "SMS not supported!" +msgstr "SMS ni podprt!" + +#: xgnokii/xgnokii.c:952 +msgid "Calendar not supported!" +msgstr "Koledar ni podprt!" + +#: xgnokii/xgnokii.c:1140 +msgid "Error writing configuration file!" +msgstr "Napaka pri pisanju v konfiguracijsko datoteko!" + +#: xgnokii/xgnokii.c:1152 xgnokii/xgnokii_contacts.c:3297 +msgid "Contacts" +msgstr "Contacts" + +#: xgnokii/xgnokii.c:1158 xgnokii/xgnokii.c:1942 +msgid "SMS" +msgstr "SMS" + +#: xgnokii/xgnokii.c:1163 xgnokii/xgnokii_calendar.c:867 +msgid "Calendar" +msgstr "Koledar" + +#: xgnokii/xgnokii.c:1168 xgnokii/xgnokii_logos.c:1394 +msgid "Logos" +msgstr "Logotipi" + +#: xgnokii/xgnokii.c:1174 +msgid "DTMF" +msgstr "DTMF" + +#: xgnokii/xgnokii.c:1179 xgnokii/xgnokii_speed.c:559 +msgid "Speed Dial" +msgstr "Hitro Klicanje" + +#: xgnokii/xgnokii.c:1184 +msgid "Keyboard" +msgstr "Tipkovnica" + +#: xgnokii/xgnokii.c:1189 xgnokii/xgnokii_netmon.c:317 +msgid "Net Monitor" +msgstr "Net Monitor" + +#: xgnokii/xgnokii.c:1194 +msgid "Data calls" +msgstr "Podatkovni klici" + +#: xgnokii/xgnokii.c:1203 xgnokii/xgnokii.c:1663 +msgid "Options" +msgstr "Mo¾nosti" + +#: xgnokii/xgnokii.c:1213 xgnokii/xgnokii.c:2247 +msgid "Help" +msgstr "Pomoè" + +#: xgnokii/xgnokii.c:1219 xgnokii/xgnokii.c:1236 +msgid "About" +msgstr "O programu" + +#: xgnokii/xgnokii.c:1240 xgnokii/xgnokii.c:1424 +#: xgnokii/xgnokii_calendar.c:495 xgnokii/xgnokii_calendar.c:541 +#: xgnokii/xgnokii_calendar.c:616 xgnokii/xgnokii_calendar.c:766 +#: xgnokii/xgnokii_contacts.c:922 xgnokii/xgnokii_contacts.c:1063 +#: xgnokii/xgnokii_contacts.c:1232 xgnokii/xgnokii_contacts.c:1607 +#: xgnokii/xgnokii_contacts.c:3118 xgnokii/xgnokii_sms.c:480 +msgid "Ok" +msgstr "V redu" + +#: xgnokii/xgnokii.c:1253 +#, c-format +msgid "" +"xgnokii version: %s\n" +"gnokii version: %s\n" +"\n" +"Copyright (C) 1999,2000 Pavel Janík ml.,\n" +"Hugh Blemings, Jan Derfinak and others\n" +"xgnokii is free software, covered by the GNU General Public License, and you " +"are\n" +"welcome to change it and/or distribute copies of it under certain " +"conditions.\n" +"There is absolutely no waranty for xgnokii. See GPL for details.\n" +msgstr "" +"xgnokii verzija: %s\n" +"gnokii verzija: %s\n" +"\n" +"Copyright (C) 1999,2000 Pavel Janík ml.,\n" +"Hugh Blemings, Jan Derfinak in ostali\n" +"xgnokii je prosto programje, ki ga krije GNU General Public Licenca, in " +"spremembe \n" +"kode in/ali distribucija kopij pod doloèenimi pogoji.\n" +"Za xgnokii ni absolutno nikakr¹ne garancije. Za detajle si oglejte GPL.\n" + +#: xgnokii/xgnokii.c:1418 +msgid "Edit SMS Setting" +msgstr "Uredi SMS Nastavitve" + +#: xgnokii/xgnokii.c:1432 xgnokii/xgnokii_calendar.c:504 +#: xgnokii/xgnokii_calendar.c:550 xgnokii/xgnokii_calendar.c:624 +#: xgnokii/xgnokii_calendar.c:774 xgnokii/xgnokii_common.c:64 +#: xgnokii/xgnokii_common.c:150 xgnokii/xgnokii_contacts.c:938 +#: xgnokii/xgnokii_contacts.c:1071 xgnokii/xgnokii_contacts.c:1240 +#: xgnokii/xgnokii_contacts.c:1479 xgnokii/xgnokii_contacts.c:1525 +#: xgnokii/xgnokii_contacts.c:1616 xgnokii/xgnokii_contacts.c:1889 +#: xgnokii/xgnokii_contacts.c:2004 xgnokii/xgnokii_contacts.c:3125 +#: xgnokii/xgnokii_sms.c:488 +msgid "Cancel" +msgstr "Preklièi" + +#: xgnokii/xgnokii.c:1445 +msgid "Set's name:" +msgstr "Nastavi ime:" + +#: xgnokii/xgnokii.c:1458 +msgid "Center:" +msgstr "Center:" + +#: xgnokii/xgnokii.c:1471 +msgid "Sending Format:" +msgstr "Format za po¹iljanje:" + +#: xgnokii/xgnokii.c:1515 +msgid "Validity Period:" +msgstr "Perioda veljavnosti:" + +#: xgnokii/xgnokii.c:1523 +msgid "Max. Time" +msgstr "Maks. Èas" + +#: xgnokii/xgnokii.c:1660 +msgid "Set's name" +msgstr "Nastavi ime" + +#: xgnokii/xgnokii.c:1660 +msgid "Center number" +msgstr "©tevilka centra" + +#: xgnokii/xgnokii.c:1660 +msgid "Format" +msgstr "Format" + +#: xgnokii/xgnokii.c:1660 +msgid "Validity" +msgstr "Veljavnost" + +#: xgnokii/xgnokii.c:1668 +msgid "Apply" +msgstr "Uporabi" + +#: xgnokii/xgnokii.c:1677 xgnokii/xgnokii_contacts.c:1873 +#: xgnokii/xgnokii_dtmf.c:178 +msgid "Save" +msgstr "Shrani" + +#: xgnokii/xgnokii.c:1684 +msgid "Close" +msgstr "Zapri" + +#: xgnokii/xgnokii.c:1699 +msgid "Phone and connection type" +msgstr "Telefon in vrsta povezave" + +#: xgnokii/xgnokii.c:1706 +msgid "Connection" +msgstr "Povezava" + +#: xgnokii/xgnokii.c:1713 +msgid "Port:" +msgstr "Port:" + +#: xgnokii/xgnokii.c:1728 xgnokii/xgnokii.c:1806 +msgid "Model:" +msgstr "Model:" + +#: xgnokii/xgnokii.c:1743 +#, fuzzy +msgid "Init length:" +msgstr "Init length:" + +#: xgnokii/xgnokii.c:1758 +msgid "Bindir:" +msgstr "Direktorij z programi:" + +#: xgnokii/xgnokii.c:1773 +msgid "Connection:" +msgstr "Povezava:" + +#: xgnokii/xgnokii.c:1777 +msgid "infrared" +msgstr "infrardeèa" + +#: xgnokii/xgnokii.c:1782 +msgid "serial" +msgstr "serijska" + +#: xgnokii/xgnokii.c:1787 +msgid "irda" +msgstr "irda" + +#: xgnokii/xgnokii.c:1792 +msgid "Phone information" +msgstr "Informacije o telefonu" + +#: xgnokii/xgnokii.c:1821 +msgid "Version:" +msgstr "Verzija" + +#: xgnokii/xgnokii.c:1836 +msgid "Revision:" +msgstr "Revizija:" + +#: xgnokii/xgnokii.c:1851 +msgid "IMEI:" +msgstr "IMEI:" + +#: xgnokii/xgnokii.c:1866 +msgid "Names length:" +msgstr "Dol¾ina imen:" + +#: xgnokii/xgnokii.c:1874 +msgid "SIM:" +msgstr "SIM:" + +#: xgnokii/xgnokii.c:1892 +msgid "Phone:" +msgstr "Telefon:" + +#: xgnokii/xgnokii.c:1899 +msgid "Alarm setting" +msgstr "Nastavitve alarma" + +#: xgnokii/xgnokii.c:1906 xgnokii/xgnokii.c:1913 +#: xgnokii/xgnokii_calendar.c:688 xgnokii/xgnokii_calendar.c:863 +msgid "Alarm" +msgstr "Alarm" + +#: xgnokii/xgnokii.c:1936 xgnokii/xgnokii_sms.c:1544 +msgid "Short Message Service" +msgstr "Kratka sporoèila" + +#: xgnokii/xgnokii.c:1970 +msgid "Edit" +msgstr "Uredi" + +#: xgnokii/xgnokii.c:1984 +msgid "Business Card" +msgstr "Vizitka" + +#: xgnokii/xgnokii.c:1990 +msgid "User" +msgstr "Uporabnik" + +#: xgnokii/xgnokii.c:2008 xgnokii/xgnokii_contacts.c:1084 +msgid "Name:" +msgstr "Ime:" + +#: xgnokii/xgnokii.c:2034 +msgid "Title:" +msgstr "Naziv:" + +#: xgnokii/xgnokii.c:2060 +msgid "Company:" +msgstr "Dru¾ba:" + +#: xgnokii/xgnokii.c:2086 +msgid "Telephone:" +msgstr "Telefon:" + +#: xgnokii/xgnokii.c:2111 +msgid "Fax:" +msgstr "Fax:" + +#: xgnokii/xgnokii.c:2136 +msgid "E-Mail:" +msgstr "E-Mail:" + +#: xgnokii/xgnokii.c:2162 +msgid "Address:" +msgstr "Naslov:" + +#: xgnokii/xgnokii.c:2186 +msgid "Caller groups names" +msgstr "Imena skupine klicoèih" + +#: xgnokii/xgnokii.c:2193 +msgid "Groups" +msgstr "Skupine" + +#: xgnokii/xgnokii.c:2202 +#, c-format +msgid "Group %d:" +msgstr "Skupina %d:" + +#: xgnokii/xgnokii.c:2215 +#, fuzzy +msgid "Mailbox" +msgstr "Mailbox" + +#: xgnokii/xgnokii.c:2222 +msgid "Mail" +msgstr "Po¹ta" + +#: xgnokii/xgnokii.c:2229 +#, fuzzy +msgid "Path to mailbox:" +msgstr "Pot do mailbox-a:" + +#: xgnokii/xgnokii.c:2240 +#, fuzzy +msgid "Help viewer" +msgstr "Prikazovalec pomoèi" + +#: xgnokii/xgnokii.c:2254 +#, fuzzy +msgid "Viewer:" +msgstr "Prikazovalec:" + +#: xgnokii/xgnokii_calendar.c:123 +msgid "Reminder" +msgstr "Opozorilo" + +#: xgnokii/xgnokii_calendar.c:130 +msgid "Call" +msgstr "Klic" + +#: xgnokii/xgnokii_calendar.c:138 +msgid "Meeting" +msgstr "Sreèanje" + +#: xgnokii/xgnokii_calendar.c:146 +msgid "Birthday" +msgstr "Rojstni dan" + +#: xgnokii/xgnokii_calendar.c:194 +msgid "Type: " +msgstr "Tip: " + +#: xgnokii/xgnokii_calendar.c:202 xgnokii/xgnokii_sms.c:384 +msgid "Date: " +msgstr "Datum: " + +#: xgnokii/xgnokii_calendar.c:217 +msgid "Alarm: " +msgstr "Alarm: " + +#: xgnokii/xgnokii_calendar.c:238 +msgid "Text: " +msgstr "Tekst: " + +#: xgnokii/xgnokii_calendar.c:488 xgnokii/xgnokii_calendar.c:534 +msgid "Choose date" +msgstr "Izberite datum" + +#: xgnokii/xgnokii_calendar.c:571 +msgid "Alarm time:" +msgstr "Èas alarma:" + +#: xgnokii/xgnokii_calendar.c:609 xgnokii/xgnokii_calendar.c:929 +#, fuzzy +msgid "Add reminder" +msgstr "Dodaj opomin" + +#: xgnokii/xgnokii_calendar.c:641 +msgid "Date:" +msgstr "Datum:" + +#: xgnokii/xgnokii_calendar.c:676 +msgid "Subject:" +msgstr "Tema:" + +#: xgnokii/xgnokii_calendar.c:759 +msgid "Delete calendar note" +msgstr "Izbri¹i opombo koledarja" + +#: xgnokii/xgnokii_calendar.c:791 +msgid "Do you want to delete selected note(s)?" +msgstr "®elite izbrisati izbrano/e opombo/e?" + +#: xgnokii/xgnokii_calendar.c:826 xgnokii/xgnokii_contacts.c:3252 +#: xgnokii/xgnokii_dtmf.c:217 xgnokii/xgnokii_logos.c:1347 +#: xgnokii/xgnokii_netmon.c:259 xgnokii/xgnokii_sms.c:1121 +#: xgnokii/xgnokii_sms.c:1507 xgnokii/xgnokii_speed.c:527 +#: xgnokii/xgnokii_xkeyb.c:242 +msgid "/_File" +msgstr "/_Datoteka" + +#: xgnokii/xgnokii_calendar.c:827 xgnokii/xgnokii_contacts.c:3253 +#: xgnokii/xgnokii_speed.c:528 +msgid "/File/_Read from phone" +msgstr "/Datoteka/_Beri z telefona" + +#: xgnokii/xgnokii_calendar.c:828 xgnokii/xgnokii_contacts.c:3254 +#: xgnokii/xgnokii_speed.c:529 +msgid "/File/_Save to phone" +msgstr "/Datoteka/_Shrani v telefon" + +#: xgnokii/xgnokii_calendar.c:829 xgnokii/xgnokii_contacts.c:3255 +#: xgnokii/xgnokii_dtmf.c:220 xgnokii/xgnokii_logos.c:1351 +#: xgnokii/xgnokii_sms.c:1124 xgnokii/xgnokii_sms.c:1510 +#: xgnokii/xgnokii_speed.c:530 +msgid "/File/Sep1" +msgstr "/Datoteka/Sep1" + +#: xgnokii/xgnokii_calendar.c:830 +msgid "/File/Send via S_MS" +msgstr "/Datoteka/Po¹lji preko S_MS" + +#: xgnokii/xgnokii_calendar.c:831 xgnokii/xgnokii_contacts.c:3258 +#: xgnokii/xgnokii_logos.c:1355 xgnokii/xgnokii_sms.c:1127 +#: xgnokii/xgnokii_speed.c:533 +msgid "/File/Sep2" +msgstr "/Datoteka/Sep2" + +#: xgnokii/xgnokii_calendar.c:832 xgnokii/xgnokii_contacts.c:3256 +#: xgnokii/xgnokii_speed.c:531 +msgid "/File/_Import from file" +msgstr "/Datoteka/_Uvozi z datoteke" + +#: xgnokii/xgnokii_calendar.c:833 xgnokii/xgnokii_contacts.c:3257 +#: xgnokii/xgnokii_speed.c:532 +msgid "/File/_Export to file" +msgstr "/Datoteka/_Izvozi v datoteko" + +#: xgnokii/xgnokii_calendar.c:834 +msgid "/File/Sep3" +msgstr "/Datoteka/Sep3" + +#: xgnokii/xgnokii_calendar.c:835 xgnokii/xgnokii_contacts.c:3259 +#: xgnokii/xgnokii_dtmf.c:221 xgnokii/xgnokii_logos.c:1356 +#: xgnokii/xgnokii_netmon.c:260 xgnokii/xgnokii_sms.c:1128 +#: xgnokii/xgnokii_sms.c:1511 xgnokii/xgnokii_speed.c:534 +#: xgnokii/xgnokii_xkeyb.c:243 +msgid "/File/_Close" +msgstr "/Datoteka/_Zapri" + +#: xgnokii/xgnokii_calendar.c:836 xgnokii/xgnokii_contacts.c:3260 +#: xgnokii/xgnokii_logos.c:1357 xgnokii/xgnokii_speed.c:535 +msgid "/_Edit" +msgstr "/Ur_edi" + +#: xgnokii/xgnokii_calendar.c:837 +msgid "/Edit/Add _reminder" +msgstr "/Uredi/Dodaj opozo_rilo" + +#: xgnokii/xgnokii_calendar.c:838 +msgid "/Edit/Add _call" +msgstr "/Uredi/Dodaj kli_c" + +#: xgnokii/xgnokii_calendar.c:839 +msgid "/Edit/Add _meeting" +msgstr "/Uredi/Dodaj _sestanek" + +#: xgnokii/xgnokii_calendar.c:840 +msgid "/Edit/Add _birthday" +msgstr "/Uredi/Dodaj _rojstni dan" + +#: xgnokii/xgnokii_calendar.c:841 xgnokii/xgnokii_contacts.c:3263 +#: xgnokii/xgnokii_speed.c:536 +msgid "/Edit/_Edit" +msgstr "/Uredi/Ur_edi" + +#: xgnokii/xgnokii_calendar.c:842 xgnokii/xgnokii_contacts.c:3264 +msgid "/Edit/_Delete" +msgstr "/Uredi/_Izbri¹i" + +#: xgnokii/xgnokii_calendar.c:843 xgnokii/xgnokii_contacts.c:3267 +#: xgnokii/xgnokii_logos.c:1365 +msgid "/Edit/Sep4" +msgstr "/Uredi/Sep4" + +#: xgnokii/xgnokii_calendar.c:844 xgnokii/xgnokii_contacts.c:3271 +msgid "/Edit/Select _all" +msgstr "/Uredi/Izbreri _vse" + +#: xgnokii/xgnokii_calendar.c:845 xgnokii/xgnokii_contacts.c:3274 +#: xgnokii/xgnokii_dtmf.c:222 xgnokii/xgnokii_netmon.c:264 +#: xgnokii/xgnokii_sms.c:1129 xgnokii/xgnokii_sms.c:1519 +#: xgnokii/xgnokii_speed.c:537 xgnokii/xgnokii_xkeyb.c:244 +msgid "/_Help" +msgstr "/_Pomoè" + +#: xgnokii/xgnokii_calendar.c:846 xgnokii/xgnokii_contacts.c:3275 +#: xgnokii/xgnokii_dtmf.c:223 xgnokii/xgnokii_netmon.c:265 +#: xgnokii/xgnokii_sms.c:1130 xgnokii/xgnokii_sms.c:1520 +#: xgnokii/xgnokii_speed.c:538 xgnokii/xgnokii_xkeyb.c:245 +msgid "/Help/_Help" +msgstr "/Pomoè/_Pomoè" + +#: xgnokii/xgnokii_calendar.c:847 xgnokii/xgnokii_contacts.c:3276 +#: xgnokii/xgnokii_dtmf.c:224 xgnokii/xgnokii_netmon.c:266 +#: xgnokii/xgnokii_sms.c:1131 xgnokii/xgnokii_sms.c:1521 +#: xgnokii/xgnokii_speed.c:539 xgnokii/xgnokii_xkeyb.c:246 +msgid "/Help/_About" +msgstr "/Pomoè/_O Programu" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "#" +msgstr "" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Type" +msgstr "Tip" + +#: xgnokii/xgnokii_calendar.c:862 +msgid "Date" +msgstr "Datum" + +#: xgnokii/xgnokii_calendar.c:863 xgnokii/xgnokii_contacts.c:1557 +#: xgnokii/xgnokii_contacts.c:3292 xgnokii/xgnokii_speed.c:554 +msgid "Number" +msgstr "©tevilka" + +#: xgnokii/xgnokii_calendar.c:896 xgnokii/xgnokii_contacts.c:3328 +#: xgnokii/xgnokii_speed.c:590 +msgid "Read from phone" +msgstr "Beri z telefona" + +#: xgnokii/xgnokii_calendar.c:900 xgnokii/xgnokii_contacts.c:3332 +#: xgnokii/xgnokii_speed.c:594 +msgid "Save to phone" +msgstr "Shrani na telefon" + +#: xgnokii/xgnokii_calendar.c:907 +msgid "Send via SMS" +msgstr "Po¹lji preko SMS" + +#: xgnokii/xgnokii_calendar.c:914 xgnokii/xgnokii_contacts.c:3339 +#: xgnokii/xgnokii_logos.c:1441 xgnokii/xgnokii_speed.c:601 +msgid "Import from file" +msgstr "Uvozi z datoteke" + +#: xgnokii/xgnokii_calendar.c:918 xgnokii/xgnokii_contacts.c:3343 +#: xgnokii/xgnokii_logos.c:1445 xgnokii/xgnokii_speed.c:605 +msgid "Export to file" +msgstr "Izvozi v datoteko" + +#: xgnokii/xgnokii_calendar.c:925 +msgid "Edit note" +msgstr "Uredi opombo" + +#: xgnokii/xgnokii_calendar.c:933 +msgid "Add call" +msgstr "Dodaj klic" + +#: xgnokii/xgnokii_calendar.c:937 +msgid "Add meeting" +msgstr "Dodaj sestanek" + +#: xgnokii/xgnokii_calendar.c:941 +msgid "Add birthday" +msgstr "Dodaj rojstni dan" + +#: xgnokii/xgnokii_calendar.c:945 +msgid "Delete note" +msgstr "Izbri¹i opombo" + +#: xgnokii/xgnokii_calendar.c:1005 xgnokii/xgnokii_contacts.c:3148 +#: xgnokii/xgnokii_contacts.c:3398 xgnokii/xgnokii_sms.c:1686 +#: xgnokii/xgnokii_speed.c:637 +#, c-format +msgid "Error: %s: line %d: Can't allocate memory!\n" +msgstr "Napaka: %s: vrstica %d: Ni bilo mogoèe dodeliti spomina!\n" + +#: xgnokii/xgnokii_calendar.c:1034 xgnokii/xgnokii_sms.c:1719 +msgid "couldn't allocate colour" +msgstr "ni bilo mogoèe dodeliti barve" + +#: xgnokii/xgnokii_cfg.c:80 +#, fuzzy +msgid "WARNING: Can't find HOME enviroment variable!\n" +msgstr "OPOZORILO: ne najdem spremenljivke HOME!\n" + +#: xgnokii/xgnokii_cfg.c:86 xgnokii/xgnokii_cfg.c:101 +msgid "WARNING: Can't allocate memory for config reading!\n" +msgstr "" +"OPOZORILO: Ne morem dodeliti spomina za branje konfiguracijske datoteke!\n" + +#: xgnokii/xgnokii_cfg.c:185 +#, fuzzy +msgid "ERROR: Can't find HOME enviroment variable!\n" +msgstr "NAPAKA: Ne najdem spremenljivke HOME!\n" + +#: xgnokii/xgnokii_cfg.c:191 xgnokii/xgnokii_cfg.c:209 +msgid "ERROR: Can't allocate memory for config writing!\n" +msgstr "" +"NAPAKA: Ne morem dodeliti spomina za branje konfiguracijske datoteke!\n" + +#: xgnokii/xgnokii_cfg.c:197 +#, c-format +msgid "ERROR: Can't open file %s for writing!\n" +msgstr "NAPAKA: Ne morem odpreti datoteke %s za brane!\n" + +#: xgnokii/xgnokii_cfg.c:215 +msgid "ERROR: Can't write config file!\n" +msgstr "NAPAKA: Ne morem pisati v konfiguracijsko datoteko!\n" + +#: xgnokii/xgnokii_common.c:57 +msgid "Error" +msgstr "Napaka" + +#: xgnokii/xgnokii_common.c:96 +msgid "Info" +msgstr "Info" + +#: xgnokii/xgnokii_common.c:134 +msgid "Yes" +msgstr "Da" + +#: xgnokii/xgnokii_common.c:143 +msgid "No" +msgstr "Ne" + +#: xgnokii/xgnokii_common.c:230 +#, c-format +msgid "Can't exec %s\n" +msgstr "Ne morem izvr¹iti %s\n" + +#: xgnokii/xgnokii_contacts.c:266 xgnokii/xgnokii_contacts.c:305 +#: xgnokii/xgnokii_contacts.c:488 xgnokii/xgnokii_contacts.c:519 +#: xgnokii/xgnokii_contacts.c:674 xgnokii/xgnokii_contacts.c:696 +msgid "Can't change memory type!" +msgstr "Ne morem zamenjati vrste spomina!" + +#: xgnokii/xgnokii_contacts.c:316 xgnokii/xgnokii_contacts.c:375 +msgid "" +"Sorry, phonebook name will be truncated,\n" +"because you save it into SIM memory!" +msgstr "" +"Oprostite, ime telefonskega imenika bo skraj¹ano,\n" +"ker ste vnos shranili v spomin SIM kartice!" + +#: xgnokii/xgnokii_contacts.c:530 xgnokii/xgnokii_contacts.c:581 +msgid "" +"Sorry, phonebook name will be truncated\n" +"because you save it into SIM memory!" +msgstr "" +"Oprostite, ime telefonskega imenika bo skraj¹ano,\n" +"ker ste vnos shranili v spomin SIM kartice!" + +#: xgnokii/xgnokii_contacts.c:790 +msgid "Can't find pattern!" +msgstr "Ne najdem vzorca!" + +#: xgnokii/xgnokii_contacts.c:916 +msgid "Numbers" +msgstr "©tevilke" + +#: xgnokii/xgnokii_contacts.c:931 +msgid "New" +msgstr "Novo" + +#: xgnokii/xgnokii_contacts.c:1097 xgnokii/xgnokii_contacts.c:1625 +msgid "Number:" +msgstr "©tevilka" + +#: xgnokii/xgnokii_contacts.c:1144 +msgid "Memory:" +msgstr "Spomin:" + +#: xgnokii/xgnokii_contacts.c:1148 +msgid "phone" +msgstr "telefon" + +#: xgnokii/xgnokii_contacts.c:1161 +msgid "Caller group:" +msgstr "Skupina klicoèih:" + +#: xgnokii/xgnokii_contacts.c:1175 xgnokii/xgnokii_contacts.c:3358 +#: xgnokii/xgnokii_speed.c:612 +msgid "Edit entry" +msgstr "Uredi vnos" + +#: xgnokii/xgnokii_contacts.c:1225 +msgid "Delete entries" +msgstr "Izbri¹i vnose" + +#: xgnokii/xgnokii_contacts.c:1257 +msgid "Do you want to delete selected entries?" +msgstr "Ali ¾elite izbrisati izbrane vnose?" + +#: xgnokii/xgnokii_contacts.c:1269 xgnokii/xgnokii_contacts.c:3350 +msgid "New entry" +msgstr "Novi vnos" + +#: xgnokii/xgnokii_contacts.c:1313 xgnokii/xgnokii_contacts.c:3354 +msgid "Duplicate entry" +msgstr "Podvojen vnos" + +#: xgnokii/xgnokii_contacts.c:1384 xgnokii/xgnokii_contacts.c:1394 +#: xgnokii/xgnokii_contacts.c:1419 +msgid "Can't find free memory." +msgstr "Ne najdem prostega spomina." + +#: xgnokii/xgnokii_contacts.c:1463 +msgid "Changing memory type" +msgstr "Menjam vrsto spomina" + +#: xgnokii/xgnokii_contacts.c:1470 +msgid "Continue" +msgstr "Nadaljuj" + +#: xgnokii/xgnokii_contacts.c:1490 +msgid "" +"If you change from phone memory to SIM memory\n" +"some entries may be truncated." +msgstr "" +"Èe zamenjate vrsto spomina z SIM kartice v spomin telefona\n" +"so nekateri vnosi lahko skraj¹ani." + +#: xgnokii/xgnokii_contacts.c:1510 xgnokii/xgnokii_contacts.c:1516 +msgid "Find" +msgstr "Najdi" + +#: xgnokii/xgnokii_contacts.c:1538 +msgid "Pattern:" +msgstr "Vzorec:" + +#: xgnokii/xgnokii_contacts.c:1551 xgnokii/xgnokii_contacts.c:3292 +#: xgnokii/xgnokii_speed.c:554 +msgid "Name" +msgstr "Ime" + +#: xgnokii/xgnokii_contacts.c:1601 xgnokii/xgnokii_contacts.c:3369 +msgid "Dial voice" +msgstr "Glasovno klicanje" + +#: xgnokii/xgnokii_contacts.c:1727 +msgid "Phone memory..." +msgstr "Spomin telefona..." + +#: xgnokii/xgnokii_contacts.c:1738 +msgid "SIM memory..." +msgstr "Spomin SIM kartice..." + +#: xgnokii/xgnokii_contacts.c:1767 +msgid "Saving entries" +msgstr "Shranjujem vnose" + +#: xgnokii/xgnokii_contacts.c:1801 +#, c-format +msgid "%s: line: %d:Can't write ME memory entry number %d! Error: %d\n" +msgstr "" +"%s: vrstica: %d: Ne morem pisati v ME spomin vnos ¹tevilka %d! Napaka: %d\n" + +#: xgnokii/xgnokii_contacts.c:1843 +#, c-format +msgid "%s: line %d:Can't write SM memory entry number %d! Error: %d\n" +msgstr "" +"%s: vrstica %d:Ne morem pisati v SM spomin vnos ¹tevilka %d! Napaka: %d\n" + +#: xgnokii/xgnokii_contacts.c:1866 +msgid "Save changes?" +msgstr "Shrani spremembe?" + +#: xgnokii/xgnokii_contacts.c:1882 +msgid "Don't save" +msgstr "Ne shrani" + +#: xgnokii/xgnokii_contacts.c:1906 +msgid "" +"You have made changes in your\n" +"contacts directory.\n" +"\n" +"\n" +"Do you want save these changes into phone?\n" +msgstr "" +"Vnesli ste spremebe v svoj\n" +"direktorij kontaktov.\n" +"\n" +"\n" +"®elite te spremembe shraniti v telefon?\n" + +#: xgnokii/xgnokii_contacts.c:1967 +msgid "Which Extended Phonebook Entry?" +msgstr "Kateri raz¹irjen vnos v telefonski imenik?" + +#: xgnokii/xgnokii_contacts.c:1973 +msgid "General" +msgstr "Splo¹ni" + +#: xgnokii/xgnokii_contacts.c:1979 +msgid "Mobile" +msgstr "Mobilni" + +#: xgnokii/xgnokii_contacts.c:1985 +msgid "Work" +msgstr "Delo" + +#: xgnokii/xgnokii_contacts.c:1997 +msgid "Home" +msgstr "Dom" + +#: xgnokii/xgnokii_contacts.c:2086 xgnokii/xgnokii_contacts.c:2113 +#: xgnokii/xgnokii_contacts.c:2827 xgnokii/xgnokii_contacts.c:2851 +#, c-format +msgid "%s: line %d: Can't allocate memory!\n" +msgstr "%s: vrstica %d: Ne morem dodeliti spomina!\n" + +#: xgnokii/xgnokii_contacts.c:2208 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries to 100!\n" +msgstr "" +"Ne morem dobiti stanja SM spomina!\n" +"\n" +"Nastavljam maksimalno ¹tevilo SIM vnosov na 100\n" + +#: xgnokii/xgnokii_contacts.c:2233 +msgid "Getting entries" +msgstr "Dobivam vnose" + +#: xgnokii/xgnokii_contacts.c:2478 xgnokii/xgnokii_dtmf.c:128 +#: xgnokii/xgnokii_speed.c:426 +#, c-format +msgid "Can't open file %s for writing!" +msgstr "Ne morem odpreti datoeke %s za pisanje!" + +#: xgnokii/xgnokii_contacts.c:2513 xgnokii/xgnokii_dtmf.c:161 +#: xgnokii/xgnokii_logos.c:1224 xgnokii/xgnokii_speed.c:468 +msgid "Overwrite file?" +msgstr "Prepi¹em datoteko?" + +#: xgnokii/xgnokii_contacts.c:2514 xgnokii/xgnokii_dtmf.c:162 +#: xgnokii/xgnokii_logos.c:1225 xgnokii/xgnokii_speed.c:469 +#, c-format +msgid "" +"File %s already exist.\n" +"Overwrite?" +msgstr "" +"Datoteka %s ¾e obstaja.\n" +"Prepi¹em?" + +#: xgnokii/xgnokii_contacts.c:2532 xgnokii/xgnokii_speed.c:487 +msgid "Export" +msgstr "Izvozi" + +#: xgnokii/xgnokii_contacts.c:2748 xgnokii/xgnokii_dtmf.c:90 +#: xgnokii/xgnokii_speed.c:326 +#, c-format +msgid "Can't open file %s for reading!" +msgstr "Ne morem odpreti datoteke %s za branje!" + +#: xgnokii/xgnokii_contacts.c:2802 +msgid "" +"Can't get SM memory status!\n" +"\n" +"Setting max SIM entries set to 100!\n" +msgstr "" +"Ne morem dobiti stanja SM spomina!\n" +"\n" +"Nastavljam maksimum SIM vnosov na 100!\n" + +#: xgnokii/xgnokii_contacts.c:2917 xgnokii/xgnokii_speed.c:404 +msgid "Import" +msgstr "Vnesi" + +#: xgnokii/xgnokii_contacts.c:3115 xgnokii/xgnokii_sms.c:1233 +msgid "Select contacts" +msgstr "Izberi kontakte" + +#: xgnokii/xgnokii_contacts.c:3261 +msgid "/Edit/_New" +msgstr "/Uredi/_Nov" + +#: xgnokii/xgnokii_contacts.c:3262 +msgid "/Edit/D_uplicate" +msgstr "/Uredi/Podvo_ji" + +#: xgnokii/xgnokii_contacts.c:3265 xgnokii/xgnokii_logos.c:1360 +msgid "/Edit/Sep3" +msgstr "/Uredi/Sep3" + +#: xgnokii/xgnokii_contacts.c:3266 +msgid "/Edit/_Change memory type" +msgstr "/Uredi/_Spremeni vrsto spomina" + +#: xgnokii/xgnokii_contacts.c:3268 +msgid "/Edit/_Find" +msgstr "/Uredi/_Najdi" + +#: xgnokii/xgnokii_contacts.c:3269 +msgid "/Edit/Find ne_xt" +msgstr "/Uredi/Naj_di naslednjo" + +#: xgnokii/xgnokii_contacts.c:3270 +msgid "/Edit/Sep5" +msgstr "/Uredi/Sep5" + +#: xgnokii/xgnokii_contacts.c:3272 +msgid "/_Dial" +msgstr "/_Klièi" + +#: xgnokii/xgnokii_contacts.c:3273 +msgid "/Dial/Dial _voice" +msgstr "/Klièi/Glasovno _klicanje" + +#: xgnokii/xgnokii_contacts.c:3292 +msgid "Memory" +msgstr "Spomin" + +#: xgnokii/xgnokii_contacts.c:3292 +msgid "Group" +msgstr "Skupina" + +#: xgnokii/xgnokii_contacts.c:3362 +msgid "Delete entry" +msgstr "Izbri¹i vnos" + +#: xgnokii/xgnokii_data.c:42 +msgid "" +"Data calls are currently\n" +"Disabled\n" +" " +msgstr "" +"Podatkovni klici so trenutno\n" +"Onemogoèeni\n" +" " + +#: xgnokii/xgnokii_data.c:44 +msgid "" +"Data calls are currently\n" +"Enabled\n" +" " +msgstr "" +"Podatkovni klici so trenutno\n" +"Omogoèeni\n" +" " + +#: xgnokii/xgnokii_data.c:101 +msgid "Virtual Modem" +msgstr "Virtualni Modem" + +#: xgnokii/xgnokii_data.c:119 +msgid "Enable" +msgstr "Omogoèi" + +#: xgnokii/xgnokii_data.c:125 +msgid "Disable" +msgstr "Onemogoèi" + +#: xgnokii/xgnokii_dtmf.c:108 +msgid "Load" +msgstr "Nalo¾i" + +#: xgnokii/xgnokii_dtmf.c:218 xgnokii/xgnokii_logos.c:1348 +msgid "/File/_Open" +msgstr "/Datoteka/_Odpri" + +#: xgnokii/xgnokii_dtmf.c:219 xgnokii/xgnokii_logos.c:1349 +#: xgnokii/xgnokii_sms.c:1123 xgnokii/xgnokii_sms.c:1508 +msgid "/File/_Save" +msgstr "/Datoteka/_Shrani" + +#: xgnokii/xgnokii_dtmf.c:245 +msgid "Dial Tone" +msgstr "" + +#: xgnokii/xgnokii_logos.c:875 +#, c-format +msgid "" +"Error getting network info\n" +"(error=%d)" +msgstr "" +"Napaka pri pridobivanju informacij o omre¾ju\n" +"(napaka=%d)" + +#: xgnokii/xgnokii_logos.c:914 +#, c-format +msgid "" +"Error getting bitmap\n" +"(error=%d)" +msgstr "" +"Napaka pri pridobivanju bitne slike\n" +"(error=%d)" + +#: xgnokii/xgnokii_logos.c:959 +#, c-format +msgid "" +"Error setting bitmap\n" +"(error=%d)" +msgstr "" +"Napaka pri nastavljanju bitne slike\n" +"(napaka=%d)" + +#: xgnokii/xgnokii_logos.c:1196 +#, c-format +msgid "" +"Error saving file\n" +"(error=%d)" +msgstr "" +"Napaka pri shranjevanju datoteke\n" +"(napaka=%d)" + +#: xgnokii/xgnokii_logos.c:1246 +#, c-format +msgid "Can't open file %s for reading !" +msgstr "Ne morem odpreti datoteke %s za branje !" + +#: xgnokii/xgnokii_logos.c:1255 +#, c-format +msgid "" +"Error reading file\n" +"(error=%d)" +msgstr "" +"Napaka pri branju datoteke\n" +"(napaka=%d)" + +#: xgnokii/xgnokii_logos.c:1279 +#, fuzzy +msgid "Save logo as ..." +msgstr "/Datoteka/Shr_ani kot ..." + +#: xgnokii/xgnokii_logos.c:1306 +msgid "Open logo..." +msgstr "" + +#: xgnokii/xgnokii_logos.c:1350 +msgid "/File/Save _as ..." +msgstr "/Datoteka/Shr_ani kot ..." + +#: xgnokii/xgnokii_logos.c:1352 +msgid "/File/_Get operator" +msgstr "/Datoteka/_Dobi operatorja" + +#: xgnokii/xgnokii_logos.c:1353 +msgid "/File/Get _logo" +msgstr "/Datoteka/Dobi _logo" + +#: xgnokii/xgnokii_logos.c:1354 +msgid "/File/Se_t logo" +msgstr "/Datoteka/Nas_tavi logo" + +#: xgnokii/xgnokii_logos.c:1358 +msgid "/Edit/_Clear" +msgstr "/Uredi/Po_èisti" + +#: xgnokii/xgnokii_logos.c:1359 +msgid "/Edit/_Invert" +msgstr "/Uredi/_Invertiraj" + +#: xgnokii/xgnokii_logos.c:1361 +msgid "/Edit/_Up logo" +msgstr "/Uredi/_Gor logo" + +#: xgnokii/xgnokii_logos.c:1362 +msgid "/Edit/_Down logo" +msgstr "/Uredi/_Dol logo" + +#: xgnokii/xgnokii_logos.c:1363 +msgid "/Edit/_Left logo" +msgstr "/Uredi/_Levo logo" + +#: xgnokii/xgnokii_logos.c:1364 +msgid "/Edit/_Right logo" +msgstr "/Uredi/De_sno logo" + +#: xgnokii/xgnokii_logos.c:1366 +msgid "/Edit/Flip _horizontal" +msgstr "/Uredi/Zasukaj _horizontalno" + +#: xgnokii/xgnokii_logos.c:1367 +msgid "/Edit/Flip _vertical" +msgstr "/Uredi/Zasukaj _vertikalno" + +#: xgnokii/xgnokii_logos.c:1422 +#, fuzzy +msgid "Clear logo" +msgstr "Skupina klicoèih:" + +#: xgnokii/xgnokii_logos.c:1429 +#, fuzzy +msgid "Get logo" +msgstr "/Datoteka/Dobi _logo" + +#: xgnokii/xgnokii_logos.c:1434 +#, fuzzy +msgid "Set logo" +msgstr "/Datoteka/Nas_tavi logo" + +#: xgnokii/xgnokii_logos.c:1453 +#, fuzzy +msgid "Startup logo" +msgstr "Zagonski logotip je podprt - " + +#: xgnokii/xgnokii_logos.c:1459 +#, fuzzy +msgid "Operator logo" +msgstr "Po¹iljam logo operaterja.\n" + +#: xgnokii/xgnokii_logos.c:1467 +#, fuzzy +msgid "Caller logo" +msgstr "Skupina klicoèih:" + +#: xgnokii/xgnokii_logos.c:1579 +msgid "Brush tool" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1585 +msgid "Line tool" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1591 +msgid "Rectangle tool" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1598 +msgid "Filled rectangle tool" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1606 +msgid "Invert logo" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1611 +msgid "Horizontal flip" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1616 +msgid "Vertical flip" +msgstr "" + +#: xgnokii/xgnokii_logos.c:1663 +msgid "Load preview pixmap error, feature disabled." +msgstr "Napaka pri nalaganju predogleda slike, fukcija onemogoèena." + +#: xgnokii/xgnokii_lowlevel.c:378 +#, c-format +msgid "%s: line %d: Can't get memory entry number %d from memory %d! %d\n" +msgstr "" +"%s: vrstica %d: Ne morem prebrati vnosa %d v spominu z spomina %d! %d\n" + +#: xgnokii/xgnokii_lowlevel.c:914 +msgid "Connecting..." +msgstr "Povezujem..." + +#: xgnokii/xgnokii_lowlevel.c:953 +msgid "Refreshing SMSes..." +msgstr "Osve¾ujem SMS-e..." + +#: xgnokii/xgnokii_lowlevel.c:1011 +msgid "Working..." +msgstr "Delam..." + +#: xgnokii/xgnokii_lowlevel.c:1014 +#, fuzzy, c-format +msgid "Event %d failed with return code %d!\n" +msgstr "Dogodek %d neuspel z povratno kodo %d!\n" + +#: xgnokii/xgnokii_netmon.c:261 +msgid "/_Tools" +msgstr "/_Orodja" + +#: xgnokii/xgnokii_netmon.c:262 +msgid "/Tools/Net monitor o_n" +msgstr "/Orodja/Net monitor _vklop" + +#: xgnokii/xgnokii_netmon.c:263 +msgid "/Tools/Net monitor o_ff" +msgstr "/Orodja/Net monitor _izklop" + +#: xgnokii/xgnokii_netmon.c:380 xgnokii/xgnokii_netmon.c:383 +msgid "Active cell" +msgstr "Aktivna celica" + +#: xgnokii/xgnokii_netmon.c:386 +msgid "NCELL list I" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:389 +msgid "NCELL list II" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:392 +msgid "NCELL list III" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:395 +msgid "Prefered/Denied networks" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:398 +msgid "System information bits" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:401 +msgid "TMSI, Paging, PLU" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:404 +msgid "Cells info" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:407 +msgid "DTX, Cipher, Hopping" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:417 +msgid "Uplink DTX" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:420 +msgid "BTS TEST" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:423 +msgid "CELL BARR-Flag" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:426 +msgid "Accumulator, Charge status" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:429 +msgid "?Constant voltage charging display" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:432 +msgid "?Battery full detection" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:435 +msgid "Accumulator" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:438 +msgid "SW-Resets" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:441 +msgid "Reset-Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:444 +msgid "Cause codes for last connection abortion" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:454 +msgid "Reset handover counters" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:457 +msgid "Handover Counter" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:460 +msgid "Handover Counter (Dual)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:463 +msgid "L2-Timeouts" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:466 +msgid "SIM" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:469 +msgid "?Block display 1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:475 +msgid "Memory status before reset" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:478 +msgid "Reset Counters" +msgstr "Ponastavi ©tevce" + +#: xgnokii/xgnokii_netmon.c:481 +msgid "Counter for PLMN Search and Cell reselection (Singleband)" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:491 +msgid "Neighbourhood measurement" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:494 +msgid "Calls" +msgstr "Klici" + +#: xgnokii/xgnokii_netmon.c:497 +msgid "Temporary counters of DSP" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:500 +msgid "Control of task information displays" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:503 +msgid "Information about task numbers 0-7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:506 +msgid "Information about task numbers 8-15" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:509 +msgid "Information about task numbers 16-23" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:512 +msgid "Information about OS_SYSTEM_STACK" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:515 +msgid "Information about current MCU and DSP software versions" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:518 +msgid "Hardware version" +msgstr "Verzija strojne opreme" + +#: xgnokii/xgnokii_netmon.c:537 +msgid "Chan" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:538 +msgid "RxLv" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:539 +msgid "C1" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:540 +msgid "C2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:541 +msgid "ACT" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:542 +msgid "NC2" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:543 +msgid "NC3" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:544 +msgid "NC4" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:545 +msgid "NC5" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:546 +msgid "NC6" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:547 +msgid "NC7" +msgstr "" + +#: xgnokii/xgnokii_netmon.c:578 +msgid "Page:" +msgstr "Stran:" + +#: xgnokii/xgnokii_sms.c:236 +msgid "report" +msgstr "poroèilo" + +#: xgnokii/xgnokii_sms.c:241 +msgid "read" +msgstr "prebrano" + +#: xgnokii/xgnokii_sms.c:246 +msgid "unread" +msgstr "neprebrano" + +#: xgnokii/xgnokii_sms.c:306 +msgid "sent" +msgstr "poslano" + +#: xgnokii/xgnokii_sms.c:308 +msgid "unsent" +msgstr "neposlano" + +#: xgnokii/xgnokii_sms.c:376 +msgid "From: " +msgstr "Od:" + +#: xgnokii/xgnokii_sms.c:473 +msgid "Delete SMS" +msgstr "Izbri¹i SMS" + +#: xgnokii/xgnokii_sms.c:505 +msgid "Do you want to delete selected SMS?" +msgstr "Ali ¾elite izbrisati izbrani SMS?" + +#: xgnokii/xgnokii_sms.c:529 +#, c-format +msgid "Cannot open mailbox %s for appending!" +msgstr "Ne morem odpreti mailbox-a %s za dodajanje!" + +#: xgnokii/xgnokii_sms.c:543 +#, c-format +msgid "" +"Cannot save to mailbox %s.\n" +"%s is locked for process %d!" +msgstr "" +"Ne morem shraniti v mailbox %s.\n" +"%s je zaklenjen od procesa %d!" + +#: xgnokii/xgnokii_sms.c:558 +#, c-format +msgid "Cannot lock mailbox %s!" +msgstr "Ne morem zakleniti mailbox-a %s!" + +#: xgnokii/xgnokii_sms.c:609 +#, c-format +msgid "Cannot unlock mailbox %s!" +msgstr "Ne morem odkleniti mailbox-a %s!" + +#: xgnokii/xgnokii_sms.c:827 xgnokii/xgnokii_sms.c:958 +msgid "Address line contains illegal address!" +msgstr "Vrstica z naslovom vsebuje nedovoljen naslov!" + +#: xgnokii/xgnokii_sms.c:930 +#, c-format +msgid "" +"SMS send to %s failed\n" +"(error=%d)" +msgstr "" +"Po¹iljanje SMS-a %s ni uspelo\n" +"(napaka?%d)" + +#: xgnokii/xgnokii_sms.c:1020 xgnokii/xgnokii_sms.c:1057 +#, c-format +msgid "Sending SMS to %s (%d/%d) ...\n" +msgstr "Po¹iljanje SMS-a %s (%d/%d) ...\n" + +#: xgnokii/xgnokii_sms.c:1084 +#, c-format +msgid "Sending SMS to %s ...\n" +msgstr "Po¹iljanje SMS-a %s ...\n" + +#: xgnokii/xgnokii_sms.c:1122 +msgid "/File/Sen_d" +msgstr "/Datoteka/Po_¹lji" + +#: xgnokii/xgnokii_sms.c:1125 +msgid "/File/Check _Names" +msgstr "/Datoteka/Preveri Ime_na" + +#: xgnokii/xgnokii_sms.c:1126 +msgid "/File/C_ontacts" +msgstr "/Datoteka/_Kontakti" + +#: xgnokii/xgnokii_sms.c:1185 +msgid "Send message" +msgstr "Po¹lji sporoèilo" + +#: xgnokii/xgnokii_sms.c:1189 +msgid "Save message to outbox" +msgstr "Shrani sporoèilo v outbox" + +#: xgnokii/xgnokii_sms.c:1196 +msgid "Check names" +msgstr "Preveri imena" + +#: xgnokii/xgnokii_sms.c:1209 +msgid "To:" +msgstr "Za:" + +#: xgnokii/xgnokii_sms.c:1281 +msgid "Delivery report" +msgstr "Poroèilo o dostavi" + +#: xgnokii/xgnokii_sms.c:1285 +msgid "Send as Long SMS" +msgstr "Po¹lji kot dolgi SMS" + +#: xgnokii/xgnokii_sms.c:1289 +msgid "SMS Center:" +msgstr "SMS Center:" + +#: xgnokii/xgnokii_sms.c:1308 +msgid "New Message" +msgstr "Novo Sporoèilo" + +#: xgnokii/xgnokii_sms.c:1335 +msgid "Forward Message" +msgstr "Posreduj Sporoèilo" + +#: xgnokii/xgnokii_sms.c:1379 +msgid "Reply Message" +msgstr "Odgovori na Sporoèilo" + +#: xgnokii/xgnokii_sms.c:1415 xgnokii/xgnokii_sms.c:1586 +msgid "Bussiness Card" +msgstr "Vizitka" + +#: xgnokii/xgnokii_sms.c:1509 +msgid "/File/Save to mailbo_x" +msgstr "/Datoteka/Shrani v mailbo_x" + +#: xgnokii/xgnokii_sms.c:1512 +msgid "/_Messages" +msgstr "/_Sporoèila" + +#: xgnokii/xgnokii_sms.c:1513 +msgid "/_Messages/_New" +msgstr "/_Sporoèila/_Nova" + +#: xgnokii/xgnokii_sms.c:1514 +msgid "/_Messages/_Forward" +msgstr "/_Sporoèila/_Posreduj/" + +#: xgnokii/xgnokii_sms.c:1515 +msgid "/_Messages/_Reply" +msgstr "/_Sporoèila/_Odgovori" + +#: xgnokii/xgnokii_sms.c:1516 +msgid "/_Messages/_Delete" +msgstr "/_Sporoèila/_Izbri¹i" + +#: xgnokii/xgnokii_sms.c:1517 +msgid "/Messages/Sep3" +msgstr "/Sporoèila/Sep3" + +#: xgnokii/xgnokii_sms.c:1518 +msgid "/_Messages/_Bussiness card" +msgstr "/_Sporoèila/_Vizitka" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Status" +msgstr "Stanje" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Date / Time" +msgstr "Datum / Èas" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Sender" +msgstr "Po¹iljatelj" + +#: xgnokii/xgnokii_sms.c:1539 +msgid "Message" +msgstr "Sporoèilo" + +#: xgnokii/xgnokii_sms.c:1573 +msgid "New message" +msgstr "Novo sporoèilo" + +#: xgnokii/xgnokii_sms.c:1577 +msgid "Forward message" +msgstr "Posreduj sporoèilo" + +#: xgnokii/xgnokii_sms.c:1581 +msgid "Reply message" +msgstr "Odogovori na sporoèilo" + +#: xgnokii/xgnokii_sms.c:1593 +msgid "Delete message" +msgstr "Izbri¹i sporoèilo" + +#: xgnokii/xgnokii_sms.c:1618 +msgid "SMS's" +msgstr "SMS-i" + +#: xgnokii/xgnokii_sms.c:1627 +msgid "Inbox" +msgstr "Inbox" + +#: xgnokii/xgnokii_sms.c:1633 +msgid "Outbox" +msgstr "Outbox" + +#: xgnokii/xgnokii_speed.c:180 +msgid "Reading data ..." +msgstr "Berem podatke ..." + +#: xgnokii/xgnokii_speed.c:191 xgnokii/xgnokii_speed.c:197 +#: xgnokii/xgnokii_speed.c:256 +msgid "Cannot allocate memory!" +msgstr "Ne morem dodeliti spomina!" + +#: xgnokii/xgnokii_speed.c:344 +msgid "Cannot allocate memory!\n" +msgstr "Ne morem dodeliti spomina!\n" + +#: xgnokii/xgnokii_speed.c:356 xgnokii/xgnokii_speed.c:384 +msgid "Error reading file!" +msgstr "Napaka pri branju datoteke!" + +#: xgnokii/xgnokii_speed.c:554 +msgid "Key" +msgstr "Kljuè" + +#: xgnokii/xgnokii_xkeyb.c:183 +msgid "Cannot load background pixmap!" +msgstr "Ne morem nalo¾iti slike za ozadje!" + +#: xgnokii/xgnokii_xkeyb.c:260 +msgid "XGnokii Keyboard" +msgstr "XGnokii Tipkovnica" + +#~ msgid "Default recipient number is %s\n" +#~ msgstr "Privzeta ¹tevilka prejemnika je %s\n" diff --git a/smsd/ChangeLog b/smsd/ChangeLog new file mode 100644 index 0000000..18e4e6f --- /dev/null +++ b/smsd/ChangeLog @@ -0,0 +1,3 @@ +* Fri 02 Feb 2001 Jan Derfinak +- Fixed smsd to new capability code. +. diff --git a/smsd/Makefile b/smsd/Makefile new file mode 100644 index 0000000..62d5561 --- /dev/null +++ b/smsd/Makefile @@ -0,0 +1,53 @@ +# +# Makefile for the xGNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. & Jan Derfinak +# 2000 Karel Zak +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +CFLAGS += $(PTHREAD_CFLAGS) \ + `glib-config --cflags` + +LDFLAGS += $(PTHREAD_LIBS) \ + `glib-config --libs` -lpq + +LDFLAGS += -L$(TOPDIR) -lgnokii + +ifdef XPM_LIBS + LDFLAGS +=$(XPM_LIBS) +endif + +OBJS = db.o \ + smsd.o \ + lowlevel.o + +all: smsd + + +smsd: $(OBJS) $(TOPDIR)/common/data/DATA.o $(TOPDIR)/common/gsm-filetypes.o + +$(TOPDIR)/common/data/DATA.o: + $(MAKE) -C $(TOPDIR)/common/data DATA.o + +$(TOPDIR)/common/gsm-filetypes.o: + $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o + +clean: + $(RM) $(OBJS) *~ depend smsd + +install: all + $(INSTALL) -d $(bindir) + $(INSTALL) -m 755 -s smsd $(bindir) + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend diff --git a/smsd/README b/smsd/README new file mode 100644 index 0000000..759f11b --- /dev/null +++ b/smsd/README @@ -0,0 +1,48 @@ +The SMSD (SMS daemon) program is intended for receiving and sending SMS's. +This code is a part of one project on which I work and I provide it for free +use under GPL. I provide the program AS IS without any warranty. + +The program is designed to work with Postgres SQL server but you can adapt +it for other SQL engines by rewriting db.{hc} modules. SMSD uses SQL server +as repository for SMS's. You must create a database (default name is 'sms') +with tables defined in sms.tables.sql file. Table 'inbox' is for received +SMS's: +number - phone number from which is sms received +smsdate - date setted by SMS center +insertdate - date of inserting SMS in table +text - SMS text +processed - smsd sets this always to FALSE + +PRIMARY KEY from 'number' and 'smsdate' is important. You must create it. + +When phone receive SMS, SMSD move it into table 'inbox'. (SMSD remove SMS +from phone.) + +Table 'outbox' is for outgoing SMS's. SMSD periodicaly looking in this table +and searching for lines with attribut 'processed' setted to FALSE. If it find +such SMS, it will send SMS to 'number': +number - recipient's phone number +insertdate - date of inserting SMS in table +text - SMS text +processed - new SMS must have this attribut setted to FALSE. SMSD will send + this SMS and will update 'processed' to TRUE + + +By default SMSD connect to localhost DB server, to database sms, with user +name of user which start SMSD, without password. You can change this with +-d,--db command line option. As argument of this option you must write Postgres +connect info string. For example: +./smsd --db "dbname=smsgateway host=bigserver user=ja password=secure" & + +SMSD is multi threaded program. After running SMSD you can see 5 threads. +The first thread is thread manager, the second is for lowlevel communication +with phone, the third for high level phone monitoring, the fourth is for +receiving SMS's and last fifth is for SMS's sending. + +SMSD is not compiled by default with main 'make' command. You must compile it +manually by typing 'make' in smsd directory. But before SMSD compilation +you must right configure gnokii (autoconf, configure). SMSD shares gnokii +runtime configuration file. + + Jan Derfinak + 17 December 2000 diff --git a/smsd/db.c b/smsd/db.c new file mode 100644 index 0000000..4468b3f --- /dev/null +++ b/smsd/db.c @@ -0,0 +1,162 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Dec 17 2000 + Modified by Jan Derfinak + +*/ + +#include +#include +#include +#include "db.h" +#include "smsd.h" +#include "gsm-common.h" + +static PGconn *connIn = NULL; +static PGconn *connOut = NULL; + +void DB_Bye (void) +{ + if (connIn) + PQfinish (connIn); + + if (connOut) + PQfinish (connOut); +} + + +gint DB_ConnectInbox (const gchar * const conninfo) +{ + connIn = PQconnectdb (conninfo); + + if (PQstatus (connIn) == CONNECTION_BAD) + { + g_print ("Connection to database '%s' failed.\n", conninfo); + g_print ("%s", PQerrorMessage(connIn)); + return (1); + } + + return (0); +} + + +gint DB_ConnectOutbox (const gchar * const conninfo) +{ + connOut = PQconnectdb (conninfo); + + if (PQstatus (connOut) == CONNECTION_BAD) + { + g_print ("Connection to database '%s' failed.\n", conninfo); + g_print ("%s", PQerrorMessage(connOut)); + return (1); + } + + return (0); +} + + +gint DB_InsertSMS (const GSM_SMSMessage * const data) +{ + GString *buf; + PGresult *res; + + buf = g_string_sized_new (128); + g_string_sprintf (buf, "INSERT INTO inbox VALUES ('%s', + '%02d-%02d-%02d %02d:%02d:%02d+01', 'now', '%s', 'f')", + data->Sender, data->Time.Year + 2000, data->Time.Month, + data->Time.Day, data->Time.Hour, data->Time.Minute, + data->Time.Second, data->MessageText); + res = PQexec(connIn, buf->str); + g_string_free(buf, TRUE); + if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) + { + PQclear (res); + return (1); + } + + PQclear (res); + + return (0); +} + + +void DB_Look (void) +{ + GString *buf; + PGresult *res1, *res2; + register int i; + + buf = g_string_sized_new (128); + + g_string_sprintf (buf, "BEGIN"); + + res1 = PQexec(connOut, buf->str); + PQclear (res1); + + g_string_sprintf (buf, "SELECT id, number, text FROM outbox \ + WHERE processed='f' FOR UPDATE"); + + res1 = PQexec(connOut, buf->str); + if (!res1 || PQresultStatus (res1) != PGRES_TUPLES_OK) + { + g_print ("%s\n", PQcmdStatus (res1)); + PQclear (res1); + g_print ("%d: SELECT FROM command failed\n", __LINE__); + res1 = PQexec (connOut, "ROLLBACK TRANSACTION"); + PQclear (res1); + g_string_free (buf, TRUE); + return; + } + + for (i = 0; i < PQntuples (res1); i++) + { + GSM_SMSMessage sms; + + sms.MessageCenter.No = 1; + sms.Type = GST_MO; + sms.Class = -1; + sms.Compression = false; + sms.EightBit = false; + sms.Validity = 4320; + sms.UDHType = GSM_NoUDH; + + strncpy (sms.Destination, PQgetvalue (res1, i, 1), GSM_MAX_DESTINATION_LENGTH + 1); + sms.Destination[GSM_MAX_DESTINATION_LENGTH] = '\0'; + + strncpy (sms.MessageText, PQgetvalue (res1, i, 2), GSM_MAX_SMS_LENGTH + 1); + sms.MessageText[GSM_MAX_SMS_LENGTH] = '\0'; + +#ifdef XDEBUG + g_print ("%s, %s\n", sms.Destination, sms.MessageText); +#endif + + if (WriteSMS (&sms) != 0) + { + g_string_sprintf (buf, "UPDATE outbox SET processed='t' WHERE id='%s'", + PQgetvalue (res1, i, 0)); + res2 = PQexec(connOut, buf->str); + if (!res2 || PQresultStatus (res2) != PGRES_COMMAND_OK) + { + g_print ("%s\n", PQcmdStatus (res2)); + g_print ("%d: UPDATE command failed\n", __LINE__); + } + PQclear (res2); + } + } + + PQclear (res1); + + g_string_sprintf (buf, "COMMIT"); + res1 = PQexec(connOut, buf->str); + + g_string_free(buf, TRUE); + PQclear (res1); +} diff --git a/smsd/db.h b/smsd/db.h new file mode 100644 index 0000000..062bbe7 --- /dev/null +++ b/smsd/db.h @@ -0,0 +1,28 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Dec 17 2000 + Modified by Jan Derfinak + +*/ + +#ifndef DB_H +#define DB_H + +#include +#include "gsm-common.h" + +extern void DB_Bye (void); +extern gint DB_ConnectInbox (const gchar * const); +extern gint DB_ConnectOutbox (const gchar * const); +extern gint DB_InsertSMS (const GSM_SMSMessage * const); +extern void DB_Look (void); + +#endif diff --git a/smsd/lowlevel.c b/smsd/lowlevel.c new file mode 100644 index 0000000..8a665f3 --- /dev/null +++ b/smsd/lowlevel.c @@ -0,0 +1,352 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Id$ + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:23 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.4 2001/05/30 14:36:47 pkot + Fix smsd to use StateMachine and let it compile. + + Revision 1.3 2001/03/29 08:42:59 ja + Enabling compilation of smsd. + + Revision 1.2 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + +*/ + +#include +#include +#include +#include +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "fbus-6110.h" +#include "fbus-3810.h" +#include "smsd.h" +#include "lowlevel.h" + +pthread_t monitor_th; +PhoneMonitor phoneMonitor; +pthread_mutex_t smsMutex; +pthread_cond_t smsCond; +pthread_mutex_t sendSMSMutex; +pthread_cond_t sendSMSCond; +static pthread_mutex_t eventsMutex; +static GSList *ScheduledEvents = NULL; + + +inline void InsertEvent (PhoneEvent *event) +{ +# ifdef XDEBUG + g_print ("Inserting Event: %d\n", event->event); +# endif + pthread_mutex_lock (&eventsMutex); + ScheduledEvents = g_slist_prepend (ScheduledEvents, event); + pthread_mutex_unlock (&eventsMutex); +} + + +inline static PhoneEvent *RemoveEvent (void) +{ + GSList *list; + PhoneEvent *event = NULL; + + pthread_mutex_lock (&eventsMutex); + list = g_slist_last (ScheduledEvents); + if (list) + { + event = (PhoneEvent *) list->data; + ScheduledEvents = g_slist_remove_link (ScheduledEvents, list); + g_slist_free_1 (list); + } + pthread_mutex_unlock (&eventsMutex); + + return (event); +} + + +static void InitModelInf (void) +{ + gchar buf[64]; + GSM_Error error; + register gint i = 0; + + while ((error = GSM->GetModel(buf)) != GE_NONE && i++ < 15) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.model); + phoneMonitor.phone.version = g_strdup (buf); + phoneMonitor.phone.model = GetModel (buf); + if (phoneMonitor.phone.model == NULL) + phoneMonitor.phone.model = g_strdup (_("unknown")); + + phoneMonitor.supported = GetPhoneModel(buf)->flags; + } + + i = 0; + while ((error = GSM->GetRevision (buf)) != GE_NONE && i++ < 5) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.revision); + phoneMonitor.phone.revision = g_strdup (buf); + } + + i = 0; + while ((error = GSM->GetIMEI (buf)) != GE_NONE && i++ < 5) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.imei); + phoneMonitor.phone.imei = g_strdup (buf); + } + + +#ifdef XDEBUG + g_print ("Version: %s\n", phoneMonitor.phone.version); + g_print ("Model: %s\n", phoneMonitor.phone.model); + g_print ("IMEI: %s\n", phoneMonitor.phone.imei); + g_print ("Revision: %s\n", phoneMonitor.phone.revision); +#endif +} + + +static GSM_Error fbusinit(bool enable_monitoring) +{ + int count=0; + static GSM_Error error=GE_NOLINK; + GSM_ConnectionType connection=GCT_Serial; + static GSM_Statemachine sm; + + if (!strcmp(smsdConfig.connection, "infrared")) + connection = GCT_Infrared; + + /* Initialise the code for the GSM interface. */ + + if (error == GE_NOLINK) + error = GSM_Initialise (smsdConfig.model, smsdConfig.port, + smsdConfig.initlength, connection, NULL, &sm); + +#ifdef XDEBUG + g_print ("fbusinit: error %d\n", error); +#endif + + if (error != GE_NONE) { + g_print (_("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); + return (error); + } + + while (count++ < 40 && *GSM_LinkOK == false) + usleep(50000); +#ifdef XDEBUG + g_print("After usleep. GSM_LinkOK: %d\n", *GSM_LinkOK); +#endif + + if (*GSM_LinkOK == true) + InitModelInf (); + + return *GSM_LinkOK; +} + + +void InitPhoneMonitor (void) +{ + phoneMonitor.phone.model = g_strdup (_("unknown")); + phoneMonitor.phone.version = phoneMonitor.phone.model; + phoneMonitor.phone.revision = g_strdup (_("unknown")); + phoneMonitor.phone.imei = g_strdup (_("unknown")); + phoneMonitor.supported = 0; + phoneMonitor.working = FALSE; + phoneMonitor.sms.unRead = phoneMonitor.sms.number = 0; + phoneMonitor.sms.messages = NULL; + pthread_mutex_init (&smsMutex, NULL); + pthread_cond_init (&smsCond, NULL); + pthread_mutex_init (&sendSMSMutex, NULL); + pthread_cond_init (&sendSMSCond, NULL); + pthread_mutex_init (&eventsMutex, NULL); +} + + +static inline void FreeElement (gpointer data, gpointer userData) +{ + g_free ((GSM_SMSMessage *) data); +} + + +static inline void FreeArray (GSList **array) +{ + if (*array) + { + g_slist_foreach (*array, FreeElement, NULL); + g_slist_free (*array); + *array = NULL; + } +} + + +static void RefreshSMS (const gint number) +{ + GSM_Error error; + GSM_SMSMessage *msg; + register gint i; + +# ifdef XDEBUG + g_print ("RefreshSMS is running...\n"); +# endif + + pthread_mutex_lock (&smsMutex); + FreeArray (&(phoneMonitor.sms.messages)); + phoneMonitor.sms.number = 0; +// pthread_mutex_unlock (&smsMutex); + + i = 0; + while (1) + { + msg = g_malloc (sizeof (GSM_SMSMessage)); + msg->MemoryType = GMT_SM; + msg->Location = ++i; + + if ((error = GSM->GetSMSMessage (msg)) == GE_NONE) + { + // pthread_mutex_lock (&smsMutex); + phoneMonitor.sms.messages = g_slist_append (phoneMonitor.sms.messages, msg); + phoneMonitor.sms.number++; + // pthread_mutex_unlock (&smsMutex); + if (phoneMonitor.sms.number == number) + { + pthread_cond_signal (&smsCond); + pthread_mutex_unlock (&smsMutex); + return; + } + } + else if (error == GE_INVALIDSMSLOCATION) /* All positions are readed */ + { + g_free (msg); + pthread_cond_signal (&smsCond); + pthread_mutex_unlock (&smsMutex); + break; + } + else + g_free (msg); + + usleep (750000); + } +} + + +static gint A_SendSMSMessage (gpointer data) +{ + D_SMSMessage *d = (D_SMSMessage *) data; + GSM_Error error; + + error = d->status = GE_UNKNOWN; + if (d) + { + pthread_mutex_lock (&sendSMSMutex); + error = d->status = GSM->SendSMSMessage (d->sms, 0); + pthread_cond_signal (&sendSMSCond); + pthread_mutex_unlock (&sendSMSMutex); + } + + if (d->status == GE_SMSSENDOK) + return (GE_NONE); + else + return (error); +} + + +static gint A_DeleteSMSMessage (gpointer data) +{ + GSM_SMSMessage *sms = (GSM_SMSMessage *) data; + GSM_Error error = GE_UNKNOWN; + + if (sms) + { + error = GSM->DeleteSMSMessage(sms); +// I don't use copy, I don't need free message. +// g_free (sms); + } + + return (error); +} + + +static gint A_Exit (gpointer data) +{ + pthread_exit (0); + return (0); /* just to be proper */ +} + + +gint (*DoAction[])(gpointer) = { + A_SendSMSMessage, + A_DeleteSMSMessage, + A_Exit +}; + + +void *Connect (void *a) +{ + GSM_SMSStatus SMSStatus = {0, 0}; + PhoneEvent *event; + GSM_Error error; + + +# ifdef XDEBUG + g_print ("Initializing connection...\n"); +# endif + + while (!fbusinit (true)) + sleep (1); + +# ifdef XDEBUG + g_print ("Phone connected. Starting monitoring...\n"); +# endif + + while (1) + { + phoneMonitor.working = FALSE; + + if (GSM->GetSMSStatus (&SMSStatus) == GE_NONE) + { + if (phoneMonitor.sms.unRead != SMSStatus.UnRead || + phoneMonitor.sms.number != SMSStatus.Number) + { + phoneMonitor.working = TRUE; + RefreshSMS (SMSStatus.Number); + phoneMonitor.working = FALSE; + } + + phoneMonitor.sms.unRead = SMSStatus.UnRead; + } + + while ((event = RemoveEvent ()) != NULL) + { +# ifdef XDEBUG + g_print ("Processing Event: %d\n", event->event); +# endif + phoneMonitor.working = TRUE; + if (event->event <= Event_Exit) + if ((error = DoAction[event->event] (event->data)) != GE_NONE) + g_print (_("Event %d failed with return code %d!\n"), event->event, error); + g_free (event); + } + } +} diff --git a/smsd/lowlevel.h b/smsd/lowlevel.h new file mode 100644 index 0000000..78f2f9e --- /dev/null +++ b/smsd/lowlevel.h @@ -0,0 +1,72 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Id$ + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:23 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.2 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + +*/ + +#ifndef XGNOKII_LOWLEVEL_H +#define XGNOKII_LOWLEVEL_H + +#include +#include +#include "gsm-common.h" + +typedef enum { + Event_SendSMSMessage, + Event_DeleteSMSMessage, + Event_Exit +} PhoneAction; + +typedef struct { + PhoneAction event; + gpointer data; +} PhoneEvent; + +typedef struct { + GSM_SMSMessage *sms; + GSM_Error status; +} D_SMSMessage; + +typedef struct { + bool working; + struct { + gchar *model; + gchar *imei; + gchar *revision; + gchar *version; + } phone; + struct { + gint unRead; + gint number; + GSList *messages; + } sms; + gint supported; +} PhoneMonitor; + +extern pthread_t monitor_th; +extern PhoneMonitor phoneMonitor; +extern pthread_mutex_t smsMutex; +extern pthread_cond_t smsCond; +extern pthread_mutex_t sendSMSMutex; +extern pthread_cond_t sendSMSCond; +extern void InitPhoneMonitor (void); +extern void *Connect (void *a); +extern void InsertEvent (PhoneEvent *event); + +#endif diff --git a/smsd/sms.tables.sql b/smsd/sms.tables.sql new file mode 100644 index 0000000..c18568c --- /dev/null +++ b/smsd/sms.tables.sql @@ -0,0 +1,15 @@ +CREATE TABLE "inbox" ( + "number" character varying(20) NOT NULL, + "smsdate" timestamp NOT NULL, + "insertdate" timestamp DEFAULT 'now' NOT NULL, + "text" character varying(160), + "processed" bool DEFAULT 'false', + PRIMARY KEY ("number", "smsdate") +); +CREATE TABLE "outbox" ( + "id" serial, + "number" character varying(20) NOT NULL, + "insertdate" timestamp DEFAULT 'now' NOT NULL, + "text" character varying(160), + "processed" bool DEFAULT 'false' +); diff --git a/smsd/smsd.c b/smsd/smsd.c new file mode 100644 index 0000000..396253f --- /dev/null +++ b/smsd/smsd.c @@ -0,0 +1,286 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Dec 17 2000 + Modified by Jan Derfinak + +*/ + +#include +#include +#include + +#ifndef WIN32 +# include /* for usleep */ +# include +#else +# include +# include "../win32/winserial.h" +# define WRITEPHONE(a, b, c) WriteCommBlock(b, c) +# undef IN +# undef OUT +# define sleep(x) Sleep((x) * 1000) +# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +#endif + +#include + +#include "misc.h" + +#include "gsm-common.h" +#include "gsm-api.h" +#include "fbus-6110.h" +#include "fbus-3810.h" +#include "cfgreader.h" +#include "smsd.h" +#include "lowlevel.h" +#include "db.h" + +#define DB_CONNECT "dbname=sms" + + +/* Hold main configuration data for smsd */ +SmsdConfig smsdConfig; + +/* Global variables */ +bool TerminateThread; + +/* Local variables */ +static gchar *connect; + +static pthread_t db_monitor_th; +pthread_mutex_t db_monitorMutex; +static volatile bool db_monitor; + +static void Usage (gchar *p) +{ + g_print ("\nUsage: %s [options]\n" + " -d, --db DBconnectInfo\n" + " -h, --help\n", p); +} + + +static void ReadConfig (gint argc, gchar *argv[]) +{ + connect = g_strdup (DB_CONNECT); + while (1) + { + gint optionIndex = 0; + gchar c; + static struct option longOptions[] = + { + {"db", 1, 0, 'd'} + }; + + c = getopt_long (argc, argv, "d:h", longOptions, &optionIndex); + if (c == EOF) + break; + switch (c) + { + case 'd': + g_free (connect); + connect = g_strdup (optarg); + memset (optarg, 'x', strlen (optarg)); + break; + + case 'h': + case '?': + Usage (argv[0]); + exit (1); + break; + + default: + g_print ("getopt returned 0%o\n", c); + } + } + + if ((argc - optind) != 0) + { + g_print ("Wrong argument number!\n"); + Usage (argv[0]); + exit (1); + } + + if (readconfig (&smsdConfig.model, &smsdConfig.port, &smsdConfig.initlength, + &smsdConfig.connection, &smsdConfig.bindir) < 0) + exit (-1); + + smsdConfig.smsSets = 0; +} + + + +static void *SendSMS (void *a) +{ + if (DB_ConnectOutbox (connect)) + { + pthread_exit (0); + return (0); + } + + while (1) + { + pthread_mutex_lock (&db_monitorMutex); + if (!db_monitor) + { + pthread_mutex_unlock (&db_monitorMutex); + pthread_exit (0); + return (0); + } + pthread_mutex_unlock (&db_monitorMutex); + + DB_Look (); + + sleep (3); + } +} + + +gint WriteSMS (GSM_SMSMessage *sms) +{ + GSM_Error error; + PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + D_SMSMessage *m = (D_SMSMessage *) g_malloc (sizeof (D_SMSMessage)); + + m->sms = sms; + e->event = Event_SendSMSMessage; + e->data = m; + InsertEvent (e); + pthread_mutex_lock (&sendSMSMutex); + pthread_cond_wait (&sendSMSCond, &sendSMSMutex); + pthread_mutex_unlock (&sendSMSMutex); + +#ifdef XDEBUG + g_print ("Address: %s\nText: %s\n", + sms->Destination, + sms->MessageText); +#endif + + error = m->status; + g_free (m); + + return (error); +} + + +static void ReadSMS (gpointer d, gpointer userData) +{ + GSM_SMSMessage *data = (GSM_SMSMessage *) d; + PhoneEvent *e; + + if (data->Type == GST_MT || data->Type == GST_DR) + { + if (data->Type == GST_DR) + { +#ifdef XDEBUG + g_print ("Report\n"); +#endif + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_DeleteSMSMessage; + e->data = data; + InsertEvent (e); + } + else + { +#ifdef XDEBUG + g_print ("%d. %s ", data->Location, data->Sender); + g_print ("%02d-%02d-%02d %02d:%02d:%02d+%02d %s\n", data->Time.Year + 2000, + data->Time.Month, data->Time.Day, data->Time.Hour, + data->Time.Minute, data->Time.Second, data->Time.Timezone, + data->MessageText); +#endif + DB_InsertSMS (data); + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_DeleteSMSMessage; + e->data = data; + InsertEvent (e); + } + } +} + + +static void GetSMS (void) +{ + while (1) + { + pthread_mutex_lock (&smsMutex); + pthread_cond_wait (&smsCond, &smsMutex); + + // Waiting for signal + pthread_mutex_unlock (&smsMutex); + // Signal arrived. + + pthread_mutex_lock (&smsMutex); + g_slist_foreach (phoneMonitor.sms.messages, ReadSMS, (gpointer) NULL); + pthread_mutex_unlock (&smsMutex); + } +} + + +static void MainExit (gint sig) +{ + PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + + e->event = Event_Exit; + e->data = NULL; + InsertEvent (e); + + pthread_mutex_lock (&db_monitorMutex); + db_monitor = FALSE; + pthread_mutex_unlock (&db_monitorMutex); + + pthread_join (monitor_th, NULL); + pthread_join (db_monitor_th, NULL); + DB_Bye (); + exit (0); +} + + +static void Run (void) +{ + struct sigaction act; + + act.sa_handler = MainExit; + sigemptyset (&(act.sa_mask)); + + sigaction (SIGQUIT, &act, NULL); + sigaction (SIGTERM, &act, NULL); + sigaction (SIGINT, &act, NULL); + +#if __unices__ + act.sa_handler = SIG_IGN; + sigemptyset (&(act.sa_mask)); + sigaction (SIGALRM, &act, NULL); +#endif + + InitPhoneMonitor (); + if (DB_ConnectInbox (connect)) + exit (2); + pthread_create (&monitor_th, NULL, Connect, NULL); + db_monitor = TRUE; + pthread_mutex_init (&db_monitorMutex, NULL); + pthread_create (&db_monitor_th, NULL, SendSMS, NULL); + GetSMS (); +} + + +int main (int argc, char *argv[]) +{ +#ifdef USE_NLS + textdomain("gnokii"); +#endif + + ReadConfig (argc, argv); + TerminateThread = false; + Run (); + + return(0); +} diff --git a/smsd/smsd.h b/smsd/smsd.h new file mode 100644 index 0000000..3f52f80 --- /dev/null +++ b/smsd/smsd.h @@ -0,0 +1,33 @@ +/* + + S M S D + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Dec 17 2000 + Modified by Jan Derfinak + +*/ + +#ifndef SMSD_H +#define SMSD_H + +#include + +typedef struct { + gchar *initlength; /* Init length from .gnokiirc file */ + gchar *model; /* Model from .gnokiirc file. */ + gchar *port; /* Serial port from .gnokiirc file */ + gchar *connection; /* Connection type from .gnokiirc file */ + gchar *bindir; + gint smsSets:4; +} SmsdConfig; + +extern SmsdConfig smsdConfig; +extern gint WriteSMS (GSM_SMSMessage *); + +#endif diff --git a/utils/Makefile b/utils/Makefile new file mode 100644 index 0000000..e9220d3 --- /dev/null +++ b/utils/Makefile @@ -0,0 +1,50 @@ + +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +OBJS = mgnokiidev.o + +all: mgnokiidev + +mgnokiidev: $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend mgnokiidev *.exe core *.bak + +install: + $(INSTALL) -d $(sbindir) + $(INSTALL) mgnokiidev $(sbindir) + $(INSTALL) todologo $(bindir) + +install-strip: + $(INSTALL) -d $(sbindir) + $(INSTALL) -s mgnokiidev $(sbindir) + $(INSTALL) todologo $(bindir) + +install-suid: + $(INSTALL) -d $(sbindir) + $(INSTALL) -o root -g gnokii -m 4750 mgnokiidev $(sbindir) + $(INSTALL) todologo $(bindir) + +install-ss: + $(INSTALL) -d $(sbindir) + $(INSTALL) -o root -g gnokii -m 4750 -s mgnokiidev $(sbindir) + $(INSTALL) todologo $(bindir) + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend + diff --git a/utils/mgnokiidev.c b/utils/mgnokiidev.c new file mode 100644 index 0000000..e6b80a9 --- /dev/null +++ b/utils/mgnokiidev.c @@ -0,0 +1,110 @@ +/* + + $Id$ + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999, 2000 Hugh Blemings & Pavel Janík ml. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Mgnokiidev gets passed a slave pty name by gnokiid and uses this + information to create a symlink from the pty to /dev/gnokii. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:23 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.7 2001/09/14 12:38:00 pkot + More cleanups + + Revision 1.6 2000/12/27 10:54:15 pkot + Added Unix98 PTYs support (Michael Mráka). + + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEVLEN 30 +#define MAXLEN 12 + +int main(int argc, char *argv[]) +{ + int count, err, aux; + char dev_name[DEVLEN]; + + /* Check we have one and only one command line argument. */ + if (argc != 2) { + fprintf(stderr, "mgnokiidev takes one and only one argument!\n"); + exit(-2); + } + + /* Check if argument has a reasonable length (less than MAXLEN characters) */ + if (strlen(argv[1]) >= MAXLEN) { + fprintf(stderr, "Argument must be less than %d characters.\n", MAXLEN); + exit (-2); + } + + strncpy(dev_name, argv[1], DEVLEN); + + /* Check for suspicious characters. */ + aux = strlen(dev_name); + for (count = 0; count < aux; count ++) + if (!(isalnum(dev_name[count]) || dev_name[count]=='/')) { + fprintf(stderr, "Suspicious character at index %d in argument.\n", count); + exit (-2); + } + + /* Now become root */ + setuid(0); + + /* Change group of slave pty to group of mgnokiidev */ + err = chown(dev_name, -1, getgid()); + + if (err < 0) { + perror("mgnokiidev - chown: "); + exit (-2); + } + + /* Change permissions to rw by group */ + err = chmod(dev_name, S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR); + + if (err < 0) { + perror("mgnokiidev - chmod: "); + exit (-2); + } + + /* FIXME: Possible bug - should check that /dev/gnokii doesn't already exist + in case multiple users are trying to run gnokii. Well, but will be + mgnokiidev called then? I do not think so - you will probably got the + message serialport in use or similar. Don't you. I haven't tested it + though. */ + + /* Remove symlink in case it already exists. Don't care if it fails. */ + unlink ("/dev/gnokii"); + + /* Create symlink */ + err = symlink(dev_name, "/dev/gnokii"); + + if (err < 0) { + perror("mgnokiidev - symlink: "); + exit (-2); + } + + /* Done */ + exit (0); +} diff --git a/utils/todologo b/utils/todologo new file mode 100644 index 0000000..df1c179 --- /dev/null +++ b/utils/todologo @@ -0,0 +1,102 @@ +#!/usr/bin/perl +# $Id$ +# +# Author: Tomi Ollila +# +# Created: Tue Oct 10 18:04:02 2000 too +# Last modified: Wed Oct 25 22:41:50 2000 too +# +# HISTORY +# $Log$ +# Revision 1.1.1.1 2001/11/25 21:59:23 short +# :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 +# +# Revision 1.1 2000/11/03 13:18:08 pavel +# +# Tomi's todologo. +# + + +$a1= " a b c dd ee ff gg h h i j k l m m nn o pp q r r ss "; +$a2= "a a bb c d d ee f g hhh i j k k l mmm n n o o p p q q rr s "; +$a3= "aaa b b c d d e ff g g hhh i j j kk l m m n n o o pp q r s "; +$a4= "a a bb c dd e f gg h h i j k k ll m m n n o p q r ss "; + +$a1 .= "ttt u u v v w w x x y y zz 333 4 55 6 777 88 9 "; +$a2 .= " t u u v v w w x y y z 3 4 4 5 6 7 88 9 9 "; +$a3 .= " t u u v v www x y z 3 444 5 6 6 7 88 9 "; +$a4 .= " t uuu v w w x x y zz 33 4 5 6 7 88 9 "; + +$a1 =~ tr/ /0/; +$a2 =~ tr/ /0/; +$a3 =~ tr/ /0/; +$a4 =~ tr/ /0/; + + +sub searchalpha +{ + $_ = $_[0]; + tr/A-Z/a-z/; + tr/210/zio/; + + $width = 1; + $aa1 = $aa2 = $aa3 = $aa4 = '0'; + + $i = index $a4, $_; return if ($i < 0); + $m = index $a3, $_; $i = $m if ($i >= 0 && $m < $i); + $m = index $a2, $_; $i = $m if ($i >= 0 && $m < $i); + $m = index $a1, $_; $i = $m if ($i >= 0 && $m < $i); + + $j = rindex $a4, $_; + $m = rindex $a3, $_; $j = $m if ($m > $j); + $m = rindex $a2, $_; $j = $m if ($m > $j); + $m = rindex $a1, $_; $j = $m if ($m > $j); + + + $width = $j - $i + 2; + + $aa1 = substr $a1, $i, $width; $aa1 =~ tr/0/1/c; + $aa2 = substr $a2, $i, $width; $aa2 =~ tr/0/1/c; + $aa3 = substr $a3, $i, $width; $aa3 =~ tr/0/1/c; + $aa4 = substr $a4, $i, $width; $aa4 =~ tr/0/1/c; +} + +@ilines = split /\s*-\s*/, "@ARGV"; + +for ($i = 0; $i < 14; $i++) +{ + $line[$i] = "0" x 72; +} + +$l = 0; +foreach (@ilines) +{ + $p = 0; + + @lc = split //, $_; + + foreach (@lc) + { + searchalpha($_); + $l1 .= $aa1; + $l2 .= $aa2; + $l3 .= $aa3; + $l4 .= $aa4; + } + + $line[$l++] = substr $l1 . "0" x 72, 0, 72; + $line[$l++] = substr $l2 . "0" x 72, 0, 72; + $line[$l++] = substr $l3 . "0" x 72, 0, 72; + $line[$l++] = substr $l4 . "0" x 72, 0, 72; + $line[$l++] = "0" x 72; + + undef $l1; undef $l2; undef $l3; undef $l4; +} + +# header is just copied from gnokii.nol. +print "NOL\000\001\000\346\000\001\000\110\000\016\000\001\000\001\000\126\000"; + +for ($i = 0; $i < 14; $i++) +{ + print "$line[$i]"; +} diff --git a/win32/Makefile b/win32/Makefile new file mode 100644 index 0000000..4c45bcc --- /dev/null +++ b/win32/Makefile @@ -0,0 +1,31 @@ + +# +# Makefile for the GNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. +# 2000 Karel Zak +# + + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +OBJS = getopt.o \ + winserial.o + +all: $(OBJS) + +clean: + $(RM) $(OBJS) *~ depend + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +install: + @echo + +ifeq (depend,$(wildcard depend)) +include depend +endif + +.PHONY: all install clean dep depend diff --git a/win32/getopt.c b/win32/getopt.c new file mode 100644 index 0000000..a5202d1 --- /dev/null +++ b/win32/getopt.c @@ -0,0 +1,755 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 1993 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef __STDC__ +# ifndef const +# define const +# endif +#endif + +/* This tells Alpha OSF/1 not to define a getopt prototype in . */ +#ifndef _NO_PROTO +#define _NO_PROTO +#endif + +#include +#include + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined (_LIBC) || !defined (__GNU_LIBRARY__) + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +#include +#endif /* GNU C library. */ + +/* If GETOPT_COMPAT is defined, `+' as well as `--' can introduce a + long-named option. Because this is not POSIX.2 compliant, it is + being phased out. */ +/* #define GETOPT_COMPAT */ + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = 0; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns EOF, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* XXX 1003.2 says this must be 1 before any call. */ +int optind = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +#define BAD_OPTION '\0' +int optopt = BAD_OPTION; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return EOF with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +#include +#define my_index strchr +#define my_strlen strlen +#else + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#if __STDC__ || defined(PROTO) +extern char *getenv(const char *name); +extern int strcmp (const char *s1, const char *s2); +extern int strncmp(const char *s1, const char *s2, int n); + +static int my_strlen(const char *s); +static char *my_index (const char *str, int chr); +#else +extern char *getenv (); +#endif + +static int +my_strlen (str) + const char *str; +{ + int n = 0; + while (*str++) + n++; + return n; +} + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +#endif /* GNU C library. */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. + + To perform the swap, we first reverse the order of all elements. So + all options now come before all non options, but they are in the + wrong order. So we put back the options and non options in original + order by reversing them again. For example: + original input: a b c -x -y + reverse all: -y -x c b a + reverse options: -x -y c b a + reverse non options: -x -y a b c +*/ + +#if __STDC__ || defined(PROTO) +static void exchange (char **argv); +#endif + +static void +exchange (argv) + char **argv; +{ + char *temp, **first, **last; + + /* Reverse all the elements [first_nonopt, optind) */ + first = &argv[first_nonopt]; + last = &argv[optind-1]; + while (first < last) { + temp = *first; *first = *last; *last = temp; first++; last--; + } + /* Put back the options in order */ + first = &argv[first_nonopt]; + first_nonopt += (optind - last_nonopt); + last = &argv[first_nonopt - 1]; + while (first < last) { + temp = *first; *first = *last; *last = temp; first++; last--; + } + + /* Put back the non options in order */ + first = &argv[first_nonopt]; + last_nonopt = optind; + last = &argv[last_nonopt-1]; + while (first < last) { + temp = *first; *first = *last; *last = temp; first++; last--; + } +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns `EOF'. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return BAD_OPTION after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return BAD_OPTION. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + int option_index; + + optarg = 0; + + /* Initialize the internal data when the first call is made. + Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + if (optind == 0) + { + first_nonopt = last_nonopt = optind = 1; + + nextchar = NULL; + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (getenv ("POSIXLY_CORRECT") != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + } + + if (nextchar == NULL || *nextchar == '\0') + { + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Now skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc + && (argv[optind][0] != '-' || argv[optind][1] == '\0') +#ifdef GETOPT_COMPAT + && (longopts == NULL + || argv[optind][0] != '+' || argv[optind][1] == '\0') +#endif /* GETOPT_COMPAT */ + ) + optind++; + last_nonopt = optind; + } + + /* Special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return EOF; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if ((argv[optind][0] != '-' || argv[optind][1] == '\0') +#ifdef GETOPT_COMPAT + && (longopts == NULL + || argv[optind][0] != '+' || argv[optind][1] == '\0') +#endif /* GETOPT_COMPAT */ + ) + { + if (ordering == REQUIRE_ORDER) + return EOF; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Start decoding its characters. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + if (longopts != NULL + && ((argv[optind][0] == '-' + && (argv[optind][1] == '-' || long_only)) +#ifdef GETOPT_COMPAT + || argv[optind][0] == '+' +#endif /* GETOPT_COMPAT */ + )) + { + const struct option *p; + char *s = nextchar; + int exact = 0; + int ambig = 0; + const struct option *pfound = NULL; + int indfound = 0; + + while (*s && *s != '=') + s++; + + /* Test all options for either exact match or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; + p++, option_index++) + if (!strncmp (p->name, nextchar, s - nextchar)) + { + if (s - nextchar == my_strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, "%s: option `%s' is ambiguous\n", + argv[0], argv[optind]); + nextchar += my_strlen (nextchar); + optind++; + return BAD_OPTION; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*s) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = s + 1; + else + { + if (opterr) + { + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + "%s: option `--%s' doesn't allow an argument\n", + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + "%s: option `%c%s' doesn't allow an argument\n", + argv[0], argv[optind - 1][0], pfound->name); + } + nextchar += my_strlen (nextchar); + return BAD_OPTION; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, "%s: option `%s' requires an argument\n", + argv[0], argv[optind - 1]); + nextchar += my_strlen (nextchar); + return optstring[0] == ':' ? ':' : BAD_OPTION; + } + } + nextchar += my_strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' +#ifdef GETOPT_COMPAT + || argv[optind][0] == '+' +#endif /* GETOPT_COMPAT */ + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, "%s: unrecognized option `--%s'\n", + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, "%s: unrecognized option `%c%s'\n", + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + return BAD_OPTION; + } + } + + /* Look at and handle the next option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { +#if 0 + if (c < 040 || c >= 0177) + fprintf (stderr, "%s: unrecognized option, character code 0%o\n", + argv[0], c); + else + fprintf (stderr, "%s: unrecognized option `-%c'\n", argv[0], c); +#else + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: illegal option -- %c\n", argv[0], c); +#endif + } + optopt = c; + return BAD_OPTION; + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = 0; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { +#if 0 + fprintf (stderr, "%s: option `-%c' requires an argument\n", + argv[0], c); +#else + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, "%s: option requires an argument -- %c\n", + argv[0], c); +#endif + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = BAD_OPTION; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +int +getopt_long (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +#endif /* _LIBC or not __GNU_LIBRARY__. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == EOF) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case BAD_OPTION: + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/win32/winserial.c b/win32/winserial.c new file mode 100644 index 0000000..6499724 --- /dev/null +++ b/win32/winserial.c @@ -0,0 +1,545 @@ +/* + * $Id$ + * + * serial interface threads for gnokii on win32 + * Based on the MS sample program 'tty.c' + * + * Roger Willcocks 16 Sept 99 + * + * compile with: + * cl -Zi -DVERSION=\"win32\" \ + * gnokii.c winserial.c fbus-6110.c getopt.c gsm-api.c fbus-6110-auth.c \ + * fbus-6110-ringtones.c gsm-networks.c cfgreader.c + * + * $Log$ + * Revision 1.1.1.1 2001/11/25 21:59:24 short + * :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + * + * Revision 1.7 2001/03/13 01:23:19 pkot + * Windows updates (Manfred Jonsson) + * + * Revision 1.6 2000/12/19 16:18:19 pkot + * configure script updates and added shared function for configfile reading + * + * + */ + +#ifdef WIN32 + +#define USECOMM // yes, we need the COMM API + +#include +#include +#include +#include +#include + +#include + +#define sleep(x) Sleep((x) * 1000) +#define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) + +#define BAUDRATE CBR_115200 + +DWORD FAR PASCAL CommWatchProc(LPSTR lpData); +DWORD FAR PASCAL KeepAliveProc(LPSTR lpData); +BOOL SetupConnection(); +#define MAXBLOCK 1024 + +//--------------------------------------------------------------------------- +// BOOL OpenConnection(char *szPort) +// +// Description: +// Opens communication port. +// It also sets the CommState and notifies the window via +// the fConnected flag. +// +// Parameters: +// - szPort - name of com port eg "com1" +// +//--------------------------------------------------------------------------- + +OVERLAPPED osWrite, osRead; +HANDLE hPhone, hThread, hKAThread; +BOOL isConnected; +DWORD ThreadID, KAThreadID; + +BOOL OpenConnection(char *szPort, sigcallback fn, keepalive ka) +{ + BOOL fRetVal; + HANDLE hCommWatchThread; + DWORD dwThreadID; + COMMTIMEOUTS CommTimeOuts; + + if ((hPhone = + CreateFile(szPort, GENERIC_READ | GENERIC_WRITE, + 0, // exclusive access + NULL, // no security attrs + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | + FILE_FLAG_OVERLAPPED, // overlapped I/O + NULL)) == (HANDLE) -1) + return (FALSE); + else { + // get any early notifications + + SetCommMask(hPhone, EV_RXCHAR); + + // setup device buffers + + SetupComm(hPhone, 4096, 4096); + + // purge any information in the buffer + + PurgeComm(hPhone, PURGE_TXABORT | PURGE_RXABORT | + PURGE_TXCLEAR | PURGE_RXCLEAR); + + // set up for overlapped I/O + + CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF; + CommTimeOuts.ReadTotalTimeoutMultiplier = 0; + CommTimeOuts.ReadTotalTimeoutConstant = 1000; +#if 0 + // CBR_9600 is approximately 1byte/ms. For our purposes, allow + // double the expected time per character for a fudge factor. + CommTimeOuts.WriteTotalTimeoutMultiplier = 2*CBR_9600/BAUDRATE; +#else + CommTimeOuts.WriteTotalTimeoutMultiplier = 10; +#endif + CommTimeOuts.WriteTotalTimeoutConstant = 0; + SetCommTimeouts(hPhone, &CommTimeOuts); + } + + fRetVal = SetupConnection(); + + if (fRetVal) { + isConnected = TRUE; + + // Create a secondary thread to issue keepAlive packets + + hKAThread = CreateThread((LPSECURITY_ATTRIBUTES) NULL, + 0, + (LPTHREAD_START_ROUTINE) KeepAliveProc, + (LPVOID) ka, + 0, &KAThreadID ); + if (!hKAThread) + { + isConnected = FALSE; + CloseHandle(hPhone); + return FALSE; + } + + // Create a secondary thread + // to watch for an event. + + hCommWatchThread = CreateThread((LPSECURITY_ATTRIBUTES) NULL, + 0, + (LPTHREAD_START_ROUTINE) CommWatchProc, + (LPVOID) fn, + 0, &dwThreadID); + if (!hCommWatchThread) + { + isConnected = FALSE; + CloseHandle(hPhone); + fRetVal = FALSE; + } + else { + ThreadID = dwThreadID; + hThread = hCommWatchThread; + + // assert DTR + + EscapeCommFunction(hPhone, SETDTR); + } + } + else { + isConnected = FALSE; + CloseHandle(hPhone); + } + + return (fRetVal); + +} // end of OpenConnection() + +//--------------------------------------------------------------------------- +// BOOL SetupConnection() +// +// Description: +// This routines sets up the DCB based on settings in the +// TTY info structure and performs a SetCommState(). +// +// Parameters: +// +//--------------------------------------------------------------------------- + +BOOL SetupConnection() +{ + BOOL fRetVal; + DCB dcb; + + dcb.DCBlength = sizeof(DCB); + + GetCommState(hPhone, &dcb); + + dcb.BaudRate = BAUDRATE; + dcb.ByteSize = 8; + dcb.Parity = NOPARITY; + dcb.StopBits = ONESTOPBIT; + + // set DTS + + dcb.fOutxDsrFlow = 0; + dcb.fDtrControl = DTR_CONTROL_ENABLE; + + // clear RTS + + dcb.fOutxCtsFlow = 0; + dcb.fRtsControl = RTS_CONTROL_DISABLE; + + // no software flow control + + dcb.fInX = dcb.fOutX = 0; + + fRetVal = SetCommState(hPhone, &dcb); + + if (fRetVal == 0) + fRetVal = GetLastError(); + + return (fRetVal); + +} // end of SetupConnection() + +//--------------------------------------------------------------------------- +// BOOL CloseConnection() +// +// Description: +// Closes the connection to the port. Resets the connect flag +// +// Parameters: +// +//--------------------------------------------------------------------------- + +BOOL CloseConnection() +{ + isConnected = FALSE; + + // block until keepalive thread terminates (should wake it really) + + WaitForSingleObject( hKAThread, INFINITE ); +#ifdef _NEVER_SAY_NEVER_AGAIN_ + while (KAThreadID != 0) + Sleep(250); +#endif + + // disable event notification and wait for thread + // to halt + + SetCommMask(hPhone, 0); + + // block until thread has been halted + + WaitForSingleObject( hThread, INFINITE ); +#ifdef _NEVER_SAY_NEVER_AGAIN_ + while(ThreadID != 0) + Sleep(250); +#endif + + // drop DTR + + EscapeCommFunction(hPhone, CLRDTR); + + // purge any outstanding reads/writes and close device handle + + PurgeComm(hPhone, PURGE_TXABORT | PURGE_RXABORT | + PURGE_TXCLEAR | PURGE_RXCLEAR); + + CloseHandle(hPhone); + return (TRUE); + +} // end of CloseConnection() + +//--------------------------------------------------------------------------- +// int ReadCommBlock(LPSTR lpszBlock, int nMaxLength) +// +// Description: +// Reads a block from the COM port and stuffs it into +// the provided buffer. +// +// Parameters: +// +// LPSTR lpszBlock +// block used for storage +// +// int nMaxLength +// max length of block to read +// +//--------------------------------------------------------------------------- + +int ReadCommBlock(LPSTR lpszBlock, int nMaxLength) +{ + BOOL fReadStat; + COMSTAT ComStat; + DWORD dwErrorFlags; + DWORD dwLength; + DWORD dwError; + + // only try to read number of bytes in queue + ClearCommError(hPhone, &dwErrorFlags, &ComStat); + dwLength = min((DWORD) nMaxLength, ComStat.cbInQue); + + if (dwLength > 0) { + fReadStat = ReadFile(hPhone, lpszBlock, + dwLength, &dwLength, &osRead); + if (!fReadStat) { + if (GetLastError() == ERROR_IO_PENDING) { + fprintf(stderr, "\n\rIO Pending"); + // We have to wait for read to complete. + // This function will timeout according to the + // CommTimeOuts.ReadTotalTimeoutConstant variable + // Every time it times out, check for port errors + while(!GetOverlappedResult(hPhone, + &osRead, &dwLength, TRUE)) { + dwError = GetLastError(); + if(dwError == ERROR_IO_INCOMPLETE) + // normal result if not finished + continue; + else { + // an error occurred, try to recover + fprintf(stderr, "", dwError); + ClearCommError(hPhone, &dwErrorFlags, &ComStat); + if (dwErrorFlags > 0) + fprintf(stderr, "", dwErrorFlags); + break; + } + + } + + } + else { + // some other error occurred + dwLength = 0; + ClearCommError(hPhone, &dwErrorFlags, &ComStat); + if (dwErrorFlags > 0) + fprintf(stderr, "", dwErrorFlags); + } + } + } + + return (dwLength); + +} // end of ReadCommBlock() + +//--------------------------------------------------------------------------- +// BOOL WriteCommBlock(BYTE *pByte, DWORD dwBytesToWrite) +// +// Description: +// Writes a block of data to the COM port specified in the associated +// TTY info structure. +// +// Parameters: +// +// BYTE *pByte +// pointer to data to write to port +// +//--------------------------------------------------------------------------- + +BOOL WriteCommBlock(LPSTR lpByte , DWORD dwBytesToWrite) +{ + + BOOL fWriteStat; + DWORD dwBytesWritten; + DWORD dwErrorFlags; + DWORD dwError; + DWORD dwBytesSent=0; + COMSTAT ComStat; + + fWriteStat = WriteFile(hPhone, lpByte, dwBytesToWrite, + &dwBytesWritten, &osWrite); + + // Note that normally the code will not execute the following + // because the driver caches write operations. Small I/O requests + // (up to several thousand bytes) will normally be accepted + // immediately and WriteFile will return true even though an + // overlapped operation was specified + + if (!fWriteStat) { + if(GetLastError() == ERROR_IO_PENDING) { + // We should wait for the completion of the write operation + // so we know if it worked or not + + // This is only one way to do this. It might be beneficial to + // place the write operation in a separate thread + // so that blocking on completion will not negatively + // affect the responsiveness of the UI + + // If the write takes too long to complete, this + // function will timeout according to the + // CommTimeOuts.WriteTotalTimeoutMultiplier variable. + // This code logs the timeout but does not retry + // the write. + + while(!GetOverlappedResult(hPhone, + &osWrite, &dwBytesWritten, TRUE)) { + dwError = GetLastError(); + if(dwError == ERROR_IO_INCOMPLETE) + { + // normal result if not finished + dwBytesSent += dwBytesWritten; + continue; + } + else { + // an error occurred, try to recover + fprintf(stderr, "", dwError); + ClearCommError(hPhone, &dwErrorFlags, &ComStat); + if (dwErrorFlags > 0) + fprintf(stderr, "", dwErrorFlags); + break; + } + } + + dwBytesSent += dwBytesWritten; +#if 0 + if(dwBytesSent != dwBytesToWrite) + fprintf(stderr, "\nProbable Write Timeout: Total of %ld bytes sent (%ld)", dwBytesSent, dwBytesToWrite); + else + fprintf(stderr, "\n%ld bytes written", dwBytesSent); +#endif + } + else { + // some other error occurred + ClearCommError(hPhone, &dwErrorFlags, &ComStat); + if (dwErrorFlags > 0) + fprintf(stderr, "", dwErrorFlags); + return (FALSE); + } + } + return (TRUE); + +} // end of WriteCommBlock() + + +//************************************************************************ +// DWORD FAR PASCAL CommWatchProc(LPSTR lpData) +// +// Description: +// A secondary thread that will watch for COMM events. +// +// Parameters: +// LPSTR lpData +// 32-bit pointer argument +// +//************************************************************************ + +DWORD FAR PASCAL CommWatchProc(LPSTR lpData) +{ + DWORD dwEvtMask; + OVERLAPPED os; + int nLength; + BYTE abIn[ MAXBLOCK + 1]; + + sigcallback fn = (sigcallback)lpData; + + memset(&os, 0, sizeof(OVERLAPPED)); + + // create I/O event used for overlapped read + + os.hEvent = CreateEvent(NULL, // no security + TRUE, // explicit reset req + FALSE, // initial event reset + NULL); // no name + if (os.hEvent == NULL) + return (FALSE); + + if (!SetCommMask(hPhone, EV_RXCHAR)) + return (FALSE); + + while (isConnected) { + dwEvtMask = 0; + + WaitCommEvent(hPhone, &dwEvtMask, NULL); + + if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR) { + do { + if ((nLength = ReadCommBlock((LPSTR) abIn, MAXBLOCK))) { + int i; + + for (i = 0; i < nLength; i++) + (*fn)(abIn[i]); + } + } + while (nLength > 0); + } + } + + // get rid of event handle + + CloseHandle(os.hEvent); + + // clear information in structure (kind of a "we're done flag") + + ThreadID = 0; + hThread = NULL; + + return(TRUE); + +} // end of CommWatchProc() + + +DWORD FAR PASCAL KeepAliveProc(LPSTR lpData) +{ + keepalive ka = (keepalive)lpData; + while (isConnected) + (*ka)(); + KAThreadID = 0; + return 0; +} + +//--------------------------------------------------------------------------- +// void device_changespeed() +// +// Description: +// This routines sets up the DCB based on settings in the +// TTY info structure and performs a SetCommState(). +// +// Parameters: +// +//--------------------------------------------------------------------------- + +void device_changespeed(int speed) +{ + BOOL fRetVal; + DCB dcb; + + dcb.DCBlength = sizeof(DCB); + + GetCommState(hPhone, &dcb); + + dcb.BaudRate = speed; + fRetVal = SetCommState(hPhone, &dcb); + + if (fRetVal == 0) + fRetVal = GetLastError(); + + return; + +} // end of device_changespeed(int speed) + +//--------------------------------------------------------------------------- +// void device_setdtrrts() +// +// Description: +// This routines sets up the DCB based on settings in the +// TTY info structure and performs a SetCommState(). +// +// Parameters: +// +//--------------------------------------------------------------------------- + +void device_setdtrrts(int dtr, int rts) +{ + /* FIXME Oops not implemented */ + return; +} + +#endif +/* end */ diff --git a/xgnokii/ChangeLog b/xgnokii/ChangeLog new file mode 100644 index 0000000..c1a92b7 --- /dev/null +++ b/xgnokii/ChangeLog @@ -0,0 +1,244 @@ +* Thu 22 Mar 2001 Jan Derfinak +- Added 6210 preview to xlogos module. + +* Sat 03 Mar 2001 Jan Derfinak +- Pavel Machek's patch for finegrained indicators. + +* Fri 02 Feb 2001 Jan Derfinak +- New dialoges for 6210/7110 in contacts window. + +* Sat 13 Jan 2001 Jan Derfinak +- Patch from Pavel Machek . It provides better feedback to user, + puts GPL into copyright (it belongs there), and fixes docs. +- Corrected non translatable labels/sentenses in xgnokii.c. + Hans Motshärg + +* Sun 19 Dec 2000 Jan Derfinak +- Functions for detecting phone's capabilites moved to common directory. + +* Sat Jul 15 13:18:12 CEST 2000 Jan Derfinak Jan Derfinak +- Patch from Christopher Kemp to enable data mode in + xgnokii. + +* Sun Jul 02 19:02:39 CEST 2000 Jan Derfinak +- Deleting calendar notes work. +- Initialization timeout shorted from 15 secs to 10 secs. + +* Sun Jun 18 03:18:27 CEST 2000 Jan Derfinak +- User configurable maximum length of names in contacts on SIM and phone. + +* Sat Jun 16 22:35:24 CEST 2000 Jan Derfinak +- New pixmap in calendar window from Marcel Koeppen + +* Tue Jun 13 01:58:56 CEST 2000 Jan Derfinak +- Initialization timeout was extended from 5 secs to 15 secs. +- Corrected algorithm for SMS reading. Now we can read all SMS on SIM card. +- Changed date/time in delivery report from send date to delivery date. + +* Mon Jun 12 16:33:45 CEST 2000 Jan Derfinak +- xlogos integrated into xgnokii (Robert Vojta ) +- Little progress in calendar window. +- Cleaning code for compiling under Solaris 8 with new gcc. +- Small changes and fixes. + +* Wed May 24 16:50:07 CEST 2000 Jan Derfinak +- Changed structure in help directory. (Polish help don't work now.) + +* Sun May 21 22:33:19 CEST 2000 Jan Derfinak +- New English online help. <(Marcin Wiacek + ) +- Added notes viewer in Calendar window. +- Added function which get and show notes in phone. + +* Wed May 17 17:51:07 CEST 2000 Jan Derfinak +- New install procedure for online documetation. (Brad Guillory + ) +- Small progress in Calendar window. + +* Tue May 16 11:24:08 CEST 2000 Jan Derfinak +- Okay, okay you are better in ice hockey. +- Why did you removed slovak messages? You cannot translate them? :) +- New skin for 5110 in keyboard window (Marcin Wiacek + ) +- Corrected initialization of some static variables. +- Progress in Calendar window design. + +* Mon May 15 19:15:04 CEST 2000 Pavel Janik ml. +- removed references to malloc.h, it is deprecated. We now use stdlib.h. + +* Sun May 14 21:17:06 CEST 2000 Pavel Janik ml. +- Hey, we really won the World Championship in ice hockey again! +- Fixed some minor language stuff. + +* Sat May 13 20:46:26 CEST 2000 Pavel Janik ml. +- slovak debug messages removed :-) +- Hey, we will beat you tomorrow in ice hockey! + +* Fri May 12 01:14:48 CEST 2000 Jan Derfinak +- Callers groups are readed only once. +- Added info dialog when reading SMS centers. +- New online help from Marcin Wiacek in English + and Polish language. Language version depends on locale settings (LANG, + LC_MESSAGES or LC_ALL) + +* Mon May 1 21:16:35 CEST 2000 Jan Derfinak +- added new thread to xgnokii. This thread glue slow phone interface with + quick user interface (GUI). +- new backgroung for xgnokii. "Business Cards" is replaced with "Calendar". + (Petr Vostrel ) +- Initial support for Calendar. +- added online help for netmonitor from Marcin Wiacek + . +- added info dialog. +- added support for showing outgoing call. +- added support for translation menus into national languages. +- corrected xkeyb map for 6150 (Jochen Schnapka ) +- added detection for MNT phones (Andrew Kozin ) +- more minor fixes. + +* Thu Mar 20 12:06:47 CET 2000 Jan Derfinak +xgnokii-20000320 +- corrected if clause for support Callers groups and Netmonitor. +- removed option for memory type change, if phone support only SIM memory. +- xkeyb integrated into xgnokii. + +* Thu Mar 16 15:45:39 CET 2000 Jan Derfinak +xgnokii-20000316 +- File CHANGES renamed to ChangeLog +- Changed URL to Marcin Wi1cek nokia pages in xgnokii help. +- xgnokii automatically recognizes phone and disable/enable supported + features (in 38xx serie is better to say "automagically") +- Caller groups names are loaded from phone (I have not know that GetBitmap + do this.) User can change CGN and save it to phone. +- Range checking for battery level added. +Changes in SMS window: +- Support for sending long SMS. User can choose, if he want only split SMS + in many SMS or if he uses Long SMS format. +- Fixed bug in sorting in SMS's list. + + +xgnokii-19991228 +- Speed Dial settings are possible view and edit. +Changes in SMS window: +- minor bugfixes +- Bussiness Card sending work. But we cannot read received bussiness card! + + +xgnokii-19991216 +Changes in Contacts window: +- Dial voice function let you to type arbitrary number. +- Minor bugfixes in configuration refreshing stuff. +Changes in SMS window: +- SMS sending work! New SMS dialog look as if is possible to send long SMS + but this is only illusion. For now GSM->SendSMSMessage accept only first + 160 characters. +- New pixmaps. + + +xgnokii-19991207 +- replaced 'getenv ("{HOME,HOMEDRIVE,HOMEPATH}")' with 'g_get_home_dir ()', + which is (I hope) more portable under MS Windows. +- added incoming call notification with stop watch. +Changes in SMS window: +- corrected GSList handling. (xgnogii have catch sigseg or end in + endless loop when SMS's number in phone had changed.) +- added delete SMS functionality. +- added sorting in SMS's list. + + +xgnokii-19991130 +- Added DTMF window. +- Added execution of html viewer as help viewer. We need to write nice help + pages. :) +Changes in Options window: +- We can read name, number, format and validity period of SMS centers + from phone and also we can edit and save them to phone. +Changes in SMS window: +- Source completely rewriten. New design. Inbox and outbox in tree + hierarchy. If you have initialized contacts in xgnokii, xgnokii is trying + to resolve numbers to names. Messages are shown in viewer space. + + +xgnokii-19991116 +- Added Net monitor. I thank Andreas Schmidt for idea + about graphical representation of Net monitor data. I thank also Norbert + Hüttisch (nobbi@nobbi.com) for his great web pages about Nokia Net Monitor. + + +xgnokii-19991110 +- Added support for gettext() and messages catalogs. +- Added Win32 support. (Acquadro Daniele ) +Changes in Contacts window: +- Fixed bug when Save to phone haven't work in the case we just import + contacts from file and haven't read they from phone before. +- Fixed bug when empty contacts in phone have been not cleared when we have + import contacts from file and then we have save they into phone. + + +xgnokii-19991010 +Changes in Options window: +- Added User information edit window (needed for Business Card). +- Added SMS settings windows. Xgnokii can only read SMS centers numbers from + phone. I can't read SMS set name, SMS format and Validity period from phone. + I can't also write any SMS setting in phone. And I don't know differencies + between SMS formats. :( +- Added Groups names edit window. I can change group names in xgnokii. But + I can't read or write group names from/to phone because I don't have support + in gnokii. +- Added Alarm window. Xgnokii can read alarm from phone and set alarm in + phone. It can't unset alarm because lack support in gnokii. +Changes in Contacts window: +- Added Voice dial function. +- Allowed sort order changing by clicking on titles. +- Removed bug, when contacts in SIM card were not removed from phone, when + deleted in xgnokii. + + +xgnokii-19990915 +Changes in Contacts window: +- Fixed scrolling. +- Fixed SIGSEG error due uninitialized variable. + +xgnokii-19990914 +- Fixed error in FB61_GetMemoryStatus. (FB61_GetMemoryStatus had ignore all + error status except GE_TIMEOUT. This break Contacts memory reading for + phone with only SIM memory.) + I think that Contacts memory reading is working also in 38xx series, but I + can't test it. +Changes in Contacts window: +- Export to file is working. +- Import from file is working. Xgnokii uses extended format from NCDS (with + group entry) and is capable reading NCDS files. +- More icons. + + +xgnokii-19990906 +Changes in Contacts window: +- Duplicate is working. +- Delete accept multiple selection. +- 'Change memory type' is working and accept multiple selection. +- 'Select all' is working. +- Find and 'Find next' is working. +- Caller groups are working in xgnokii, but in GSM->WritePhonebookLocation + function is something wrong and it don't save caller group to phone. +- New toolbar and xgnokii use some new pixmaps from Robert Vojta. +Changes in SMS window: +- We can get SMS's from phone. (Andri Saar ) + + +xgnokii-19990824 +Changes in Contacts window: +- Read/Save from/to phone is working. +- New, Delete, Edit is working. +- Export to file simply dump memory to standart output. +- Import, Duplicate, 'Change memory type', 'Sellect all' is not working. + + +xgnokii-19990816 +- My first release of xgnokii. +- Simple options menu. +- Application skeleton and some code cleanup. +- Base for contacts window. + +Jan Derfinak \ No newline at end of file diff --git a/xgnokii/Makefile b/xgnokii/Makefile new file mode 100644 index 0000000..92f7cea --- /dev/null +++ b/xgnokii/Makefile @@ -0,0 +1,188 @@ + + +# +# $Id$ +# +# Makefile for the xGNOKII tool suite. +# +# Copyright (C) 1999 Hugh Blemings & Pavel Janík ml. & Jan Derfinak +# 2000 Karel Zak +# + +TOPDIR=.. +include $(TOPDIR)/Makefile.global + +ifdef XPM_LIBS + LDFLAGS += $(XPM_LIBS) + CFLAGS += $(XPM_CFLAGS) +endif + +CFLAGS += $(PTHREAD_CFLAGS) \ + $(GTK_CFLAGS) + +LDFLAGS += $(PTHREAD_LIBS) \ + $(GTK_LIBS) + +LDFLAGS += -L$(TOPDIR) -lgnokii + +OBJS = xgnokii.o \ + xgnokii_common.o \ + xgnokii_contacts.o \ + xgnokii_sms.o \ + xgnokii_netmon.o \ + xgnokii_dtmf.o \ + xgnokii_cfg.o \ + xgnokii_speed.o \ + xgnokii_xkeyb.o \ + xgnokii_calendar.o \ + xgnokii_logos.o \ + xgnokii_lowlevel.o \ + xgnokii_data.o + +HELP_DIR = docs/help + + +all: xgnokii + + +xgnokii: $(OBJS) $(TOPDIR)/common/data/DATA.o $(TOPDIR)/common/gsm-filetypes.o + +$(TOPDIR)/common/data/DATA.o: + $(MAKE) -C $(TOPDIR)/common/data DATA.o + +$(TOPDIR)/common/gsm-filetypes.o: + $(MAKE) -C $(TOPDIR)/common gsm-filetypes.o + +clean: + $(RM) $(OBJS) *~ xpm/*~ depend xgnokii + +install: all + $(INSTALL) -d $(xbindir) + $(INSTALL) xgnokii $(xbindir) + $(INSTALL) -d $(xgnokii_libdir)/help + ( cd $(HELP_DIR); \ + $(FIND) . -type d \! -path "*CVS*" \ + -exec $(INSTALL) -d $(xgnokii_libdir)/help/{} \; ; \ + $(FIND) . -type f \! -path "*CVS*" \ + -exec $(INSTALL) -m 0444 {} $(xgnokii_libdir)/help/{} \; \ + ) + $(INSTALL) -m 0444 ../Docs/CREDITS $(xgnokii_libdir)/help/en_US + $(INSTALL) -m 0444 ../COPYING $(xgnokii_libdir)/help/en_US + $(INSTALL) -d $(xgnokii_libdir)/help/en_US/sample + $(INSTALL) -m 0444 ../Docs/sample/gnokiirc $(xgnokii_libdir)/help/en_US/sample + (cd $(xgnokii_libdir)/help; ln -sf en_US C; ln -sf en_US POSIX) + $(INSTALL) -d $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_3310.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_3210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6250.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_7110.xpm $(xgnokii_libdir)/xpm + +install-strip: all + $(INSTALL) -d $(xbindir) + $(INSTALL) -s xgnokii $(xbindir) + $(INSTALL) -d $(xgnokii_libdir)/help + ( cd $(HELP_DIR); \ + $(FIND) . -type d \! -path "*CVS*" \ + -exec $(INSTALL) -d $(xgnokii_libdir)/help/{} \; ; \ + $(FIND) . -type f \! -path "*CVS*" \ + -exec $(INSTALL) -m 0444 {} $(xgnokii_libdir)/help/{} \; \ + ) + $(INSTALL) -m 0444 ../Docs/CREDITS $(xgnokii_libdir)/help/en_US + $(INSTALL) -m 0444 ../COPYING $(xgnokii_libdir)/help/en_US + $(INSTALL) -d $(xgnokii_libdir)/help/en_US/sample + $(INSTALL) -m 0444 ../Docs/sample/gnokiirc $(xgnokii_libdir)/help/en_US/sample + (cd $(xgnokii_libdir)/help; ln -sf en_US C; ln -sf en_US POSIX) + $(INSTALL) -d $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_3310.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_3210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_6250.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -m 0444 xpm/Preview_7110.xpm $(xgnokii_libdir)/xpm + @echo "done" + +install-suid: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -d $(xbindir) + $(INSTALL) -o root -g gnokii -m 0750 xgnokii $(xbindir) + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help + ( cd $(HELP_DIR); \ + $(FIND) . -type d \! -path "*CVS*" \ + -exec $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help/{} \; ; \ + $(FIND) . -type f \! -path "*CVS*" \ + -exec $(INSTALL) -o root -g gnokii -m 0440 {} $(xgnokii_libdir)/help/{} \; \ + ) + $(INSTALL) -o root -g gnokii -m 0440 ../Docs/CREDITS $(xgnokii_libdir)/help/en_US + $(INSTALL) -o root -g gnokii -m 0440 ../COPYING $(xgnokii_libdir)/help/en_US + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help/en_US/sample + $(INSTALL) -o root -g gnokii -m 0440 ../Docs/sample/gnokiirc $(xgnokii_libdir)/help/en_US/sample + (cd $(xgnokii_libdir)/help; ln -sf en_US C; ln -sf en_US POSIX) + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_3310.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_3210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6250.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_7110.xpm $(xgnokii_libdir)/xpm + @echo + +install-ss: all + @if [ -z "/bin/grep -e '^gnokii:' /etc/group" ]; then \ + /usr/sbin/groupadd gnokii; \ + fi + $(INSTALL) -o root -g gnokii -d $(xbindir) + $(INSTALL) -o root -g gnokii -m 0750 -s xgnokii $(xbindir) + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help + ( cd $(HELP_DIR); \ + $(FIND) . -type d \! -path "*CVS*" \ + -exec $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help/{} \; ; \ + $(FIND) . -type f \! -path "*CVS*" \ + -exec $(INSTALL) -o root -g gnokii -m 0440 {} $(xgnokii_libdir)/help/{} \; \ + ) + $(INSTALL) -o root -g gnokii -m 0440 ../Docs/CREDITS $(xgnokii_libdir)/help/en_US + $(INSTALL) -o root -g gnokii -m 0440 ../COPYING $(xgnokii_libdir)/help/en_US + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/help/en_US/sample + $(INSTALL) -o root -g gnokii -m 0440 ../Docs/sample/gnokiirc $(xgnokii_libdir)/help/en_US/sample + (cd $(xgnokii_libdir)/help; ln -sf en_US C; ln -sf en_US POSIX) + $(INSTALL) -o root -g gnokii -d -m 0750 $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6150.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_3310.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_5110.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_3210.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_6250.xpm $(xgnokii_libdir)/xpm + $(INSTALL) -o root -g gnokii -m 0440 xpm/Preview_7110.xpm $(xgnokii_libdir)/xpm + @echo + +depend dep: + $(CC) $(CFLAGS) -MM *.c >depend + +ifeq (depend,$(wildcard depend)) +include depend +endif + + +.PHONY: all install clean dep depend diff --git a/xgnokii/README.vcard b/xgnokii/README.vcard new file mode 100644 index 0000000..63abf79 --- /dev/null +++ b/xgnokii/README.vcard @@ -0,0 +1,12 @@ +Vcard support in xgnokii. + +Xgnokii is capable to save contatcs in vcard format (Thanks to Pavel Machek +). If you want to save contacts in vcard format you must in +export dialog write file name with .vcard or .gcrd extension. + + Jan Derfinak + +If you want to know more about vcard format, read rfc2426. You can use +gnomecard utility to process .gcrd files. + + Pavel Machek diff --git a/xgnokii/VERSION b/xgnokii/VERSION new file mode 100644 index 0000000..36b474b --- /dev/null +++ b/xgnokii/VERSION @@ -0,0 +1 @@ +20010323 \ No newline at end of file diff --git a/xgnokii/docs/help/en_US/cables/cables.html b/xgnokii/docs/help/en_US/cables/cables.html new file mode 100644 index 0000000..119f27f --- /dev/null +++ b/xgnokii/docs/help/en_US/cables/cables.html @@ -0,0 +1,25 @@ + + + + + Cables FAQ + + + + + +

Main page

+
Cables FAQ
+ +


+ +

How to make cable for our phones + their connectors... + +

How to configure gnokii for cable connection ?
+


+ +

See file describing configuration of gnokii + + + + diff --git a/xgnokii/docs/help/en_US/config.html b/xgnokii/docs/help/en_US/config.html new file mode 100644 index 0000000..074f4a5 --- /dev/null +++ b/xgnokii/docs/help/en_US/config.html @@ -0,0 +1,180 @@ + + + + + Configuration + + + + + +

Main page

+
Configuration
+ +


+ +

How to install it from the source ?
+


+ +

gnokii makes use of autoconf/automake which allows you to configure +the source tree for your system by typing + +

./configure + +

You can also run configure with the --help flag to get a list of +available options. There are about a dozen or so that are specific +to gnokii. + +

Once you've run ./configure successfully, you should be able to +simply do a make and make install to compile and install your +binaries respectively. + +

make + +

make install + +

With this done you've built and installed your binaries, and +should proceed to the configuration section below. + +

How to install it from binaries ?
+


+ +

If you downloaded gnokii as a pre-built binary you should install +it in the conventional manner for the package type in question. +For example if you downloaded a .rpm file you can install it by +running the following as root. + +

rpm -i gnokii-0.3.2-i386.rpm + +

If you are using a Debian based system, you can use dpackage +to do the installation (FIXME - is this correct ?) + +

How to make connection with phone ?
+


+ +

There are three ways to make it: + +

    +
  • connecting phone with computer using cable. All phones allow to make it +(even 3210 - connector is inside). If you want to know more +about creating your own cable, read cables faq.
  • +
  • using IrDa port in phone and computer. Notice, that your computer +and phone must have it (only some series of Nokia phones has it - for example, +6110, 6150)
  • +
  • connecting to phone special device called "dongle" (it has IrDa port) +and making IrDa connection between it and phone. Current gnokii cas use +Tekram IRmate 210 - see patches
  • +
+ +

How to configure gnokii ?
+


+ +

You could copy the sample/gnokiirc +file from the Docs/en_US/samples directory to your +home directory and name it .gnokiirc or copy it into /etc directory +and name .gnokiirc. + +

Using your favorite +editor ensure that the settings are correct for your system, +the sample file has details of the various options available. The most +difficult problem could be discovering model of your phone - go into +our firmware page +and try to use codes written in column +Firmware version code. If your phone will display something, +see model number on the third line, look on the +firmware page +again (for it) and read phone model then. + +

Note that you will need read/write permissions on whatever +serial port you specify in .gnokiirc. You can now use gnokii +and xgnokii. + +

How to configure infrared connection ?
+


+ +

+

    + +
  • Go into configuration of your IrDa port (the most often it's made in +BIOS, sometimes using program provided by computer's producer): + +

    +

      +
    • Enable it
    • +
    • Setup the COM-Port on which it should work. +Here are addresses: +
      ttyS0 (COM1): 3F8, IRQ: 4 +
      ttyS1 (COM2): 2F8, IRQ: 3 +
      ttyS2 (COM3): 3E8, IRQ: 4 +
      ttyS3 (COM4): 2E8, IRQ: 3 +
        +
    • +
    +
  • + +
  • Configure gnokii (see previous question) +setting type of connection to +infrared.
  • + +
  • If you are using linux, put linux-irda off (you can't use gnokii over infrared and +linux-irda at the same time - it means too, if you want use +linux-irda you must close all gnokii-applications what +use the infrared-port in moment). +
  • +
+ +

How to configure gnokii driver for data connection ?
+


+ +

After installing and configuring gnokii you should make another group +and allow mgnokiidev to use it. For example (if you have installed gnokii +into /usr/local): + +

+groupadd gnokii
+chown root:gnokii /usr/local/sbin/mgnokiidev
+chmod 4750 /usr/local/sbin/mgnokiidev
+ +

Then connect your phone to your PC and then run gnokiid: + +

# gnokiid + +

If successful, you should see a message saying that mgnokiidev has been +run to create /dev/gnokii. If you're using a 5110/6110 series phone +you should hear a beep and see an "accessory connected" message on +the phone. If you're using a 3810 series phone you won't see anything +on the phones LCD. + +

[I run gnokiid as root; it will probably work for another user who is +in group gnokii, as long as the serial port is accessible to that +user as well. It's not recommended that you run gnokiid as root +permanently however!] + +

Use /dev/gnokii as a modem: + +

e.g. ppp session
+--------------- /etc/ppp/peers/demon-gnokii ---------------------
+/dev/gnokii 115200
+modem crtscts defaultroute
+connect 'chat -v ABORT BUSY ABORT ERROR ABORT "NO CARRIER" "" AT OK-AT-OK ATD02083389666 CONNECT'
+user XXXX.demon.co.uk
+noauth
+mtu 296
+debug
+----------------------------------------------------------------
+--------------- /etc/ppp/pap-secrets ---------------------------
+XXXX.demon.co.uk demon-gnokii
+----------------------------------------------------------------
+
+ +

Then "pppd call demon-gnokii" should connect +
('tail -f /var/log/messages' to see what is happening) + +

If a call terminates you should get 'NO CARRIER' and gnokiid should +continue to work, but this is early code and you may find you have to +Ctrl-C and restart gnokiid (especially if the phone says the terminal +connection has been lost) + + + + diff --git a/xgnokii/docs/help/en_US/faq.html b/xgnokii/docs/help/en_US/faq.html new file mode 100644 index 0000000..1c9a110 --- /dev/null +++ b/xgnokii/docs/help/en_US/faq.html @@ -0,0 +1,371 @@ + + + + + GNOKII FAQ + + + + + +

Main page

+
GNOKII FAQ
+ +


+ +

What is gnokii ?
+


+ +

Generally, what is gnokii (G from GNU, NOKII from Nokia) ? + +

It is a name of project. The aim of it is to develop tools and drivers +for Nokia mobile phones. Of course, I think in this moment about really +different tools - for example, modem drivers, console tools, etc. +All created here software is released under the GNU +General Public License. Please see COPYING +for more details on license/copying issues, +the lack of warranty and where to send a postcard if you like gnokii :). +Anyway, our software works on many software (Linux, Free BSD, etc.) +and hardware (Intel, etc.) platforms... + +

What software applications are created in gnokii project ?
+


+ +
    + +
  • +The first application, gnokii, is a command line utility that was +originally provided to assist developers and interested users in +working with the low level API functions that were being developed. + +

    From these rather humble beginnings, it has evolved into a the main +command line tool of the suite. Many people now use it for +reading/writing phone book entries, sending and receiving SMS messages +etc. Ultimately it is intended that it will become a utility that +communicates with gnokiid to provide a command line interface to +the functionality provided by the gnokiid daemon. +
      +

  • + +
  • +The second application provided is xgnokii which as the name suggests +is a X-windows based application that provides a graphical interface +to your phone. Amongst other things, xgnokii allows you to read and +write phone book entries, read, write and send SMS messages, monitor +battery and received signal strength. + +

    At present xgnokii works directly with the phone, however in the +future it will more likely use the "side" interface of gnokiid. + +

    The main author of it is Jan Derfinak +
      +

  • + +
  • +The third part of the suite is gnokiid. gnokiid provides a +virtual modem interface, /dev/gnokii that looks like a regular +Hayes-AT compatible modem with the ETSI defined extensions for +GSM phones. What this means in practical terms is that you can +treat the /dev/gnokii device like an ordinary modem and use it +to make data calls from pppd or a terminal application like +minicom. +
      +
  • + +
  • +gnokiid is still under development, it's ultimate aim being to +act as a "master" daemon that interfaces with your phone on one +side and gnokii or xgnokii on the other. This "side" code is still +under discussion, particularly with respect to the most appropriate +choice of communication method (IPC, TCP/IP etc.) +
      +
  • + +
  • +The last application provided with the suite is mgnokiidev which is +used by gnokiid to create on demand a symbolic link between +/dev/gnokii and the pseudo tty used by gnokiid for the virtual +modem interface. It's operation is transparent under normal +usage as gnokiid takes care of calling it when required. +
  • + +
+ +

This project also inspired some people to write other software for Nokia. +For example: + +

    +
  • +There is a perlmodule available for gnokii. It gives access to all +the routines that are defined in gsm-common.h from a perl-program. It +is intended for application developers who want to use their favorite +language in interfacing the phone data with databases, ldap-directories +and (in the future) different calendar applications. It is written by +Konstantin Agouros +and support starts with revision 0.2.6-pre3 of gnokii. + +

    The homepage of this module is +http://www.agouros.de/gnokii + +

  • +
+

Which phones are supported ?
+


+ +

You can also ask, what phones are supported ? All, you want :-) Really ! + +

At first, we were making in gnokii project modules +for Nokia 3810/8110 and 51x0/61x0 phones. Later users started to +write parts for other Nokia phones. And we hope to extend it to another +models: 7110, etc. Remember: it's even possible to write modules +for other than Nokia phones +too (just imagine: support for the most popular phones in one software !)... + +

In this moment we have modules for: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Designed forWorks withPeople, who are responsible ;-) for it (you can ask them, send update, report bug)
Nokia 6110Nokia 6110, 6130, 6150, 6190, 5110, 5130, 5190, 3310, 3210 +Pavel Janik, +Chris Kemp (logos support) +
Nokia 3810Nokia 3110, 3810, 8110, 8110i +Hugh Blemings +
Nokia 640Nokia 640 +Andrew Kozin +
Nokia 6160Nokia 5160, 6160 +
Nokia 2110Nokia 2110, 6080 +Pavel Machek +
Nokia 7110Nokia 7110, 6210 +Chris Kemp +
+ +

If you want really uptodate information, look at +common/misc.c. You can find which phone supports what in source. + +

You can also look into +registered gnokii users database +too see used by them phones... + +

What is compatibility with hardware ?
+


+ +

Generally, gnokii can work with all computers, which have serial port +(over cable). + +

If you want to use infrared, sometimes are small problems, because some +IrDa connectors are not compatible with some standards... + +

How can I get support for it ?
+


+ +

We our only people and we sometimes make mistakes. But don't worry: +support for gnokii is really great. At first, you can tell your problem +to all gnokii users (in May 2000 on the list there were subscribed about +1000 people). + +

The most often it's enough. If not, contact with authors: + +

When problem is connected with module for concrete phone, write to people +listed in answer for question Which phones are supported ?. +For other parts: Jan Derfinak +is responsible for xgnokii. + +

How to contact with gnokii users ?
+


+ +

Thanks to the efforts of +Martin Hamilton we have a Majordomo based mailing +list gnokii@net.lut.ac.uk. + +

You can subscribe by sending email to +gnokii-request@net.lut.ac.uk with the word subscribe in the body of the text. + +

+Note that the list is not a forum for discussion on how to obtain copies of +Nokia's proprietary software. +It is the primary discussion forum for the project. + +

Archive of the list + +

Does Nokia sponsors/supports this work ?
+


+ +

In the early stages of the project there were indications that +Nokia would provide some support for the project. Regrettably, these +negotiations stalled over the issue of binary versus open source +releases and the project has proceeded without official or unofficial +assistance. + +

How can I help with creating it ?
+


+ +

There are some things, you can do you gnokii: + +

    +
  • Tell us that you're interested, or that you would use the resulting +software or that you would be happy to test it out. + +

    The best method to make it is to adding yourself to the user database +at http://gnokii.org/users. +
      +

  • + +
  • +Give your input in discussions about the design and development of the suite +now that we are at that stage. In particular the best model of driver +interface will need to be discussed broadly to get the best result. +We've only had limited driver writing experience so if you've more, let us know! +
      +
  • + +
  • +Help examining the protocol and its differences between phone models. +
      +
  • + +
  • +Port the software to a new platform. Please tell us before you do so to ensure +that the port will integrate nicely into the source code tree. +
      +
  • + +
  • +Help us in writing our software or preparing help into it. +
  • +
+ +

Where to get latest versions ?
+


+ +

The source of gnokii aplications is in the CVS server. We want +to thank to Andrew Tridgell and the Samba team for it. +The server's address is pserver.samba.org. If you +are already familiar with CVS, set the CVSROOT to + +

:pserver:cvs@pserver.samba.org:/cvsroot + +

and use the password cvs for checking out the repository with the name +gnokii. + +

If you are not familiar with cvs, don't worry. It's very simple. +Just install the cvs package for your distribution and follow these steps: + +

    +
  • set your environmental variable CVSROOT. If you have bash (Bourne +Again Shell): + +

    export CVSROOT=:pserver:cvs@pserver.samba.org:/cvsroot + +

    If you have different shell, use different command (e.g. setenv). + +

      +

  • + +
  • Log in to the CVS server as anonymous reader by typing + +

    cvs login + +

    Use 'cvs' as your password. + +

      +

  • + +
  • If you are logged in you are ready to checkout the latest sources: + +

    cvs co gnokii +

  • +
+ +

If you prefer, there is a WWW interface to the CVS server at +http://samba.org/cgi-bin/cvsweb/gnokii/. + +

Now you are on your own - you have the current sources on your disk +in the directory gnokii. If you are going to make substantial changes +and feel that they should be included into gnokii please mention it +on the list first to avoid duplicated effort. + +

If you would like to receive email when updates are made to the CVS +repository, just send email to +Hugh Blemings email to that effect +and you'll be added to the recipients list. + +

Our thanks go to the Czech Linux Users Group for hosting the original +CVS repository at cvs.linux.cz. + +

Another way to get almost latest (x)gnokii tools is to download it from +pages of authors: + +

+ +

Remember: it's still work in progress. It means, that we very often change it, +add new functions and correct our bugs (sometimes once a day :-))... So, +it's good to check it often... + + + + diff --git a/xgnokii/docs/help/en_US/firmware/firmware.html b/xgnokii/docs/help/en_US/firmware/firmware.html new file mode 100644 index 0000000..d8fe35b --- /dev/null +++ b/xgnokii/docs/help/en_US/firmware/firmware.html @@ -0,0 +1,1206 @@ + + + + + + + + + Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia + + + + +

+ +
+


Nokia identification & firmware/Identyfikacja +i oprogramowanie telefonów Nokia

+ +

On this page you can find information about model numbers for Nokia +phones, codes to see their firmware versions, different firmware revisions +and changes among them (I think, it will help to answer, if firmware upgrade +for your phone will give you something and correct some bugs). Additionaly +I want to put here TAC numbers (first 6 digits of IMEI) given for various +Nokia phones (if I will have them, I will be able to tell you your phone +model from its IMEI). +

Na tej stronie znajdziesz informacje o oznaczeniach Nokii, kodach pozwalaj±cych +sprawdziæ ich wersje oprogramowania, jakie s± wersje ich oprogramowania +i czym siê ró¿ni± (mam nadziejê, ¿e pomo¿e to odpowiedzieæ, czy upgrade +oprogramowania w Twoim telefonie da co¶ i czy np. poprawi jakie¶ dokuczliwe +b³êdy). Równocze¶nie chcia³bym tutaj umie¶ciæ numery TAC (pierwsze 6 cyfr +IMEI) nadawane ró¿nym modelom (je¿eli je bêdê mia³, bêdê móg³ podaæ model +telefonu wy³±cznie na podstawie jego IMEI). +

If you want to add or correct something to this list, please write +me (for example, when you changed firmware in your phone and noticed +some changes, inform me about them and write, what is phone model, old +and new firmware version). +

Je¿eli masz co¶ dodania do tej listy albo znalaz³e¶(a¶) na niej b³êdy, +proszê do mnie napisaæ w tej +sprawie (przyk³adowo: je¿eli wymieni³e¶ oprogramowanie w swoim telefonie +i zauwa¿y³e¶ jakie¶ zmiany, napisz mi o nich podaj±c równie¿ model telefonu, +star± i now± wersjê oprogramowania). +
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Phone (telefon)Model number (Oznaczenie)Firmware version code (kod do sprawdzania wersji oprogramowania)TAC in IMEI (TAC w IMEI)
100THX-9L
540THF-11
550THF-10*#9999#
V1.04 09-06-97
640THF-13
650THF-12
1011NHE-2
1610NHE-5*#170602112302#
V3.92 17-03-96 +
V4.12 30-05-96 +
V5.02 26-06-96 +

(V4.12) SMS sending added. +
(V4.12) Dodane wysy³anie SMS. +

V5.15 25-02-97

1611NHE-5SX
V5.02 26-06-96 +

Some firmware versions display full network names. +
Niektóre wersje oprogramowania wy¶wietlaj± pe³ne nazwy sieci.

1630NHE-5NA*#170602112302#
1631NHE-5SA
2010NHE-3*#9999#
2110NHE-1XN*#9999#
Vm4.95 02-07-96 +
V5.56 03-12-96
2110i, 2110e for GSM 900NHE-4*#170602112302#
V5.11 27-09-95 +
V5.62 05-05-97
2110i, 2110e for GSM 900NHE-4NX*#682371158412125#490130
V5.49 09-10-96 +
V5.70 15-11-97
2110i, 2110e for GSM 1800NHK-IEA*#682371158412125#
2140NHK-1XA
Vm4.92 01-06-95
2148NHK-1
2148iNHK-4
2160NHC-4NE
3110NHE-8*#3110#490165, 490184 (Finland)
V6.52 15-05-97 +
V7.11 24-09-97 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

By pressing C during a call which then changes the NaviKey's function +to Options that include putting the call on hold, address book, sending +DTMF and ending the Call (it can be activated via a settting menu item +"In Call functions"). +
Przez naci¶niêcie klawisza C w czasie rozmowy oznaczenie NaviKey zmienia +siê na "Opcje" daj±c dostêp do  menu zawieraj±cego ró¿ne opcje przydatne +podczas rozmowy (mo¿e byæ ono w³±czane przy pomocy opcji "Funkcje równoleg³e" +w menu). +

The hold function is complemented by a new Menu function "call waiting +service". +
Funkcja zawieszenia po³±czenia jest obecna w postaci nowej pozycji +menu ("Us³uga po³±czeñ oczekuj±c."). +

The leaflet also indicates that the volume of all ringing tones have +been raised. +
Zwiêkszono g³o¶no¶æ wszystkich dzwonków. +

The option to add a number directly from the dialled/received/missed +calls to the phonebook - When a number in those registers is highlighted +and is not in the phonebook already, the Navikey displays "Options" which +include save and dial. +
Dodano opcjê zapisu numeru do ksi±¿ki telefonicznej z menu z wybieranymi/odebranymi +i nieodebranymi po³±czeniami - je¿eli nie ma jakiego w ksi±¿ce, oznaczenie +Navikey zmienia siê na "Options", które pozwala w³a¶nie na zapis (i dzwonienie). +

A "fast silent mode" (like in 8110) - press Menu and #. +
Szybkie przej¶cie do cichego trybu (jak w Nokii 8110) - wystarczy nacisn±æ +Menu +i #. +

Any answer key function removed. +
Usuniêto funkcjê odbioru jednym klawiszem. +

V7.72 18-12-97 +

Support for vibra battery - added menu in option. +
Obs³uga baterii wibracyjnych - odpowiednia opcja w menu. +

Added "Cell Info Display" and "Broadcast Messages" options in menu. +
Dodana obs³uga cell info i cell broadcast (pozycje "Informacje o sieciach" +i "Wiadomo¶ci sieciowe" w menu) +

V7.73 30-01-98 +
V8.11 27-02-98 +

I know, that in this and older (never probably too) firmware, when you're +in menu and press (c) key, phone leaves menu (it doesn't go to one level +higher) +
Na pewno w tym i starszych (nowszych prawdopodobnie te¿) wersjach oprogramowania, +je¿eli u¿ytkownik jest w menu i naci¶nie klawisz (c), opu¶ci ca³kowicie +menu (a nie przejdzie do jednego poziomu wy¿ej). +

V8.30 16-04-98 +
V8.32 21-09-98 +
V8.50 20-10-98 +
+


+
B£¡D (nie wiem, czy z równie¿ z najnowszym oprogramowaniem): nie mo¿na +do³adowaæ karty SIM+ (zadzwoniæ pod 5555) po wyczerpaniu limitu do 0 PLN.
3210NSE-8/9*#0000#448903 (Finland), 449142, 499149 (Germany)
V3.00 07-06-99 +
V3.01 10-06-99 +
V3.10 17-06-99 +
V4.02 20-07-99 +
V4.43 14-09-99 +
V4.65 07-10-99 +
V5.01 26-11-99 +

(V4.02) With connected headset the light turn on all time (previously +not always). +
(V4.02) Przy pod³±czaniu zestawu s³uchawkowego zawsze zapala siê pod¶wietlenie +(poprzednio nie zawsze). +

Added Menu 3-8 ("Prepaid credit"). +
Dodane Menu 3-8 ("Op³acony kredyt"). Nie dzia³a z SIM+. +

V5.10 21-01-00 +

Changes in parts connected with charging battery. +
Zmiany w czê¶ci odpowiedzialnej za ³adowanie baterii. +
+


+
B£¡D: Po wybraniu czasu 12-godzinnego i jêzyka polskiego w godzinach +popo³udniowych w menu ustawiaj±cym zegarek pojawia siê godzina, "po po³." +(po po³udniu) i ró¿ne dziwne znaczki... +

BUG: Test 45 in NetMonitor and parameter +ChCur in test 23 don't work correctly. +
B£¡D: Test 45 w monitorze sieci i +parametr ChCur w te¶cie 23 nie dzia³aj± +poprawnie.

3810NHE-9*#3810#
V6.20 21-03-97 +
V6.32 06-06-97
5110NSE-1*#0000#490520, 490542, 490546, 490547 (Germany), 490550
V4.51 26-03-98 +
V4.59 01-06-98 +

Phone goes crazy if you scroll the received SMS with 160 dots. +
Telefon wariuje przy przewijaniu odebranego SMSa zawieraj±cego 160 +kropek. +

Phone clears "Headset" text from display after disconnecting HF. +
Telefon kasuje napis "Mikrozestaw" z wy¶wietlacza po od³±czeniu zestawu +s³uchawkowego. +

Half Rate codes (#HRC0# and *HRC0#) +don't work - to enable this channel you have to use WinTesla or other software +
Nie dzia³aj± kody do obs³ugi Half Rate +(#HRC0# i *HRC0#) - do w³±czenia tego kana³u trzeba u¿yæ +np. WinTesli albo innego oprogramowania +

V5.04 14-09-98 +

**04*pin*pin*pin# code doesn't work +
Kod **04*pin*pin*pin# nie dzia³a +

Added test 89 in NetMonitor. +
Dodano test 89 w monitorze sieci. +

4 lines with parameters in test 2 in NetMonitor +(earlier there were 2 only there). +
4 linijki z parametrami w te¶cie 2 monitora +sieci (wcze¶niej by³y tam tylko dwie). +

Added *#sim0clock# code +
Dodano kod *#sim0clock# +

V5.07 20-11-98 +

New 'Text version' parameter in test 89 +of NetMonitor +
Nowy parametr 'Text version' w te¶cie +89 monitora sieci +

CCCH channel always used, when network +doesn't support cell broadcasting (in V5.04 CBCH +channel was used with enabled "Info service"or "Cell info display" +options) +
U¿ywany jest zawsze kana³ CCCH, gdy +sieæ nie obs³uguje nadawania komórkowego (w wersji 5.04 u¿ywany by³ kana³ +CBCH po w³±czeniu opcji "Info service" albo "Cell info display") +

When you set "Incoming call alert" to "Ascending" and "Ringing volume" +to higher volume than 2, phone correctly changes volume from volume 1 to +set (previously it changed it only one level) +
Przy ustawieniu "Sygna³ nadej¶cia po³±czenia" na "Rosn±co" i "G³o¶no¶æ +dzwonka" na wiêcej ni¿ poziom 2, telefon poprawnie zmienia g³o¶no¶æ od +poziomu 1 do ustawionego (wcze¶niej zmienia³ j± tylko o jeden poziom) +

LAC and CID in test 11 in NetMonitor +are in decimal format. +
LAC i CID w te¶cie 11 monitora sieci +s± podawane dziesiêtnie. +

V5.11 18-02-99 +
V5.20 03-06-99 +
V5.22 01-07-99 +
V5.24 03-09-99 +

Ringtones names changed: from "Polka" to "Polska", from "Knock knock" +to "Knock again", from "Tango" to "Tangoed", from 'Lamb' to 'Marry' +
Zmiany nazw dzwonków: "Polka" na "Polska", "Knock knock" na "Knock +again", 'Tango" na 'Tangoed", 'Lamb' na 'Marry' +
+


+
B£¡D: Niedok³adne t³umaczenie w Menu 1-7-2 i Menu 1-4-1 +

OTHER: This phone has working clock with date and interesting thing +is, that you can't set date from menu (you have to use gnokii) +
INNE: Telefon ma poprawnie dzia³aj±cy zegar z dat±, przy czym daty +nie mo¿na ustawiæ z menu (ale np. przy pomocy gnokii) +
+


+
V5.27 +

Added code *#7760# for displaying Production Serial Number. +
Dodano kod *#7760# do pokazywania numeru seryjnego.

5130NSK-1*#0000#495503, 495508, 495509
V3.08 03-04-98 +
V4.11 12-06-98 +
V5.00 01-09-98 +
V5.30 23-04-99 +
V5.51 03-08-99 +
V5.60 14-10-99
5160NSW-1
V3.47 15-07-99
5190NSB-1*#5190#
V3.41 07-02-98 +
V4.01 22-10-98 +
V5.01 02-11-98 +

V5.24 +

NetMonitor in Menu 11 (in older firmware +in Menu 10). +
Monitor sieci w Menu 11 (w starszych +wersjach w Menu 10). +

V5.81 20-09-99

6050NME-1
6080NME-2*#0000#
6081NME-2E*#0000#
6110NSE-3*#0000#490518, 490523, 490526, 490527, 490545
V3.11 14-11-97 +
V3.14 28-11-97 +

First shipping version of the software. +
Pierwsza wersja oprogramowania w sprzedawanych telefonach. +

V4.05 07-01-98 +
V4.06 16-01-98 +
V4.33 11-03-98  +

Improves the reception quality. +
Poprawiona jako¶æ odbioru. +

SMS message alert volume now linked to ringing volume. +
G³o¶no¶æ sygna³u SMS po³±czona z g³o¶no¶ci± dzwonka. +

Minor changes in Profiles menu. +
Niewielkie zmiany w menu profili. +

'Long & Loud' SMS alert is now called 'Ascending' +
D¼wiêk dzwonka SMS 'Long & Loud' zmieniony na 'Ascending' +

'Warning Tones' is now 'Warning and Games Tones' +
'Warning Tones' zmienione na 'Warning and Games Tones' +

The 'No Service' areas between cells seem to have disappeared.When the +phone does go 'No Service', it will very quickly log onto a new cell, usually +within a few seconds. +
Telefon szybciej siê loguje do nowej komórki po odzyskaniu zasiêgu. +

The desktop charger now works correctly when the phone is inserted with +the battery connected. +
£adowarka biurkowa pracuje poprawnie, gdy pod³±czany jest do niej telefon +z w³o¿on± bateri±. +

BUG: Nokia Cellular Data Suite 1.2 (NCDS) infra red function has now +gone intermittent. This has been confirmed this by using a V3.14 phone +which works perfectly with the installed version of the NCDS. Basically +if I connect the phone using the RS232 cable the NCDS works fine. If you +then disconnect and re-connect using IR, also no problem. If you then disconnect +and re-connect a 2nd time using IR you get no connection. The IR symbol +on the phone flashes, then goes static, then flashes again. +
B£¡D: Po³±czenie przez podczerwieñ z NCDS 1.2 nie dzia³a dobrze (podczas +gdy w telefonem z oprogramowaniem 3.14 nie ma problemów), natomiast po³±czenie +kablem ci±gle funkcjonuje bez zarzutu. Je¿eli od³±czysz i po³±czysz ponownie +podczerwieñ, nie ma problemu. Je¿eli próbujesz natomiast jeszcze raz, problem +siê pojawia. Symbol podczerwieni w telefonie mruga, pó¼niej wy¶wietla siê +na sta³e i znów mruga. +

V4.73 22-04-98 +

(V4.06) Correct call counters (Received+Dialled calls=All calls) +
(V4.06) Poprawne liczenie d³ugo¶ci po³±czeñ (Odbierane+Wykonywane po³±czenia=Wszystkie) +

IR-Software improved +
Poprawnione oprogramowanie do obs³ugi IR +

Charger recognition improved. +
Poprawiono rozpoznawanie ³adowarek. +

Headset features improved. +
Poprawiono obs³ugê zestawu s³uchawkowego. +

Same standard SMS alert as 8110i. +
Niektóre d¼wiêki SMSów jak w Nokii 8110i. +

Better energy saving functions. +
Lepsze funkcje oszczêdzania energii. +

Better conference call features. +
Poprawiono obs³ugê po³±czeñ konferencyjnych. +

Better SMS status report. +
Lepsze raporty SMS. +

Display of saving status (phone or SIM). +
Wy¶wietlanie statusu zapisu (telefon albo karta SIM). +

HFU-2 improved. +
Poprawiona obs³uga zestawu samochodowego HFU-2. +

Better charging with standard, car charger and "cold" battery. +
Lepsze ³adowanie ze standardow± albo samochodow± ³adowark± i zimn± +bateri±. +

Faster network connection. +
Szybsze po³±czenie z sieci±. +

Safer network connection at a low signal strength. +
Bezpieczniejsze po³±czenia z sieci± na obszarach o s³abym sygnale. +

Longer single ringtone with vibra pack. +
D³u¿szy sygna³ d¼wiêkowy przy u¿ywaniu baterii wibracyjnej. +

Corrected the problem of the battery indicator bar flickering between +one and two bars with a Li-ion battery. +
Poprawiono problem ze wska¼nikiem poziomu na³adowania baterii (wcze¶niej +przy baterii Li-ion miga³ pomiêdzy jedn± i dwoma kreskami) +

No more changing Half Rate settings via +keypad. +
Nie dzia³aj± kody do aktywacji/deaktywacji kana³ów Half +Rate z klawiatury. +

Improved audio quality when using the EFR +Speech Codec. +
Lepsza jako¶æ d¼wiêku przy u¿ywaniu EFR. +

Reception of CCH blocks after cell reselection in weak field has been +improved. +
Poprawiono odbiór bloków CCH po powtórnym wyborze komórki na obaszrach +o s³abym sygnale. +

Improved the maintenance charging when using the ACP-7 charger. +
Poprawione ³adowanie podtrzymuj±ce z ³adowark± ACP-7. +

More frequent battery low warning beeps added during a call made with +a Li-ion battery. +
Czêstsze ostrze¿enia o wy³adowaniu baterii przy po³±czeniu i baterii +Li-ion. +

Improved SMS storage time handling. If the user has not selected a storage +time, the phone uses the maximum storage time set by the network. +
Je¿eli uzytkownik nie wybra³ czasu wa¿no¶ci SMSa (przy wysy³aniu), +telefon przyjmuje maksymaln± warto¶æ przyjmowan± przez sieæ. +

Improved recovery of SIM card in error situations. +

Fixed bug in SMS editing screen where the cursor is one character to +far right. +
Poprawiono b³±d przy edycji SMSów w sytuacji gdy kursor jest odleg³y +jeden znak od prawej strony. +

V5.00 28-05-98 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.22 18-08-98 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.24 14-09-98 +

Implemented code *#sim0clock# which shows whether the SIM card +inserted supports clock stopping. +
Dodano kod *#sim0clock# do sprawdzania, czy zegar karty SIM +mo¿e byæ zatrzymany. +

Headset detection improved. +
Poprawione wykrywanie zestawu s³uchawkowego. +

Performance in weak signal area improved. +
Poprawiono czu³o¶æ przy s³abym sygnale sieci. +

Improvements to short message handling. +

Tone levels tuned (distinct difference now between levels 5 and 4). +
Zmieniono poziomy dzwonków (wyczuwalna ró¿nica miêdzy poziomem 4 i +5). +

(V4.73) Different energy consumption in test +23 of NetMonitor. +
(V4.73) Inne zu¿ycie energii w te¶cie +23 monitora sieci. +

V5.30 23-12-98  +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.31 18-02-99 +

Added Menu 4-3-6 ("Active line"), which allows to select active +line on SIM card (ALS function) +
Dodano Menu 4-3-6, które pozwala wybraæ numer na karcie SIM +(funkcja ALS) +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.47 01-07-99 +
V5.48 09-08-99 +

New ringing tones. +
Nowe dzwonki.

6120NSC-3*#6120#
V1.18 01-07-99
6130NSK-3*#9999#
V3.26 10-02-98 +
V3.28 24-02-98 +
V4.11 10-06-98 +
V5.00 08-09-98 +

(V4.11) NetMonitor in Menu 11 (in +older firmware in Menu 10). +
(V4.11) Monitor sieci w Menu 11 (w +starszych wersjach w Menu 10). +

V5.60 14-10-99

6138NSK-3
6150NSM-1*#0000#493002, 493006 (Germany)
V3.02 08-07-98 +
V3.06 10-08-98 +
V4.01 23-09-98 +
V4.02 01-10-98 +
V4.11 05-11-98 +
V4.12 02-12-98 +

Added corect recognizing phase 2+ SIM cards. +
Dodano poprawne rozpoznawania karty SIM fazy 2+ GSM. +

V4.13 16-12-98 +

BUG: Calling Menu 10-3 causes the phone to hang and you will +have to remove the battery. +
B£¡D: Wywo³anie Menu 10-3 zawiesza telefon (pomaga dopiero wypiêcie +baterii). +

V4.14 18-12-98 +
V5.02 02-02-99 +
V5.16 22-06-99 +

(V4.13) NetMonitor in Menu 12 (in +older firmware in Menu 11). +
(V4.13) Monitor sieci w Menu 12 (w +starszych wersjach w Menu 11). +

V5.17 01-07-99 +
V5.20 20-09-99 +

NetMonitor in Menu 13 (in older firmware +in Menu 12). +
Monitor sieci w Menu 13 (w starszych +wersjach w Menu 12). +

V5.22 10-11-99 +

(V4.13) Added Menu 4-4-6 ("Confirm SIM service actions") with +Menu +4-4-6-1 ("Asked") and 4-4-6-2 ("Not asked") options. +
(V4.13) Dodane Menu 4-4-6 ("Powiadomienia o zmianach") z Menu +4-4-6-1 ("Widaæ") i 4-4-6-2 ("Nie widaæ"). +

(V4.13) Added Menu 4-5-2 ("Call barring service") with Menu +4-5-2-1 ("Outgoing calls"), 4-5-2-2 ("International calls"), +4-5-2-3 +("International except to home country"), 4-5-2-4 ("Incoming calls"), +4-5-2-5 +("Incoming calls if abroad") and 4-5-2-6 ("Cancel all barrings") +options +
(V4.13) Dodane Menu 4-5-2 ("Us³uga zakazu po³±czeñ") z Menu +4-5-2-1 ("Po³±czenia wychodz±ce"), 4-5-2-2 ("Po³±czenia miêdzynarodowe"), +4-5-2-3 +("Za granicê, oprócz do w³asnego kraju"), 4-5-2-4 ("Po³±czenia przychodz±ce"), +4-5-2-5 +("Po³±czenia odbierane za granic±") i 4-5-2-6 ("Anuluj wszystkie +zakazy") +

(V4.13) "Fixed dialing" moved to Menu 4-5-3 (earlier in Menu +4-5-2) +
(V4.13) "Wybieranie ustalone" przeniesione do Menu 4-5-3 (wcze¶niej +w Menu 4-5-2) +

(V4.13) "Closed user group" moved to Menu 4-5-4 (earlier in Menu +4-5-3) +
(V4.13) "Grupa zamkniêta" przeniesiona do Menu 4-5-4 (wcze¶niej +w Menu 4-5-3) +

(V4.13) "Security level" moved to Menu 4-5-5 (earlier in Menu +4-5-4) +
(V4.13) "Poziom zabezpieczeñ" przeniesiony do Menu 4-5-5 (wcze¶niej +w Menu 4-5-4) +

(V4.13) "Change access codes" moved to Menu  4-5-6 (earlier +in Menu 4-5-5) +
(V4.13) "Zmieñ kody dostêpu" przeniesione do Menu  4-5-6 +(wcze¶niej w Menu 4-5-5) +

(V4.13) Added Menu 4-5-6-4 ("Change barring password") +
(V4.13) Dodane Menu 4-5-6-4 ("Zmieñ has³o zakazu") +

Production Serial Number String added (*#7760# code) +
Dodano kod *#7760# do pokazywania numeru seryjnego. +

Calendar birthday reminder, related to the last day of February on non-leap-years, +will now be set to right day +
Notaki w kalendarzu dotycz±ce urodzin odnosz±ce siê ostatniego dnia +Lutego w latach nieprzestêpnych jest teraz ustawiany we w³a¶ciwym dniu. +

Improvement to character conversion. Earlier blank display was shown +when UCS2 type (e.g. Greek characters) of SMS was received. +
Poprawiono konwersjê znaków. Wcze¶niej pokazywany by³ pusty ekran, +gdy SMS typu UCS2 (np.ze znakami greckimi) zosta³ odebrany. +

Multiple multi-page Cell Broadcast reception improved. +
Poprawiono odbiór wielostronicowych po³±czonych komunikatów nadawanaia +komórkowego. +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +
 

6160/6162NSW-3*#9999#
V1.12 01-02-99 +
V3.01 09-07-99
6185/6188NSD-3AX*#837#
V430SD3a2.nef 05-18-99 +
V441SD3a3.nef 11-12-99
6190NSB-3*#6190#
V5.24 +

NetMonitor in Menu 11 (in older firmware +in Menu 10). +
Monitor sieci w Menu 11 (w starszych +wersjach w Menu 10). +

V5.30 +

Support for caller groups logos. +
Wsparcie dla log grupy. +

V5.53 +

Custom ringtones and the Startup logo are all now uploadable to the +phone directly using a data cable. +
W³asne dzwonki i loga startowe mog± byæ teraz bezpo¶rednio wgrywane +do telefonu przez kabel. +

The max volume is slightler louder than previous  +
Maksymalna g³o¶no¶æ jest teraz wiêksza. +

Added Menu 4-3-7 (Notifications on SIM update) +
Dodano Menu 4-3-7. +

V5.83 17-09-99 +

Added support for operator logo (uploading via cable or general support) +
Dodano obs³ugê loga operatora (mo¿liwo¶æ +wgrywania przez kabel albo ogóln± obs³ugê)

7110NSE-5*#0000#448895
V4.67 28-09-99 +
V4.69 05-10-99 +
V4.70 28-10-99 +
V4.72 10-11-99 +
V4.73 15-11-99 +
V4.75 23-11-99 +
V4.76 13-01-00 +

(V4.73) Improvement to Manual Network selection search +
(V4.73) Poprawiono wyszukiwanie sieci przy rêcznym ich wyborze +

(V4.73) Improvements to CLI Graphics: +
(V4.73) Poprawki nastêpuj±cych b³êdów: +

    +
  • +CLI group tone can't be changed
  • + +
    D¼wiêk nie mo¿e byæ zmieniony w grupach osób +
      +
  • +Can't make call by pressing "send" key in CLI member list
  • + +
    Nie mo¿na zadzwoniæ przez naci¶niêcie "wy¶lij" w menu grupy osób cz³onkowie +
      +
  • +"End" key doesn't work right in Caller Group General Note
  • + +
    Klawisz "Koniec" nie dzia³a poprawnie w ogólnych notatkach grupy osób +dzwoni±cych +
      +
  • +Phone reset when there are two or more active downloaded ringing tones +in Caller groups
  • + +
    Telefon siê resetuje, gdy s± dwa albo wiêcej wgranych przez u¿ytkownika +dzwonków w grupach osób dzwoni±cych +
      +
  • +CLI group tones list problems
  • + +
    Problemy z list± dzwonków grupy (pozycje s± przesuniête - po wybraniu +jakiego¶ telefon faktycznie ustawia kolejny na li¶cie)
+(V4.73) The Euro character can now be sent by SMS +
(V4.73) Symbol Euro mo¿e byæ teraz wys³any w wiadomo¶ci SMS +

(V4.73) The Call Waiting functionality in the car kit is now improved +concerning radio mute +
(V4.73) Poprawiono funkcjê po³±czeñ oczekuj±cych w zestawie samochodowym +

(V4.73) Dialled numbers removed in Roller menu. +
(V4.73) Wybierane numery zosta³y usuniête z Roller menu. +

(V4.73) The user is now able to insert a phone number into a SMS message +by searching the phonebook for the number. +
(V4.73) U¿ytkownik mo¿e teraz wstawiæ numer telefonu do wiadomo¶ci +SMS przez znalezienie go w ksi±¿ce telefonicznej. +

(V4.73) Improvement of Calendar using am/pm clock +
(V4.73) Poprawki w kalendarzu przy u¿ywaniu 12-godzinnego formatu czasu +

(V4.73) Improvement of speed dial function when same name is assigned +to speed dial twice +
(V4.73) Poprawki w funkcji szybkiego dzwonienia, gdy ta sama pozycja +jest przypisana do dwóch klawiszy szybkiego wyboru. +

V4.77 25-01-00 +
V4.84 07-04-00 +
+


+
BUG: Test 45 in NetMonitor doesn't +work correctly. +
B£¡D: Test 45 w monitorze sieci nie +dzia³a poprawnie. +
 
8110NHE-6, NHE-6BX*#8110#490137
V4.25 09-09-96 +
V4.36 23-10-96 +
V6.01 27-02-98
8110iNHE-6, NHE-6BM*#8110#
V24.11 09-09-97 +
V25.20 16-10-98
8146NHK-6*#170602112302#
8148 NHK-6*#8110#
8148iNHK-6V
V3.10 09-12-97
8210NSM-3
V5.08 16-11-99
8810NSE-6*#0000#
V4.03 10-08-98 +
V4.05 26-11-98 +
V5.00 29-09-99
8850NSM-2*#0000#448901
V5.08 17-11-99 +
V5.11 09-12-99
Communicator 9000RAE-1*#682371158412125#
V4.01 15-09-97 +
V4.55 04-02-97
Communicator 9000iRAE-4*#682371158412125#
V6.34 16-09-97 +
V6.51 02-02-98
Communicator 9110RAE-2*#0000#
V3.07 17-01-99 +
V5.02 28-08-99
Card Phone 1.0RPE-1
+ +

I na koniec jedna ciekawostka: w niektórych modelach, kiedy ustawisz +sygna³ wiadomo¶ci SMS na "Narastaj±cy", telefon bêdzie wygrywa³ komunikat +"Connecting people" alfabetem Morse'a. +
And on the end one interesting thing: in some models, when you set +SMS message tone to "Ascending" ('Long & Loud' with older firmware), +phone plays "Connecting people" with Morse alphabet. +

Niektóre u¿yte materia³y pochodz± ze stron: +
Some used materials are from WWW pages: +

    +
  1. +http://www.ozemail.com.au/~graemec/51106110/6110frequent.htm
  2. + +
  3. +http://www.webit.com/tw/nokia.shtml
  4. + +
  5. +http://vzone.virgin.net/neil.hobbs/Nokia/Phone.htm
  6. + +
  7. +http://home.wanadoo.nl/nokiainfo/firmware_revisions.html
  8. + +
  9. +http://www.worldofcellularsecrets.com/free.htm
  10. + +
  11. +http://www.telephone.ru/faq/nokia6100/
  12. + +
  13. +http://gsm.erc.bc.ca/553software.html
  14. + +
  15. +http://www.users.bigpond.com/Scotth/
  16. +
+Back to the top/Na pocz±tek +

+


+
Marcin +Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000/Last modification: +4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/index.html b/xgnokii/docs/help/en_US/index.html new file mode 100644 index 0000000..25709d4 --- /dev/null +++ b/xgnokii/docs/help/en_US/index.html @@ -0,0 +1,39 @@ + + + + + GNOKII/XGNOKII HELP + + + + + 
+GNOKII/XGNOKII HELP + +

Welcome in our help system. + +

If you didn't see gnokii before - the most often asked questions about it... +
FAQ + +

If you want to install or configure our software... +
Installing, configuration and making data calls + +

To know more about xgnokii windows... (these need to be written) +
Main window +
Calendar window +
Contacts window +
DTMF window +
Netmonitor window +
SMS window +
Speed Dial window +
Keyboard window + +

If you want to know something more about Nokia mobile phones... +
Bugs and changes in firmware of phones +
Netmonitor manual +
How to make cable +
How to make IrDa port + + + + diff --git a/xgnokii/docs/help/en_US/irda/irda.html b/xgnokii/docs/help/en_US/irda/irda.html new file mode 100644 index 0000000..f6274bc --- /dev/null +++ b/xgnokii/docs/help/en_US/irda/irda.html @@ -0,0 +1,25 @@ + + + + + IrDA FAQ + + + + + +

Main page

+
IRDA FAQ
+ +


+ +

How to make iRda port for computer... + +

How to configure gnokii for IrDa connection ?
+


+ +

See file describing configuration of gnokii + + + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net0.html b/xgnokii/docs/help/en_US/netmon/faq_net0.html new file mode 100644 index 0000000..7b2eab6 --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net0.html @@ -0,0 +1,593 @@ + + + + + + + + + + NetMonitor in Nokia phones (1/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (1/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ +

I'd like to write, that I'm not professionally connected with any +cellular network or phone company. This NetMonitor guide is based on many +different materials and exists thanks to the support of many different people (see +Information sources). This is a guide made by user. It may lack description +to some functions or contain errors and mistakes (resulting from wrong translation or my ignorance) and some strange +expressions. Many questions remain unanswered. Furthermore, this page is still "under construction". Encouraging, isn't it? +But that's the (sad) true: Nokia doesn't make appropriate materials available... +I can only assure you, that I do my best to make this NetMonitor description as reliable and complete as possible. + +

In this moment on my homepage you can also find Polish version of this FAQ. +English language version was created with help of Michal Jerz - author of +excellent page Nokia 9110 World: http://n9k.ats.pl. + +

+I'll be very thankful for any help in creating and maintaining this guide - please +send +me any information (or URLs where I can find it), suggestions and remarks. My FAQ currently concerns +Nokia 2120, 2160, 3110, 3210, 5110, 5130, 5190, 6110, 6130, 6150, 6160, 6185/6188, 7110 and 9110 +series of phones. If you have NetMonitor enabled in any other model +(for example in 2110i, 8xxx, 9000), please contact me +(to let me know about the differences and possible new tests). + + +

+Herewith I inform, that I don't bear any responsibility for any damages and other consequences caused by applying following +information (you use it on your own responsibility) ! + + +


+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

1. What is it ?
+


+ +

Net Monitor is just a special mode, which - when activated - shows different information about the network and about +phone modules, SIM card, etc. After activation your phone will usually display a new, additional menu containing +strange and constantly changing letters and digits. There are no standards here - each phone shows different data +and there are different methods of activation (my description concerns NetMonitor mode in Nokia phones - if you have some +other phone, you have to go somewhere else). I can even say, that NetMonitor (in some form) can be found in practically +each present mobile phone (because it is unprofitable for the producers to make two separate software versions - +with and without NetMonitor). Here you can find some URLs to the pages describing activation and/or individual +NetMonitor menus in other phones: + +

+

+ +

Other types: try searching on the links page +www.mobilserver.com/Phone_info/. + + +

Back to the top + + +

2. Do I need it ?
+


+ +

"Normal" users surely don't need any NetMonitor, because simply most of the data included there can be of +any interest and use only for specialists (who can find out almost everything about the network). You also can: + +

+

    +
  • feel better and be able to brag that your phone has such a BBIIIIIGGGGGG choice of different options
  • +
  • observe different network and phone parameters (I tried to explain their meaning in my description) and find out +how cellular network works
  • +
  • affect some functions in your phone and sometimes make your life easier (using these new options) - +I did my best to point at many useful NetMonitor applications
  • +
+ +

If you still think, that you don't need it, read other pages concerning Nokia phones. + + +

Back to the top + + +

3. Does my phone use more power with NetMonitor enabled ?
+


+ +

I'd say: NO. Each phone monitors the network even when there is no NetMonitor menu active. + +

But why some users say, that they have to charge their batteries more often after enabling NetMonitor? It is easy to explain: +they frequently switch from one test to another (some people cannot stop ;-) and do it habitually) and the phone after each +key press (by default) turns on the light (and uses much power - see Menu 10-23). +This can be partially cured by using Menu 10-18. Additionally, +some tests (for example +Menu 10-17 or Menu 10-19) can put +your phone in a state of constant network searching (which drains the battery). + +

To recap, NetMonitor activation itself doesn't affect power consumption. It can be only changed by some conscious +user operations... + + +

Back to the top + + +

4. How to activate it ?
+


+ +

You can do it in three ways: + +

+

    +
  1. by connecting your phone to the computer with a cable (in 3210 it has to be connected inside the casing) and using +appropriate software (RECOMMENDED !) working in: + +

    +

    + +

    All above programs work with majority of Nokia phones with letter "S" in middle of codename +(for example, 5110, 5130, 5190, 6110, 6130, 6150, 3210 series). With Nokia 7110 (NSE-5) over DAU-9P cable +(from Nokia 5xxx/6xxx series phones) +worked Pc-Locals only (it was rather problem with cable, but who know)... In Nokia 9110 (RAE-2) NetMonitor can be enabled +with all above programs working with MBUS cable - Logo Manager, Pc-Locals or +Nokia Wrench. + +

    + + + + + + +
    When you want to check codename of your phone, try to use one of these codes: +*#0000#, *#9999#, *#3110#, *#3810#, *#5190#, +*#6190#, *#8110#, *#837#, *#170602112302# or +*#682371158412125# (for more information about phone identification click +here). +If phone will display something, codename will be written in 3'rd line of screen (it will be something like NSE-1).
    +

    + +

  2. by direct changing the contents of EEPROM +(Electrically Erasable and Programmable Read-Only Memory). +This method requires opening your phone and leaves visible traces inside it. +I DON'T RECOMMEND THIS METHOD! +But if you want to do it: + +

    +

    +

    +

  3. + +
  4. +using special menu, which allow to programm NAM code (in some analog phones only +- like Nokia 2160, 2120, 6160, 6185 and 6188): +

    +

      +
    • use *3001#12345# code (sometimes pressing additionaly Menu is required; +some sources write, that you have to write security code instead of 12345) +to enter this menu
    • +
    • set "Field Test Mode" to "On"
    • +
    • restart your phone
    • +
    +

    +

  5. +
+ +

You can also: + +

+

    +
  • ask people from GSM newsgroups to do it for you
  • +
  • commission it to some specialized company
  • +
+ +

I don't know details about NetMonitor activation in 1610, 2110, 3110, 8110i, 8810 and 9000 series. +I don't know exactly which programs to use (I heard only, that probably version 0.6 of PC-Locals allows to make it in older models) +or how to modify EEPROM memory (if you know anything about that, please +contact me). +In this moment I can send you to Polish company Datex (www.datex.pl) +or to the http://discserver.snap.com/Indices/16654.html page +only. + +

I also heard, that in some copies of Nokia 6110 and 5110 phones it is possible to activate NetMonitor by a key combination +(by pressing Menu key and typing 10 - this should work even when NetMonitor menu is not visible). + +

+ + + + + + +
+If you don't know how to activate NetMonitor, you better ask some more experienced person to do it for you +(you can damage your phone during this operation) ! +!
+ +

I'd like to draw your attention to one detail - in Nokia phones you just activate the monitor and not upload it (it is always +in your phone - described methods just reveal it as an additional menu). + + +

Back to the top + + +

5. Which NetMonitor version can be activated in my phone ?
+


+ +

Each program described in previous point allows you to activate one of two NetMonitor versions: + +

+

    +
  1. limited, including tests from 1 to 19 (concerning cellular network only). This version is usually called +"Field Test" or "Operator field tests" (or you have to enter 242 code to activate it)
  2. + +
  3. +full, also including phone (and sometimes SIM card) tests. It is called "Engineering" (or "R&D field tests") and its activation +code is 243.
  4. +
+ +

+ + + + + + +
+I recommend you enable full version of NetMonitor - you can always replace it with a limited version +(by choosing test 242 in your phone). It doesn't work in reverse direction (you cannot activate full menu from +within the phone - it doesn't accept test 243 when limited version is active; of course you can still use +methods described in previous point). +
+ + +

Back to the top + + +

6. Does NetMonitor activation void warranty ?
+


+ +

The method of re-programming EEPROM memory is connected with opening the casing and making modifications in your +phone (which leaves many traces, scratches etc. and voids warranty). + +

However, these problems don't appear (you don't have to be affraid) when using one of the described programs +or code (but I can be wrong . there are opinions that this method leaves a trace in phone.s memory, too)... + +

Of course, before getting phone to service, is better to +deactivate NetMonitor. +Sometimes, for example, when phone's energy system is damaged, it could be impossible - +you can have some problems then (some of people working in service can think, that +you broke warranty - it depends on concrete people).. + + +

Back to the top + + +

7. NetMonitor menu in my phone has different number than 10. Is it normal ?
+


+ +

NetMonitor menu in Nokia 5110 +NetMonitor menu in Nokia 9110 +NetMonitor menu in Nokia 3210 +Of course, Number of NetMonitor menu (called "Net monitor" or "Field Test") +is different (depends on firmware version and phone series) in different Nokia phones. It can be: +Menu 7 (Nokia 3110 and 9110), Menu 10 (Nokia 5xxx, 6110, 6130; I'm referring to this number in this FAQ), +Menu 11 (Nokia 5190 and 3210) or Menu 12 (Nokia 8210 or some 6150). +Nokia 3210 also has a completely different icon for this menu. So, it's normal and don't be affraid. + + +

Back to the top + + +

8. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
+


+ +

YES - It's normal. We have such situation in Nokia 3210. "Lost" Menu 10 +is reserved for SIM application toolkit and you will see it, when you will have access to them. + + +

Back to the top + + +

9. How to use it ?
+


+ +

GSM/DCS/PCS phones: + +

After activation you gain access to the new position (called "Net monitor" +or "Field Test") in main phone menu. + +

NetMonitor menu in Nokia 5110 +When you enter this menu, you can type number of the test, which should be displayed +(1 to 19 in limited version, higher numbers in full version - Caution! Entering +number 241 removes NetMonitor menu and +242 switches it to the limited version - you'll have to use one of the +methods described in How to activate it ? to regain access to the full version !). + +

After pressing OK the chosen test appears on screen (and its number is shown on the top) in place of your network +name/operator logo. If you enter incorrect test number, NO TEST appears on screen and the phone returns to the last +correctly displayed test. If entered number is greater than 256, 512 or 768, then 256 (or its multiple) is subtracted and +resulting menu number is displayed (for example numbers 300 and 556 run test 44). Some test when accessed this way +(by typing its number and pressing OK to enter them directly) modify its contents (details are described later, I call this +"DIRECT" menu access' - for example, see Menu 10-18). + +

You can look at different tests by scrolling them using up/down arrows (don't worry - this method doesn't change +any settings in tests) - each key press moves you to the next/previous available test. In some models +(for example in 5110) these keys have different functions (like displaying last dialed numbers, opening +and scrolling phonebook or changing the volume) - unfortunately they don't work while NetMonitor is on screen:-(. +However, you can still adjust volume during a call in Nokia 5xxx - by pressing and holding +(longer than normally - about a second) one of the arrow keys. + +

You can return to the main screen with name/logo of your network by entering 0 in this menu. + +

+ + + + + + +
If you enter 0 as a test number and then add a number of a non-existing test +(for example 52), your phone will act as when NetMonitor is active (for example up/down arrows +can be used to change test number - you can check this in Menu 10). Unfortunately, in this case counters +from Menu 10-82 don't work. Tests chosen this way appear right +after switching the phone on. You can use this feature to: + +
    +
  • temporarily "damage" your phone (to cheat your friend?)
  • +
  • block access to your phonebook (Nokia 5xxx and 6xxx)
  • +
  • prevent viewing your last dialed numbers list on the main screen with network logo/name (Nokia 5xxx)
  • +
  • make it difficult to change volume during a call (Nokia 5xxx) - the arrow keys must be pressed and hold longer than normally
  • +
  • make it impossible to change volume (Nokia 3110)
  • +
+ +
+ +

With any test on screen, your phone doesn't display some of the messages (for example. "...calling") +and there is no calling party identification recognition (the only exception to the rule is a message: +'Note: you have active diverts'). When you type a phone number the test screen disappears +(it will come back after you get connected or when you cancel this number from your display). + +

Help (description) to the current test can be displayed by pressing and holding * key +(repeat this to return to test values). However, this shortcut works only in some phones +(my explanation to this fact can be found in +Description of the individual tests) - that's why I've added these help +screens using a bold font in most of the tests... If they are currently displayed, +entering menu directly doesn't change its settings. + +

There is one firmware bug connected with using helps (descriptions) to the tests +(in this moment, it's confirmed for Nokia 5110 phones with different firmware versions). +If you want to see it: + +

+

    +
  • Press and keep * key. In a moment, when * desappear from the screen +(but before moment, when test values will be replaced with help or help with test values), +let * key.
  • +
  • Now you must do everything fast - * can't be written on the screen and +text below NaviKey can't change: instantly press * for a moment and let it. +You can repeat this point - effects will depend on repeat numbers. For example, +with firmware 5.07 (or 5.11) +and 0 repeats you will have access to first "hidden menu", with 1 repeat +you phone hangs and turn off (see Menu 10-36 +- it can be interesting), with 2 repeats it changes language ;-)), with 3 +you can enter to another "hidden menu", sometimes (I don't know exactly, when) +you can see "CONTACT SERVICE" message (restart you phone and everything will +be OK). With firmware 5.24 result are different: +with 0 repeats you can enter second "hidden menu", with 1 or 2 repeats +desappear NaviKey description, with 3 its description changes to "Send". +
  • +
  • wait longer moment
  • +
  • press for a moment and let one of the keys: *, 0 to 9 or #
  • +
+ +

+You can restart your Nokia 5110, if it has older firmware (it doesn't work with 5.24, +but with 5.07 and 5.11 works): + +

+

    +
  • Press and keep * key. In a moment, when * desappear from the screen +(but before moment, when test values will be replaced with help or help with test values), +let * key.
  • + +
  • Now you must do everything fast - * can't be written on the screen and +text below NaviKey can't change: instantly press * for a moment and let it, instantly press +* for longer time (2 sec. or longer) and let, instantly press * for a moment and let it
  • +
+ +

The reason of it is stack overflow (see Menu 10-35 +and Menu 10-57). If it doesn't work with your phone +and you have Nokia 6110, you can also use another trick to reboot phone: + +

    +
  1. Go to the Calendar (Menu-8)
  2. +
  3. Make a note or reminder.
  4. +
  5. Enter some text into the edit box.
  6. +
  7. Hold "Clear" until the whole text is cleared, then press "Back".
  8. +
  9. Press "0". The main screen will now be showing but a space appears on the screen. (you can't see it)
  10. +
  11. Enter 4 digits (e.g. 1234).
  12. +
  13. Use the down arrow to move the cursor to the left side of the numbers and the space (Down arrow twice).
  14. +
  15. Now enter 6 digits and press the call button.
  16. +
+ +

TDMA 800/TDMA 1900 phones: + +

After activation you gain access to the new position (called "Field Test") in main phone menu. + +

When you enter this menu, you can type number of the test, which should be displayed (1-7 in +Nokia 6160) or enter 0 to disable it. + +

You can look at different tests by scrolling them using up/down arrows. During voice calls, depending on how +NetMonitor was entered, the arrow keys may switch tests (you can't change volume then) or adjust volume. + +

If the keypad is locked while a NetMonitor tests are active, pressing +0-9, *, or # will toggle the screen back to the User Interface Display. +Pressing Talk, End, the arrow keys, or the soft menu keys will return the test. + +

In Nokia 2120 or 2160 you can also display description (help) to displayed +tests by pressing and holding "ABC" key. + + +

Back to the top + + +

10. Can I damage my phone ?
+


+ +

Probably only during NetMonitor activation +(especially in phones with NAM programming menu). +I've never heard of such accident +(my own hard attempts :-) failed, too) during using it. +But of course you should be careful - netmonitor is "unofficial" part of +phone's firmware. + +

If something doesn't work correctly, switch the phone off and then back on +- all tests, you can set (excluding Menu 10-17), +will be set to their default values... + + +

Back to the top

+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net1.html b/xgnokii/docs/help/en_US/netmon/faq_net1.html new file mode 100644 index 0000000..0bb6e75 --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net1.html @@ -0,0 +1,459 @@ + + + + + + + + + + NetMonitor in Nokia phones (2/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (2/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

11. Glossary
+


+ +

Here you can find explanation to some terms, which can be found in this FAQ: + +

ACCH (Analog Control Channel) +(TDMA 800/TDMA 1900) + +

AMPS (Advanced Mobile Phone Service) +
Analogue cellular system working in 800 Mhz used, for example, in North America. + +

ASIC (Application Specific Integrated Circuit) +
Electronic chips designed for some concrete purposes + (for example, in phone it controlls communication between MCU and DSP) +They're designed and produced by the companies which use them. + +

AVCH (Analog Voice Channel) +(TDMA 800/TDMA 1900) + +

BCC (Base-station Color Code) +(GSM/DCS/PCS) +
3-bit number (from 0-7 range) used to distinguish neighbor cells of the same operator, +transmitting using BCCH in the same +FDMA channel. Such distinguish is not needed when the cells belong to different operators +(they use different channels and their BCCH are in different FDMA channels). +It is given in BSIC of each BTS (you can check it for example in +Menu 10-2). + +

BSC (Base Station Controller) +(GSM/DCS/PCS) +
It controls and supervises one or more BTSes. + +

BSIC (Base Station Identity Code +or Base transceiver Station Identity Code) +(GSM/DCS/PCS) +
Unique ID number of each BTS. If we code this value binary, first three digits (in decimal format) +are BCC and next three are NCC. These values range from 0 - 63. +BSIC values can be found among others in Menu 10-2. + +

BTS (Base Transceiver Station) +(GSM/DCS/PCS) +
This device allows communication between phones and cellular network +(many parameters, like current communication channel, distance to BTS and signal quality can be found, for example, +in Menu 10-1). + +

And here are another classes with maximum power of BTS: + +

+ + + + + +
GSM 900
GSM 1800
+
320 W (55 dBm)
+160 W (52 dBm)
+80 W (49 dBm)
+40 W (46 dBm)
+
+
-
+-
+-
+-
+
+
20 W (43 dBm)
+10 W (40 dBm)
+5 W (37 dBm)
+2,5 W (34 dBm)
+
+ +

In Polish version of this FAQ I give many links to WWW pages with BTS lists, their descriptions, pictures (in Poland). + +

From English pages I recommend www.geckobeach.com/cellular/cellpixs/cellid.htm +site - it's about networks and BTSes in North America. + +

C1 (path loss-criterium) +(GSM/DCS/PCS) +
This is a parameter (ranging from -99 to 99 dBm) calculated by the phone to decide which cells to use +(it uses the cell only if its C1 is positive). This value is based on: + +

+

    +
  • RX +
    Strength of signal received in BCCH channel. If it is equal or less than +RxLevAm, the phone searches for next +BCCH channel. It is shown in +Menu 10-1 (for current channel) +and also in Menu 10-3, Menu 10-4 +and Menu 10-5 +(for neighbor channels). The amount of measurements of the quality of transmission with BCCH channels +in neighbor cells is given in Menu 10-62
  • + +
  • RxLevAm (Rx Level Access minimum) +
    Min. level of the received signal (usually from -100 dBm to -110 dBm) needed by the phone to use particular cell.
  • + +
  • MSTxPwr +
    Max power, which can be transmitted by phone to get access to +RACH channel (i.e. max power allowed by current cell). +Actually, it is lower in towns (where cells are small) and higher outside them. +
  • + +
  • MSMaxTxPwr +
    Max permissible transmission power of the phone (its classes are described in +TX description).
+ +

It is calculated using following formula: +C1 = (RX - RxLevAm - MAX ( ( MSTxPwr +- MSMaxTxPwr ), 0) ) , where MAX(x,y) is obviously a mathematical +function giving the bigger one of the discussed numbers. +The phone shows C1 value in Menu 10-1 (for current channel) and in +Menu 10-3, Menu 10-4 +and Menu 10-5 +(for neighbor channels). + +

C2 (cell-reselection criterion) +(GSM/DCS/PCS) +
This parameter (-99 to 99 dBm) is calculated with following formula: +C2 = C1 + Cell reselect +offset - Temporary offset +* H (Penalty time - T). +If this value for some other cell (C2 for +neighbor channels can be found in Menu 10-3, +Menu 10-4 and +Menu 10-5) is higher than this value for current cell +(shown in Menu 10-1 and Menu 10-3) +for a period of time longer than 5 seconds, the phone switches cells. There are two exceptions to the rule: + +

+

    +
  • if the new cell is located on different Location Area (this parameter for current cell can be checked in +Menu 10-11), C2 for this cell must be (during more than 5 seconds) +higher than C2+CELL_RESELECT_HYSTERESIS for old cell (where CELL_RESELECT_HYSTERESIS is a +special parameter sent in BCCH channel).
  • + +
  • if the phone switched cells during last 15 seconds, C2 for a new cell must be higher at least 5 dBm from +C2 value of the old cell. +
  • +
+ +

H(x) function for currently not used cells is 0 (if x<0) or 1 (if x>=0). For current cell H(x) is always equal 0. +
By a skillful manipulation of this parameter (through CELL_RESELECT_HYSTERESIS), operators can direct +connections to specific cells (thus lightening load of the network). + +

CDMA (Code Division Multiple Access; also known as IS-95) +
One of the newer digital technologies in 800 or 1900 Mhz. Used in North America, Australia and some southeastern Asian countries +(e.g. Hong Kong and South Korea). It doesn't divide the radio frequency +spectrum into separate user channels by frequency slices or time slots, but +separates users by assigning them digital codes within the same broad spectrum. + +

DCCH (Digital Control Channel) +(TDMA 800/TDMA 1900) + +

DCS (Digital Cellular System) +
Cellular communication system working in 1800 MHz frequency band +(currently more often called GSM 1800) - a changed version of GSM (900 MHz) system. +Its new features allowed to increase network capacity (that's why this system is used in urban areas with huge number +of subscribers) at the cost of thick net of the base stations (BTSes) +and to provide roaming within one country. GSM 1800 has different channel numbers +(see Menu 10-17), different phone +(see RX description) and BTSes +transmission power and also different max speed of the user, at which he can use his phone +(250 km/h in GSM and 130 km/h in DCS). + +

DSP (Digital Signal Processor) +
Signal processor (digital signals processing chip - controls radio interface and speech coding/decoding). +Its version can be checked in Menu 10-88. + +

DTCH (Digital Traffic Channel) +(TDMA 800/TDMA 1900) + +

DTX (Discontinous Transmission Exchange) +
Some phones and networks "care" ;-) about battery life using so called discontinuous transmission (DTX), +which turns off phone's transmitter when we don't talk (but - for example - listen to the calling party). +During that period the phone generates a so called comfortable :-) noise, because if our interlocutor heard the silence, +he could think that the connection was broken. + +

(GSM/DCS/PCS): +
DTX must be supported by the phone (Nokia does - see +Menu 10-78) and BTS - you can check and +(sometimes) change this in Menu 10-12 and +Menu 10-13. + +

FDMA (Frequency Division Multiple Access) +(GSM/DCS/PCS) +
This name means multiaccess on frequency field: transmission proceeds on different frequencies at the same time +(this is a "full duplex" connection): there is a “down-link” from BTS to the phone and +“up-link” - from the phone to BTS (this is called "up" and "down" because BTS +antennas are usually higher than phone ones, so the signal from BTS to the phone +really must go down (and vice versa)). + +

GSM (Global System for Mobile Communication) +
Cellular telecommunication system working at 900 MHz. It also has a 1800 MHz (DCS) and +1900 MHz (PCS) version. + +

HLR (Home Location Register) +(GSM/DCS/PCS) +
Network register containing information about subscribers (i.e. about their subscribed services, +tariff, last network they were logged in, etc.). + +

IMEI (International Mobile Equipment Identification code) +(GSM/DCS/PCS) +
Unique 15-digit identification number of every GSM phone on the world. It can be checked using *#06# code +(all phones) or in service menu (Nokia), which can be activated by typing a code *#WAR0ANTY# or +*#WARRANTY# (Nokia 6130). In Nokia 3110 after entering service menu (*#WAR0ANTY#) +you have to additionally enter a code 9268. IMEI contains information about the manufacturer, +place of production and serial number (check www.tele-servizi.com/janus/texts/imei.txt +for such list for Motorola phones). Operators can restrict network access for particular phones - for example the stolen ones +(identified using IMEI number). Different operators can exchange such lists too. + +

IMSI (International Mobile Subscriber Identify) +(GSM/DCS/PCS) +
Unique (max 15-digit) number given to the phone: + +

+

    +
  • first three digits are MCC
  • +
  • next three digits are MNC
  • +
  • the rest is a unique number
  • +
+ +

IMSI attach +(GSM/DCS/PCS) +
It is a procedure executed after each power on. The phone informs network that it is active (and is ready for communication +- receiving waiting SMS, etc.) and then it receives the IMSI number. +The counter connected with IMSI attach is located in Menu 10-64, +Menu 10-7 informs whether this is allowed by the current cell. + +

IMSI detach +(GSM/DCS/PCS) +
The phone informs network that it is going to switch off and the communication won't be possible +(its IMSI expires). The counter connected with IMSI detach is located in +Menu 10-64. Menu 10-7 +informs whether this is allowed by the current cell. + +

Location Update +(GSM/DCS/PCS) +
Every GSM phone periodically informs network about its current location. +This function is called Location Update. It is executed after changing Location Area (phone makes +it "intelligent" - when it's moved out of network coverage and the logs again to the network, makes Location Update +only when current BTS has different LAC than previous one - before losing the signal) or +PLMN (after leaving the range of one network and trying to log in to another). +Then information about Location Update is transferred to a new MSC/VLR, +which in turn passes this information to HLR. When the phone works in new +MSC/VLR, HLR doesn't identify the user by +the number received from old MSC/VLR anymore. Location Update +has a couple of varieties: PLU, IMSI attach and IMSI detach +(they're distinquished in Menu 10-64). Current Location Area code can be checked in +Menu 10-11. + +

MCU (Master Control Unit processor) +
Main processor in phone. + +

MSC (Mobile Switching Center) +(GSM/DCS/PCS) +
Part of the system responsible for communication between subscribers and other users (also from other networks). + +

NCC (National Color Code or Network Color Code) +(GSM/DCS/PCS) +
3-bit number (from 0-7 range) used to differentiate cells of the operators from different countries +(for example near the border, where the phone is in range of several different networks) transmitting using +BCCH in the same FDMA channel. This number is constant +within PLMN. It is given in BSIC of every BTS +(you can check it in Menu 10-2). + +

PLMN (Public Land Mobile Network) +(GSM/DCS/PCS) +
Area covered by one operator (one network). After changing this area, the phone executes +Location Update. + +

+

+ +

PLU (Periodic Location Update) +(GSM/DCS/PCS) +
The phone informs network, on which country area (in the range of which cells) it is located. +This procedure is executed periodically (depending on the network, for example in polish +Era GSM and +Plus GSM networks every 3rd hour, in +Idea every 2th hour) +- this can be checked in Menu 10-10. This period is counted from the +last „contact” with network (the counter doesn't stop even if the phone loses network signal!) - from the last call, sending/receiving +SMS, requesting some services (for example enabling call diverting), because the network is then informed about phone's +location (but this is not registered in Menu 10-64). +The counter connected with PLU is in Menu 10-64. + +

Frequency hopping (channel hopping) +(GSM/DCS/PCS) +
During connection your phone can continuously change used frequency (used channel) in communication with cell. +It's used, when some channel is still troubled - without channel hopping +communication with phone could not be possible, with it it's - only this +part of transmition, which is made on this frequency, is lost (so, if gives less number of +signal loss, but doesn't change sound quality - methods of coding it are always +the same). You can check (during a call) if your phone uses this function in +Menu 10-1. Menu 10-12 informs +if it is allowed by the cell (these values are updated only during a call). Channel hopping requires +Hopping Sequence Number (frenquencies are changed according to known for phone and network sequence) +- see Menu 10-2. + +

TCH (Traffic Channels) +(GSM/DCS/PCS) +
Two way user data (computer data or digitized voice) channels. They can be divided to: + +

    +
  • +HR (Half Rate Traffic): max data transfer rate is 6.5 kbit/sec (introduced in +GSM phase 2). HR channels offer worse sound quality but also longer phone standby time (even up to 30%), +because the phone using HR uses less power. The main advantage of this kind of channels is that they +enable the network to double its capacity (the number of subscribers able to make a call at the same time - see +TS parameter description for more details) or to double the max range of the +BTS. Using these channels must be allowed and supported by the network (this can be +checked in Menu 10-7) and the phone. Activation code is +*HRC0#, deactivation code is #HRC0#. Unfortunately, not all Nokia phones accept these codes +(the phone should reset itself after entering them) - in older models they're not supported, in never they're deactivated, when +the phone is directed to countries with networks, which doesn't support it. +Interesting fact is that in Nokia 6110 (firmware 5.24) you can decide whether the phone can use this channel or not by modifying +following EEPROM memory cells values: + + + + + + + + + + + + + +
    enablingdisabling
    cell 0070 value for 78 +
    cell 011F value for 84
    cell 0070 value for 70 +
    cell 011F value for 7C
    +
  • + +
  • +FR (Full Rate Traffic):transmission at 13 kbit/sec, coding using +LPC-RPE (Linear Prediction Coding with Regular Pulse Excitation) algorithm
  • + +
  • +EFR (Enhanced Full Rate): +13 kbit/sek, coding algorithm different than in FR (ASELP (AlgebraicCode Excitation Linear Prediction) +created by Nokia and Sherbrooke University; recognized as an industrial standard for +GSM). EFR provides better sound quality at the same data transmission rate (and up to 5% +faster battery drain compared to FR). This mode can be enabled using +*EFR0# code (the phone then tries to use TCH channels in following order: EFR, FR, +(HR)) and disabled with #EFR0# (order: FR, (HR)). These codes may be not recognized +by some models (for example 6110 with some firmware versions) - +if your phone accepts them, it should reset itself right after typing them +(if this doesn't happen, you won't be able to enable/disable EFR using a keyboard code). +This channel is not supported in all older models (for example, 2110). +The type of channel used by your phone can be checked only during connection. +
  • +
+ +

When you network doesn't support one of these channel and phone recognizes its activation code, you may see +"Not ready" message. + +

You can check this in Menu 10-1. +The sequence of TCH channels can be freely set using some of the service programs +(for example WinTesla - in Software/Product Profile menu) - it can be only possibility to enable HR channel in phone. + +

TDMA (Time Division Multiple Access) +(GSM/DCS/PCS) +
This means multiaccess in time: several phones can transmit signal (either digitized voice or computer data) in the +same time on the same channel (its number can be checked in Menu 10-1) - +actually, this period of time is divided into very small parts (see TS description), +invisible for us, so we can assume it happens simultaneously). + +

TMSI (Temporary Mobile Subscriber Identity): +(GSM/DCS/PCS) +
During signalization procedures encrypted on radio channel +(for example, during location update) this number is assigned by +MSC to phone. In the moment, when network wants to contact +with concrete phone and transmission on radio channel is not encrypted, it's send +instead of IMSI and allows phone to indentify, that concrete +call concern on it. It doesn't have global meaning +and it's structure is definited by network administrator. Actual TMSI +you can check in Menu 10-10. + +

VLR (Visitor Location Register) +(GSM/DCS/PCS) +
This register contains the same data as HLR, but for roaming guests +(their data are taken from their home network HLR). + + +

Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net2.html b/xgnokii/docs/help/en_US/netmon/faq_net2.html new file mode 100644 index 0000000..ece761d --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net2.html @@ -0,0 +1,2208 @@ + + + + + + + + + + NetMonitor in Nokia phones (3/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (3/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

12. Description of the individual tests
+


+ +

Existence of the individual test in your phone depends on: + +

+

    +
  • phone model: generally, never and more complicated models (with more functions and options) have more tests (for example, +Nokia 9110 has more tests than 5110, 7110 more than 9110). There is one (only ?) exception: less complicated Nokia 5110 +has bigger NetMonitor than 6110 (and that's why I think that this model is better, even though it doesn't have some functions).
  • + +
  • software version - usually the newer version, the more options it has (software can be upgraded in service and its +version can be checked in most models with *#0000# code, in Nokia 6130 with *#9999# and in +3110 with *#3110#) - for instance in Nokia 5110 in Menu 10-89 bbbbbb +parameter is shown only from firmware 5.07. Firmware upgrade has also additional advantage: newer versions don't +contain some bugs (also in NetMonitor).
  • + +
  • who uploaded firmware to the phone: it is usually written in C (and then translated (compiled) to the code of phone's +microprocessor). According to my own private theory existence (and running) of an individual tests depends on some +constants set (or not) in the source code (programmers :-) surely understand, what I'm trying to write). The best example +for this can be Menu 10-38: according to the some English documentation +it doesn't exist in phones to be sold, because DEV_FT_MEMORY_DUMP_IN_USE constant in file ftd_conf.h +(one of the firmware source code files) wasn't set before compiling. I think, that the same applies to the help screens - +their presence doesn't depend on firmware version but on where the phone was purchased (where it comes from - +where was its firmware uploaded). How to solve this problem? Unfortunatelly, you can only download firmware again (compiled +from source with set constants). + +

    Aha, I'm also not quite sure, whether DSP tests +(Menu 10-70, 10-73, +10-74, +10-76 (except for ab parameter), 10-77, +10-78 +and 10-79) don't have to be enabled this way (or whether their existence +(or not) depends on the network). +

  • +
+ +

Help screens for tests are written with bold font, +concrete (example) values in tests with italic (I put them there, where I didn't have more details about test). + +

+

+ + +

Back to the top + + +

Menu 10-1 +
Information about communication with cell + +

+ + + + + + +
+ + + + +
abbb ccc ddd
+ e ff g mmmm
+ nnn     ppp
+    oooo
+
+ + + + +
CH RxL TxPwr
+TS TA RQ RLT
+ C1     C2
+    CHT
+
+ +

+

    +
  • +a - contains H, if frequency hopping is enabled (otherwise empty). This information +can also be found in Menu 10-11 +and Menu 10-12.
  • + +
  • +bbb - CH (channel): number of the channel used in communication with cell (decimal). If +frequency hopping is enabled, this number changes when the display gets refreshed. +This parameter determines frequencies used in communication with BTS: + +

    + + + + + + + + + + + + + + + + + + + + +
    carrier (middle) frequency +of the transmission channel (MHz) +
    GSM 900
    GSM 1800
    transmission phone-BTS
    890 + CH * 0,2
    1710 + (CH - 511) * 0,2
    transmission BTS-phone
    935 + CH * 0,2
    1805 + (CH - 511) * 0,2
    + +

    +and informs, whether phone use cell working in GSM 900 or 1800 MHz +(I write more about channel numbers in Menu 10-17). + +

    + +

  • + +
  • +

    ccc - RX: +minus is not show if <=-100. This parameter affects following functions: + +

    +

      +
    • +if all channels' signal is weaker than -110 dBm, the phone doesn't monitor channels.
    • + +
    • +if the phone loses signal of your home network, it tries to monitor next available networks and if you don't have access to them, +you'll see a network presence symbol and no signal strength bars (but you can make emergency calls) +
    • + +
    • + if some other network has a very strong signal (say -85 dBm) and your home network is very weak on that area (for example, +-100 dBm), your phone can have big problems with logging into it (you will have to use +Menu 10-17 to manually force the phone to use proper channel). +
    • + +
    • +RXLev parameter value: + +

      + + + + + + + + +
      RX (from)RX (up to)RXLev
      less than-110 dBm0
      -110 dBm-109 dBm1
      -109 dBm-108 dBm2
      .........
      -49 dBm-48 dBm62
      -48 dBmmorej63
      +

      +

    • + +
    • +signal strength indicator value on the left side of the display (approximately): + +

      + + + + + + + +
      RX (from - to)amount of bars
      from -105 to -100 dBm0
      from -100 to -95 dBm1
      from -95 to -90 dBm2
      from -90 to -85 dBm3
      more than -85 dBm4
      +

      +

    +
  • + + +
  • +

    ddd - TX: level of the transmitted signal (only during connection). If the phone's transmitter is active, +there is an * (asterisk) before the value. The lower value, the higher power level (also the one received by your head!) and +energy consumption. + +

    + + + + + +
    TX (GSM 900)161514131211109
    TX (GSM 1800)98765432
    dBm11121314151617181920212223242526
    Watts0,0120,0160,020,0250,0320,040,050,0630,0790,10,1250,1580,20,2510,3160,398
    + +

    and continue... + +

    + + + + + +
    TX (GSM 900)8765432-0
    TX (GSM 1800)10313029
    dBm2728293031323334353637383940414243
    Watts0,5010,6310,79411,261,5822,513,163,9856,318101215,820
    + +

    +Watt = 10(dBm/10)*0,001 +
    dBm = 10*log(Watt/0,001) + +

    There are following classes describing max phone transmission power: + +

    + + + + + + + + +
    GSM 900
    GSM 1800
    +
    20 W (not in use) +
    8 W (car/mobile phone) +
    5 W (car/mobile phone) +
    2 W (hand phone) +
    0,8 (hand phone)
    +
    +
    1 W (hand phone) +
    0,25 W (hand phone)
    +
    + +

    Min. phone transmission power in GSM 900 is 0,02 W and in GSM 1800 is 0,0025 W (4 dBm). + +

    Max BTS power level can be found in their description. + +

  • + +
  • +

    e - TS (Time Slot): each radio channel used in communication between phone and +BTS is divided into 8 parts (called TS - time slots). If in all BTSes +(available for your phone) all time slots are in use, you won't be able to make/receive a call and you'll get a 'Network busy' +message (information about reason of connection failure is given among others in +Menu 10-39). Unfortunately, each type of connection has the same priority in +networks not supporting GSM Phase 2+ (it isn't available in older GSM Phases) - so if you want to dial emergency number 112 +and the network is busy, no other call will be interrupted and you won't get connected. This problem can also be solved by +adding more BTSes (for example in dual GSM 900/1800 MHz network) or by modifying +current stations to allow the use of HR channels (FR +and EFR transmission uses whole assigned time slot, while HR +(defined in GSM Phase 2) only half of it). Max data transmission speed using one TS is 9.6 kbit/sec (or 14.4 kbit/sec, +but only in some additional conditions). There are new systems allowing higher transmission speeds +(for example GPRS (Generic Packet Radio Services) or HSCSD +(High Speed Circuit Switched Data), but they achieve this using several time slots +at the same time (which decreases network capacity). This TS indicator shows number of the used time slot +(0..7 for FR (EFR) or 0..15 for HR). +

  • + +
  • +

    ff - TA (Timing Advance): BTS informs the phone, +when it should start transmission (so that it reaches BTS in time). This information is shown +by this indicator. It lets us calculate approximate distance between phone and BTS, which is +a value between TA*550 m and (TA+1)*550 m (remember, that sometimes signal is refracted and +distance evaluated with this parameter can be wrong). +This parameter is updated during communication with network (sending/receiving +SMSes, calling, requesting services), for example when using SDCC and TFR +channels. It ranges from 0 to 63 (up to 35 km) with FR and +EFR channels. HR channels offer theoretically (for example +with a car antenna (higher transmitting power) and a flat terrain) twice this range (up to 70 km) and TA contains value up to 128 +(English descriptions which I use don't say a word about it - so, it's possible, +that for values bigger than 64 phone (?) decreases 64 from it and displays such value in this menu). +

  • + +
  • +

    g - RXQUAL_SUB (rate of transmission errors with DTX active +(DTX state can be checked in Menu 10-12)): +it determines, how many errors during connection have to be corrected by the phone for the call to be possible. Range 0 - 7 +(0 - means no errors; more than 5 - connection may be interrupted). The higher it is, the worse quality you have... + +

    + + + +
    RQ value01234567
    Max error amount<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
    +

    +

  • + +
  • +

    mmmm - RLT (Radio Link Timeout): if it is negative, 0 is shown. Max value of this parameter is 64. +If the phone uses a channel different than TCH or SDCC, xx is +displayed +

  • + +
  • nnn - C1 parameter

  • + +
  • +

    ppp - C2 parameter. If network supports only GSM Phase 1, +C1 value is displayed here. +

  • + +
  • +

    oooo - type of channel currently used by the phone (visit +www.pins.co.uk/upages/stratfordc/ +to find C programs containing algorithms used to encode different channels). +With HR channels phone even show, if first or second +part of TS is used (subchannel 0 or 1 is written): + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AGCH(Access Grant Channel) - a channel used by +BTS to inform the phone about what channel it should use (it is a +BTS answer to RACH) - it assigns the phone to +SDCCH
    BCCH(Broadcast Control Channel) +- a channel in direction BTS-phone, containing precise information about network +(needed for identification and access) - for example + +
      +
    • how often the phone should inform network about its location (T3212 counter value - more detailed description in +Menu 10-10)
    • +
    • whether frequency hopping is supported by the network
    • +
    • CELL_RESELECT_HYSTERESIS parameter (see C2 parameter description)
    • +
    • CELL_BARRED parameter (which informs, whether this cell is in test phase or is available for public use - but the phone +can ignore this and use test cells too - see Menu 10-19)
    • +
    +
    THR0TCH HR subchannel 0
    THR1TCH HR subchannel 1
    TFRTCH FR
    TEFRTCH EFR
    F144TCH FR - data transmission, speed 14.4 kbit/sec.
    F96TCH FR - data transmission, speed 9.6 kbit/sec.
    F72TCH FR - data transmission, speed 7.2 kbit/sec.
    F48TCH FR - data transmission, speed 4.8 kbit/sec.
    F24TCH FR - data transmission, speed 2.4 kbit/sec.
    H480TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 0
    H481TCH HR - data transmission, speed 4.8 kbit/sec., subchannel 1
    H240TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 0
    H241TCH HR - data transmission, speed 2.4 kbit/sec., subchannel 1
    FATCH FR - used only for quick signalization, for example in case of +handovers +
    (FACCH - Fast Associated Control Channel)
    FAH0TCH HR -used only for quick signalization, for example in case of +handovers +
    (FACCH - Fast Associated ControlChannel), subchannel 0
    FAH1TCH HR - used only for quick signalization, for example in case of +handovers +
    (FACCH - Fast Associated Control Channel), subchannel 1
    SDCCSDCCH (Stand-alone Dedicated Control +Channel) +- used for system signalization of: +
      +
    • establishing connection
    • +
    • user verification
    • +
    • Location Update executing
    • +
    • assigning to TCH
    • +
    • sending SMSes
    • +
    +
    CCCH(Common Control Channel ?) - used, when the phone is in standby mode (it doesn't transmit not receive data)
    CBCH(Cell Broadcast Channel) - +a channel in BTS-phone direction used for cell broadcast (for example in Nokia 5110 it can +be enabled in Menu 2-5 and Menu 4-2-2, in Nokia 6110 in Menu 1-5 and Menu 4-4-2) +
    CCHRCCCH and CBCH joined in one
    SEARthe phone is searching for network
    NSPS(No Serve Power Save) +- the phone is not in range of any network, energy saving has been activated (information, whether your SIM card can stop its +clock in energy saving mode, can be found in Menu 10-51)
    +

  • +
+ +

In Nokia 3110 this test looks similiar: + +

+ + + + + + +
+ + + + +
abbb cccc ddd
+ e ff g qqrr
+s Bttuu mmmm
+w ppp oonnn z
+
+ + + + +
 CH RxL TxPwr
+TS TA QPM RAR
+Ro BsiCLK RLT
+S C2 CHT C1 B
+
+ +

+

    +
  • cccc - in this phone minus is always shown
  • +
  • ooo - hex values
  • +
  • qq - paging mode (see Menu 10-2)
  • +
  • rr - RAR (description in Menu 10-2)
  • +
  • s - roaming indicator (description in Menu 10-2)
  • +
  • tt - BSIC for current cell (see Menu 10-2)
  • +
+ +

Level of received signal (RX) is connected with phone transmission power +(TX): the weaker the former, the stronger the latter (take a look at example indications of 6110 +using SDCC and TFR channels): + +

+ + + + + + +
RXTX
from -38 to -49 dBm19
from -68 to -75 dBm9-14 (0,032 - 0,316 Watt)
from -79 to -85 dBm7-9 (0,794 - 0,032 Watt)
from -85 to -93 dBm5-7 (2 - 0,794 Watt)
+ +

For curious people: some of these data can also be found in Nokia service programs (for example in WinTesla in +"Testing" / "RF Information" menu). + +

+ + + + + +
Using CCCH or CBCH channel by the phone +(if the cell doesn't support cell broadcast - you can check this in Menu 10-7) depends +on its firmware version and whether cell broadcasting has been enabled (or not) by the user. For example: Nokia 5110 v 5.04 +uses CBCH channel, if you enable this feature in Menu 2-5 or Menu 4-2-2 +(and CCCH channel, if you disable it). I think, that cell broadcast should be disabled when it is not +supported by the network - probably you can save some battery power. It has been corrected in version 5.07 (when CB is +not supported by the network, the phone uses CCCH regardless of "Info service" and +"Cell info display" settings). + +

Additionally, ccc (RX) parameter can be used to set the direction of your antenna +(especially directional one) much more precisely than when using the indicator on the left side of phone's display ! +I also have a piece of advice for you: never touch the antenna (in any case, you can check how it affects level of received +signal just by holding it with your fingers) ! + +

TA parameter can be also used (apart from calculating the distance to BTS) +to measure speed (for example of the care you're driving). I'm serious! But this can be done only when: + +

    +
  • the road is straight (no bends)
  • +
  • the phone uses only one BTS
  • +
  • BTS must be located near the road
  • +
+ +

A little bit of mathematics: +
+
From Pitagoras' theorem: + +

a2 = c2 + e2 +
b2 = c2 + f2 + +

So: +
e = +
f = + +

Now d = e - f =- + +

If you know: + +

+

    +
  1. +the way traveled by the car (on the drawing: length of "d" segment; it can be calculated form the lengths of "a" and "b" +segments (multiples of 513 m (for simplification) read from TA) and c (described later)) +
  2. + +
  3. +time, in which TA has changed (measured by a stopwatch) +
  4. +
+ +

you can measure your speed. +
Inaccuracy of this measure depends on: + +

+

    +
  • +distance between BTS and road (segment "c") +
  • + +
  • +velocity itself +
  • + +
  • +distance between car and BTS +(with longer distance inaccuracy depends less from "c" segment) +
  • +
+ +

And here is a concrete example: +
The original value of TA was 2 and after 15 seconds it has changed to 1. You will get following results: + +

+

    +
  • 123,120 km/h (BTS 0 m from road)
  • +
  • 124,320 km/h (100 m from road)
  • +
  • 128,160 km/h (200 m)
  • +
  • 135,600 km/h (300 m)
  • +
+ +

You can assume, that "c" segment is 100 m (or 0 if you count in memory - then d = e - f) and the inaccuracy of the measured +velocity is 5 km/h. +

+ +

In Nokia 2120 this test looks as follows: + +

+ + + + + + +
+Digital mode + + + + +
+ +rssi DVC d
+chan  l  a
+S   BB  TT
+
+Analog mode + + + + +
+rssi  s  d
+chan  l  a
+CS-state
+
+ +

and in Nokia 2160 is different: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+rssi DVC S
+chan  Pw A
+CS-state
+

+

+DTCH mode + + + + +
+rssi   s d
+chan   l a
+CS-state
+

+

+ACCH mode + + + + +
+rssi   D d
+chan  Pw A
+CS-state
+
+AVCH mode + + + + +
+rssi DVC S
+chan   l a
+CS-state
+
+ +

for Nokia 6160 it looks like follows: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+rssi DVC S
+Bchan Pw A
+CS-state
 
+

+

+DTCH mode + + + + +
+rssi DVC s
+Bchan Be l
+CS-state
 
+

+

+ACCH mode + + + + +
+rssi D d
+Bchan Pw A
+CS-state
 
+
+AVCH mode + + + + +
+rssi s d
+Bchan l a 
+CS-state
 
+
+ +

+

    +
  • B = current network/frequency

    +

      +
    • a = a-side 800mhz cellular
    • +
    • b = b-side 800mhz cellular
    • +
    • A = A-block (30 mhz) 1900mhz PCS
    • +
    • B = B-block (30 mhz) 1900mhz PCS
    • +
    • C = C-block (30 mhz) 1900mhz PCS
    • +
    • D = D-block (10 mhz) narrowband 1900mhz PCS
    • +
    • E = E-block (10 mhz) narrowband 1900mhz PCS
    • +
    • F = F-block (10 mhz) narrowband 1900mhz PCS
    • +
    +

    +

  • + +
  • Be = Bit Error rate in % (0-16)
  • +
  • TT = last received time alignment value (0-31)
  • +
  • rssi = received signal strength (dBm) (min= -113dBm, max= -51dBm, 2dB steps)
  • +
  • DVC = Digital Verification Color code (1-255, - = not locked)
  • +
  • D = DCC (Digital Color Code) on ACCH (0-3, - = not locked)
  • +
  • s = SAT color (0-2, - = not locked)
  • + +
  • d = data receiving status +

    +

      +
    1. no sync/no data
    2. +
    3. sync/not able to read
    4. +
    5. reading correcting
    6. +
    7. reading no correction
    8. +
    +

    +

  • + +
  • S = slot (1-3)
  • +
  • chan = channel number (0001-1023)
  • + +
  • Pw = Max access power +

    +

      +
    • DCCH: MS-ACC-PWR (0-10, - = not locked)
    • +
    • ACCH: CMAC (0-7, - = not locked)
    • +
    +

    +

  • + +
  • l = Tx level (0-10, - = TxOff)
  • +
  • a = audio state (0=off, 1=on)
  • + +
  • CS-state = Cellular State +

    +

      +
    • DCCH: SCAN-LOCK : Scanning and locking of DCCH
    • +
    • DCCH: DCCH-SEL  : DCCH selection
    • +
    • DCCH: CAMPING   : Camping
    • +
    • DCCH: REGISTR   : Registration proceeding
    • +
    • DCCH: WAIT-ORDER: Waiting for order
    • +
    • DCCH: ORIGINAT  : Origination proceeding
    • +
    • DCCH: RSELECT   : Reselection
    • +
    • DCCH: ORIG-SMS  : Sending SMS proceeding
    • +
    • DCCH: TERM-SMS  : Receiving SMS proceeding
    • +
    • DTCH: TCH       : Confirm traffic channel
    • +
    • ATCH or DTCH: CONVERSAT : Conversation
    • +
    • ACCH: OOR       : Out of range
    • +
    • ACCH: SCAN-PDCH : Scan primary dedicated control channels
    • +
    • ACCH: SCAN-SDCH : Scan secondary dedicated control channels
    • +
    • ACCH: SCAN-PCH  : Scan paging channels
    • +
    • ACCH: IDLE      : Idle
    • +
    • ACCH: ACCESS    : Access
    • +
    • ACCH: VCH      : Confirm voice channel
    • +
    +
  • +
+ +

This test in Nokia 6185/6188 is, of course ;-), different: + +

+ + + + + + + + + + + + + + + + + + + +
+CDMA control + + + + +
+ +CSST CHAN SP
+PPN EC/SO XF
+LOS XHO FR B
+-Rxx-Txx FER +
+

+

+CDMA traffic + + + + +
+ +CONV 0450 NP
+8000 2
+000 0D9 00 0
+-093+006 000
+
+

+

+AMPS control + + + + +
+ +RSSI S D
+CHAN P A
+CSST SID E
+XTBY MINMAX  +
+
+AMPS traffic + + + + +
+ + +-095 2 3
+0273 0 0
+CONV 16427 0
+Y +
+
CDMAAMPS
+
    +
  • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • Chan - Channel
  • +
  • PPN - PseudoNoise offset
  • +
  • EC/SO - Energy per chip per noise
  • +
  • B - Current network/frequency. a,b are A and B 800 MHz AMPS (analog). A-F indicate the digital block in use
  • +
  • Rxx - Receive power in dB
  • +
  • Txx - Transmit power in dB
  • +
  • FER - Frame Error Rate
  • +
  • In CDMA traffic screen you have current used codec too (one from these below): +

      +
    • 8000 - 13 kbit/sec
    • +
    • 0001 - 8 kbit/sec
    • +
    • 0003 - EVRC
    • +
    + +
+
    +
  • RSSI - Received signal strength
  • +
  • S - Slot (1-3)
  • +
  • D - Digital Colour Code on analog control channel (0-3 or - for not locked)
  • +
  • CHAN - Channel
  • +
  • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • SID - System ID (Cantel = odd number)
  • +
  • MINMAX: Minimum and Maximum RSSI over last time period ?
  • +
+
+ +

Menu 10-2 +
More information about used cell + +

+ + + + + + +
+ + + + +
 aa b c Bdd 
+ ee f 
+ ggg hh iii
+ H=j mm nn
+
+ + + + +
PM RAR Ro BC
+RelR QLF
+CRO TO PenT
+H MAIO HSN
+
+ +

+

    +
  • aa - paging mode: + +

    +

      +
    • NO : normal
    • +
    • EX : extended
    • +
    • RO lub SB : paging reorganization
    • +
    +

    +

  • + +
  • +b - RAR (Random Access Retransmission): max amount of transmissions using +RACH channel (Random Access Channel - a phone-BTS +channel used to send a network access request - for example during logging in) +
  • + +
  • +c - if your phone is in roaming, R is displayed (otherwise empty). This information is also shown on the top of the display. +
  • + +
  • +dd - BSIC value for current cell
  • + +
  • +ee - reason of last connection end (this parameter is also present in +Menu 10-63 and Menu 10-39 +(you will find explanation there - see description of the first parameter)) +
  • + +
  • +f - RXQUAL_FULL (error rate in transmission with DTX disabled +(DTX state can be checked in Menu 10-12)): +it determines, how many errors have to be corrected by the phone, for the connection to be possible. Range 0 - 7 (0 - means none, +more than 5 - connection may be interrupted). + +

    + + + +
    RQ value01234567
    Max amount of errors<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
    +

    +

  • + +
  • +

    ggg - Cell reselect offset: range 0 - 63 (this value should be multiplied by 2 dB), 'xxx' +when transmitting. Needed to calculate C2.

  • + +
  • +

    hh - Temporary offset: range 0 - 7 (this value should be multiplied by 10 dB, 70 dB +means infinitely long time), 'xx' when transmitting. Needed to calculate C2.

  • + +
  • +

    iii - Penalty time: range 0 - 31 (it should be multiplied by 20 s), 'xxx' when transmitting. +Needed to calculate C2.

  • + +
  • +

    j - information about frequency hopping: + +

    +

      +
    • 0 - not used (single frequency used - so called RF (Radio Frequency))
    • +
    • 1 - used (different RF (Radio Frequencies) used)
    • +
    +

    +

  • + +
  • +

    mm - MAIO (Mobile Allocation Index Offset). +Range 0 - 63, 'xx' when j=0 (when frequency hopping is disabled - you can check +this in Menu 10-12)

  • + +
  • +

    nn - HSN (Hopping Sequence Number).Range 0 - 63, 'xx' when j=0 (when +frequency hopping is disabled - you can check +this in Menu 10-12) +

  • +
+ +

In Nokia 3110 this test looks as follows: + +

+ + + + + + +
+ + + + +
aaabbbccccddd
+aaabbbccccddd
+aaabbbccccddd
+w           z
+
+ + + + +
S CH C1 rx C2
+1 CH C1 rx C2
+2 CH C1 rx C2
+S    1N 2N  B
+
+ +

Description of the parameters can be found in menu Menu 10-3 +(in this model cccc parameters are always preceded by minus). + +

In Nokia 2120 this test looks as follows: + +

+ + + + + +
+ + + + +
+ENCR  CIPH
+DTX  XSTBY
+CS-state
+
+ +

+

    +
  • ENCR = when message encryption is on
  • +
  • CIPH = when Ciphering is on
  • +
  • DTX = when DTX is on
  • +
  • XSTBY= when enabled standby is on
  • +
  • CS-state = see previous parameter for details
  • + +
+ +

and in Nokia 2160 is different: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+mode   DTX
+ENCR  CIPH
+d    Be TA
+

+

+DTCH mode + + + + +
+ +mode   DTX
+ENCR  CIPH
+d    Be TA +
+

+

+ACCH mode + + + + +
+ +mode
+XSTBY
+       SID +
+
+AVCH mode + + + + +
+mode
 
+       SAT +
+
+
+ +

and here is for Nokia 6160: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+mode M C
+FB E SP pc
+net SID..
  +
+

+

+DTCH mode + + + + +
+mode DTX
+ENCR CIPR 
+d a TA S
+CODEC... +
+

+

+ACCH mode + + + + +
+mode
+XSTBY
+ SID      
  +
+
+AVCH mode + + + + +
+mode
 
+ SAT      
  +
+
+
+ +

+

    +
  • mode = DCCH, DTCH, ACCH, AVCH
  • +
  • SID = system ID [0-32767, - = not locked]
  • + +
  • DCCH mode +

    +

      +
    • M = maximum paging frame class supported by network (1-8)
    • +
    • C = current PFC (Paging Frame Class) (1-8)
    • +
    • FB = number of F-BCCH slots
    • +
    • E = number of E-BCCH slots
    • +
    • SP = number of SPACH slots
    • +
    • pc = PCH subchannel
    • +
    • net = supported network types, bit map (1=suported, 0=not, C=current): +first bit for Public, second for Private, third for Residential
    • +
    +

    +

  • + +
  • DTCH mode +

    +

      +
    • DTX = shown when DTX is on
    • +
    • ENCR = shown when message encryption is on
    • +
    • CIPH or CIPR = shown when voice ciphering is on
    • +
    • d = data receiving status (0=no sync, 1=sync)
    • +
    • Be = Bit Error rate in % (0-16)
    • +
    • TA = current time alignment (0-30)
    • +
    • a = audio state (0=off, 1=on)
    • +
    • CODEC... = current codec:

      +

        +
      • -EFR- = IS-136A ACELP coder
      • +
      + +
    +

    +

  • + +
  • ACCH mode +

    +

      +
    • XSTBY = shown when extended standby is on
    • +
    +

    +

  • + +
  • AVCH mode +

    +

      +
    • SAT = SAT validity as measured by DSP (0-32767)
    • +
    +

    +

  • + +
+ +

and for Nokia 6185/6188: + +

+ + + + + + + + + + + + + +
+CDMA control + + + + +
+ +PN1
+ECK         

  +

+

+

+CDMA traffic + + + + +
+ +PN1 PN3 PN5 
+ECK ECK ECK
+PN2 PN4 PN6
+ECK ECK ECK +
+

+

+AMPS control + + + + +
+ +X F S N N C
+SLEEP EMC
+SCC STC M
+RSSCPLCC CAL +
+
+AMPS traffic + + + + +
+ +2 2 1 0 4 1
+00015F927B13
+0029B 0A0 2
+140 372 0000
+
+
CDMA +

+

    +
  • PNx: CDMA PN offsets handoff canidate listing. Shows only the current offset while idling. +Shows 1 to 6 additional choices during traffic.
  • +
+
+ +

Menu 10-3 +
Information about current and neighbor cells + +

+ + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+   ef gh
+
+ + + + +
SCH C1 rx C2
+1CH C1 rx C2
+2CH C1 rx C2
+    1N 2N
+
+ +

Meaning of these lines: + +

+

    +
  1. information about current cell
  2. +
  3. 1st neighbor cell
  4. +
  5. 2nd neighbor cell
  6. +
  7. e,f concern 1st neighbor cell, g,h concern 2nd neighbor cell
  8. +
+ +

+

    +
  • +aaa - CH (channel): number of channel used for communication with cell (decimal)
  • + +
  • +bbb - C1 values displayed only in standby mode. In active mode (ie. during connection) +letter B and BSIC for current cell are displayed. +
  • + +
  • ccc - RX: +minus is not shown if <=-100. Lets us calculate RXLev parameter value: + +

    + + + + + + + +
    RX (from)RX (up to)RXLev
    less than-110 dBm0
    -110 dBm-109 dBm1
    -109 dBm-108 dBm2
    ......... +
    -49 dBm-48 dBm62
    -48 dBmmore63
    +

    +

  • + +
  • +ddd - C2 parameter
  • + +
  • +e,g - contains F, if current cell is located on a restricted area (otherwise empty)
  • + +
  • +f,h: + +

    +

      +
    • +B means a cell in test phase (your phone can use barred cells - this can be enabled in +Menu 10-19)
    • +
    • N - a cell given for normal use
    • +
    • L - means low level
    • +
    • otherwise empty
    • +
    +

    +

  • + +
+ + + + + + + +
If you want to see, if actual used cell is barred or not, see on +Menu 10-19 (it depends on setting in that test)
+ +

Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

In Nokia 3110 this test looks like Menu 10-4. + +

In Nokia 2120 this test looks like test 4 in Nokia 2160. + +

In Nokia 2160 this test looks different (is displayed +in DCCH mode only): + +

+ + + +
+ + + + +
+RS SS SI b
+NA ND
  +
+
+ +

and here is for Nokia 6160: + +

+ + + +
+ + + + +
+RS SS SI b
+NA ND
+MA MD MO
  +
+
+ +

+

    +
  • RS = minimum Received signal Strength required to access cell (0-31, where 0=-113 dBm and 31=-51 dBm)
  • +
  • SS = minimum signal Strength Sufficient for candidate of reselection (0-31, where 0=-113 dBm and 31=-51 dBm)
  • +
  • SI = Scan Interval between consecutive strength measurements in hyperframes (1-16)
  • +
  • b = access burst size (0=normal, 1=abbreviated RACH)
  • +
  • NA = Number of Analog neighbors (0-24)
  • +
  • ND = Number of Digital neighbors (0-24)
  • +
+ +

and for Nokia 6185/6188: + +

+ + + + +
+OWNNUMBER
+ESN-00000000
+ESN-HEX
+SL P MD PC +
+ +

    +
  • OWNNUMBER - phone number
  • +
  • ESN - Electronic Serial Number
  • +
  • MD - [AD] changes to [DI] at 800 CDMA
  • +
+ +

Menu 10-4 +
Information about neighbor cells + +

+ + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+  ef gh ij
+
+ + + + +
3CH C1 rx C2
+4CH C1 rx C2
+5CH C1 rx C2
+  3N 4N 5N
+
+ +

Meaning of the lines: +

    +
  1. 3rd neighbor cell
  2. +
  3. 4th neighbor cell
  4. +
  5. 5th neighbor cell
  6. +
  7. e,f concern 3rd neighbor cell, g,h 4th neighbor cell, i,j 5th neighbor cell
  8. +
+ +

Meaning of the letters is the same as in Menu 10-3 (i is the same as e, j is the same as f) + +

Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

In Nokia 3110 this test looks like Menu 10-5. + +

In Nokia 2160 this test looks different: + +

+ + + + +
+ + + + +
+bVo mod bs
+Tbat1 Tb2
+Wpwm FCmAh
+
+
+ +

+

    +
  • bVo = battery voltage
  • +
  • mod = charging mode + +

    +

      +
    • FAS = Fast charging
    • +
    • COL = Cold battery charging
    • +
    • MAI = Maintenance charging
    • +
    • ERR = wrong charger or battery not OK
    • +
    • LIC = LiION battery charging
    • +
    • TXO = charging, transmitter active (connection in progress)
    • +
    • *** = charger disconnected
    • +
    +

    +

  • + +
  • bs = battery is full or reason for fast charge termination + +

    +

      +
    • TI = max. charge Time elapsed
    • +
    • DV = dV/peak value detected (full)
    • +
    • BV = Battery voltage max limit
    • +
    • BT = Battery temp max limit (overheat)
    • +
    • ** = battery is not full
    • +
    +

    +

  • + +
  • Tbat1 = battery temp. a/d reading (subtracted from 1023)
  • +
  • Tb2 = battery temp. in C (not implemented)
  • +
  • Wpwm = PWM charge control output (000-250)
  • +
  • FCmAh = mAh rating of charge given to the battery
  • +
+ + +

In Nokia 2120 this test looks like follows + +

+ + + + +
+ + + + +
+ChargV:NNN
+ST hex des
+B:LLLL KKK
+
+ +

but it was not implemented. + +

In Nokia 6160 this test looks like follows + +

+ + + + +
+ + + + +
+SID #####
+NN NT NR
+Alphatag  
  +
+
+ +

+

    +
  • SID = System Identification Number (0 to 32767, odd for 'A' carriers, even for 'B' carriers, - = not locked)
  • +
  • Alphatag.. = textual end-user display of current system
  • +
+ +

and for Nokia 6185/6188: + +

+ + + + +
+CSST CHAN
+A B
+SID
+SD IT TM CAP +
+ +

    +
  • CSST - Cellular state: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • CHAN - Channel
  • +
  • B - Network Band and Frequency (lowercase a,b = 800 MHz band; uppercase A,B = 1900 MHz band)
  • +
  • SID - System ID:

    +

      +
    • [17500] - Clearnet PCS
    • +
    • [16422] - BC Tel Mobility
    • +
    • [16xxx odd number] - Cantel AT&T
    • +
    +

  • +
+ +

Menu 10-5 +
Information about neighbor cells + +

+ + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+  ef gh ij
+
+ + + + +
6CH C1 rx C2
+7CH C1 rx C2
+8CH C1 rx C2
+  6N 7N 8N
+
+ +

Meaning of the lines: +

    +
  1. 6th neighbor cell
  2. +
  3. 7th neighbor cell
  4. +
  5. 8th neighbor cell
  6. +
  7. e,f concern 6th neighbor cell, g,h 7th neighbor cell, i,j 8th neighbor cell
  8. +
+ +

Meaning of the letters is the same as in Menu 10-3 (i is the same as e, j is the same as f) + +

Sometimes phone shows, that both C1 and +C2 for channel are equal -99 +- it means probably, that it wouldn't be able to log into it... + +

In Nokia 3110 this test looks like Menu 10-6. + +

As far as I know, Nokia 3210 is the first model which can "observe" 8 neighbor cells (older series - like Nokia 5110 . +display parameters of only 6 neighbor cells). + +

In Nokia 2160 this test looks different: + +

+ + + +
+ + + + +
+ROM SW
+EPROM SW
+Prod type 
+
+ +

+

    +
  • ROM SW = ROM software version, e.g. V 65.08
  • +
  • EPROM SW = EPROM (flash) version, e.g. V 1.45
  • +
  • Prod type = product type, e.g. NHC-4NE
  • +
+ +

And here is for Nokia 6160: + +

+ + + +
+ + + + +
+S bandorde
+NC NP IRC
+RSCO RSLO
  +
+
+ +

+

    +
  • S = system indicator:

    +

      +
    • H = hometype system
    • +
    • P = partner roam
    • +
    • F = preffered roam
    • +
    • N = normal roam
    • +
    • X = no service
    • +
    • a, b, A, B, C, D, E, F = current band while scanning for a control channel +(see next parameter for details)
    • +
    +

  • + +
  • bandorde = network search order:

    +

      +
    • a = a-side 800mhz cellular
    • +
    • b = b-side 800mhz cellular
    • +
    • A = A-block (30 mhz) 1900mhz PCS
    • +
    • B = B-block (30 mhz) 1900mhz PCS
    • +
    • C = C-block (30 mhz) 1900mhz PCS
    • +
    • D = D-block (10 mhz) narrowband 1900mhz PCS
    • +
    • E = E-block (10 mhz) narrowband 1900mhz PCS
    • +
    • F = F-block (10 mhz) narrowband 1900mhz PCS
    • +
    +

  • + +
  • NC = Number of Cellular = number of probability blocks to scan in cellular bands
  • +
  • NP = Number of PCS - number of sub blocks to scan in PCS bands
  • +
  • IRC = IR Control:

    +

      +
    • 1 = only systems with home SID or SOC are accepted
    • +
    • 0 = any system not listed as forbidden is accepted
    • +

  • + +
  • RSCO = Rescan Count - rescan time in hyperframes
  • +
  • RSLO = Rescan Loop - defines when all the bands in bandorder are to be scanned
  • + +
+ +

and for Nokia 6185/6188: + +

+ + + + +
+1YNC_OK_097B
+SYNC_FAI4CC1
+FOCC_WOR587C
+WORD_OK_3E65
+
+ +

Menu 10-6 +
Information about preferred and restricted networks of the inserted SIM card. + +

+ + + + + + +
+ + + + +
aaabb  aaabb
+aaabb  aaabb
+aaabb  aaabb
+aaabb  aaabb
+
+ + + + +
LReg   1_For
+1_Pre  2_For
+2_Pre  3_For
+3_Pre  4_For
+
+ +

Meaning of the individual lines: + +

+ + + + + +
last registered network1st forbidden network
1st preferred network2nd forbidden network
2nd preferred network3rd forbidden network
3rd preferred network4rd forbidden network
+ +

+

    +
  • +last registered network - you used it last time. When you're in home country, it can be your home network +(you pay them for your calls - if it is, after choosing it manually (in Nokia 5110 - Menu 4-2-4) phone displays +"Home network selected"). +
  • + +
  • +preferred network - network, to which your SIM card was logged (when it was in its range) - for example in roaming. +
  • + +
  • +forbidden network - your SIM card was in range of that network, but wasn't allowed to log in... +
  • +
+ +
    +
  • +

    aaa - MCC (Mobile Country Code) +- code of the network home country (260 for Poland) in BCD code +

  • + +
  • +

    bb - MNC (Mobile Network Code) +- network code (different for networks with the same MCC) in BCD. When you use phone working in PCS 1900 +system (for example, Nokia 6190), this number can be 3-digit long.

  • +
+ +

What are these lists stored on SIM card for? Because: + +

+

    +
  1. +the phone doesn't have to waste its power while trying to log to the network, which is forbidden for SIM card +(it is checked only once and then stored, so the phone doesn't have to repeat this procedure anymore) +
  2. + +
  3. +when you have automatic network selection enabled, your phone in first turn searches for networks it was +previously using ("preferred"). +
  4. +
+ +

+The list of "preferred" and "forbidden" networks is written by the phone +(Nokia saves last chosen networks). Preffered networks can be also edited - for example in Motorola and Alcatel phones (not in Nokia). +Sometimes it is done by +the operator (he writes preferred and forbidden networks to the SIM card before selling it (it's known, that you cannot +log to competitive network - it can be stored in card programming phase). Both these lists can be changed using a +Czech program called SIMedit (www.compelson.cz/simedit.htm)... + +

URL http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html +contains list of the MCC and MNC parameters for different networks. + +

+ + + + + + +
Using this menu you can check (probably - NOT ALWAYS!), where SIM card was used lately (in your country, abroad) +and where its owner was traveling +
+ +

In Nokia 2160 use this test, when you want to "disable" NetMonitor tests. + +

And here is for Nokia 6160: + +

+ + + +
+ + + + +
+PSC PSD   
+FSC FSD
+XSC XSD
  +
+
+ +

Intelligent Roaming Database (IRDB) statistics: + +

This lists the total count of SOCs and SIDs in each category. +The database has a total memory limit of 82 entries, +which may be distributed amongst these categories: + +

+PSC = number of Partner SOCs
+PSD = number of Partner SIDs
+FSC = number of Preffered SOCs
+FSD = number of Preffered SIDs
+XSC = number of Forbidden SOCs
+XSD = number of Forbidden SIDs
+ +

Partner SOC/SID = treated like the home system by the phone +
Preffered SOC/SID = preferred over neutral (undefined) systems when available +
Forbidden SOC/SID = rejected by the phone as service providers + +

and for Nokia 6185/6188: + +

+ + + +
CDMA
+ + + + +
+SID NID
+BASE ID
+P_REV
+MIN_P_REV    +
+
AMPS
+ + + + +
+0ORD_COR0CE3
+WORD_FAI0E76
+CTRL_FIL787D
+SAT_V_OK0004
+
+

CDMA

+

    +
  • SID - System ID:

    +

      +
    • [17500] - Clearnet PCS
    • +
    • [16422] - BCTel Mobility
    • +
    • [16xxx odd number] - Cantel AT&T
    • +
    • [00000]: Second SID assignment
    • +
    +
+

Are lines 3,4 CDMA specs ? [ANSI] for 1900 MHz, [TSB74] for 800 MHz CDMA +

+ +

Menu 10-7 +
Information about current (recently monitored) cell + +

+ + + + + + +
+ + + + +
E A H C I BR
+a b c d e fg
+ECSC 2Ter MB
+h    i    j
+
+ + + + +
Serving Cell
+system info
+bits
+
+ +

+

    +
  • a - 1, if emergency calls (112) are possible
  • +
  • b - 1, if IMSI attach and IMSI detach are possible
  • +
  • c - 1, if the cell supports HR channels
  • +
  • d - 1, if C2 values are broadcasted
  • +
  • e - 1, system information 7 and 8 are broadcasted
  • +
  • f - 1, if the cell supports cell broadcasting (CBCH channel)
  • +
  • g - 1, if cell re-establishment is possible
  • +
+ +

Last two lines are present only in dual phones (GSM 900/1800 - for example Nokia 6150 and 3210): + +

+

    +
  • +h - 1 in standby mode, if ECSC (Early Classmark) sending is supported. During a call "x" is displayed. +
  • + +
  • +i - 1 in standby mode, if 2-Ter messages are supported. During call "x" is displayed +
  • + +
  • +j - information (if supported) which cells from both frequencies bands (900 and 1800 MHz) are shown +(MULTIBAND_REPORTING parameter value). Description from +Phase2+ ETSI GSM 05.08 version 5.4.0, section 8.4.3 "Additional cell reporting requirements for multi band MS" specification: + +

    +

      +
    • +0 - 6 strongest cells (with known and allowed NCC from +BSIC), regardless their frequency band (900 or 1800 MHz)
    • + +
    • +1 - strongest cell (with known and allowed +NCC from BSIC) in each frequency band on +BA list, except for frequency band of the current cell. Remaining positions should be used to show cells in frequency band +of the current cell. If there are free positions left, further strongest and recognized cells from other bands are shown (their +frequencies bands are not important). +
    • + +
    • +2 - like in 1, but two strongest cells are shown first (with known and allowed NCC from +BSIC) in each band... +
    • + +
    • +3 - three strongest cells are shown first...
    • +
    +
  • + +
+ +

If your phone wasn't logged to any network, some default values are shown. + +

In Nokia 6160 this test is different: + +

+ + + + +
+User
+interface 
+display
  +
+ +

and here is for Nokia 6185/6188: + +

+ + + +
CDMA
+ + + + +
+CSST         
+DATE
+TIME
  +
+
AMPS
+ + + + +
+1AT_V_FA0000
+FVC_S_FA0000
+WFLG_INT7046
+NORMALRXFE25
+
+

CDMA

+

    +
  • CSST - Cellular state: [IDLE], [CONVE], [PLIOS], [TIME], [SYNC], [RELE], [PAGE], [TRFIN], [W_OR]
  • +
  • DATE - CDMA Network date
  • +
  • TIME - CDMA Network time
  • +
+
+ + +
Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net3.html b/xgnokii/docs/help/en_US/netmon/faq_net3.html new file mode 100644 index 0000000..e93f3f6 --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net3.html @@ -0,0 +1,1752 @@ + + + + + + + + + + NetMonitor in Nokia phones (4/7) + + + + + +

Main page

+
NetMonitor in Nokia phones (4/7) +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+ +
+ +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+ +
+ +

Menu 10-8 + +

+ + + +
CDMA
+ + + + +
+TADD TDROP
+TCOMP TTDROP
+WW1 WW2 WW3
  +
+
AMPS
+ + + + +
+1STBY_RX7244
+XNRML_RX006C
+X_N_RX_O004C
+X_N_RX_F0020
+
+

CDMA

+

    +
  • TADD - threshold to add a new active PN (raw value ex: 28 = Ec/Io at -14 dB), [TDROP] : threshold to drop an active PN (raw value ex: 32 = Ec/Io at -16 dB)
  • +
  • TCOMP - an other threshold to add an active PN when a candidate PN becomes stronger than an active PN
  • +
  • TTROP - timer to drop a PN when power of this PN goes below TDROP
  • +
  • WW1 - value of the seach window for the active PN
  • +
  • WW2 - value of the seach window for the neighbour PN,[WW3]: value of the seach window for the remaining PN.
  • +
+
+ +
Menu 10-9 + +

+ + + +
CDMA
+ + + + +
+006 330 270
+047 062 062
+342 102 030
+062 062 062
+
+
AMPS
+ + + + +
+1PT_1_OK724E
+RPT_1_FA0042
+TIME__2_0000
+MER2HIGH0002
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and EC/SO (Energy per chip per noise). +An EC/SO of 062 likely means not really usable? lower numbers are better +strengths). See Menu 10-2 for PN offset information. +

+ +

Menu 10-10 +
Network information (concern current or recently monitored network) + +

+ + + + + + +
+ + + + +
TMSIaaaaaaaa
+T321:bbb/ccc
+PRP:d  ee ff
+ ggggg  hhh 
+
+ + + + +
TMSI(hex)
+T3212ctr/tim
+PaRP DSF AGC
+  AFC   Ch
+
+ +

+

    +
  • +aaaaaaaa - TMSI: +a number assigned to each phone logged to the network (it can be done, for +example, after power on, a call, sending/receiving SMS, requesting some services, +PLU). Value from the SIM card +(each new number is written there) in hexadecimal format. If assigning this +number fails (for example because transmitter was turned off in +Menu 10-45 or SIM card is not active), +'xxxxxxxx' is shown here and the phone displays 'No network coverage' message (when you try +to make a call). +
  • + +
  • +bbb - value of the so called T3212 counter: the phone periodically informs +the network about its location +(makes a PLU). 'bbb' counter means time from +last update and can be a value from 1 to 'ccc' (where 1 means 6 minutes, 2 - +2 * 6 min = 12 min, etc.). This counter is also cleared after each connection, +sending/receiving SMS or requesting a network services - for example call +diverting (but the counters from Menu 10-64 +don't change). The value doesn't change (it's always equal 0) with not active +SIM card.
  • + +
  • +ccc - max T3212 counter value: period of time, after which the phone sends +information about its location - makes a PLU +(range from 1 to 240, where 1 means 6 min between updates and 240 means +24 hours (240*6min)). This value is received from the network (if it is 0, +the network doesn't require information about phone location). For Polish +networks Era GSM and +Plus GSM it's equal 30 (3h), for +Idea 2h. Displayed normally +even, when SIM card is not active. +
  • + +
  • +d - Paging Repeat Period, sometimes called DRX (Dincontinuous Receive): +period of time, after which the phone turns its receiver on to check whether +someone is calling us (range from 2 to 9 - the higher, the longer time between +these checks so the phone uses less power: +PRP=2 means about 0.95 s, a PRP=9 equal 4.25 s.). +Interesting thing is that max standby times are usually calculated by the manufacturers +for this parameter equal 9. +
  • + +
  • +ee - DSF (Downlink Signalling Failure). If it is negative, +0 is shown. Max value of this parameter is 45. When the phone uses +TCH channel, xx is displayed. +
  • + +
  • +ff - AGC (Automatic Gain Control) - automatic gain control +of the phone receiver. The stronger the signal from BTS, +the lower this value. It is displayed correctly only when the phone uses +TCH/SDCCH channel +(for example: during a call) and can be a value from 0 to 93 (dB ?). +
  • + +
  • +ggggg - in some English descriptions it's "VCTCXO AFC DAC control" - a value +between -1024 and 1023. In help it's described as AFC +(Automatic Frequency Control) - automatic adjusting phone's +receiver to the frequency of the signal transmitted by BTS. +The more this value differs from 0, the more frequency corrections have to be +made by the receiver (it depends on the channel used in communication with +BTS - see Menu 10-1) +to "match" the BTS. +
  • + +
  • +hhh - CH (channel): number of channel used in communication with cell (decimal) +
  • +
+ +

In Nokia 3110 this test looks like follows: + +

+ + + + + + +
+ + + + +
TMSI:aaaaaaaa
+T3212:bbb/ccc
+PRP:d  ee ff
+w gggg  hhh z
+
+ + + + +
TMSI(hex)
+T3212 ctr/tim
+PagRP DSF AGC
+S AFC   CH  B
+
+ +

If the phone after power on wasn't logged to any network, +some default values are displayed here (except for TMSI). + +

Some of these values can be also found in Nokia service programs +(for example in WinTesla - in menu "Testing" / "RF Information"). + +

+ + + + + + +
In Menu 10-64 you can check, +how many times your phone has sent an information about its location. +If you have sent an SMS, you can check (exact to 6 min), when you did it +(if it wasn't earlier than value 'ccc' for your network) - check 'bbb' parameter value. +
+ +

And here is this test for Nokia 6185/6188: + +

+ + + +
CDMA
+ + + + +
+414 084 222
+062 060 062
+420 366 252
+062 062 062 +
+
+
AMPS
+ + + + +
+1X_XSTBY000D
+SYNC_LOS0031
+DEC_SAME0000
+VOTED_BT0000
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and signal strengths. +

+ +

Menu 10-11 +
Identification of the currently used (last monitored) network + +

+ + + + + + +
+ + + + +
CC:aaa NCbbb
+  LAC:ccccc
+  CH : deee
+  CID:fffff
+
+ + + + +
 MCC    MNC
+LocAreaCode 
+ServChannel
+   CellId
+
+ +

+

    +
  • +aaa - MCC (Mobile Country Code): code of the network home +country (260 for Poland) - decimal. +
  • + +
  • +bbb - MNC (Mobile Network Code): network code +(different for networks with the same MCC - for example, in Poland: +01 for Plus GSM, 02 for Era GSM and +03 for Idea). In PCS 1900 +phones (for example in Nokia 6190) this number can consist of three digits. +It's shown in decimal format. +
  • + +
  • +ccccc - LAC (Location Area Code): code of the current +cell area (decimal or hexadecimal). The size of this area (with the same LAC) +depends on the network. After changing LAC, the phone makes +Location Update.
  • + +
  • +d - H, if frequency hopping is enabled (otherwise empty). This information +can be also found in Menu 10-1 and +Menu 10-12.
  • + +
  • +eee - CH (channel): number of channel used in communication with cell (decimal) +
  • + +
  • +fffff - CID (Cell Identifier): number of the current cell +(each cell in given area has its own unique ID number) - shown decimal or hexadecimal. +
  • +
+ +

LAC and CID format (if they're displayed decimal or hexadecimal) depends +on your phone's model and its software version (for instance: Nokia 3210 +and Nokia 5110 with newer software display decimal values, while Nokia 5110 +with 4.51 (and older) firmware and some previous models (like Nokia 3110) +use hexadecimal format). + +

GSM phones recognize the network using MCC and MNC codes +(list of these codes can be found at +http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html). +Network names shown on phone's display (like 'ERA GSM', +'Plus GSM' or 'Idea') +are stored in phone's memory (they're set by the producer - cellular network doesn't +send any name, just these two numbers). In order to correctly recognize a +new network, you must upgrade the firmware of the phone (or it won't display +network name). Some older phones, like Nokia 2110i (or newer models +without firmware upgrade) display names like PL-03 (they recognize that +MCC=260 is Poland (which has international code PL), but they don't know +the network name - only its MNC). One text name can also be changed +using appropriate service programs (like WinTesla +- "Dealer" / "Operator Settings"). + +

In Polish version of this manual the description of BTSes contains +URLs of pages with BTSes lists - with their locations, LAC and CID +(for Polish networks). + +

If the phone after power on wasn't logged to any network, some default values are displayed here. + +

In Nokia 3110 this menu looks like follows: + +

+ + + + + + +
+ + + + +
CC:aaa NC:bbb
+  LAC:cccc
+  CH :deee
+w CID:ffff  z
+
+ + + + +
 MCC     MNC
+ LocAreaCode
+ ServChannel
+S CellId    B
+
+ +

And here is for Nokia 6185/6188: + +

+ + + +
CDMA
+ + + + +
+162 054    
+062 062
+186 084
+062 051 +
+
+
AMPS
+ + + + +
+11_BETTR0000
+SYNC_SAM0000
+MSG__BTR0000
+SFLG_BTR0000
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and signal strengths (only, when phone is in CONV state) +

+ +

Menu 10-12 +
Parameters of currently used (last monitored) network + +

+ + + + + + +
+ + + + +
CIPHER :aaa 
+HOPPING:bbb
+DTX    :ccc
+IMSI   :ddd
+
+ + + + +
CipherValue
+HoppingValue
+DTXValue
+IMSIAttach
+
+ +

+

    +
  • +aaa: + +

    +

      +
    • +OFF: phone doesn't transmit
    • + +
    • +A51: phone transmits, data are coded using A5/1 algorithm (more complicated version)
    • + +
    • +A52: phone transmits, data are coded using A5/2 algorithm (a version designed +for use in some "doubtful" countries - potential future enemies (like Iraq)). It's easier to +decode and crack, but still secure (not cracked) - but I can be wrong ! +
    • +
    +

    +

  • + +
  • +bbb - informs, whether frequency hopping is enabled (ON) or disabled (OFF) +
  • + +
  • +ccc - informs, whether DTX is used (ON) or not (OFF) by phone +
  • + +
  • +ddd - informs, whether IMSI attach is allowed (ON) +
  • +
+ +

All the values in this menu are updated only when the phone uses TCH +channel. + +

If the phone after power on wasn't logged to any network, some default values are displayed here. + +

More information about A5/1 and A5/2 algorithms can be found at www.scard.org/gsm/. + +

In Nokia 3110 this test looks as follows: + +

+ + + + + + +
+ + + + +
CIPHER :aaa
+HOPPING:bbb
+DTX    :ccc
+w IMSI :ddd z
+
+ + + + +
CipheringValu
+HoppingValue
+DTXValue
+S IMSIAttachB
+
+ +

In Nokia 6185/6188 in AMPS it looks different: + +

+ + + + +
+1IN_FAIL0044
+DYN_FAIL01C7
+MIN2_FAI0045
+DYN2_FAI01CB
+
+ +

Menu 10-13 +
Information about DTX in currently used (last monitored) network + +

+ + + + + + +
+ + + + +
aaaaaaaaaa 
+DTX(DEF):bbb
+DTX(BS) :ccc
+
+ + + + +
DTXMode
+DefaulDTXSta
+DTXValFromBS
+
+ +

+

    +
  • +aaaaaaaaaaaa: information, whether the phone uses DTX: + +

    +

      +
    • DTX:ON - yes, it uses
    • +
    • DTX:OFF - no, it doesn't use
    • +
    • DTX:DEF - yes or not (depends on default setting - bbb parameter)
    • +
    • NOTALLOWED - the phone cannot independently decide to use DTX or not (BTS doesn't allow this)
    • +
    +

    +

  • + +
  • bbb - default DTX setting: ON or OFF.
  • + +
  • +ccc - DTX value from BTS +(on uplink - a channel used in communication in direction phone-BTS): + +

    +

      +
    • MAY - BTS lets the phone "decide", whether to use DTX or not
    • +
    • USE - BTS forces DTX usage
    • +
    • NOT - BTS doesn't allow to use DTX
    • +
    +

    +

  • + +
+ +

If the phone after power on wasn't logged to any network, some default values are displayed here. + +

+ + + + + + +
If BTS allows this (if the last parameter's +value is MAY), you can decide whether to use DTX +or not by entering this menu in a direct mode. +
+ +

Menu 10-14 +
By entering this menu in direct mode, you can change aa parameter value from 01 (default) to 00 (or vice versa). + +

+ + + + + + +
+ + + + +
 SCREENING  
+ INDICATOR
+   IS aa
+
+ + + + +
Use menu to 
+  change
+ Screening
+ indicator
+
+ +

Menu 10-15 +
This test is available in Nokia 5190 (digital GSM phone, +which can also work (with additional module) in analog AMPS). +Tested phone didn't have this module (it's put between phone and battery) and that's +why I don't have any additional information about this test... + +

+ + + + + + +
+ + + + +
+AMPS display
+not
+available
+
+
+ + + + +
+CH RxL TxPwr
+MdSt SAT DCC
+ST   TxA RxA
+  CS STATE +
+
+ +

Menu 10-17 +
This menu lets the phone test one concrete channel used in communication +with cell (the phone doesn't seek channel with the strongest signal, but uses +the channel chosen by you: you can use channels 1-124 for GSM 900 +and 512-885 for GSM 1800). Each GSM network has its own assigned channels +from these ranges (which means that each two networks in one country can't +use the same channels - for example, in Poland Plus GSM +cannot use Era GSM channels and vice versa). + +

+

+ + + + + + + + + +
GSM 900
GSM 1800
TIM (222-01)
8-64 (16 most important cities) or 8-50 (outside them)
736-760
Omnitel (222-10)
66-118 (16 most important cities) or 77-118 (outside them)
861-885
Wind (222-88)
52-75 (outside 16 most important cities)
761-810
Blu (222-??)
-
811-860
Plus GSM (260-01)
1-14 and 37-67 (37 and 67 for testing)
750 - 760, 852 - 884 ?
Era GSM (260-02)
15-36 and 68-90 (15 and 36 for testing)
736 - 748, 811 - 844 ?
Idea (260-03)
91 - 122 (target)
763 - 810
+
+ +

You can enter numbers of channels belonging to any network (if you enter +a channel of forbidden network, you will see all network parameters, +but obviously you won't be able to establish connection (except for +emergency calls)). After enabling this test your phone won't be able to make +handovers. + +

To enable this test, proceed as follows (sometimes this procedure doesn't +work - but turning the phone off and then on often helps; I don't know why): + +

+

    +
  • +save (change) desired channel number on position number 33 of the SIM card's +phone book (not in phone's memory!) - +if you save '0' there, this test will be inactive! +However, this step is not necessary, if this number was stored there earlier - +you can check this with 33# code).
  • + +
  • go to Menu 10-17
  • + +
  • once again enter Menu 10-17 directly
  • + +
  • switch your phone off and then back on
  • +
+ +

To disable this test: + +

+

    +
  • enter Menu 10-17 directly
  • + +
  • switch the phone off and back on (sometimes it isn't needed - +phone should disable test, when loose signal on this channel; +but it's better to do that to avoid potential problems) +
  • +
+ +

Some interesting results can be achieved, when (guess why ?): + +

+

    +
  • you enable this test
  • + +
  • then you switch Menu 10-19 to REVERSE
  • + +
  • turn off the test, but not the phone (by entering Menu 10-17 one time in a direct mode)
  • +
+ +

In this case the phone "jumps" from one channel to another and monitors +channels of different networks - you can see LAC and CID codes of the cells. +Furthermore, the phone cannot log to its home network (though it displays +parameters of its channels). Several times I got "Insert SIM card" or +"SIM card rejected" messages - it may be some bug in firmware. After turning +the phone off and then on everything works fine. + +

+ + + + + + +
The above tip can be used for fast battery discharging (however your phone +won't be accesible in the network). + +

If you want to check some informations about different than your network, you +can use different tip too: + +

    +
  1. select the test, where will be displayed interesting for you information +about this network
  2. +
  3. go to the manual network selection (for example, Menu 4-2-4-2 in Nokia +5110)
  4. +
  5. select interesting for you network
  6. +
  7. wait few seconds (some time is required to start logging into this network) +and press "Quit" (NOT (c) key) or wait, until phone will display any message +(for example, that logging wasn't successfull)
  8. +
  9. press fast (c) key to leave phone's menu
  10. +
+ +

Information about interesting for you network will be displayed during few seconds... + +

+ +

I heard about some cases, when this test turned itself spontaneously on +after loosing the signal by the phone. I didn't experience this, but if this +has ever happened to you, just save 0 on 33rd position of the SIM card's phone +book. + +

+ + + + + + +
Since Nokia 51xx/61xx phones don't allow choosing the position for the phonebook entry, +I want to suggest: + +
    +
  1. check whether you already have some number stored on this position +(using 33# code)
  2. + +
  3. +if the phone displays 'Invalid location', you have to add new entries to the +phonebook until you hit this position and the phone doesn't display this +message (repeating 1st step after each new entry) +
  4. + +
  5. +after displaying the number, you have to find out who's number is this. +You can do it in two ways: + +

    +

      +
    1. +just recall (or check the whole phonebook) +
    2. + +
    3. +turn off the transmitter in +Menu 10-45 and call this number +(the name assigned to this number will be show on screen - you will also find +it on the 'Last dialed' list) +
    4. +
    +

    +

  6. + +
  7. +edit the phone book (this position) - you can change the name or the (channel) number +
  8. + +
  9. +if the phone asks you, whether to replace the old number or to save it on new location, choose the former option +
  10. +
+ +

+To store number on chosen location you can also use other Nokia phone +(for example 2110), other cellular phones or appropriate software. +For example: in Nokia Cellular Data Suite you can export list of phone numbers +to file, open it in editor, change and upload to phone. It's simple, isn't it ? +

+ +

+

+ + + + + +
+ + + + +
+
  BTS TEST  
+    aaa
+
+ + + + +
Use menu to 
+toggle BTS
+test ON/OFF
+
+ +

+

    +
  • +aaa - can be set to "ON" or "OFF"
  • +
+ +

+ + + + + + +
This test can be very usefull when: + +

+

    +
  • +you want to use some particular cell (for example to test whether it is +possible to use a cell located 20 km away) +
  • + +
  • +you'd like to avoid roaming (which is much more expensive) - for example +when you are close to the border (and the phone constantly logs to the network +of the neighbor country, because it has a stronger signal) - you just switch +your phone to the channel used by your network... +
  • + +
  • +other available network has very strong signal (for example -85 dBm) and the +signal of your home network is very weak (-100 dBm) - your phone can have +serious problems with logging to your network until you use this test +
  • + +
  • +you want to monitor the state of some very weak channel - I received some mails, that +the lowest measured with this method signal strength was -118 dBm +
  • +
+
+ +

Many users of Nokia 3210 say, that in this model there are problems with enabling +and disabling this test - part of firmware connected with it has probably some bug(s)... + +

Menu 10-18 + +

+ + + + + + +
This menu allows you to turn on constant backlight of the screen and keyboard +(LIGHTS ON). This can be used for very fast battery discharging. We can also +use it as a flashlight - for example to check a schedule, your location on a +map, to be visible on the road :-), etc. But there is one condition: +any of the NetMonitor tests must be visible on the screen. + +

If you turn this test on and then back off, the light will go out +(it won't react on key presses) for several minutes (good for games - +saves battery)... + +

The light can be also constantly enabled, if you connect a car kit +(or simulate it - check Menu 10-75) +and "Light" setting (Menu 2-5 in Nokia 5110) will be set to "All". +This will work without NetMonitor (and any of its test) enabled! +

+ +

Changes to this menu can be made by entering it directly. + +

+

+ + + + + +
+ + + + +
+
   LIGHTS   
+    aaa
+
+ + + + +
Use menu to 
+  toggle
+  lights
+  ON/OFF
+
+ +

+

    +
  • +aaa - can be set to either "ON" or "OFF" (default)
  • +
+

+ +Menu 10-19 + +

+ + + + + + +
Each operator before giving a new or repaired base station +(BTS) for normal use, tests its cells. +GSM phones read this information and avoid using these cells. However, using +this menu, you can set your phone to use such cells, too +(DISCARD option) - sometimes it allows you to "improve" the coverage and range of your +network . + +

If you want your phone to use only such barred cells, just set this menu to +REVERSE (but you won't be able to make or receive calls if there are no tested +cells in your neighborhood - good phone lock ?). + +

ACCEPTED means that your phone uses only normal cells, which are allowed for use +(it works like any other phone). +

+ +

Information about cell status is broadcasted on BCCH +channel as a CELL_BARRED parameter value. The settings of this menu can be +changed by entering it directly (but if you have previously enabled test in +Menu 10-17, current cell may have other status +than the chosen here (for example: you chosen barred cells only, but the phone +uses a normal one)). + +

New settings are applied during next signal quality measurements (you can +advance this by making a call, forcing the phone to search for a network or +by holding the antenna with fingers for certain amount of time). + +

Sometimes your phone may not be able to find cells with particular status +- it will show parameters of the cells with such status belonging to other +network (once I've set this menu to REVERSE and the phone started displaying +data of barred cells in forbidden for my SIM card network, because there were +no tested my home network cells in my neighborhood). Information about cell +status can be found in Menu 10-1 to +Menu 10-5. + +

+

+ + + + + + + + + +
+ + + + +
+
  CELL BARR 
+  ACCEPTED
+ +

The phone works as any other GSM phone (default) - only normal cells +

+ + + + +
+
  CELL BARR 
+  REVERSE
+ +

The phone uses only tested cells

+ + + + +
+
  CELL BARR 
+  DISCARD
+ +

The phone uses all existing cells (both normal and barred ones)

+ + + + +
Use menu to 
+toggle cell
+barr status
+DIS/ACC/REV
+
+ +

Menu 10-20 +
Information about battery and phone charger mode + +

+ + + + + + +
+ + + + +
 aaa   bbbbb
+Tccc     ddd
+Ceee    Wfff
+gggg    hhhh
+
+ + + + +
BatVol ChMod
+BTemp ChTime
+ChrgVol Pwm
+ BTyp  BFDC
+
+ +

+

    +
  • +aaa - battery voltage (V/100 - for instance 7.19V is displayed as 719). +Range 0.00 - 9.99 V +
  • + +
  • +bbbbb - information about battery charging: + +

    +

      +
    • xxxxx - charger not connected or charging disabled
    • +
    • BatCk - checking battery charge level (after each +TCH channel usage (a call) when charging NiMH battery)
    • +
    • BSIFa - charging interrupted (battery BSI +(Battery Size Indicator: one of battery connectors connected +with ground (BGND) to resistor inside battery - phone measure its +opór and can read battery type)) +measurement failed) +
    • +
    • CelBr - charging interrupted (one or more cells broken inside battery)
    • +
    • ChaCk - EM checks charger
    • +
    • Charg - charging
    • +
    • ColdC - charging a cold battery
    • +
    • ColdM - battery is cold, maintenance charging
    • +
    • CurFa - charging interrupted (charger current measurement failed)
    • +
    • DisCh - discharging
    • +
    • Faile - error
    • +
    • FastC - fast charging
    • +
    • FullM - battery full, maintenance charging
    • +
    • F_Che - checking fast charging process
    • +
    • HotM  - battery is hot, maintenance charging
    • +
    • I_Che - initialization of charging parameters test (then the phone displays 'Charging')
    • +
    • InitC - charging process initialization
    • +
    • L_Che - checking parameters of LiIon battery charging
    • +
    • LiAFu - fff parameter (Pwm) level is higher than max limit for a full battery
    • +
    • LiDCH - DCH charging (some kind of maintenance charging ?) of LiION battery
    • +
    • LiFul - fff (Pwm) parameter exceeded the max limit for a full battery during given period of time
    • +
    • LiHot - charging hot (warm) LiION battery
    • +
    • LithC - charging LiION battery
    • +
    • LiTxO - charging LiION battery, transmitter active (connection in progress)
    • +
    • LNFTx - charging LiION battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
    • +
    • M_Che - maintenance charging process test
    • +
    • MaBFD - maintenance charging (BFD)
    • +
    • Maint - maintenance charging
    • +
    • TmpFa - charging interrupted (phone's wasn't able to read natê¿enie +of resistor NTC inside battery connected to BTEMP and BGND battery connectors +and wasn't able to calculate battery temperature)
    • +
    • TxNoF - charging NiMH battery (but the phone uses as much power, as it receives from charger), transmitter active (connection in progress)
    • +
    • TxOnC - charging NiMH battery, transmitter active (connection in progress)
    • +
    • VolFa - charging interrupted (error checking voltage from charger)
    • +
    +

    +

  • + +
  • +ccc - battery temperature (for example T+27 means +27 degrees centigrade). +Sometimes (when the phone was turned off and not used for a long time +(no connections, low power consumption), this parameter can match outdoor +temperature (so you will have a thermometer). If you need a temperature in +Fahrenheit degrees, you can use following formula: F = 32 + 9C/5 +(where F and C are Fahrenheit and Celsius degrees). The temperature of LiION +battery is also given in Menu 10-23.
  • + +
  • +ddd - charging time in hours (first digit) and minutes (2 last digits). +This counter is cleared when charging process begins (but not always - +it doesn't happen if: + +

    +

      +
    • +previous charging process wasn't complete +
    • + +
    • +mains parameters don't meet some requirements +
    • +
    + +

    I have also experienced that Nokia 6110 doesn't clear this counter after +changing the battery (for example from LiION to NiMH). It continues after +connecting the charger and stops when the battery is full or when you +disconnect the charger. +

  • + +
  • +eee - charging voltage (V/100). The battery isn't charged with a direct +current, but with a pulse current (this indicator constantly changes). +Range 0.0 - 18.7 V. When charging is complete, maintenance charging begins. +
  • + +
  • +fff - Charge control output (decimal - range 000 - 255)
  • + +
  • +ggg - capacity of the battery in mAh (some English descriptions and +NetMonitor help in Nokia 3110 write, that it's BSI battery multiplied by 4): +in case of LiION battery you will find here the same value as on battery casing +in NiMH batteries this value can differ even by 200 mAh and change depending +on the temperature (it it connected with battery's memory effect ?) +
  • + +
  • +hhhh - this counter lets us calculate remaining charging time: when charging +current is less than predefined limit, this timer will be started. +If timer reaches 0, charging will be stopped (it should be according to +some English descriptions, but I observed it very rarely). +
  • +
+ +

In Nokia 3110 this menu looks as follows: + +

+ + + + + + +
+ + + + +
  aaa  bbbbb
+ Tccc   ddd
+ Ceee  Wfff
+w gggg hhhh z
+
+ + + + +
BatVol ChMode
+BTemp ChrTime
+ChrgVol  Pwm
+S 4BSI BFDC B
+
+ +

+

    +
  • +bbbbb - in N3110 this field can additionally contain NOTCH (no charging)
  • +
+ +

In Nokia 9110 this menu looks as follows: + +

+ + + + + + +
+ + + + +
aaa   bbbbbb
+Tccc    ddd
+i Ceee  Wfff
+ gggg   hhhh
+
+ + + + +
BatVol  ChMod
+BTemp   ChTime
+ChrgVol Pwm
+BTyp    BFDC
+
+ +

+

    +
  • +i - information, whether travel charger is connected (1) or not (0)
  • +
+ +

Fast charging (FastC in NetMonitor) means charging with bigger current +and with clever charger it doesn't damage your battery. + +

When battery charging is ended, maintenance charging starts +(it's normal, that phone uses some energy and battery's discharging process +starts; still connected charger can complete energy losses). + +

In Polish version of this manual you can also find links to some pages +in Polish language explaining some topics connected with charging and batteries. + +

For curious people: some of the data, which are displayed here, can also be +found in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). + +

+ + + + + + +
This test allows us to check the charger. You can also verify some of the battery parameters like: +
    +
  • +capacity
  • + +
  • +efficiency (of the battery cells)
  • + +
  • +voltage (if you are - say - on a trip, here you can check whether battery voltage is suitable for your flashlight)
  • +
+
+ +

Menu 10-21 +
Charging parameters (I noticed, that these values are correct only after +making a call while charging - they change only then (after ending call display +last registred values)) + +

+ + + + + + +
+ + + + +
 aaaa  bbbb 
+  ccc   ddd
+  eee   fff
+
+ + + + +
MTDif MPDif
+BUpV  BDownV
+AverV SumMF
+
+ +

+

    +
  • +aaaa - difference between measured and required charging voltage
  • + +
  • +bbbb - difference between measured voltage and the result of the +previous measurement, fraction is not displayed
  • + +
  • +ccc - the highest measured voltage in battery (with charging battery and +using it in the same time it can change) +
  • + +
  • +ddd - the lowest measured voltage in battery
  • + +
  • +eee - average voltage
  • + +
  • +fff - the sum of the parameters from Menu 10-22 +(range 0.00 - 9.99, for example 1.53 is displayed as 153) - my own observations +show, that DerivCount (Eaaa) parameter is not counted here. If this counter +reaches 1.00 or 0.99, 'Battery full' message is displayed and bar indicator +on the right side of the display stops. +
  • +
+ +

Menu 10-22 +
Charging parameters and indicators + +

+ + + + + + +
+ + + + +
 Eaaa  Cbbb 
+ Dccc  Rddd 
+ Ieee  Afff 
+ Tggg  Vhhh
+
+ + + + +
DeriC ChAm
+ VDif VDrop 
+ VDTi AvDif
+ Temp Volt
+
+ +

+

    +
  • aaa - DerivCount
  • +
  • bbb - ChargeAmount
  • +
  • ccc - VolDiffToMax
  • +
  • ddd - VolDropCnt
  • +
  • eee - VolDiffTime
  • +
  • fff - AverDiff
  • +
  • ggg - temperature
  • +
  • hhh - voltage
  • +
+ +

Here you can find several charging parameters and indicators. +All these fields (except for DerivCount) range is from 0.00 to 1.00 +(dot is not shown - for example 0.23 is displayed as 023). After disconnecting +the charger these fields can contain various values. Letters E, C, D, R, I, +A, T and V are displayed when the number is shorter than four digits. + +

Menu 10-23 +
Information about the battery + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eee fff gggg
+hhh iiiijjjj
+
+ + + + +
TxOn   TxOff
+ChCur  Stdby
+Age CAP Curr
+Tmp CmAhTarg
+
+ +

+

    +
  • +aaaa - voltage from the battery when transmitter is active (a.aaa mV)
  • + +
  • +bbbb - voltage from the battery when transmitter is inactive (b.bbb mV)
  • + +
  • +cccc - charging current (c.ccc mA). If the charger is not connected, 0 is shown. +In Nokia 3210 ALWAYS equal 0 (I think, that firmware in this model has some bug).
  • + +
  • +dddd - expected voltage from the battery in standby mode (d.ddd mV). You can +check whether your SIM card 's clock can be stopped in +Menu 10-51.
  • + +
  • +eee - estimate battery age (0 - new, 100 - old) for LiION batteries (the +value of this counter is probably based on measurements of work/discharging +time of the battery and its capacity (shown in Menu 10-20); +this is only a reference!) or 33 for NiMH batteries.
  • + +
  • +fff - battery charge level (25 - 1 bar, 50 - 2 bars, 75 - 3, 100 - 4 bars on +the right side of the screen). This indicator (and parameter) is very +inaccurate during charging process (it reaches 100 almost immediately) - +better use ii and jjj parameters then. +
  • + +
  • +gggg - temporary power consumption indicated by PSM (according to some +English descriptions in decimal parts of mA; I think that this field shows +values in mA - see on calculation of approximate battery work time below) +
  • + +
  • +hhh - LiION battery temperature (also shown in Menu 10-20 +- sometimes both these indicators are different) or 0 (for NiMH battery) +
  • + +
  • +iiii - how many mAh were "loaded" to the battery until now. If it is approximately +equal to jjj, the latter parameter raises (or charging is complete). This parameter +is cleared after each use of TCH channel +(for example: after a call) while charging (with NiMH battery) - you can use +this tip to extend charging time almost ad infinitum. I noticed it with Nokia 6110 +and LiION battery (when I turned off and on phone during charging process) too. +This value is updated every 14 seconds (Nokia 5110 with standard charger). +
  • + +
  • +jjjj - battery capacity value (in mAh) by which next charging stage is complete +(see description of the previous parameter). I noticed, that it's cleared +during LiION battery charging (when I turned off and on phone during charging +process) in Nokia 6110. +
  • +
+ +

For curious: some of the data, which are displayed here, can also be found +in Nokia service programs (like WinTesla - menu "Testing" / "ADC Readings..."). + +

+ + + + + + +
Here you can check your battery type (LiION or NiMH). +
+ +

Approximate power consumption (this can be changed and modified by many other factors) while using individual channels +(Nokia 5xxx and 6xxx): + +

+

    +
  • +during transmission (TX parameter value - phone transmission power - can be +checked in Menu 10-1) - using +SDCC and TFR channels (Nokia 6110): + +

    + + + + + + + + + + + + + + +
    TXpower consumption (gg parameter)
    over 1992
    16-1899
    14-15105
    13114
    12123
    11136
    10151
    9173
    8198
    7232
    6269
    5300
    + +

    Conclusion: battery work time depends in a very high degree on the network +parameters (most advertising materials contain standby time measured for the +phone transmitting with lowest power (highest TX)). +

  • + +
  • +AGCH: 310 mA in Nokia 5110 and 6110
  • + +
  • +CCCH i CBCH: +Nokia 6110 phones with older software (like 4.73) show 20 and 34 accordingly. +I don't know whether this is caused by some bug in their firmware (these values +are most probably given in mA/10) or the power consumption is really that high +(because Nokia 5130 shows 34 too). +Anyway, I checked, that Nokia 5110 (and 6110 v5.31) phones display 3 mA while +using CCCH channel. I think that turning off +"cell broadcasting" (if it is not supported by your network) can be very +"profitable" for your phone (longer standby time etc.) - look +here). When the phone collects +BTS identification data +(for BTS, which will be now used - has stronger +signal than previous - see C2 description +for details), this value changes to 220 mA (but only for a short while). +
  • + +
  • +NSPS: 55 in both Nokia 5110 and 6110 (is this value +in mA or in mA/10 ?) +
  • +
+ +

Turning on backlight takes 90 mA more, and while charging another 17 mA should be added. + +

In Nokia 3210 these data are different for different person (does it depend on firmware version, +frequency ?) + + + + + + +
standbyreading BTS identification dataturning on backlight
52 mA90 mA+155 mA
8 or 9 mA?+159 or +160 mA
53, sometimes (rarely, during short time) 8 mA93 mA+158 or +159 mA
8 mA?+154 mA
+ +

+ + + + + + +
If you know the power consumption, you can calculate approximate battery work time: +
    +
  • +900 mAh / 225 mA = 4 hours of talk time (on average)
  • + +
    Please note, that when using SDCC channel +the phone initially uses full power and the gradually reduces it. + +
  • +900 mAh / 5,45 mA = 165 hours of standby time (on average)
  • + +
    Remember, that the phone makes PLU even in standby mode. +
+
+ +

Menu 10-24 + +

+ + + + + + +
+ + + + +
+3476    3481
+BSI:     551
+ET:        9
+  111      1
+
+ + + + +
V_inst V_avg
+BSI value
+Elapsed time
+RST_m  RST_h
+
+ +

Menu 10-25 + +

+ + + + + + +
+ + + + +
+    0      1
+10059
+ 5664    641
+    1      0 +
+
+ + + + +
+Chrgtp #Bars
+alpha
+zeta     phi
+noblw  nobcr +
+
+ +
+Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net4.html b/xgnokii/docs/help/en_US/netmon/faq_net4.html new file mode 100644 index 0000000..e241d1d --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net4.html @@ -0,0 +1,1908 @@ + + + + + + + + + + NetMonitor in Nokia phones (5/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (5/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

Menu 10-30 +
Audio API register display + +

+ + + + + + +
+ + + + +
 aaaa bbbb
+ cccc dddd
+ eeee ffff
+ gggg hhhh  
+
+ + + + +
A1Cnf  A2Cnf
+  ST   AU3
+1Tone  2Tone
+ Conf  HFVol
+
+ +

+

    +
  • aaaa - API_AUD1_CTRL
  • +
  • bbbb - API_AUD2_CTRL
  • +
  • cccc - API_SIDETONE
  • +
  • dddd - API_AU3
  • +
  • eeee and ffff - API_1_TONE and API_2_TONE (see description below)
  • + +
  • +gggg - API_CONFIG: connected with sound setting from +Menu 10-71 and 10-72: +you will see here number (hexadecimal), +which was displayed there below AUDIO ENHANCEMENT (in last selected menu). +Here are some examples: + +

    + + + + + + + + + + +
    normally (for example during standby)wybieranie numerucall
    5148 (cracks) - 20808 decimal51495140
    851A - 34074 decimal851B8512
    C6A4 (cracks) - 50852 decimalC6ADC6A4
    DB34 (cracks) - 56116 decimalDB3DDB34
    DF29 (after enabling phone) - 57129 decimalDF29DF20
    F436 - 62518 decimalF43FF436
    F437 - 62519 decimalF43FF436
    +

    +

  • + +
  • +

    hhhh - API_HF_VOL: volume during call - you will count it from +the "110 - hhhh" formula (subtract value of this parameter from 110). +It's displayed too (during call only) in +Menu 10-76. +When you connect headset, values here change - volume can be count +from "510 - hhhh" formula then (for car kit use "2210 - hhhh"). +Type of connected audio accesories can be checked in +Menu 10-75 too. +Phone remembers volume for each audio accesory separately. +

  • +
+ +

When you press any key, phone generates sound, which consist of two tones. +Parameters eeee and ffff change then. First tone is short, second is emited +all time, when you press key. When you press C, NaviKey, Up or Down +keys, change parameter eeee only (value 0E10 - 3600 decimal) - +sound consist of one tone only. And now the most important thing: +you will divide displayed in these parameters values by 4, +you will have frequencies in Hz conncected with pressing adequate keys in +DTMF (Dual Tone Multi Frequency) system. +I think, you use DTMF very often - it's used in tone system in all +modern phones during calling number. Adequate values are in table (decimal) +- parameter eeee is connected with vertical values, ffff with horizontal: + +

+ + + + + + +
1209 Hz1336 Hz1477 Hz
697 Hz123
770 Hz456
852 Hz789
941 Hz#0*
+ +

Menu 10-34 +
Information about FBUS connection between phone and computer. + +

+ + + + + + +
+ + + + +
aa bb cc dd
+eee fff ggg
+hhh iii jjj 
+k
+
+ + + + +
CM LD LM NM 
+PEC FEC OEC
+ACC RXS TXS 
+Mod
+
+ +

+

    +
  • aa - current fbus media in hex
  • +
  • bb - last sender dev in hex
  • +
  • cc - last sender media in hex
  • +
  • dd - next media to be connected. Same as aa if the connection is not pending
  • +
  • eee - fbus parity error counter
  • +
  • fff - fbus framing error counter
  • +
  • ggg - fbus overrun error counter
  • +
  • hhh - fbus alive check counter
  • +
  • iii - received sequence number
  • +
  • jjj - sent sequence number
  • +
  • k - phone mode: S=slave, H=host
  • +
+ +

Description above is from some English documents. As you can see in some phones +(like Nokia 5110) values in this test looks rather different, but help is the same. +But, when you make connection with FBUS cable and make transmission, first line of values +in this test changes to "1E0C1E -". When you will look into some +FBUS protocol descriptions, +you will see, that: + +

    +
  • "1E" could mean datas send with FBUS protocol over cable
  • +
  • "0C" could mean, that FBUS cable is connected to phone
  • +
+ +

and it's the truth. So, it means, that this description is real (even, that +test looks a little different). + +

In Nokia 9110 this menu looks different: + +

+ + + + + + +
+ + + + +
ll mm nn oo 
+ee ff gg
+p  q
+r s tt
+
+ + + + +
PA RS DR PR 
+PE FE OE
+Rx Tx
+D U DC
+
+ +

+

    +
  • +p and q are probably iii and jjj
  • +
+ +

Links to pages with FBUS (MBUS) protocol are in the question 25. + +

+ + + + + + +
If values in this test changed after enabling phone, it means, that +it was connected to computer and datas were transmitted with +FBUS protocol (not MBUS).
+ +

Menu 10-35 +
Reason of last reboting internal firmware of phone. + +

+ + + + + + +
+ + + + +
 aaaaa      
+ bbbbbbbb

+
+ + + + +
Reset reason
+Task name

+
+ +

+

    +
  • aa - reason: + +

    +

      +
    • NORM: probably normal power up
    • +
    • UNKNO: default value, reset reason is unknown
    • +
    • SWSIM: SIM contact failure reset
    • +
    • STACK: task stack overflow
    • +
    • SWIDL: idle task not running reset
    • +
    • HW lub WD: ASIC watchdog timeout
    • +
    • SWDSP: restart DSP recovery reset
    • +
    +

    +

  • + +
  • +bbbbbbbb - name of running task before reset (for example, +"AUD TASK", +"CC TASK" (confirmed), +"DDI TASK", +"DEV IO" (confirmed), +"EM TASK", +"FBUSTASK" (confirmed), +"L1 CONTR", +"L1 MEAS", +"L1 SYSPA" (confirmed), +"L2 TASK", +"LOCAL" (potwierdzone), +"MDI RECE" (confirmed), +"MDI SEND" (confirmed), +"MM TASK" (confirmed), +"OS IDLE" (confirmed), +"PN TASK" (confirmed), +"RR TASK" (confirmed), +"RM TASK", +"SIM L2" (confirmed), +"SIM UPL" (confirmed), +"SMS TASK" (confirmed), +"TONETASK", +"UI TASK" (confirmed) +or "UNKNOWN" (confirmed)). We can notice, that tasks names are similiar to +names in help to tests 84-86.
  • +
+ +

Menu 10-36 +
Reasons of last reboting internal firmware of phone (you will +find here information, how many times phone made restarts because of reasons +from previous test). + +

+ + + + + + +
+ + + + +
 aa  bb  cc 
+ dd  ee  ff

+
+ + + + +
 UN  WD DSP 
+SIM IDL STK

+
+ +

+

    +
  • aa - unknown resets
  • +
  • bb - ASIC watchdog timeout resets (in some +you can simulate it - see question 9 for details)
  • +
  • cc - DSP recovery resets
  • + +
  • +dd - some English descriptions say, that it's connected with +SIM contact failure reset (in some phones you can force reset because of this reason +- see question 9). I noticed too, that this counter +increases when to try to enter mastercode connected with simlock level 1 +using #pw+2222222222+1# code (where mastercode is instead of 2222222222). +
  • + +
  • ee - idle task not running resets
  • + +
  • ff - task stack overflow resets
  • +
+ +

Counters are stored to EEPROM. + +

+ + + + + + +
You can reset counters from this menu using some Nokia service programs +- for example, in Pc-Locals 1.3 enter to menu 8 ("Event Trace"), +menu 5 ("Permanent Counter Table...") and press F6 key ("Clear Counters"). +Unfortunatelly :(, "real" counters connected with mastercode entering attempts +(Counter for example in WinTesla and WinLock) don't reset then... +
+ +

Menu 10-38 +
Memory dump + +

+ + + + + + +
+ + + + +
aaaaaaaaaaaa
+aaaaaaaaaaaa
+aaaaaaaaaaaa
+aaaaaaaaaaaa
+
+ + + + +
Memory dump 

+
+ +

+

    +
  • aaaa.... - hex dump of 24 successive memory locations
  • +
+ +

The start address of the dump is entered as 6 digit address value +into location 30 into phonebook on SIM card (information, how to make it, +are in Menu 10-17). +An example: for address 0x0C89AB enter 0C2089AB value there... +Dump address is changed only when you directly enter to this menu. + +

This display rather is not included in offcial firmware (I found only one +phone with it). It can be switched on by defining flag DEV_FT_MEMORY_DUMP_IN_USE in ftd_conf.h. + +

Menu 10-39 +
Reason of last connection end (asterisk means, that the diagnosis won't be sent to the +network - it'll be only shown in phone) and making +Location Update: + +

+ + + + + + +
+ + + + +
 CC:   aaa  
+ MM:   bbb
+ RR:   ccc
+
+ + + + +
CC CauseValu
+MM CauseValu
+RR CauseValu
+
+ +

+

    +
  • +reason from the CallControl-Layer - it's displayed in +Menu 10-2 and +Menu 10-63 too: + +

    +

      +
    1. +from the GSM specifications (section 10.5.4.11/GSM 04.08): + +

      +

        +
      • + 1: unassigned (unallocated) number
      • + +
      • + 3: no route to destination
      • + +
      • + 8: operator determined barring
      • + +
      • +16: normal end of call (you were speaking or you heard some +text - that dialled number was busy or something similiar) +
      • + +
      • +17: user busy + +

        +

          +
        • +if it was outgoing call, dialled number was busy (phone even displayed +'Number busy')
        • + +
        • +if it was incoming call, a man, who dialled to you, heard busy signal +- you were speaking or you rejected it (in Nokia 5110 or 5130 to make +it you have to press C key, in Nokia 6110, 6130 or 6150 red receiver) +
        • +
        +

        +

      • + +
      • +18: no user responding
      • + +
      • +19: user alerting (from specification - I had it +with normal connection too (phone displayed +'No answer' ('Nie odpowiada')) or when incoming call was diverted to +voice mailbox), no answer +
      • + +
      • +21: call rejected + +

        +

          +
        • +phone wasn't in network coverage (message 'No coverage network'), when you +tried to make call +
        • + +
        • +you tried to call to non existing phone number or you heard busy signal +
        • +
        +

        +

      • + +
      • +22: number changed
      • + +
      • +27: destination out of order
      • + +
      • +28: invalid number format/number incomplete
      • + +
      • +31: unspecidied. It seems, that with this error connection +is end by network (for example, when it's overcharged)
      • + +
      • +34: no circuit/channel available to make call. Phone displayed +'Network busy'. I noticed too, that in my network RR value changed to +1 with this error. More about situations, when network is busy, I write +in TS description.
      • + +
      • +38: network out of order
      • + +
      • +41: temporary failure
      • + +
      • +42: switching equipment congestion
      • + +
      • +44: requested channel not available
      • + +
      • +47: ressource unavailable. I had it, when connection was "brutal" broken. +Concrete: during call phone of my interlocutor disabled because of empty battery. +My phone displayed 'Error in connection'
      • + +
      • +50: requested facility not subscribed +(you must subscribe it to use it)
      • + +
      • +65: bearer service not implemented
      • + +
      • +68: ACM equal to or greater than ACMmax
      • + +
      • +69: requested facility not implemented
      • + +
      • +88: incompatible destination
      • + +
      +

      +

    2. + +
    3. +from mine (and not only) experiences: + +

      +

        + +
      • +79: error with message 'Check operator services'. +You have it, when you enable ALS (Alternative Line Service) function, +don't have second number on SIM card, select it and try to make call +
      • + +
      +

      +

    +
  • + + +
  • +reason from the MobilityManagement-Layer +- it's shown in Menu 10-64 too. +It's from GSM specification (section 10.5.3.6/GSM 04.08): + +

    +

      +
    • + 2: IMSI unknown in HLR +(SIM card not active in network)
    • + +
    • + 3: illegal phone
    • + +
    • + 4: IMSI unknown in VLR
    • + +
    • + 5: phone's IMEI was not accepted
    • + +
    • + 6: illegal ME
    • + +
    • +11: PLMN not allowed (you tried to log into +network, which doesn't have roaming convention with your home network - your phone +displays 'No access', when you try to select it manually; I don't know only, if +this code is displayed only, when this network is saved on forbidden list on SIM +card (see Menu 10-6)
    • + +
    • +12: Location Area not allowed. You can check it in Menu 10-11.
    • + +
    • +13: roaming not allowed in this Location Area
    • + +
    • +17: network failure
    • + +
    • +22: network congestion
    • + +
    • +32: service option not supported
    • + +
    • +33: service option not subscribed
    • + +
    • +34: service temporarily out of order
    • + +
    • +38: call cannot be identified (call RE)

    • + +
    + +
  • +reason from RadioRessourceManagement-Layer) +- see GSM specifications: section 10.5.2.31/GSM 04.08: + +

    +

      +
    • +  0: normal release
    • + +
    • +  1: unspecified
    • + +
    • +  2: channel unacceptable
    • + +
    • +  3: timer expired
    • + +
    • +  4: no activity on the radio path
    • + +
    • +  5: Pre-emptive release
    • + +
    • +  8: handover impossible, +TA out of range
    • + +
    • +  9: channel mode unacceptable
    • + +
    • + 10: frequency not implemented
    • + +
    • + 65: call already cleared
    • + +
    • + 97: message type not compatible with protocol state
    • + +
    • +101: no cell allocation available
    • + +
    • +111: protocol error unspecified
    • +
    +
  • +
+ +

When you will see "*" before third parameter from this test, it means +(the most often), that call is in progress. Sometimes phone displays different +values - I don't know their meaning :-(. + +

Values of counters are not saved in EEPROM. When phone makes another measure, +doesn't reset them (changes only these values during next measure, which are connected +with it; doesn't change the rest of them). + +

+ + + + + + +
This test allows to find, why exactly your phone doesn't want to work +- doesn't want to make calls.
+ +

Menu 10-40 +
Resets handover counters (by direct enter)... + +

+ + + + + + +
+ + + + +
   RESET
+  HANDOVER  
+  COUNTERS
+
+ + + + +
  Use menu  
+  to reset
+  handover
+  counters
+
+ +

Menu 10-41 +
Information about handover + +

Handover - it's transfer of radio connection +(between phone and cell) from one cell to another (without breaking call). +It's made, when: + +

+

    +
  1. +new radio connecting will give better quality (it's parameters are all the time +checked by phone and base station) +
  2. + +
  3. +when phone is between few cells and can use "new" cells for him +(it frees some place for phones, which can use "old" cell only) +
  4. +
+ +

When they're problems with transmission, decision about handover is made +by phone (otherwise it's made by BSC). +If you enabled using one channel by phone (Menu 10-17), +handovers are not made. + +

There are 4 types of handovers: + +

+

    +
  • +Intra cell - Intra BSC +handover (called handoff too): it's the smallest handover +inside one cell. Receiver is "thrown over" from one channel to another +(gennerally to another frequency inside one cell). Decision, if it should +be done, is made by BSC.
  • + +
  • +Inter cell - Intra BSC handover: +receiver is moved from one cell to another. Decision about it +is made by BSC. Connection with first cell +is broken after moment, when connection with another is made (displacement +between two BTSes inside one +BSC).
  • + +
  • +Inter cell - Inter BSC handover: +displacement of connection between two cells, which are not served by +the same BSC. In this case handover is moved +by MSC, but decision about it made +by first BSC. Connection with first +BSC (and BTS) +is broken before moment, when connection with another BSC +(and BTS) is made. +
  • + +
  • +Inter MSC handover: receiver moves from +cell served by MSC/VLR +to another controlled by another MSC/VLR. +It's more complicated situation. We can notice, that +MSC is connected to GSMc over PSTN. +In this case is visible, that another MSC +can't receive information from first normally. + +

    What will happen, when connection will be moved to target +MSC/VLR ? + +

    Because both MSC belongs to the same network, +connection is kept. To move it from one to another MSC +special number HON (HON=CC+NDC+SN, CC - country code, NDC - network code, +SN - subscriber's number) must be generated. It's similiar to roaming number +(it's connection between two MSC too). During +handover between two MSC connection can't be +broken (phone connection realised by network's subscriber). +

+ +

+ + + + + + +
+ + + + +
HandOOk: aaa
+PrevCh : bbb
+HONotOK: ccc
+HOIntra: ddd
+
+ + + + +
HandOvOKCntr
+PrevChanCntr
+HandOvNOKCnt
+HOIntraOKCnt
+
+ +

+

    +
  • +aaa - counter for successful handovers
  • + +
  • +bbb - counter for successful back to previous channel attempts +(number of actual used channel is displayed, for example, in +Menu 10-1)
  • + +
  • +ccc - counter for failed handovers
  • + +
  • ddd - counter for successful Intra cell - Intra BSC handovers +or assignments
  • +
+ +

Counters will stop when they reach their maximum (999). To initialize them +to zero, use Menu 10-40 (or +Menu 10-60). + +

In dual phones (like Nokia 6150 or 3210) Menu 10-41 looks +different and is connected with Inter cell - Intra BSC, +Inter cell - Inter BSC and Inter MSC handovers: + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eeefffggghhh
+iiijjjkkklll
+
+ + + + +
G>G InterD>D
+G>D  OK  D>G
+InterHoFail
+BackToPrev
+
+ +

+

    +
  • aaa - counter of successful handovers from GSM 900 to GSM 900
  • +
  • bbb -counter of successful handovers from GSM 1800 to GSM 1800
  • +
  • ccc - counter of successful handovers from GSM 900 to GSM 1800
  • +
  • ddd - counter of successful handovers from GSM 1800 to GSM 900
  • +
  • eee - counter of failed handovers from GSM 900 to GSM 900
  • +
  • fff - counter of failed handovers from GSM 1800 to GSM 1800
  • +
  • ggg -counter of failed handovers from GSM 900 to GSM 1800
  • +
  • hhh - counter of failed handovers from GSM 1800 to GSM900
  • + +
  • +iii - counter of successful back to previous channel attempts +(number of actual used channel is displayed, for example, in +Menu 10-1) +from GSM 900 to GSM 900
  • + +
  • jjj - counter of successful back to previous channel attempts from GSM 1800 to GSM 1800
  • + +
  • kkk - counter of successful back to previous channel attempts from GSM 900 to GSM 1800
  • + +
  • lll - counter of successful back to previous channel attempts from GSM 1800 to GSM 900
  • +
+ +

Counters will stop when they reach their maximum (9999 dla dwóch pierwszych +linii, 999 dla dwóch ostatnich). To initialize them to zero, use Menu 10-40 +(or Menu 10-60). + +

In Nokia 3110 this test looks like follows: + +

+ + + + + + +
+ + + + +
HandOOk: aaa 
+PrevCh : bbb 
+HONotOK: ccc 
+T200: eeee
+
+ + + + +
HandOvOKCntr 
+PrevChanCntr 
+HandOvNOKCnt 
+T200Cntr
+
+ +

+

    +
  • +eeee - I write about T200 counter in Menu 10-43
  • +
+ +

and here's for Nokia 6185/6188: + +

+ + + + +
+BSI 01000
+VBAT 388
+BTEMP 018
+BATT 2 CHG 0
+
+ +

    +
  • VBAT - battery voltage (/100V)
  • +
  • BTEMP - battery temperature in C
  • +
  • CHG - battery charge status: 1 - charging, 0 - not charging
  • +
+ +

Menu 10-42 +
This test is in dual phones (for example, Nokia 6150 or 3210) only +and is connected with first kind of handovers +(Intra cell - Intra BSC): + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eeefffggghhh
+iiijjjkkklll
+
+ + + + +
G>G IntraD>D
+G>D  OK  D>G
+IntraHoFail
+BackToPrev
+
+ +

+

+ +

Counters will stop when they reach their maximum (9999 for two first lines, +999 for two last). To initialize them +to zero, use Menu 10-40 +(or Menu 10-60). + +

In Nokia 6185/6188 this test looks like Menu 10-20. + +

Menu 10-43 + +

+ + + + + + +
+ + + + +
T200MS: aaaa
+T200BS: bbbb
+T200MS: cccc
+T200BS: dddd
+
+ + + + +
T200 MS GSM 
+T200 BS GSM
+T200 MS DCS
+T200 BS DCS
+
+ +

+

    +
  • +aaaa - for GSM 900: counts how many times T200 in phone has expired and +therefore L2 transmission has been repeated.
  • + +
  • +bbbb - for GSM 900: counts how many times T200 in BTS (network) has expired +and therefore L2 transmission has been repeated. +
  • + +
  • +cccc - for GSM 1800 called earlier DCS (in dual phones only): counts how many times T200 in phone +has expired and therefore L2 transmission has been repeated. +
  • + +
  • +dddd - for GSM 1800 (in dual phone only): counts how many times T200 in BTSie +(network) has expired and therefore L2 transmission has been repeated.
  • +
+ +

Counters will stop when they reach their maximum (9999 for two first lines, +999 for two last). To initialize them to zero, use Menu +10-40 (or Menu 10-60). + +

In Nokia 6185/6188 this test looks like Menu 10-21. + +

Menu 10-44 +
You change value from 01 (default) to 00 (or vice versa) by direct enter to this test. + +

+ + + + + + +
+ + + + +
+
 REVISION
+LEVEL IS aa 
+
+ + + + +
Use menu to 
+   change
+  Revision
+   Level
+
+ +

In Nokia 6185/6188 this test looks like Menu 10-22. + +

Menu 10-45 +
This test allows to simulate situations. when phone can normally +receive network signal (but network can't receive any information from phone). +It's very realistic (even in Menu +10-1 in ddd parameter an asterisk (*) is displayed, when +you try to make connection), but not always (in +Menu 10-10 you will see +'xxxxxxxx' instead of TMSI, when T3212 counter in first +parameter will be expired). + +

You can change it by direct enter. + +

+

+ + + + + + + +
+ + + + +
+
TRANSMITTER 
+  ENABLED
+ +

(default setting)

+ + + + +
+
TRANSMITTER 
+  DISABLED
+
+ + + + +
Use menu to 
+ enable or
+  disable
+transmitter
+
+ +

+ + + + + + +
When you enable it, phone won't be able, for example, to update +location (see Menu 10-64) and +make calls. It will allow to: + +
    +
  • "blockade" phone to the moment of another enabling it (for example, +when you want to observe network parameters, but you don't want to be +accessible for others - when somebody will call to you, for network +your phone will be outside range) +
  • + +
  • +fast remind you of number written to phonebook (it's written on leaf, +but you don't remember name of person assigned to): simple call it. +When phone will choose number, it will display this name; it will be written +on list odf last dialed numbers too. +
  • +
+
+ +

This test DOESN'T WORK CORRECTLY in Nokia 3210 and 7110 (you change setting, +but it doesn't give described above results). + +

In Nokia 6185/6188 this test looks like Menu 10-23. + +

Menu 10-46 + +

+ + + + +
+BAND CLASS a
+CS SUBSTATE
+EM STATEnnn
+TX POWER DB
+
+ +

Menu 10-48 +
In Nokia 3110 this test looks like Menu 10-7. + +

Menu 10-51 +
Information about SIM card + +

+ + + + + + +
+ + + + +
aaa bbb ccc 
+ dddddddd
+ e f  gg hh
+  i   jjjj
+
+ + + + +
VSel Bau SAl
+SCond  CStop
+PIN12  PUK12
+ ATR  FE/PE
+
+ +

+

    +
  • +aa - SIM voltage selection type (3, 3/5 or 5)
  • + +
  • +bbb - division coefficient, which define speed of communication phone with +SIM card (372, 64, 32 or 0) saved in ATR (first sequence send by SIM card +after reset - Answer To Reset). +When you will divide clock frequency (maximal 3,25 MHz = 3 250 000 Hz) +by it, you will have speed of transmission +(for example, 3 250 000 Hz / 372 = 8736,5 bods)
  • + +
  • +ccc - information, whether SIM clock stop is allowed (it saves energy) +during standby (YES or NOT - possible or not). This information is displayed +(in Nokia phones and not only) using *#SIM0CLOCK# code +- when you will see "SIM clock stop allowed", SIM card allows to make it. +Some Nokia 6110 phones (it depeneds on their firmware) can not support +correctly this code - they display, for example, "Result unknown". +Phone disables SIM card clock automatically - you can't make it manually ! +
  • + +
  • +dddd - information about clock stop condition: + +

    +

      +
    • UP
    • +
    • DOWN
    • +
    • DOWN(UP) - in tested by me SIM cards
    • +
    • UP(DOWN)
    • +
    • xxxxxxxx
    • +
    +

    +

  • + +
  • +e - number of left PIN1 code entering attempts. When it's bigger than 9, +you will see only last digit of it (for example, I found some prepaid cards +with 10 value). Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 3. In some SIM cards +you can disable answering for this code (for example, you can select it in +Menu 4-3-1 in Nokia 5110). When it's equal 0, phone shows +"Sim card blocked" and asks for PUK1. If it was entered correctly, this counter +is reset to maximal value. Disabling and enabling phone doesn't reset it ! +
  • + +
  • +f - number of left PIN2 code entering attempts (when SIM card doesn't support +PIN2 functions, you will see "x" here). You can check, if these functions are supported, +using call cost function too (if they're not, phone displays "Not allowed"). +If you wanted to use them and your card doesn't support them (you will see "x" +here), you (or your operator ;-) rather) have to change it. +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 3. When this counter +is equal 0, phone asks for PUK2. When this code was entered correctly, counter +is reset to maximal value. Of course, even when it's equal 0, you can normally +use SIM card (PIN2/PUK2 are independent of PIN1/PUK1), when you know PIN1. +Disabling and enabling phone doesn't reset it ! +
  • + +
  • +gg - number of left PUK1 code entering attempts. +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 10. +Phone asks for it, when counter of left PIN1 code entering attempts is equal 0 +(phone shows "Sim card blocked"). When this counter is equal 0 too, SIM card +can be blocked (phone shows "Sim card rejected") or (it depends on card) +asks for PUK2. When this code was entered correctly, counters of left PIN1 and +PUK1 codes entering attempts are reset to maximal values. +Disabling and enabling phone doesn't reset it ! +
  • + +
  • +hh - number of left PUK2 code entering attempts (when SIM card doesn't support +PIN2 functions, you will see "x" here). +Maximal number of entering code attempts depends on concrete +SIM card (it can be set to any value), but the most often it's equal 10. +When it's equal 0, using PIN2 functions can be impossible on this SIM card (ask operator for help). +Additionaly, when you were asked for PUK2, when counters of left PIN1 and +PUK1 codes entering attempts were equal 0 and now left PUK2 code entering attempts +is equal 0 too, using this SIM card can be impossible (you have to replace it to new). +When it was entered correctly, counters for this code and PIN2 (when you entered +PUK2, because PIN2 was blocked) are reset to maximal values or counters for this, +PIN1 and PUK1 are reset (when you entered PUK2, because PIN1 and PUK1 were blocked). +Disabling and enabling phone doesn't reset it ! +
  • + +
  • +i - ATR repeat counter (ATR is first sequence sent by SIM card in answet to reset - +Answer To Reset) (0-9)
  • + +
  • +jjjj - number of retransmissions/parity errors in transmission with SIM card +(when the happen, two first chars are equals FE (Frame Error) or +PE (Parity Error), two last number of retransmission/errors)
  • +
+ +

CStop parameter (information, if SIM card clock is disabled in this moment) +is displayed in help only. Why ? Probably somebody didn't remember about it... + +

Here are some observations for SIM voltage selection type (first parameter) +Nokia 5110 and tested SIM cards: + +

After enabling phone reads some information from SIM card (for example, +number saved on it SMS messages, numbers from phonebook) - when you try to read +something, what is written there (for example, phonebook), +"SIM card not ready" message is displayed then (and first parameter shows 3). +I noticed, that phone can't display names assigned to numbers in phonebook too +(for example, when you call somebody) and shows, that "Inbox" and "Outbox" +are empty (even, when some messages are saved there). + +

Later value of parameter changes to 3/5 - I suppose, SIM card clock is +enabled then. + +

Phone disables it (in test value 3), when communicates with network +(requesting services, sending or receiving SMS messages) because of saving +energy (the same in NSPS state). + +

When you call to number assigned to name in phonebook (or phone +recognizes incoming number), value to the end of call is equal 3/5 +(otherwise it changes to 3). After end of call is always equal 3. Logical +conclusion: after enabling phone saves in own memory checksum for +all numbers from phonebook (it's enought to make for 7 last digits - they're +used to identify number in Nokia phones). If this checksum is the same to +checksum for number, you're calling (or incoming number), phone reads name +from phonebook... + +

And the last observation: without connection (see above) value of first +parameter is equal 3/5 (is some energy loose ? Probably yes... But why counter from +Menu 10-20 doesn't show any change in their +consumption ?) + +

When you try to open "Outbox" or "Inbox", phone doesn't enable clock, +when they're empty (that's why I think, that phone saves into own memory +number of saved SMS messages too). + +

Many information about SIM card are displayed by +SIMedit (unfortunatelly, in Czech language only :-( )... +Parameters like ATR you can study using SIM Scan (it's on the www.net.yu/~dejan +or http://members.tripod.com/~dejank/ pages). They both work with +SIM card readers only... + +

In Nokia 6185/6188 this test looks like follows: + +

+ + + + +
+TASK0 0134  
+TASK1 015C
+TASK2 0138
+TASK3 0170
+
+ +

Menu 10-52 +
Reads datafield from SIM card + +

+ + + + + + +
+ + + + +
+Read SIM-
+data field  
+to SIM-SCM
+
+ + + + +
+Use menu to 
+read SIM-
+data field
+to SIM-SCM
+
+ +

This display reads a binary datafield from SIM card to SIM SCM memory +(SCM = Short Code Memory and it means phonebook on SIM card). + +

Prior using this display the identifier of datafield has to be stored as an +alpha-identifier of SCM location number 34 of SIM memory. The datafield +must be written in hexadecimal notation. The identifiers can be found from +the GSM 11.11. + +

The contents of datafield is stored as a data-identifier of SCM location +number 35 of SIM memory. The contents are displayed in hexadecimal notation. +The maximum length of the datafield is 10 bytes, but the length depends on +the name length of the SIM memory. In case the datafield cannot be read the +alpha-identifier of SCM location is NOT DONE. + +

The information of how the read succeeded can be read from the SCM location +36 of SIM memory and on the display for a short period. + +

The following results are possible: + +

+ + + + + + + + + +
OKdatafield was read correctly
NOT BINARYdatafield is either formatted or cyclic
NOT FOUNDdatafield was not found from SIM card
CARD ERRORsomething weird happened, card did not respond as expected
NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
NOT STOREDcould not store into the result memory place
NO ADDRESScould not read the address from the SCM-location
UNKNOWNunidentified error
+ +

For the time being following binary datafields exist in SIM. In future +there could be more. All of these are not necessarily on all SIM cards. + +

+ + + + + + + + + + + + + + + + + + + + + + + +
2FE2ICC identification(10 bytes)
6F05Language preference(variable length)
6F07IMSI(9 bytes)
6F20Ciphering key Kc (it's read from card after entering PIN)(9 bytes)
6F30PLMN selector(variable length)
6F31HPLMN (home network ?) search period(1 byte)
6F37ACM maximum value(3 bytes)
6F38SIM service table(2-4 bytes)
6F41Price per unit and currency table(5 bytes)
6F45Cell broadcast message identifier selection(variable length)
6F74Broadcast control channels(16 bytes)
6F78Access control class(2 bytes)
6F7BForbidden PLMNs (see Menu 10-7)(12 bytes)
6F7ELocation information +(TMSI, +Local Area Information (consist of MCC, MNC & LAC - +see Menu 10-11 for them), +last Location Update status)(11 bytes)
6FADAdministrative data(variable length)
6FAEPhase identification(1 byte)
6F43SMS status(variable length)
 

Next two binary datafields are phase 2+ features which are not currently in use

 

6F3EGroup Identifier Level 1(variable length)
6F3FGroup Identifier Level 2(variable length)
+ +

In Nokia 6185/6188 this test looks like follows: + +

+ + + + +
+TASK4 0134  
+TASK5 015C
+TASK6 0138
+TASK7 0170
+
+ +

Menu 10-53 +
Writes datafield into SIM card + +

+ + + + + + +
+ + + + +
+    Write
+ data field
+from SIM-SCM
+  to SIM
+
+ + + + +
+Use menu to
+write data
+field to SIM
+  +
+
+ +

This display writes data for a binary datafield in SIM card by using data +in SCM memory of SIM card. + +

Prior using this display the identifier of datafield has to be stored as an +alpha-identifier of SCM location number 34 of SIM memory. The datafield +must be written in hexadecimal notation. The identifiers can be found from +the GSM 11.11. In addition the data to be stored into SIM card has to be +entered as an alpha-identifier of SCM location number 35 of SIM memory. +The data has to be stored in hexadecimal notation. + +

The result of write operation can be seen from the alpha-identifier of +SCM-location 36 of SIM-memory and on the display for a short period. + +

The following results are possible: + +

+ + + + + + + + + + +
OKdatafield was read correctly
NOT BINARYdatafield is either formatted or cyclic
NOT FOUNDdatafield was not found from SIM card
CARD ERRORsomething weird happened, card did not respond as expected
NO RIGHTSnot enough rights to read the datafield (PIN2,adm..)
DATA ERRORthe data contents in SCM location is coded wrongly
NOT STOREDcould not store into the result memory place
NO ADDRESScould not read the address from the SCM location
UNKNOWNunidentified error
+ +

If you want to see changes, often you have to restart your phone. + +

In Nokia 6185/6188 this test looks like follows: + +

+ + + + +
+TASK8 0134  
+TASK9 015C
+TASK10 0138
+TASK11 0170
+
+ +

Menu 10-54 +
Information about memory blocks + +

+ + + + + + +
+ + + + +
aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+
+ + + + +
ResF1  ResF2
+ResF3  ResF4
+ResF5  ResF6
+ResF7  ResF8
+
+ +

Meaning of the individual lines (information about another blocks): + +

+

    +
  1. 1, 2
  2. +
  3. 3, 4
  4. +
  5. 5, 6
  6. +
  7. 7, 8
  8. +
+ +

+

    +
  • aa - number of reserved blocks
  • +
  • bb - number of free blocks in worst case
  • +
+ +

In Nokia 6185/6188 this test looks like follows: + +

+ + + + +
+TASK12 0134 
+TASK13 015C
+TASK14 0138
+TASK15 0170
+
+ +

Menu 10-55 +
Information about memory blocks (some phones don't have this test - +they don't have such big memory) + +

+ + + + + + +
+ + + + +
aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+
+ + + + +
ResF9 ResF10
+ResF11ResF12
+ResF13ResF14
+ResF15ResF16
+
+ +

Meaning of the individual lines (information about another blocks): + +

+

    +
  1. 9, 10
  2. +
  3. 11, 12
  4. +
  5. 13, 14
  6. +
  7. 15, 16
  8. +
+ +

+

    +
  • aa - number of reserved blocks
  • +
  • bb - number of free blocks in worst case
  • +
+ +

In Nokia 7110 counters end on ResF11. + +

In Nokia 3110 this test looks like Menu 10-56. + +

Menu 10-56 +
Block display + +

+ + + + + + +
+ + + + +
 aaaaaa bbb 
+ cccccccc

+
+ + + + +
 Ptr   Cntr 
+ Task

+
+ +

+

    +
  • +aaaaaa - pointer to memory where double deallocation was called, in hex +format.
  • + +
  • +bbb - counter for failed deallocations.
  • + +
  • +cccccccc - name of task which last tried to double deallocate a block +(you can find their list in Menu 10-35 description). + + + +
  • +
+ +

This test has correct values only, when counter bbb is different from 0. + +

In Nokia 3110 it looks like Menu 10-57. + +

Menu 10-57 +
Memory status before reset + +

+ + + + + + +
+ + + + +
aaaaaaaaaaaa
+aaaaa...
+bbbbbbbb
+
+ + + + +
 Status of
+ stacks
+ Block sets 
+
+ +

+

    +
  • +aaaaaa... - Status of each stack before reset. First position contains +the status of stack 0, second position the status of +stack 1 and so on. The last position contains the status +of System stack. Number of stacks depends on the current +configuration of software. Possible values for each stack are: + +

    +

      +
    • 0: status OK, no overflow - it's normally !
    • +
    • 1: status not OK, stack overflow
    • +
    +

    +

  • + +
  • +bbbbbbb - status of each block set before reset. First position +contains the status of block set 1, second position the +status of block set 2 and so on. Possible values for each +block set are: + +

    +

      +
    • 0: status OK
    • +
    • 1: block set full - it's normally !
    • +
    • 2: (de)allocation error or total memory corruption
    • +
    +
  • + +
+ +

This display is only valid when a unknown or +a stack overflow interrupt has occured. In some phones you can make +restart connected with stack overflow (see question 9) +and see this test in "action"... + +

In Nokia 6185/6188 this test is different: + +

+ + + + +
+ +16:3A 32:26
+64:18 128:21
+168:14
+264:0E +
+
+ + +
Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modifcation: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net5.html b/xgnokii/docs/help/en_US/netmon/faq_net5.html new file mode 100644 index 0000000..4039275 --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net5.html @@ -0,0 +1,1941 @@ + + + + + + + + + + NetMonitor in Nokia phones (6/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (6/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

Menu 10-58 + + + + + +
+384:02      
+512:02
+752:02
 
+
+ +

Menu 10-59 + + + + + +
+ +0087
+00 00 00 00 

  + +

+ +

Menu 10-60 + +

+ + + + + + +
+ + + + +
 FIELD TEST 
+  DISPLAY 
+ COUNTERS 
+   RESET
+
+ + + + +
Use menu to
+reset field
+test display
+counters
+
+ +

By direct enter to this test you can reset counters from +Menu 10-41 to Menu 10-43 and from +Menu 10-61 to Menu 10-66. + +

+ + + + + + +
If you reset these counters at the beginning of each month, you can compare +the number of sent SMSes (Menu 10-65) +and made calls (Menu 10-63) with your billing. +Additionaly (in some prepaid cards - for example, in Polish Tak-Tak) +you pay to your operator for few SMS messages (in this example 10), when you +send first of them. When you will clear these counters in start of this period +(before first SMS), you will know, when another money will be taken from your account... +
+ +

Menu 10-61 + +

+ + + + + + +
+ + + + +
NOPSW  :aaaa
+SYNCR  :bbbb
+RESELEC:cccc
+
+ + + + +
PSWMesgCntr
+SyncMeasCntr
+CellReselCtr
+
+ +

+

    +
  • +aaaa - hexadecimal counter of MDI_NO_PSW_FOUND messages from +DSP
  • + +
  • +bbbb - decimal counter for synchronization measurement attempts. +If value is over 9999 then four x are shown +
  • + +
  • +cccc - hexadecimal counter for cell reselections
  • +
+ +

Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using Menu 10-60. They're reset too, when +they exceed their maximal values. + +

In dual phones you will have such Menu 10-61: + +

+ + + + + + +
+ + + + +
aaaaa  bbbbb
+ccccc  ddddd
+eeeee  fffff
+ggggg  hhhhh
+
+ + + + +
NOPswGSM DCS
+Sync GSM DCS
+reselG>G D>D
+reselG>D D>G
+
+ +

+

    +
  • +aaaaa - for GSM 900: counter (decimal) for MDI_NO_PSW_FOUND messages +from DSP
  • + +
  • +bbbb - for GSM 1800: counter (decimal) for MDI_NO_PSW_FOUND +from DSP
  • + +
  • +ccccc - for GSM 900: counter (decimal) for +synchronization measurement attempts. +If this value is over 99999, then five x are shown.
  • + +
  • +ddddd - for GSM 1800: counter (decimal) for +synchronization measurement attempts. +If this value is over 99999, then five x are shown. +
  • + +
  • +eeeee - counter (decimal) for cell reselections GSM 900 - GSM 900
  • + +
  • +fffff - counter (decimal) for cell reselections GSM 1800 - GSM 1800
  • + +
  • +ggggg - counter (decimal) for cell reselections GSM 900 - GSM 1800
  • + +
  • +hhhhh - counter (decimal) for cell reselections GSM 1800 - GSM 900
  • +
+ +

Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using Menu 10-60. +They're reset too, when they exceed their maximal values. + +

In Nokia 6185/6188 it's different: + +

+ + + + +
+V
+aaaaaaaaaaaa
+bbbbbbbbbb
+ccccccc +
+ +

    +
  • aaaaaaaaaaaa - version of phone's firmware
  • +
  • bbbbbbbbbb - date of phone firmware
  • +
  • ccccccc - phone's codename (NSD-3AX)
  • +
+ +

+ + + + + + +
This phone displays this info too, when you enter *#837# code. For more +information about firmware in Nokia phones (including 6185/6188 models) click here.
+ +

Menu 10-62 + +

+ + + + + + +
+ + + + +
 PSW  :aaaa 
+ SYNCR:bbbb
+ BCCH :cccc 
+ BCCHE:dddd
+
+ + + + +
NeghbrPSWCtr
+SyncMeasCntr
+BCCHMeasAtmp
+BCCHExtMeAtm
+
+ +

+

    +
  • +aaaa - counter for neighbour PSW measurement attempts
  • + +
  • +bbbb - counter for neighbour synchronization measurement attempts
  • + +
  • +cccc - counter for neighbour cells BCCH +(quality of trasmission with them) measurement attempts +(see description C1)
  • + +
  • +dddd - counter for extended neighbour cells BCCH +(quality of trasmission with them) measurement attempts +(see description C1)
  • +
+ +

Counters values are saved in EEPROM memory, when phone is disabled. +You can reset them using Menu 10-60. +They're reset too, when they exceed their maximal values. + +

In Nokia 6185/6188 this test looks different: + +

+ + + + +
+DSP ROM 2   
+VERS 430
+BETA 0014
 
+
+ +

Menu 10-63 + +

+ + + + + + +
+ + + + +
  aa    bb
+  ccc   ddd 
+  eee   fff
+
+ + + + +
CalRel RelDi
+MOCAtmp MOOK
+AllMT   MTOK
+
+ +

+

    +
  • +aa - you will find reason of last call release here (it's displayed in +Menu 10-2 +and Menu 10-39 too (in this +last test you will find more explanations - see description of first +parameter)) +
  • + +
  • +bb - another information about end of last call: + +

    +

      +
    • +UN: unknown (for example: you didn't make any calls after enabling phone) +
    • + +
    • +IN: internal reason (for example: you enabled in +Menu 10-17 BTS test, +phone didn't find network on given channel and you tried to make call) +
    • + +
    • +MT: broken by network
    • + +
    • +MO: disconnection (ending call) from one of the phones
    • +
    +

    +

  • + +
  • +ccc - how many times you tried to make outgoing call from your phone +
  • + +
  • +ddd - number of succesfull outgoing calls (how many times calls were really +realised)
  • + +
  • +eee - number of all incoming calls (missed too)
  • + +
  • +fff - number of received incoming calls
  • +
+ +

When counters exceed their maximal values, they're reset (you can make it +using Menu 10-60 too). Their values (it's +about ccc and next counters only) are written to EEPRM, when phone is disabled. + +

In Nokia 6185/6188 this test looks different: + +

+ + + + +
+ +C1M 00      
+C1L 00
+C2M 00
+C2L 03 +
+
+ +

Menu 10-64 +
It contains, for example, information, how many times you phone +informed network about position (see description of +Menu 10-10 too) + +

+ + + + + + +
+ + + + +
 aa bbb ccc 
+ dd eee fff 

+
+ + + + +
Nfai NL NLOK
+PFai PL PLOK
+ Loc update
+  counters
+
+ +

+

    +
  • +aaa - error code (reset after enabling phone) of last incorrect +Location Update +(it changes only then, when some error happened during it). +It can be found in Menu 10-39 too +- it's value of MM parameter (there are code values with their description too) +
  • + +
  • +bbb - how many times phone tried to make +Location Update
  • + +
  • +ccc - how many times attempts of making +Location Update +were successfull
  • + +
  • +ddd - error during last PLU or IMSI Attach
  • + +
  • +eee - how many times phone tried to make PLU +or IMSI Attach
  • + +
  • +fff - how many times attemps of making PLU +or IMSI Attach were successfull
  • +
+ +

Values of these counters (excluding error codes) are stored in EEPROM, +when phone is disabled. You can reset them using +Menu 10-60 (it's made too, +when they exceed their maximal values). + +

+ + + + + + +
If you don't disable your phone and all time you are in +your network time range, in this menu you will find information (in +approximation), how long it's enabled (check in +Menu 10-10, how often +is reset T3212 counter (ccc parameter) and multiply that time by +eee parameter from this menu). You can use to make it counter from +Menu 10-82 too (it's more precise, but require +enabling some test) or service menu (in phones like Nokia 6130 or 3210). +
+ +

In Nokia 6185/6188 this test looks different: + +

+ + + + +
+ +C3M 00      
+C3L 00
+C4M 00
+C4L 03 +
+
+ +

Menu 10-65 +
Test connected with SMS messages (without reports) + +

+ + + + + + +
+ + + + +
 aa bbb ccc 
+ dd eee fff
+ gggg
+
+ + + + +
SFai MO MOOK
+RFai MT MTOK
+Sched Msgs
+SMS counters
+
+ +

+

    +
  • +aaa - error code during sending last SMS message (reset after enabling phone): + +

    +

      +
    • +  1: 'Nie ma takiego numeru'
    • + +
    • + 21: 'Message not sent this time'. This error happens, when +you try to send messages from prepaid card without this possibility, +when you send message for incorrect number (SMSC is correct) or SMSC is blocked +on your network. +
    • + +
    • + 28: 'Nie ma takiego numeru'
    • + +
    • + 38: 'Message not sent this time'. Error with sending message during SMSC blocked on your network. +
    • + +
    • + 42: probably phone shows this error, when used SMSC +is overworked (too many sent messages in the same time) and can't send +your message in this moment +
    • + +
    • + 50: 'Check operator services'. Error displayed after sending +SMS from some prepaid cards without this possibility.
    • + +
    • +111: 'Message sending failed'. +The reason is wrong target number or wrong number of SMSC +
    • + +
    • +166: 'Message sending failed'. +Displayed when SMSC number was wrong or SMSC is blocked for your network. +
    • + +
    • +178: 'Message sending failed'. Error displayed after sending +SMS from some prepaid cards without this possibility.
    • + +
    • +252: 'Message sending failed'. Displayed, when phone's transmitter +was disabled in Menu 10-45 or +phone can't find network (when BTS test +in Menu 10-17 was enabled on channel +without network)
    • + +
    • +253: 'Message sending failed'. Displayed, when SMSC number was wrong.
    • +
    +

    +

  • + +
  • +bbb - number of SMS sending attempts
  • + +
  • +ccc - number of succesfull sent SMS messages (which were accepted by used +SMSC and you will pay for them) +
  • + +
  • +ddd - code of error during receiving last SMS message (reset, when phone is +enabled): + +

    +

      +
    • +22: full memory for SMS messages (phone tried to receive message +- increased value of eee counter, fff value didn't change). Information about +it is on the top of phone's screen too (blinking envelope) and phone showed +'No space for new messages' message. When you save messages on SIM card, +their sum in 'Outbox' and 'Inbox' depends on it (card). The most often, different +networks gives SIM card with different space for SMS messages (for example, +for Polish Plus GSM it's 10, for +Era GSM +15 and for Idea 30). When you don't have +space for messages, you can't add new (message 'Message memory full'). +You have to delete one of saved messages there - when you won't make it, +you can loose some incoming (remember, that sender of SMS message can set time, +when network will try to delivery it; after it it will be deleted and you won't +be able to receive it !). +
    • +
    +

    +

  • + +
  • +eee - number of SMS messages receiving attempts
  • + +
  • +fff - number of correctly received SMS messages
  • + +
  • +gggg - number of received cell broadcast messages (if they're supported by actual +used BTS, you can check in Menu 10-7): +how many times your phone received cell-info (in Nokia 5110 it can be enabled in Menu 4-2-2) +and cell-broadcast (Menu 2-5 in Nokia 5110) messages
  • +
+ +

Values of these counters (excluding error codes) are written to EEPROM, +when phone is disabled. You can reset them using Menu 10-60 +(it's made too, when they exceed their maximal values). + +

If you want to know a little more about sending SMS messages +(or find SMSC of different operators), visit +www.vdheyden.demon.nl/sms/index1.htm +site. + +

+ + + + + + +
Majority of computer programs don't write to their users, if SMS message +sending was successfull - this test will be only way to check it. +
+ +

In Nokia 3110 this test looks like Menu 10-64. + +

In Nokia 6185/6188 this test looks different: + +

+ + + + +
+ +C5M 00      
+C5L 00
+C6M 00
+C6L 03 +
+
+ +

Menu 10-66 +
Timeout counters connected with SMS messages (as you know, when you send them, +you can set, how long network will try to delivery them - I suppose, that these +counters are connected with it). + +

+ + + + + + +
+ + + + +
 aaa bbb cc 
+ ddd eee ff

+
+ + + + +
TR1 TR2 TRA 
+TC1 TC2 SCH 
+SMS timeout
+  counters
+
+ +

+

    +
  • aaa - timeout counter for TR1M
  • +
  • bbb - timeout counter for TR2M
  • +
  • cc - timeout counter for TRAM
  • +
  • ddd - timeout counter for TC1M
  • +
  • eee - timeout counter for TC2M
  • +
  • ff - timeout counter for cell broadcast
  • +
+ +

Values of these counters are written to EEPROM, when phone is disabled. +You can reset them using Menu 10-60 +(it's made too, when they exceed their maximal values). + +

In Nokia 6185/6188 this test looks different: + +

+ + + + +
+ +CT1 82      
+CT2 00
+RF 23
  +
+
+ +

Menu 10-67 + +

+ + + + +
+ +REC 00
+SEND 00     
+CTR 4C
+STA 68 +
+
+ +

Menu 10-68 + +

+ + + + +
+ +CNT 00      
+ACK 00

+M1M B3 +
+
+ +

Menu 10-70 +
Temporary counters of DSP (contents of API memory locations +r_dsp2ftd+0, r_dsp2ftd+1, r_dsp2ftd+2, etc. in hex format) + +

+ + + + + + +
+ + + + +
aaaaa  bbbbb
+ccccc  ddddd
+eeeee  fffff
+ggggg  hhhhh
+
+ + + + +
 Temporary
+DSP counters
+ R DSP2FTD
+
+ +

The display is to be used by special debugging DSP +software which can put some useful information to the memory locations on +API RAM. When this display is selected then MCU +copies the contents of those memory locations into display with format specified above. + +

In Nokia 3110 this test looks like Menu 10-80. + +

Menu 10-71, 10-72 +
Both tests allow to set DSP settings. + +

When you will directly enter to one of them, in both of them number below AUDIO +ENHANCEMENT change - values depends on SIM card. You can now enter to one of them +using arrows - sound emited by phone will change then (you can hear +horrible noises and cracks). You can set values below AUDIO ENHANCEMENT too +- save them (in decimal - maximal value is 65536) in 31 or 32 position +in phonebook on SIM card (how to do it ? see description in +Menu 10-17). +Conf parameter from Menu 10-30 +shows, what value was choosen here. You can back to normal sound, when +you will disable and enable phone. Connecting headset or cat kit don't change +sound effects with concrete values set here. + +

+ + + + + + +
+ + + + +
    AUDIO
+ ENHANCEMENT
+    aaaaa
+
+ + + + +
Use menu to
+control DSP
+   audio
+enhancements
+
+ +

In Nokia 3110 test 71 looks like Menu 10-81. + +

Menu 10-73 +
Generic display for DSP Audio Enhancements + +

+ + + + + + +
+ + + + +
 aaa bb  aaa
+cccc bb cccc
+cccc bb cccc
+ cccc cccc
+
+ + + + +
DB1  B1  DB2
+HEX1 B2 HEX2
+HEX3 B3 HEX4
+  HEX5 HEX6
+
+ +

+

    +
  • +aaa - general dB value, e.g. signal level in dB. decimal point and sign is not shown, ie. -10.5 is show 105.
  • + +
  • bb - general byte value, used for combined flags. Value is in hex format.
  • + +
  • cccc - general hex value.
  • +
+ +

Some English sources write about this test: +
"The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

In Nokia 3110 this test looks like Menu 10-82. + +

Menu 10-74 +
DSP audio enhancements 1 (DRC) + +

+ + + + + + +
+ + + + +
  aaa  bbb  
+       ccc
+  dd    ee
+
+ + + + +
DSigL USigL
+      NseLvl
+ DTbl  UTbl
+
+ +

+

    +
  • aaa - downlink (received by your phone) signal level.
  • +
  • bbb - uplink (sent by your phone) signal level
  • +
  • ccc - background noise (see description of DTX) signal level.
  • +
  • dd - downlink (received by your phone) DRC table value, shown in decimal integer, two digits.
  • +
  • ee - uplink (sent by your phone) DRC table value, decimal integer, two digits.
  • +
+ +

Three first parameters are in dB calculated using DRC level +measuring block. Decimal point and sign is not shown, +ie. -10.5 is show 105. + +

Some English sources write about this test: +
"The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

In Nokia 3110 this test looks like Menu 10-72. + +

Menu 10-75 +
Audio path status + +

+ + + + + + +
+ + + + +
Mod:aaaaaaa
+AudReq: bbbb
+AccMod: cccc
+H2Path: dddd
+
+ + + + +
ExtAudStatus
+AudioRequest
+AccAudMode
+
+ +

+

    +
  • +aaaaa - external audio status (for some phones possible values are: HP, HF, HEADSET, EXT and HP_OFFHO) + +

    With Nokia 5110 these values vere observed: + +

    + + + + + + + + + + + +
    value
    normal state (nothing connected, cable MBUS/FBUS or changer connected)HP
    headset (phone displays Headset) +
    You can simulate it +
    connecting pins 1-2 on the connector on the bottom of the phone +
    (when you see from the left side, when phone's screen is on the top) +
    In Nokia 9110 you can use to make it +Menu 10-92 too.
    HD (shortcut from HeaDset)
    car kit (phone displays Car) +
    You can simulate it +
    connecting pins 2-3 on the connector on the bottom of the phone +
    (when you see from the left side, when phone's screen is on the top) +
    HFU 1 (shortcut from Hands Free Unit 1)
    + +

    Described above methods of simulating presence sound accesories are correct +for Nokia 5xxx, 6xxx and probably 9110 (but REMEMBER: you use them on YOUR OWN risk) + +

    When you connect (simulate) both accesories you have in phone function +"Automatic answer" (Menu 4-1-6 in Nokia 5110) - it allows phone +to answer automatically (without pressing key) incoming calls. In Nokia 9110 +you can activate it using Menu 10-92 too. +

    +

  • + +
  • +bbbb - audio_request bitmap in hex
  • + +
  • +cccc - accessory audio mode
  • + +
  • +dd - path for HFU-2 (Hands Free Unit-2)
  • +
+ +

In Nokia 3110 this test looks like Menu 10-73. + +

Menu 10-76 +
Ear (= downlink) audio display + +

+ + + + + + +
+ + + + +
 Vab  Pccc
+ Cddd CAeee
+PAfff
+
+ + + + +
EVol PeakVal
+CutOff COAve
+PkAver
+
+ +

+

    +
  • +ab - volume level (below information are correct for Nokia 5110): + + + + + + + + + + + + + + + + + + + + +
    ab
    speaker disabled0F
    sound like after pressing key (volume level 1)08
    sound like after pressing key (volume level 2)04
    sound like after pressing key (volume level 3 or enable loud sounds) +00
    + +

    During connection a parameter has "A" value, parameter b allows to +calculate set volume level (count it to the decimal value and substract 11 from it) +- this last parameter can be checked in +Menu 10-30 too. When you connect headset, +parameter a has "C" value (formula for counting volume level during call is +"10 - b" then). With car kit, a parameter is equal "2" and formula is "10 - b" too. + +

    When somebody calls to you (you didn't receive it yet), phone doesn't +show volume of sound always (displayed valued are for disabled speaker) - +I don't know, if it's firmware bug (5.07) or something different. +Phone shows it (volume) only with some combinations of types of rings (Ringing, Asceding) +and volume ring (I write values for both of these parameters: level 1 - A7, +level 2 - A6, level 4 - A4, level 5 - A0). +

  • + +
  • +

    ccc - peak value of downlink audio signal during last frame in dB, +decimal point and sign is not shown, ie. -10.5 is show 105. +

  • + +
  • +

    ddd - cut off counter value of last frame. This counter counts +how many samples are saturated during last frame. +

  • + +
  • +

    eee - moving average of cut off counter, decimal point and sign is +not shown, ie. -10.5 is show 105. +

  • + +
  • +

    fff - moving average of peak levels

  • +
+ +

Some English sources write about this test: +
"The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

...but I haven't seen it my phone and they were equal 0 (without first) all the time +(is something additionaly required to enable this test ?) + +

Menu 10-77 +
Microphone (= uplink) audio display + +

+ + + + + + +
+ + + + +
 Paaa  Abbb 
+ Cccc CAddd

+
+ + + + +
MicPeak MAve
+CutOff COAve

+
+ +

+

    +
  • +aaa - peak value of uplink audio signal during last frame in dB, +decimal point and sign is not shown, ie. -10.5 is show 105. +
  • + +
  • +bbb - moving average of peak levels, decimal point and sign is not +shown, ie. -10.5 is show 105..
  • + +
  • +ccc - cut off counter value of last frame. This counter counts +how many samples are saturated during last frame. +
  • + +
  • +ddd - moving average of cut off counter
  • +
+ +

Some English sources write about this test: +
"The display is reset and restarted when call is taken (if NetMonitor display +counters are enabled). When call is terminated the display is frozen to +show last values. Display values will not be saved to the EEPROM." + +

...but I haven't seen it my phone and they were equal 0 all the time +(is something additionaly required to enable this test ?) + +

In Nokia 3110 this test looks like Menu 10-75. + +

Menu 10-78 +
DSP audio enhancements (AEC) + +

+ + + + + + +
+ + + + +
aaa bbb ccc 
+ddd eee fff
+ggg h i jjj
+ kkkk llll
+
+ + + + +
EAA Ada ERL 
+RxG TxG GLi
+TxN Sta Mod
+ RVAD TVAD
+
+ +

+

    +
  • +aaa - electro-acoustic attenuation of echo from DSP point of view +in dB. Decimal point and sign is not shown. E.g. -10.5dB +would be displayed as "105", -0.5 dB would be displayed +as " 5". 20*log10( Q15 )
  • + +
  • +bbb - adaptive attenuation of echo. Decimal point is not shown. 20*log10( Q15 ) +
  • + +
  • +ccc - total echo return loss. Decimal point is not shown. 20*log10( Q15 ) +
  • + +
  • +ddd - RX (received) attenuator gain in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_rx_gain ) +
  • + +
  • +eee - TX (sent) attenuator gain in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_tx_gain ) +
  • + +
  • +fff - gain limit for RX and TX. Decimal point and sign is not shown. 20*log10( Q15 aec_gain_limit ) +
  • + +
  • +ggg - TX (sent) noise level (see DTX description for more info) +in dB. Decimal point and sign is not shown. 20*log10( Q15 aec_tx_noise) +
  • + +
  • +h - adaptive filter status. (Q0 aec_nlms_state) (bit UPDATE << 2) | (bit NLMS2 << 1) | (bit NLMS1) +
  • + +
  • +i - comfort noise (see DTX description for details) +generation (0 or 1) (Q0 AEC_TX_COMF_GEN) +
  • + +
  • +jjj - AEC mode. (byte Q0 s_AEC_mode)
  • + +
  • +kkkk - shows 16 last RX VAD decisions in HEX format. Hex( Q0 aec_rx_vadreg ) +
  • + +
  • +llll - shows 16 last TX VAD decisions in HEX format. Hex( Q0 aec_tx_vadreg ) +
  • +
+ +

In my phone all these counters were equal 0 all the time +(is something additionaly required to enable this test ?) + +

In Nokia 3110 this test looks like Menu 10-76. + +

Menu 10-79 +
Audio equalizer display + +

+ + + + + + +
+ + + + +
aaaaa bbbbb
+ccccc ddddd
+-ee.e -ff.f 
+
+ + + + +
MiCutB MiCTA
+EpCutB EPCTA
+MiCLev EarLv
+
+ +

+

    +
  • aaaaa - saturated samples before microphone equalizer in decimal 16 bit
  • +
  • bbbbb - saturated samples after microphone equalizer in decimal 16 bit unsigned integer format.
  • +
  • ccccc - saturated samples before earpiece equalizer in decimal 16 bit unsigned integer format.
  • +
  • ddddd - saturated samples after earpiece equalizer in decimal 16 bit unsigned integer format.
  • + +
  • -ee.e - level of the microphone signal level detector in dB format. Requires log10 function in MCU. +16 bit signed value in DSP, 0 dB = 32768. +
  • + +
  • +-ff.f - Level of the signal after earpiece equalizer in dB format. Requires log10 function in MCU. +16 bit signed value in DSP, 0 dB = 32768. +
  • +
+ +

Some English sources write about this test: +
"The display is reset and restarted when call is taken. When call is +terminated the display is frozen to show last values. Display will not be +saved to EEPROM. Saturated sample counters aaaaa - ddddd are counted in DSP +and only the new counter value is sent to MCU. The microphone and earpiece +signal levels are calculated in DSP and it sends the linear values to +MCU which makes the linear to dB transformation (20*log10(x)) for the level +values." + +

...but I haven't seen it my phone and they were equal 0 all the time (is something additionaly required to enable this test ?) + +

In Nokia 3110 this test looks like Menu 10-77. + +

Menu 10-80 + +

+ + + + + + +
+ + + + +
+
   TIMERS   
+   RESET 
+
+ + + + +
  Use menu
+  to reset
+ field test 
+   timers
+
+ +

By direct enter to this test you can reset counters from +Menu 10-82. Phone makes it too, when you connect +charger. Some English descriptions write, that it's made too, when battery is full +(I didn't notice it). + +

In Nokia 3110 this test looks like Menu 10-83. + +

Menu 10-81 + +

+

+ + + + + +
+ + + + +
+
   TIMERS   
+  aaaaaaaa
+
+ + + + +
Use menu to
+control test
+  display
+  timers
+
+ +

By direct enter to this test you enable (aaaaaaaa=ENABLED) or +disables (aaaaaaaa=DISABLED) counters from Menu 10-82. + +

In Nokia 3110 this test looks like Menu 10-84. + +

Menu 10-82 + +

+ + + + + + +
+ + + + +
aaaaa bbbbb 
+ccccc ddddd
+ TIMERS eee
+
+ + + + +
PwrOn InServ
+NSPS  TxON
+   Timers
+   Status
+
+ +

+

    +
  • +aaaaa - how many minutes (two last digits) and hours (three first) phone was enabled +
  • + +
  • +bbbbb - how many minutes (two last digits) and hours (three first) phone was logged +into network +
  • + +
  • +ccccc - how many minutes (two last digits) and hours (three first) phone was in +NSPS state
  • + +
  • +ddddd - how many minutes (two last digits) and hours (three first) phone's transmitter +was enabled +
  • + +
  • +eee - information, whether counters are enabled (ON) or not (OFF) (you can set +it using Menu 10-81)
  • +
+ +

Some English descriptions write, that maximal value for counters is 99 h and 59 minutes. +When first of them (aaaaa) will have this value, all of them will stop. + +

Unfortunatelly, these counters work only, when you have some test in netmonitor +enabled (it means: when you will disable tests, values won't change even, when +counters are enabled). It means, that you can have information here, +how long you use netmonitor (first parameter), how long phone logged into network +during this time (next)... + +

+ + + + + + +
You you still want to measure time using this test, in +Menu 10-83 select SHOW TASK MSG BUFS and enable +Menu 10-87 (display will be empty then). +Of course, there disadvantiges of it: you won't have identification incoming calls. + +

In service menu in Nokia 6130 (*#WARRANTY# code) and 3210 +(*#WAR0ANTY# code) in "Life Timer" position you will find information, +how many full days phone worked in network (first two digits before colon ":") +and how long you make calls - rest of digits (two last digits before ":" mean +hours, digits after it minutes). For example, 0701:35 means 7 days (during them +phone worked in network) and 1 h 35 minutes of calls.

+ +

In Nokia 3110 this test looks like Menu 10-85. + +

Menu 10-83 + +

+

+ + + + + + + + + +
+ + + + +
+
 SHOW TASK 
+ STACKS
+
+ + + + +
+
 SHOW TASK 
+ MSG BUFS
+
+ + + + +
+
 SHOW TASK 
+ FAST BUFS
+
+ + + + +
Use menu to
+select shown
+ task info
+
+ +

By direct enter to this test you can make, that in +Menu 10-84, Menu 10-85, Menu 10-86 and Menu 10-87 +are displayed values of different counters: + +

+

    +
  • +"STACKS" - shows free stack space in worst case
  • + +
  • +"MSG BUFS" - shows the peak number of pending messages
  • + +
  • +"FAST BUFS" - shows the peak number of pending fast messages
  • +
+ +

In Nokia 3110 this test looks like Menu 10-86. + +

Menu 10-84, 10-85, 10-86 +
Here is generally view of these tests: + +

+ + + + +
 aaaa bbbb  
+ cccc dddd
+ eeee ffff
+ gggg hhhh
+ +

and here is their help: + +

+ + + + + + + + +
+ + + + +
IDLE  DEV_IO
+LOCAL MDISND
+MDIRCV  UI
+ TONE   PN
+
+ + + + +
 FBUS   AUD
+L1CTRL L1MEA
+L1SYSP  L2
+ CC     MM
+ +

or (Nokia 3210): +

+ + + + +
IRDA  FBUS
+AUD  L1CTRL
+L1MEA L1SYSP
+L2    CC
+

+ + + + +
 RR     RM
+ SMS    EM
+SIMUPL SIML2
+ DDI
+ +

or (Nokia 3210): +

+ + + + +
MM    RR
+RM    SMS
+EM    SIMUPL
+SIML2 DDI
+ +

or (Nokia 9110): +

+ + + + +
 RR     RM
+SMS     EM
+SIMUPL SIML2
+ DGC  DGNTB
+

+ +

+

    +
  • +aaaa, bbbb,... - task 0, 1, ...
  • +
+ +

Numbers tell how many stack memory locations have been empty in the worst +case. So, if number is zero, stack has been full. Values are not written into +EEPROM, when phone is disabled. + +

In Nokia 3110 test 86 looks like follow: + +

+ + + + + + +
+ + + + +
MCUSW  aaaaa
+DATE   cccccc
+CHKSUM dddd
+DSP    eee
+
+ + + + +
MCUSWVersion
+DateOfMCUSW
+MCUSWChecksum
+DSPSWVersion
+
+ +

Meaning of parameters aaaaa,cccccc, dddd and eee you will find in Menu +10-88. + +

Menu 10-87 + +

+ + + + + + +
+ + + + +
 aaaa  bbbb 

+
+ + + + +
  FIQ  IRQ  

+
+ +

+

    +
  • +aaaa - OS_SYSTEM_STACK
  • +
+ +

In Nokia 9110 this test is different: + +

+ + + + + + +
+ + + + +
 cccc  dddd 
+ aaaa  bbbb 

+
+ + + + +
 DGTB  DGFAX
+ FIQ   IRQ

+
+ +

In Nokia 7110 looks like follows: + +

+ + + + + + +
+ + + + +
+1040010363800
+  700  800
+  220
+    476   480 +
+
+ + + + +
+DGN  DGF  SCKT
+PCL  PWB
+PPC
+FIQ    IRQ +
+
+ +

Values of counter are not saved to EEPROM, when phone is disabled. + +

Menu 10-88 + +

+ + + + + + +
+ + + + +
aaaaa bbbbbb
+Date  cccccc
+ChkSum dddd
+eeeeeeeeeeee
+
+ + + + +
MCUSW  PPM
+MCUSW_Date
+MCU_Checksum
+DSP_Version
+
+ +

+

    +
  • +aaaaa i cccccc - version and release date of MCU software +(codes for their checking and changes among their different versions are here)
  • + +
  • +bbbbbb - version of downloaded PPM (Post-programming Memory) packet: +Nokia Mobile Phones prepares different language versions +of firmware for phones. They're saved in "packets" - each of them contains messages and support +for few languages. Why is it done ? It's simple: internal memory in our phones is still +too small for all languages support. You will see version of PPM packet: +it's the same number as version of MCU firmware. After it +you have char (it can be "A", "B", etc. - for example, Polish language is in "B" packet). + +

    For curious: in older models (like Nokia 2110i) nobody prepared PPM packets and +preparing another language version was connected with modyfing ALL firmware. I readed too, +that phones with "generic" firmware had normally disabled services for some languages +(for example, Greek) - it could be enabled with some Nokia service programs (like Pc-Locals 0.6). +

    +

  • + +
  • +dddd - MCU memory checksum +(when it's wrong, phone display CONTACT SERVICE)
  • + +
  • +eeeeeeeeeeee - DSP software version
  • +
+ +

Information from this test are displayed in some Nokia service programs +(like PC-Locals 1.3 or WinTesla) too. + +

Menu 10-89 + +

+ + + + + + +
+ + + + +
HW: aaaa 
+TXT: Ubbbbbb

+
+ + + + +
HW version
+Text version

+
+ +

+

    +
  • +aaaa - phone hardware version (for example, the nevest Nokia 5110 I saw, display +here 4220)
  • + +
  • +bbbbbb - information, when were prepared texts (probably operator names) +displayed by phone +
  • +
+ + +

Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/faq_net6.html b/xgnokii/docs/help/en_US/netmon/faq_net6.html new file mode 100644 index 0000000..44eca45 --- /dev/null +++ b/xgnokii/docs/help/en_US/netmon/faq_net6.html @@ -0,0 +1,1577 @@ + + + + + + + + + + NetMonitor in Nokia phones (7/7) + + + + + +

Main page

+ +
NetMonitor in Nokia phones (7/7) + +

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] + +

+ +
+ + + +
    +
  1. What is it ?
  2. +
  3. Do I need it ?
  4. +
  5. Does my phone use more power with NetMonitor enabled ?
  6. +
  7. How to activate it ?
  8. +
  9. Which NetMonitor version can be activated in my phone ?
  10. +
  11. Does NetMonitor activation void warranty ?
  12. +
  13. NetMonitor menu in my phone has different number than 10. Is it normal ?
  14. +
  15. NetMonitor menu in my phone has 11 number, hovewer previous position has 9 number. Is it normal ?
  16. +
  17. How to use it ?
  18. +
  19. Can I damage my phone ?
  20. +
  21. Glossary
  22. +
  23. Description of the individual tests
  24. +
  25. You can also use a program...
  26. +
  27. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
  28. +
  29. How can I disable NetMonitor ?
  30. +
  31. Do I need to disable NetMonitor before sending my phone to the service ?
  32. +
  33. Is it possible to re-activate NetMonitor after disabling it ?
  34. +
  35. Is NetMonitor available in analog Nokia phones ?
  36. +
  37. Does NetMonitor allow to use phone like broadcast station ?
  38. +
  39. I don't have all described tests in my phone. Why ? Can I increase their number ?
  40. +
  41. Does NetMonitor allow to identify place, where is my interlocutor ?
  42. +
  43. Does NetMonitor allow to identify place, where am I ?
  44. +
  45. What are NetMonitor codes ?
  46. +
  47. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
  48. +
  49. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
  50. +
  51. Information sources
  52. +
  53. Additional information
  54. +
+
+
+ +

Menu 10-90 + +

In Nokia 9110 this test looks like follows: + +

+ + + + + + +
+ + + + +
 Cover  aaaa
+ CarKit bbbb
+ Heads  cccc
+
+ + + + +
CoverCnt
+CarKitCnt
+HeadsetCnt  
+
+ +

+

    +
  • aaaa - how many times Communicator's cover was opened
  • +
  • bbbb - how many times carkit was connected
  • +
  • cccc - how many times headset was used
  • +
+ +

Because Nokia 9110 seems to be 100% hardware compatible with 6110, +method of simulating headset and car kit should be the same +(see Menu 10-75). +First of them you can simulate using +Menu 10-92 too (when you use it, value of the counter +from this test doesn't change !). I recommend to read +page http://n9k.ats.pl/tipsframes_eng.html, +where you will find more informations about it (for example, another ways +to simulate them)... + +

here's for Nokia 5190: + +

+ + + + + + +
+ + + + +
M:DCS:DO4100
+D:HPA:NTM:NC
+D:REA:OFS:RU
+0000000:000
+
+ + + + +
+MODESERVSIM 
+DCS AMPSMOD
+DPWRAPWRSMC
+PRILIST +
+
+ +

and in Nokia 7110 looks like follows: + +

+ + + + + + + + + +
+ + + + +
+PS0 aaaa
+EC0 bbbbbbbb
+PS1 cccc
+EC1 dddddddd
+
+ + + + +
+PS0 FFFE
+EC0 00000003
+PS1 FFF8
+EC1 00000002
+
+ + + + +
+Page0 Status
+EraseCounter
+Page1 Status
+EraseCounter +
+
+ +

+

    +
  • aaaa - the same to the parameter bbbb from Menu 10-92
  • +
  • bbbbbbbb - the same to the parameter dddddddd from Menu 10-92
  • +
  • cccc - the same to the parameter bbbb from Menu 10-93
  • +
  • dddddddd - the same to the parameter dddddddd from Menu 10-93
  • +
+ +

Menu 10-91 + +

In Nokia 9110: + +

+ + + + + + +
+ + + + +
   RESET 
+   MISC
+  COUNTERS  
+
+ + + + +
  Use menu  
+  to reset
+    misc
+  counters
+
+ +

By direct enter to this test you can reset counters from +Menu 10-90. + +

In Nokia 7110 this test is different: + +

+ + + + + + +
+ + + + +
+FL  005FC998
+E2    0    0
+PR   30    1
+OM    0 0000
+
+
+ + + + +
+NextEntry
+Addr  Length
+Small   Long
+ErCnt ErMask
+
+
+ +

Menu 10-92 + +

In Nokia 9110 it looks different: + +

+ + + + + + +
+ + + + +

  Headset   
+    xxx
+
+ + + + +
 Use menu to
+   toggle
+   headset
+   ON/OFF
+
+ +

By direct enter to this test you can enable "headset" profile +normally accesible after connecting headset (of course, +you don't have to have it ;-)) - xxx can have ON or OFF values. +When you will use it, value of counter from Menu 10-90 +don't change. I recommend to read +page http://n9k.ats.pl/tipsframes_eng.html, +where you will find more informations about it (for example, another ways +to simulate them)... + +

+ + + + + + +
Use this test, when you need 'Automatic Answer' function, which allow +to receive incoming call without pressing phone's key. This function is normally +enable in never Nokia phones with connected set only (in older phones - like +Nokia 2110i - it's always visible) +
+ +

and in Nokia 7110 it looks like follows: + +

+ + + + + + + + + +
+ + + + +
+EP aaaa bbbb
+#0      cccc
+    dddddddd
+eeeeeeeeeeee +
+
+ + + + +
+EP F0F0 FFFE
+#0      0000
+    00000003
+FFFFFFFFFFFF
+
+
+ + + + +
+EMark PgStat
+PgType
+EraseCount
+PpInd PpECnt +
+
+ +

+

    +
  • bbbb - the same to the parameter aaaa from Menu 10-90
  • +
  • dddddddd - the same to the parameter bbbbbbbb from Menu 10-90
  • +
+ +

Menu 10-93 + +

+ + + + + + + + + +
+ + + + +
+EP aaaa bbbb
+#1      cccc
+    dddddddd
+eeeeeeeeeeee +
+
+ + + + +
+EP F0F0 FFF8
+#1      0001
+    00000002
+000000000002
+
+
+ + + + +
+EMark PgStat
+PgType
+EraseCount
+PpInd PpECnt +
+
+ +

+

    +
  • bbbb - the same to the parameter cccc from Menu 10-90
  • +
  • dddddddd - the same to the parameter dddddddd from Menu 10-90
  • +
+ +

Menu 10-94 + +

Test in Nokia 3210: + +

+ + + + + + +
+ + + + +
Vo:  aaa bbb
+Pins:      c
+Mode:   dddd
+State:  eeee
+
+ + + + +
V: Req ADC  
+Pin Status
+Mode
+Band Ch
+
+ +

+

    +
  • dddd - one of values is AUTO
  • +
  • eeee - example values are GS05, GS09
  • +
+ +

and 7110: + +

+ + + + + + +
+ + + + +
+ +IN E111 F000
+ST      0000
+        0000
+        0000 +
+
+
+ + + + +
+InExc  InRec
+      EmuErr
+      EnvErr
+      RecEr +
+
+ +

Menu 10-95 + +

+ + + + + + +
+ + + + +
1:aaa 4:ddd 
+2:bbb 5:eee
+3:ccc 6:fff
+
+ + + + +
6 lowest
+values at   
+shut down
+
+ +

Menu 10-96 + +

In Nokia 3210: + +

+ + + + + + +
+ + + + +
VCX0ADC: aaa
+TEMP(C):  bb
+TEMP(K): ccc
+
+ + + + +
ADC VALUE
+RF TEMP(C)
+RF TEMP(K)  
+
+ +

+

    +
  • +ccc - temperature of bb counter (in Kelvin degrees: K = C + 273)
  • +
+ +

and 7110: + +

+ + + + + + +
+ + + + +
+Co: 49 A: 279
+Tu: 49 K: 305
+Of:  0  C:+32
+V5:  2 +
+
+ + + + +
+Contrast ADC
+Tuned Kelvin
+Offset     C
  +
+
+ +

Menu 10-98 + +

+ + + + + + +
+ + + + +
+WR  00000000
+      0 0000
+ER  00000000
+        0000 +
+
+ + + + +
+WrErrCnt    
+WrRtry WrSta
+ErErrCnt
+ErSta
+
+
+ +

Menu 10-99 + +

+ + + + + + +
+ + + + +
+Ead:aaaa    
+Mod:bb
+MODE: cccc
  +
+
+ + + + +
+EAD value   
+Acc. status
+FBUS mode
  +
+
+ +

    +
  • bb - type of connected sound accesories (example values: +HP in normal state, HD with headset - for example, HDC-9P). +In other phones this information is displayed in +Menu 10-75
  • +
  • cccc - "FBUS" in connection made during FBUS or MBUS cable from older +Nokia phone (5xxx, 6xxx) or during Irda connection
  • +
+ +

Menu 10-100 + +

Test from Nokia 9110: + +

+ + + + + + +
+ + + + +
a  b 
+c  ddd    e 

+
+ + + + +
UWS DWS
+T1   N1   T2

+
+ +

and 7110: + +

+ + + + + + +
+ + + + +
+004D63   5.0
+0018D1   1.6
+05B1DD  94.0
  +
+
+ + + + +
+MemUseT %Use
+MemRelT %Rel
+MemUnuT %Unu
  +
+
+ +

Information about using phone's memory. I'm not sure exactly, what memory +(when position to phonebook is added, information displayed here is probably about +phonebook memory). + +

Menu 10-101 + +

Test from Nokia 9110: + +

+ + + + + + +
+ + + + +
  aaaaaaaa
+  bbbbbbbb
+  cccccccc  
+  dddddddd
+
+ + + + +
TX Frame Cnt
+RX Frame Cnt
+TX Retx Cnt
+RX Tetx Cnt
+
+ +

All values are in hexadecimal values. + +

and 7110: + +

+ + + + + + +
+ + + + +
+#0  0  #1  0
+#2  0  #3  0
+#4  0  #5  0
  +
+
+ + + + +
+Pn LoCPn LoC
+Pn LoCPn LoC
+Pn LoCPn LoC
  +
+
+ +

Menu 10-102 + +

+ + + + + + +
+ + + + +
aaaaaaaaaa
+bbbbbbbbbbbb
+ccccccccccc
+
+ + + + +
Data call
+flow control
+info
+
+ +

Menu 10-103 + +

+ + + + + + +
+ + + + +
+100    0  00
+PoolS 01EA6E
+RsrvS 031386
  +
+
+ + + + +
+%FW %BW FrCo
+PoolSizeLeft
+Reservations
  +
+
+ +

Menu 10-104 + +

+ + + + + + +
+ + + + +
+LOG 00000000
+COD 00000000
+WrA 00000000
+RdA 00000000 +
+
+ + + + +
+ErrorLogAddr
+ErrorCode
+WrErrorAddrs
+RdErrorAddrs +
+
+ +

Menu 10-105 + +

+ + + + + + +
+ + + + +
+WrC 00000000
+RdC 00000000
+Group     00
+Index   0000 +
+
+ + + + +
+DevWrErrorCo
+DevRdErrorCo
+CallingGroup
+CallingIndex +
+
+ +

Menu 10-106 + +

+ + + + + + +
+ + + + +
+RtyDaRd 0000
+RtyDaWr 0000
+RtyHeRd 0000
+RtyHeWr 0000 +
+
+ + + + +
+RtyDataRead
+RtyDataWrite
+RtyHeadRead
+RtyHeadWrite +
+
+ +

Menu 10-107 + +

+ + + + + + +
+ + + + +
+  1  1  1  1
+LLRS: 000000
+DchsmEr:0000
  +
+
+ + + + +
+PB GB  HB PB
+LastLostSize
+DtChsmErrCo
  +
+
+ +

Menu 10-108 + +

+ + + + + + +
+ + + + +
+FF:FF FF:FF 
+FF:FF 00:00
+FF:FF FF:FF
+FF:FF FF:FF +
+
+ + + + +
+Link&LID 0-1
+Link&LID 2-3
+Link&LID 4-5
+Link&LID 6-7 +
+
+ +

Menu 10-110, 10-111, 10-112, 10-113, 10-114, 10-115 + +

+ + + + + + +
+ + + + +
+ 0 FFFE  0.0
+000002   0.0
+000000 100.0
+ 3  1 0 FFE0 +
+
+ + + + +
+Pn  Sta %Use
+EraseCn %Rel
+NextRec %Unu
+Cu Cl Cc MmC +
+
+ +

Probably connected with browser and another (5) settings of connections to WAP. + +

Menu 10-130 + +

+ + + + + + +
+ + + + +
+aaa   bbbbbb

 
  +

+
+ + + + +
+Slide   Open

 
  +

+
+ +

    +
  • bbbbbb - how many times phone's sliding cover was opened
  • +
+ +

Menu 10-240 +
It doesn't show any values, but: + +

+

+ +

Menu 10-241 +
Disables netmonitor (it means, deactivates its' menu) ! +To again activate it you will have to use methods described in +How to activate it ? +Probably after using it you will have to disable and enable phone (to +make arrows up/down usable). It's possible too, that these arrows will work +only, when you will deactivate netmonitor from computer... + +

Menu 10-242 +
Enables limited netmonitor +(tests from 1 to 19 only). To enable full netmonitor version +you will have to use methods described in +How to activate it ? question +(phone doesn't allow to use it from its' menu +test 243, which normally enable full +netmonitor version - you will be able to enter it in program enabling +netmonitor in computer only). + + +

Menu 10-243 +
Enables full netmonitor. + +

Menu 10-250 +
Some English descriptions write, that this test cleans information from +Menu 10-57 (I didn't notice it). + +

Menu 10-497 +
It should deactivate +netmonitor like Menu 10-241 (497-256=241). +But some sites (for example, +www.versamart.com/Nokia5110/nokia5110code.shtml) +show, that it could make more: + +

The tips needs Net Monitor enabled. +
Be aware that the trick wil remove Netmonitor in some +
sw versions like v4.73 and v5.04. + +

+

    +
  1. Laungh the NetMonitor in your Nokia 51xx / 61xx
  2. +
  3. Execute the test number 497
  4. +
  5. Free calling for about 90 sec should now have been activated.
  6. +
+ +

The trick has not been comfirmed working yet. + +

For me, it's rather joke... + + +

Back to the top + + +

13. You can also use a program...
+


+ +

There are programs, which allow to track some of these parameters on computer's screen +(of course, phone must be connected to computer): + +

+

    +
  • +program created by Andreas Schmidt (www.aschmidt.de/): +shows values displayed by phone in given test and allows to track +BTSes (for example, compare their signal level) +
  • + +
  • +gnokii: it's the name of project (official page - http://multivac.fatburen.org/gnokii/) +and software (nevest versions - ftp://ftp.inet.cz/pub/People/Pavel.Janik/gnokii/), +which want to be Nokia Cellular Data Suite for Unix and Linux. In this moment +it displays information similiar to these displayed by program described earlier. +
  • + +
  • Logo Manager (http://clicksave.eu.org/nlm/) +it shows view of netmonitor tests.
  • + +
  • +created by N. Hüttisch (www.nobbi.com/). +It can work with differenet phones (for example, Siemens C10). +When you want to use it with Nokia, Nokia Cellular Data Suite is required +(program communicates using AT commands). When you will unpack it, in file +monitor.ini (it's in archive with program) +change comport parameter (you will give there name of port, where +'Nokia GSM Data' and 'Nokia GSM Voice' modems are installed). And that's all... +
  • + +
  • +Logo Express (http://memsu1.iam.ntu.edu.tw/~jrywu/ +or http://logoexpress.bizland.com/): +shows LAC and CID.
  • + +
  • +from http://members.tripod.com/smssend/gsm_csq.htm +(versions for PSION, DOS and Windows): display chart of signal level +(besed on signal from phone), work probably with Nokia 6xxx phones only. +
  • + +
  • +WinTesla: this commercional service program displays many detailed information +(for details search some description on pages somewhere in Internet) +
  • + +
  • +version 1.3 of PC-Locals: there two ways to make it: + +

    +

      +
    1. +in the window, where netmonitor is normally activated, enter number of +test - computer will display everything, what could be displayed by phone +in this test. +
    2. + +
    3. enabling internal program's netmonitor: + +

      +

        +
      1. select menu 8 (Event Trace)
      2. + +
      3. select menu 9 (Load TRC file)
      4. + +
      5. +write name of TRC file (with PC-Locals 1.3 in Internet you can find +nse3_433.trc file for Nokia 6110 firmware 4.33) +correct for phone's model and firmware (or press Enter and select adequate +file). When version from file and phone's version is not the same, computer +will confirm, that you really want to load it (it won't damage phone, +but parameters displayed by program will be different than adequate parameters +from netmonitor in phone). +
      6. + +
      7. +select menu 1 (MCU Events)
      8. + +
      9. +change status of events, which will be tracked in Trace window - you can make +it using gray + on the right side of keyboard (you can disable tracking, enable +normal or extended tracking). If you want to enable netmonitor displayed after +pressing F8 key, you have to enable tracking event CONSTANT_WINDOW_TRA +(change to NORM or EXT).
      10. + +
      11. +select menu 2 (Event Control) and change to On.
      12. + +
      +
    4. + +

      In "Trace" window you will see now tracked events. Network parameters can be +observed after pressing F8. Menu 6 (Break Trace Functions) +breakes tracking events.

    +
  • +
+ + +

Back to the top + + +

14. Can I use NetMonitor without SIM card inserted, without PIN number entered or when SIM card is not active ?
+


+ +

GSM standards say, that cellular phone always should allow to make +emergency calls (usually 112) - even, when it's was blocked by GSM operator +(it means, when normally you can't use this phone - with this +IMEI - in network) or when it's without +SIM card (eventually it was blocked too). It makes, that after enabling your +Nokia looks for available cellular networks. There are some programs in this +moment (see in You can also use a program...), +which display on computer's screen everything, what could be displayed +by phone in this test. Or I will write it different: when you will connect your +Nokia to computer and use (for example) Pc-Locals 1.3 or program written +by Andreas Schmidt, you can +see some information given normally in "Net Monitor" menu. In some phones +(I checked it with Nokia 5110) you can have access to this menu (generally, +to phone's menu) using gnokii: you should send dtmf sequence to phone +(for example, run gnokii with parameter "--senddtmf sequence", where +sequence consists of some digits). + +

When you will enter PIN code, you will be "normally" able to use "Net monitor" +menu from phone's keyboard (of course, if it was activated) and all settings +and tests inside (for example, not till then in +Menu 10-6 you will see +"preffered" and "forbidden" networks). You can still display tests using described +above programs (it can be usefull, when you want to monitor network state and when +you don't want to loose caller identification or when you want to check kind +of channel after entering PIN code) - they work independent of it, if you +have "Net monitor" menu activated and which test is displayed in phone... + +

SIM card data can be readed in Menu 10-51 +(of course, if your phone supports this test) using these programs +independent of it, if you entered PIN code or not. When you don't have SIM +card in phone, you will see there "ERROR1". + +

When you use deactived SIM card, you have access to tests in netmonitor +(of course, when its' menu was activated earlier). Network of SIM card is +normally monitored. Phone tries to communicate with it only once after +enabling phone (netmonitor shows, that +CCCH, AGCH, +SDCC (phone refreshes TA then), +BCCH and CCCH channels +are used then - like in normal SIM card). Later it's impossible. It's made againg +after reseting phone. Of course, you don't have name of monitored network +on screen or cellinfo. Interesting thing is, that, for example, +you can normally use BTS test... + + +

Back to the top + + +

15. How can I disable NetMonitor ?
+


+ +

GSM/DCS/PCS phones: + +

Enter 241 test in phone or use one of described in +question How to activate it ? programs +(you enter number 241 there, select "OFF" or something similiar...). + +

TDMA 800/TDMA 1900 phones: + +

Enter NAM programming menu (*3001#12345# code - +some sources write, that you have to write security code instead of 12345), set "Field Test display" to "Off" and reboot phone. + + +

Na pocz±tek + + +

16. Do I need to disable NetMonitor before sending my phone to the service ?
+


+ +

Normally Nokia phones don't have activated netmonitor. When you will give your +handy to service, somebody there can think, that you made some strange things with it +(of course, it isn't any maxim - it depends on concrete service and people, +who will repair your phone)... But I think, that it will be better to save +eventually problems connected with it and deactivate netmonitor's menu before +giving phone to service (I repeat: it isn't sometimes required, but it's better +to make it, when you don't want to have problems)... + + +

Back to the top + + +

17. Is it possible to re-activate NetMonitor after disabling it ?
+


+ +

YES ! You can activate (and deactivate) +netmonitor's menu repeat infinitely (and once more ;-)) + + +

Back to the top + + +

18. Is NetMonitor available in analog Nokia phones ?
+


+ +

Yes, it seems, that is available in majority of Nokia phones (working in different +cellular systems). + + +

Back to the top + + +

19. Does NetMonitor allow to use phone like broadcast station ?
+


+ +

No - if you want to speak without costs with people, which are near to you, +you have to use broadcasting station or walkie-takie. + + +

Back to the top + + +

20. I don't have all described tests in my phone. Why ? Can I increase their number ?
+


+ +

This FAQ describes tests from DIFFERENT Nokia phones (models). If you want +to increase number of available tests, you can only change your phone to +new, which has more tests (like Nokia 7110) or change it's firmware to never +- sometimes (like in Nokia 5110) you can have ONE :-) new test (firmware +5.04 and never has additionaly test 89). + +

If you have ONLY 19 first tests, you have activated ONLY standard netmonitor +- enable full (here is more details). + + +

Back to the top + + +

21. Does NetMonitor allow to identify place, where is my interlocutor ?
+


+ +

NO. This information are in networks registry, but they're not sent +to your phone. NetMonitor allows however (at least theoretically) +to look into parameters of sound, which is sent from his(her) phone... + + +

Back to the top + + +

22. Does NetMonitor allow to identify place, where am I ?
+


+ +

It's possible, but not too precisely. Why ? + +

Phone can read such parameters required to identify (location of) BTSes +like their numbers (see Menu 10-11) or +TA (see Menu 10-1), +but readed TA couldn't have been distance +from BTS station in straight line (signal can break down) +and continuosly isn't possible finding, in what direction (what corner) +BTS stations are located (which are "seen" by your +phone). So, it's possible to identify area only, where you're (in cities, where +BTSes are located more close, it will be more +precisely). And it can be done by you or your operator... + + +

Back to the top + + +

23. What are NetMonitor codes ?
+


+ +

Sometimes I read advertisements with requests about NetMonitor codes and I don't know +exactly, what is it... It simple: in Poland (my country) rather only +GSM/DCS phones are used +and you don't have rather some special "secret" codes, which activate NetMonitor... When +you need it's description - it's in this FAQ. + + +

Back to the top + + +

24. Is it the truth, that in phones with additional hardware changing frequency band NetMonitor doesn't work correct ?
+


+ +

I didn't heard about such hardware. Article about it in Polish +Twoja Komorka number 4/2000 (page 18) +was only joke... + + +

Back to the top + + +

25. Where can I find description of FBUS/MBUS protocol and commands connected with NetMonitor ?
+


+ +

There are not official information about it. All pages below were created by different people, +which observed work of compiled software: + +

+

+ +

On the pages above you will find information about commands connected with +NetMonitor for NSx models (if you don't know model of you phone, +read this page). Always you can use ready and free +ActiveX control (http://www.gertjaap.com) +working with these models too... + + +

Back to the top + + +

26. Information sources
+


+ +

To make this FAQ I used: + +

+

+ +

People, which are not on this list, should write to me :-) ! + + +

Back to the top + + +

27. Additional information
+


+ +

+

+ +

For links to pages and sources in Polish language see Polish version of this description. + + +

Back to the top
+ +

+

[Part 1][Part 2][Part 3][Part 4][Part 5][Part 6][Part 7] +

+
+
+ +

Marcin Wiacek (WWW) +
Last modification: 4 May 2000
+ + + diff --git a/xgnokii/docs/help/en_US/netmon/net_mon1.gif b/xgnokii/docs/help/en_US/netmon/net_mon1.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a8988936a7c8ee9a6856b940b39cc0a4f88aadc GIT binary patch literal 702 zcmV;v0zv&pNk%w1VYdKl0Du4h00030|NkNR1OWg50RSuj0002D0BZn10{)DTsmtvT zqnxx_3s63r^$TL*NR}Xgrs~SJ?hD8AOxO0En#RW^s16JYg}hPGaa8<<%w{loflj25 zrSpmnP(6!n$Xl^?HQ8(j+(1vyzVc4(4g=v%I?;~BkK-c#x~!+(^9h=nmLpnfdW!ngBbM6QWVr>!>Pm|=cY?uLs{{KqIUAv} z8+<~lHB_Xlq@4L7+@~7aW(b_xd&>NkP0TxdyjzXi?af90_^@rRzCOj?F6|yKZzS!! zZa+_gzoQ6mZJaNlKz13z4J3H0pTUE!u9Z8-u$4n}=+Z@$l(14I{)-p=iTfCaW59{@ zI*BBQ$QUzD3m?XF25`@`I(3q5%I68>I6-Dk0?G*Vh|f1ecXp!GvL-E(NSh@!1JqQ} zU`3gtnz}KY)rKe&Z5@VH-_vh|M$Q8U3y0dZY}>kh>!PDvxz8@Hm|JD;KD>PU`aM{; z1<|p8!PV=B5^-S;b@^#%-0<$=nPe;TT&j4oI8{s%cl;O|08mw7aKuIrAK z*ES-X?{hhXnoA|FT`Z=vQLsmw<7M+pkM6tcMuwI#PWqRZGb6hao;NwQM?`)2F*II# zF`X13Ht4NqUxb>>N8NW4Uf7d43Fd;Ee{M7w$A(Zj0wRD9`eEK7=T%5zDJ5p--HI+^ zB_cKdgm|KAk>!zNGvFvwqmE$x(xZ$+ribK_8qyKuRqiC!q&4z{6Qx8r-BzT4aBayY kcV2$UU59{$mLiUzl}QtS;_2m~UugcOBA9YAPyhe`JCN5}o&W#< literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/netmon/net_mon2.gif b/xgnokii/docs/help/en_US/netmon/net_mon2.gif new file mode 100644 index 0000000000000000000000000000000000000000..841ead5729d2baa2770716fd5df9870f50359528 GIT binary patch literal 154 zcmZ?wbhEHbv}2HBXkY+=|Ns9h{$ycfU|?j>0r5dH4ornT{VPwuU4LM5qm#$mO;S&) z3m_qf%0qp18&#ns=O?H2MMXBgy7aGcOl`Nt$ZaFI~g*{toi zw68yz+v;s{X$F_A`QBH7(j9J7*BYi5$Q@1o68xiXs0r5dH4ovwy{VPwuJ>M|7(a9rs^Q`-? zYae+`<8D~?>eRM(vzsDP-L~A3%vjsbN$g{?2$ihmCpMY>--WcEz90@M{lct)LVHIPKhJizHeFlyu9Pt))O-V7#OSp DJQqZV literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/netmon/nm2_5110.gif b/xgnokii/docs/help/en_US/netmon/nm2_5110.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b221c14ff2b7114c72fce46cab6c01b2cb308a0 GIT binary patch literal 228 zcmVea%q08+LqntD)inHF& z9u9^ga~b1_RtjLI?z^xoOxO0E$#T`=_lyDhe!bmlW*pXpNJLAhq%n1e9W?ryI-1yJ z(W>o=$KlvxthB5P)Mh%nhnk00282>TLx8 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/netmon/nm_3210.gif b/xgnokii/docs/help/en_US/netmon/nm_3210.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1259fb8bfe7f628b580de3af86da0831e504cf4 GIT binary patch literal 392 zcmV;30eAjKNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtx(05}rbi?fn5 za1Dkc)p_NJrc7n9>I=IrOpo$e=lLDsDLb=mN(6-z^_!MuhJzRA*0zS|H}|!MmQa{zxHoth z2FdtQbZ407ImtJ<2uUPb`4~wlX(#&d$BK25>ZQo_HVTzHrOTUf*$dnfJiJ0|Y;>Ib zYjO0`?2B}|CHO3MyCj5(tnCoksfAu9Q?)t@=1BtL(<7D-~4~0027#ytY07 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/netmon/nm_5110.gif b/xgnokii/docs/help/en_US/netmon/nm_5110.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d41c3d58067ed8bd4460047baf6067a9c74f391 GIT binary patch literal 374 zcmV-+0g3)cNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtxZ0622Oi?c@6 z$nb6ANQPfXrmAC3=nBUzXvMaQcK6OJdF=zjX2T#w$U)*PuM|?(O!hoV(UVwV>ZsXT zmOJ~>!c|J}>#uWrtzmNHOdX1$PWoPu&rN`G6*XIXV#%46O$0wyI zcqz9CaVHtoWZAeFILQ*ph(`)4`qy~+!0GoQ``0r1117gQwOhjLtMT|N>@i$SXpC%@ zoE*H|)2w?Y20RG7;u3LK&35R7qs-lf+MvDt`aLe)QKl_v25WHeN&4JYwCB(ydbX@H>MV|`dP4Wfqa`wB U)sM3#;oKVTAS<0jZWI6jI|^#I00000 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/netmon/nm_9110.gif b/xgnokii/docs/help/en_US/netmon/nm_9110.gif new file mode 100644 index 0000000000000000000000000000000000000000..921ccdb83f7ee94ba40bf5bb44134ab4de16b258 GIT binary patch literal 392 zcmV;30eAjKNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtvTft0Y?izCRq z`$c`?Xocj7CT7Z#YYW5Xi_l_dV;i^!x!*hCf*s;vV)*?=%Zf2Mgbr7e>JbUVQmonC z_L*c@ztD1RLyoGw>~ac^O@W*DTGH6If*B3Pj zcO)mJc=c$RNQo%9n0bh~=_#4&SSi}T$k}x!tIFzFSUDP_TeRD&;|m-SJS;|RTyva! znH;nH@z$ik^_&6;?c6n;f$bD`_U7$+1->n0IzA>YsNL-nCVgF;Hx-S{bSec65)Mw@ zPW>v|opAZ)>EO06puiaf(aqt25ShYjNW92-2yq+6Xij|kh56I)*9CU4HjU}A@#Bq= zBo)y}r4m!beNI~PgQF$R!;~7C`TPkqXbUVH7tOrUk`O7Q#Ok#Yq)8J|Ut9=P)DtOd mNnlj8&X|Yi>Q<`ON|`GWYNr!iG1^D)u z-Lzf2L^w#|NR#&F2NiR!S{%JPXC|}9_By|m>R|g&|7s~_#@eia7U^cTR&@>Q4v8+I z(#(kJ38Irs?G-CTW=v+BIoY0tC1FALq7XB-W%GnrE)=n-SUx{Jb~PKb#d@zzq71t$ r+=UK`9gaQ5c0&A=*g1&{8+VrMzErd5=Jjh@-S;0pdi+?Bfx#L88ApI2 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/en_US/styl.css b/xgnokii/docs/help/en_US/styl.css new file mode 100644 index 0000000..02b023e --- /dev/null +++ b/xgnokii/docs/help/en_US/styl.css @@ -0,0 +1,46 @@ + + + diff --git a/xgnokii/docs/help/en_US/windows/calendar/index.html b/xgnokii/docs/help/en_US/windows/calendar/index.html new file mode 100644 index 0000000..4e4fe23 --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/calendar/index.html @@ -0,0 +1,18 @@ + + + + + Calendar + + + + + +

Main page

+
Calendar
+ +

FIX ME: we need description of Calendar window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/contacts/index.html b/xgnokii/docs/help/en_US/windows/contacts/index.html new file mode 100644 index 0000000..e944f59 --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/contacts/index.html @@ -0,0 +1,18 @@ + + + + + Contacts + + + + + +

Main page

+
Contacts
+ +

FIX ME: we need description of Contacts window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/dtmf/index.html b/xgnokii/docs/help/en_US/windows/dtmf/index.html new file mode 100644 index 0000000..7d07f23 --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/dtmf/index.html @@ -0,0 +1,18 @@ + + + + + DTMF + + + + + +

Main page

+
DTMF
+ +

FIX ME: we need description of DTMF window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/main/index.html b/xgnokii/docs/help/en_US/windows/main/index.html new file mode 100644 index 0000000..95abb36 --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/main/index.html @@ -0,0 +1,18 @@ + + + + + XGNOKII + + + + + +

Main page

+
XGNOKII
+ +

FIX ME: we need description of main xgnokii window here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/netmon/index.html b/xgnokii/docs/help/en_US/windows/netmon/index.html new file mode 100644 index 0000000..cd3b8fd --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/netmon/index.html @@ -0,0 +1,26 @@ + + + + + Netmon + + + + + +

Main page

+
Netmon
+ +

FIX ME: we need description of Netmon window in xgnokii here... + +

Related links: +
Netmonitor manual
+Norbert Hüttisch pages
+Pages from +NuukiaWorld server (English and Finnish)
+Description +from the phone (English and Finnish)
+ + + + diff --git a/xgnokii/docs/help/en_US/windows/sms/index.html b/xgnokii/docs/help/en_US/windows/sms/index.html new file mode 100644 index 0000000..7269ddb --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/sms/index.html @@ -0,0 +1,18 @@ + + + + + SMS + + + + + +

Main page

+
SMS
+ +

FIX ME: we need description of SMS window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/speeddial/index.html b/xgnokii/docs/help/en_US/windows/speeddial/index.html new file mode 100644 index 0000000..122ee9f --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/speeddial/index.html @@ -0,0 +1,18 @@ + + + + + Speed dial + + + + + +

Main page

+
Speed dial
+ +

FIX ME: we need description of Speed dial window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/en_US/windows/xkeyb/index.html b/xgnokii/docs/help/en_US/windows/xkeyb/index.html new file mode 100644 index 0000000..3078800 --- /dev/null +++ b/xgnokii/docs/help/en_US/windows/xkeyb/index.html @@ -0,0 +1,18 @@ + + + + + Keyboard + + + + + +

Main page

+
Keyboard
+ +

FIX ME: we need description of Keyboard window in xgnokii here... + + + + diff --git a/xgnokii/docs/help/pl_PL/calendar.html b/xgnokii/docs/help/pl_PL/calendar.html new file mode 100644 index 0000000..db94db0 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/calendar.html @@ -0,0 +1,12 @@ + + + +Xgnokii Calendar Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/contacts.html b/xgnokii/docs/help/pl_PL/contacts.html new file mode 100644 index 0000000..237dbff --- /dev/null +++ b/xgnokii/docs/help/pl_PL/contacts.html @@ -0,0 +1,12 @@ + + + +Xgnokii Contacts Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/dtmf.html b/xgnokii/docs/help/pl_PL/dtmf.html new file mode 100644 index 0000000..e5b57ec --- /dev/null +++ b/xgnokii/docs/help/pl_PL/dtmf.html @@ -0,0 +1,12 @@ + + + +Xgnokii DTMF Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/index.html b/xgnokii/docs/help/pl_PL/index.html new file mode 100644 index 0000000..072ce51 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/index.html @@ -0,0 +1,12 @@ + + + +Xgnokii Help + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon.html b/xgnokii/docs/help/pl_PL/netmon.html new file mode 100644 index 0000000..0c45314 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon.html @@ -0,0 +1,20 @@ + + + +Xgnokii Netmonitor Help + + + +

Here is our netmonitor +manual from Marcin Wiacek.

+

+You can see another pages too:
+Norbert Hüttisch pages
+Pages from +NuukiaWorld server (English and Finnish)
+Description +from the phone (English and Finnish)
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/dir0.gif b/xgnokii/docs/help/pl_PL/netmon/dir0.gif new file mode 100644 index 0000000000000000000000000000000000000000..352e8970ed164ee97f62d1f6e7586d8df9f5d67d GIT binary patch literal 123 zcmZ?wbhEHb6krfw*u($=4Gawj4jgD`X!y^-@c%!M00G6HEQ|~cEDSmz4oEE%vxCR3 zJL?$sh&fN#9MwJZUbH&{Q$`%Oz?5{3$eiv~8)|A_OY$D&IJTSV{Z_#@EUd}xWe*jn Tiui33IBBw4m}A>S1_o;Yzgj23 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/dir1.gif b/xgnokii/docs/help/pl_PL/netmon/dir1.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd4882f0b4ce0a41e5c574f654f0b34caeae75ff GIT binary patch literal 142 zcmZ?wbhEHb6krfw*u($=4Gawj4jgD`X!y^-@c%y$0ci%spDc_F3@i*fAQd3BOw7R^ zR=55+Z*X@sxYYZ0jp5~QzFqB|@rDczm9-5CB8vsLEEBB%obXtGZV%fp!J^$$-k0&b o>+pV{ebd-Xf4AuATURzJ8Lev-)tG%+SA5pdwDO24ZcGf;0M6((Qvd(} literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/glowna.htm b/xgnokii/docs/help/pl_PL/netmon/glowna.htm new file mode 100644 index 0000000..5f44394 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/glowna.htm @@ -0,0 +1,71 @@ + + + + + + Strona g³ówna - Nokia i GSM + + + +Nokia i GSM OFFLINE + +

Otworzy³e¶(a¶) w³a¶nie wersjê offline dzia³u Nokia i GSM z +mojej strony domowej +(na niej zawsze znajdziesz najnowsz± wersjê tego dzia³u oraz mo¿esz siê zapisaæ do +listy dystrybucyjnej, w której informujê o zmianach i nowo¶ciach w nim). W wersji tej +mo¿esz siê zapoznaæ z opisem monitora sieci, +FAQ o logach operatora albo FAQ o kablach +ewentualnie z informacjami o kolejnych wersjach oprogramowania telefonów Nokia +i zmianach w nich (wersje z dnia 4 maja 2000). + +

Spis tre¶ci zosta³ umieszczony po lewej stronie okna (dotyczy to tylko wersji ramkowej). +Jest on zbudowany podobnie jak w pomocy w Windows i w przegl±darce Internet Explorer 4.0 +(lub nowszej) pozwala siê zwijaæ/rozwijaæ. Dla u¿ytkowników tych programów +przygotowa³em równie¿ udogodnienie polegaj±ce na tym, i¿ mo¿esz go chowaæ +(bêdzie rozwijany podobnie jak menu po klikniêciu na odno¶nik "spis tre¶ci" +w lewym górnym rogu) albo umie¶ciæ na sta³e w³a¶nie po lewej stronie okna +- pomiêdzy tymi dwoma stanami mo¿esz przechodziæ klikaj±c "Kliknij, aby +usun±æ menu" i "Kliknij, aby zakotwiczyæ menu". Rozwi±zanie to przypomina +to, co mo¿esz zrobiæ m.in. z list± folderów w programach Outlook i Outlook +Express (przynajmniej takie by³y za³o¿enia :)) - jest jedynie wolniejsze +i ze wzglêdu na ograniczenia HTML nie zawsze dzia³a tak, jak powinno +(np. po zmianie po³o¿enia menu musisz czekaæ, a¿ za³aduje siê strona g³ówna, +a dopiero pó¼niej ogl±dana wcze¶niej przez Ciebie; ponadto ta ostatnia +nie jest przewijana do punktu, w którym j± czyta³e¶(a¶)). Mam nadziejê, i¿ +te niedogodno¶ci nie bêd± jednak zbyt uci±¿liwe... + +

Chcia³bym tutaj zwróciæ uwagê u¿ytkownikom Netscape Navigatora 4.x - przed +zmian± rozmiaru czcionki proszê zaznaczyæ ramkê z czytan± przez Was stron± +(inaczej program potrafi siê zawiesiæ). Dla was równie¿ przygotowa³em ma³± +niespodziankê - po najechaniu na nazwê pliku w spisie tre¶ci powinni¶cie +zobaczyæ "dymek" z jej pe³n± nazw±... + +

Odno¶nik "monitor sieci" w lewym górnym rogu wy¶wietla w miejscu spisu tre¶ci (mo¿esz zreszt± do niego powróciæ) +stronê pozwalaj±c± szybko dotrzeæ do opisu konkretnego testu w monitorze sieci +telefonów Nokia... + +

Je¿eli bêdziesz drukowac opis monitora sieci w Internet Explorerze 5 lub nowszym, +niektórych niepotrzebnych elementów (np. odno¶ników "Na pocz±tek") nie bêdzie na wydruku... + +

¯yczê przyjemnego czytania i przypominam, i¿ mog³em zebraæ wiele z zawartych tu wiadomo¶ci +tylko i wy³±cznie dziêki pomocy ró¿nych ludzi. Równie¿ Ty mo¿esz byæ jednym z nich: je¿eli +masz jakiekolwiek uwagi (równie¿ krytyczne) albo dodatkowe informacje na poruszone tu tematy, +nie wstyd¼ siê ;-) +i napisz do mnie e-maila. + +

+ +

Zapraszam te¿ do odwiedzenia stron + +

Pojêciownik Komputerowy +
gnokii (dotyczy tworzenia bezp³atnego oprogramowania do ró¿nych Nokii) +
N9World (wspania³a strona o Nokii 9110) +
Strona Kiliana - linki, linki, linki... + +

+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/f2mbus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b39129ccc2e1c7eb78edc358b6820326ba989d8d GIT binary patch literal 1576 zcmV+@2G{vVNk%w1VO#-^0J8u900030|Ns90000000000000000000000000000000 z00000000000000000000EC2ui09*l&000F3Fvv-(y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7ZkA04jh|g7hhy#^bXC-Apl8O*Zqaa=p>q5(PziyUS^HTxx>D zR;pYZdRN>WJbY)b-`{CWW)poPg?kiiUsQ^JhlEmdkBBald4Gg(+7?(gvN^7Hid_V@Vt`ukC6{{H|23LHqVpuvL(6DnND zu%W|;5F;gOg{f$ z2z&vMR6$u{dS*hS%OB80Ifo)cN)$}anQc;vak*mJtg2KydBpg!Ys;@-wP_7|l&sUN zH*V?xR5cn_uVY(H-gS&}?P9%bFK?EN_p|59fKh{(sX26G)iOwP7G0Y5Y}&Flj|j{)@oK`DBX<@& znY3%Z$47&P9fNnVhNh#A3=Z1h2ZzF!+cusZcl2k_=lCAKRk?KFB$D$ykGy+v?cU+P zw>{hxee(9rr#H-gatn>z$^NHbdji(hm~8dQb>D*d`2`>g58_wLe(_Z}A7lmIcAoxF8agSZk4qBiA!1e1DB^D=rpJpWp`EXrS<->+ZR=Vmr*cp+;+>wSWpdZow0W z>nEW1{(I=dL*g>0u>R&du*64}OfId4zJ_nZ`l^d?zXw0c>&P@$JnxnaXDlO&h70tK7Ic!_&k9RZn!&zAFg;hi7)OrIgLLq zc{h7*S& zc@k0Pk(7z#;~J-!$rYk<9cfhK8e{3bPri~Lv@9SkYpKaw;xd+i+@%0)=}VD(l9n>>@5)x5|wvk8-Ja+4+A{H996DNd7+vz*4fCND7in+%X8f=!Q-$ z^DC@y6COgIoy7qC(U&*o__KNc1LsN)+9IxXz`b&WOT;&7$CT} z*pfI&Nr~mQ$w{MjDHci8SQ`4N8Kx>Zx{|3>1XXniiYjOMN+gl!i154MTN%7-{BxYF zyv#hJ+YB8oJxyJ0eT|*1z0KY2{S6*2K2Bb4evY25zOGi~{th26KTlt8e~+K9zt7+A z{|_*rKQinJ8l=M|*1?4gK~QN3F=C)p5-VEd@bIF>{*4qea{LIAAh3`mNqS@fkAysD z?}XKBr6L}gl!a;~Y+2LYOq)BGD6~NlrLYjiZhc@Q(iNrge)quHYzrpF(nR zmoMJLR_7MZ`_@F;6lalHChS;I*1wQBGdBELt>?O&**+$<;pgJWr6;ad47+h`*|b5E zu5IMs-pjnb%(XXRVCLClJL5KvJ2YA0O6khk?HeQJzz%yO7kxZ*W!uEB2k%8a{3`Cx z<(3z3elYgr(AT@azP&hj&Ca7|w?19HVWQUlm1}?OUwhsuH(zrF>KEU4U7gq3g7&@l z-*ET6_E&tW?N?QO2%dJJbPOKH--iQA$R33gRtO+|g=vV|Xd>pN_YW)e==cJ;#=jMO zo_gk?KBAiItIN>?tD}HQO023{hPnReio7}rC#TN(N}!&d+WKgy#nM`>qG=h5>8{H% zyK1yePMagP!$O)ZoI$e4Em)Zbw{D}Of|=^8)}nhYwdcl5-?#c&8Eh}Erkkv^|C(!T zte`H;>bCxJd1bvXiaRL4gyM_wy$B=htFpbi>#Z1#46N?A{3?8GzUBVgF|GxJY%shx zk<9SR71OKonmI?xvB~4=mXjeW)iN|sL9bK?Kfe-vv?DY%%?3_QyQEW3`#f1v)*SVy zb=L=R?RD7dfGu{}<&bT5+TftAcH7&q?RMPOz%6&((a>#o-pb&uci*q@?RVe^jVpNJ zXaH__;ExoV(w<+uXa}ze^mv?^YKjE$qdEB*ib!th#*PWdPrD^mf02 zJGj=jt`N=2Z-0?$0)gLpE2n%_Bg;Zy$e%MTO! z)z5ywK%Oe5hYGHBLVt1S*#O@rru7M_M;@tKU?}#$YhX}c{ z#0PBwMfu=iiXmH~W%`JBE-PLSi$~O=@Ge#w0eZ0^DD;sS$H + + + + + + + + + FAQ - Loga operatora w Nokiach + + + + + +

Strona g³ówna

+
Loga operatora
+ +


+ +

Pamiêtaj, ¿e ja ani osoby tu wymienione nie ponosz± ¿adnej odpowiedzialno¶ci +za szkody wynik³e z u¿ycia zawartych tu wiadomo¶ci (wykorzystujesz je na +w³asn± odpowiedzialno¶æ) ! + +

+

    +
  1. Co to jest ?
  2. +
  3. Czy mój telefon mo¿e je wy¶wietlaæ ?
  4. +
  5. Co potrzeba do stworzenia loga ?
  6. +
  7. Gdzie w Internecie mo¿na znale¼æ gotowe loga ?
  8. +
  9. W jaki sposób mo¿na przes³aæ logo do telefonu ?
  10. +
  11. Przegl±d dostêpnych programów do edycji/wysy³ania log
  12. +
  13. Dlaczego nie mogê zainstalowaæ programów Thomasa Kesslera (pokazuje siê 'Runtime error') ?
  14. +
  15. Dlaczego nie mogê zainstalowaæ programu Logo Express (b³±d rejestracji bibliotek) ?
  16. +
  17. Jak skonfigurowaæ programy ?
  18. +
  19. Przesy³anie log przy u¿yciu konkretnych programów
  20. +
  21. Dlaczego nie mogê go po prostu przes³aæ kablem (we wszystkich modelach) ?
  22. +
  23. Czy mogê je wys³aæ przez Internet albo modem ?
  24. +
  25. Dlaczego nie mogê go przes³aæ u¿ywaj±c tego centrum wiadomo¶ci SMS co zawsze ?
  26. +
  27. Jak zapisaæ logo w pamiêci telefonu ?
  28. +
  29. Chcê wykasowaæ moje logo !
  30. +
  31. Czy mogê skopiowaæ logo z pamiêci telefonu do komputera
  32. +
  33. Mój notebook ze z³±czem podczerwieni nie chce dzia³aæ..
  34. +
  35. Jak przesy³aæ loga do Nokii 3210 ?
  36. +
  37. Czy wgranie loga operatora narusza warunki gwarancji ?
  38. +
  39. Przy próbie bezpo¶redniego wgrania loga przez kabel (albo jego wykasowania) programem LogoManager nic siê nie dzieje...
  40. +
  41. Jak skopiowaæ logo z telefonu do telefonu ?
  42. +
  43. Dodatkowe informacje
  44. +
+ +

+ +1. Co to jest ?
+


+ +

Logo operatora to po prostu ma³y rysuneczek wy¶wietlany zamiast nazwy +konkretnej (Ty j± wybierasz) +sieci komórkowej, gdy telefon znajduje siê w jej zasiêgu (np. +zamiast 'Era GSM' na ekraniku mo¿e siê pojawiæ znaczek znany z reklam, +'Witaj Mareczku', 'Kocham Ciê' czy co¶ innego...). + +

Na pocz±tek

+ +2. Czy mój telefon mo¿e je wy¶wietlaæ ?
+


+ +

Loga operatora obs³uguj± nowsze Nokie - wiêkszo¶æ modeli +serii 5110 (np. 5110 i 5130), 6100 (6110, 6130 i 6150), 8800 (8810), 9100 +(9110) i 3200 (3210). Przy czym jedna ciekawostka: czasami obs³uga log +zale¿y od wersji oprogramowania w telefonie (tzn. je¿eli jest ono nowe, +s± one obs³ugiwane) - przyk³adowo w Nokii 6190 musi byæ ono w wersji co najmniej 5.83. +Logo jest zapisywane w ich pamiêci (jednorazowo mie¶ci ona tylko jeden taki rysunek +o rozmiarach 72x14 pikseli). Po jego wgraniu telefon mo¿e niestety nie +wy¶wietlaæ wszystkich informacji (np. mo¿e nie mie¶ciæ na ekranie +siê d³ugie cellinfo i nazwa profilu). + +

Tak± mo¿liwo¶ci± dysponuj± obecnie tak¿e niektóre Motorole i Siemensy +(niemniej jednak nie mam dodatkowych informacji na ten temat). + +

Starsze Nokie (np. 2110, 3110) albo telefony innych firm NIE MAJ¡ jej +(chocia¿ tutaj mogê siê myliæ). + +

Czy wiêc posiadacze innych telefonów nie mog± zmieniæ wy¶wietlanej nazwy +sieci ? Nie, jest to oczywi¶cie mo¿liwe np. w wiêkszo¶ci Siemensów (patrz +opis dla Siemensa +S4), w Nokiach (niezbêdne jest odpowiednie oprogramowanie serwisowe +i kabel do pod³±czenia telefonu) i +Motorolach (wymagany jest m.in. emulator karty SIM)... + +

Na pocz±tek

+ +3. Co potrzeba do stworzenia loga ?
+


+ +

Mo¿esz do tego u¿yæ w³a¶ciwie dowolnego programu graficznego - dostêpne +obecnie programy do wysy³ania log pozwalaj± importowaæ obrazki (o rozmiarach +72x14 pikseli i w 2 kolorach) w praktycznie ka¿dym popularnym formacie +(GIF, BMP, JPG) albo ze Schowka systemowego (w Windows)... + +

Co wiêcej, czê¶æ z nich ma wbudowany edytor z ró¿nymi przydatnymi narzêdziami +- po szczegó³y odsy³am do ich porównania... + +

Na pocz±tek

+ +4. Gdzie w Internecie mo¿na znale¼æ gotowe loga ?
+


+ +

+

+ +

Loga te w wiêkszo¶ci siê niestety powtarzaj± (je¿eli jednak nie znajdziesz +której¶ strony, bêdziesz móg³(mog³a) je pobraæ z nastêpnej)... + +

+ + + + + + +
Przegl±danie gotowych log mo¿esz sobie u³atwiæ u¿ywaj±c programu Logo +Express. + +

Przegl±darkê znajdziesz równie¿ tutaj +(wymaga bibliotek Visual Basic 6.0). Niestety, wersja niezarejestrowana +jednorazowo pozwala obejrzeæ ok. 20 log (pó¼niej trzeba zrestarowaæ program). + +

Programy te s± dostêpne na serwerze +FTP Fan Klubu Nokii. +

+ +

Na pocz±tek

+ +5. W jaki sposób mo¿na przes³aæ logo do telefonu ?
+


+ +

Najprostsza metoda polega na skorzystaniu z (dostêpnego w niektórych +modelach) z³±cza podczerwieni - nale¿y przybli¿yæ telefon do z³±cza podczerwieni +w komputerze, w³±czyæ odbiornik w telefonie (np. Menu 10 w Nokii +6110) i wgraæ logo odpowiednim programem: Logo +Manager, Logo Express +lub Group-Logo Uploader Johna +Changa. + +

Je¿eli w swoim telefonie/komputerze nie masz takiego z³±cza, równie +dobrze mo¿esz wgraæ logo bezpo¶rednio do pamiêci telefonu przez kabel: + +

+

    +
  • +FBUS - loga wgrywa Logo +Express albo Logo Manager, +mo¿liwe jest to tak¿e z gnokii +(wszystkie do Nokii 6100, dwa ostatnie równie¿ do Nokii 5100)
  • + +
  • +MBUS - potrzebujesz do tego komercyjnego programu +serwisowego WinTesla i programiku NolBin. +PRAGNÊ +JEDNAK Z GÓRY UPRZEDZIÆ, I¯ ICH U¯YCIE MO¯E SPOWODOWAÆ USZKODZENIE S£UCHAWKI +I GO RACZEJ NIE POLECAM.... Z kablami takimi dzia³a +równie¿ wspomniany Logo Manager.
  • +
+ +

Oba powy¿sze rozwi±zania s± bardzo wygodne, gdy¿ przes³anie loga jest bezp³atne. +Ich wad± jest niestety to, i¿ dostêpne aktualnie oprogramowanie do komputera +nie potrafi porozumieæ siê ze wszystkimi s³uchawkami: firma Nokia +ci±gle bowiem zmienia protoko³y transmisji...albo mo¿liwo¶ci i funkcji ich +oprogramowania. + +

Co wiêc zrobiæ, gdy masz w³a¶nie tak± "nietypow±" s³uchawkê ? Nale¿y +wykorzystaæ fakt, i¿ loga operatora mog± byæ przesy³ane jako specjalnie +zakodowane SMSy (i ka¿da Nokia, która obs³uguje loga, potrafi je odbieraæ +w tej postaci)... Dlatego te¿ wpierw musisz sprawdziæ, czy opisane w +pytaniu 6 oprogramowanie potrafi pracowaæ z Twoim telefonem. +Je¿eli nie, musisz znale¼æ inn± s³uchawkê (taty, babci, wujka, itp...), która dzia³a +z którym¶ z tych programów (np. Nokiê 6110), pod³±czyæ j± do komputera +(przez z³±cze podczerwieni albo kabel) i logo +wys³aæ tym razem jako SMSa (pod numer w³o¿onej do Twojego telefonu karty +SIM oczywi¶cie). Z kolei, gdy odpowied¼ jest twierdz±ca, po pod³±czeniu +swojej s³uchawki wysy³asz z komputera loga pod jej numer. I ju¿... + +

Oprócz takiej prostej funkcji (wysy³anie loga jako SMS przez do³±czony +do komputera telefon), wiêkszo¶æ z tych programów pozwala równie¿ na zapisanie +loga na karcie SIM (po od³±czeniu od komputera bêdziesz móg³(mog³a) je +wysy³aæ komu chcesz bezpro¶rednio z menu telefonu - wszak jest to SMS). + +

Ale w tym momencie (gdy kto¶/Ty wysy³asz logo w postaci SMSa) najczê¶ciej +pojawia siê pewien haczyk: by czyj¶/Twój telefon go zinterpretowa³ w³a¶nie +jako logo, SMSC (Centrum SMS), które go wys³a³o, musi byæ odpowiednio przystosowane +do jego przes³ania... Inaczej bêdzie to "zwyk³y" SMS. Co wtedy ? Trzeba +zmieniæ u¿yte SMSC... Je¿eli poszukiwania skoñcz± siê fiaskiem, nale¿y +wtedy np. poszukaæ kogo¶ z aktywacj± z innej sieci, kto pozwoli nam wys³aæ +owego upragnionego SMSa (jego SMSC musi obs³ugiwaæ loga i umieæ przesy³aæ +SMSy do Twojej sieci) - tak sobie obecnie najczê¶ciej radz± posiadacze +Ery GSM (prosz± ;-) o to u¿ytkowników +Plus GSM)... Przy czym wtedy ten kto¶ +musi wys³aæ logo z telefonu, który obs³uguje loga (czyli której¶ z wymienionych +na górze Nokii). Mo¿e te¿ w³o¿yæ swoj± kartê do Twojego telefonu (o ile nie +masz simlocka) i wys³aæ logo pod jego numer telefonu (chodzi o to, ¿eby +wys³any SMS "wróci³" pod numer karty SIM, która znajduje siê w Twoim telefonie)... + +

Je¿eli korzystasz z sieci Idea, +bêdziesz móg³(mog³a) otrzymaæ pewne gotowe loga +z bramki dzia³aj±cej dziêki Fan Klubowi Nokii +(odno¶nik do jej opisu i listy przesy³anych log znajdziesz na stronie +http://www.fkn.pl/logo/operatora/index.html). +Nale¿y pamiêtaæ, i¿ bramka ta sama ustawia sieæ, w której logo bêdzie +wy¶wietlane (czyli Ideê). + +

Je¿eli nie mo¿esz wysy³aæ ze swojego telefonu SMSów, +u¿yj programu Smart +Messaging Agent, który przy pomocy modemu ³±czy siê z SMSC dostêpnym +pod normalnym numerem telefonu (jak modem) i wysy³a przez niego logo... +Nale¿y siê tutaj przygotowaæ na trochê wiêksze koszty: op³atê miêdzynarodow± +TPSA (polskie SMSC nie obs³uguj± po³±czeñ dial-up, +wiêc trzeba dzwoniæ za granicê). + +

I na koniec jeszcze inna mo¿liwo¶æ: czasami wgranie loga (czyli faktycznie +wys³anie SMSa z nim) oferuj± ró¿ni ludzie na listach dyskusyjnych zwi±zanych +z tematyk± GSM/stronach WWW. Tylko, ¿e cena w ten sposób otrzymanego loga +mo¿e byæ astronomicznie wysoka w stosunku do kosztów jego wys³ania +(nawet 10, 20 z³ !). Ale je¶li chcesz, zajrzyj np. na stronê +http://www.waw.pdi.net/~pawelk/nokia-logo/ +albo http://www.vc.pl/phoenix/logo/logo_nokia.htm. +Czasami jest to tak¿e oferowane przez ró¿ne firmy, gdy wykupisz u nich inn± +us³ugê zwi±zan± z telefonem (patrz np. http://www.datex.pl/). + +

Czasami jest to oferowane za darmo (?): +http://www.bydgostia.org.pl/logo/. + +

Natomiast stronê http://www.apic.com.sg +wymieniê raczej jako ciekawostkê - po zarejestrowaniu +mo¿na z niej wys³aæ bezp³atnie 3 loga... No i oczywi¶cie musi byæ mo¿liwe +(tzn. nie zablokowane przez operatorów) wysy³anie SMSów z sieci Singapore Mobile One (M1-SG, 525-03) +do Twojej (wed³ug mojej informacji nie dzia³a to wiêc dla numerów +Ery GSM +rozpoczynaj±cych siê od 606)... + +

Na pocz±tek

+ +6. Przegl±d dostêpnych programów do edycji/wysy³ania log
+


+ +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
nazwa
Operator-Logo Uploader Thomasa Kesslera
(shareware)
Logo 6110
(freeware)
LogoManager
(shareware)
Logo Express
(freeware)
Group-Logo Uploader Johna Changa (freeware)
gnokii (tutaj s± najnowsze wersje testowe) (freeware z kodem ¼ród³owym)
do wysy³ania log do Nokii 9110 (freeware z kodem ¼ród³owym)
do wysy³ania log do Nokii 9110
system operacyjny
Windows 95/98 (NT 4.0)
Windows 95/98 (NT 4.0)
Windows 95/98 (NT 4.0)
Windows 95/98 (NT 4.0)
DOS
Unix (Linux) albo Windows 95/98 (NT 4.0)
Unix
GEOS
wymaga runtime VB 5.0
tak
nie
nie
tak
nie
nie
nie posiadam szczegó³ów
nie
wymaga runtime VB 6.0
nie
nie
nie
tak
nie
nie
nie
wymaga Nokia Cellular Data Suite
tak (tylko przy po³±czeniu kablem) - do poprawnej pracy wersja 2.0 musi byæ uaktualniona do 2.0a
tak
nie
nie
nie
nie
nie
rodzaj po³±czenia
kabel FBUS / podczerwieñ
kabel FBUS
kabel FBUS / MBUS (po zmianie ustawieñ programem LmConfig.exe)/ podczerwieñ
kabel FBUS / podczerwieñ
podczerwieñ
kabel FBUS / podczerwieñ
nie dotyczy
obs³ugiwane formaty
BMP, GIF, JPG, ICO, RLE, WMF, EMF, I61, NGG, NOL
import grafiki przez Schowek
NLM, NOL, NGG, I61, import grafiki przez Schowek
JPG, BMP, NOL, NGG
NGG, MBP, NOL
NOL, NGG, NLM
BMP, NOL
edycja log
nie
tak
tak
tak
tak
tak
tak
zapisuje loga na karcie SIM
tak (w Skrzynce Odbiorczej)
tak (w Skrzynce Nadawczej)
nie
tak (w Skrzynce nadawczej lub Odbiorczej)
nie
nie
nie
zapisuje logo bezpo¶rednio do pamiêci telefonu przy po³±czeniu kablem
nie
nie
tak (na pewno Nokie 6100 i 5100)
tak (na pewno Nokie 6100), nie wgrywa do Nokii 5100
nie
tak
nie
wysy³a loga jako SMS z komputera
tak
nie
nie
tak
nie
tak
tak
odczytuje loga bezpo¶rednio z pamiêci telefonu
nie
nie
tak (na pewno Nokie 6100 i 5100)
nie
nie
tak
nie
dodatkowe funkcje
brak
brak
obs³uga log startowych, grup i dzwonków; czytanie security code; +aktywacja / obserwacja parametrów monitora sieci; +edycja ksi±¿ki telefonicznej
obs³uga log startowych i grup; czytanie security code; aktywacja +monitora sieci; symulacja klawiatury telefonu; wykonywanie po³±czeñ
obs³uga log grup
edycja ksi±¿ki telefonicznej, SMSów; wykonywanie po³±czeñ; aktywacja/obserwacja +parametrów monitora sieci i wiele innych...
brak szczegó³ów
lista dyskusyjna
nie
nie
tak
tak
nie
tak
nie
mój wybór (im wiêcej, tym lepiej) przy po³±czeniu kablem
*
**
***
***
bezkonkurencyjny
mój wybór przy po³±czeniu podczerwieni±
*
***
****
**
bezkonkurencyjny
+
+ +

+ + + + + + +
Je¿eli chcia³(a)by¶ odwiedziæ stronê domow± którego¶ z tych programów, +kliknij na linku dostêpnym w tabelce. Najnowsze wersje wiêkszo¶ci/wszystkich +z nich s± te¿ dostêpne na serwerze FTP Fan Klubu Nokii. +Odno¶niki do opisów czê¶ci z nich znajdziesz na stronie +http://www.fkn.pl/logo/operatora/index.html.
+ +

U¿ytkownicy Windows CE i Nokii 6xxx powinni zajrzeæ na stronê +projektu Light Sabre, gdzie tworzone s± ró¿ne programy do takich konfiguracji +sprzêtowych (byæ mo¿e jest ju¿ tam dostêpny program do wysy³ania log)... + +

Je¿eli masz Psiona, byæ mo¿e zainteresuje Ciê oferta +ze strony http://www.sgsoftware.co.uk/index.html. + +

Na pocz±tek

+ +7. Dlaczego nie mogê zainstalowaæ programów Thomasa Kesslera (pokazuje siê 'Runtime error') ?
+


+ +

Nie masz w systemie bibliotek od Visual Basica 5.0 (musisz szukaæ pliku +MSVBVM50.EXE). Znajdziesz go np. na CD magazynu Enter +albo w wyszukiwarkach plików (np. http://www.plikoskop.pl). + +

Na pocz±tek

+ +8. Dlaczego nie mogê zainstalowaæ programu Logo Express (b³±d rejestracji bibliotek) ?
+


+ +

W moim przypadku by³y to pliki "SSubTmr.dll", "VbalTbar.ocx" i "cPopMenu.ocx". +Przyczyn mo¿e byæ kilka: + +

+

    +
  • +u¿ywany jest Windows 95, który ma ograniczenia dotycz±ce wielko¶ci poszczególnych +kluczy Rejestru (zosta³ osi±gniêty limit). Rozwi±zaniem jest u¿ycie programów +w rodzaju Microsoft RegClean (które usuwaj± niepotrzebne klucze Rejestru +i w ten sposób tworz± miejsce dla tych, które chce stworzyæ instalator +Logo +Express).
  • + +
  • +niew³a¶ciwie zosta³y zainstalowane biblioteki run-time Visual Basic 5.0 i 6.0 +(nale¿y instalowaæ je z pliku MSVBVM50.EXE i MSVBVM50.EXE, która kopiuj± potrzebne +pliki w odpowiednie miejsca, jak równie¿ zapisuj± informacje o ich obecno¶ci w Rejestrze +systemu). Znajdziesz je np. na CD magazynu Enter +albo w wyszukiwarkach plików (np. http://www.plikoskop.pl).
  • +
+ +

Je¿eli ju¿ dokonasz w³a¶ciwych dzia³añ w systemie, mo¿esz zarejestrowaæ +rêcznie te biblioteki (uruchamiasz program "regsvr32.exe" i podajesz mu +jako parametr nazwê biblioteki do zarejestrowania - operacjê powtarzasz +oczywi¶cie dla ka¿dej biblioteki oddzielnie !). + +

A tak w ogóle, je¿eli ju¿ robisz porz±dki w systemie, to radzê zainstalowaæ +tak¿e run-time wszystkich wersji Visual Basic i Microsoft DirectX (np. +w wersji 6.1). Nie zaszkodzi je mieæ (s± wymagane przez bardzo du¿o programów, +a ich brak owocuje czasami bardzo dziwnymi komunikatami o b³êdach - np. +u mnie (druga przyczyna) "regsvr32.exe" pokazywa³ b³±d "0x8000ffff")... + +

Na pocz±tek

+ +9. Jak skonfigurowaæ programy ?
+


+ +

+

    +
  • Operator-Logo Uploader Thomasa Kesslera
  • + +

    +

      +
    • w menu g³ównym wybierasz Edit, Options
    • +
    • ustawienia w otwartym oknie Options: + +

      +

        + +
      • je¿eli po³±czy³e¶(a¶) telefon z komputerem kablem: + +

        +

          +
        • +w zak³adce 'Serial Port' wybierasz numer portu, pod którym w systemie s± +zainstalowane modemy 'Nokia GSM Data' i 'Nokia GSM Voice' (w Nokii 8810 +numer portu podczerwieni w Microsoft IR-Monitor)
        • + +
        • +w zak³adce 'SMS' wpisujesz numer odpowiedniego centrum wiadomo¶ci (SMS +Centrum - SMSC):
        • + +

          +

            +
          • +posiadacze Idei pracowicie +wstukuj± +48501200777
          • + +
          • +u¿ytkownicy Plusa podaj± +48601000310
          • + +
          • +skazani na Erê :) musz± po¿yczyæ od +kogo¶ kartê Plusa - nie znam bowiem +numeru centrum, z którego mog± skorzystaæ :(
          • +

            +

          +
        +
      • + +
      • +je¿eli masz port podczerwieni w komputerze, w zak³adce 'IR Port' podajesz +jego numer
      • + +
      • +w zak³adce 'Advanced' podajesz, czy program ma korzystaæ m.in. z ksi±¿ki +telefonicznej w telefonie czy na karcie SIM
      • +
      + +
    + + +
  • +Logo 6110 + +

    +

      +
    • +w menu g³ównym wybierasz Kieli, English (program bêdzie u¿ywa³ jêzyka angielskiego)
    • + +
    • +w oknie g³ównym podajesz numer portu, pod którym w systemie s± zainstalowane +modemy 'Nokia GSM Data' i 'Nokia GSM Voice'
    • +
    +

    +

  • + +
  • +LogoManager: program konfiguruje +siê sam, ustawienia mo¿esz zmieniæ pó¼niej, gdy z menu "Tools" wybierzesz +"Options...": + +

    +

      +
    • +podajesz port, pod którym jest fizycznie podpiêty kabel ("COM port")
    • + +
    • +podajesz, gdzie pod którym portem jest dostêpne z³±cze podczerwieni ("IR +port")
    • + +
    • +wybierasz operatora swojej sieci komórkowej (w niej bêd± wy¶wietlane wysy³ane +loga) - przycisk "Network chooser..."
    • + +
    • +oraz jêzyk, w którym bêd± wy¶wietlane komunikaty programu (polski jest +dostêpny po doinstalowaniu "Language Pack" z pliku lm_pack.zip) - przycisk +"Language..."
    • +
    +

    +

  • + +
  • +Smart Messaging Agent: + +

    +

      +
    • +w oknie g³ównym wskazujesz operatora Twojej sieci (np. "Poland - ERA GSM") +i w "Mobile Number"podajesz numer Twojego telefonu (w formacie "00 48 xxx +xxx xxx",a nie "+48 xxx xxx xxx" !)
    • + +
    • +w menu "Options" wybierasz jako SMSC "Denmark - TeleDenmark Mobil" albo +operatora z Norwegii (wed³ug +informacji z grup dyskusyjnych te SMSC s± na pewno niezablokowane dla +polskich sieci) oraz modem, który ma byæ u¿yty (po³±czenie poprzez telefon +komórkowy mo¿e byæ dro¿sze i niemo¿liwe, gdy nie masz wykupionego abonamentu +na przesy³anie danych)
    • +
    +

    +

  • + +
  • +Logo Express: program +konfiguruje siê sam, ustawienia mo¿esz zmieniæ pó¼niej, gdy z menu "Tools" +wybierzesz "Options...": + +

    +

      +
    • +w "Port" podajesz port, pod którym jest podpiêty kabel (fizycznie)
    • + +
    • +zaznaczasz, czy logo ma byæ zapisywane w "Skrzynce nadawczej" ("Outbox") +czy "Skrzynce odbiorczej" ("Inbox")
    • + +
    • +wpisujesz numer SMSC (patrz uwagi powy¿ej dla Operator-Logo +Uploader Thomasa Kesslera)
    • +
    + +

    W g³ównym oknie mo¿esz wybraæ operatora sieci (w której bêd± wy¶wietlane +wysy³ane loga)

  • +
+ +

Na pocz±tek

+ +10. Przesy³anie log przy u¿yciu konkretnych programów
+


+ +

Opisy dla Operator-Logo +Uploader Thomasa Kesslera: + +

+

    +
  • +je¿eli masz port podczerwieni (dotyczy tylko Nokii 6110, 6130 i 6150 !): + +

    +

      +
    1. musisz w³±czyæ port podczerwieni w telefonie
    2. + +
    3. +wy³±czasz w Panelu Sterowania (Control Panel) Microsoft IR-Monitor oraz +zamykasz program Nokia +Cellular Data Suite
    4. + +
    5. +uruchamiasz program Operator-Logo +Uploader
    6. + +
    7. +wczytujesz z dysku grafikê z logiem
    8. + +
    9. +je¿eli jest to konieczne, wybierasz operatora
    10. + +
    11. +w menu g³ównym wybierasz File, IR-Upload
    12. + +
    13. +je¿eli transfer siê zatrzyma przy 30% lub pó¼niej, musisz przybli¿yæ telefon +bli¿ej z³±cza podczerwieni w komputerze, spróbowaæ przeczy¶ciæ pokrywkê +z³±cza i powtórzyæ ca³± operacjê wysy³ania jeszcze raz.
    14. +
    +

    +

  • + +
  • +je¿eli u¿ywasz kabla (albo masz Nokiê 8810): + +

    +

      +
    1. przy Nokii 8810: + +

      +

        +
      • w³±czasz w telefonie port podczerwieni
      • +
      • w³±czasz w Panelu Sterowania (Control Panel) Microsoft IR-Monitor
      • +

        +

      + +
    2. + +
    3. +uruchamiasz program Operator-Logo +Uploader
    4. + +
    5. +wczytujesz z dysku grafikê z logiem
    6. + +
    7. +z menu g³ównego wybierasz File, Send
    8. + +
    9. +w otwartym oknie w drugim polu podajesz numer telefonu (oczywi¶cie swojego)
    10. + +
    11. +musimy siê pogodziæ z tym, ¿e zap³acimy za wys³anie 1 SMSa
    12. + +
    13. +naciskasz przycisk Send
    14. + +
    15. +je¿eli co¶ nie by³o zrobione poprawnie (np. z³y numer SMSC), wy¶wietli +siê komunikat o b³êdzie (o ile masz w³±czony w telefonie monitor +sieci i w nim Menu 10-65, +tam pó¼niej znajdziesz numer tego b³êdu)
    16. + +
    +
  • + +
+ +

Posiadacze kabla mog± sobie równie¿ zapisaæ logo na karcie SIM lub w pamiêci +telefonu (ta ostatnia mo¿liwo¶æ nie dotyczy m.in. Nokii 5110 i 5130 !) +i rozsy³aæ, do kogo chc±. Aby to zrobiæ, nale¿y: + +

+

    +
  1. +uruchomiæ program Operator-Logo +Uploader
  2. + +
  3. wczytaæ z dysku grafikê z logiem
  4. + +
  5. w menu g³ównym wybraæ File, Store
  6. + +
  7. +je¿eli zaznaczymy 'Write entry to phonebook' w otwartym oknie Store, zapiszemy +je w pamiêci wiadomo¶ci SMS telefonu
  8. + +
  9. nacisn±æ przycisk Store
  10. +
+ +

+ + + + + + +
Je¿eli masz program Nokia +Cellular Data Suite 2.0, musisz go bezp³atnie uaktualniæ do wersji +2.0a (w przeciwnym razie Operator-Logo +Uploader bêdzie siê zatrzymywaæ przy operacji zapisywania przy 55%).
+ +

Logo powinno siê pojawiæ w 'Skrzynce odbiorczej' ('Inbox') jako SMS +o tre¶ci 'Nie mo¿na pokazaæ' ('Message cannot be displayed here'). Mo¿na +je teraz przesy³aæ, ile razy i komu chcemy: + +

+

    +
  • +je¿eli odbiorca ma telefon nie odczytuj±cy log operatora lub centrum SMS +by³o b³êdne, dostanie on 'zwyk³±' wiadomo¶æ SMS
  • + +
  • +je¿eli u¿yli¶my w³a¶ciwego centrum SMS i odbiorca ma który¶ z wymienionych +na samej górze telefonów, odczyta je poprawnie (tzn. jako logo)
  • +
+ +

+Opis dla Logo 6110: + +

+

    +
  1. +wczytujesz z dysku grafikê w formacie (File, Open) .i61 albo wklejasz grafikê +ze schowka (Edit, Paste) - je¿eli jest ona za du¿a, wklejony zostanie jej +prawy, górny róg.
  2. + +
  3. +wybierasz operatora (je¿eli nie ma go na li¶cie, wybierz MCC+MNC)
  4. + +
  5. +je¿eli wybra³e¶(a¶) MCC+MNC, musisz wpisaæ odpowiednie warto¶ci dla operatora +(dla operatorów polskich:  Plus +- 260 i 01, Era - 260 i 02, Idea +- 260 i 03; dla innych sieci mo¿esz znale¼æ te warto¶ci tutaj)
  6. + +
  7. naciskasz przycisk Send
  8. + +
  9. +logo powinno siê pojawiæ w 'Skrzynce nadawczej' ('Outbox') telefonu jak +SMS o niemo¿liwej do pokazania tre¶ci
  10. + +
  11. +dalsze postêpowanie zosta³o opisane wy¿ej (tzn. mo¿esz np. wys³aæ komu¶ +(sobie ?) to logo)
  12. +
+ +

+Opis dla Logo Manager: + +

+

    +
  1. wczytujesz z dysku grafikê z logiem (File, Open)
  2. + +
  3. w menu View wybierasz Operator Logo
  4. + +
  5. wybierasz File, Upload image to phone
  6. +
+ +

+Opis dla Smart Messaging Agent: + +

+

    +
  1. wczytujesz grafikê z logiem (File, Open)
  2. +
  3. z menu File wybierasz Send
  4. +
+ +

+Opis dla Logo Express: + +

+

    +
  1. wczytujesz grafikê z logiem (np. File, Open)
  2. + +
  3. z menu Logo wybierasz, czy: + +

    +

      +
    1. logo ma byæ zapisane na karcie SIM (Save to SIM)
    2. + +
    3. przes³ane bezpo¶rednio do telefonu - tylko Nokia 6xxx (Save to phone)
    4. + +
    5. wys³ane SMSem (Send as SMS)
    6. +
    +

    +

  4. + +
+ +

Na pocz±tek

+ +11. Dlaczego nie mogê go po prostu przes³aæ kablem (we wszystkich modelach) ?
+


+ +

Specyfikacja Smart Messagingu (techniki pozwalaj±cej na przesy³anie log) +przewiduje, i¿ loga mog± byæ przesy³ane TYLKO jako wiadomo¶ci SMS. + +

Programy pozwalaj±ce wgrywaæ loga po kablu +albo przez z³±cze podczerwieni wykorzystuj± natomiast ró¿ne nieudokumentowane +funkcje dostêpne w modelach/wersjach oprogramowania telefonów. + +

Na pocz±tek

+ +12. Czy mogê je wys³aæ przez Internet albo modem ?
+


+ +

Loga mo¿esz wysy³aæ ze strony +http://www.apic.com.sg (3 razy bezp³atnie +po zarejestrowaniu siê), natomiast bramki email2sms i www2sms operatorów +tego nie potrafi± (nie s± do tego przystosowane - technicznie jest to +oczywi¶cie mo¿liwe) i nic na to nie poradzisz (nale¿a³oby zmieniaæ nag³ówek +wysy³anego SMSa - tymczasem jest on ustawiony na sta³e). + +

Przez modem przesy³a loga Smart +Messaging Agent (pozwala korzystaæ z SMSC dzia³aj±cych przez dial-up). + +

Na pocz±tek

+ +13. Dlaczego nie mogê go przes³aæ u¿ywaj±c tego centrum wiadomo¶ci SMS co zawsze ?
+


+ +

Niektóre centra wiadomo¶ci SMS nie s± do tego przystosowane technicznie +(w Polsce SMSC sieci Era GSM) - logo przes³anie przez nie bêdzie +odczytane w telefonie jak "normalny" SMS. Zosta³o to dok³adniej wyja¶nione na +stronie http://www.fkn.pl/faqs/smfaq.html. + +

Na pocz±tek

+ +14. Jak zapisaæ logo w pamiêci telefonu ?
+


+ +

Je¿eli telefon otrzyma³ logo operatora, zasygnalizuje to takim d¼wiêkiem, +jak po otrzymaniu SMSa (o ile oczywi¶cie nie wy³±czy³e¶(a¶) dzwonka :) +) i wy¶wietli 'Odebrano logo operatora' ('Operator's logo received'). Bêdziesz +mia³(a) teraz trzy mo¿liwo¶ci: + +

+

    +
  • obejrzenie otrzymanego loga: 'Poka¿' ('Show')
  • +
  • zapisanie go w pamiêci: 'Zapisz' ('Save') - o to nam chodzi !
  • +
  • wykasowanie go: 'Pomiñ' ('Discard')
  • +
+ +

Na pocz±tek

+ +15. Chcê wykasowaæ moje logo !
+


+ +

Mo¿esz wykorzystaæ fakt, ¿e telefon jednorazowo zapamiêtuje tylko 1 +logo i po prostu przes³aæ mu logo sieci z drugiego koñca +¶wiata (np. z Ameryki Po³udniowej). + +

Mo¿esz równie¿ w tym celu w programie Operator-Logo +Uploader Thomasa Kesslera w g³ównym oknie wybraæ 'Clear Operator-Logo' +i wys³aæ to do telefonu (podobnie w Logo +6110 wybierasz '<erase operator>', w Logo +Express 'Clear Operator Logo'). Jest to tak¿e mo¿liwe w programie NolBin +oraz Logo Manager ('Set logo +to default' z menu Tools), jak równie¿ w bramce dzia³aj±cej dziêki +Fan Klubowi Nokii (na stronie +http://www.fkn.pl/logo/operatora/index.html +znajdziesz odno¶nik do jej opisu). + +

Niestety, nie mo¿na wykasowaæ zapisanego loga u¿ywaj±c kodów. Nie ma +te¿ takiej pozycji w menu telefonu. + +

Na pocz±tek

+ +16. Czy mogê skopiowaæ logo z pamiêci telefonu do komputera ?
+


+ +

Mo¿esz u¿yæ do tego programiku NolBin w komplecie z komercyjn± WinTesl± +(po kablu MBUS). +Jest to jednak BARDZO +NIEBEZPIECZNA METODA mog±ca doprowadziæ do NIEODWRACALNEGO USZKODZENIA +TELEFONU !. + +

Opcj± tak± dysponuje równie¿ +Logo Manager (komunikacja z u¿yciem +kabla FBUS albo MBUS). + +

Na pocz±tek

+ +17. Mój notebook ze z³±czem podczerwieni nie chce dzia³aæ...
+


+ +

Rozumiem, ¿e masz telefon ze z³±czem podczerwieni (np. Nokia 6xxx, +8810 czy 9110) i chcesz go u¿yæ do bezp³atnego wys³ania loga. Opisane wy¿ej +programy zadzia³aj± tylko wtedy, gdy rozpoznaj± port podczerwieni jako +który¶ COM (to jest pierwszy powód, ¿e mog± nie chcieæ dzia³aæ). Czê¶æ +komputerów przeno¶nych nie zawiera te¿ w pe³ni poprawnej implementacji +podczerwieni. I wtedy nic na to nie poradzisz... + +

Na pocz±tek

+ +18. Jak przesy³aæ loga do Nokii 3210 ?
+


+ +

Mo¿esz u¿yæ tych samych metod, które zosta³y opisane w odpowiedzi na pytanie 5 +(przy czym kabel w tym modelu pod³±czasz wewn±trz obudowy). + +

Na pocz±tek

+ +19. Czy wgranie loga operatora narusza warunki gwarancji ?
+


+ +

NIE, NIE i jeszcze raz nie. Ka¿dy model obs³uguj±cy loga operatora mo¿e +je odebraæ jako SMS (a jak wiadomo, odebranie SMSa jest ca³kiem normalnym u¿yciem +telefonu)... Istniej±ce obecnie programy te¿ s± obecnie ca³kiem bezpieczne i nie masz siê co martwiæ +o uszkodzenie s³uchawki przy tej operacji... + +

Na pocz±tek

+ +20. Przy próbie bezpo¶redniego wgrania loga przez kabel (albo jego wykasowania) programem LogoManager nic siê nie dzieje...
+


+ +

Program wgrywa loga bezpo¶rednio po kablu do czê¶ci telefonów (np. Nokii 5110) +dopiero pocz±wszy od wersji 1.0 beta 6c (po wgraniu loga s³ychaæ podwójne "pykniêcie" +z g³o¶nika telefonu). + +

Je¿eli telefon wyda³ d¼wiêk, a loga nie widaæ (przy jego wgrywaniu), zmieñ +kod sieci, w której logo ma siê pokazaæ... + +

Na pocz±tek

+ +21. Jak skopiowaæ logo z telefonu do telefonu ?
+


+ +

Jest to niemo¿liwe z menu telefonu - mo¿esz natomiast skopiowaæ je do komputera +i stamt±d przes³aæ do drugiego aparatu... + +

Na pocz±tek

+ +22. Dodatkowe informacje
+


+ +

+

+ +

Na pocz±tek
+ +


+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net0.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net0.htm new file mode 100644 index 0000000..74696d6 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net0.htm @@ -0,0 +1,709 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 1/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (1/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ +

Chcia³bym tu wyra¼nie na pocz±tku napisaæ, ¿e nie zajmujê siê zawodowo +telefonami ani sieciami komórkowymi, a opis monitora +sieci opracowa³em g³ównie na podstawie ró¿nych materia³ów i korzystaj±c +z pomocy wielu ludzi (patrz +U¿yte materia³y). +Jest to raczej opis u¿ytkownika. Mog³em w nim nie uwzglêdniæ +wszystkich mo¿liwo¶ci, zapewne s± tu b³êdy (mog³y np. powstaæ w wyniku +z³ego t³umaczenia albo wynikaæ z mojej niewiedzy) i naprawdê dziwne sformuowania. +Nie znajdziesz odpowiedzi na wiele pytañ. Co wiêcej, strona jest ci±gle +"under construction" (w trakcie budowy). Zachêcaj±ce, prawda ? Ale taka +jest niestety prawda: firma Nokia +oficjalnie nie udostêpnia publicznie odpowiednich materia³ów... +I zapewniam Ciê, ¿e naprawdê do³o¿y³em wszelkich mo¿liwych starañ, ¿eby +znalaz³ siê tutaj mo¿liwie najlepszy opis. + +

W tej chwili na mojej stronie dostêpna jest równie¿ wersja angielska tego FAQ. +W tworzeniu wersji polskiej czynny udzia³ wziêli: mój brat Robert oraz Piotrek Zdunek. + +

Bêdê bardzo wdziêczny, je¿eli pomo¿esz mi w +jego tworzeniu - proszê o +przysy³anie +wszelkich informacji (adresów stron, +na których je znajdê), sugestii i uwag. Mój FAQ dotyczy obecnie Nokii 2120, 2160, 3110, +3210, 5110, 5130, 5190, 6110, 6130, 6150, 6160, 6185/6188, 7110 oraz 9110. Je¿eli masz w³±czony monitor sieci +w innym modelu (np. 2110i, 8xxx, 9000), równie¿ proszê o +kontakt ze mn± +(chcia³bym opisaæ ró¿nice, ewentualnie nowe testy). + +

Pamiêtaj równie¿, ¿e ja ani osoby tu wymienione nie ponosz± ¿adnej odpowiedzialno¶ci +za szkody wynik³e z u¿ycia zawartych tu wiadomo¶ci (wykorzystujesz je na +w³asn± odpowiedzialno¶æ) ! + +


+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

1. Co to jest ?
+


+ +

Monitor sieci (ang. Net Monitor) to po prostu specjalny tryb, po w³±czeniu +którego telefon podaje ró¿ne informacje o sieci oraz pracy i stanie w³asnych +podzespo³ów, karty SIM, itp. Po jego w³±czeniu zazwyczaj w telefonie pokazuje +siê dodatkowe menu, w którym mo¿na zobaczyæ ró¿ne tajemnicze literki i +cyferki, które ci±gle siê zmieniaj±. Nie ma tutaj ¿adnych standardów - +w ka¿dym telefonie podawane s± ró¿ne dane, ró¿nie siê w³±cza taki tryb +(mój opis dotyczy monitorów sieci w Nokiach - je¿eli masz jaki¶ inny, musisz +niestety szukaæ gdzie indziej). Mo¿na natomiast zaryzykowaæ stwierdzenie, +¿e jak±¶ jego formê mo¿na znale¼æ w praktycznie ka¿dej wspó³czesnej "komórce" +(producentom nie op³aca siê tworzyæ dwóch wersji oprogramowania dla swojego +produktu - jednej z nim, drugiej bez niego). A poni¿ej podajê niektóre +adresy zawieraj±ce sposoby w³±czania albo wrêcz ca³e opisy dla innych telefonów: + +

+

+ +

Co do innych modeli: spróbuj poszukaæ w¶ród odno¶ników dostêpnych pod adresem +www.mobilserver.com/Phone_info/ +albo zapoznaj siê z ofert± np. firmy Datex (www.datex.pl/) +prowadz±cej dzia³alno¶æ m.in. w Krakowie i Warszawie. + + +

Na pocz±tek + + +

2. Czy jest mi potrzebny ?
+


+ +

"Normalni" u¿ytkownicy na pewno nie potrzebuj± ¿adnego monitora +sieci. Po prostu, wiêkszo¶æ znajduj±cych siê tam danych jest przydatnych +tylko specjalistom (dziêki nim mog± siê dowiedzieæ praktycznie wszystko +o dzia³aniu sieci). Ty dziêki niemu mo¿esz natomiast: + +

+

    +
  • poczuæ siê lepiej i móc siê chwaliæ (moja s³uchawka ma TYYYLLLLEEEEE opcji !)
  • +
  • obserwowaæ te ró¿ne parametry (w moim opisie staram siê wyja¶niæ ich znaczenie) i dowiedzieæ siê, jak dzia³a sieæ komórkowa
  • +
  • wp³yn±æ na dzia³anie swojego telefonu i czasami rzeczywi¶cie u³atwiæ sobie ¿ycie (korzystaj±c z nowych opcji) - gdzie mog³em, stara³em siê umie¶ciæ u¿yteczne zastosowania monitora
  • +
+ +

Je¿eli po tym krótkim wyja¶nieniu ci±gle uwa¿asz, ¿e jest on Ci niepotrzebny, +polecam ci pozostanie przy lekturze innych stron Fan Klubu Nokii (www.fkn.pl) +Mo¿esz te¿ co najwy¿ej przeczytaæ: + +

+

+ + +

Na pocz±tek + + +

3. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
+


+ +

Powiedzia³bym, ¿e nie: telefon sprawdza parametry sieci nawet wtedy, +gdy nie masz w³±czonego monitora. + +

Czy wobec tego wielu u¿ytkowników nie +ma racji mówi±c, ¿e po jego w³±czeniu musz± czê¶ciej ³adowaæ baterie ? +Dosyæ ³atwo mo¿na to wyja¶niæ: je¿eli czêsto przechodz± oni od testu do +testu (niektórzy pewnie nie mog± przestaæ ;-) i robi± to na³ogowo), +telefon po ka¿dym naci¶niêciu klawisza (standardowo) w³±cza pod¶wietlenie +(co zu¿ywa du¿o pr±du - patrz Menu +10-23). Pewnym antidotum mo¿e byæ tutaj u¿ycie Menu +10-18. Dodatkowo, niektóre testy (np. Menu +10-17 czy Menu +10-19) pozwalaj± wprowadziæ telefon w stan, w którym ci±gle szuka +sieci (co te¿ bardzo obci±¿a akumulator). + +

Innymi s³owy, samo w³±czenie +monitora (uaktywnienie menu w telefonie) nie wyp³ywa na zu¿ycie pr±du. +Zwiêksza siê ono dopiero wtedy, gdy u¿ytkownik wykonuje pewne dosyæ ¶wiadome +dzia³ania... + + +

Na pocz±tek + + +

4. Jak go w³±czyæ ?
+


+ +

Mo¿esz tego dokonaæ na jeden z trzech sposobów: + +

+

    +
  1. pod³±czaj±c telefon do komputera przy pomocy kabla +(w modelu 3210 pod³±cza siê go wewn±trz obudowy) +i u¿ywaj±c odpowiedniego oprogramowania (POLECAM !) +dzia³aj±cego w systemie: + +

    +

    + +

    + + + + + + +
    Pierwsze cztery programy dla Windows 95/98 i NT +s± dostêpne na serwerze FTP Fan Klubu Nokii.
    + +

    Podane oprogramowanie dzia³a w przypadku wiêkszo¶ci Nokii, które w swym oznaczeniu +kodowym maj± w ¶rodku literkê "S" - np. modeli 5110, 5130, 5190, 6110, 6130, 6150, 3210). +Je¿eli bowiem chodzi o model 7110 (NSE-5), przez kabelek DAU-9P (dzia³aj±cy +z Nokiami 5xxx/6xxx) zadzia³a³ jedynie Pc-Locals (problem dotyczy raczej kabla, ale kto wie)... +W przypadku Nokii 9110 (RAE-2) monitor potrafi³y uaktywniæ tylko programy wykorzystuj±ce protokó³ MBUS: +Logo Manager, Pc-Locals albo +Nokia Wrench. + +

    + + + + + + +
    Oznaczenie kodowe swojej Nokii sprawdzisz np. tutaj albo na stronie +www.fkn.pl/varia/typy.html
    +

    + +

  2. bezpo¶rednio przeprogramowywuj±c pamiêæ EEPROM (Electrically +Erasable and Programmable Read-Only Memory). +Przy czym z góry mówiê, i¿ wymaga to otwierania s³uchawki +i raczej na pewno pozostawi na niej widoczne wewn±trz ¶lady. Ja NIE +POLECAM WIÊC U¯YWAÆ TEJ METODY ! Je¶li jednak chcesz: + +

    +

    +

    +

  3. + +
  4. u¿ywaj±c specjalnego menu pozwal±cego programowaæ NAM (dotyczy tylko +niektórych telefonów analogowych - np. Nokii 2160, 2120, 6160, 6185 i 6188): + +

    +

      +
    • u¿yj kodu *3001#12345# (czasami dodatkowo trzeba nacisn±æ klawisz Menu; +niektóre ¼ród³a podaj± równie¿, ¿e zamiast 12345 nale¿y wpisaæ +kod zabezpieczaj±cy (security code) telefonu)
    • +
    • opcjê "Field Test Mode" ustaw na "On"
    • +
    • wy³±cz i w³±cz telefon
    • +
    +
  5. +
+ +

Mo¿esz te¿: + +

+

    +
  • +zdaæ siê na ludzi z list dyskusyjnych zwi±zanych z GSM +- np. pl.misc.telefonia.gsm +albo pl.misc.telefonia.gsm.gielda +(zrobi± to za darmo lub np. za piwo)
  • + +
  • +czy te¿ zleciæ to jakiej¶ specjalizuj±cej siê w tym firmie (ja znalaz³em +w Internecie np. ofertê firmy Datex +prowadz±cej dzia³alno¶æ m.in. w Krakowie i Warszawie)
  • +
+ +

Nie znam natomiast dok³adnych szczegó³ów uaktywniania monitora +w innych modelach (np. 1610, 2110, 3110, 8110i, 8810, 9000) - konkretnie, nie potrafiê podaæ, jakie s± przy tym u¿ywane programy +(je¿eli chodzi o starsze modele: czyta³em, ¿e byæ mo¿e pozwala na to PC-Locals w wersji 0.6) albo jak przeprogramowaæ EEPROM. +Jedyne, co mogê zrobiæ, to znów odes³aæ do firmy Datex +albo na stronê http://discserver.snap.com/Indices/16654.html +(je¿eli masz wspomniane informacje, +napisz do mnie +w tej sprawie). + +

S³ysza³em równie¿, ¿e niektóre egzemplarze Nokii 6110 i 5110 +pozwalaj± na uruchamianie monitora przez skrót (wciskasz klawisz Menu +i wpisujesz 10 - to powinno dzia³aæ nawet, gdy menu monitora nie jest widoczne). + +

+ + + + + + +
Je¿eli nie umiesz sam w³±czyæ monitora, powierz +to bardziej do¶wiadczonej osobie (mo¿na uszkodziæ telefon przy tej operacji) +!
+ +

Chcia³bym te¿ zwróciæ uwagê na jeden szczegó³ - w Nokiach monitor jest +w³±czany, nie wgrywany (on siê ci±gle znajduje w Twoim telefonie - opisane +wy¿ej dzia³ania z podanymi programy jedynie "wydobywaj± go" na ¶wiat³o +dzienne: uaktywniaj± w nim dodatkowe menu). + +

+ + + + + + +
Je¿eli po tych wyja¶nieniach ci±gle nie potrafisz uaktywniæ sobie monitora, +zajrzyj na stronê +www.fkn.pl/netmonitor/aktywacja.html +(byæ mo¿e tamten opis bêdzie dla Ciebie bardziej zrozumia³y). Znajdziesz na niej +np. opisy wyja¶niaj±ce krok po kroku korzystanie z niektórych z wymienionych wcze¶niej programów...
+ + +

Na pocz±tek + + +

5. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
+


+ +

Opisane w poprzednim punkcie programy pozwalaj± uaktywniæ jedn± z dwóch wersji monitora +sieci: + +

+

    +
  1. okrojon±, która zawiera testy od 1 do 19 (dotycz± one wy³±cznie sieci komórkowej). +W programach zazwyczaj nazywa siê ona np. "Field Test" albo "Operator field tests" (ewentualnie wpisujesz w nich kod 242 w celu jej uaktywnienia)
  2. + +
  3. pe³n±, w której dostêpne s± równie¿ testy dotycz±ce samego telefonu +(i czasami karty SIM). Nazywa siê ona np. "Engineering" (albo "R&D field tests"), a kod +do jej uaktywnienia to 243.
  4. +
+ +

+ + + + + + +
Proponujê w³±czaæ od razu pe³n± wersjê monitora sieci - zawsze mo¿esz +przej¶æ od niej do wersji okrojonej (w telefonie wybierasz test 242). +W drug± stronê jest to niemo¿liwe (tzn. nie mo¿esz tego zrobiæ z poziomu menu telefonu +- nie akceptuje on testu 243, gdy w³±czona jest okrojona wersja monitora; ci±gle +oczywi¶cie dzia³aj± metody z poprzedniego punktu).
+ + +

Na pocz±tek + + +

6. Czy w³±czenie monitora powoduje utratê gwarancji ?
+


+ +

Sposób polegaj±cy na bezpo¶rednim przeprogramowaniu EEPROMU wymaga rozebrania +s³uchawki i ingerencji w jej wnêtrzu (co faktycznie jest powodem utraty gwarancji +i pozostawia na niej widoczne ¶lady - zarysowania, itp.). + +

My¶lê natomiast, i¿ nie masz siê czego obawiaæ, gdy u¿y³e¶(a¶) którego¶ +ze wspomnianych wy¿ej programów albo kodu (mogê siê oczywi¶cie myliæ - na listach +dyskusyjnych co jaki¶ czas mo¿na przeczytaæ, i¿ równie¿ ta metoda pozostawia +na s³uchawce swój ¶lad)... + +

Oczywi¶cie, przed oddaniem telefonu do serwisu lepiej jest zdeaktywowaæ +monitor. Czasami, np. przy awarii zasilania, jest to niemo¿liwe - wtedy +czê¶æ serwisantów mo¿e uznaæ, ¿e zosta³y naruszone warunki gwarancji +(zale¿y to od konkretnego cz³owieka)... + + +

Na pocz±tek + + +

7. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
+


+ +

Menu monitora w Nokii 5110 +Menu monitora w Nokii 9110 +Menu monitora w Nokii 3210 +Oczywi¶cie. Numer menu monitora (oznaczonego jako "Net monitor" albo "Field test") +jest ró¿ny (zale¿y od wersji oprogramowania i modelu) w ró¿nych Nokiach. +Mo¿e to byæ wiêc np. Menu 7 (Nokia 3110 i 9110), +Menu 10 (Nokia 5xxx, 6110, 6130; tak te¿ przyj±³em w tym FAQ), Menu +11 (Nokia 5190 albo 3210) albo Menu 12 (Nokie 8210 albo niektóre 6150). W Nokii 3210 zupe³nie inna +jest te¿ ikonka tej pozycji menu. Innymi s³owy, menu monitora sieci +wygl±da odmiennie w ró¿nych modelach I JEST TO ZUPE£NIE NORMALNE. + + +

Na pocz±tek + + +

8. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
+


+ +

TAK - jest to normalne. Taka sytuacja zachodzi np. w Nokii 3210. "Brakuj±ce" Menu 10 +zosta³o tam przewidziane dla us³ug karty SIM (SIM application toolkit) +i poka¿e siê, gdy bêdziesz mia³ do nich dostêp. + + +

Na pocz±tek + + +

9. Jak siê nim pos³ugiwaæ ?
+


+ +

telefony GSM/DCS/PCS: + +

Po w³±czeniu monitora sieci masz dostêp do nowej pozycji (oznaczonej jako "Net monitor" +albo "Field Test") w menu g³ównym telefonu. + +

Menu monitora w Nokii 5110Po wej¶ciu do tego +menu mo¿esz wpisaæ numer testu, który ma byæ wy¶wietlony (od 1 w 19 w okrojonej +wersji monitora, wy¿sze numery tak¿e w pe³nej - Uwaga +! Wpisanie numeru 241 +ca³kowicie wy³±czy monitor sieci, 242 +w³±czy okrojon± jego wersjê - w celu ponownej aktywacji +niezbêdnê bêdzie u¿ycie metod z punktu Jak go w³±czyæ ? ! +). + +

Po naci¶niêciu OK pojawia siê on bezpo¶rednio na wy¶wietlaczu (a jego +numer na samej jego górze) zamiast nazwy/loga +sieci komórkowej. Je¿eli wybra³e¶(a¶) niew³a¶ciwy numer testu, poka¿e siê +tekst NO TEST i telefon powróci do ostatniego poprawnie wy¶wietlanego testu. +Je¿eli natomiast numer by³ wiêkszy od 256, 512 lub 768, zostanie od niego +odjêta odpowiednia wielokrotno¶æ liczby 256 i dopiero test o tym numerze +zostanie wy¶wietlony (np. numery 300 i 556 dadz± test 44). Je¿eli wy¶wietlisz +w ten sposób czê¶æ testów (tzn. wpiszesz tu numer i wejdziesz do razu do +którego¶ z nich), mo¿esz zmieniæ w nich pewne ustawienia (szczegó³y podajê +dalej, nazywam to za¶ bezpo¶rednim wej¶ciem do testu - patrz np. Menu +10-18). + +

Mo¿esz go teraz zmieniaæ strza³kami góra/dó³ (bez obawy - takie wej¶cie przez +przegl±danie nie zmienia ustawieñ w testach) - po ich u¿yciu zostanie pokazany +poprzedni/nastêpny dostêpny test. W niektórych modelach (np. 5110) klawisze +te s³u¿± do innych celów (np. wy¶wietlanie ostatnio wybieranych numerów, +ksi±¿ki telefonicznej albo zmiana g³o¶no¶ci) - je¿eli wy¶wietlany +jest jaki¶ test, tracisz niestety wspomniane funkcje :-(. Natomiast ciekawostk± +jest fakt, ¿e podczas po³±czenia mo¿na zmieniaæ g³o¶no¶æ w Nokii 5xxx +- wspomniane strza³ki trzeba przytrzymaæ d³u¿ej (oko³o sekundy). + +

Nazwa/logo u¿ywanej sieci +pojawi siê ponownie na wy¶wietlaczu, gdy wpiszesz w tym menu 0. + +

+ + + + + + +
Je¿eli wpiszesz jako numer testu 0, a pó¼niej +podasz numer nieistniej±cego testu (np. 52), telefon bêdzie siê zachowywa³ +prawie tak samo, jakby monitor sieci by³ w³±czony (np. strza³ki góra/dó³ +bêd± zmieniaæ numer testu - mo¿esz to sprawdziæ w Menu 10). Niestety +(z góry mówiê), liczniki z Menu +10-82 wtedy nie dzia³aj±. Po w³±czeniu telefonu pokazuje siê wybrany +w ten sposób test. Do czego to mo¿e siê przydaæ ? + +
    +
  • chwilowego "uszkodzenia" telefonu (jak nabraæ kolegê ?)
  • +
  • zablokowania korzystania z ksi±¿ki telefonicznej (Nokia 5xxx i 6xxx)
  • +
  • uniemo¿liwienia uzyskania listy ostatnich numerów +przy wy¶wietlanej nazwie/logo +sieci (Nokia 5xxx)
  • +
  • utrudnienia przestawienia g³o¶no¶ci podczas po³±czenia +(Nokia 5xxx) - wpomniane strza³ki trzeba nacisn±æ i d³u¿ej przytrzymaæ
  • +
  • uniemo¿liwienia przestawienia g³o¶no¶ci (Nokia 3110)
  • +
+ +
+ +

Przy w³±czonym którym¶ z testów, telefon nie wy¶wietla niektórych komunikatów +(np. "Dzwoni..."), nie masz te¿ identyfikacji osoby dzwoni±cej (jedyny +chyba wyj±tek przy wykonywaniu po³±czenia jest zrobiony w przypadku komunikatu: +'Note: you have active diverts' ('Uwaga: +w³±czone przekazy') pojawiaj±cego siê w przy w³±czonym przekazywaniu rozmów). +Je¿eli wpisujesz numer telefonu, test mo¿e znikn±æ +(pojawi siê ponownie, gdy uzyskasz po³±czenie albo wykasujesz go z wy¶wietlacza). + +

Informacja (opis) do ogl±danego testu zostanie wy¶wietlona, gdy przez +d³u¿szy czas przytrzymasz wci¶niêty klawisz * (jego ponowne przytrzymanie +spowoduje powrót do warto¶ci liczbowych). Ta ostatnia mo¿liwo¶æ jest dostêpna +tylko w niektórych egzemplarzach telefonów (moje wyt³umaczenie +tego faktu jest dostêpne w Znaczenie +poszczególnych testów) - dlatego te krótkie opisy pomocy podajê +wyt³uszczonym drukiem w wiêkszo¶ci testów... Je¿eli s± one wy¶wietlane, +nie zmienisz ustawieñ przez bezpo¶rednie wej¶cie do menu. + +

Przy u¿yciu informacji (opisów pomocy) mo¿na natrafiæ na pewien b³±d +(jak na razie, uda³o mi siê potwierdziæ jego istnienie dla Nokii 5110 z +ró¿nymi wersjami oprogramowania). Je¿eli chcesz go zobaczyæ: + +

+

    +
  • Naci¶nij i trzymaj *. W momencie, gdy * zniknie z ekranu +(ale przed zmian± pomocy na warto¶ci testu albo warto¶ci na pomoc), pu¶æ klawisz *
  • +
  • Odt±d wszystko musi to byæ robione tak szybko, ¿eby * nie pojawia³a siê +na ekranie ani ¿eby nie zmieni³ sie napis nad NaviKey: od razu naci¶nij i +po chwili pu¶æ klawisz *. Krok ten mo¿esz powtórzyæ - +w zale¿no¶ci od ilo¶ci powtórzeñ uzyskasz inne efekty. Dla przyk³adu: +przy oprogramowaniu 5.07 (albo 5.11) i 0 powtórzeniach wchodzisz do 1 "ukrytego menu", +przy 1 powtórzeniu telefon siê zawiesza i wy³±cza (proponujê zajrzeæ do +Menu 10-36 - wyniki mog± byæ zaskakuj±ce), +przy 2 powtórzeniach telefonach sam "zmienia" jêzyk ;-)), a przy 3 powtórzeniach +mamy dostêp do 2 "ukrytego menu", a czasami (nie znalaz³em regu³y) pokazuje +siê "CONTACT SERVICE" (na szczê¶cie po restarcie wszystko znów dzia³a). +Je¿eli chodzi o oprogramowanie 5.24: przy 0 powtórzeniach mo¿na wej¶æ do 2 +"ukrytego menu", przy 1 albo 2 powtórzeniach znika oznaczenie NaviKey, przy +3 oznaczenie NaviKey zmienia siê na "Wy¶lij" ("Send").
  • +
  • odczekaj dlu¿sz± chwilkê
  • +
  • naci¶nij na chwilê i pu¶æ jeden z klawiszy: *, 0 do 9 albo #
  • +
+ +

+Mo¿liwy jest tak¿e restart telefonu (na pewno Nokii 5110 ze starszym +oprogramowaniem ni¿ 5.24 (w tej wersji to nie dzia³a) - np. 5.11 czy 5.07): + +

+

    +
  • Naci¶nij i trzymaj *. W momencie, gdy * zniknie z ekranu +(ale przed zmian± pomocy na warto¶ci testu albo warto¶ci na pomoc), pu¶æ klawisz *
  • +
  • Odt±d wszystko musi to byæ robione tak szybko, ¿eby * nie pojawia³a siê +na ekranie ani ¿eby nie zmieni³ sie napis nad NaviKey: od razu naci¶nij i +po chwili pu¶æ klawisz *, od razu naci¶nij klawisz * na co najmniej 2 sec. +i pu¶æ, od razu naci¶nij i po chwili pu¶æ klawisz *
  • +
+ +

Przyczyn± jest przepe³nienie stosu (patrz Menu 10-35 +i Menu 10-57). Je¿eli u Ciebie to nie dzia³a +i masz Nokiê 6110, mo¿esz te¿ spróbowaæ takiej sztuczki resetuj±cej telefon: + +

    +
  1. Wejd¼ do menu Calendar (Menu-8)
  2. +
  3. Utwórz notatkê albo przypomnienie
  4. +
  5. Wpisz jaki¶ tekst w polu edycji danych
  6. +
  7. Trzymaj klawisz "Clear" do momentu, a¿ tekst zostanie wykasowany
  8. +
  9. Naci¶nij "Back"
  10. +
  11. Naci¶nij "0"
  12. +
  13. Wpisz 4 cyfry (np. 1234)
  14. +
  15. U¿yj dolnej strza³ki i przesuñ kursor do lewej strony numerów i wolnej przestrzeni (naci¶nij strza³kê 2 razy).
  16. +
  17. Wpisz 6 cyfr i naci¶nij zielon± s³uchawkê
  18. +
+ +

telefony TDMA 800/TDMA 1900: + +

Po w³±czeniu monitora sieci masz dostêp do nowej pozycji (oznaczonej jako +"Field Test") w menu g³ównym telefonu. + +

Po wej¶ciu do tego menu mo¿esz wpisaæ numer testu, który ma byæ wy¶wietlony +(od 1 do 7 w Nokii 6160) albo 0, aby testy zosta³y "chwilowo" wy³±czone. + +

Mo¿esz go teraz zmieniaæ strza³kami góra/dó³. W czasie rozmowy (w zale¿no¶ci +od tego, w jaki sposób wy¶wietli³e¶(a¶) testy), s³u¿± one do prze³±czania +testów (nie mo¿esz zmieniaæ g³o¶no¶ci) albo w³a¶nie zmiany g³o¶no¶ci podczas +rozmowy. + +

Je¿eli w³±czona jest blokada klawiatury i jaki¶ test jest wy¶wietlany, +po naci¶niêciu 0-9, * albo # zostanie on "wy³±czony". Naci¶niêcie czerwonej +albo zelonej s³uchawki, ewentualnie strza³ek, z powrotem go przywróci. + +

W Nokii 2120 albo 2160 pomoc do testów jest wy¶wietlana po naci¶niêciu +klawisza "ABC". + + +

Na pocz±tek + + +

10. Czy mogê zepsuæ sobie telefon ?
+


+ +

Chyba tylko przy jego w³±czaniu (szczególnie w telefonach analogowych +z menu s³u¿±cym do programowania NAM). Nie +spotka³em siê z czym¶ takim (nie powiod³y siê równie¿ usilne :-) próby) +przy jego u¿ytkowaniu. Nale¿y byæ jednak ostro¿nym - monitor jest wszak "nieoficjaln±" czê¶ci± +oprogramowania telefonu. + +

Je¿eli co¶ nie dzia³a jak trzeba, wy³±cz i w³±cz telefon - wszystkie (z wyj±tkiem +Menu 10-17) testy, które mo¿na ustawiæ, +zostan± przywrócone do warto¶ci domy¶lnych... + + +

Na pocz±tek

+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net1.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net1.htm new file mode 100644 index 0000000..4acdc07 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net1.htm @@ -0,0 +1,611 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 2/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (2/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

11. S³owniczek
+


+ +

Poni¿ej wyja¶niam niektóre pojêcia, które przewijaj± siê w tym FAQ: + +

ACCH (Analog Control Channel) +(TDMA 800/TDMA 1900) + +

AMPS (Advanced Mobile Phone Service) +
System analogowej telefonii komórkowej dzia³aj±cy w czêstotliwo¶ci 800 Mhz. +U¿ywany m.in. w Ameryce Pó³nocnej. + +

ASIC (Application Specific Integrated Circuit) +
Mianem tym okre¶la siê uk³ad elektroniczny s³u¿±cy do konkretnych +celów (w telefonie m.in. kontroluje komunikacjê miêdzy MCU i DSP). +Uk³ady takie projektuj± i produkuj± u¿ywaj±ce je firmy. + +

AVCH (Analog Voice Channel) +(TDMA 800/TDMA 1900) + +

BCC (Base-station Color Code) +(GSM/DCS/PCS) +
3 bitowy numer (zakres 0-7) u¿ywany do rozró¿nienia s±siaduj±cych komórek +tego samego operatora nadaj±cych z u¿yciem BCCH +w tym samym kanale FDMA. Takie rozró¿nienie +nie jest potrzebne w przypadku komórek ró¿nych operatorów (u¿ywaj± ró¿nych +kana³ów, wiêc ich BCCH s± +w ró¿nych kana³ach FDMA). Jest podawany +w BSIC ka¿dego BTSa +(mo¿esz go sprawdziæ np. w Menu +10-2). + +

BSC (Base Station Controller) +(GSM/DCS/PCS) +
Kontroler stacji bazowych. Mo¿e sterowaæ i sprawowaæ nadzór nad jednym +lub kilkoma BTSami. + +

BSIC (Base Station Identity Code +albo Base transceiver Station Identity Code) +(GSM/DCS/PCS) +
Numer identyfikuj±cy danego BTSa. +Je¿eli jego warto¶æ zapiszemy binarnie (dwójkowo), to trzy pierwsze cyfry +(oczywi¶cie w zapisie dziesi±tkowym) stanowiæ bêd± jego +BCC, +nastêpne trzy NCC. Przyjmuje warto¶ci +z zakresu 0 - 63. Warto¶ci BSIC s± podawane m.in. w Menu +10-2. + +

BTS (Base Transceiver Station) +(GSM/DCS/PCS) +
Stacja nadawczo - odbiorcza. Za jej po¶rednictwem telefony komunikuj± +siê z sieci± (parametry takie jak kana³ u¿ywany do komunikacji, odleg³o¶æ +i jako¶æ sygna³u mo¿esz znale¼æ np. w Menu +10-1). + +Klasy mocy BTSów s± nastêpuj±ce: + +

+ + + + + +
GSM 900
GSM 1800
+
320 W (55 dBm)
+160 W (52 dBm)
+80 W (49 dBm)
+40 W (46 dBm)
+
+
-
+-
+-
+-
+
+
20 W (43 dBm)
+10 W (40 dBm)
+5 W (37 dBm)
+2,5 W (34 dBm)
+
+ +

Je¿eli chodzi o spisy BTSów, musisz pamiêtaæ, ¿e czasami w sieci +zmieniane s± LAC i CID komórek (i dane, które znajdziesz pod podanymi adresami, +mog± byæ nieaktualne !). + +

+

+ +

Odno¶niki zwi±zane z BTSami (mapki, lokalizacje, zdjêcia, opisy) znajdziesz równie¿: + +

+

+ +

Na specjalne wyró¿nienie (moim zdaniem) zas³uguj± natomiast: + +

+

+ +

+ + + + + + +
Wszelkie uwagi dotycz±ce BTSów w sieci Era +GSM (np. informacje o nieprawid³owym dzia³aniu, propozycje nowych lokalizacji, +itp.) mo¿na natomiast zg³aszaæ do Jakuba Krama (602293483@eranet.pl) +i Miros³awa Kotliñskiego (602287746@eranet.pl).
+ +

C1 (path loss-criterium) +(GSM/DCS/PCS) +
Parametr (zakres od -99 do 99 dBm) obliczany przez telefon, który na +jego podstawie decyduje, z których komórek ma korzystaæ (robi to tylko +wtedy, je¿eli C1 jest dodatni dla danej komórki). Pod uwagê s± brane: + +

+

    +
  • RX +
    Moc, z jak± odbierane s± dane na kanale BCCH. +Je¿eli jest ona równa b±d¼ mniejsza ni¿ RxLevAm, +telefon szuka nastêpnego kana³u BCCH. +Jest ona podawana w Menu +10-1 (dla aktualnie u¿ywanego kana³u) i w Menu +10-3, Menu 10-4 +i Menu 10-5 (dla s±siednich kana³ów). Ilo¶æ prób pomiarów jako¶ci transmisji +z kana³ami BCCH w s±siednich komórkach +jest podawana w Menu 10-62
  • + +
  • RxLevAm (Rx Level Access +minimum) +
    Minimalny poziom odbieranego sygna³u (zazwyczaj wynosi od -100 dBm +do -110 dBm) wymagany do tego, aby telefon próbowa³ korzystaæ z danej komórki.
  • + +
  • MSTxPwr +
    Maksymalna moc, z jak± telefon mo¿e nadawaæ, aby uzyskaæ dostêp do +kana³u RACH (tzn. maksymalna +moc dopuszczalna przez aktualn± komórkê). Generalnie, jest ona mniejsza +w miastach (komórki s± ustawione gê¶ciej), wiêksza poza nimi.
  • + +
  • MSMaxTxPwr +
    Maksymalna dopuszczalna moc nadawania telefonu (okre¶laj±ce j± klasy +podajê przy opisie TX) w ogóle.
+ +

a wzór do jego obliczania wygl±da nastêpuj±co: C1 = (RX +- RxLevAm - MAX ( ( MSTxPwr +- MSMaxTxPwr ), 0) ) ), +gdzie MAX(x,y) to oczywi¶cie funkcja matematyczna zwracaj±ca wiêksz± z +podanych liczb. Telefon podaje warto¶ci C1 w Menu +10-1 (dla u¿ywanego kana³u) i w Menu +10-3, Menu 10-4 +i Menu 10-5 (dla s±siednich kana³ów). + +

C2 (cell-reselection criterion) +(GSM/DCS/PCS) +
Parametr (warto¶ci z zakresu od -99 do 99 dBm) obliczany na podstawie +wzoru C2 = C1 + Cell reselect +offset - Temporary offset +* H (Penalty time - T). +Je¿eli jego warto¶æ dla jakiej¶ komórki (C2 dla s±siednich kana³ów +s± w Menu 10-3, +Menu 10-4 i +Menu 10-5) +jest wy¿sza ni¿ warto¶æ dla aktualnej komórki (telefon podaje j± w Menu +10-1 i Menu 10-3) +d³u¿ej ni¿ 5 sekund, telefon j± zmienia. S± 2 wyj±tki od tej regu³y: + +

+

    +
  • je¿eli nowa komórka le¿y na innym Location Area (warto¶æ tego parametru +dla aktualnej komórki mo¿esz sprawdziæ w Menu +10-11), C2 dla niej musi przez przynajmniej 5 sekund warto¶æ +wiêksz± ni¿ C2+CELL_RESELECT_HYSTERESIS dla starej komórki (gdzie +CELL_RESELECT_HYSTERESIS jest specjalnym parametrem wysy³anym w kanale +BCCH).
  • + +
  • je¿eli w przeci±gu ostatnich 15 sekund telefon zmieni³ u¿ywan± komórkê,C2 +dla nowej komórki musi byæ wy¿sza co najmniej o 5 dBm od C2 dla +starej.
  • +
+ +

Je¿eli chodzi o funkcjê H(x), to dla nieu¿ywanych aktualnie komórek przyjmuje +ona warto¶æ 0 (je¿eli x<0) albo 1 (je¿eli x>=0). Dla aktualnie u¿ywanej +komórki H(x) jest zawsze równa 0. +
Jak widaæ, dziêki umiejêtnemu operowaniu tym parametrem (przez CELL_RESELECT_HYSTERESIS) +operator mo¿e kierowac po³±czenia do konkretnych komórek (odci±¿aj±c w +ten sposób sieæ). + +

CDMA (Code Division Multiple Access; also known as IS-95) +
One of the newer digital technologies in 800 or 1900 Mhz. Used in North America, Australia and some southeastern Asian countries +(e.g. Hong Kong and South Korea). It doesn't divide the radio frequency +spectrum into separate user channels by frequency slices or time slots, but +separates users by assigning them digital codes within the same broad spectrum. + +

DCCH (Digital Control Channel) +(TDMA 800/TDMA 1900) + +

DCS (Digital Cellular System) +
System telefonii komórkowej dzia³aj±cy w pa¶mie 1800 Mhz (st±d nazywany +jest obecnie raczej GSM 1800) - zmieniona wersja systemu +GSM +(900 Mhz). Wprowadzone modyfikacje pozwoli³y zwiêkszyæ pojemno¶æ sieci +(st±d instaluje siê go g³ównie w okolicach aglomeracji miejskich, gdzie +jest wiêksza ilo¶æ abonentów) kosztem gêstszego rozstawiania stacji bazowych +(BTSów) oraz wprowadziæ roaming w obrêbie +jednego kraju. Ze szczegó³ow technicznych: inne s± numery kana³ów (patrz +Menu 10-17), moce +nadawcze telefonów (patrz opis +RX) i BTSów pracuj±cych w obu systemach, +jak równie¿ maksymalna prêdko¶æ u¿ytkownika, przy której mo¿e wykorzystywaæ +swój telefon (w GSM jest to 250 km/h, w DCS 130 km/h). + +

DSP (Digital Signal Processor) +
Procesor sygna³owy (uk³ad scalony zajmuj±cy siê cyfrow± obróbk± sygna³ów +- kontroluje interfejs radiowy i kodowanie/dekodowanie mowy). +Wersja oprogramowania jest podawana w Menu +10-88. + +

DTCH (Digital Traffic Channel) +(TDMA 800/TDMA 1900) + +

DTX (Discontinous Transmission Exchange) +
W trosce o nasze akumulatory ;-), czê¶æ sieci i telefonów +pozwala na tzw. przerywan± transmisjê (w³a¶nie DTX). +Po prostu, wykorzystane zosta³o to, ¿e nie mówimy ca³y czas, tylko równie¿ +s³uchamy (i wtedy telefon mo¿e wy³±czaæ swój nadajnik). Aby nasz rozmówca nie us³ysza³ +ciszy (pomy¶li, ¿e po³±czenie zosta³o przerwane), jego telefon generuje +pewien szum (nazywany potocznie komfortowym :-)) na¶laduj±cy odbierane w czasie mówienia +szumy. + +

(GSM/DCS/PCS): +
Na korzystanie z DTX musi pozwalaæ telefon (Nokia oczywi¶cie mo¿e +- patrz Menu 10-78) +i BTS - sprawdzisz to (i ewentualnie +ustawisz) w Menu 10-12 +i Menu 10-13. + +

FDMA (Frequency Division Multiple Access) +(GSM/DCS/PCS) +
Pojêcie to oznacza wielodostêp w dziedzinie czêstotliwo¶ci: w tym samym +czasie (równocze¶nie) jest prowadzona transmisja na ró¿nych czêstotliwo¶ciach +(jest to po³±czenie typu "pe³en dupleks" - "full duplex"): "w dó³" (down-link) +- od BTSa do telefonu i "w górê" (up-link) +- od telefonu do BTS (okre¶lenia "w dó³" +i "w górê" wziê³y siê st±d, ¿e anteny BTSów +s± zazwyczaj wy¿ej ni¿ anteny telefonów i sygna³ od BTSa +do telefonu musi rzeczywi¶cie wêdrowaæ w dó³ (albo w odwrotn± stronê w +górê)). + +

GSM (Global System for Mobile Communication) +
System telefonii komórkowej dzia³aj±cy w czêstotliwo¶ci 900 Mhz. Pó¼niej +zaadoptowano go na czêstotliwo¶æ 1800 Mhz (DCS) +oraz 1900 Mhz (PCS). + +

HLR (Home Location Register) +(GSM/DCS/PCS) +
Rejestr sieci przechowuj±cy informacje zwi±zane z abonentami swojej +sieci (np. do jakich us³ug maj± dostêp, jaki maj± abonament, w zasiêgu +jakiej sieci siê ostatnio znajdowali, itp.). + +

IMEI (International Mobile Equipment Identification code) +(GSM/DCS/PCS) +
Niepowtarzalny (15 cyfrowy) numer przyporz±dkowany ka¿demu telefonowi +GSM na ¶wiecie. Mo¿na go sprawdziæ kodem *#06# (nie tylko w Nokiach) +albo w menu serwisowym (Nokia) - w³±czasz go kodem *#WAR0ANTY# albo +*#WARRANTY# (Nokia 6130). W Nokii 3110 w menu serwisowym (*#WAR0ANTY#) +musisz w tym celu podaæ natomiast kod 9268. Na podstawie samego +IMEI mo¿na m.in. okre¶liæ producenta telefonu, miejsce jego wyprodukowania, +numer seryjny (pod adresem +www.tele-servizi.com/janus/texts/imei.txt +mo¿esz np. zobaczyæ tak± listê dla Motoroli). Operatorzy mog± nie zezwalaæ +na dostêp do swoich sieci niektórym telefonom - np. kradzionym (s± identyfikowane +w³a¶nie na podstawie IMEI). Mog± oni siê równie¿ wymieniaæ ich listami. + +

IMSI (International Mobile Subscriber Identify) +(GSM/DCS/PCS) +
Niepowtarzalny numer (maksymalnie 15 cyfr) nadawany telefonowi: + +

+

    +
  • pierwsze trzy cyfry to jego MCC
  • +
  • nastêpne trzy to MNC
  • +
  • reszta to niepowtarzalny numer
  • +
+ +

IMSI attach +(GSM/DCS/PCS) +
Czynno¶æ wykonywana po w³±czeniu telefonu. Polega ona na tym, ¿e podaje +on sieci informacjê, ¿e jest ju¿ aktywny (mo¿na siê z nim komunikowaæ - +wys³aæ zaleg³e SMSy, +itp.) i dostaje numer IMSI. Licznik +zwi±zany z IMSI attach jest w Menu +10-64, to, czy pozwala na to komórka, sprawdzisz w Menu +10-7. + +

IMSI detach +(GSM/DCS/PCS) +
Przy wy³±czeniu telefon informuje z kolei sieæ, ¿e nie bêdzie mo¿liwa +komunikacja z nim (i jego IMSI jest +ju¿ nieaktualny). Licznik zwi±zany z IMSI detach jest w Menu +10-64, to, czy pozwala na to komórka, sprawdzisz w Menu +10-7. + +

Location Update +(GSM/DCS/PCS) +
Telefon powinien informowaæ sieæ, gdzie go szukaæ. Jest to nazywane +Location Update i wykonywane po zmianie Location Area (telefon robi +to "inteligentnie" i np. w przypadku, gdy straci (a pó¼niej odzyska sygna³ +sieci), wykonuje Location Update tylko wtedy, gdy u¿ywany aktualnie +BTS ma inny LAC ni¿ poprzedni +- wykorzystywany przed strat± sygna³u) lub PLMN +(przeniesieniu siê w zasiêg drugiej sieci lub próbie zalogowania siê do +niej). Wtedy wiadomo¶æ o Location Update jest przekazywana do nowego +MSC/VLR, +które przekazuje z kolei informacjê o po³o¿eniu do HLR. +Kiedy telefon dzia³a ju¿ w nowym MSC/VLR, +HLR u¿ytkownika nie identyfikuje go ju¿ +przez numer przekazywany przez stary MSC/VLR. +Pewn± odmian± Location Update s± tzw. PLU, +IMSI attach i IMSI +detach (telefon je odró¿nia w Menu +10-64). Aktualne Location Area mo¿esz sprawdziæ w Menu +10-11. + +

MCU (Master Control Unit processor) +
G³ówny procesor w telefonie. + +

MSC (Mobile Switching Center) +(GSM/DCS/PCS) +
Odpowiada za komunikacjê u¿ytkowników z innymi (np. u¿ytkownikami innych +sieci). + +

+

+ +

NCC (National Color Code albo Network Color Code) +(GSM/DCS/PCS) +
3 bitowy numer (zakres 0-7) u¿ywany do rozró¿nienia komórek operatorów +z ró¿nych krajów (np. przy granicy kraju, gdzie telefon znajduje siê w +zasiêgu ró¿nych sieci) nadaj±cych z u¿yciem +BCCH +w tym samym kanale FDMA. +Numer ten nie zmienia siê w obrêbie PLMN. +Jest podawany w BSIC ka¿dego BTSa +(mo¿esz go sprawdziæ np. w Menu +10-2). + +

PLMN (Public Land Mobile Network) +(GSM/DCS/PCS) +
Obszar obs³ugiwany przez jednego operatora (jedn± sieæ). Przy jego zmianie telefon wykonuje +Location Update. + +

+

    +
  • Du¿o odno¶ników do mapek zasiêgu polskich sieci (czyli wielko¶æ ich PLMN) znajdziesz przy opisie BTSów.
  • +
  • Ciekawa strona (zawieraj±ca w miarê aktualne mapki ró¿nych operatorów na +¶wiecie) jest pod adresem www.subcam.freeserve.co.uk/mark/orange/ora.html.
  • +
+ +

PLU (Periodic Location Update) +(GSM/DCS/PCS) +
Informowanie sieci przez telefon o tym, w zasiêgu jakich komórek (w +jakim rejonie kraju) siê znajduje. Czynno¶æ ta jest wykonywana co pewien +ustalony (zale¿ny od sieci - np. dla Ery +i Plusa s± to 3 h, dla +Idei 2 h) +czas (mo¿na go sprawdziæ w Menu +10-10). Jest on liczony od ostatniego "kontaktu" z sieci± (licznik +nie zatrzymuje siê, gdy telefon utraci jej sygna³ !) - rozmowy, wys³ania +(otrzymania) +SMSa, +zg³aszania ¿±dañ (np. w³±czania przekierowañ rozmów) - równie¿ wtedy jest +ona informowana o po³o¿eniu telefonu (jednak¿e nie jest to rejestrowane +w Menu 10-64). +Licznik zwi±zany z PLU jest w Menu +10-64. + +

Skakanie po czêstotliwo¶ciach (channel hopping) +(GSM/DCS/PCS) +
Podczas po³±czenia Twój telefon mo¿e stale zmieniaæ u¿ywan± czêstotliwo¶æ +(a w³a¶ciwie kana³) podczas komunikacji z komórk±. Jest to stosowane, gdy +jaki¶ kana³ jest ci±gle zak³ócany - przy sta³ym jego u¿ywaniu przez telefon +nawi±zanie po³±czenia mog³oby byæ niemo¿liwe, przy channel hopping +tracona jest co najwy¿ej czê¶æ ca³ej transmisji przeprowadzona na tej czêstotliwo¶ci +(daje to mnie zaników sygna³u, nie zmienia natomiast jako¶ci d¼wiêku - wszak sposób jego +kodowania jest zawsze taki sam). To, czy telefon u¿ywa tego (podczas po³±czenia), +sprawdzisz w Menu 10-1, +to, czy pozwala na to komórka, w Menu +10-12 (warto¶ci uaktualniane tylko podczas po³±czenia). Do u¿ywania +channel hopping potrzebne jest tzw. Hopping Sequence Number (zmiana +czêstotliwo¶ci odbywa siê wed³ug znanej telefonowi i sieci sekwencji) - patrz +Menu 10-2. + +

TCH (Traffic Channels) +(GSM/DCS/PCS) +
Dwukierunkowe, fizyczne kana³y do transmisji danych u¿ytkownika (komputerowych +albo zakodowanego d¼wiêku). Istnieje kilka ich odmian: + +

    +
  • +HR (Half Rate Traffic): przekazywanie +danych z maksymaln± prêdko¶ci± 6.5 kbit/sek (wprowadzone w fazie 2 GSM). +Przy u¿ywaniu kana³ów HR +gorsza jest jako¶æ d¼wiêku, ale równie¿ wolniejsze roz³adowywania siê akumulatora +w telefonie (nawet do 30%). Jego zalet± jest równie¿ to, i¿ pozwala on +zwiêkszyæ dwukrotnie pojemno¶æ sieci (ilo¶æ osób mog±cych wykonywaæ jednocze¶nie +po³±czenia - informacji o tym szukaj przy opisie parametru +TS) albo podwoiæ maksymaln± odleg³o¶æ, z jakiej telefon wci±¿ mo¿e +korzystaæ z danego BTSa. Na jego u¿ywanie +musi pozwalaæ sieæ (odpowiedni± informacjê znajdziesz w Menu +10-7) i telefon. Mo¿na go w³±czyæ kodem *HRC0#, wy³±czyæ +#HRC0#. Niestety, nie wszystkie Nokie przyjmuj± te kody (telefon +powinien siê zrestartowaæ po ich wprowadzeniu) - w starszych modelach nie s± +w ogóle przewidziane, w nowszych s± deaktywowane, gdy telefon +jest kierowany na rynek, na którym nie ju¿ sieci obs³uguj±cych ten kana³. +I jedna ciekawostka: w Nokii 6110 (oprogramowanie 5.24) mo¿esz natomiast samodzielnie zdecydowaæ +o tym, czy telefon ma u¿ywaæ tego kana³u czy nie - wystarczy zmieniæ w +EEPROMIE warto¶ci odpowiednich komórek pamiêci: + + + + + + + + + + + + + +
    w³±czaniewy³±czanie
    komórka 0070 na 78 +
    komórka 011F na 84
    komórka 0070 na 70 +
    komórka 011F na 7C
    +
  • + +
  • +FR (Full Rate Traffic): przekaz z +prêdko¶ci± 13 kbit/sek, kodowanie algorytmem LPC-RPE (Linear Prediction +Coding with Regular Pulse Excitation)
  • + +
  • +EFR (Enhanced Full Rate): +13 kbit/sek, mechanizm kodowania jest inny ni¿ przy FR +(nazywa siê ASELP - AlgebraicCode Excitation Linear Prediction i zosta³ +stworzony przez firmê Nokia +i uniwersytet z Sherbrooke; uznano go za przemys³owy standard dla telefonii +GSM). Kodowanie EFRdaje lepsz± jako¶æ d¼wiêku przy tej samej prêdko¶ci +przesy³ania informacji (ale szybsze o ok. 5% wyczerpywanie siê akumulatora +w telefonie w porównaniu do FR). Tryb +ten w³±czysz kodem *EFR0# (po jego u¿yciu telefon próbuje korzystaæ +z kana³ów TCH w kolejno¶ci EFR, FR, (HR)), a +wy³±czysz #EFR0# (kolejno¶æ FR, (HR)). Wymienione kody +mog± byæ nieobs³ugiwane przez niektóre modele (np. 6110 z pewnymi wersjami +oprogramowania) - je¿eli Twój telefon je akceptuje, powinien siê +zresetowaæ po ich u¿yciu (je¿eli siê tak nie dzieje, nie w³±czysz/wy³±czysz +EFR z jego klawiatury). Starsze Nokie (np. 2110) w ogóle nie obs³ugiwa³y +tego kana³u. W Polsce mo¿na go u¿yæ w Idei +oraz (czê¶ciowo) w Erze. +To, czy rzeczywi¶cie jest u¿ywany, sprawdzisz tylko w czasie rozmowy (rodzaj +u¿ywanego kana³u).
  • +
+ +

Je¿eli sieæ nie obs³uguje którego¶ z kana³ów, a Twój telefon przyjmuje kod +do jego aktywacji, mo¿esz zobaczyæ komunikat "Nie gotowe" ("Not ready"). + +

Rodzaj u¿ywanego przez telefon kana³u mo¿esz sprawdziæ w Menu +10-1. Kolejno¶æ u¿ywania kana³ów TCH mo¿esz natomiast dowolnie +ustawiæ w niektórych programach serwisowych (np. w WinTesli wybierasz z +menu g³ównego "Software", a pó¼niej "Product Profile" - mo¿e to byæ jedyna metoda +w³±czenia obs³ugi kana³u HR w s³uchawce). + +

TDMA (Time Division Multiple Access) +(GSM/DCS/PCS) +
Pojêcie oznaczaj±ce wielodostêp w dziedzinie czasu: w tym "samym" czasie +mo¿liwa jest transmisja danych (zakodowana rozmowa albo dane komputerowe) +na jednym kanale (jego numer sprawdzisz w Menu +10-1) przez KILKA telefonów (tak naprawdê, czas ten jest dzielony +na bardzo ma³e czê¶ci (patrz opis +TS), których nie zauwa¿amy - st±d w uproszczeniu mo¿na napisaæ, +¿e wszystko dzieje siê równocze¶nie). + +

TMSI (Temporary Mobile Subscriber Identity): +(GSM/DCS/PCS) +
W trakcie procedur sygnalizacyjnych kodowanych w kanale radiowym (m.in. +w czasie uaktualniania po³o¿enia) telefonowi jest przydzielany przez MSC +ten numer. W momencie, gdy sieæ chce skontaktowac siê z danym telefonem, a +transmisja po kanale radiowym nie jest jeszcze kodowana, jest on wysy³any zamiast +IMSI i pozwala telefonowi zorientowaæ siê, ¿e przywo³anie +dotyczy w³a¶nie jego. Numer ten ma znaczenie lokalne +i jego struktura jest okre¶lana przez administratora sieci. Aktualne TMSI +sprawdzisz w Menu 10-10. + +

VLR (Visitor Location Register) +(GSM/DCS/PCS) +
Rejestr przechowuj±cy te same informacje co HLR, +ale dla abonentów dzia³aj±cych w roamingu (s± one pobrane z HLR ich +macierzystych sieci) + + +

Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net2.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net2.htm new file mode 100644 index 0000000..de58c77 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net2.htm @@ -0,0 +1,2301 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 3/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (3/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

12. Znaczenie poszczególnych testów
+


+ +

To, czy który¶ test wystêpuje w Twoim telefonie, +zale¿y: + +

+

    +
  • +od jego modelu: generalnie, im nowszy i bardziej skomplikowany (wiêcej funkcji), tym +bogatszy ma monitor sieci (przyk³adowe porównanie znajdziesz pod adresem +www.fkn.pl/netmonitor/index.html).
  • + +
  • +od wersji oprogramowania - najczê¶ciej: im nowsze, tym wiêcej jest opcji +(wymianê oprogramowania mo¿na zleciæ serwisowi, jego wersjê sprawdzisz +przy pomocy kodów wymienionych na tej stronie) +- przyk³adowo w Nokii 5110 w Menu 10-89 +parametr bbbbbb pokazywany jest dopiero przy oprogramowaniu 5.07. Z wymiany +oprogramowania masz jeszcze jedn± korzy¶æ: w nowszych jego wersjach poprawiane +s± ró¿ne b³êdy (równie¿ w monitorze sieci).
  • + +
  • +od tego, kto wygrywa³ oprogramowanie do telefonu: jest ono pisane +jest zazwyczaj w C (a pó¼niej t³umaczone (kompilowane) na kod pracuj±cego +w nim mikroprocesora). Wed³ug mojej prywatnej teorii wystêpowanie (i dzia³anie) +pewnych testów zale¿y równie¿ od tego, czy w jego kodzie ¼ród³owym by³y +ustawione pewne sta³e (programi¶ci :-) zapewne zrozumiej±, co staram siê +napisaæ). Takim sztampowym przyk³adem mo¿e byæ Menu +10-38: wed³ug opisów angielskich nie ma go w sprzedawanych +telefonach, poniewa¿ przed kompilacj± oprogramowania nie zosta³a +ustawiona sta³a DEV_FT_MEMORY_DUMP_IN_USE w pliku ftd_conf.h (jednym +z plików z kodem ¼ród³owym oprogramowania). My¶lê, ¿e podobnie jest z +opisami pomocy (w jednych telefonach wystêpuj±, w innych nie) - ich obecno¶æ +nie zale¿y od wersji oprogramowania, tylko od tego, gdzie telefon zosta³ +kupiony (sk±d pochodzi - gdzie mia³ wgrywane oprogramowanie). Jak sobie +poradziæ z tym problemem ? Niestety, nale¿y wgraæ od nowa oprogramowanie (w którym przed +kompilacj± owe sta³e by³y ustawione). + +

    Aha, nie +jestem pewien, czy równie¿ testy zwi±zane z DSP +(Menu 10-70, 10-73, +10-74, +10-76 +(z wyj±tkiem parametru ab), +10-77, +10-78 +i 10-79) musz± byæ w ten sposób +w³±czone (czy te¿ ich dzia³anie (albo niedzia³anie) zale¿y od u¿ywanej +sieci).

  • +
+ +

Pomoce do opisywanych testów s± zaznaczone wyt³uszczon± czcionk±, +natomiast konkretne warto¶ci testów pochy³± (umie¶ci³em je tam, gdzie nie mia³em +dalszych szczegó³ów). + +

+

+ + +

Na pocz±tek + + +

Menu 10-1 +
Informacje o trybie komunikacji z komórk± + +

+ + + + + + +
+ + + + +
abbb ccc ddd
+ e ff g mmmm
+ nnn     ppp
+    oooo
+
+ + + + +
CH RxL TxPwr
+TS TA RQ RLT
+ C1     C2
+    CHT
+
+ +

+

    +
  • +a - H, je¿eli w³±czone jest skakanie po +czêstotliwo¶ciach (w przeciwnym razie pole jest puste). Informacjê +o tym telefon podaje równie¿ w Menu 10-11 +i Menu 10-12.
  • + +
  • +bbb - CH (channel): numer kana³u u¿ywanego do komunikacji z komórk± +(dziesiêtny). Je¶li jest w³±czone skakanie +po czêstotliwo¶ciach, numer zmienia siê, gdy wy¶wietlacz jest od¶wie¿any. +Zale¿± od niego czêstotliwo¶ci u¿ywane do komunikacji telefonu z BTS-em: + +

    + + + + + + + + + + + + + + + + + + + + +
    czêstotliwo¶æ no¶na (¶rodkowa) +
    kana³u transmisji (MHz)
    GSM 900
    GSM 1800
    transmisja telefon-BTS
    890 + CH * 0,2
    1710 + (CH - 511) * 0,2
    transmisja BTS-telefon
    935 + CH * 0,2
    1805 + (CH - 511) * 0,2
    + +

    +oraz to, czy telefon korzysta z komórki dzia³aj±cej w GSM 900 czy 1800 MHz +(dok³adniej o numerach kana³ów piszê w Menu 10-17). + +

    +

  • + +
  • +

    ccc - RX: minus nie jest +pokazywany, gdy warto¶æ <=-100. Od tego parametru zale¿y kilka rzeczy: + +

    +

      +
    • +je¿eli wszystkie kana³y maj± sygna³ ni¿szy od -110 dBm, telefon nie monitoruje +kana³ów.
    • + +
    • +je¿eli zaniknie sygna³ Twojej macierzystej sieci (np. Ery), +telefon próbuje monitorowaæ nastêpn± dostêpn± (np. Plusa) +- pokazuje siê wtedy znak obecno¶ci sieci i 0 kresek zasiêgu (mo¿esz oczywi¶cie +korzystaæ z po³±czeñ alarmowych)
    • + +
    • +w przypadku, gdy druga sieæ ma do¶æ silny sygna³ (np. -85 dBm), a Twoja +macierzysta sieæ z kolei bardzo s³aby (np. -100 dBm), telefon mo¿e mieæ +du¿e k³opoty z zalogowaniem siê do niej (musisz wtedy skorzystaæ z Menu +10-17 i wymusiæ u¿ywanie konkretnego kana³u)
    • + +
    • +warto¶æ parametru RXLev: + +

      + + + + + + + + +
      RX (od)RX (do)RXLev
      mniej ni¿-110 dBm0
      -110 dBm-109 dBm1
      -109 dBm-108 dBm2
      .........
      -49 dBm-48 dBm62
      -48 dBmwiêcej63
      +

      +

    • + +
    • +warto¶æ wska¼nika po lewej stronie wy¶wietlacza (podajê w przybli¿eniu): + +

      + + + + + + + +
      RX (od - do)ilo¶æ kresek
      od -105 do -100 dBm0
      od -100 do -95 dBm1
      od -95 do -90 dBm2
      od -90 do -85 dBm3
      wiêcej ni¿ -85 dBm4
      +

      +

    +
  • + + +
  • +

    ddd - TX: poziom nadawanego sygna³u (tylko podczas po³±czenia). Je¿eli +nadajnik telefonu dzia³a, przed warto¶ci± jest dodawana * (gwiazdka). Im +mniejszy, tym wiêksza moc (równie¿ wypromieniowywana w kierunku g³owy ! +- informacje o szkodliwo¶ci telefonii komórkowej znajdziesz w Fan +Klubie Nokii (www.fkn.pl/zdrowie/index.html) +i na stronie Wojciecha Markiewicza) +i zu¿ycie baterii. + +

    + + + + + +
    TX (GSM 900)161514131211109
    TX (GSM 1800)98765432
    dBm11121314151617181920212223242526
    Waty0,0120,0160,020,0250,0320,040,050,0630,0790,10,1250,1580,20,2510,3160,398
    + +

    i ci±g dalszy... + +

    + + + + + +
    TX (GSM 900)8765432-0
    TX (GSM 1800)10313029
    dBm2728293031323334353637383940414243
    Waty0,5010,6310,79411,261,5822,513,163,9856,318101215,820
    + +

    +Watt = 10(dBm/10)*0,001 +
    dBm = 10*log(Watt/0,001) +

    Kolejne klasy (okre¶laj±ce maksymaln± moc telefonów) s± nastêpuj±ce: + +

    + + + + + + + + +
    GSM 900
    GSM 1800
    +
    20 W (nie realizowana) +
    8 W (telefon samochodowy/przeno¶ny)  +
    5 W (telefon samochodowy/przeno¶ny) +
    2 W (telefon rêczny) +
    0,8 (telefon rêczny)
    +
    +
    1 W (telefon rêczny) +
    0,25 W (telefon rêczny)
    +
    + +

    Minimalna moc telefonów w GSM 900 to 0,02 W, w GSM 1800 za¶ 0,0025 W +(4 dBm). + +

    Klasy mocy BTSów podajê przy ich +opisie. +

  • + +
  • +

    e - TS (Time Slot): kana³ radiowy u¿ywany +do komunikacji pomiêdzy telefonem i BTSem +jest dzielony na 8 czê¶ci (zwane TS - szczelinami czasowymi). Je¿eli we +wszystkich BTSach (dostêpnych dla Twojego +telefonu) ka¿da szczelina jest w danym momencie zajêta, nie bêdziesz móg³(mog³a) +z niego zadzwoniæ (a inni dodzwoniæ siê do Ciebie) i otrzymasz komunikat +'Network busy' - 'Sieæ zajêta' (informacja o tej przyczynie niezrealizowania +po³±czenia jest podawana m.in. w Menu +10-39). Niestety, ka¿de po³±czenie ma ten sam priorytet w polskich +sieciach (piorytetowanie po³±czeñ zosta³o wprawdzie wprowadzone w fazie 2+ GSM, +ale nie jest ona na razie obs³ugiwana w Polsce) +- tak wiêc (przynajmniej na razie), je¿eli chcesz zadzwoniæ pod alarmowy numer 112 +i sieæ jest zajêta, to ¿adne inne mniej "wa¿ne" po³±czenie nie zostanie przerwane). +Rozwi±zaniem, które +pozwoli unikn±æ takich sytuacji, jest powiêkszenie ilo¶ci BTSów +(np. stworzenie sieci GSM 900/1800 MHz) albo takie jej modyfikacje, aby +mo¿liwe by³o u¿ywanie w niej kana³ów HR (przy +FR +albo EFR telefon wykorzystuje ca³± przydzielon± +szczelinê, przy HR (zdefiniowanych w fazie +2 GSM) ju¿ tylko jej po³owê). Maksymalna prêdko¶æ transmisji danych przy +u¿yciu jednego TS wynosi 9.6 kbit/sek. (14.4 kbit/sek. przy pewnych dodatkowych +warunkach). Projektowane i wprowadzane do u¿ytku systemy pozwalaj±ce j± +zwiêkszyæ (np. GPRS (Generic Packet Radio Services) +(dok³adniejsze informacje na stronie +www.fkn.pl/dane/technika/gprs.html) +albo HSCSD (High Speed Circuit Switched Data) +(dok³adniejszy opis pod adresem +www.fkn.pl/dane/technika/hscsd.html)) +bazuj± na przydzielaniu jednemu telefonowi kilku TS równocze¶nie (co oczywi¶cie +zmniejsza pojemno¶æ sieci). Wska¼nik tutaj pokazuje natomiast numer u¿ywanej +szczeliny (0..7 dla FR (EFR) +albo 0..15 dla HR).

  • + +
  • +

    ff - TA (Timing Advance): BTS +informuje telefon, o ile wcze¶niej ma wys³aæ sygna³ (aby ten dotar³ na +czas do BTSa). To jest w³a¶nie ten wska¼nik. +Pozwala on oceniæ odleg³o¶æ telefonu od BTSa: +jest ona z przedzia³u do TA*550 m do (TA+1)*550 m (tak naprawdê czasami trzeba uwzglêdniæ, +¿e sygna³ ulega (wielokrotnemu) odbiciu i takie odczytywanie odleg³o¶ci mo¿e byæ myl±ce). +Uaktualniany przy komunikacji z sieci± (odbieranie (wysy³anie) +SMSów, +rozmowa, zg³aszanie ¿±dañ) - korzystaniu np. z kana³ów SDCC +i TFR. Przyjmuje warto¶ci od 0 do 63 (do 35 km) przy +korzystaniu z kana³u FR albo EFR. +Przy u¿yciu kana³u HR teoretycznie (m.in. +przy zestawie samochodowym (potrzebna wiêksza moc przy nadawaniu) i p³askim +terenie) maksymalna odleg³o¶æ od BTSa mo¿e +wynosiæ dwa razy tyle (do 70 km), a TA byæ z zakresu od 0 do 128 (angielskie +opisy monitora, z których korzysta³em, nic o tym nie wspomina³y - jest wiêc np. mo¿liwe, +¿e przy warto¶æ wiêkszych od 64 telefon (?) odejmuje to 64 od nich i pokazuje tak± +warto¶æ w tym te¶cie).

  • + +
  • +

    g - RXQUAL_SUB (stopa b³êdów w transmisji przy w³±czonym DTX  +(stan DTX mo¿na sprawdziæ w Menu +10-12)): okre¶la, jak du¿o b³êdów w po³±czeniu telefon musi poprawiaæ, +aby by³a mo¿liwa rozmowa. Zakres 0 - 7 (0 - oznacza, ¿e ¿adnych, powy¿ej +5 jest du¿a szansa na przerwanie rozmowy). Im wiêksza warto¶æ, tym bardziej +rozmowa jest urywana... + +

    + + + +
    Warto¶æ RQ01234567
    Maksymalna ilo¶æ b³êdów<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
    +

    +

  • + +
  • +

    mmmm - RLT (Radio Link Timeout): je¶li warto¶æ jest +ujemna, pokazywane jest 0. Parametr mo¿e przyj±æ maksymalnie warto¶æ 64. +Je¿eli telefon u¿ywa innego kana³u ni¿ TCH +albo SDCC, pokazywane jest xx.

  • + +
  • nnn - parametr C1

  • + +
  • +

    ppp - parametr C2. Je¿eli sieæ obs³uguje +tylko fazê 1 GSM, pokazywana jest tutaj warto¶æ C1.

  • + +
  • +

    oooo - rodzaj kana³u u¿ywanego przez telefon (pod adresem www.pins.co.uk/upages/stratfordc/ +znajdziesz programy w C z algorytmami u¿ywanymi do kodowania ró¿nych ich +rodzajów). Przu u¿ywaniu kana³ów HR mo¿esz nawet zobaczyæ, +czy wykorzystywana jest pierwsza czy druga czê¶æ TS (mówi± o tym warto¶ci podkana³u: 0 albo 1): + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AGCH(Access Grant Channel) - jest +to kana³ u¿ywany przez BTSa do poinformowania +telefonu o tym, jakiego kana³u powinien u¿yæ (jest odpowiedzi± BTSa +na na RACH) - przyporz±dkowywuj±cy telefon +do SDCCH
    BCCH(Broadcast Control Channel) +- kana³ w kierunku +BTS-telefon, który zawiera +on dok³adne informacje o sieci (potrzebne do identyfikacji i dostêpu do +niej) - np. +
      +
    • jak czêsto telefon ma informowaæ sieæ, gdzie siê znajduje (warto¶æ licznika T3212 - dok³adniejszy opis w Menu 10-10)
    • +
    • o tym, czy w sieci u¿ywane jest skakanie po czêstotliwo¶ciach
    • +
    • parametr CELL_RESELECT_HYSTERESIS (patrz opis parametru C2)
    • +
    • parametr CELL_BARRED (informuj±cy, czy komórka jest testowana, czy oddana do normalnego u¿ytku - telefon mo¿e go ignorowaæ i u¿ywaæ równie¿ tych testowanych - patrz Menu 10-19)
    • +
    +
    THR0TCH HR podkana³ 0
    THR1TCH HR podkana³ 1
    TFRTCH FR
    TEFRTCH EFR
    F144TCH FR - transmisja danych komputerowych, prêdko¶æ 14.4 kbit/sek.
    F96TCH FR - transmisja danych komputerowych, prêdko¶æ 9.6 kbit/sek.
    F72TCH FR - transmisja danych komputerowych, prêdko¶æ 7.2 kbit/sek.
    F48TCH FR - transmisja danych komputerowych, prêdko¶æ 4.8 kbit/sek.
    F24TCH FR - transmisja danych komputerowych, prêdko¶æ 2.4 kbit/sek.
    H480TCH HR - transmisja danych komputerowych, prêdko¶æ 4.8 kbit/sek., podkana³ 0
    H481TCH HR - transmisja danych komputerowych, prêdko¶æ 4.8 kbit/sek., podkana³ 1
    H240TCH HR - transmisja danych komputerowych, prêdko¶æ 2.4 kbit/sek., podkana³ 0
    H241TCH HR - transmisja danych komputerowych, prêdko¶æ 2.4 kbit/sek., podkana³ 1
    FATCH FR - u¿ywany tylko do szybkiej sygnalizacji +np. przy handoverach +
    (FACCH - Fast Associated Control Channel)
    FAH0TCH HR - u¿ywany tylko do szybkiej sygnalizacji +np. przy handoverach +
    (FACCH - Fast Associated ControlChannel), podkana³ 0
    FAH1TCH HR - u¿ywany tylko do szybkiej sygnalizacji +np. przy handoverach +
    (FACCH - Fast Associated Control Channel), podkana³ 1
    SDCCSDCCH (Stand-alone Dedicated Control +Channel) +- u¿ywany do sygnalizacji systemowej: +
      +
    • ustanowienia po³±czenia
    • +
    • weryfikacji u¿ytkownika
    • +
    • wykonywania Location Update
    • +
    • przyporz±dkowania do TCH
    • +
    • przesy³ania SMSów
    • +
    +
    CCCH(Common Control Channel ?) - u¿ywany, gdy telefon czuwa (nie nadaje ani nie odbiera danych)
    CBCH(Cell Broadcast Channel) - +kana³ w kierunku BTS-telefon u¿ywany do +nadawania komórkowego (jego odbiór np. w Nokii 5110 w³±czysz w Menu +2-5 i Menu 4-2-2, w Nokiii 6110 w Menu 1-5 i Menu +4-4-2; obs³uguje go jak na razie Plus +i Idea)
    CCHRpo³±czenie kana³ów CCCH i CBCH
    SEARtelefon szuka sieci
    NSPS(No Serve Power Save) +- telefon nie jest w zasiêgu sieci, w³±czone oszczêdzanie energii (informacjê +o tym, czy karta SIM mo¿e zatrzymywaæ zegar w trybie oszczêdzania energii, +znajdziesz w Menu 10-51)
    +

  • +
+ +

W Nokii 3110 test ten wygl±da podobnie: + +

+ + + + + + +
+ + + + +
abbb cccc ddd
+ e ff g qqrr
+s Bttuu mmmm
+w ppp oonnn z
+
+ + + + +
 CH RxL TxPwr
+TS TA QPM RAR
+Ro BsiCLK RLT
+S C2 CHT C1 B
+
+ +

+

    +
  • cccc - w tym telefonie minus jest pokazywany zawsze
  • +
  • ooo - warto¶ci szesnastkowe
  • +
  • qq - tryb pagingu (patrz Menu 10-2)
  • +
  • rr - RAR (opis w Menu 10-2)
  • +
  • s - wska¼nik roamingu (opis w Menu 10-2)
  • +
  • tt - BSIC dla u¿ywanej komórki (opis w Menu 10-2)
  • +
+ +

Daje siê zauwa¿yæ powi±zanie pomiêdzy poziomem sygna³u odbieranego +(RX) i moc± nadawania telefonu +(TX): im s³abszy jest ten pierwszy, tym mocniejsza +jest ta druga (podajê przyk³adowe zmierzone dane dla Nokii 6110 przy korzystaniu +z kana³ów +SDCC i TFR): + +

+ + + + + + +
RXTX
od -38 do -49 dBm19
od -68 do -75 dBm9-14 (0,032 - 0,316 Wata)
od -79 do -85 dBm7-9 (0,794 - 0,032 Wata)
od -85 do -93 dBm5-7 (2 - 0,794 Wata)
+ +

Dla ciekawych: niektóre z tutaj pokazywanych danych znajdziesz równie¿ +w niektórych programach serwisowych (np. w WinTesli nale¿y wybraæ z menu +g³ównego "Testing", a pó¼niej "RF Information"). + +

+ + + + + +
To, czy telefon u¿ywa kana³u CCCH +czy CBCH (w przypadku, gdy komórka nie obs³uguje nadawania +komórkowego - mo¿na to sprawdziæ w Menu +10-7), zale¿y od jego wersji oprogramowania i od tego, czy w³±czony +jest odbiór takiego nadawania. Przyk³adowo: Nokia 5110 z oprogramowaniem +5.04 u¿ywa kana³u CBCH, gdy w³±czysz jego odbiór w +Menu 2-5 lub +Menu 4-2-2 (CCCH, gdy je wy³±czysz). +My¶lê wiêc, ¿e op³aci siê wy³±czyæ go, gdy nie obs³uguje go sieæ - przypuszczalnie +mo¿esz zaoszczêdziæ w ten sposób trochê energii. Zosta³o to poprawione +(tzn. telefon korzysta wtedy z kana³u CCCH niezale¿nie +od ustawienia opcji "Serwis informacyjny" ("Info service") oraz "Informacja +o sieci" ("Cell info display")) przy oprogramowaniu 5.07. + +

W zale¿no¶ci od parametru ccc (RX) mo¿esz +ustawiæ lepiej antenê (szczególnie +kierunkow±) ni¿ opieraj±c siê na wska¼niku po lewej stronie wy¶wietlacza +! Je¶li chodzi o zasiêg sieci, to taka ma³a rada praktyczna: nie dotykaj +anteny telefonu (mo¿esz zreszt± sprawdziæ, o ile mo¿e zmniejszyæ siê poziom +odbieranego sygna³u po przytrzymaniu jej palcami) ! + +

Parametr TA mo¿esz wykorzystaæ (oprócz sprawdzania +odleg³o¶ci od BTSa) równie¿ do pomiaru prêdko¶ci +(np. samochodu, którym jedziesz). Powa¿nie ! Musi byæ spe³nione kilka warunków: + +

    +
  • droga powinna byæ prosta (bez zakrêtów)
  • +
  • telefon w czasie pomiaru musi korzystaæ z 1 BTSa
  • +
  • sam BTS musi byæ dosyæ blisko drogi
  • +
+ +

A teraz trochê matematyki: +
+
Z twierdzenia Pitagorasa: + +

a2 = c2 + e2 +
b2 = c2 + f2 + +

St±d: +
e = +
f = + +

Teraz d = e - f =- + +

Skoro znasz: + +

+

    +
  1. +drogê, któr± przeby³ samochód (na rysunku: d³ugo¶æ odcinka d; mo¿esz j± +obliczyæ na podstawie znajomo¶ci odcinków a, b (s± to odpowiednie wielokrotno¶ci +513 +m (mo¿na tak przyj±æ dla uproszczenia) odczytane na podstawie TA) +i c (piszê o nim dalej))
  2. + +
  3. +czas, w którym siê zmienia³ TA (do pomiaru wystarczy +zegarek ze stoperem)
  4. +
+ +

to mo¿esz oblicz swoj± prêdko¶æ.
B³±d takiego pomiaru zale¿y od: + +

+

    +
  • +odleg³o¶ci BTSa od drogi (odcinek c)
  • + +
  • +samej prêdko¶ci
  • + +
  • +odleg³o¶ci samochodu od BTSa (im wiêksza, +tym b³±d zale¿y mniej od d³ugo¶ci odcinka c)
  • +
+ +

A teraz konkretny przyk³ad: +
TA mia³ wpierw warto¶æ 2, która po 15 sekundach zmieni³a +siê na 1. Wyniki pomiaru by³y nastêpuj±ce: + +

+

    +
  • 123,120 km/h (BTS 0 m od drogi)
  • +
  • 124,320 km/h (100 m od drogi)
  • +
  • 128,160 km/h (200 m)
  • +
  • 135,600 km/h (300 m)
  • +
+ +

Mo¿esz ¶rednio przyj±æ, ¿e odcinek c jest równy 100 m (albo 0, gdy liczysz +w pamiêci - wtedy d = e - f), a prêdko¶æ jest liczona z b³êdem 5 km/h.

+ +

W Nokii 2120 test ten wygl±da nastêpuj±co: + +

+ + + + + + +
+Digital mode + + + + +
+ +rssi DVC d
+chan  l  a
+S   BB  TT
+
+Analog mode + + + + +
+rssi  s  d
+chan  l  a
+CS-state
+
+ +

natomiast w Nokii 2160 jest jeszcze inny: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+rssi DVC S
+chan  Pw A
+CS-state
+

+

+DTCH mode + + + + +
+rssi   s d
+chan   l a
+CS-state
+

+

+ACCH mode + + + + +
+rssi   D d
+chan  Pw A
+CS-state
+
+AVCH mode + + + + +
+rssi DVC S
+chan   l a
+CS-state
+
+ +

a w Nokii 6160 wygl±da nastêpuj±co: + +

+ + + + + + + + + + + + +
+DCCH mode + + + + +
+rssi DVC S
+Bchan Pw A
+CS-state
 
+

+

+DTCH mode + + + + +
+rssi DVC s
+Bchan Be l
+CS-state
 
+

+

+ACCH mode + + + + +
+rssi D d
+Bchan Pw A
+CS-state
 
+
+AVCH mode + + + + +
+rssi s d
+Bchan l a 
+CS-state
 
+
+ +

+

    + +
  • B = aktualnie u¿ywana sieæ/czêstotliwo¶æ

    +

      +
    • a = a-side 800mhz cellular
    • +
    • b = b-side 800mhz cellular
    • +
    • A = A-block (30 mhz) 1900mhz PCS
    • +
    • B = B-block (30 mhz) 1900mhz PCS
    • +
    • C = C-block (30 mhz) 1900mhz PCS
    • +
    • D = D-block (10 mhz) narrowband 1900mhz PCS
    • +
    • E = E-block (10 mhz) narrowband 1900mhz PCS
    • +
    • F = F-block (10 mhz) narrowband 1900mhz PCS
    • +
    +

    +

  • + +
  • Be = Bit Error rate (stopa b³êdów) w % (0-16)
  • +
  • TT = ostatnia otrzymania warto¶æ przyporz±dkowania czasu (0-31)
  • +
  • rssi = moc odbieranego sygna³u (dBm) (min= -113dBm, max= -51dBm, w krokach 2dB)
  • +
  • DVC = Digital Verification Color (1-255, - = nie zabezpieczony)
  • +
  • D = DCC (Digital Color Code) na kanale ACCH (0-3, - = nie zabezpieczony)
  • +
  • s = kolor SAT (0-2, - = nie zabezpieczony)
  • + +
  • d = stan odbioru danych +

    +

      +
    1. brak synchronizacji/brak danych
    2. +
    3. synchronizacja/brak mo¿liwo¶ci odczytania
    4. +
    5. czytanie poprawne
    6. +
    7. czytanie niepoprawne
    8. +
    +

    +

  • + +
  • S = slot (1-3)
  • +
  • chan = numer kana³u (0001-1023)
  • + +
  • Pw = maksymalna moc, z jak± sieæ pozwala nadawaæ telefonowi +

    +

      +
    • DCCH: MS-ACC-PWR (0-10, - = nie zabezpieczony)
    • +
    • ACCH: CMAC (0-7, - = nie zabezpieczony)
    • +
    +

    +

  • + +
  • l = poziom nadawanego sygna³u (0-10, - = nadajnik wy³±czony)
  • +
  • a = informacja, czy w³±czony jest (1) czy wy³±czony (0) uk³ad d¼wiêkowy
  • + +
  • CS-state = Cellular State +

    +

      +
    • DCCH: SCAN-LOCK : szukanie i zajmowanie DCCH
    • +
    • DCCH: DCCH-SEL  : wybór DCCH
    • +
    • DCCH: CAMPING   : Camping
    • +
    • DCCH: REGISTR   : procedura rejestracji
    • +
    • DCCH: WAIT-ORDER: Waiting for order
    • +
    • DCCH: ORIGINAT  : wysy³anie
    • +
    • DCCH: RSELECT   : powtórny wybór
    • +
    • DCCH: ORIG-SMS  : wysy³anie SMSa
    • +
    • DCCH: TERM-SMS  : odbieranie SMSa
    • +
    • DTCH: TCH       : potwierdzenie kana³u do transmisji
    • +
    • ATCH or DTCH: CONVERSAT : rozmowa
    • +
    • ACCH: OOR       : poza zasiêgiem
    • +
    • ACCH: SCAN-PDCH : szukanie podstawowych dedykowanych kana³ów kontrolnych
    • +
    • ACCH: SCAN-SDCH : szukanie nastêpnych dedykowanych kana³ów kontrolnych
    • +
    • ACCH: SCAN-PCH  : skanowanie kana³ów pagingowych
    • +
    • ACCH: IDLE      : tryb czuwania
    • +
    • ACCH: ACCESS    : dostêp
    • +
    • ACCH: VCH      : potwierdzenie kana³u do transmisji g³osu
    • +
    +
  • +
+ +

Test ten w Nokii 6185/6188 jest, oczywi¶cie ;-), jeszcze inny: + +

+ + + + + + + + + + + + + + + + + + + +
+kontrola CDMA + + + + +
+ +CSST CHAN SP
+PPN EC/SO XF
+LOS XHO FR B
+-Rxx-Txx FER +
+

+

+transmisja CDMA + + + + +
+ +CONV 0450 NP
+8000 2
+000 0D9 00 0
+-093+006 000
+
+

+

+kontrola AMPS + + + + +
+ +RSSI S D
+CHAN P A
+CSST SID E
+XTBY MINMAX  +
+
+transmisja AMPS + + + + +
+ + +-095 2 3
+0273 0 0
+CONV 16427 0
+Y +
+
CDMAAMPS
+
    +
  • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • Chan - kana³
  • +
  • PPN - PseudoNoise offset
  • +
  • EC/SO - Energy per chip per noise
  • +
  • B - aktualna sieæ/czêstotliwo¶æ. a,b oznaczaj± pasmo A i B 800 MHz AMPS (analogowe). A-F oznaczaj± u¿ycie cyfrowych bloków.
  • +
  • Rxx - moc odbioru w dB
  • +
  • Txx - moc transmisji w dB
  • +
  • FER - Frame Error Rate
  • +
  • W czasie transmisji CDMA pokazywany jest aktualnie u¿ywany codec (jeden z poni¿szych): +

      +
    • 8000 - 13 kbit/sek
    • +
    • 0001 - 8 kbit/sek
    • +
    • 0003 - EVRC
    • +
    + +
+
    +
  • RSSI - moc odbieranego sygna³u
  • +
  • S - numer slotu (1-3)
  • +
  • D - DCC (Digital Colour Code) na kontrolnym kanale analogowym +(0-3, - = nie zabezpieczony)
  • +
  • CHAN - kana³
  • +
  • CSST - Cellular State: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • SID - System ID (Cantel = odd number)
  • +
  • MINMAX: minimalne i maksymalne RSSI w czasie ostatniego przedzia³u czasowego ?
  • +
+
+ +

Menu 10-2 +
Wiêcej informacji o u¿ywanej komórce + +

+ + + + + + +
+ + + + +
 aa b c Bdd 
+ ee f 
+ ggg hh iii
+ H=j mm nn
+
+ + + + +
PM RAR Ro BC
+RelR QLF
+CRO TO PenT
+H MAIO HSN
+
+ +

+

    +
  • aa - tryb pagingu: + +

    +

      +
    • NO : normalny
    • +
    • EX : rozszerzony
    • +
    • RO lub SB : reorganizacja pagingu
    • +
    +

    +

  • + +
  • +b - RAR (Random Access Retransmission): maksymalna +ilo¶æ transmisji z u¿yciem kana³u RACH (Random +Access Channel +- kana³ telefon-BTS u¿ywany do zg³aszania +pro¶by o dostêp do sieci np. przy logowaniu)
  • + +
  • +c - je¿eli telefon dzia³a w roamingu, wy¶wietla siê literka R (w przeciwnym +razie pole jest puste). Informacja ta jest równie¿ podawana na wy¶wietlaczu +na samej górze.
  • + +
  • +dd - warto¶æ BSIC dla u¿ywanej komórki
  • + +
  • +ee - tutaj znajdziesz przyczynê zakoñczenia ostatniego po³±czenia (parametr +ten jest równie¿ podawany w Menu 10-63 +i Menu 10-39 (w tym ostatnim menu +znajdziesz wyja¶nienia - patrz opis pierwszego parametru))
  • + +
  • +f - RXQUAL_FULL (stopa b³êdów w transmisji przy wy³±czonym DTX +(stan DTX mo¿na sprawdziæ w Menu +10-12)): okre¶la, jak du¿o b³êdów w po³±czeniu telefon musi poprawiaæ, +aby by³a mo¿liwa rozmowa. Zakres 0 - 7 (0 - oznacza, ¿e ¿adnych, powy¿ej +5 jest du¿a szansa na przerwanie rozmowy). + +

    + + + +
    Warto¶æ RQ01234567
    Maksymalna ilo¶æ b³êdów<0,2%<0,4%<0,8%<1,6%<3,2%<6,4%<12,8%>12,8%
    +

    +

  • + +
  • +

    ggg - Cell reselect offset: zakres 0 - +63 (warto¶ci nale¿y mno¿yæ przez 2 dB), 'xxx' przy nadawaniu. Potrzebny +do obliczenia C2.

  • + +
  • +

    hh - Temporary offset: zakres 0 - 7 +(warto¶ci nale¿y mno¿yæ przez 10 dB, 70 dB oznacza nieskoñczenie d³ugi +czas), 'xx' przy nadawaniu. Potrzebny do obliczenia C2.

  • + +
  • +

    iii - Penalty time: zakres 0 - 31 (warto¶æ +nale¿y mno¿yæ przez 20 s), 'xxx' przy nadawaniu.  Potrzebny do obliczenia +C2.

  • + +
  • +

    j - informacja, czy w³±czone jest skakanie +po czêstotliwo¶ciach: + +

    +

      +
    • 0 - nie (u¿ywany jest pojedyñcza czêstotliwo¶æ - tzw. RF (Radio Frequency))
    • +
    • 1 - tak (u¿ywane s± ró¿ne RF (Radio Frequency))
    • +
    +

    +

  • + +
  • +

    mm - MAIO (Mobile Allocation Index Offset). +Zakres od 0 do 63, 'xx' gdy j=0 (tzn. gdy nie ma skakania +po czêstotliwo¶ciach - to ostatnie mo¿esz te¿ sprawdziæ w Menu +10-12)

  • + +
  • +

    nn - HSN (Hopping Sequence Number). Zakres od 0 do +63, 'xx' gdy j=0 (tzn. gdy nie ma skakania +po czêstotliwo¶ciach - to ostatnie mo¿esz te¿ sprawdziæ w Menu +10-12)

  • +
+ +

W Nokii 3110 test ten wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
aaabbbccccddd
+aaabbbccccddd
+aaabbbccccddd
+w           z
+
+ + + + +
S CH C1 rx C2
+1 CH C1 rx C2
+2 CH C1 rx C2
+S    1N 2N  B
+
+ +

Opisu parametrów szukaj w Menu 10-3 (w tym +modelu przed parametrami cccc jest zawsze minus). + +

W Nokii 2120 test ten wygl±da nastêpuj±co: + +

+ + + + + +
+ + + + +
+ENCR  CIPH
+DTX  XSTBY
+CS-state
+
+ +

+

    +
  • ENCR = kiedy kodowanie wiadomo¶ci (SMS ?) jest w³±czone
  • +
  • CIPH = kiedy kodowanie d¼wiêku jest w³±czone
  • +
  • DTX = kiedy DTX jest w³±czone
  • +
  • XSTBY= kiedy rozszerzone czuwanie jest w³±czone
  • +
  • CS-state = opis w poprzednim te¶cie
  • + +
+ +

natomiast w Nokii 2160 jest jeszcze inny: + +

+ + + + + + + + + + + + +
+tryb DCCH + + + + +
+mode   DTX
+ENCR  CIPH
+d    Be TA
+

+

+tryb DTCH + + + + +
+ +mode   DTX
+ENCR  CIPH
+d    Be TA +
+

+

+tryb ACCH + + + + +
+ +mode
+XSTBY
+       SID +
+
+tryb AVCH + + + + +
+mode
 
+       SAT +
+
+
+ +

a tak wygl±da w Nokii 6160: + +

+ + + + + + + + + + + + +
+tryb DCCH + + + + +
+mode M C
+FB E SP pc
+net SID..
  +
+

+

+tryb DTCH + + + + +
+mode DTX
+ENCR CIPR 
+d a TA S
+CODEC... +
+

+

+tryb ACCH + + + + +
+mode
+XSTBY
+ SID      
  +
+
+tryb AVCH + + + + +
+mode
 
+ SAT      
  +
+
+
+ +

+

    +
  • mode = DCCH, DTCH, ACCH, AVCH
  • +
  • SID = system ID [0-32767, - = nie zabezpieczony]
  • + +
  • tryb DCCH +

    +

      +
    • M = maksymalna klasa ramki pagingowej (PFC) obs³ugiwana przez sieæ (1-8)
    • +
    • C = aktualna PFC (Paging Frame Class) (1-8)
    • +
    • FB = ilo¶æ slotów F-BCCH
    • +
    • E = ilo¶æ slotów E-BCCH
    • +
    • SP = ilo¶æ slotów SPACH
    • +
    • pc = podkana³ PCH
    • +
    • net = obs³ugiwane typy sieci, mapa bitowa (1=obs³ugiwane, 0=nie, C=aktualnie u¿ywane): +1 bit dla sieci publicznej, 2 dla prywatnej, 3 dla rezydenckiej
    • +
    +

    +

  • + +
  • tryb DTCH +

    +

      +
    • DTX = pokazywane kiedy DTX jest w³±czone
    • +
    • ENCR = pokazywane kiedy kodowanie wiadomo¶ci (SMS ?) jest w³±czone
    • +
    • CIPH albo CIPR = pokazywane kiedy kodowanie g³osu jest w³±czone
    • +
    • d = stan odbioru danych (0=brak synchronizacji, 1=synchronizacja)
    • +
    • Be = Bit Error rate (stopa b³êdów) w % (0-16)
    • +
    • TA = aktualne przyporz±dkowanie czasu (0-30)
    • +
    • a = informacja, czy generowany jest d¼wiêk (1) czy nie (0)
    • +
    • CODEC... = aktualnie u¿ywany codec:

      +

        +
      • -EFR- = IS-136A ACELP coder
      • +
      +
    +

    +

  • + +
  • tryb ACCH +

    +

      +
    • XSTBY = pokazywane kiedy rozszerzone czuwanie jest w³±czone
    • +
    +

    +

  • + +
  • tryb AVCH +

    +

      +
    • SAT = wa¿no¶æ SAT mierzona przez DSP (0-32767)
    • +
    +

    +

  • +
+ +

i w Nokii 6185/6188: + +

+ + + + + + + + + + + + + +
+kontrola CDMA + + + + +
+ +PN1
+ECK         

  +

+

+

+transmisja CDMA + + + + +
+ +PN1 PN3 PN5 
+ECK ECK ECK
+PN2 PN4 PN6
+ECK ECK ECK +
+

+

+kontrola AMPS + + + + +
+ +X F S N N C
+SLEEP EMC
+SCC STC M
+RSSCPLCC CAL +
+
+transmisja AMPS + + + + +
+ +2 2 1 0 4 1
+00015F927B13
+0029B 0A0 2
+140 372 0000
+
+
CDMA +

+

    +
  • PNx: CDMA PN offsets handoff canidate listing. Shows only the current offset while idling. +Shows 1 to 6 additional choices during traffic.
  • +
+
+ +

Menu 10-3 +
Informacje o aktualnie u¿ywanej i s±siednich komórkach + +

+ + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+   ef gh
+
+ + + + +
SCH C1 rx C2
+1CH C1 rx C2
+2CH C1 rx C2
+    1N 2N
+
+ +

Znaczenie poszczególnych linijek: + +

+

    +
  1. informacje o aktualnej komórce
  2. +
  3. 1 s±siednia komórka
  4. +
  5. 2 s±siednia komórka
  6. +
  7. e,f dotycz± 1 s±siedniej komórki, g,h 2 s±siedniej komórki
  8. +
+ +

+

    +
  • +aaa - CH (channel): numer kana³u u¿ywanego do komunikacji z komórk± +(dziesiêtny)
  • + +
  • +bbb - warto¶ci C1 wy¶wietlane tylko w trybie +czuwania. W trybie aktywnym (np. po³±czenie) wy¶wietlana literka B i warto¶ci +BSIC +dla danej komórki
  • + +
  • ccc - RX: Minus nie jest pokazywany, +gdy warto¶æ <=-100. Pozwala on obliczyæ warto¶æ parametru RXLev: + +

    + + + + + + + +
    RX (od)RX (do)RXLev
    mniej ni¿-110 dBm0
    -110 dBm-109 dBm1
    -109 dBm-108 dBm2
    ......... +
    -49 dBm-48 dBm62
    -48 dBmwiêcej63
    +

    +

  • + +
  • +ddd - parametr C2
  • + +
  • +e,g - pokazuje siê F, je¿eli komórka jest na zabronionym obszarze (w przeciwnym +razie pole jest puste)
  • + +
  • +f,h: + +

    +

      +
    • +B oznacza komórkê testowan± (telefon mo¿e korzystaæ z testowanych komórek +- trzeba to w³±czyæ w Menu 10-19)
    • +
    • N - oddan± do normalnego u¿ytku
    • +
    • L - oznacza niski poziom
    • +
    • w innych wypadkach pole jest puste.
    • +
    +

    +

  • + +
+ + + + + + + +
Je¿eli chcesz siê dowiedzieæ, czy aktualnie u¿ywana komórka jest testowa czy nie, +zajrzyj do Menu 10-19 (zale¿y to bowiem od ustawienia +tamtego testu)
+ +

Czasami telefon pokazuje, ¿e równocze¶nie C1 i +C2 dla danego kana³u s± równe -99 +- oznacza to prawdopodobnie, ¿e nie móg³by siê do niego zalogowaæ... + +

W Nokii 3110 test ten wygl±da jak Menu 10-4. + +

W Nokii 2120 test ten wygl±da jak test 4 w Nokii 2160. + +

W Nokii 2160 test ten wygl±da inaczej i wystêpuje tylko przy u¿ywaniu +kana³u DCCH: + +

+ + + +
+ + + + +
+RS SS SI b
+NA ND
  +
+
+ +

a tak w Nokii 6160: + +

+ + + +
+ + + + +
+RS SS SI b
+NA ND
+MA MD MO
  +
+
+ +

+

    +
  • RS = minimalny poziom sygna³u niezbêdny do dostêpu do komórki (0-31, gdzie 0=-113 dBm i 31=-51 dBm)
  • +
  • SS = minimum signal Strength Sufficient for candidate of reselection (0-31, gdzie 0=-113 dBm i 31=-51 dBm)
  • +
  • SI = Scan Interval between consecutive strength measurements in hyperframes (1-16)
  • +
  • b = access burst size (0=normal, 1=abbreviated RACH)
  • +
  • NA = ilo¶æ s±siednich analogowych komórek (0-24)
  • +
  • ND = ilo¶æ s±siednich komórek cyfrowych (0-24)
  • +
+ +

i w Nokii 6185/6188: + +

+ + + + +
+OWNNUMBER
+ESN-00000000
+ESN-HEX
+SL P MD PC +
+ +

    +
  • OWNNUMBER - numer telefonu
  • +
  • ESN - Electronic Serial Number
  • +
  • MD - [AD] zmienia siê na [DI] w czasie u¿ywania CDMA na 800 MHz
  • +
+ +

Menu 10-4 +
Informacje o s±siednich komórkach + +

+ + + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+  ef gh ij
+
+ + + + +
3CH C1 rx C2
+4CH C1 rx C2
+5CH C1 rx C2
+  3N 4N 5N
+
+ +

Znaczenie poszczególnych linijek: +

    +
  1. 3 s±siednia komórka
  2. +
  3. 4 s±siednia komórka
  4. +
  5. 5 s±siednia komórka
  6. +
  7. +e,f dotycz± 3 s±siedniej komórki, g,h 4 s±siedniej komórki, i,j +5 s±siedniej komórki
  8. +
+ +

Znaczenie literek jest takie jak w Menu 10-3 +(literka i oznacza to samo co e, za¶ j to samo co f) + +

Czasami telefon pokazuje, ¿e równocze¶nie C1 i +C2 dla danego kana³u s± równe -99 +- oznacza to prawdopodobnie, ¿e nie móg³by siê do niego zalogowaæ... + +

W Nokii 3110 ten test wygl±da jak Menu 10-5. + +

W Nokii 2160 ten test wygl±da inaczej: + +

+ + + + +
+ + + + +
+bVo mod bs
+Tbat1 Tb2
+Wpwm FCmAh
+
+
+ +

+

    +
  • bVo = napiêcie akumulatora
  • +
  • mod = tryb ³adowania + +

    +

      +
    • FAS = szybkie ³adowanie
    • +
    • COL = ³adowanie zimnego akumulatora
    • +
    • MAI = ³adowanie podtrzymuj±ce
    • +
    • ERR = z³a ³adowarka albo problem z akumulatorem
    • +
    • LIC = ³adowanie akumulatora LiION
    • +
    • TXO = ³adowanie przy w³±czonym nadajniku (rozmowa ?)
    • +
    • *** = ³adowarka jest od³±czona
    • +
    +

    +

  • + +
  • bs = bateria jest pe³na albo przyczyna przerwania szybkiego ³adowania + +

    +

      +
    • TI = osi±gniêto maksymalny czas ³adowania
    • +
    • DV = wykryto dV/wato¶æ peak (jest na³adowany)
    • +
    • BV = maksymalny poziom napiêcia akumulatora
    • +
    • BT = maksymalny poziom temperatury akumulatora (przegrzanie)
    • +
    • ** = akumulator nie jest na³adowany
    • +
    +

    +

  • + +
  • Tbat1 = battery temp. a/d reading (subtracted from 1023)
  • +
  • Tb2 = temperatura akumulatora w C (nie zaimplementowana)
  • +
  • Wpwm = kontrola ³adowania (000-250)
  • +
  • FCmAh = ilo¶æ mAh na³adowanych do akumulatora
  • +
+ + +

W Nokii 2120 ten test wygl±da jak + +

+ + + + +
+ + + + +
+ChargV:NNN
+ST hex des
+B:LLLL KKK
+
+ +

natomiast nie zosta³ on zaimplementowany. + +

W Nokii 6160 wygl±da nastêpuj±co: + +

+ + + + +
+ + + + +
+SID #####
+NN NT NR
+Alphatag  
  +
+
+ +

+

    +
  • SID = System Identification Number (0-32767, nieparzysty +dla no¶nych 'A', parzysty dla no¶nych 'B', - = niezabezpieczony)
  • +
  • Alphatag.. = textual end-user display of current system
  • +
+ +

i w Nokii 6185/6188: + +

+ + + + +
+CSST CHAN
+A B
+SID
+SD IT TM CAP +
+ +

    +
  • CSST - Cellular state: IDLE, CONVE, PLIOS, TIME, SYNC, RELE, PAGE, TRFIN, W_OR
  • +
  • CHAN - kana³
  • +
  • B - pasmo czêstotliwo¶ci (ma³e a,b = pasmo 800 MHz; wielkie A,B = pasmo 1900 MHz)
  • +
  • SID - System ID:

    +

      +
    • [17500] - Clearnet PCS
    • +
    • [16422] - BC Tel Mobility
    • +
    • [16xxx parzysty numer] - Cantel AT&T
    • +
    +

  • +
+ +

Menu 10-5 +
Informacje o s±siednich komórkach + +

+ + + + + + +
+ + + + +
aaabbbcccddd
+aaabbbcccddd
+aaabbbcccddd
+  ef gh ij
+
+ + + + +
6CH C1 rx C2
+7CH C1 rx C2
+8CH C1 rx C2
+  6N 7N 8N
+
+ +

Znaczenie poszczególnych linijek: +

    +
  1. 6 s±siednia komórka
  2. +
  3. 7 s±siednia komórka
  4. +
  5. 8 s±siednia komórka
  6. +
  7. +e,f dotycz± 6 s±siedniej komórki, g,h 7 s±siedniej komórki, i,j +8 s±siedniej komórki
  8. +
+ +

Znaczenie literek jest takie jak w Menu 10-3 +(literka i oznacza to samo co e, za¶ j to samo co f) + +

Czasami telefon pokazuje, ¿e równocze¶nie C1 i +C2 dla danego kana³u s± równe -99 +- oznacza to prawdopodobnie, ¿e nie móg³by siê do niego zalogowaæ... + +

W Nokii 3110 ten test wygl±da jak Menu 10-6. + +

O ile siê dobrze orientujê, dopiero Nokia 3210 potrafi "obserwowaæ" 8 s±siednich +komórek (w starszych telefonach - np. Nokii 5110 - mo¿liwe jest wy¶wietlanie +parametrów maksymalnie 6 s±siednich komórek). + +

W Nokii 2160 ten test przyjmuje nastêpuj±cy wygl±d: + +

+ + + +
+ + + + +
+ROM SW
+EPROM SW
+Prod type 
+
+ +

+

    +
  • ROM SW = wersja oprogramowania ROM (np. V 65.08)
  • +
  • EPROM SW = wersja oprogramowania w EEPROM, (np. V 1.45)
  • +
  • Prod type = oznaczenie kodowe telefonu (np. NHC-4NE)
  • +
+ +

a tak w Nokii 6160: + +

+ + + +
+ + + + +
+S bandorde
+NC NP IRC
+RSCO RSLO
  +
+
+ +

+

    +
  • S = wska¼nik pokazuj±cy status u¿ywanej sieci:

    +

      +
    • H = hometype system
    • +
    • P = partner roamingowy
    • +
    • F = preferowany roaming
    • +
    • N = normalny roaming
    • +
    • X = brak zasiêgu
    • +
    • a, b, A, B, C, D, E, F = aktualna czêstotliwo¶æ podczas szukania kana³u kontrolnego +(szczegó³y przy opisie nastêpnego parametetru)
    • +
    +

  • + +
  • bandorde = kolejno¶æ szukania sieci:

    +

      +
    • a = a-side 800mhz cellular
    • +
    • b = b-side 800mhz cellular
    • +
    • A = A-block (30 mhz) 1900mhz PCS
    • +
    • B = B-block (30 mhz) 1900mhz PCS
    • +
    • C = C-block (30 mhz) 1900mhz PCS
    • +
    • D = D-block (10 mhz) narrowband 1900mhz PCS
    • +
    • E = E-block (10 mhz) narrowband 1900mhz PCS
    • +
    • F = F-block (10 mhz) narrowband 1900mhz PCS
    • +
    +

  • + +
  • NC = Number of Cellular = ilo¶æ mo¿liwych bloków do przeszukania w pasmach czêstotliwo¶ci u¿ywanych przez sieci komórkowe
  • +
  • NP = Number of PCS - ilo¶æ podbloków do przeszukania w pasmach czêstotliwo¶ci PCS
  • +
  • IRC = IR Control:

    +

      +
    • 1 = tylko systemy z domowym SID albo SOC s± akceptowane
    • +
    • 0 = ka¿dy system nie zaznaczony jako zabroniony jest akceptowany
    • +

  • + +
  • RSCO = Rescan Count - czas potwórnego szukania w hyperramkach
  • +
  • RSLO = Rescan Loop - definiuje, kiedy wszystkie pasma czêstotliwo¶ci +wymienione w parametrze "bandorde" s± przeszukiwane
  • + +
+ +

i w Nokii 6185/6188: + +

+ + + + +
+1YNC_OK_097B
+SYNC_FAI4CC1
+FOCC_WOR587C
+WORD_OK_3E65
+
+ +

Menu 10-6 +
Informacje o "preferowanych" i zabronionych sieciach w³o¿onej do telefonu +karty SIM. + +

+ + + + + + +
+ + + + +
aaabb  aaabb
+aaabb  aaabb
+aaabb  aaabb
+aaabb  aaabb
+
+ + + + +
LReg   1_For
+1_Pre  2_For
+2_Pre  3_For
+3_Pre  4_For
+
+ +

Znaczenie poszczególnych linijek: + +

+ + + + + +
sieæ ostatnia u¿ywana1 sieæ, do której mia³a zabroniony dostêp
1 "preferowana" sieæ2 sieæ, do której mia³a zabroniony dostêp
2 "preferowana" sieæ3 sieæ, do której mia³a zabroniony dostêp
3 "preferowana" sieæ4 sieæ, do której mia³a zabroniony dostêp
+ +

+

    +
  • +sieæ ostatnio u¿ywana - mo¿e to byæ sieæ, operatorowi której p³acisz rachunki +(je¿eli tak, to po jej rêcznym wybraniu +(w Nokii 5110 Menu 4-2-4) telefon sygnalizuje "Home network +selected" ("Wybrano w³asn± sieæ"))
  • + +
  • +"preferowana" sieæ - sieæ, do której karta SIM mog³a siê zalogowaæ (bêd±c +w jej zasiêgu) - np. w roamingu.
  • + +
  • +sieæ, do której mia³a zabroniony dostêp - by³a w jej zasiêgu, ale przez +brak odpowiednich umów nie mog³a z niej skorzystaæ...
  • +
+ +
    +
  • +

    aaa - MCC (Mobile Country Code) +- kod kraju, w którym dzia³a sieæ (260 dla Polski) w kodzie BCD

  • + +
  • +

    bb - MNC (Mobile Network Code) +- kod sieci (w Polsce: 01 dla Plusa, +02 dla Ery, 03 dla Idei) +w kodzie BCD. W przypadku, gdy u¿ywasz telefonu w systemie PCS 1900 (np. +Nokia 6190), numer ten mo¿e mieæ trzy cyfry.

  • +
+ +

Po co w ogóle s± zapisywane takie listy na karcie SIM ? Dziêki nim: + +

+

    +
  1. +telefon nie traci energii na logowanie siê do sieci, do których karta SIM +ma zabroniony dostêp (wystarczy to raz sprawdziæ, zapamiêtaæ i nie powtarzaæ +ca³ej procedury sprawdzania od nowa)
  2. + +
  3. +przy automatycznym wybieraniu sieci w pierwszej kolejno¶ci u¿ywa tych, +w których wcze¶niej dzia³a³ (czyli w³a¶nie "preferowanych").
  4. +
+ +

Listê sieci "preferowanych" i "zabronionych" +zapisuje telefon (Nokia umieszcza tam ostatnio wybrane sieci). +Sieci "preferowane" mog± byæ edytowane np. w Motorolach i Alcatelach (ale nie w Nokii). +Czasami robi to równie¿ operator (tzn. przed sprzedaniem karty zapisuje +na niej zarówno sieci "preferowane" jak i zabronione (wiadome jest np., +¿e z kart± Idei nie zalogujesz +do Plusa - mo¿na to ju¿ zapisaæ w +procesie programowania karty)). Obie te listy mo¿esz zmieniæ korzystaj±c +z dostêpnego w czeskiej wersji jêzykowej programu SIMedit (www.compelson.cz/simedit.htm)... + +

Pod adresem +http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html +mo¿esz natomiast znale¼æ spis parametrów MCC i MNC dla ró¿nych sieci. + +

+ + + + + + +
Na podstawie tego menu mo¿esz wiêc sprawdziæ (z dosyæ du¿ym prawdopodobieñstwem +- NIE ZAWSZE !), gdzie by³a ostatnio u¿ywana karta SIM (w kraju, za granic±) +albo gdzie je¼dzi³ jej posiadacz...
+ +

W Nokii 2160 ten test jest u¿ywany, gdy chcesz "wy³±czyæ" testy monitora. + +

Tak wygl±da w Nokii 6160: + +

+ + + +
+ + + + +
+PSC PSD   
+FSC FSD
+XSC XSD
  +
+
+ +

statystyki +inteligentnej bazy roamingowej +(IRDB = Intelligent Roaming Database): + +

Tutaj mo¿esz zobaczyæ ilo¶æ SOC i SID w ka¿dej kategorii. +Baza ma pamiêæ o pojemno¶ci 82 wpisów, które mog± byæ podzielone +pomiêdzy nastêpuj±ce kategorie: + +

+PSC = ilo¶æ partnerów SOC
+PSD = ilo¶æ partnerów SID
+FSC = ilo¶æ preferowanych SOC
+FSD = ilo¶æ preferowanych SID
+XSC = ilo¶æ zabronionych SOC
+XSD = ilo¶æ zabronionych SID
+ +

Partner SOC/SID = traktowany jak sieæ macierzysta +
Preferowany SOC/SID = je¿eli s± dostêpne neutralne (niezdefiniowane) systemy, +preferowany bardziej ni¿ one +
Zabronione SOC/SID = odrzucane przez telefon + +

i w Nokii 6185/6188: + +

+ + + +
CDMA
+ + + + +
+SID NID
+BASE ID
+P_REV
+MIN_P_REV    +
+
AMPS
+ + + + +
+0ORD_COR0CE3
+WORD_FAI0E76
+CTRL_FIL787D
+SAT_V_OK0004
+
+

CDMA
+
    +
  • SID - System ID:

    +

      +
    • [17500] - Clearnet PCS
    • +
    • [16422] - BCTel Mobility
    • +
    • [16xxx parzysty numer] - Cantel AT&T
    • +
    • [00000]: Second SID assignment
    • +
    +
+

Linie 3 i 4 dotycz± prawdopodobnie specyfikacji CDMA: [ANSI] dla 1900 MHz, [TSB74] dla 800 MHz CDMA +

+ +

Menu 10-7 +
Informacje o aktualnie u¿ywanej (ostatnio monitorowanej) komórce + +

+ + + + + + +
+ + + + +
E A H C I BR
+a b c d e fg
+ECSC 2Ter MB
+h    i    j
+
+ + + + +
Serving Cell
+system info
+bits
+
+ +

+

    +
  • a - 1, gdy mo¿liwe jest po³±czenie z telefonem alarmowym (chyba 112)
  • +
  • b - 1, gdy mo¿liwe jest IMSI attach oraz IMSI detach
  • +
  • c - 1, gdy komórka mo¿e u¿ywaæ kana³ów HR
  • +
  • d - 1, gdy nadawane s± warto¶ci C2
  • +
  • e - 1, gdy informacje systemowe 7 i 8 (system information 7 and 8) s± nadawane
  • +
  • f - 1, je¿eli komórka obs³uguje nadawanie komórkowe (kana³ CBCH)
  • +
  • g - 1, gdy mo¿liwe jest powtórne nawi±zywanie transmisji (cell re-establishment)
  • +
+ +

Tylko w telefonach dualnych (GSM 900/1800 - np. Nokia 6150 czy 3210) pojawiaj± +siê dwie ostatnie linijki: + +

+

    +
  • +h - w trybie czuwania pojawia siê 1, gdy obs³ugiwane jest wysy³anie ECSC +(Early Classmark). W czasie rozmowy pojawia siê tutaj x.
  • + +
  • +i - w trybie czuwania pojawia siê 1, je¿eli obs³ugiwane s± komunikaty 2-Ter. +W czasie rozmowy pojawia siê tutaj x.
  • + +
  • +j - tutaj znajdziesz informacjê (je¿eli jest to obs³ugiwane), jakie komórki +z obu czêstotliwo¶ci (900 i 1800 MHz) s± pokazywane (warto¶æ parametru +MULTIBAND_REPORTING). Opisy ze specyfikacji Phase2+ ETSI GSM 05.08 wersja 5.4.0, +sekcja 8.4.3 "Additional cell reporting requirements for multi band MS": + +

    +

      +
    • +0 - pokazywane jest 6 najmocniejszych komórek (ze znanym i dozwolonym do +u¿ycia NCC z BSIC) niezale¿nie +od u¿ywanej przez nie pasma czêstotliwo¶ci (900 albo 1800 MHz).
    • + +
    • +1 - pokazywana jest najmocniejsza komórka (ze znanym i dozwolonym do u¿ycia +NCC +z BSIC) w ka¿dym pasmie czêstotliwo¶ci +na li¶cie BA, wy³±czaj±c pasmo czêstotliwo¶ci u¿ywanej komórki. Pozosta³e +pozycje powinny byæ u¿yte do pokazywania komórek w pasmie u¿ywanej komórki. +Je¿eli s± nadal wolne pozycje, znajd± siê tam nastêpne najmocniejsze i +rozpoznane komórki z innych pasm (niezale¿nie od u¿ytego przez nie pasma).
    • + +
    • +2 - podobnie jak przy 1, ale na pocz±tku s± pokazywane dwie najmocniejsze +komórki (ze znanym i dozwolonym do u¿ycia NCC z BSIC) +w ka¿dym pasmie...
    • + +
    • +3 - pocz±tkowo pokazywane s± trzy najmocniejsze komórki...
    • +
    +
  • + +
+ +

Je¿eli po w³±czeniu telefon nie by³ zalogowany do ¿adnej sieci, pokazywane +s± tutaj pewne warto¶ci domy¶lne. + +

W Nokii 6160 ten test jest inny: + +

+ + + + +
+User
+interface 
+display
  +
+ +

a taki jest w Nokii 6185/6188: + +

+ + + +
CDMA
+ + + + +
+CSST         
+DATE
+TIME
  +
+
AMPS
+ + + + +
+1AT_V_FA0000
+FVC_S_FA0000
+WFLG_INT7046
+NORMALRXFE25
+
+

CDMA

+

    +
  • CSST - Cellular state: [IDLE], [CONVE], [PLIOS], [TIME], [SYNC], [RELE], [PAGE], [TRFIN], [W_OR]
  • +
  • DATE - data sieci CDMA
  • +
  • TIME - czas sieci CDMA
  • +
+
+ + +Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net3.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net3.htm new file mode 100644 index 0000000..40c6584 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net3.htm @@ -0,0 +1,1778 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 4/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (4/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

Menu 10-8 + +

+ + + +
CDMA
+ + + + +
+TADD TDROP
+TCOMP TTDROP
+WW1 WW2 WW3
  +
+
AMPS
+ + + + +
+1STBY_RX7244
+XNRML_RX006C
+X_N_RX_O004C
+X_N_RX_F0020
+
+

CDMA

+

    +
  • TADD - threshold to add a new active PN (raw value ex: 28 = Ec/Io at -14 dB), [TDROP] : threshold to drop an active PN (raw value ex: 32 = Ec/Io at -16 dB)
  • +
  • TCOMP - an other threshold to add an active PN when a candidate PN becomes stronger than an active PN
  • +
  • TTROP - timer to drop a PN when power of this PN goes below TDROP
  • +
  • WW1 - value of the seach window for the active PN
  • +
  • WW2 - value of the seach window for the neighbour PN,[WW3]: value of the seach window for the remaining PN.
  • +
+
+ +
Menu 10-9 + +

+ + + +
CDMA
+ + + + +
+006 330 270
+047 062 062
+342 102 030
+062 062 062
+
+
AMPS
+ + + + +
+1PT_1_OK724E
+RPT_1_FA0042
+TIME__2_0000
+MER2HIGH0002
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and EC/SO (Energy per chip per noise). +An EC/SO of 062 likely means not really usable? lower numbers are better +strengths). See Menu 10-2 for PN offset information. +

+ +
Menu 10-10 +
Informacje sieciowe (dotycz± aktualnie u¿ywanej albo ostatnio monitorowanej +sieci) + +

+ + + + + + +
+ + + + +
TMSIaaaaaaaa
+T321:bbb/ccc
+PRP:d  ee ff
+ ggggg  hhh 
+
+ + + + +
TMSI(hex)
+T3212ctr/tim
+PaRP DSF AGC
+  AFC   Ch
+
+ +

+

    +
  • +aaaaaaaa - TMSI: +numer nadawany ka¿demu telefonowi dzia³aj±cemu w sieci (mo¿e to byæ wykonywane +np. po w³±czeniu, rozmowie, wys³aniu (odebraniu) SMSa, +zg³oszeniu ¿±dania, PLU). Warto¶æ z karty +SIM (po otrzymaniu nowego numeru z sieci jest on na niej zapisywany). Podawana +szesnastkowo. Je¿eli przyznanie tego numeru nie powiedzie siê (np. wy³±czony +zosta³ nadajnik w Menu 10-45 albo karta SIM +w telefonie nie jest aktywna), +pokazuje siê tutaj 'xxxxxxxx', a telefon wy¶wietla 'Poza zasiêgiem sieci' +- 'No coverage network' (gdy próbujesz wykonaæ po³±czenie).
  • + +
  • +bbb - warto¶æ tzw. licznika T3212: telefon co jaki¶ czas informuje sieæ, +gdzie siê znajduje (wykonuje tzw. PLU). +Liczba bbb oznacza czas, jaki min±³ od ostatniej aktualizacji i przyjmuje +zakres od 0 do warto¶ci liczby ccc (gdzie 1 oznacza 6 minut, 2 - 2 * 6min += 12min, itd.). Licznik ten jest równie¿ zerowany po zakoñczeniu rozmowy, +otrzymaniu (wys³aniu) SMSa, +zg³aszaniu ¿±dania do sieci - np. dotycz±cego przekierowywañ rozmów (jednak¿e +wtedy telefon nie zmienia warto¶ci liczników z Menu +10-64). Warto¶æ nie zmienia siê (jest równa ca³y czas 0) przy nieaktywnej karcie +SIM.
  • + +
  • +ccc - maksymalna warto¶æ tzw. licznika T3212: przedzia³ czasu, co jaki +telefon wysy³a informacjê o swoim po³o¿eniu - wykonuje tzw. PLU +(zakres od 1 do 240, gdzie 1 oznacza 6 min pomiêdzy aktualizacjami, 240 +oznacza 24 godziny (240*6min)). Liczbê tê otrzymuje telefon z sieci (je¿eli +jest równa 0, oznacza to, ¿e sieæ nie pobiera informacji o po³o¿eniu) - +np. dla Ery i Plusa +jest równa 30 (3h), dla Idei 2h. Wy¶wietlana +normalnie tak¿e, gdy karta SIM nie jest aktywna.
  • + +
  • +d - Paging Repeat Period, czasami okre¶lany jako DRX +(Dincontinuous Receive): odstêp czasu, z jakim telefon +musi w³±czaæ odbiornik, ¿eby sprawdziæ, czy kto¶ do nas dzwoni (zakres +od 2 do 9 - im wiêkszy, tym jest to robione rzadziej i telefon zu¿ywa mniej +energii: PRP=2 oznacza ok. 0.95 s, a PRP=9 okres 4.25 s.). +Z tym parametrem wi±¿e siê jedna ciekawostka: czasy czuwania +i pracy baterii s± najczê¶ciej podawane przy warto¶ci 9 tego parametru. +
  • + +
  • +ee - DSF (Downlink Signalling Failure). Je¿eli jest +ujemna, pokazywane jest 0. Maksymalna warto¶æ to 45. Kiedy telefon u¿ywa +kana³u TCH, pokazywane jest xx.
  • + +
  • +ff - AGC (Automatic Gain Control) - automatyczna regulacja +wzmocnienia toru odbiornika telefonu. Im mocniejszy jest sygna³ z BTSa, +tym warto¶æ ta maleje (pokazuj±c jak odbiornik telefonu zmniejsza swoje +wzmocnienie, by unikn±æ przesterowania). Jest ona poprawnie podawana tylko +w czasie u¿ywania kana³u TCH/SDCCH +(np. rozmowy) i przyjmuje warto¶ci z zakresu 0 - 93 (dB ?).
  • + +
  • +ggggg - w angielskich opisach jest to "VCTCXO AFC DAC control" przyjmuj±ca +warto¶ci z zakresu -1024 - 1023. W pomocy jest opisana jako AFC (Automatic +Frequency +Control) +- automatyczne dostrajanie odbiornika telefonu do czêstotliwo¶ci nadawanego +przez BTS sygna³u. Im bardziej ta warto¶æ +odbiega od 0, tym wiêcej odbiornik telefonu musi korygowaæ swoj± czêstotliwo¶æ +(zale¿y ona od kana³u u¿ywanego do komunikacji z BTSem +- patrz Menu 10-1), by "dopasowaæ" +siê do BTSa.
  • + +
  • +hhh - CH (channel): numer kana³u u¿ywanego do komunikacji z komórk± +(podany dziesiêtnie)
  • +
+ +

W Nokii 3110 test ten wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
TMSI:aaaaaaaa
+T3212:bbb/ccc
+PRP:d  ee ff
+w gggg  hhh z
+
+ + + + +
TMSI(hex)
+T3212 ctr/tim
+PagRP DSF AGC
+S AFC   CH  B
+
+ +

Je¿eli po w³±czeniu telefon nie by³ zalogowany do ¿adnej sieci, pokazywane +s± tutaj pewne warto¶ci domy¶lne (z wyj±tkiem TMSI). +

Dla ciekawych: niektóre z tutaj pokazywanych danych znajdziesz równie¿ +w niektórych programach serwisowych (np. w WinTesli nale¿y wybraæ z menu +g³ównego "Testing", a pó¼niej "RF Information"). + +

+ + + + + + +
Informacjê o tym, ile razy telefon wysy³a³ informacjê o swoim po³o¿eniu, +znajdziesz w Menu 10-64. Je¿eli +np. wysy³a³e¶(a¶) ostatnio SMSa, +mo¿esz w przybli¿eniu okre¶liæ (z dok³adno¶ci± do 6 min), kiedy to nast±pi³o +(o ile by³o to nie d³u¿ej ni¿ 3h (dla Ery +i Plusa)) - sprawd¼ warto¶æ parametru +bbb.
+ +

A tak wygl±da ten test w Nokii 6185/6188: + +

+ + + +
CDMA
+ + + + +
+414 084 222
+062 060 062
+420 366 252
+062 062 062 +
+
+
AMPS
+ + + + +
+1X_XSTBY000D
+SYNC_LOS0031
+DEC_SAME0000
+VOTED_BT0000
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and signal strengths. +

+ +

Menu 10-11 +
Identyfikacja aktualnie u¿ywanej (ostatnio monitorowanej) sieci + +

+ + + + + + +
+ + + + +
CC:aaa NCbbb
+  LAC:ccccc
+  CH : deee
+  CID:fffff
+
+ + + + +
 MCC    MNC
+LocAreaCode 
+ServChannel
+   CellId
+
+ +

+

    +
  • +aaa - MCC (Mobile Country Code): kod kraju, w którym +dzia³a sieæ (260 dla Polski). Podawany dziesi±tkowo.
  • + +
  • +bbb - MNC (Mobile Network Code): kod sieci (w Polsce: +01 dla Plusa, 02 dla Ery, +03 dla Idei). W telefonie w +systemie PCS 1900 (np. Nokia 6190) numer ten mo¿e mieæ trzy cyfry. Podawany +dziesi±tkowo.
  • + +
  • +ccccc - LAC (Location Area Code): kod regionu (dziesi±tkowy +lub szesnastkowy), w którym dzia³a komórka. Wielko¶æ obszaru, na którym +nie zmienia siê LAC komórek, zale¿y od sieci. Po zmianie LAC telefon wykonuje +Location +Update.
  • + +
  • +d - H, je¿eli w³±czone jest skakanie po czêstotliwo¶ciach (w przeciwnym +razie pole jest puste). Informacjê o tym telefon podaje równie¿ w Menu +10-1 i Menu 10-12.
  • + +
  • +eee - CH (channel): numer kana³u u¿ywanego do komunikacji z komórk± +(dziesiêtny)
  • + +
  • +fffff - CID (Cell Identifier): numer u¿ywanej komórki (ka¿da +ma swój niepowtarzalny w danym regionie) podawany dziesi±tkowo lub szesnastkowo +
  • +
+ +

Format LAC i CID (tzn. czy s± podawane dziesi±tkowo czy szesnastkowo) zale¿y +od modelu Twojego telefonu i jego oprogramowania (przyk³adowo: Nokia 3210 podaje +je dziesiêtnie, Nokia 5110 z nowszym oprogramowaniem równie¿, natomiast ta sama +Nokia 5110 z oprogramowaniem 4.51 (i starszymi jego wersjami) oraz starsze modele +(np. Nokia 3110) stosuj± ju¿ format szesnastkowy). + +

Telefony GSM identyfikuj± sieæ na podstawie numerów MCC i MNC (ich spis +jest np. pod adresem +http://kbs.cs.tu-berlin.de/~jutta/gsm/gsm-list.html). +Napisy 'ERA GSM', 'Plus +GSM' czy 'Idea' pokazywane +na wy¶wietlaczu s± zapisane w pamiêci telefonu (tzn. to jego producent decyduje, +¿e bêd± takie, a nie inne - sieæ komórkowa nie wysy³a ¿adnej nazwy, tylko te dwa numery). +W momencie, gdy zaczyna dzia³aæ nowa sieæ, +uaktualniane jest jego oprogramowanie (dopiero po tym zabiegu mo¿e on wy¶wietlaæ +jej nazwê literow±). Starsze telefony w rodzaju Nokii 2110i +(albo nowsze bez zaktualizowanego oprogramowania) +wy¶wietlaj± natomiast napisy w stylu PL-03 (rozpoznaj±, ¿e MCC=260 odpowiada Polsce, +która z kolei ma oznaczenie miêdzynarodowe PL). +Jedna nazwa literowa mo¿e byæ równie¿ zmieniona +przy pomocy odpowiednich programów serwisowych (np. WinTesli - +z menu g³ównego nale¿y wybraæ "Dealer" i "Operator Settings"). + +

Przy opisie BTSów znajdziesz adresy stron +zawieraj±cych np. ich listy z podanymi lokalizacjami, LAC i CID (dla polskich +sieci oczywi¶cie). + +

Je¿eli po w³±czeniu telefon nie by³ zalogowany do ¿adnej sieci, pokazywane +s± tutaj pewne warto¶ci domy¶lne. + +

W Nokii 3110 menu to wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
CC:aaa NC:bbb
+  LAC:cccc
+  CH :deee
+w CID:ffff  z
+
+ + + + +
 MCC     MNC
+ LocAreaCode
+ ServChannel
+S CellId    B
+
+ +

A takie jest w Nokii 6185/6188: + +

+ + + +
CDMA
+ + + + +
+162 054    
+062 062
+186 084
+062 051 +
+
+
AMPS
+ + + + +
+11_BETTR0000
+SYNC_SAM0000
+MSG__BTR0000
+SFLG_BTR0000
+
+

CDMA

+Tracked PN Offsets (lines 1,3) and signal strengths (only, when phone is in CONV state) +

+ +

Menu 10-12 +
Parametry aktualnie u¿ywanej (ostatnio monitorowanej) sieci + +

+ + + + + + +
+ + + + +
CIPHER :aaa 
+HOPPING:bbb
+DTX    :ccc
+IMSI   :ddd
+
+ + + + +
CipherValue
+HoppingValue
+DTXValue
+IMSIAttach
+
+ +

+

    +
  • +aaa: + +

    +

      +
    • +OFF: telefon nie nadaje
    • + +
    • +A51: telefon nadaje, dane s± kodowane algorytmem A5/1 (odmiana trudniejsza +do z³amania i pods³uchania)
    • + +
    • +A52: telefon nadaje, dane s± kodowane algorytmem A5/2 (odmiana zaprojektowana +pierwotnie dla "niepewnych" krajów (np. Iraku). Chodzi³o o to, aby kraje +zachodnie (np. USA) mog³y pods³uchiwaæ rozmowy prowadzone w sieciach ewentualnych +(przysz³ych) wrogów. O ile siê jednak orientujê, nawet ta s³absza odmiana +jest ci±gle bezpieczna (niez³amana) - mogê siê jednak myliæ !
    • +
    +

    +

  • + +
  • +bbb - czy jest u¿ywane (ON)/wy³±czone (OFF) skakanie +po czêstotliwo¶ciach
  • + +
  • +ccc - czy jest u¿ywane (ON) czy nie (OFF) DTX przez telefon
  • + +
  • +ddd - czy jest dozwolone (ON) IMSI attach
  • +
+ +

Warto¶ci w tym menu s± uaktualniane tylko, gdy telefon korzysta z kana³u +TCH. + +

Je¿eli po w³±czeniu telefon nie by³ zalogowany do ¿adnej sieci, pokazywane +s± tutaj pewne warto¶ci domy¶lne. + +

Wiêcej o algorytmach A5/1 i A5/2 mo¿esz poczytaæ np. na stronie www.scard.org/gsm/. + +

W Nokii 3110 test ten wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
CIPHER :aaa
+HOPPING:bbb
+DTX    :ccc
+w IMSI :ddd z
+
+ + + + +
CipheringValu
+HoppingValue
+DTXValue
+S IMSIAttachB
+
+ +

W Nokii 6185/6188 w trybie AMPS wygl±da inaczej: + +

+ + + + +
+1IN_FAIL0044
+DYN_FAIL01C7
+MIN2_FAI0045
+DYN2_FAI01CB
+
+ +

Menu 10-13 +
Informacje o DTX +w aktualnie u¿ywanej (ostatnio monitorowanej) sieci + +

+ + + + + + +
+ + + + +
aaaaaaaaaa 
+DTX(DEF):bbb
+DTX(BS) :ccc
+
+ + + + +
DTXMode
+DefaulDTXSta
+DTXValFromBS
+
+ +

+

    +
  • +aaaaaaaaaaaa: informacja, czy telefon u¿ywa DTX: + +

    +

      +
    • DTX:ON - tak, u¿ywa
    • +
    • DTX:OFF - nie u¿ywa
    • +
    • DTX:DEF - telefon u¿ywa albo nie (zale¿y od domy¶lnego ustawienia - parametru bbb)
    • +
    • +NOTALLOWED - telefon nie mo¿e "samodzielnie" decydowaæ, czy ma u¿ywaæ DTX, +czy nie (BTS na to nie pozwala)
    • +
    +

    +

  • + +
  • +bbb - domy¶lne ustawienie DTX. Warto¶ci +ON albo OFF.
  • + +
  • +ccc - warto¶æ DTX z BTS (na uplinku - kanale +s³u¿±cym do komunikacji w kierunku telefon-BTS): + +

    +

      +
    • +MAY - BTS pozwala "decydowaæ" telefonowi, +czy ma korzystaæ z DTX
    • + +
    • +USE - BTS wymusza u¿ywanie DTX
    • + +
    • +NOT - BTS nie pozwala korzystaæ z DTX
    • +
    +

    +

  • + +
+ +

Je¿eli po w³±czeniu telefon nie by³ zalogowany do ¿adnej sieci, pokazywane +s± tutaj pewne warto¶ci domy¶lne. + +

+ + + + + + +
Je¿eli BTS na to pozwala (tzn. je¿eli +ostatni parametr w tym menu przyjmuje warto¶æ MAY), to przez bezpo¶rednie +wej¶cie do tego menu mo¿esz ustawiaæ, czy telefon ma korzystaæ (czy nie) +z DTX.
+ +

Menu 10-14 +
Przez bezpo¶rednie wej¶cie do tego menu, mo¿esz zmieniæ warto¶æ aa +z 01 (warto¶ci domy¶lnej) na 00 (albo odwrotnie). + +

+ + + + + + +
+ + + + +
 SCREENING  
+ INDICATOR
+   IS aa
+
+ + + + +
Use menu to 
+  change
+ Screening
+ indicator
+
+ +

Menu 10-15 +
Ten test jest dostêpny w Nokii 5190 (cyfrowym telefonie GSM, +który po w³o¿eniu odpowiedniej przystawki mo¿e dzia³aæ równie¿ w analogowym systemie +AMPS). +Niestety testowany telefon nie mia³ jej (jest wk³adana pomiêdzy "w³a¶ciw±" s³uchawkê +i bateriê) i st±d komunikat o niedostêpno¶ci tego testu... + +

+ + + + + + +
+ + + + +
+AMPS display
+not
+available
+
+
+ + + + +
+CH RxL TxPwr
+MdSt SAT DCC
+ST   TxA RxA
+  CS STATE +
+
+ +

Menu 10-17 +
Pozwala w³±czyæ testowanie przez telefon jednego konkretnego kana³u +u¿ywanego do kontaktu z komórk± (telefon nie szuka wtedy kana³u o najsilniejszym +sygnale, tylko korzysta z podanego przez Ciebie: dla GSM 900 poprawne s± +kana³y 1-124, dla GSM 1800 512-885). Ka¿da sieæ GSM ma przyporz±dkowane +dla siebie kana³y z podanych zakresów (tzn. Plus +nie mo¿e korzystaæ z kana³ów Ery i +odwrotnie). Poni¿ej podajê podzia³ dla ró¿nych sieci: + +

+

+ + + + + + + + + +
GSM 900
GSM 1800
TIM (222-01)
8-64 (16 najwa¿niejszych miast) albo 8-50 (poza nimi)
736-760
Omnitel (222-10)
66-118 (16 najwa¿niejszych miast) albo 77-118 (poza nimi)
861-885
Wind (222-88)
52-75 (poza 16 najwa¿niejszymi miastami)
761-810
Blu (222-??)
-
811-860
Plus GSM (260-01)
1-14 i 37-67 (37 i 67 do testów)
750 - 760, 852 - 884 ?
Era GSM (260-02)
15-36 i 68-90 (15 i 36 do testów)
736 - 748, 811 - 844 ?
Idea (260-03)
91 - 122 (docelowo)
763 - 810
+
+ +

Mo¿esz tu podawaæ kana³y dowolnej sieci (je¿eli masz do niej zabroniony +dostêp, wy¶wietlane bêd± wprawdzie jej parametry, ale nie bêdzie mo¿liwe +wykonywanie po³±czeñ (z wyj±tkiem telefonów alarmowych), itp.) Po w³±czeniu +testu nie bêdzie mo¿liwe przeprowadzanie handoverów. + +

Aby w³±czyæ test, nale¿y (czasami ta procedura nie dzia³a - pomaga np. +wy³±czenie i w³±czenie telefonu; nie wiem, dlaczego tak siê dzieje): + +

+

    +
  • +zapisaæ (zmieniæ) ¿±dany kana³ na pozycji 33 w ksi±¿ce telefonicznej na +karcie SIM (nie w pamiêci telefonu !) +- je¿eli wpiszesz tam 0, test nie bêdzie siê w³±cza³ +!. Nie jest to jednak konieczne (o ile numer ten by³ tam wcze¶niej +zapisany - sprawdzisz to np. kodem 33#).
  • + +
  • +przej¶æ do Menu 10-17
  • + +
  • +jeszcze raz wej¶æ bezpo¶rednio do Menu 10-17
  • + +
  • +wy³±czyæ i w³±czyæ telefon
  • +
+ +

Je¿eli chcesz wy³±czyæ test: + +

+

    +
  • +wejd¼ bezpo¶rednio do Menu 10-17
  • + +
  • +wy³±cz i w³±cz telefon (czasami nie jest to konieczne - telefon +powinien wy³±czyæ test, gdy utraci sygna³ na danym kanale; lepiej +jednak jest to zrobiæ, aby unikn±æ jakichkolwiek problemów)
  • +
+ +

Ciekawe wyniki uzyskiwa³em, gdy (zgadnij, dlaczego ?): + +

+

    +
  • +telefon mia³ w³±czony test
  • + +
  • +w Menu 10-19 zmienia³em ustawienie na REVERSE
  • + +
  • +wy³±cza³em test, ale nie telefon (tzn. w celu wy³±czenia testu tylko raz +wchodzi³em bezpo¶rednio do Menu 10-17)
  • +
+ +

W takich wypadkach telefon potrafi³ "skakaæ" po kana³ach i monitorowaæ +kana³y ró¿nych sieci (nie tylko mojej) - mog³em np. obejrzeæ LAC, CID u¿ywanych +komórek. Co wiêcej, nie potrafi³ siê zalogowaæ do mojej macierzystej sieci +(chocia¿ wy¶wietla³ dane jej kana³u). Kilka razy uda³o mi siê uzyskaæ komunikat +"Insert SIM card" (albo "SIM card rejected" - "Karta SIM odrzucona") - +ten efekt wynika³ prawdopodobnie z b³êdu w oprogramowaniu. Po wy³±czeniu +i w³±czeniu telefonu wszystko wraca³o do normy. + +

+ + + + + + +
Opisany przeze mnie efekt mo¿esz wykorzystaæ do szybszego roz³adowania +akumulatora (jednak¿e wtedy Twój telefon nie bêdzie dostêpny w sieci). + +

Je¿eli chcesz sprawdzaæ dane innej ni¿ Twoja sieæ, mo¿esz te¿ u¿yæ innej +metody: + +

    +
  1. przejd¼ do testu, który pozwoli Ci odczytaæ poszukiwane informacje +dla interesuj±cej Ciê sieci
  2. +
  3. przejd¼ do rêcznego wyboru sieci (np. Menu 4-2-4-2 w Nokii 5110)
  4. +
  5. wybierz sieæ, której dane chcesz obejrzeæ
  6. +
  7. poczekaj kilka sekund (wymagany jest odpowiedni czas, aby telefon zacz±³ siê +logowaæ do danej sieci) i naci¶nij "Quit" (a NIE klawisz (c)) albo poczekaj, +a¿ telefon wy¶wietli jaki¶ komunikat (np. ¿e nie móg³ siê zalogowaæ).
  8. +
  9. naci¶nij szybko klawisz (c), aby wyj¶æ z menu telefonu
  10. +
+ +

Przez kilka sekund telefon bêdzie pokazywa³ dane interesuj±cej Ciê sieci... + +

+ +

S³ysza³em o przypadkach, i¿ test ten w³±cza³ siê samoistnie po zaniku +sygna³u sieci. Ja siê z tym nie spotka³em. Je¿eli jednak zdarzy³o (zdarza) +siê to Tobie, wpisz 0 na pozycji 33 w ksi±¿ce telefonicznej. I ju¿... + +

+ + + + + + +
Poniewa¿ Nokie serii 51xx/61xx nie posiadaj± mo¿liwo¶ci "wymuszenia" +zapisywania numeru pod okre¶lon± pozycj± w ksi±¿ce telefonicznej, poleci³bym: +
    +
  1. +sprawdzenie, czy mamy ju¿ zapisany jaki¶ numer pod t± pozycj± (wpisujemy +33#)
  2. + +
  3. +je¿eli telefon wy¶wietli³ 'B³êdna pozycja' ('Invalid location'), wpisujemy +tyle telefonów do ksi±¿ki, a¿ nie zobaczymy tego komunikatu (powtarzaj±c +oczywi¶cie sprawdzanie z punktu 1)
  4. + +
  5. +po wy¶wietleniu siê numeru musimy doj¶æ do tego, jaka jest nazwa, pod któr± +jest on zapisany w ksi±¿ce telefonicznej. Mo¿na to zrobiæ na dwa sposoby: + +

    +

      +
    1. +po prostu przypomnieæ sobie (albo przejrzeæ ca³± ksi±¿kê telefoniczn±)
    2. + +
    3. +wy³±czyæ nadajnik telefonu w Menu 10-45 +i zadzwoniæ pod ten numer (telefon przy wybieraniu numeru wy¶wietli nazwê +przypisan± do numeru - znajdziesz j± równie¿ na li¶cie ostatnio wybieranych +po³±czeñ)
    4. +
    +

    +

  6. + +
  7. +edytujemy ksi±¿kê telefoniczn± (ten numer) - mo¿emy np. zmieniæ nazwê albo +numer (kana³u)
  8. + +
  9. +gdy telefon spyta siê, czy zast±piæ stary numer nowym czy zapisaæ pod inn± +pozycj±, wybieramy to pierwsze
  10. +
+ +

Do zapisania numeru pod okre¶lon± pozycj± mo¿na u¿yæ równie¿ innych modeli +Nokii (np. 2110), telefonów innych producentów albo odpowiedniego oprogramowania. +Przyk³adowo: w programie Nokia Cellular Data Suite +nale¿y wyeksportowaæ listê numerów do pliku, otworzyæ go w dowolnym edytorze, +zmieniæ i z powrotem wgraæ do telefonu... +

+ +

+

+ + + + + +
+ + + + +
+
  BTS TEST  
+    aaa
+
+ + + + +
Use menu to 
+toggle BTS
+test ON/OFF
+
+ +

+

    +
  • +aaa - przyjmuje warto¶ci "ON" albo "OFF"
  • +
+ +

+ + + + + + +
Wbrew pozorom (wszak telefon automatycznie szuka najlepszego dla nas +sygna³u) w³±czenie tego testu mo¿e siê przydaæ, gdy: + +

+

    +
  • +chcesz wymusiæ korzystanie z konkretnej komórki (np. chcesz sprawdziæ, +czy mo¿liwe jest skorzystanie z komórki znajduj±cej siê 20 km od Ciebie)
  • + +
  • +nie chcesz dzia³aæ w roamingu (podwy¿sza to przecie¿ op³aty) np. przy granicy +kraju (telefon uzna³, ¿e sygna³ sieci s±siada jest mocniejszy i z niego +korzysta) - prze³±czasz na kana³ u¿ywany przez Twoj± macierzyst± sieæ i +ju¿...
  • + +
  • +druga dostêpna sieæ ma do¶æ silny sygna³ (np. -85 dBm), a Twoja macierzysta +sieæ z kolei bardzo s³aby (np. -100 dBm) - bez u¿ycia kana³u Twojej sieci +telefon mo¿e mieæ du¿e k³opoty z zalogowaniem siê do niej
  • + +
  • +chcesz monitorowaæ stan kana³u, którego sygna³ jest bardzo s³aby - otrzymywa³em +informacje, ¿e najni¿sza zmierzona w ten sposób warto¶æ wynosi³a -118 dBm.
  • +
+
+ +

W Nokii 3210 obs³uga tego testu jest najprawdopodobniej niedopracowana - wielu +u¿ytkowników tego telefonu ma problemy z jego w³±czaniem i wy³±czaniem. + +

Menu 10-18 + +

+ + + + + + +
To menu pozwala w³±czyæ na sta³e pod¶wietlanie wy¶wietlacza i klawiszy +(LIGHTS ON). Jest to ¶wietny sposób na szybsze roz³adowywanie baterii. +W ten sposób firma Nokia ufundowa³a +nam równie¿ lampkê - mo¿esz z jej pomoc± np. sprawdziæ rozk³ad jazdy, po³o¿enie +na mapie, byæ lepiej widoczny na drodze :-), itd. Jest tylko jeden warunek: +musisz mieæ w³±czony jaki¶ test w monitorze sieci. + +

Je¿eli je w³±czymy i wy³±czymy, ¶wiate³ko wy³±czy siê na sta³e (nie +bêdzie reagowaæ na klawisze) na kilka minut (dobre do gier - oszczêdza +akumulator)... + +

¦wiate³ko mo¿esz te¿ w³±czyæ na sta³e, je¿eli pod³±czysz zestaw samochowy +(albo go zasymulujesz - patrz Menu 10-75) +i opcja "Lights" (Menu 2-5 w Nokii 5110) bêdzie ustawiona na "All". +I to BEZ w³±czonego monitora sieci (ani tym bardziej ¿adnego testu) !

+ +

Zmiana przez bezpo¶rednie wej¶cie do tego menu. + +

+

+ + + + + +
+ + + + +
+
   LIGHTS   
+    aaa
+
+ + + + +
Use menu to 
+  toggle
+  lights
+  ON/OFF
+
+ +

+

    +
  • +aaa - przyjmuje warto¶ci "ON" albo "OFF" (domy¶lnie)
  • +
+

+ +Menu 10-19 + +

+ + + + + + +
Ka¿dy operator przed oddaniem do normalnego u¿ytku (po naprawie, wybudowaniu...) +stacji bazowej (BTS) testuje wchodz±ce w +jej komórki. Normalny telefon GSM odczytuje tê informacjê i nie próbuje +z nich skorzystaæ. Korzystaj±c z tego menu mo¿esz jednak ustawiæ swój tak, +¿e bêdzie to robi³ (nale¿y ustawiæ na DISCARD) - mo¿esz w ten sposób "powiêkszyæ" +zasiêg swojej sieci (np. obecnie jest to jedyna metoda pozwalaj±ca korzystaæ +z budowanej (testowanej) Idei +pracuj±cej w pa¶mie 900 MHz). + +

Je¿eli chcesz, aby telefon próbowa³ korzystaæ tylko z testowanych komórek, +ustawiasz to menu na REVERSE (jezeli nie ma takich w okolicy, mo¿esz spowodowaæ, +¿e nikt nie bêdzie móg³ zadzwoniæ z Twojego telefonu ani dodzwoniæ siê +do Ciebie - dobre, jak chcesz zablokowaæ telefon ?). + +

Przy ustawieniu na ACCEPTED telefon u¿ywa tylko oddanych do u¿ytku komórek +(zachowuje siê jak ka¿dy inny).

+ +

Informacja o statusie komórki nadawana jest w kanale BCCH +jako warto¶æ parametru CELL_BARRED. Zmiana ustawienia przez bezpo¶rednie +wej¶cie do tego menu (je¿eli jednak wcze¶niej w³±czy³e¶(a¶) test w Menu +10-17, u¿ywana komórka mo¿e mieæ inny status ni¿ tutaj wybrany +(np. tutaj wybra³e¶(a¶) tylko komórki testowane, a telefon korzysta z normalnej)). + +

Po zmianie ustawienia telefon je uwzglêdnia przy nastêpnych pomiarach +jako¶ci sygna³u (¿eby mu pomóc, mo¿esz spróbowaæ wykonaæ po³±czenie, zmusiæ +go do szukania sieci (ustawiæ jej rêczny wybór) albo po prostu przez d³u¿szy +czas trzymaæ jego antenê (np. palcami)). + +

Czasami telefon mo¿e nie znajdowaæ komórek o ustawionym tu statusie +i wy¶wietlaæ dane komórek drugiej sieci o tym statusie (np. kiedy¶ ustawi³em +to menu na REVERSE i telefon zacz±³ mi wy¶wietlaæ testowane komórki Plusa +(bo nie znalaz³ takowych w Erze)). +Informacje o statusie komórek znajdziesz w Menu +10-1 do Menu 10-5. + +

+

+ + + + + + + + + +
+ + + + +
+
  CELL BARR 
+  ACCEPTED
+ +

Telefon zachowuje siê jak ka¿dy inny (domy¶lnie)

+ + + + +
+
  CELL BARR 
+  REVERSE
+ +

U¿ywane s± tylko testowane komórki

+ + + + +
+
  CELL BARR 
+  DISCARD
+ +

Korzystasz ze wszystkich mo¿liwych komórek

+ + + + +
Use menu to 
+toggle cell
+barr status
+DIS/ACC/REV
+
+ +

Menu 10-20 +
Informacje o baterii i trybie pracy ³adowarki telefonu + +

+ + + + + + +
+ + + + +
 aaa   bbbbb
+Tccc     ddd
+Ceee    Wfff
+gggg    hhhh
+
+ + + + +
BatVol ChMod
+BTemp ChTime
+ChrgVol Pwm
+ BTyp  BFDC
+
+ +

+

    +
  • +aaa - warto¶æ napiêcia baterii (V/100 - przyk³adowo 7.19V jest pokazywane +jako 719). Zakres 0.00 - 9.99 V
  • + +
  • +bbbbb - informacje o ³adowaniu baterii: + +

    +

      +
    • xxxxx - nie pod³±czono ³adowarki albo nie ma procesu ³adowania
    • +
    • BatCk - sprawdzanie stopnia na³adowania akumulatora (dzieje siê tak np. po ka¿dym u¿yciu kana³u TCH (czyli np. rozmowie) w trakcie ³adowania akumulatora NiMH)
    • +
    • BSIFa - ³adowanie zosta³o przerwane (b³±d sprawdzania BSI (Battery Size Indicator): +jednego ze styków baterii pod³±czonego wraz z mas± (BGND) do opornika wewn±trz akumulatora +- dziêki pomiarowi jego oporu telefon mo¿e okre¶liæ rodzaj pod³±czonej akumulatora))
    • +
    • CelBr - ³adowanie zosta³o przerwane (która¶ z cel akumulatora ma defekt)
    • +
    • ChaCk - EM sprawdza ³adowarkê
    • +
    • Charg - ³adowanie
    • +
    • ColdC - ³adowanie zimnej baterii
    • +
    • ColdM - akumulator jest zimny, trwa ³adowanie podtrzymuj±ce
    • +
    • CurFa - ³adowanie zosta³o przerwane (b³±d sprawdzania natê¿enia pr±du z ³adowarki)
    • +
    • DisCh - roz³adowywanie akumulatora
    • +
    • Faile - b³±d
    • +
    • FastC - szybkie ³adowanie
    • +
    • FullM - akumulator pe³ny, trwa ³adowanie podtrzymuj±ce
    • +
    • F_Che - sprawdzanie procesu szybkiego ³adowania
    • +
    • HotM  - akumulator jest gor±cy, trwa ³adowanie podtrzymuj±ce
    • +
    • I_Che - inicjacja sprawdzania parametrów ³adowania (po niej pokazuje siê komunikat '£aduje' ('Charging'))
    • +
    • InitC - proces ³adowania jest inicjowany
    • +
    • L_Che - sprawdzanie procesu ³adowania akumulatora LiION
    • +
    • LiAFu - poziom parametru fff (Pwm) jest ponad dopuszczalny limit dla na³adowanego akumulatora
    • +
    • LiDCH - ³adowanie DCH (prawdopodobnie podtrzymuj±ce) akumulatora LiION
    • +
    • LiFul - parametr fff (Pwm) przekroczy³ dopuszczalny limit dla na³adowanego akumulatora przez okre¶lony czas (okre¶lony dla na³adowanego akumulatora)
    • +
    • LiHot - ³adowanie gor±cego (nagrzanego) akumulatora LiION
    • +
    • LithC - ³adowanie akumulatora LiION
    • +
    • LiTxO - ³adowanie akumulatora LiION, w³±czony nadajnik telefonu (rozmowa)
    • +
    • LNFTx - ³adowanie akumulatora LiION (ale zu¿ywane jest tyle energii, ¿e faktycznie nie jest do³adowywany), w³±czony nadajnik telefonu (rozmowa)
    • +
    • M_Che - sprawdzanie procesu ³adowania podtrzymuj±cego
    • +
    • MaBFD - ³adowanie podtrzymuj±ce (BFD)
    • +
    • Maint - ³adowanie podtrzymuj±ce
    • +
    • TmpFa - ³adowanie zosta³o przerwane (telefon nie móg³ odczytaæ natê¿enia opornika +NTC w akumulatorze pod³aczonego do z³±cza BTEMP i BGND akumulatora i w zwi±zku z tym nie móg³ okre¶liæ temperatury tego¿ akumulatora)
    • +
    • TxNoF - ³adowanie akumulatora NiMH (ale zu¿ywane jest tyle energii, ¿e faktycznie nie jest do³adowywany), w³±czony nadajnik telefonu (rozmowa)
    • +
    • TxOnC - ³adowanie baterii NiMH, w³±czony nadajnik telefonu (rozmowa)
    • +
    • VolFa - ³adowanie zosta³o przerwane (b³±d sprawdzania napiêcia z ³adowarki)
    • +
    +

    +

  • + +
  • +ccc - temperatura akumulatora (np. T+27 oznacza +27 stopni C). Bardzo rzadko +(czasami, je¿eli telefon jest w³±czony i przez d³u¿szy czas nieu¿ywany +(brak rozmów, itp. - niski pobór pr±du z akumulatora)), temperatura tu +podawana mo¿e byæ równa temperaturze otoczenia (w wiêc masz wtedy termometr). +Gdyby¶ potrzebowa³(a) temperatury w stopniach Fahrenheita, do przeliczenia +u¿yj wzoru F = 32 + 9C/5 (gdzie F i C to oczywi¶cie odpowiednie temperatury). +Temperatura akumulatora LiION jest równie¿ widoczna w Menu +10-23.
  • + +
  • +ddd - czas ³adowania w godzinach (pierwsza cyfra) i minutach (2 ostatnie +cyfry). Zerowany po rozpoczêciu ³adowania (nie zawsze: telefon nie robi +tego, gdy: + +

    +

      +
    • +nie zosta³o zakoñczone poprzednie ³adowanie akumulatora
    • + +
    • +parametry pr±du z sieci elektrycznej nie spe³niaj± pewnych wymogów (je¿eli +pod³±cza³em ³adowarkê w pewnych miejscach, nie by³o to wykonywne)).
    • +
    + +

    Zaobserwowa³em to równie¿ w Nokii 6110 po zmianie baterii (np. z LiION +na NiMH). Zaczyna odliczaæ czas po pod³±czeniu ³adowarki. Je¿eli akumulator +jest na³adowany albo od³±czysz ³adowarkê, zatrzymuje siê. +

  • + +
  • +eee - napiêcie ³adowania (V/100). Bateria nie jest ³adowana pr±dem sta³ym, +tylko pulsuj±cym (wska¼nik siê ci±gle zmienia). Zakres 0.0 - 18.7 V. Po +zakoñczeniu ³adowania trwa tzw. ³adowanie podtrzymuj±ce (patrz opis ni¿ej)
  • + +
  • +fff - kontrola ³adowania (Charge control output). Podawana dziesiêtnie +(zakres 000 - 255)
  • + +
  • +ggg - pojemno¶æ akumulatora w mAh (wed³ug opisów angielskich i pomocy monitora +w Nokii 3110 BSI pomno¿one przez 4): w przypadku akumulatora LiION +jest to podawana dok³adnie taka warto¶æ, jak na jej obudowie; w akumulatorach +NiMH mo¿e siê ró¿niæ nawet o 200 mAh i zmieniaæ w zale¿no¶ci od temperatury +(czy jest zwi±zane z efektem pamiêciowym ?)
  • + +
  • +hhhh - licznik pozwalaj±cy oceniæ czas do na³adowania +akumulatora: kiedy aktualne na³adowanie jest mniejsze ni¿ ustalony limit, +wtedy rozpoczyna odliczanie. Je¿eli osi±gnie 0, ³adowanie zostanie (przynajmniej powinno +byæ wed³ug angielskich opisów - ja obserwowa³em to niezwykle rzadko) zakoñczone.
  • +
+ +

W Nokii 3110 menu to wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
  aaa  bbbbb
+ Tccc   ddd
+ Ceee  Wfff
+w gggg hhhh z
+
+ + + + +
BatVol ChMode
+BTemp ChrTime
+ChrgVol  Pwm
+S 4BSI BFDC B
+
+ +

+

    +
  • +bbbbb - w tym telefonie przyjmuje dodatkowo warto¶æ NOTCH (brak ³adowania)
  • +
+ +

W Nokii 9110 przyjmuje za¶ nastêpuj±cy wygl±d: + +

+ + + + + + +
+ + + + +
aaa   bbbbbb
+Tccc    ddd
+i Ceee  Wfff
+ gggg   hhhh
+
+ + + + +
BatVol  ChMod
+BTemp   ChTime
+ChrgVol Pwm
+BTyp    BFDC
+
+ +

+

    +
  • +i - informacja o tym, czy do telefonu jest pod³±czona ³adowarka podró¿na (warto¶æ +"1") czy nie (warto¶æ "0").
  • +
+ +

Nazwa szybkie ³adowanie (Fast Charging - FastC) oznacza ³adowanie wiêkszym +pr±dem i przy sprawnej ³adowarce na pewno nie uszkodzi Twojego akumulatora. + +

Po zakoñczeniu ³adowania akumulatora wykonywane jest tzw. +³adowanie podtrzymuj±ce (akumulator zaczyna siê przecie¿ od razu roz³adowywaæ; +je¿eli w tym czasie do telefonu jest ci±gle pod³±czona +³adowarka, przez do³adowywanie niewielkim pr±dem mo¿e uzupe³niæ powsta³e straty energii). + +

Problemy i informacje zwi±zane z akumulatorami (np. informacje o szybkim ³adowaniu, +³adowaniu podtrzymuj±cym) zosta³y omówione i podane na bardzo dobrej stronie +www.telefon.pl/jpzr/kck/technika/001/index.html. + +

Dla ciekawych: niektóre z tutaj pokazywanych danych znajdziesz równie¿ +w niektórych programach serwisowych (np. w WinTesli nale¿y wybraæ z menu +g³ównego "Testing", a pó¼niej "ADC Readings..."). + +

+ + + + + + +
Ten test pozwala sprawdziæ przede wszystkim ³adowarkê. Mo¿esz tutaj +równie¿ zobaczyæ rzeczywiste parametry akumulatora: +
    +
  • +pojemno¶æ
  • + +
  • +jego sprawno¶æ (np. nie radzê kupowaæ akumulatorów z uszkodzona cel±)
  • + +
  • +napiêcie (je¿eli jeste¶ np. na wycieczce, to tutaj mo¿esz zobaczyæ, czy +napiêcie z akumulatora bêdzie odpowiednie do zasilania latarki)
  • +
+
+ +

Menu 10-21 +
Parametry ³adowania (zauwa¿y³em, ¿e pokazywane tu warto¶ci s± poprawne +tylko po przeprowadzeniu rozmowy w jego trakcie - tylko wtedy siê zmieniaj± +(po jej zakoñczeniu wy¶wietlaj± ostatnie rejestrowane warto¶ci)) + +

+ + + + + + +
+ + + + +
 aaaa  bbbb 
+  ccc   ddd
+  eee   fff
+
+ + + + +
MTDif MPDif
+BUpV  BDownV
+AverV SumMF
+
+ +

+

    +
  • +aaaa - ró¿nica pomiêdzy mierzonym napiêciem i tym, które ma byæ osi±gniête +docelowo w czasie ³adowania
  • + +
  • +bbbb - ró¿nica pomiêdzy mierzonym napiêciem i wynikiem poprzedniego pomiaru, +znak czê¶ci u³amkowej nie jest pokazywany.
  • + +
  • +ccc - najwy¿sze zmierzone napiêcie z akumulatora (przy ³adowaniu akumulatora +i jednoczesnym korzystaniu z niego napiêcie mo¿e siê zmieniaæ)
  • + +
  • +ddd - najni¿sze zmierzone napiêcie z akumulatora
  • + +
  • +eee - przeciêtne napiêcie
  • + +
  • +fff - suma ustawieñ parametrów z Menu 10-22 +(zakres 0.00 - 9.99, np. 1.53 pokazywane jest jako 153) - wed³ug +moich obserwacji pod uwagê NIE JEST brany parametr DerivCount (Eaaa). Je¿eli +osi±gnie warto¶æ 1.00 albo 0.99, wtedy pokazywany jest wska¼nik pe³nego +na³adowania akumulatora (tzn. wtedy przestaje siê poruszaæ wska¼nik po +prawej stronie wy¶wietlacza i ³adowanie zostaje zakoñczone).
  • +
+ +

Menu 10-22 +
Wska¼niki pozwalaj±ce oceniæ parametry ³adowania + +

+ + + + + + +
+ + + + +
 Eaaa  Cbbb 
+ Dccc  Rddd 
+ Ieee  Afff 
+ Tggg  Vhhh
+
+ + + + +
DeriC ChAm
+ VDif VDrop 
+ VDTi AvDif
+ Temp Volt
+
+ +

+

    +
  • aaa - DerivCount
  • +
  • bbb - ChargeAmount
  • +
  • ccc - VolDiffToMax
  • +
  • ddd - VolDropCnt
  • +
  • eee - VolDiffTime
  • +
  • fff - AverDiff
  • +
  • ggg - temperatura
  • +
  • hhh - napiêcie
  • +
+ +

Tutaj zobaczysz warto¶ci wska¼ników parametrów ³adowania. Wszystkie (oprócz +DerivCount) przyjmuj± warto¶ci od 0.00 do 1.00 (np. 0.23 jest pokazywane +jako 023). Po od³±czeniu ³adowarki warto¶ci tutaj mog± byæ bardzo ró¿ne. +Litery E, C, D, R, I, A, T i V s± wy¶wietlane, gdy liczba za nimi nie jest +czterocyfrowa. + +

Menu 10-23 +
Informacje o baterii. + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eee fff gggg
+hhh iiiijjjj
+
+ + + + +
TxOn   TxOff
+ChCur  Stdby
+Age CAP Curr
+Tmp CmAhTarg
+
+ +

+

    +
  • +aaaa - napiêcie z akumulatora, gdy pracuje nadajnik telefonu (a.aaa mV)
  • + +
  • +bbbb - napiêcie z akumulatora, gdy nadajnik +telefonu jest wy³±czony (b.bbb mV)
  • + +
  • +cccc - pr±d ³adowania (c.ccc mA). Je¿eli ³adowarka nie jest pod³±czona, +pokazuje siê tutaj 0. W Nokii 3210 ZAWSZE równy 0 (prawdopodobnie wynika +to z b³êdu w oprogramowaniu tego telefonu).
  • + +
  • +dddd - oczekiwane napiêcie z akumulatora w trybie +czuwania (d.ddd mV). To, czy karta SIM mo¿e zatrzymywaæ swój zegar w tym +trybie, sprawdzisz w Menu 10-51.
  • + +
  • +eee - szacowany wiek akumulatora (0 - nowy, 100 - +stary) dla akumulatora LiION (warto¶æ licznika jest prawdopodobnie +obliczana na podstawie pomiarów wykonywanych w czasie pracy/roz³adowywania +akumulatora i jego pojemno¶ci (odczytanej i dostêpnej w Menu +10-20); st±d nale¿y go traktowaæ tylko orientacyjnie !) albo 33 +dla akumulatora NiMH.
  • + +
  • +fff - poziom na³adowania akumulatora (25 - 1 kreska, 50 - 2 kreski, 75 +- 3 i 100 - 4) - warto¶ci takie, jak pokazuje wska¼nik po prawej stronie +wy¶wietlacza. Wska¼nik ten (i parametr) jest bardzo niedok³adny podczas +³adowania (praktycznie od razu przyjmuje warto¶æ 100) - wtedy lepiej u¿yj parametrów ii i jjj.
  • + +
  • +gggg - chwilowe zu¿ycie energii wskazywane przez PSM (wed³ug opisów angielskich +w dziesiêtnych czê¶ciach mA; natomiast poni¿sze oszacowania czasu +dzia³ania telefonu opieraj± siê na przekonaniu, ¿e s± tutaj podawane warto¶ci +w mA)
  • + +
  • +hhh - temperatura akumulatora LiION (znajdziesz j± równie¿ w Menu +10-20 - czasami jednak oba te wska¼niki ró¿ni± siê trochê) albo +0 (akumulator NiMH)
  • + +
  • +iiii - ile mAh zosta³o na³adowane do akumulatora do tej chwili. Je¿eli +jest w przybli¿eniu równa warto¶ci parametru jjj, ta ostatnia podwy¿sza +siê (albo koñczy siê proces ³adowania). Parametr ten jest zerowany po ka¿dym +u¿yciu kana³u TCH (np. rozmowie) przeprowadzanej +w trakcie ³adowania (w przypadku akumulatora NiMH) - mo¿na w ten sposób +przed³u¿aæ ³adowanie praktycznie w nieskoñczono¶æ. Zauwa¿y³em to równie¿ +w Nokii 6110 przy ³adowaniu akumulatora LiION (przy wy³±czaniu i w³±czaniu +telefonu w trakcie tego procesu). Warto¶æ wska¼nika zmienia siê co 14 sekund +(Nokia 5110 i standardowa ³adowarka).
  • + +
  • +jjjj - przy jakiej warto¶æ pojemno¶ci akumulatora (w mAh) zostanie zakoñczony +nastêpny etap ³adowania (patrz opis poprzedniego parametru). Zaobserwowa³em +jego zerowanie w trakcie ³adowania akumulatora LiION (przy wy³±czaniu i +w³±czaniu telefonu w trakcie tego procesu) w Nokii 6110.
  • +
+ +

Dla ciekawych: niektóre z tutaj pokazywanych danych znajdziesz równie¿ +w niektórych programach serwisowych (np. w WinTesli nale¿y wybraæ z menu +g³ównego "Testing", a pó¼niej "ADC Readings..."). + +

+ + + + + + +
Tutaj mo¿esz sprawdziæ np. rodzaj akumulatora (czy jest on LiION czy +NiMH).
+ +

Poni¿ej podajê orientacyjny pobór pr±du (mo¿e siê zmieniaæ w zale¿no¶ci +od ró¿nych parametrów) przy korzystaniu z konkretnych kana³ów (Nokie 5xxx +i 6xxx): + +

+

    +
  • +przy nadawaniu (warto¶æ parametru TX - mocy nadawania telefonu - mo¿esz +sprawdziæ w Menu 10-1) - u¿ywaniu +kana³ów +SDCC i TFR +(Nokia 6110): + +

    + + + + + + + + + + + + + + +
    TXpobór pr±du (parametr gg)
    powy¿ej 1992
    16-1899
    14-15105
    13114
    12123
    11136
    10151
    9173
    8198
    7232
    6269
    5300
    + +

    Wniosek: czas pracy baterii mo¿e rzeczywi¶cie bardzo zale¿eæ od warunków +panuj±cych w sieci (a w wiêkszo¶ci materia³ów reklamowych jest on podawany +(mierzony), gdy telefon nadaje z najmniejsz± moc± (najwy¿sze TX)). +

  • + +
  • +AGCH: 310 mA w przypadku Nokii 5110 i 6110
  • + +
  • +CCCH i CBCH: +Nokie 6110 ze starszym oprogramowaniem (np. 4.73) podaj± odpowiednio 20 +i 34. Nie wiem jednak, czy jest b³±d ich oprogramowania (najprawdopodobniej +s± to warto¶ci w mA/10) czy te¿ pobór pr±du jest faktycznie tak du¿y +(np. w Nokii 5130 warto¶æ ta jest te¿ równa 34). Sprawdzi³em, +¿e Nokie 5110 (i 6110 z oprogramowaniem 5.31) podaj± 3 mA, gdy +u¿ywaj± kana³u CCCH. Przypuszczalnie mo¿e +siê "op³aciæ" (d³u¿szy czas czuwania, itd.) wy³±czenie odbioru "nadawania +komórkowego" w telefonie, o ile go nie obs³uguje sieæ (po szczególy odsy³am +tutaj). +W przypadku, gdy telefon pobiera dane BTSa +(który bêdzie teraz przez niego u¿ywany - ma mocniejszy sygna³ ni¿ poprzedni +- szczegó³y przy opisie C2), warto¶æ +ta zmienia siê na 220 mA (trwa to dos³ownie chwilê).
  • + +
  • +NSPS: 55 zarówno w Nokii 5110 jak i 6110 +(czy jest to warto¶æ w mA, czy w mA/10 ?)
  • +
+ +

W³±czenie pod¶wietlenia zabiera kolejne 90 mA, przy ³adowaniu trzeba doliczyæ +kolejne 17 mA. + +

W Nokii 3210 z kolei te dane siê ró¿ni± u ró¿nych osób (czy zale¿y to od wersji oprogramowania, czêstotliwo¶ci ?): + + + + + +
czuwaniepobieranie danych BTSapod¶wietlenie
52 mA90 mA+155 mA
8 lub 9 mA?+159 lub +160 mA
53, czasami (rzadko i przez chwilê) 8 mA93 mA+158 lub +159 mA
8 mA?+154 mA
+ +

+ + + + + + +
Na podstawie znajomo¶ci poboru pr±du mo¿na wyliczyæ przybli¿ony czas +dzia³ania telefonu: +
    +
  • +900 mAh / 225 mA = 4 godziny rozmowy (¶rednio)
  • + +
    Nale¿y pamiêtaæ o pocz±tkowym poborze pr±du przy u¿yciu kana³u SDCC +oraz to, ¿e na pocz±tku telefon u¿ywa pe³nej mocy, ktor± potem obni¿a. +
  • +900 mAh / 5,45 mA = 165 godzin czuwania (¶rednio)
  • + +
    Nale¿y pamiêtaæ, ¿e w stanie czuwania telefon np. musi co jaki¶ wykonywaæ +PLU
+
+ +

Menu 10-24 + +

+ + + + + + +
+ + + + +
+3476    3481
+BSI:     551
+ET:        9
+  111      1
+
+ + + + +
V_inst V_avg
+BSI value
+Elapsed time
+RST_m  RST_h
+
+ +

Menu 10-25 + +

+ + + + + + +
+ + + + +
+    0      1
+10059
+ 5664    641
+    1      0 +
+
+ + + + +
+Chrgtp #Bars
+alpha
+zeta     phi
+noblw  nobcr +
+
+ + +
Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net4.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net4.htm new file mode 100644 index 0000000..fad2127 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net4.htm @@ -0,0 +1,1922 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 5/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (5/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

Menu 10-30 +
Test z zawarto¶ciami rejestrów API d¼wiêku + +

+ + + + + + +
+ + + + +
 aaaa bbbb
+ cccc dddd
+ eeee ffff
+ gggg hhhh  
+
+ + + + +
A1Cnf  A2Cnf
+  ST   AU3
+1Tone  2Tone
+ Conf  HFVol
+
+ +

+

    +
  • aaaa - API_AUD1_CTRL
  • +
  • bbbb - API_AUD2_CTRL
  • +
  • cccc - API_SIDETONE
  • +
  • dddd - API_AU3
  • +
  • eeee i ffff - API_1_TONE i API_2_TONE (patrz opis ni¿ej)
  • + +
  • +gggg - API_CONFIG: zwi±zany z ustawieniami d¼wiêku wybranymi w Menu +10-71 i 10-72. W zale¿no¶ci od tego, które menu tam ostatnio przegl±da³e¶(a¶) +(albo raczej, jakie cyferki by³y umieszczone w tamtym menu), tutaj zobaczysz +(szesnastkowo) liczbê wybran± tam pod AUDIO ENHANCEMENT (podajê przyk³adowe): + +

    + + + + + + + + + + +
    normalnie (np. w trybie czuwania)wybieranie numerurozmowa
    5148 (trzaski) - 20808 dziesi±tkowo51495140
    851A - 34074 dziesi±tkowo851B8512
    C6A4 (trzaski) - 50852 dziesi±tkowoC6ADC6A4
    DB34 (trzaski) - 56116 dziesi±tkowoDB3DDB34
    DF29 (standardowo po w³±czeniu telefonu) - 57129 dziesi±tkowoDF29DF20
    F436 - 62518 dziesi±tkowoF43FF436
    F437 - 62519 dziesi±tkowoF43FF436
    +

    +

  • + +
  • +

    hhhh - API_HF_VOL: ustawienie g³o¶no¶ci podczas rozmowy - obliczysz j± +wed³ug wzoru 110 - hhhh (tzn. od 110 odejmujesz warto¶æ tego parametru). +Jest ona równie¿ podawana (tylko podczas po³±czenia) w Menu +10-76. Po pod³±czeniu zestawu s³uchawkowego warto¶ci tutaj pokazywane +siê zmieniaj± - g³o¶no¶æ obliczasz ze wzoru 510 - hhhh (dla zestawu samochodowego +2210 - hhhh). Rodzaj pod³±czonego zestawu sprawdzisz tak¿e w Menu 10-75. +Telefon zapamiêtuje ustawienie g³o¶no¶ci dla ka¿dego zestawu oddzielnie.

  • +
+ +

Po naci¶niêciu ka¿dego klawisza generowany jest d¼wiêk sk³adaj±cy siê z +dwóch tonów. Zmieniaj± siê wtedy parametry eeee i ffff. Pierwszy d¼wiêk +jest krótki, drugi trwa tak d³ugo, jak trzymamy klawisz. Je¶li chodzi o +klawisze C, NaviKey, Up i Down, zmienia siê tylko parametr eeee (warto¶æ +0E10 - 3600 dziesi±tkowo) - d¼wiêk sk³ada siê bowiem tylko z jednego tonu. +I teraz najciekawsza sprawa - je¿eli podzielisz podawane warto¶ci przez +4, otrzymasz czêstotliwo¶ci w Hz towarzysz±ce naciskaniu klawiszy w systemie +tonowym (DTMF - Dual Tone Multi Frequency). +Z systemem tym zapewne spotykasz siê na co dzieñ (jest u¿ywany we wszystkich +nowoczesnych telefonach przy wybieraniu numeru i zast±pi³ tzw. wybieranie +pulsowe). Odpowiednie warto¶ci podajê w tabelce (dziesiêtnie) - parametr +eeee odpowiada warto¶ciom w poziomie, ffff w pionie: + +

+ + + + + + +
1209 Hz1336 Hz1477 Hz
697 Hz123
770 Hz456
852 Hz789
941 Hz#0*
+ +

Menu 10-34 +
Informacje o po³±czeniu telefonu z komputerem kablem FBUS + +

+ + + + + + +
+ + + + +
aa bb cc dd
+eee fff ggg
+hhh iii jjj 
+k
+
+ + + + +
CM LD LM NM 
+PEC FEC OEC
+ACC RXS TXS 
+Mod
+
+ +

+

    +
  • aa - typ danych przesy³anych obecnie przez FBUS (szesnastkowo)
  • +
  • bb - ostatnie ³±czone urz±dzenie przez FBUS (szesnastkowo)
  • +
  • cc - typ danych przesy³anych ostatnio (szesnastkowo)
  • +
  • dd - nastêpny typ danych przesy³anych przez FBUS (taki sam jak parametr aa, je¿eli po³±czenie nie zosta³o zrealizowane)
  • +
  • eee - licznik b³êdów parzysto¶ci
  • +
  • fff - licznik b³êdów ramki
  • +
  • ggg - licznik b³êdów przepe³nieñ
  • +
  • hhh - licznik czasu aktywno¶ci interfejsu FBUS
  • +
  • iii - numer sekwencji odebranej
  • +
  • jjj - numer sekwencji nadanej
  • +
  • k - tryb pracy telefonu: S=slave (podrzêdny), H=host (zawiaduj±cy)
  • +
+ +

Opis powy¿ej jest zaczerpniêty z pewnych angielskich opisów. W niektórych +telefonach (np. Nokii 5110) warto¶ci parametrów w tym te¶cie s± raczej inne, +natomiast pomoc do niego taka sama. Kiedy ³±czysz telefon kablem FBUS i u¿ywasz +programu pos³uguj±cego siê tym protoko³em, pierwsza linijka z warto¶ciami zmienia +siê zazwyczaj na "1E0C1E -". Kiedy spojrzysz do opisów protoko³u FBUS, zobaczysz, ¿e: + +

    +
  • "1E" mo¿e oznaczaæ dane przesy³ane protoko³em FBUS przez kabel
  • +
  • "0C" mo¿e oznaczaæ, ¿e kabel FBUS jest pod³±czony do telefonu
  • +
+ +

i jest to prawda. Tak wiêc, oznacza to, ¿e powy¿szy opis jest prawdziwy +(nawet, je¿eli test wygl±da troszkê inaczej). + +

W Nokii 9110 menu to wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
ll mm nn oo 
+ee ff gg
+p  q
+r s tt
+
+ + + + +
PA RS DR PR 
+PE FE OE
+Rx Tx
+D U DC
+
+ +

+

    +
  • +p i q to prawdopodobnie iii i jjj
  • +
+ +

Adresy, pod którymi znajdziesz opis protoko³u transmisji pomiêdzy telefonem i komputerem, +s± podane w pytaniu 25. + +

+ + + + + + +
Je¿eli warto¶ci w tym te¶cie zmieni³y siê od momentu w³±czenia telefonu, +oznacza to, ¿e by³ on pod³±czony do komputera i dane by³y transmitowane z u¿yciem +protoko³u FBUS (a nie MBUS). +
+ +

Menu 10-35 +
Przyczyna ostatniego restartu oprogramowania telefonu + +

+ + + + + + +
+ + + + +
 aaaaa      
+ bbbbbbbb

+
+ + + + +
Reset reason
+Task name

+
+ +

+

    +
  • aa - przyczyna: + +

    +

      +
    • NORM: prawdopodobnie normalne wy³±czenie/w³±czenie
    • +
    • UNKNO: nieznana (domy¶lnie)
    • +
    • SWSIM: k³opoty ze stykami karty SIM
    • +
    • STACK: przepe³nienie stosu
    • +
    • SWIDL: nie uruchamia³ siê tryb czuwania
    • +
    • HW lub WD: ASIC watchdog timeout
    • +
    • SWDSP: restart DSP (potrzebny, aby znów prawid³owo dzia³a³)
    • +
    +

    +

  • + +
  • +bbbbbbbb - nazwa ostatniej wykonywanej czynno¶ci przed restartem (np. +"AUD TASK", +"CC TASK" (potwierdzone), +"DDI TASK", +"DEV IO" (potwierdzone), +"EM TASK", +"FBUSTASK" (potwierdzone), +"L1 CONTR", +"L1 MEAS", +"L1 SYSPA" (potwierdzone), +"L2 TASK", +"LOCAL" (potwierdzone), +"MDI RECE" (potwierdzone), +"MDI SEND" (potwierdzone), +"MM TASK" (potwierdzone), +"OS IDLE" (potwierdzone), +"PN TASK" (potwierdzone), +"RR TASK" (potwierdzone), +"RM TASK", +"SIM L2" (potwierdzone), +"SIM UPL" (potwierdzone), +"SMS TASK" (potwierdzone), +"TONETASK", +"UI TASK" (potwierdzone) +albo "UNKNOWN" (nieznana) (potwierdzone)). Mo¿na zauwa¿yæ, +i¿ nazwy zadañ pokrywaj± siê z nazwami w pomocy testów 84-86.
  • +
+ +

Menu 10-36 +
Przyczyny restartu oprogramowania telefonu (tzn. tutaj znajdziesz informacje, +ile razy telefon musia³ je wykonywaæ z tych powodów) + +

+ + + + + + +
+ + + + +
 aa  bb  cc 
+ dd  ee  ff

+
+ + + + +
 UN  WD DSP 
+SIM IDL STK

+
+ +

+

    +
  • aa - nieznana
  • +
  • bb - ASIC watchdog timeout (w niektórych +telefonach mo¿esz "zmusiæ" je wy³±czenia siê z tego powodu - patrz pytanie 9)
  • +
  • cc - restart DSP (potrzebny, aby znów prawid³owo dzia³a³)
  • + +
  • +dd - wed³ug opisów angielskich, jest to ilo¶æ restartów +zwi±zanych z k³opotami ze stykami karty SIM (w niektórych +telefonach mo¿esz je "zmusiæ" do restartu z tego powodu - patrz +pytanie 9). Zd±¿y³em jednak zaobserwowaæ, ¿ +wy¶wietlana tutaj ilo¶æ zwiêksza siê te¿ po wpisywaniu tzw. mastercodu (patrz +FAQ w Fan Klubie Nokii - www.fkn.pl/faqs/simlockfaq.html) +zwi±zanego z SIM-Lockiem poziomu 1.
  • + +
  • ee - nie uruchamia³ siê tryb czuwania
  • + +
  • ff - przepe³nienie stosu
  • +
+ +

Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. + +

+ + + + + + +
Zawarto¶æ liczników z tego menu mo¿esz wyzerowaæ u¿ywaj±c niektórych programów +serwisowych - np. w Pc-Locals 1.3 w tym celu musisz wybraæ menu 8 ("Event Trace"), +menu 5 ("Permanent Counter Table..."), a nastêpnie nacisn±æ klawisz F6 ("Clear Counters"). +Niestety :( "prawdziwe" liczniki pokazuj±ce ilo¶æ prób wpisania mastercodu (Counter np. w WinTesli +i WinLocku) nie zeruj± siê w ten sposób...
+ +

Menu 10-38 +
Zrzut pamiêci + +

+ + + + + + +
+ + + + +
aaaaaaaaaaaa
+aaaaaaaaaaaa
+aaaaaaaaaaaa
+aaaaaaaaaaaa
+
+ + + + +
Memory dump 

+
+ +

+

    +
  • +aaaa.... - szesnastkowa zawarto¶æ 24 komórek pamiêci
  • +
+ +

Numer komórki pamiêci, od której ma byæ wykonany ów zrzut, mo¿esz wpisaæ +w ksi±¿ce telefonicznej na karcie SIM pod pozycj± 30 (patrz podobny opis +w Menu 10-17) - przyk³adowo dla +adresu 0x0C89AB musisz tam wpisaæ 0C2089AB. Zrzut zostanie wykonany tylko +wtedy, gdy wejdziesz bezpo¶rednio do tego menu. + +

To menu nie jest w³±czone w sprzedawanych telefonach (znalaz³em tylko jeden +taki telefon). Aby to zrobiæ, nale¿y przed skompilowaniem oprogramowania zmieniæ odpowiedni± sta³±. + +

Menu 10-39 +
Przyczyna zakoñczenia ostatniego po³±czenia (gwiazdka oznacza, ¿e diagnoza +nie zostanie pokazana w sieci, tylko w telefonie) oraz wykonywania Location +Update: + +

+ + + + + + +
+ + + + +
 CC:   aaa  
+ MM:   bbb
+ RR:   ccc
+
+ + + + +
CC CauseValu
+MM CauseValu
+RR CauseValu
+
+ +

+

    +
  • +przyczyna z warstwy kontroluj±cej po³±czenia (CallControl-Layer) - jest +ona podawana w równie¿ Menu 10-2 +i Menu 10-63: + +

    +

      +
    1. +na podstawie specyfikacji GSM (sekcja 10.5.4.11/GSM 04.08): + +

      +

        +
      • + 1: nieprzypisany numer
      • + +
      • + 3: brak drogi do punktu przeznaczenia
      • + +
      • + 8: operator determined barring
      • + +
      • +16: normalne zakoñczenie rozmowy (rozmowa siê odby³a albo us³ysza³e¶(a¶) +jaki¶ nagrany komunikat typu: "Abonent poza zasiêgiem. Proszê spróbowaæ +pó¼niej" albo "Nie ma takiego numeru")
      • + +
      • +17: numer by³ zajêty + +

        +

          +
        • +je¿eli to Ty dzwoni³e¶(a¶), numer by³ zajêty - telefon wy¶wietli³ 'Numer +zajêty' - 'Number busy'
        • + +
        • +je¿eli kto¶ próbowa³ siê dodzwoniæ do Ciebie, us³ysza³ sygna³ zajêto¶ci +- rozmawia³e¶(a¶) albo odrzuci³e¶(a¶) po³±czenie (w Nokii 5110 lub 5130 +trzeba nacisn±æ klawisz C, w Nokiach 6110, 6130 lub 6150 czerwon± s³uchawkê)
        • +
        +

        +

      • + +
      • +18: brak odpowiedzi u¿ytkownika
      • + +
      • +19: u¿ytkownik wykonywa³ po³±czenie alarmowe (wed³ug specyfikacji +- mnie siê to zdarzy³o równie¿ przy normalnym po³±czeniu (telefon wy¶wietli³ +'No answer' ('Nie odpowiada')) ewentualnie, gdy po³±czenie przychodz±ce +zosta³o przekierowane na pocztê g³osow±), brak odpowiedzi.
      • + +
      • +21: po³±czenie zosta³o odrzucone + +

        +

          +
        • +telefon by³ poza zasiêgiem sieci, gdy próbowa³a¶(e¶) wykonaæ po³±czenie +(móg³ wy¶wietliæ 'Poza zasiêgiem sieci' - 'No coverage network')
        • + +
        • +próbowa³e¶(a¶) siê dodzwoniæ pod nieistniej±cy numer i us³ysza³e¶(a¶) sygna³ +zajêto¶ci
        • +
        +

        +

      • + +
      • +22: numer zosta³ zmieniony
      • + +
      • +27: punkt przeznaczenia poza zasiêgiem
      • + +
      • +28: z³y format numeru/numer niekompletny
      • + +
      • +31: unspecided. Najprawdopodobniej po³±czenie zakoñczone przez sieæ +(dzieje siê tak np., gdy jest ona przeci±¿ona)
      • + +
      • +34: brak dostêpnego (wolnego) kana³u. Telefon wy¶wietli³ 'Network +busy' ('Sieæ zajêta'). Zauwa¿y³em równie¿, ¿e przy tym kodzie warto¶æ RR +zmienia³a siê na 1. Wiêcej o zajêto¶ci sieci piszê przy opisie +TS.
      • + +
      • +38: poza zasiêgiem sieci
      • + +
      • +41: tymczasowa niesprawno¶æ
      • + +
      • +42: switching equipment congestion
      • + +
      • +44: ¿±dany kana³ nie jest dostêpny
      • + +
      • +47: zasób niedostêpny. Ten b³±d pojawi³ siê, gdy po³±czenie zosta³o "brutalnie" przerwane +(konkretnie: w telefonie mojego rozmówcy by³a wy³adowana bateria). Telefon +wy¶wietli³ 'Error in connection'.
      • + +
      • +50: ¿±dana us³uga nie zosta³a wykupiona (nie masz na ni± abonamentu)
      • + +
      • +65: bearer service not implemented
      • + +
      • +68: ACM by³o równe albo wiêksze ni¿ ACMmax (najwy¿sza mo¿liwa +warto¶æ ACM)
      • + +
      • +69: ¿±dana us³uga nie zosta³a zaimplementowana
      • + +
      • +88: niekompatybilny punkt przeznaczenia
      • + +
      +

      +

    2. + +
    3. +z w³asnych (i nie tylko) do¶wiadczeñ: + +

      +

        + +
      • +79: b³±d z komunikatem 'Sprawd¼ us³ugi operatora' ('Check operator services'). +Pojawia siê, gdy masz w³±czon± funkcjê ALS (Alternative Line Service) +i wybrany drugi numer (choæ nie jest on faktycznie przypisany do karty SIM) i próbujesz wykonaæ +po³±czenie
      • + +
      +

      +

    +
  • + + +
  • +przyczyna z warstwy zarz±dzaj±cej sieci± komórkow± (MobilityManagement-Layer) +- jest ona równie¿ podawana w Menu 10-64. +Warto¶ci na podstawie specyfikacji GSM (sekcja 10.5.3.6/GSM 04.08): + +

    +

      +
    • + 2: IMSI nieznany w HLR +(karta SIM nieaktywna w sieci)
    • + +
    • + 3: nielegalny telefon
    • + +
    • + 4: IMSI nieznany w VLR
    • + +
    • + 5: IMEI telefonu nie zosta³ +zaakceptowany
    • + +
    • + 6: niedozwolony ME
    • + +
    • +11: niedozwolony PLMN (próba zalogowania +siê do sieci, która nie podpisanej odpowiedniej umowy z Twoj± sieci± macierzyst± +- telefon wy¶wietla 'Brak dostêpu' ('No access') przy jej rêcznym +wyborze; nie wiem, czy kod ten pokazuje siê tylko w przypadku tzw. zabronionych +sieci z karty SIM (tylko to mog³em sprawdziæ - konkretnie: z kart± Ery +próbowa³em u¿yæ sieci Plusa) - ich +listê znajdziesz w Menu 10-6)
    • + +
    • +12: niedozwolony kod obszaru (Location Area), w którym dzia³a +obs³uguj±ca telefon komórka. Mo¿esz go sprawdziæ w Menu +10-11.
    • + +
    • +13: procedura roamingu nie jest dozwolona na tym obszarze
    • + +
    • +17: niesprawno¶æ sieci
    • + +
    • +22: network congestion
    • + +
    • +32: service option not supported
    • + +
    • +33: service option not subscribed
    • + +
    • +34: service temporary out of order
    • + +
    • +38: call cannot be identified (call RE)
    • + +
    +

    +

  • + +
  • +przyczyna z warstwy zarz±dzaj±cej przydzielaniem kana³ów (RadioRessourceManagement-Layer) +- patrz specyfikacje GSM: sekcja 10.5.2.31/GSM 04.08: + +

    +

      +
    • +  0: normalne zakoñczenie
    • + +
    • +  1: niezprecyzowana
    • + +
    • +  2: u¿yty kana³ jest nie do zaakceptowania
    • + +
    • +  3: przekroczenie czasu wa¿no¶ci licznika
    • + +
    • +  4: brak aktywno¶ci w ¶cie¿ce radiowej
    • + +
    • +  5: Pre-emptive release
    • + +
    • +  8: handover niemo¿liwy, przekroczono +warto¶æ parametru +TA
    • + +
    • +  9: tryb kana³u nie do zaakceptowania
    • + +
    • + 10: u¿yta czêstotliwo¶æ nie zaimplementowana
    • + +
    • + 65: po³±czenie zosta³o ju¿ (wcze¶niej) wykasowane
    • + +
    • + 97: typ komunikatu niezgodny ze stanem protoko³u
    • + +
    • +101: no cell allocation available
    • + +
    • +111: niezprecyzowany b³±d w protokole
    • +
    +
  • +
+ +

Je¿eli pokazywana jest gwiazdka przed trzecim parametrem z tego menu, to +najczê¶ciej oznacza to, ¿e w³a¶nie wykonywane jest po³±czenie. Czasami +telefon podaje inne warto¶ci - nie znam niestety ich sensownego opisu. + +

Warto¶ci liczników nie s± zapamiêtywane przy wy³±czaniu telefonu. Przy +nastêpnym pomiarze telefon nie zeruje tych liczników (tzn. przy nastêpnym +pomiarze zmienia tylko te, które go dotycz±; resztê pozostawia bez zmian). + +

+ + + + + + +
Na podstawie tego menu mo¿esz dowiedzieæ siê, dlaczego w³a¶ciwie Twój +telefon nie chce dzia³aæ - nie mo¿na wykonywaæ po³±czeñ.
+ +

Menu 10-40 +
Zerowanie liczników handover (przez bezpo¶rednie +wej¶cie)... + +

+ + + + + + +
+ + + + +
   RESET
+  HANDOVER  
+  COUNTERS
+
+ + + + +
  Use menu  
+  to reset
+  handover
+  counters
+
+ +

Menu 10-41 +
Informacje o handoverach + +

Handover to po prostu przenoszenie po³±czenia +radiowego telefonu z jedn± komórk± na po³±czenie z inn± (rozmowa telefoniczna +ci±gle trwa). Dzieje siê tak: + +

+

    +
  1. +gdy nowe po³±czenie mo¿e zapewniæ lepsz± jako¶æ (jego parametry s± ci±gle +sprawdzane przez stacjê bazow± i telefon)
  2. + +
  3. +gdy telefon znajduje siê na styku kilku komórek i mo¿e ju¿ korzystaæ z +innych (powsta³e wolne miejsce wykorzystuj± telefony, które s± tylko w +zasiêgu "starej" komórki)
  4. +
+ +

Je¿eli s± problemy z transmisj±, decyzjê o handoverze podejmuje telefonu +(w pozosta³ych przypadkach robi to BSC). +Je¿eli w³±czy³e¶(a¶) u¿ywanie jednego kana³u przez telefon (Menu +10-17), handovery nie s± w ogóle wykonywane. + +

S± 4 rodzaje handoveru: + +

+

    +
  • +Intra cell - Intra BSC +handover (zwany te¿ handoff): najmniejszym z handoverów jest +handover wewn±trz komórki. Wtedy odbiorca jest "przerzucany" z jednego +kana³u na drugi (generalnie na inn± czêstotliwo¶æ w obrêbie jednej komórki). +W tym wypadku decyzjê o tym, czy przenie¶æ abonenta, podejmuje BSC.
  • + +
  • +Inter cell - Intra BSC handover: +abonent zostaje przeniesiony z jednej komórki do drugiej. O przeniesieniu +decyduje BSC. Po³±czenie z pierwsz± komórk± +zostaje przerwane, gdy nast±pi po³±czenie z drug± (przemieszczanie siê +miêdzy dwoma BTSami w ramach jednego BSC).
  • + +
  • +Inter cell - Inter BSC handover: +przeniesienie po³±czenia miêdzy dwoma komórkami, które nie s± obs³ugiwane +przez to samo +BSC. W tym wypadku handover +jest przenoszony przez MSC, ale decyzjê +o przeniesieniu podejmuje pierwszy BSC. +Po³±czenie z pierwszym BSC (i BTSem) +jest koñczone, gdy zostanie ustanowione po³±czenie z drugim BSC +(i +BTSem).
  • + +
  • +Inter MSC handover: odbiorca przenosi +siê z komórki kontrolowanej przez dany MSC/VLR +do innej, która jest kontrolowana przez inny MSC/VLR. +Tu sytuacja jest trochê bardziej skomplikowana. Zauwa¿my, ¿e MSC +jest po³±czony do GSMc przez ³±cza PSTN. W tym wypadku widaæ, ¿e drugi +MSC +nie mo¿e dostaæ informacji z pierwszego tak po prostu. + +

    Co siê stanie gdy po³±czenie zostanie przeniesione do docelowego +MSC/VLR ? + +

    Poniewa¿ oba MSC nale¿± do tej samej +sieci, po³±czenie zostaje utrzymane. Aby je przenie¶æ z jednego do drugiego +MSC +musi zostaæ wygenerowany specjalny numer HON (HON=CC+NDC+SN, CC - kod kraju, +NDC - kod sieci, SN - numer abonenta), który jest podobny do numeru roamingowego +(to te¿ po³±czenie miêdzy dwoma +MSC). Podczas +handoveru miêdzy dwoma MSC po³±czenie nie +mo¿e zostaæ przerwane (po³±czenie telefoniczne realizowane przez abonenta +sieci).

+ +

+ + + + + + +
+ + + + +
HandOOk: aaa
+PrevCh : bbb
+HONotOK: ccc
+HOIntra: ddd
+
+ + + + +
HandOvOKCntr
+PrevChanCntr
+HandOvNOKCnt
+HOIntraOKCnt
+
+ +

+

    +
  • +aaa - ilo¶æ poprawnie zrealizowanych handoverów
  • + +
  • +bbb - ilo¶æ zakoñczonych sukcesem prób powrotów do u¿ywania poprzedniego +kana³u (numer aktualnego kana³u sprawdzisz np. w Menu +10-1)
  • + +
  • +ccc - ilo¶æ niepoprawnych handoverów
  • + +
  • ddd - ilo¶æ handoverów pierwszego rodzaju (Intra +cell - Intra BSC) albo przypisañ (?)
  • +
+ +

Liczniki mog± przyjmowaæ maksymalne warto¶ci 999 (wtedy staj±). Je¿eli +chcesz je wyzerowaæ, u¿yj Menu 10-40 (albo +Menu +10-60). + +

W telefonach dualnych (np. Nokii 6150, 3210 czy 7110) Menu 10-41 wygl±da +tak i dotyczy handoverów Inter cell - Intra BSC, +Inter cell - Inter BSC i Inter MSC: + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eeefffggghhh
+iiijjjkkklll
+
+ + + + +
G>G InterD>D
+G>D  OK  D>G
+InterHoFail
+BackToPrev
+
+ +

+

    +
  • aaa - ilo¶æ poprawnych handoverów GSM 900 - GSM 900
  • +
  • bbb - ilo¶æ poprawnych handoverów GSM 1800 - GSM 1800
  • +
  • ccc - ilo¶æ poprawnych handoverów GSM 900 - GSM 1800
  • +
  • ddd - ilo¶æ poprawnych handoverów GSM 1800 - GSM 900
  • +
  • eee - ilo¶æ b³êdnych handoverów GSM 900 - GSM 900
  • +
  • fff - ilo¶æ b³êdnych handoverów GSM 1800 - GSM 1800
  • +
  • ggg - ilo¶æ b³êdnych handoverów GSM 900 - GSM 1800
  • +
  • hhh - ilo¶æ b³êdnych handoverów GSM 1800 - GSM900
  • + +
  • +iii - ilo¶æ zakoñczonych sukcesem prób powrotów do u¿ywania poprzedniego +kana³u (numer aktualnego kana³u sprawdzisz np. w Menu +10-1) z GSM 900 do GSM 900
  • + +
  • +jjj - ilo¶æ zakoñczonych sukcesem prób powrotów do u¿ywania poprzedniego +kana³u z GSM 1800 do GSM 1800
  • + +
  • +kkk - ilo¶æ zakoñczonych sukcesem prób powrotów do u¿ywania poprzedniego +kana³u z GSM 900 do GSM 1800
  • + +
  • +lll - ilo¶æ zakoñczonych sukcesem prób powrotów do u¿ywania poprzedniego +kana³u z GSM 1800 do GSM 900
  • +
+ +

Je¿eli liczniki osi±gn± warto¶ci maksymalne, staj± (9999 dla dwóch pierwszych +linii, 999 dla dwóch ostatnich). Je¿eli chcesz je wyzerowaæ, u¿yj Menu +10-40 (albo Menu 10-60). + +

W Nokii 3110 test ten wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
HandOOk: aaa 
+PrevCh : bbb 
+HONotOK: ccc 
+T200: eeee
+
+ + + + +
HandOvOKCntr 
+PrevChanCntr 
+HandOvNOKCnt 
+T200Cntr
+
+ +

+

    +
  • +eeee - o liczniku T200 wspominam w Menu 10-43
  • +
+ +

a tak w Nokii 6185/6188: + +

+ + + + +
+BSI 01000
+VBAT 388
+BTEMP 018
+BATT 2 CHG 0
+
+ +

    +
  • VBAT - napiêcie baterii (/100V)
  • +
  • BTEMP - temperatura baterii w C
  • +
  • CHG - wska¼nik ³adowania baterii: 1 - ³adowanie, 0 - brak
  • +
+ +

Menu 10-42 +
To menu jest tylko w telefonach dualnych (np. Nokii 6150 czy 3210) +i dotyczy tylko handoverów pierwszego rodzaju (Intra +cell - Intra BSC): + +

+ + + + + + +
+ + + + +
 aaaa  bbbb
+ cccc  dddd
+eeefffggghhh
+iiijjjkkklll
+
+ + + + +
G>G IntraD>D
+G>D  OK  D>G
+IntraHoFail
+BackToPrev
+
+ +

+

+ +

Je¿eli liczniki osi±gn± warto¶ci maksymalne, staj± (9999 dla dwóch pierwszych +linii, 999 dla dwóch ostatnich). Je¿eli chcesz je wyzerowaæ, u¿yj Menu +10-40 (albo Menu 10-60). + +

W Nokii 6185/6188 ten test wygl±da jak Menu 10-20. + +

Menu 10-43 + +

+ + + + + + +
+ + + + +
T200MS: aaaa
+T200BS: bbbb
+T200MS: cccc
+T200BS: dddd
+
+ + + + +
T200 MS GSM 
+T200 BS GSM
+T200 MS DCS
+T200 BS DCS
+
+ +

+

    +
  • +aaaa - dla GSM 900: licznik pokazuj±cy, ile razy T200 w telefonie przekroczy³ +okres wa¿no¶ci i transmisja L2 zosta³a powtórzona.
  • + +
  • +bbbb - dla GSM 900: licznik pokazuj±cy, ile razy T200 w BTSie +(w sieci) przekroczy³ okres wa¿no¶ci i transmisja L2 zosta³a powtórzona.
  • + +
  • +cccc - dla GSM 1800 dawniej zwanego DCS (tylko w telefonach dualnych): +licznik pokazuj±cy, ile razy T200 w telefonie przekroczy³ okres wa¿no¶ci +i transmisja L2 zosta³a powtórzona.
  • + +
  • +dddd - dla GSM 1800 (tylko w telefonach dualnych): licznik pokazuj±cy, +ile razy T200 w BTSie (w sieci) przekroczy³ +okres wa¿no¶ci i transmisja L2 zosta³a powtórzona.
  • +
+ +

Je¿eli liczniki osi±gn± warto¶ci maksymalne, staj± (9999 dla dwóch pierwszych +linii, 999 dla dwóch ostatnich). Je¿eli chcesz je wyzerowaæ, u¿yj Menu +10-40 (albo Menu 10-60). + +

W Nokii 6185/6188 ten test wygl±da jak Menu 10-21. + +

Menu 10-44 +
Przez bezpo¶rednie wej¶cie do tego menu, mo¿esz zmieniæ warto¶æ aa +z 01 (warto¶ci domy¶lnej) na 00 (albo odwrotnie). + +

+ + + + + + +
+ + + + +
+
 REVISION
+LEVEL IS aa 
+
+ + + + +
Use menu to 
+   change
+  Revision
+   Level
+
+ +

W Nokii 6185/6188 ten test wygl±da jak Menu 10-22. + +

Menu 10-45 +
Ten test pozwala symulowaæ sytuacje, w których telefon mo¿e normalnie +odbieraæ sygna³ sieci (jednak¿e ona nie mo¿e otrzymywaæ ¿adnych informacji +od niego). Symulacja jest bardzo realistyczna (nawet w Menu +10-1 w parametrze ddd pokazuje siê gwiazdka przy próbie wykonania +po³±czenia), ale nie ca³kowicie (w Menu +10-10 przy przekroczeniu czasu wa¿no¶ci licznika T3212 w pierwszym +parametrze zamiast numeru TMSI zobaczysz 'xxxxxxxx'). + +

Zmiana przez bezpo¶rednie wej¶cie. + +

+

+ + + + + + + +
+ + + + +
+
TRANSMITTER 
+  ENABLED
+ +

(ustawienie domy¶lne)

+ + + + +
+
TRANSMITTER 
+  DISABLED
+
+ + + + +
Use menu to 
+ enable or
+  disable
+transmitter
+
+ +

+ + + + + + +
Po jego w³±czeniu nie jest mo¿liwe np. uaktualnianie po³o¿enia przez +telefon (patrz Menu 10-64) ani +nawi±zywanie po³±czenia. Pozwala to: + +
    +
  • +"zablokowaæ" telefon do czasu jego ponownego w³±czenia (np. obserwowaæ +parametry sieci, ale nie byæ dostêpnym dla innych - je¿eli kto¶ zadzwoni +w tym czasie do Ciebie, sieæ zachowa siê tak, jakby Twój telefon by³ poza +jej zasiêgiem)
  • + +
  • +szybko przypomnieæ sobie numer telefoniczny wpisany do ksi±¿ki telefonicznej +(jest zapisany np. na kartce, ale nie pamiêtasz, kto Ci go da³): wystarczy +zadzwoniæ, a telefon w czasie wybierania numeru wy¶wietli nazwê; bêdziesz +j± móg³(mog³a) pó¼niej znale¼æ na li¶cie ostatnio wybieranych numerów)
  • +
+
+ +

Test NIE DZIA£A POPRAWNIE w Nokii 3210 i 7110 (mo¿na zmieniaæ jego ustawienie, +ale nie daje to rezultatów jak opisane wy¿ej). + +

W Nokii 6185/6188 ten test wygl±da jak Menu 10-23. + +

Menu 10-46 + +

+ + + + +
+BAND CLASS a
+CS SUBSTATE
+EM STATEnnn
+TX POWER DB
+
+ +

Menu 10-48 +
W Nokii 3110 test ten wygl±da jak Menu 10-7. + +

Menu 10-51 +
Informacje o karcie SIM + +

+ + + + + + +
+ + + + +
aaa bbb ccc 
+ dddddddd
+ e f  gg hh
+  i   jjjj
+
+ + + + +
VSel Bau SAl
+SCond  CStop
+PIN12  PUK12
+ ATR  FE/PE
+
+ +

+

    +
  • +aa - wybór napiêcia zasilaj±cego kartê SIM (3, 3/5 albo 5)
  • + +
  • +bbb - wspó³czynnik podzia³u okre¶laj±cy prêdko¶æ komunikacji telefonu z +kart± SIM (372, 64, 32 albo 0) zapisany w ATR (sekwencji wysy³anej przez +kartê w odpowiedzi na restart - Answer To Reset). +Je¿eli podzielisz czêstotliwo¶æ zegara (maksymalnie 3,25 MHz = 3 250 000 Hz) +przez niego, uzyskasz prêdko¶æ transmisji (np. 3 250 000 Hz / 372 = 8736,5 bodów)
  • + +
  • +ccc - informacja, czy mo¿liwe jest zatrzymywanie zegara karty SIM (oszczêdza +to energiê) w trybie czuwania (YES - jest mo¿liwe, NO - niestety nie). +Informacjê tê mo¿na równie¿ uzyskaæ (w Nokiach i nie tylko) stosuj±c kod*#SIM0CLOCK# +- gdy wy¶wietli siê "SIM clock stop allowed", karta SIM ma tê mo¿liwo¶æ. +Niektóre Nokie 6110 (zale¿y to od ich oprogramowania) mog± nie obs³ugiwaæ +prawid³owo (w ogóle) tego ostatniego kodu (wy¶wietlaj± np. "Result unknown"). +Telefon wy³±cza i w³±cza zegar karty SIM automatycznie - nie mo¿esz tego robiæ rêcznie ! +
  • + +
  • +dddd - informacja o tym, jaki jest preferowany stan zegara karty SIM: + +

    +

      +
    • UP
    • +
    • DOWN
    • +
    • DOWN(UP) - tak by³o w testowanych przeze mnie kartach SIM
    • +
    • UP(DOWN)
    • +
    • xxxxxxxx
    • +
    +

    +

  • + +
  • +e - ilo¶æ pozosta³ych prób wpisywania kodu PIN1. Je¿eli warto¶æ ta przekracza 9, +podawana jest tu tylko ostatnia cyfra (np. spotka³em takie karty Tak-Tak). +Maksymalna ilo¶æ prób zale¿y od konkretnej karty SIM (mo¿e byæ ustawiona dowolnie), +najczê¶ciej jest jednak równa 3. W niektórych kartach SIM mo¿na wy³±czyæ podawanie +kodu PIN w ogóle (np. Menu 4-3-1 w Nokii 5110). Je¿eli licznik jest równy +0, telefon pokazuje "Sim card blocked" i pyta siê o kod PUK1. Je¿eli kod zosta³ +wpisany poprawnie, licznik jest zerowany (przyjmuje warto¶æ maksymaln±). +W³±czanie i wy³±czanie telefonu go nie zeruje ! +
  • + +
  • +f - ilo¶æ pozosta³ych prób wpisywania kodu PIN2 +(gdy karta SIM nie obs³uguje funkcji objêtych tym kodem, wy¶wietla +siê tu x). To, czy karta mo¿e korzystaæ z tych funkcji, mo¿na sprawdziæ +próbuj±c skorzystaæ z licznika kosztów rozmów (je¿eli karta nie pozwala, +telefon wy¶wietla 'Nie dozwolone' - 'Not allowed'). Je¿eli chcia³e¶(a¶) +z nich korzystaæ, a karta ich nie obs³u¿y (wy¶wietla siê tu x), musisz +wymieniæ swoj± kartê SIM. Maksymalna ilo¶æ prób zale¿y od konkretnej karty SIM +(mo¿e byæ ustawiona dowolnie), najczê¶ciej jest jednak równa 3. Je¿eli licznik +ten jest równy 0, telefon pyta siê o kod PUK2. Je¿eli natomiast ten kod jest wpisany +poprawnie, licznik jest zerowany (przyjmuje warto¶æ maksymaln±). Oczywi¶cie nawet +wtedy, gdy jest równy 0, mo¿na normalnie korzystaæ z karty SIM (kody PIN2/PUK2 +s± niezale¿ne od PIN1/PUK1), kiedy znasz PIN1. +W³±czanie i wy³±czanie telefonu go nie zeruje ! +
  • + +
  • +gg - ilo¶æ pozosta³ych prób wpisywania kodu PUK1. +Maksymalna ilo¶æ prób zale¿y od konkretnej karty SIM +(mo¿e byæ ustawiona dowolnie), najczê¶ciej jest jednak równa 10. Telefon pyta siê +o ten kod, gdy licznik pozosta³ych prób wpisywania kodu PIN1 jest równy 0 (telefon +pokazuje "Sim card blocked"). Je¿eli licznik prób wpisywania równie¿ tego kodu +jest równy 0, karta mo¿e byæ w ogóle zablokowana (telefon pokazuje "Sim card +rejected" - "Karta SIM odrzucona") albo (to zale¿y od karty) pytaæ siê o kod PUK2. +Je¿eli jednak kod ten zostanie wpisany poprawnie, liczniki prób wpisywania kodu +PIN1 i PUK1 s± zerowane (przyjmuj± warto¶ci maksymalne). +W³±czanie i wy³±czanie telefonu go nie zeruje ! +
  • + +
  • +hh - ilo¶æ pozosta³ych prób wpisywania kodu +PUK2 (gdy karta SIM nie obs³uguje funkcji objêtych kodem PIN2, wy¶wietla +siê tu xx). Maksymalna ilo¶æ prób zale¿y od konkretnej karty SIM +(mo¿e byæ ustawiona dowolnie), najczê¶ciej jest jednak równa 10. +Je¿eli jest równy 0, korzystanie z funkcji objêtych kodem PIN2 mo¿e ju¿ byæ +niemo¿liwe w tej karcie SIM (zg³o¶ siê do operatora po pomoc). +Je¿eli dodatkowo by³e¶ pytany o ten kod, gdy +licznik prób wpisywania kodów PIN1 i PUK1 by³ równy 0 i teraz +równie¿ licznik prób wpisywania PUK2 jest równy 0, korzystanie z tej +karty SIM w ogóle mo¿e byæ niemo¿liwe (trzeba j± wymieniæ na now±). +Je¿eli natomiast ten kod zosta³ wpisany +poprawnie, liczniki prób wpisywania tego kodu oraz PIN2 (o ile wpisywa³e¶ PUK2, gdy¿ PIN2 +by³ zablokowany) jest zerowany (przyjmuj± warto¶ci maksymalne) ewentualnie +liczniki prób wpisywania tego kodu i kodów PIN1 i PUK1 s± zerowane (o ile +wpisywa³e¶ PUK2 po nieudanych próbach wpisania PIN1 i PUK1). +W³±czanie i wy³±czanie telefonu go nie zeruje ! +
  • + +
  • +i - licznik powtórzeñ ATR (ATR to sekwencja wysy³ana przez kartê w odpowiedzi +na restart - Answer To Reset) (0-9)
  • + +
  • +jjjj - ilo¶æ retransmisji ramki/b³êdów parzysto¶ci w komunikacji z kart± SIM +(w przypadku ich wyst±pienia jako dwie cyfry pojawia siê FE (Frame Error) albo PE (Parity Error), +a jako dwie ostatnie ilo¶æ retransmisji/b³êdów)
  • +
+ +

Parametr CStop (informacja, czy aktualnie zegar karty SIM jest zatrzymany, +czy nie) jest pokazywany wy³±cznie w pomocy (nie w te¶cie). Po prostu, +kto¶ o nim zapomnia³ tworz±c oprogramowanie telefonu. + +

Je¿eli chodzi o wybór napiêcia zasilaj±cego SIMa (pierwszy parametr), to (uwagi +dla Nokii 5110 i dla testowanych przeze mnie kart SIM): + +

Po w³±czeniu telefon odczytuje ró¿ne informacje z karty SIM (np. ilo¶æ +wiadomo¶ci SMS, numery +z ksi±¿ki telefonicznej) - wtedy przy próbie skorzystania z tego, co jest +na niej zapisane (np. ksi±¿ki telefonicznej), pokazywane jest "Karta SIM +nie gotowa" ("SIM card not ready") - odczyt pierwszego parametru wskazuje 3. Zauwa¿ równie¿, +¿e wtedy telefon nie potrafi wy¶wietlaæ nazw przypisanych do numerów z +ksi±¿ki telefonicznej (np. gdy dzwonisz), jak równie¿ pokazuje, ¿e na karcie +SIM nie ma ¿adnych wiadomo¶ci SMS +(nawet, gdy faktycznie tam s±). + +

Pó¼niej odczyt zmienia siê na 3/5 - przypuszczam, ¿e wtedy +zegar karty SIM jest w³±czony. + +

Telefon go wy³±cza (w te¶cie z powrotem 3), gdy komunikuje siê z sieci± +(zg³aszanie ¿±dañ, wysy³anie (odbieranie) SMSów), +z uwagi na mniejsze zu¿ycie energii (podobnie w stanie NSPS). + +

Je¿eli dzwonisz pod numer z ksi±¿ki telefonicznej (albo przychodz±cy +numer zosta³ rozpoznany), do zakoñczenia rozmowy wskazanie jest znów równe +3/5 (w przeciwnym razie zmienia siê na 3). Po zakoñczeniu rozmowy jest +ono zawsze równe 3. Logiczny wniosek: po w³±czeniu telefon zapisuje w +swojej pamiêci sumê kontroln± dla wszystkich numerów z ksi±¿ki telefonicznej +(wystarczy 7 ostatnich cyfr - na ich podstawie jest dokonywana identyfikacja +numerów przez Nokie). Je¿eli suma ta zgadza siê z sum± kontroln± numeru, +pod który dzwonisz (albo numeru przes³anego przez osobê dzwoni±c±), nastêpuje +odczyt odpowiedniej nazwy z ksi±¿ki telefonicznej. + +

I jeszcze jedna uwaga: bez wykonania po³±czenia, itp. (patrz wy¿ej), +warto¶æ pierwszego parametru to 3/5 (tracona jest niepotrzebnie energia ? - prawdopodobnie +tak (chocia¿ licznik w Menu 10-20 +nie pokazuje ¿adnej zmiany jej poboru)) + +

Je¿eli spróbujesz odczytaæ "Skrzynkê nadawcz±" ("Outbox") albo "Skrzynkê +odbiorcz±" ("Inbox"), telefon nie w³±cza zegara, je¿eli s± puste (i st±d +podejrzenie, ¿e informacje o ilo¶ci wiadomo¶ci s± dublowane w pamiêci telefonu). + +

Du¿o informacji o karcie SIM wy¶wietla równie¿ program +SIMedit (niestety, po czesku :-( )... Parametry takie jak ATR mo¿esz +badaæ np. programem SIM Scan (dostêpny np. na stronie www.net.yu/~dejan +albo http://members.tripod.com/~dejank/). + +

W Nokii 6185/6188 ten test wygl±da nastêpuj±co: + +

+ + + + +
+TASK0 0134  
+TASK1 015C
+TASK2 0138
+TASK3 0170
+
+ +

Menu 10-52 +
Odczytuje zbiory danych z karty SIM + +

+ + + + + + +
+ + + + +
+Read SIM-
+data field  
+to SIM-SCM
+
+ + + + +
+Use menu to 
+read SIM-
+data field
+to SIM-SCM
+
+ +

Ten test pozwala odczytaæ binarne warto¶ci zbiorów danych +z karty SIM do pamiêci SIM SCM +(SCM = Short Code Memory - ksi±¿ka telefoniczna na karcie SIM). + +

Przed u¿yciem tego testu musisz zapisaæ adres zbioru w ksi±¿ce telefonicznej +na karcie SIM na pozycji 34 (w postaci szesnastkowej) - odpowiednie warto¶ci +mo¿esz znale¼æ w specyfikacji GSM 11.11. + +

Na pozycji 35 w ksi±¾ce telefonicznej zostanie zapisana zawarto¶æ zbioru +(wy¶wietlana w notacji szesnastkowej). D³ugo¶æ zbiorów jest ró¿na (maksymalnie +wynosi 10 bajtów). Je¿eli wspomniana pozycja ksi±¿ki telefonicznej +nie mo¿e byæ przeczytana (jest pusta, itp.), pokazuje siê NOT DONE. + +

Informacja, czy czytanie podanego zbioru powiod³o siê, jest zapisywana +na pozycji 36 w ksi±¿ce telefonicznej (i wy¶wietlana przez chwilê na wy¶wietlaczu). + +

Mo¿liwo¶ci s± nastêpuj±ce: + +

+ + + + + + + + + +
OKzbiór zosta³ przeczytany poprawnie
NOT BINARYz³y format danych
NOT FOUNDzbiór danych nie zosta³ znaleziony na karcie SIM
CARD ERRORkarta SIM nie odpowiedzia³a zgodnie z oczekiwaniami
NO RIGHTSbrak uprawnieñ do przeczytania zbioru (PIN2,adm..)
NOT STOREDnie mo¿na zapisaæ warto¶ci w pozycji 35 ksi±¿ki
NO ADDRESSnie mo¿na przeczytaæ adresu z pozycji 34 ksi±¿ki
UNKNOWNniezidentyfikowany b³±d
+ +

W obecnych specyfikacjach tylko wymienione ni¾ej zbiory danych istniej± +na kartach SIM (w przysz³o¶ci mo¿e ich byæ wiêcej). Niektóre karty SIM +mog± nie zawieraæ niektórych z nich. + +

+ + + + + + + + + + + + + + + + + + + + + + + +
2FE2identyfikacja ICC(10 bajtów)
6F05ustawienia jêzykowe(variable length)
6F07IMSI(9 bajtów)
6F20Ciphering key Kc (czytany z karty po wprowadzeniu PIN)(9 bajtów)
6F30wybór PLMN(variable length)
6F31odstêp szukania HPLMN (sieci domowej ?)(1 bajt)
6F37maksymalna warto¶æ ACM(3 bajty)
6F38tablica obs³ugi SIM(2-4 bajty)
6F41tablica waluty i kosztów jednostki rozmowy(5 bajtów)
6F45Cell broadcast message identifier selection(variable length)
6F74kana³y kontroli nadawania komórkowego(16 bajtów)
6F78klasa kontroli dostêpu(2 bajty)
6F7Bzabronione PLMN (zobacz Menu 10-7)(12 bajtów)
6F7Einformacje o po³o¿eniu +(TMSI, +Local Area Information (sk³ada siê z MCC, MNC & LAC - +s± podane w Menu 10-11), +ostatni status wykonania Location Update)(11 bajtów)
6FADAdministrative data(variable length)
6FAEidentyfikacja Phase GSM(1 bajt)
6F43status SMS(variable length)
 

Nastêpne dwa zbiory s± zdefiniowane w fazie 2+ GSM do u¿ycia w przysz³o¶ci

 

6F3EGroup Identifier Level 1(variable length)
6F3FGroup Identifier Level 2(variable length)
+ +

W Nokii 6185/6188 ten test wygl±da nastêpuj±co: + +

+ + + + +
+TASK4 0134  
+TASK5 015C
+TASK6 0138
+TASK7 0170
+
+ +

Menu 10-53 +
Zapisuje zbiór danych na kartê SIM + +

+ + + + + + +
+ + + + +
+    Write
+ data field
+from SIM-SCM
+  to SIM
+
+ + + + +
+Use menu to
+write data
+field to SIM
+  +
+
+ +

Ten test pozwala zapisaæ zbiór danych na karcie SIM + +

Przed jego u¿yciem adres zbioru powinien byæ zapisany na pozycji 34 +ksi±¿ki telefonicznej na karcie SIM (w notacji szesnastkowej) - odpowiednie +adresy s± podane w specyfikacji GSM 11.11. Warto¶æ zbioru, która ma byæ +zapisana, powinna byæ natomiast umieszczona (w notacji szesnastkowej) +na pozycji 35 w ksi±¿ce telefonicznej karty SIM. + +

Rezultat ca³ej operacji zostanie zapisana na pozycji 36 w ksi±¿ce telefonicznej +karty SIM i przez chwilê pokazana na wy¶wietlaczu. + +

Mo¿liwo¶ci s± nastêpuj±ce: + +

+ + + + + + + + + + +
OKzbiór zosta³ przeczytany poprawnie
NOT BINARYz³y format danych
NOT FOUNDzbiór danych nie zosta³ znaleziony na karcie SIM
CARD ERRORkarta SIM nie odpowiedzia³a zgodnie z oczekiwaniami
NO RIGHTSbrak uprawnieñ do przeczytania zbioru (PIN2,adm..)
DATA ERRORthe data contents in SCM-location is coded wrongly
NOT STOREDnie mo¿na zapisaæ warto¶ci w pozycji 35 ksi±¿ki
NO ADDRESSnie mo¿na przeczytaæ adresu z pozycji 34 ksi±¿ki
UNKNOWNniezidentyfikowany b³±d
+ +

Je¿eli chcesz, aby zmiany zosta³y uwzglêdnione, czêsto konieczny +jest restart telefonu. + +

W Nokii 6185/6188 ten test wygl±da nastêpuj±co: + +

+ + + + +
+TASK8 0134  
+TASK9 015C
+TASK10 0138
+TASK11 0170
+
+ +

Menu 10-54 +
Informacje o blokach pamiêci + +

+ + + + + + +
+ + + + +
aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+
+ + + + +
ResF1  ResF2
+ResF3  ResF4
+ResF5  ResF6
+ResF7  ResF8
+
+ +

zawarto¶æ poszczególnych linijek (informacje o poszczególnych blokach): + +

+

    +
  1. 1, 2
  2. +
  3. 3, 4
  4. +
  5. 5, 6
  6. +
  7. 7, 8
  8. +
+ +

+

    +
  • aa - ilo¶æ zarezerwowanych bloków
  • +
  • bb - ilo¶æ wolnych bloków w najgorszym razie
  • +
+ +

W Nokii 6185/6188 ten test wygl±da nastêpuj±co: + +

+ + + + +
+TASK12 0134 
+TASK13 015C
+TASK14 0138
+TASK15 0170
+
+ +

Menu 10-55 +
Informacje o blokach pamiêci (nie ma go we wszystkich modelach - nie +maj± tak du¿ej pamiêci) + +

+ + + + + + +
+ + + + +
aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+aa bb  aa bb
+
+ + + + +
ResF9 ResF10
+ResF11ResF12
+ResF13ResF14
+ResF15ResF16
+
+ +

zawarto¶æ poszczególnych linijek (informacje o poszczególnych blokach): + +

+

    +
  1. 9, 10
  2. +
  3. 11, 12
  4. +
  5. 13, 14
  6. +
  7. 15, 16
  8. +
+ +

+

    +
  • aa - ilo¶æ zarezerwowanych bloków
  • +
  • bb - ilo¶æ wolnych bloków w najgorszym razie
  • +
+ +

W Nokii 7110 liczniki koñcz± siê na ResF11. + +

W Nokii 3110 test ten wygl±da jak Menu 10-56. + +

Menu 10-56 +
Informacje o blokach pamiêci + +

+ + + + + + +
+ + + + +
 aaaaaa bbb 
+ cccccccc

+
+ + + + +
 Ptr   Cntr 
+ Task

+
+ +

+

    +
  • +aaaaaa - wska¼nik do pamiêci, sk±d zosta³a wywo³ana podwójna dealokacja +(w syst. szesnastkowym)
  • + +
  • +bbb - licznik nieudanych dealokacji
  • + +
  • +cccccccc - nazwa zadania, które próbowa³o wykonaæ podwójn± dealokacjê bloku +pamiêci (ich listê znajdziesz w opisie Menu 10-35). + + + +
  • +
+ +

Ten test zawiera poprawne warto¶ci tylko, gdy licznik bbb jest ró¿ny od 0. + +

W Nokii 3110 wygl±da jak Menu 10-57. + +

Menu 10-57 +
Stan pamiêci telefonu przed restartem + +

+ + + + + + +
+ + + + +
aaaaaaaaaaaa
+aaaaa...
+bbbbbbbb
+
+ + + + +
 Status of
+ stacks
+ Block sets 
+
+ +

+

    +
  • +aaaaaa... - stan ka¿dego stosu przed restartem. Pierwsza pozycja oznacza +stan stosu 0, druga stan stosu 1, itd. Ostatnia pozycja zawiera stan stosu +systemowego (System stack). Ilo¶æ stosów zale¿y od konfiguracji oprogramowania. +Mo¿liwe przyjmowane warto¶ci s±: + +

    +

      +
    • 0: stan stosu w porz±dku (brak przepe³nienia) - tak jest normalnie !
    • +
    • 1: co¶ ¼le (przepe³nienie stosu)
    • +
    +

    +

  • + +
  • +bbbbbbb - stan ka¿dego ustawienia bloku pamiêci przed restartem. Pierwsza +pozycja oznacza stan 1 bloku pamiêci, 2 2 bloku, itd. Mo¿liwe przyjmowane +warto¶ci: + +

    +

      +
    • 0: wszystko w porz±dku
    • +
    • 1: blok zape³niony - tak jest normalnie !
    • +
    • 2: b³±d (de)alokacji albo ogólne uszkodzenie pamiêci
    • +
    +
  • + +
+ +

Ten test zawiera poprawne warto¶ci tylko, gdy zosta³o wykonane nieznane +przerwanie (ewentualnie mia³o miejsce przepe³nienie stosu). W niektórych +telefonach mo¿liwe jest "zmuszenie" ich do wykonania restartu w zwi±zku z +przepe³nieniem stosu (patrz pytanie 9) i +obejrzenie dzia³ania tego testu... + +

W Nokii 6185/6188 wygl±d testu jest inny: + +

+ + + + +
+ +16:3A 32:26
+64:18 128:21
+168:14
+264:0E +
+
+ + +
Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net5.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net5.htm new file mode 100644 index 0000000..8c05d6f --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net5.htm @@ -0,0 +1,1994 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 6/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (6/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

Menu 10-58 + + + + + +
+384:02      
+512:02
+752:02
 
+
+ +

Menu 10-59 + + + + + +
+ +0087
+00 00 00 00 

  + +

+ +

Menu 10-60 + +

+ + + + + + +
+ + + + +
 FIELD TEST 
+  DISPLAY 
+ COUNTERS 
+   RESET
+
+ + + + +
Use menu to
+reset field
+test display
+counters
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿esz wyzerowaæ liczniki od +Menu +10-41 do Menu 10-43 i od Menu +10-61 do Menu 10-66. + +

+ + + + + + +
Je¿eli wyzerujesz te liczniki na pocz±tku ka¿dego miesi±ca, to bêdziesz +móg³(mog³a) porównaæ ilo¶æ wys³anych SMSów +(Menu 10-65) i rozmów (Menu +10-63) z Twoim rachunkiem telefonicznym. +Dodatkowo (w niektórych kartach prepaid - np. Tak-Tak) pobierana jest z góry +op³ata za wys³anie pewnej ilo¶ci SMSów +- je¿eli wyzerujesz te liczniki na pocz±tku "cyklu", bêdzie wiedzieæ, kiedy +z Twojego konta zostan± odjête kolejne pieni±dze... +
+ +

Menu 10-61 + +

+ + + + + + +
+ + + + +
NOPSW  :aaaa
+SYNCR  :bbbb
+RESELEC:cccc
+
+ + + + +
PSWMesgCntr
+SyncMeasCntr
+CellReselCtr
+
+ +

+

    +
  • +aaaa - licznik (szesnastkowy) zliczaj±cy komunikaty MDI_NO_PSW_FOUND +z DSP
  • + +
  • +bbbb - licznik (dziesiêtny) prób zmierzenia synchronizacji. Je¿eli przekroczy +9999, pokazywane s± cztery x.
  • + +
  • +cccc - licznik (szesnastkowy) powtórnych wyborów komórki
  • +
+ +

Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je +wyzerowaæ u¿ywaj±c Menu 10-60. S± one zerowane, +gdy osi±gn± warto¶ci maksymalne. + +

W telefonach dualnych pojawi siê takie Menu 10-61: + +

+ + + + + + +
+ + + + +
aaaaa  bbbbb
+ccccc  ddddd
+eeeee  fffff
+ggggg  hhhhh
+
+ + + + +
NOPswGSM DCS
+Sync GSM DCS
+reselG>G D>D
+reselG>D D>G
+
+ +

+

    +
  • +aaaaa - dla GSM 900: licznik (dziesiêtny) zliczaj±cy komunikaty MDI_NO_PSW_FOUND +z DSP
  • + +
  • +bbbb - dla GSM 1800: licznik (dziesiêtny) zliczaj±cy komunikaty MDI_NO_PSW_FOUND +z DSP
  • + +
  • +ccccc - dla GSM 900: licznik (dziesiêtny) prób zmierzenia synchronizacji. +Je¿eli przekroczy 99999, pokazywane jest piêæ x.
  • + +
  • +ddddd - dla GSM 1800: licznik (dziesiêtny) prób zmierzenia synchronizacji. +Je¿eli przekroczy 99999, pokazywane jest piêæ x.
  • + +
  • +eeeee - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 900 - GSM +900
  • + +
  • +fffff - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 1800 - GSM +1800
  • + +
  • +ggggg - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 900 - GSM +1800
  • + +
  • +hhhhh - licznik (dziesi±tkowy) powtórnych wyborów komórki GSM 1800 - GSM +900
  • +
+ +

Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je +wyzerowaæ u¿ywaj±c Menu 10-60. S± one zerowane, +gdy osi±gn± warto¶ci maksymalne. + +

W Nokii 6185/6188 jest on jeszcze inny: + +

+ + + + +
+V
+aaaaaaaaaaaa
+bbbbbbbbbb
+ccccccc +
+ +

    +
  • aaaaaaaaaaaa - wersja oprogramowania telefonu
  • +
  • bbbbbbbbbb - data oprogramowania telefonu
  • +
  • ccccccc - oznaczenie kodowe telefonu (NSD-3AX)
  • +
+ +

+ + + + + + +
Ten telefon pokazuje te informacje równie¿ po u¿yciu kodu *#837#. +Je¿eli chcesz siê wiêcej dowiedzieæ o wewnêtrznym oprogramowaniu telefonów Nokia +(ró¿nice, wersje, itd.), kliknij tutaj.
+ +

Menu 10-62 + +

+ + + + + + +
+ + + + +
 PSW  :aaaa 
+ SYNCR:bbbb
+ BCCH :cccc 
+ BCCHE:dddd
+
+ + + + +
NeghbrPSWCtr
+SyncMeasCntr
+BCCHMeasAtmp
+BCCHExtMeAtm
+
+ +

+

    +
  • +aaaa - ilo¶æ prób pomiarów PSW w s±siednich komórkach
  • + +
  • +bbbb - ilo¶æ prób zmierzenia synchronizacji w s±siednich komórkach
  • + +
  • +cccc - ilo¶æ prób pomiarów kana³ów +BCCH +(tzn. jako¶ci transmisji z nimi) w s±siednich komórkach (patrz opis C1)
  • + +
  • +dddd - ilo¶æ prób rozszerzonych pomiarów kana³ów BCCH +(tzn. jako¶ci transmisji z nimi) w s±siednich komórkach (patrz opis C1)
  • +
+ +

Warto¶ci liczników s± zapamiêtywane przy wy³±czaniu telefonu. Mo¿esz je +wyzerowaæ u¿ywaj±c Menu 10-60. S± one zerowane, +gdy osi±gn± warto¶ci maksymalne. + +

W Nokii 6185/6188 ten test wygl±da inaczej: + +

+ + + + +
+DSP ROM 2   
+VERS 430
+BETA 0014
 
+
+ +

Menu 10-63 + +

+ + + + + + +
+ + + + +
  aa    bb
+  ccc   ddd 
+  eee   fff
+
+ + + + +
CalRel RelDi
+MOCAtmp MOOK
+AllMT   MTOK
+
+ +

+

    +
  • +aa - tutaj znajdziesz przyczynê zakoñczenia ostatniego po³±czenia (parametr +ten jest równie¿ podawany w Menu 10-2 +i Menu 10-39 (w tym ostatnim menu +znajdziesz wyja¶nienia - patrz opis pierwszego parametru))
  • + +
  • +bb - kolejna informacja o zakoñczeniu ostatniego po³±czenia: + +

    +

      +
    • +UN: nieznana (przyk³adowo: od w³±czenia Twojego telefonu nie by³y wykonywane +¿adne po³±czenia)
    • + +
    • +IN: przyczyna wewnêtrzna (przyk³adowo: w³±czy³e¶(a¶) w Menu +10-17 test BTSa, telefon nie odnalaz³ +sieci na podanym kanale, a Ty próbowa³e¶(a¶) wykonaæ po³±czenie)
    • + +
    • +MT: przerwanie przez sieæ
    • + +
    • +MO: nast±pi³o roz³±czenie (od³o¿enie s³uchawki) z którego¶ telefonu
    • +
    +

    +

  • + +
  • +ccc - ilo¶æ wybieranych po³±czeñ z Twojego telefonu
  • + +
  • +ddd - ilo¶æ poprawnie zrealizowanych po³±czeñ wychodz±cych z Twojego telefonu +(tzn. ile razy dodzwoni³e¶(a¶) siê do Twojego rozmówcy)
  • + +
  • +eee - ilo¶æ wszystkich rozmów przychodz±cych
  • + +
  • +fff - ilo¶æ odebranych rozmów przychodz±cych
  • +
+ +

Po osi±gniêciu warto¶ci maksymalnej liczniki s± zerowane (mo¿esz to te¿ +zrobiæ w Menu 10-60). Ich warto¶ci (od licznika +ccc w³±cznie) s± zapamiêtywane przy wy³±czaniu telefonu. + +

W Nokii 6185/6188 ten test wygl±da inaczej: + +

+ + + + +
+ +C1M 00      
+C1L 00
+C2M 00
+C2L 03 +
+
+ +

Menu 10-64 +
Zawiera m.in. informacje, ile razy Twój telefon informowa³ sieæ o swoim +po³o¿eniu (patrz równie¿ opis Menu 10-10) + +

+ + + + + + +
+ + + + +
 aa bbb ccc 
+ dd eee fff 

+
+ + + + +
Nfai NL NLOK
+PFai PL PLOK
+ Loc update
+  counters
+
+ +

+

    +
  • +aaa - kod b³êdu (zerowany po w³±czeniu telefonu) przy ostatnim b³êdnym +Location +Update (tzn. zmienia siê tylko wtedy, gdy gdy wyst±pi³ b³±d przy jego +wykonywaniu). Znajdziesz go równie¿ w Menu +10-39 - jest to warto¶æ parametru MM (tam podane s± równie¿ warto¶ci +kodów z wyja¶nieniami).
  • + +
  • +bbb - ile razy próbowano wykonaæ Location +Update
  • + +
  • +ccc - ilo¶æ prób wykonania Location +Update zakoñczonych sukcesem
  • + +
  • +ddd - b³±d przy ostatnim PLU lub IMSI +Attach
  • + +
  • +eee - ile razy telefon próbowa³ wykonaæ PLU lub +IMSI Attach
  • + +
  • +fff - ilo¶æ udanych prób wykonania PLU lub +IMSI Attach
  • +
+ +

Warto¶ci tych liczników (z wyj±tkiem kodów b³êdów) s± zapamiêtywane przy +wy³±czaniu telefonu. Mo¿esz je wyzerowaæ w Menu 10-60 +(jest robione równie¿, gdy osi±gn± warto¶ci maksymalne). + +

+ + + + + + +
Je¿eli nie wy³±czasz telefonu i jeste¶ ca³y czas w zasiêgu swojej sieci, +to z tego menu mo¿esz siê dowiedzieæ (w przybli¿eniu), jak d³ugo jest w³±czony +(musisz w +Menu 10-10 sprawdziæ, +co ile jest zerowany licznik T3212 (parametr ccc) i pomno¿yæ tamten czas +przez parametr eee z tego menu). Mo¿esz u¿yæ do tego celu równie¿ licznika +z Menu 10-82 (jest dok³adniejszy, ale wymaga +w³±czenia którego¶ testu) albo menu serwisowego (Nokia 6130 lub 3210).
+ +

W Nokii 6185/6188 ten test wygl±da inaczej: + +

+ + + + +
+ +C3M 00      
+C3L 00
+C4M 00
+C4L 03 +
+
+ +

Menu 10-65 +
Menu zwi±zane z wiadomo¶ciami SMS +(raporty nie s± uwzglêdniane) + +

+ + + + + + +
+ + + + +
 aa bbb ccc 
+ dd eee fff
+ gggg
+
+ + + + +
SFai MO MOOK
+RFai MT MTOK
+Sched Msgs
+SMS counters
+
+ +

+

    +
  • +aaa - numer b³êdu przy wysy³aniu ostatniego SMSa +(zerowany po w³±czeniu telefonu): + +

    +

      +
    • +  1: 'Nie ma takiego numeru'
    • + +
    • + 21: 'Wys³anie nieudane tym razem' ('Message not sent this +time'). B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka +(gdy nie mo¿na jeszcze by³o ich by³o z niego wysy³aæ - przed 28.04.2000), +wysy³aniu pod b³êdny numer (dobre SMSC) albo przez SMSC zablokowane na +Twoj± sieæ.
    • + +
    • + 28: 'Nie ma takiego numeru'
    • + +
    • + 38: 'Wys³anie nieudane tym razem' ('Message not sent this +time'). B³±d przy wysy³aniu wiadomo¶ci przez SMSC zablokowane na Twoj± +sieæ.
    • + +
    • + 42: prawdopodobnie b³±d ten pojawia siê, gdy u¿yte SMSC +jest przeci±¿one (za du¿o wys³anych na raz wiadomo¶ci przez u¿ytkowników) +i nie mo¿e wys³aæ Twojej wiadomo¶ci
    • + +
    • + 50: "Sprawd¼ us³ugi operatora" ("Check operator services"). +B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka +(gdy nie mo¿na jeszcze by³o ich by³o z niego wysy³aæ - przed 28.04.2000). +
    • + +
    • +111: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). +Przyczyn± jest niew³a¶ciwy numer, pod który wysy³a³e¶ wiadomo¶æ (albo numer +SMSC)
    • + +
    • +166: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). +Pokazuje siê przy b³êdnym numerze SMSC albo SMSC zablokowanym na Twoj± +sieæ.
    • + +
    • +178: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). +B³±d pojawiaj±cy siê przy próbie wys³ania wiadomo¶ci z Tak-Taka +(gdy nie mo¿na tego jeszcze by³o z niego robiæ - przed 28.04.2000).
    • + +
    • +252: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). +Pojawia siê, gdy zosta³ wy³±czony nadajnik telefonu w Menu +10-45 albo telefon nie móg³ znale¼æ sieci (w te¶cie BTSa +z Menu 10-17 zosta³ ustawiony +taki kana³).
    • + +
    • +253: 'Nieudane wys³anie wiadomo¶ci' ('Message sending failed'). Pokazuje +siê przy b³êdnym numerze SMSC.
    • +
    +

    +

  • + +
  • +bbb - ilo¶æ prób wys³ania SMSów
  • + +
  • +ccc - ilo¶æ poprawnie wys³anych SMSów +(tzn. takich, które zosta³y zaakceptowane przez u¿yte centrum SMS - tylko +za nie zap³aci³e¶(a¶))
  • + +
  • +ddd - numer b³êdu przy otrzymywaniu ostatniego SMSa +(zerowany po w³±czeniu telefonu): + +

    +

      +
    • +22: pe³na pamiêæ przeznaczona na wiadomo¶ci (telefon próbowa³ +przyj±æ SMSa - zwiêkszy³a +siê warto¶æ licznika eee, nie zmieni³a siê warto¶æ fff). Informuje o tym +równie¿ mrugaj±ca koperta na samym górze wy¶wietlacza, a telefon pokaza³ +równie¿ oddzielny komunikat 'Brak miejsca na wiêcej wiadomo¶ci' ('No space +for new messages'). Je¿eli zapisujesz wiadomo¶ci na karcie SIM, ich ³±czna +ilo¶æ w 'Skrzynce nadawczej' ('Outbox') i 'Skrzynce odbiorczej' ('Inbox') +zale¿y w³a¶nie od niej (w ró¿nych sieciach komórkowych oferowane s± karty +SIM z ró¿n± ilo¶ci± mo¿liwych do zapisania wiadomo¶ci SMS +- dla kart Plusa wynosi ona 10, Ery +15, a Idei 30). Nie mo¿esz +wiêc dopisywaæ nowych wiadomo¶ci (komunikat 'Pe³na pamiêæ wiadomo¶ci' ('Message +memory full')). Je¿eli nie wykasujesz której¶ z ju¿ zapisanych wiadomo¶ci, +mo¿esz utraciæ te przychodz±ce (je¿eli sieæ nie dostarczy ich przez czas +okre¶lony przez ich nadawcê, zostan± bezpowrotnie wykasowane).
    • +
    +

    +

  • + +
  • +eee - ilo¶æ prób odebrania SMSów
  • + +
  • +fff - ilo¶æ poprawnie odebranych SMSów
  • + +
  • +gggg - ilo¶æ odebranych komunikatów nadawania komórkowego (czy obs³uguje je aktualnie u¿ywany +BTS, sprawdzisz w Menu 10-7): +ile razy Twój telefon odebra³ komunikaty tzw. cell-info (w³±czasz jego odbiór w Menu 4-2-2 w Nokii 5110) +oraz cell-broadcast (Menu 2-5 w Nokii 5110).
  • +
+ +

Warto¶ci tych liczników (z wyj±tkiem kodów b³êdów) s± zapamiêtywane przy +wy³±czaniu telefonu. Mo¿esz je wyzerowaæ w Menu 10-60 +(jest to robione równie¿, gdy osi±gn± maksymalne warto¶ci). + +

Je¿eli chcesz siê dowiedzieæ troszkê wiêcej o wysy³aniu SMSów +(albo poznaæ numery SMSC operatorów), zajrzyj pod adres www.vdheyden.demon.nl/sms/index1.htm. + +

+ + + + + + +
Spora czê¶æ programów komputerowych nie sygnalizuje u¿ytkownikowi, czy +wiadomo¶æ zosta³a poprawnie wys³ana - Ty bêdziesz móg³ to natomiast sprawdziæ +dziêki temu testowi.
+ +

W Nokii 3110 test ten wygl±da jak Menu 10-64. + +

W Nokii 6185/6188 ten test wygl±da inaczej: + +

+ + + + +
+ +C5M 00      
+C5L 00
+C6M 00
+C6L 03 +
+
+ +

Menu 10-66 +
Liczniki przekroczenia czasu zwi±zane z SMSami +(jak wiadomo, przy wysy³aniu takiej wiadomo¶ci mo¿na ustaliæ czas, przez +jaki czas sieæ bêdzie próbowa³a j± dostarczyæ do telefonu odbiorcy - przypuszczam, +¿e te liczniki s± w jaki¶ sposób z tym zwi±zane). + +

+ + + + + + +
+ + + + +
 aaa bbb cc 
+ ddd eee ff

+
+ + + + +
TR1 TR2 TRA 
+TC1 TC2 SCH 
+SMS timeout
+  counters
+
+ +

+

    +
  • aaa - licznik przekroczenia czasu dla TR1M
  • +
  • bbb - licznik przekroczenia czasu dla TR2M
  • +
  • cc - licznik przekroczenia czasu dla TRAM
  • +
  • ddd - licznik przekroczenia czasu dla TC1M
  • +
  • eee - licznik przekroczenia czasu dla TC2M
  • +
  • ff - licznik przekroczenia czasu dla nadawania komórkowego
  • +
+ +

Warto¶ci liczników za zapamiêtywane przy wy³±czaniu telefonu. Je¿eli osi±gn± +warto¶ci maksymalne, s± zerowane. Mo¿esz je równie¿ wyzerowaæ w Menu +10-60. + +

W Nokii 6185/6188 ten test wygl±da inaczej: + +

+ + + + +
+ +CT1 82      
+CT2 00
+RF 23
  +
+
+ +

Menu 10-67 + +

+ + + + +
+ +REC 00
+SEND 00     
+CTR 4C
+STA 68 +
+
+ +

Menu 10-68 + +

+ + + + +
+ +CNT 00      
+ACK 00

+M1M B3 +
+
+ +

Menu 10-70 +
Zawarto¶æ tymczasowych liczników DSP (szesnastkowe +warto¶ci komórek pamiêci oznaczanych w opisach jako r_dsp2ftd+0, r_dsp2ftd+1, +r_dsp2ftd+2, itd.) + +

+ + + + + + +
+ + + + +
aaaaa  bbbbb
+ccccc  ddddd
+eeeee  fffff
+ggggg  hhhhh
+
+ + + + +
 Temporary
+DSP counters
+ R DSP2FTD
+
+ +

Ten test jest u¿ywany przez debuggery +oprogramowania DSP. Mog± one wstawiaæ pewne +u¿yteczne informacje do okre¶lonych komórek pamiêci. Kiedy ten test jest wybrany, +MCU pokazuje zawarto¶æ tych komórek pamiêci +na wy¶wietlaczu w podanym wy¿ej formacie. + +

W Nokii 3110 test ten wygl±da jak Menu 10-80. + +

Menu 10-71, 10-72 +
Oba menu pozwalaj± kontrolowaæ ustawienia DSP + +

Je¿eli wejdziesz bezpo¶rednio do którego z nich, w obu zmieniaj± siê +cyferki pod AUDIO ENHANCEMENT - ich warto¶ci zale¿± od w³o¿onej karty SIM. +W zale¿no¶ci od tego, które z nich teraz ogl±da³e¶(a¶) (u¿ywaj±c strza³ek), +zmieni siê d¼wiêk (mog± siê np. pojawiæ okropne szumy i trzaski). Mo¿esz +mieæ wp³yw na te warto¶ci (mog± mieæ maksymaln± warto¶æ 65536) - wystarczy +je zapisaæ odpowiednio w 31 i 32 pozycji ksi±¿ki telefonicznej na karcie +SIM (jak to zrobiæ ? opis znajdziesz przy Menu +10-17). Parametr Conf z Menu 10-30 +pokazuje natomiast wybran± tutaj warto¶æ. ¯eby wróciæ do stanu wyj¶ciowego, +musisz wy³±czyæ i w³±czyæ telefon. Na jako¶æ d¼wiêku (tzn. czy przy pewnych +ustawieniach pojawiaj± siê zak³ócenia) nie wp³ywa pod³±czenie zestawu s³uchawkowego +i samochodowego. + +

+ + + + + + +
+ + + + +
    AUDIO
+ ENHANCEMENT
+    aaaaa
+
+ + + + +
Use menu to
+control DSP
+   audio
+enhancements
+
+ +

W Nokii 3110 test 71 wygl±da jak Menu 10-81. + +

Menu 10-73 +
Ogólne informacje o ustawieniach DSP + +

+ + + + + + +
+ + + + +
 aaa bb  aaa
+cccc bb cccc
+cccc bb cccc
+ cccc cccc
+
+ + + + +
DB1  B1  DB2
+HEX1 B2 HEX2
+HEX3 B3 HEX4
+  HEX5 HEX6
+
+ +

+

    +
  • +aaa - g³ówna g³o¶no¶æ (poziom sygna³u) w dB. Znak czê¶ci u³amkowej i znak +nie jest pokazywany (np. zamiast -10.5 zobaczysz 105)
  • + +
  • +bb - g³ówna warto¶æ (podana szesnastkowo) bajtu (u¿ywana dla mieszanych +znaczników).
  • + +
  • +cccc - g³ówna warto¶æ szesnastkowa
  • +
+ +

Angielskie opisy pisz± o tym te¶cie: +
"Warto¶ci liczników s± pokazywane tylko w czasie rozmowy +(gdy w³±czone s± testy monitora). Je¿eli po³±czenie +jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci +nie s± zapamiêtywane przy wy³±czaniu telefonu." + +

...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

W Nokii 3110 test ten wygl±da jak Menu 10-82. + +

Menu 10-74 +
Informacje o g³o¶no¶ci podczas rozmowy + +

+ + + + + + +
+ + + + +
  aaa  bbb  
+       ccc
+  dd    ee
+
+ + + + +
DSigL USigL
+      NseLvl
+ DTbl  UTbl
+
+ +

+

    +
  • +aaa - g³o¶no¶æ sygna³u z telefonu naszego rozmówcy.
  • + +
  • +bbb - g³o¶no¶æ sygna³u z Twojego telefonu.
  • + +
  • +ccc - g³o¶no¶æ tzw. "komfortowego szumu" (patrz opis DTX).
  • + +
  • +dd - warto¶æ DRC dla sygna³u z telefonu naszego rozmówcy (dwucyfrowa liczba +ca³kowita)
  • + +
  • +ee - warto¶æ DRC dla sygna³u z Twojego telefonu (dwucyfrowa liczba ca³kowita)
  • +
+ +

Pierwsze trzy parametry s± podawane w dB i obliczane na podstawie DRC. +Znak czê¶ci u³amkowej i znak liczby nie s± pokazywane (np. zamiast +-10.5 zobaczysz 105). + +

Angielskie opisy pisz± o tym te¶cie: +
"Warto¶ci liczników s± pokazywane tylko w czasie rozmowy +(gdy w³±czone s± testy monitora). Je¿eli po³±czenie +jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci +nie s± zapamiêtywane przy wy³±czaniu telefonu." + +

...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

W Nokii 3110 test ten wygl±da jak Menu 10-72. + +

Menu 10-75 +
Informacje o trybie pracy pod³±czonych akcesoriów d¼wiêkowych + +

+ + + + + + +
+ + + + +
Mod:aaaaaaa
+AudReq: bbbb
+AccMod: cccc
+H2Path: dddd
+
+ + + + +
ExtAudStatus
+AudioRequest
+AccAudMode
+
+ +

+

    +
  • +aaaaa - rodzaj pod³±czonych do telefonu akcesoriów d¼wiêkowych +(dla niektórych telefonów mo¿liwe warto¶ci to: +HP, HF, HEADSET, EXT albo HP_OFFHO). W Nokii 7110 podawany w Menu 10-99. + +

    Je¶li chodzi o Nokiê 5110, przyjmowane by³y nastêpuj±ce +warto¶ci: + +

    + + + + + + + + + + + + +
    warto¶æ
    stan normalny (nie pod³±czono nic, jest kabel FBUS/M2BUS albo ³adowarka)HP
    zestaw s³uchawkowy (telefon wy¶wietla Mikrozestaw (Headset)) +
    Mo¿esz go zasymulowaæ +
    ³±cz±c piny 1-2 z³±cza na dole telefonu +
    (patrz±c od lewej strony, gdy telefon le¿y wy¶wietlaczem do góry). +
    W Nokii 9110 mo¿esz do tego u¿yæ równie¿ Menu +10-92.
    HD (skrót od HeaDset)
    zestaw samochodowy (telefon wy¶wietla Samochód (Car)) +
    Mo¿esz go zasymulowaæ +
    ³±cz±c piny 2-3 z³±cza na dole telefonu +
    (patrz±c od lewej strony, gdy telefon le¿y wy¶wietlaczem do góry)
    HFU 1 (skrót od Hands Free Unit 1)
    + +

    Powy¿sze metody symulacji zestawów s± poprawne dla Nokii 5xxx, 6xxx +i zapewne 9110 (u¿ywasz ich na W£ASN¡ odpowiedzialno¶æ). + +

    Po pod³±czeniu (symulacji) obu zestawów w telefonie uaktywnia³a siê funkcja +"Odbiór samoczynny" ("Automatic answer") - Menu 4-1-6 w Nokii 5110 - dziêki +której telefon mo¿e automatycznie odbieraæ przychodz±ce po³±czenie. W Nokii 9110 +mo¿esz j± uaktywniæ równie¿ m.in. u¿ywaj±c Menu 10-92. +

    +

  • + +
  • +bbbb - audio_request bitmap in hex
  • + +
  • +cccc - tryb pracy akcesoriów d¼wiêkowych
  • + +
  • +dd - ¶cie¿ka dla HFU-2 (Hands Free Unit-2)
  • +
+ +

W Nokii 3110 test ten wygl±da jak Menu 10-73. + +

Menu 10-76 +
Informacje o d¼wiêku, który Ty s³yszysz w swoim telefonie + +

+ + + + + + +
+ + + + +
 Vab  Pccc
+ Cddd CAeee
+PAfff
+
+ + + + +
EVol PeakVal
+CutOff COAve
+PkAver
+
+ +

+

    +
  • +ab - g³o¶no¶æ (poni¿sze informacje s± na pewno poprawne dla Nokii 5110): + + + + + + + + + + + + + + + + + + + + +
    ab
    g³o¶nik wy³±czony0F
    wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 1)08
    wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 2)04
    wydawany jest d¼wiêk po naci¶niêciu klawisza (poziom g³o¶no¶ci 3 albo +w³±czone g³o¶ne d¼wiêki)00
    + +

    W czasie po³±czenia parametr a przyjmuje warto¶æ "A", natomiast parametr +b pozwala obliczyæ ustawion± g³o¶no¶æ d¼wiêku (musisz przeliczyæ go na +warto¶æ dziesiêtn± i odj±æ od niego 11) - tê ostatni± mo¿esz równie¿ sprawdziæ +w Menu 10-30. Przy pod³±czonym +zestawie s³uchawkowym parametr a przyjmuje natomiast warto¶æ "C" (wzór do obliczenia +g³o¶no¶ci rozmowy przyjmuje wtedy warto¶æ 10 - b). Je¿eli do telefonu pod³±czony +jest zestaw samochodowy, parametr a jest równy "2", a wzór na g³o¶no¶æ podczas rozmowy +przyjmuje warto¶æ 10 - b. + +

    Je¿eli kto¶ do Ciebie dzwoni (nie odebra³e¶(a¶) jeszcze po³±czenia), +telefon nie zawsze pokazuje g³o¶no¶æ emitowanego d¼wiêku (zachowuje siê +tak jak przy wy³±czonym g³o¶niku) - nie wiem, czy jest to b³±d w oprogramowaniu +testuj±cym (wersja 5.07), czy co¶ innego. Tylko bowiem przy pewnych kombinacjach +ustawieñ rodzaju dzwonka (ci±g³y, wzrastaj±cy, itp.) i jego g³o¶no¶ci jest +ona pokazywana (podajê od razu warto¶ci obu parametrów): poziom 1 - A7, +poziom 2 - A6, poziom 4 - A4, poziom 5 - A0. +

  • + +
  • +

    ccc - maksymalna g³o¶no¶æ sygna³u z telefonu Twojego rozmówcy w czasie +ostatniej ramki (podawana w dB). Znak i znak czê¶ci dziesiêtnej nie s± +pokazywane (np. zamiast -10.5 zobaczysz 105).

  • + +
  • +

    ddd - licznik pokazuj±cy ilo¶æ próbek sygna³u akustycznego, w których nast±pi³o +przepe³nienie (tak jak przesterowanie), w czasie ostatniej ramki.

  • + +
  • +

    eee - ¶rednia licznika podawanego jako poprzedni parametr. Znak i znak +czê¶ci dziesiêtnej nie s± pokazywane (np. zamiast -10.5 zobaczysz 105).

  • + +
  • +

    fff - ¶rednia g³o¶no¶æ s³yszanego przez Ciebie d¼wiêku

  • +
+ +

Angielskie opisy pisz± o tym te¶cie: +
"Warto¶ci liczników s± pokazywane tylko w czasie rozmowy +(gdy w³±czone s± testy monitora). Je¿eli po³±czenie +jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci +nie s± zapamiêtywane przy wy³±czaniu telefonu." + +

...ale ja tego nie zauwa¿y³em i u mnie zawsze (bez pierwszego) by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

Menu 10-77 +
Informacje o d¼wiêku, który s³yszy Twój rozmówca (tzn. parametry d¼wiêku +wysy³anego przez Twój telefon) + +

+ + + + + + +
+ + + + +
 Paaa  Abbb 
+ Cccc CAddd

+
+ + + + +
MicPeak MAve
+CutOff COAve

+
+ +

+

    +
  • +aaa - maksymalna g³o¶no¶æ wysy³anego d¼wiêku w czasie ostatniej ramki w +dB. Znak czê¶ci u³amkowej i znak liczby nie s± pokazywane (np. zamiast +-10.5 zobaczysz 105).
  • + +
  • +bbb - przeciêtna g³o¶no¶æ wysy³anego d¼wiêku w dB. Znak czê¶ci u³amkowej +i znak liczby nie s± pokazywane (np. zamiast -10.5 zobaczysz 105).
  • + +
  • +ccc - licznik pokazuj±cy ilo¶æ próbek sygna³u akustycznego, w których nast±pi³o +przepe³nienie (tak jak przesterowanie), w czasie ostatniej ramki.
  • + +
  • +ddd - ¶rednia licznika podawanego jako poprzedni parametr.
  • +
+ +

Angielskie opisy pisz± o tym te¶cie: +
"Warto¶ci liczników s± pokazywane tylko w czasie rozmowy +(gdy w³±czone s± testy monitora). Je¿eli po³±czenie +jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. Ich warto¶ci +nie s± zapamiêtywane przy wy³±czaniu telefonu." + +

...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

W Nokii 3110 test ten wygl±da jak Menu 10-75. + +

Menu 10-78 +
Kolejne parametry DSP + +

+ + + + + + +
+ + + + +
aaa bbb ccc 
+ddd eee fff
+ggg h i jjj
+ kkkk llll
+
+ + + + +
EAA Ada ERL 
+RxG TxG GLi
+TxN Sta Mod
+ RVAD TVAD
+
+ +

+

    +
  • +aaa - poziom cyfrowego t³umienia echa z punktu widzenia DSP +:-) w dB. Znak liczby i czê¶ci u³amkowej nie s± pokazywane (np. -10.5 dB +bêdzie wy¶wietlane jako "105", -0.5 dB za¶ jako "  5"). 20*log10( +Q15 )
  • + +
  • +bbb - poziom adaptacyjnego t³umienia echa (znak czê¶ci u³amkowej nie jest +pokazywany). 20*log10( Q15 )
  • + +
  • +ccc - poziom st³umienia sygnalu, który wraca po odbiciu (znak czê¶ci u³amkowej +nie jest pokazywany). 20*log10( Q15 )
  • + +
  • +ddd - t³umienie t³umika sygna³u odbieranego (akustyczne) w dB. Znak liczby +i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_rx_gain )
  • + +
  • +eee - t³umienie t³umika sygna³u nadawanego (akustyczne) w dB. Znak liczby +i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_tx_gain )
  • + +
  • +fff - ograniczenie dla dwóch powy¿szych parametrów (ddd i eee) - znak liczby +i czê¶ci u³amkowej nie s± pokazywane. 20*log10( Q15 aec_gain_limit )
  • + +
  • +ggg - g³o¶no¶æ nadawanego "komfortowego szumu" (patrz opis DTX) +w dB. Znak czê¶ci u³amkowej i znak liczny nie s± pokazywane. 20*log10( +Q15 aec_tx_noise)
  • + +
  • +h - stan filtru adaptacyjnego. (Q0 aec_nlms_state) (bit UPDATE << +2) | (bit NLMS2 << 1) | (bit NLMS1)
  • + +
  • +i - informacja, o tym czy jest generowany tzw. "komfortowy szum" - patrz +opis DTX (warto¶ci 0 lub 1) (Q0 AEC_TX_COMF_GEN)
  • + +
  • +jjj - tryb pracy uk³adu t³umików i filtru adaptacyjnego (AEC) (byte Q0 +s_AEC_mode)
  • + +
  • +kkkk - ostatnich 16 decyzji uk³adu wykrywania g³osu dla sygna³u odbieranego +(RX VAD) w formacie szesnastkowym. Hex( Q0 aec_rx_vadreg )
  • + +
  • +llll - ostatnich 16 decyzji uk³adu wykrywania g³osu dla sygna³u nadawanego +(TX VAD) w formacie szesnastkowym. Hex( Q0 aec_tx_vadreg )
  • +
+ +

U mnie warto¶ci tych liczników zawsze by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

W Nokii 3110 test ten wygl±da jak Menu 10-76. + +

Menu 10-79 +
Wy¶wietlacz equalizera audio + +

+ + + + + + +
+ + + + +
aaaaa bbbbb
+ccccc ddddd
+-ee.e -ff.f 
+
+ + + + +
MiCutB MiCTA
+EpCutB EPCTA
+MiCLev EarLv
+
+ +

+

    +
  • +aaaaa - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie +(tak jak przesterowanie), przed przej¶ciem przez equalizer mikrofonowy +w postaci 16-bitowej ca³kowitej (dziesiêtnej) liczby.
  • + +
  • +bbbbb - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie +(tak jak przesterowanie), po przej¶ciu przez equalizer mikrofonowy w postaci +16-bitowej ca³kowitej (dziesiêtnej) liczby.
  • + +
  • +ccccc - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie +(tak jak przesterowanie), przed przej¶ciem przez equalizer g³o¶nikowy w +postaci 16-bitowej ca³kowitej (dziesiêtnej) liczby.
  • + +
  • +ddddd - próbki sygna³u akustycznego, w których nast±pi³o przepe³nienie +(tak jak przesterowanie), po przej¶ciu przez equalizer g³o¶nikowy w postaci +16-bitowej ca³kowitej (dziesiêtnej) liczby.
  • + +
  • +-ee.e - g³o¶no¶æ d¼wiêku wychwytywanego przez mikrofon w formacie dB. Wymaga +funkcji matematycznej log10 w MCU. +16 bitowa warto¶æ w DSP, +0 dB = 32768.
  • + +
  • +-ff.f - g³o¶no¶æ sygna³u po przej¶ciu przez equalizer g³o¶nikowy w formacie +dB. Wymaga funkcji matematycznej log10 w MCU. +16 bitowa warto¶æ w DSP, +0 dB = 32768.
  • +
+ +

Angielskie opisy pisz± o tym te¶cie: +
"Warto¶ci liczników s± pokazywane tylko w czasie rozmowy. Je¿eli po³±czenie +jest przerwane, zatrzymuj± siê one na ostatnich warto¶ciach. +Ich warto¶ci nie s± zapamiêtywane przy wy³±czaniu telefonu. Warto¶ci liczników +aaaaa-ddddd s± obliczane w DSP (i tylko +nowe s± wysy³ane do MCU. Poziomy sygna³u +mikrofonowego i g³o¶nikowego s± obliczane w DSP, +który wysy³a liniowe warto¶ci do MCU, który z kolei +dokonuje liniowej transformacji dB (20*log10(x)) do warto¶ci g³o¶no¶ci". + +

...ale ja tego nie zauwa¿y³em i u mnie zawsze by³y równe 0 +(czy trzeba jako¶ dodatkowo w³±czyæ ten test ?) + +

W Nokii 3110 test ten wygl±da jak Menu 10-77. + +

Menu 10-80 + +

+ + + + + + +
+ + + + +
+
   TIMERS   
+   RESET 
+
+ + + + +
  Use menu
+  to reset
+ field test 
+   timers
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿esz wyzerowaæ liczniki z Menu +10-82. Telefon robi to automatycznie, gdy od³±czasz od niego ³adowarkê. +Wed³ug opisów angielskich, dzieje siê tak równie¿, gdy akumulator jest +na³adowany (ja tego nie zaobserwowa³em). + +

W Nokii 3110 test ten wygl±da jak Menu 10-83. + +

Menu 10-81 + +

+

+ + + + + +
+ + + + +
+
   TIMERS   
+  aaaaaaaa
+
+ + + + +
Use menu to
+control test
+  display
+  timers
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿esz w³±czyæ (aaaaaaaa=ENABLED) lub +wy³±czyæ (aaaaaaaa=DISABLED) licznik z Menu 10-82. + +

W Nokii 3110 test ten wygl±da jak Menu 10-84. + +

Menu 10-82 + +

+ + + + + + +
+ + + + +
aaaaa bbbbb 
+ccccc ddddd
+ TIMERS eee
+
+ + + + +
PwrOn InServ
+NSPS  TxON
+   Timers
+   Status
+
+ +

+

    +
  • +aaaaa - informacja, ile minut (dwie ostatnie cyfry) i godzin (trzy pierwsze) +telefon by³ w³±czony
  • + +
  • +bbbbb - informacja, ile minut (dwie ostatnie cyfry) i godzin (trzy pierwsze) +telefon by³ zalogowany do sieci
  • + +
  • +ccccc - informacja, ile minut (dwie ostatnie cyfry) i godzin (trzy pierwsze) +telefon by³ w stanie NSPS
  • + +
  • +ddddd - informacja, ile minut (dwie ostatnie cyfry) i godzin (trzy pierwsze) +by³ w³±czony nadajnik telefonu
  • + +
  • +eee - informacja, czy liczniki s± w³±czone (ON) czy wy³±czone (OFF) (zmieniæ +to mo¿na w Menu 10-81)
  • +
+ +

Wed³ug angielskich opisów maksymalna warto¶æ wynosi 99 h i 59 minut. Je¿eli +pierwszy (aaaaa) licznik osi±gnie tê warto¶æ, wszystkie liczniki stan±. + +

Niestety liczniki dzia³aj± tylko wtedy, gdy w³±czysz jaki¶ test w monitorze +sieci (tzn. gdy wy³±czysz testy, nie bêd± odmierzaæ czasu pomimo wy¶wietlonej +informacji, ¿e s± w³±czone). Oznacza to, ¿e faktycznie mo¿esz tutaj +znale¼æ informacjê o tym, ile korzystasz z monitora sieci (pierwszy parametr), +ile czasu telefon by³ w tym czasie zalogowany do sieci (nastêpny), itd. + +

+ + + + + + +
Je¿eli nie mo¿esz zrezygnowaæ z odmierzania czasu, proponujê w Menu +10-83 wybraæ SHOW TASK MSG BUFS i w³±czyæ +Menu +10-87 (wy¶wietlacz bêdzie pusty). Jedyn± niedogodno¶ci± tego rozwi±zania +bêdzie to, ¿e nie bêdziesz mia³(a) identyfikacji osób dzwoni±cych do Ciebie. +

W menu serwisowym Nokii 6130 (kod +*#WARRANTY#) i 3210 (kod *#WAR0ANTY#) +pod pozycj± "Life Timer" znajdziesz informacjê, ile pe³nych dni telefon +pracowa³ w sieci (pierwsze dwie cyfry przed dwukropkiem) oraz ile czasu +rozmawia³e¶(a¶) - reszta cyfr (dwie ostatnie cyfry przed przecinkiem oznaczaj± +godziny, cyfry po nim minuty). Przyk³adowo, 0701:35 to 7 dni (w przeci±gu +których telefon dzia³a³ w sieci) i 1 h 35 minut czasu rozmowy.

+ +

W Nokii 3110 test ten wygl±da jak Menu 10-85. + +

Menu 10-83 + +

+

+ + + + + + + + + +
+ + + + +
+
 SHOW TASK 
+ STACKS
+
+ + + + +
+
 SHOW TASK 
+ MSG BUFS
+
+ + + + +
+
 SHOW TASK 
+ FAST BUFS
+
+ + + + +
Use menu to
+select shown
+ task info
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿na spowodowaæ, ¿e w Menu +10-84, Menu 10-85, Menu 10-86, Menu 10-87 s± pokazywane +warto¶ci innych liczników: + +

+

    +
  • +"STACKS" - pokazuje wolne miejsce w bloku pamiêci w najgorszym razie
  • + +
  • +"MSG BUFS" - pokazuje najwy¿sz± ilo¶æ bêd±cych w takcie realizacji wiadomo¶ci.
  • + +
  • +"FAST BUFS" - pokazuje najwy¿sz± ilo¶æ bed±cych w trakcie realizacji szybkich +wiadomo¶ci.
  • +
+ +

W Nokii 3110 test ten wygl±da jak Menu 10-86. + +

Menu 10-84, 10-85, 10-86 +
Tak ogólnie wygl±daj± te menu: + +

+ + + + +
 aaaa bbbb  
+ cccc dddd
+ eeee ffff
+ gggg hhhh
+ +

A tak wygl±da ich pomoc: + +

+ + + + + + + + +
+ + + + +
IDLE  DEV_IO
+LOCAL MDISND
+MDIRCV  UI
+ TONE   PN
+
+ + + + +
 FBUS   AUD
+L1CTRL L1MEA
+L1SYSP  L2
+ CC     MM
+ +

albo (w Nokii 3210) tak: +

+ + + + +
IRDA  FBUS
+AUD  L1CTRL
+L1MEA L1SYSP
+L2    CC
+

+ + + + +
 RR     RM
+ SMS    EM
+SIMUPL SIML2
+ DDI
+ +

albo (w Nokii 3210) tak: +

+ + + + +
MM    RR
+RM    SMS
+EM    SIMUPL
+SIML2 DDI
+ +

albo (w Nokii 9110) tak: +

+ + + + +
 RR     RM
+SMS     EM
+SIMUPL SIML2
+ DGC  DGNTB
+

+ +

+

    +
  • +aaaa, bbbb,... - zadanie 0, 1, itd.
  • +
+ +

Liczby okre¶laj±ce, jak bardzo komórki pamiêci zwi±zane ze stosami s± puste +w najgorszym wypadku (je¿eli pokazuje siê 0, stos jest pe³ny). Warto¶ci +nie s± zapisywane w pamiêci przy wy³±czaniu telefonu. + +

W Nokii 3110 test 86 wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
MCUSW  aaaaa
+DATE   cccccc
+CHKSUM dddd
+DSP    eee
+
+ + + + +
MCUSWVersion
+DateOfMCUSW
+MCUSWChecksum
+DSPSWVersion
+
+ +

Znaczenie parametrów aaaaa,cccccc, dddd i eee znajdziesz w Menu +10-88. + +

Menu 10-87 + +

+ + + + + + +
+ + + + +
 aaaa  bbbb 

+
+ + + + +
  FIQ  IRQ  

+
+ +

+

    +
  • +aaaa - OS_SYSTEM_STACK
  • +
+ +

W Nokii 9110 menu to wygl±da natomiast tak: + +

+ + + + + + +
+ + + + +
 cccc  dddd 
+ aaaa  bbbb 

+
+ + + + +
 DGTB  DGFAX
+ FIQ   IRQ

+
+ +

W Nokii 7110 jest jeszcze trochê inne: + +

+ + + + + + +
+ + + + +
+1040010363800
+  700  800
+  220
+    476   480 +
+
+ + + + +
+DGN  DGF  SCKT
+PCL  PWB
+PPC
+FIQ    IRQ +
+
+ +

Stan licznika nie jest zapisywany przy wy³±czaniu telefonu. + +

Menu 10-88 + +

+ + + + + + +
+ + + + +
aaaaa bbbbbb
+Date  cccccc
+ChkSum dddd
+eeeeeeeeeeee
+
+ + + + +
MCUSW  PPM
+MCUSW_Date
+MCU_Checksum
+DSP_Version
+
+ +

+

    +
  • +aaaaa i cccccc - wersja i data oprogramowania MCU +(kody do ich sprawdzenia i ró¿nice miêdzy ró¿nymi ich wersjami +s± szczegó³owo opisane na tej stronie)
  • + +
  • +bbbbbb - wersja wgranego do telefonu pakietu PPM (Post-programming Memory): +firma Nokia przygotowywuje ró¿ne wersje jêzykowe +oprogramowania do swoich telefonów. S± one zapisywane w "paczkach" - ka¿da z nich +zawiera komunikaty i obs³ugê kilku jêzyków. +Powód takiego postêpowania jest prosty: komunikaty we wszystkich jêzykach ¶wiata +nie zmie¶ci³yby siê w pamiêci telefonów. +Tutaj zobaczysz w³a¶nie wersjê wgranego pakietu PPM: jest to liczba +zgodna z wersj± oprogramowania MCU, po której +pojawia siê litera (mo¿e to byæ "A", "B", itd. - jêzyk polski jest dostêpny w pakiecie "B"). +I st±d zapewne jasne jest, ¿e je¿eli Twój telefon zosta³ przywieziony z zagranicy +i nie ma obs³ugi jakiego¶ jêzyka (polskiego ?), trzeba wgraæ do niego inny pakiet PPM. + +

    Dla ciekawych: je¿eli chodzi o starsze modele (np. Nokiê 2110i) - tam nie by³o pakietów +PPM, a zmiana wersji jêzykowej wi±za³a siê z wymian± CA£EGO oprogramowania s³uchawki. +Czyta³em równie¿, i¿ sprzedawane telefony z "ogólnym" oprogramowaniem mia³y fabrycznie +deaktywowan± obs³ugê niektórych jêzyków (np. greckiego) - mo¿na by³o j± w³±czyæ przy u¿yciu +niektórych programów serwisowych (np. PC-Locals 0.6). +

    +

  • + +
  • +dddd - suma kontrolna pamiêci MCU +(gdy jest b³êdna, telefon wy¶wietla CONTACT SERVICE)
  • + +
  • +eeeeeeeeeeee - wersja oprogramowania DSP
  • +
+ +

Informacje z tego menu s± równie¿ podawane w ró¿nych programach serwisowych (np. +PC-Locals 1.3 albo WinTesli). + +

Menu 10-89 + +

+ + + + + + +
+ + + + +
HW: aaaa 
+TXT: Ubbbbbb

+
+ + + + +
HW version
+Text version

+
+ +

+

    +
  • +aaaa - wersja sprzêtowa telefonu (np. najnowsze mi znane Nokie 5110 pokazuj± +tutaj 4220)
  • + +
  • +bbbbbb - informacja, kiedy zosta³y opracowane teksty (prawdopodobnie nazwy operatorów) +wy¶wietlane przez telefon
  • +
+ + +

Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net6.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net6.htm new file mode 100644 index 0000000..08ea8db --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faq_net6.htm @@ -0,0 +1,1618 @@ + + + + + + + + + + FAQ - monitor sieci w Nokiach (czê¶æ 7/7) + + + + + +

Strona g³ówna

+ +
Monitor sieci w telefonach Nokia (7/7) + +

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] + +

+ +
+ + + +
    +
  1. Co to jest ?
  2. +
  3. Czy jest mi potrzebny ?
  4. +
  5. Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
  6. +
  7. Jak go w³±czyæ ?
  8. +
  9. Jak± wersjê monitora mogê w³±czyæ w telefonie ?
  10. +
  11. Czy w³±czenie monitora powoduje utratê gwarancji ?
  12. +
  13. W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
  14. +
  15. W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
  16. +
  17. Jak siê nim pos³ugiwaæ ?
  18. +
  19. Czy mogê zepsuæ sobie telefon ?
  20. +
  21. S³owniczek
  22. +
  23. Znaczenie poszczególnych testów
  24. +
  25. Mo¿na te¿ u¿yæ programu...
  26. +
  27. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
  28. +
  29. W jaki sposób mogê wy³±czyæ monitor sieci ?
  30. +
  31. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
  32. +
  33. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
  34. +
  35. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
  36. +
  37. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
  38. +
  39. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
  40. +
  41. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
  42. +
  43. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
  44. +
  45. Co to s± kody monitora sieci ?
  46. +
  47. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
  48. +
  49. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
  50. +
  51. U¿yte materia³y
  52. +
  53. Dodatkowe informacje
  54. +
+
+
+ +

Menu 10-90 + +

W Nokii 9110 to menu wygl±da nastêpuj±co: + +

+ + + + + + +
+ + + + +
 Cover  aaaa
+ CarKit bbbb
+ Heads  cccc
+
+ + + + +
CoverCnt
+CarKitCnt
+HeadsetCnt  
+
+ +

+

    +
  • aaaa - ilo¶æ otwaræ pokrywy
  • +
  • bbbb - ilo¶æ pod³±czeñ zestawu samochodowego
  • +
  • cccc - ilo¶æ podl±czeñ zestawu s³uchawkowego
  • +
+ +

Poniewa¿ Nokia 9110 jest w 100% sprzêtowo +zgodna z modelem 6110, zapewne bêdzie dzia³aæ ta sama metoda "symulacji" +zestawu s³uchawkowego i samochodowego (patrz Menu +10-75). Ten pierwszy mo¿esz równie¿ symulowaæ przez u¿ycie +Menu 10-92 (przy czym jego u¿ycie nie zwiêksza warto¶ci +licznika z tego menu !). Polecam te¿ zapoznanie siê ze stron± +www.fkn.pl/communicator/software/init.html, +na której znajdziesz dok³adniejsze informacje na temat symulacji obu zestawów. + +

takie jest w Nokii 5190: + +

+ + + + + + +
+ + + + +
M:DCS:DO4100
+D:HPA:NTM:NC
+D:REA:OFS:RU
+0000000:000
+
+ + + + +
+MODESERVSIM 
+DCS AMPSMOD
+DPWRAPWRSMC
+PRILIST +
+
+ +

a tak wygl±da w Nokii 7110: + +

+ + + + + + + + + +
+ + + + +
+PS0 aaaa
+EC0 bbbbbbbb
+PS1 cccc
+EC1 dddddddd
+
+ + + + +
+PS0 FFFE
+EC0 00000003
+PS1 FFF8
+EC1 00000002
+
+ + + + +
+Page0 Status
+EraseCounter
+Page1 Status
+EraseCounter +
+
+ +

+

    +
  • aaaa - taki sam jak parametr bbbb z Menu 10-92
  • +
  • bbbbbbbb - taki sam jak parametr dddddddd z Menu 10-92
  • +
  • cccc - taki sam jak parametr bbbb z Menu 10-93
  • +
  • dddddddd - taki sam jak parametr dddddddd z Menu 10-93
  • +
+ +

Menu 10-91 + +

W Nokii 9110: + +

+ + + + + + +
+ + + + +
   RESET 
+   MISC
+  COUNTERS  
+
+ + + + +
  Use menu  
+  to reset
+    misc
+  counters
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿esz wykasowaæ liczniki z Menu +10-90. + +

W Nokii 7110 to menu jest inne: + +

+ + + + + + +
+ + + + +
+FL  005FC998
+E2    0    0
+PR   30    1
+OM    0 0000
+
+
+ + + + +
+NextEntry
+Addr  Length
+Small   Long
+ErCnt ErMask
+
+
+ +

Menu 10-92 + +

W Nokii 9110 ten test jest nastêpuj±cy: + +

+ + + + + + +
+ + + + +

  Headset   
+    xxx
+
+ + + + +
 Use menu to
+   toggle
+   headset
+   ON/OFF
+
+ +

Przez bezpo¶rednie wej¶cie do tego menu mo¿esz w³±czyæ/wy³±czyæ profil +"headset" dostêpny po pod³±czeniu zestawu s³uchawkowego (którego oczywi¶cie +nie musisz ju¿ mieæ) - xxx mo¿e przyjmowaæ warto¶ci ON albo OFF. Po jego u¿yciu +nie zwiêkszaj± siê warto¶ci licznika z Menu 10-90. +Polecam te¿ zapoznanie siê ze stron± +www.fkn.pl/communicator/software/init.html, +na której znajdziesz dok³adniejsze informacje na temat dostêpno¶ci tego profilu w tym telefonie. + +

+ + + + + + +
U¿yj tego menu, je¿eli potrzebujesz funkcji 'Automatic Answer' ('Odbiór +samoczynny') polegaj±cej na odebraniu po³±czenia przez telefon ju¿ po jednym +dzwonku. Funkcja ta pokazuje siê w menu nowszych modeli Nokii tylko przy +pod³±czonym zestawie (w starszych telefonach - np. Nokii 2110i jest dostêpna +zawsze).
+ +

a w Nokii 7110 wygl±da nastêpuj±co: + +

+ + + + + + + + + +
+ + + + +
+EP aaaa bbbb
+#0      cccc
+    dddddddd
+eeeeeeeeeeee +
+
+ + + + +
+EP F0F0 FFFE
+#0      0000
+    00000003
+FFFFFFFFFFFF
+
+
+ + + + +
+EMark PgStat
+PgType
+EraseCount
+PpInd PpECnt +
+
+ +

+

    +
  • bbbb - taki sam jak parametr aaaa z Menu 10-90
  • +
  • dddddddd - taki sam jak parametr bbbbbbbb z Menu 10-90
  • +
+ +

Menu 10-93 + +

+ + + + + + + + + +
+ + + + +
+EP aaaa bbbb
+#1      cccc
+    dddddddd
+eeeeeeeeeeee +
+
+ + + + +
+EP F0F0 FFF8
+#1      0001
+    00000002
+000000000002
+
+
+ + + + +
+EMark PgStat
+PgType
+EraseCount
+PpInd PpECnt +
+
+ +

+

    +
  • bbbb - taki sam jak parametr cccc z Menu 10-90
  • +
  • dddddddd - taki sam jak parametr dddddddd z Menu 10-90
  • +
+ +

Menu 10-94 + +

Test w Nokii 3210: + +

+ + + + + + +
+ + + + +
Vo:  aaa bbb
+Pins:      c
+Mode:   dddd
+State:  eeee
+
+ + + + +
V: Req ADC  
+Pin Status
+Mode
+Band Ch
+
+ +

+

    +
  • dddd - jedna z przyjmowanych warto¶ci to AUTO
  • +
  • eeee - przyjmowane warto¶ci to GS05, GS09
  • +
+ +

i 7110: + +

+ + + + + + +
+ + + + +
+ +IN E111 F000
+ST      0000
+        0000
+        0000 +
+
+
+ + + + +
+InExc  InRec
+      EmuErr
+      EnvErr
+      RecEr +
+
+ +

Menu 10-95 + +

+ + + + + + +
+ + + + +
1:aaa 4:ddd 
+2:bbb 5:eee
+3:ccc 6:fff
+
+ + + + +
6 lowest
+values at   
+shut down
+
+ +

Menu 10-96 + +

W Nokii 3210: + +

+ + + + + + +
+ + + + +
VCX0ADC: aaa
+TEMP(C):  bb
+TEMP(K): ccc
+
+ + + + +
ADC VALUE
+RF TEMP(C)
+RF TEMP(K)  
+
+ +

+

    +
  • +ccc - temperatura licznika bb (tylko, ¿e w stopniach Kelwina: K = C + 273)
  • +
+ +

i 7110: + +

+ + + + + + +
+ + + + +
+Co: 49 A: 279
+Tu: 49 K: 305
+Of:  0  C:+32
+V5:  2 +
+
+ + + + +
+Contrast ADC
+Tuned Kelvin
+Offset     C
  +
+
+ +

Menu 10-98 + +

+ + + + + + +
+ + + + +
+WR  00000000
+      0 0000
+ER  00000000
+        0000 +
+
+ + + + +
+WrErrCnt    
+WrRtry WrSta
+ErErrCnt
+ErSta
+
+
+ +

Menu 10-99 + +

+ + + + + + +
+ + + + +
+Ead:aaaa    
+Mod:bb
+MODE: cccc
  +
+
+ + + + +
+EAD value   
+Acc. status
+FBUS mode
  +
+
+ +

    +
  • bb - rodzaj pod³±czonych do telefonu akcesoriów d¼wiêkowych +(przyk³adowe warto¶ci: +HP przy stanie normalnym, HD przy zestawie s³uchawkowym - np. HDC-9P). +W innych telefonach ta informacja jest podawana w +Menu 10-75
  • +
  • cccc - "FBUS" przy po³±czeniu kablem FBUS lub MBUS od starszych modeli +Nokii (5xxx, 6xxx) albo poprzez Irdê
  • +
+ +

Menu 10-100 + +

Test z Nokii 9110: + +

+ + + + + + +
+ + + + +
a  b 
+c  ddd    e 

+
+ + + + +
UWS DWS
+T1   N1   T2

+
+ +

i 7110: + +

+ + + + + + +
+ + + + +
+004D63   5.0
+0018D1   1.6
+05B1DD  94.0
  +
+
+ + + + +
+MemUseT %Use
+MemRelT %Rel
+MemUnuT %Unu
  +
+
+ +

Informacje o wykorzystaniu pamiêci telefonu. +W tym momencie nie jestem pewien, o jak± dok³adnie pamiêæ chodzi (po dodaniu +wpisu do ksi±¿ki telefonicznej prawdopodobnie jest tutaj podawana pamiêæ ksi±¿ki) + +

Menu 10-101 + +

Test z Nokii 9110: + +

+ + + + + + +
+ + + + +
  aaaaaaaa
+  bbbbbbbb
+  cccccccc  
+  dddddddd
+
+ + + + +
TX Frame Cnt
+RX Frame Cnt
+TX Retx Cnt
+RX Tetx Cnt
+
+ +

Wszystkie warto¶ci s± podawane w cyfrach szesnastkowych. + +

i 7110: + +

+ + + + + + +
+ + + + +
+#0  0  #1  0
+#2  0  #3  0
+#4  0  #5  0
  +
+
+ + + + +
+Pn LoCPn LoC
+Pn LoCPn LoC
+Pn LoCPn LoC
  +
+
+ +

Menu 10-102 + +

+ + + + + + +
+ + + + +
aaaaaaaaaa
+bbbbbbbbbbbb
+ccccccccccc
+
+ + + + +
Data call
+flow control
+info
+
+ +

Menu 10-103 + +

+ + + + + + +
+ + + + +
+100    0  00
+PoolS 01EA6E
+RsrvS 031386
  +
+
+ + + + +
+%FW %BW FrCo
+PoolSizeLeft
+Reservations
  +
+
+ +

Menu 10-104 + +

+ + + + + + +
+ + + + +
+LOG 00000000
+COD 00000000
+WrA 00000000
+RdA 00000000 +
+
+ + + + +
+ErrorLogAddr
+ErrorCode
+WrErrorAddrs
+RdErrorAddrs +
+
+ +

Menu 10-105 + +

+ + + + + + +
+ + + + +
+WrC 00000000
+RdC 00000000
+Group     00
+Index   0000 +
+
+ + + + +
+DevWrErrorCo
+DevRdErrorCo
+CallingGroup
+CallingIndex +
+
+ +

Menu 10-106 + +

+ + + + + + +
+ + + + +
+RtyDaRd 0000
+RtyDaWr 0000
+RtyHeRd 0000
+RtyHeWr 0000 +
+
+ + + + +
+RtyDataRead
+RtyDataWrite
+RtyHeadRead
+RtyHeadWrite +
+
+ +

Menu 10-107 + +

+ + + + + + +
+ + + + +
+  1  1  1  1
+LLRS: 000000
+DchsmEr:0000
  +
+
+ + + + +
+PB GB  HB PB
+LastLostSize
+DtChsmErrCo
  +
+
+ +

Menu 10-108 + +

+ + + + + + +
+ + + + +
+FF:FF FF:FF 
+FF:FF 00:00
+FF:FF FF:FF
+FF:FF FF:FF +
+
+ + + + +
+Link&LID 0-1
+Link&LID 2-3
+Link&LID 4-5
+Link&LID 6-7 +
+
+ +

Menu 10-110, 10-111, 10-112, 10-113, 10-114, 10-115 + +

+ + + + + + +
+ + + + +
+ 0 FFFE  0.0
+000002   0.0
+000000 100.0
+ 3  1 0 FFE0 +
+
+ + + + +
+Pn  Sta %Use
+EraseCn %Rel
+NextRec %Unu
+Cu Cl Cc MmC +
+
+ +

Prawdopodobnie zwi±zane z przegl±dark± i kolejnymi (jest ich 5) +ustawieniami po³±czeñ do WAP + +

Menu 10-130 + +

+ + + + + + +
+ + + + +
+aaa   bbbbbb

 
  +

+
+ + + + +
+Slide   Open

 
  +

+
+ +

    +
  • bbbbbb - licznik otwarcia klapki telefonu
  • +
+ +

Menu 10-240 +
Chocia¿ nie pokazuje ¿adnych informacji, jego u¿ycie wywo³uje: + +

+

+ +

Menu 10-241 +
Wy³±cza monitor sieci (tzn. +wy³±cznie usuwa z telefonu jego menu) ! Do jego ponownego w³±czenia +bêdziesz musia³(a) u¿yæ metod opisanych w punkcie Jak go w³±czyæ ? + Byæ mo¿e +po jego u¿yciu potrzebne bêdzie wy³±czenie i ponowne w³±czenie telefonu +(¿eby zaczê³y dzia³aæ strza³ki góra/dó³). Mo¿e siê równie¿ okazaæ, i¿ +wspomniane strza³ki bêd± dzia³aæ wy³±cznie wtedy, gdy monitor +zdeaktywujesz programem (z komputera)... + +

Menu 10-242 +
W³±cza okrojony monitor sieci +(tylko testy od 1 do 19). Do w³±czenia pe³nej wersji monitora +bêdziesz musia³(a) u¿yæ metod opisanych w punkcie +Jak go w³±czyæ ? +(telefon nie pozwoli u¿yæ testu +243, który normalnie w³±cza pe³n± wersjê monitora - bêdziesz go móg³(mog³a) +podaæ jedynie w programie w komputerze uaktywniaj±cym monitor). + + +

Menu 10-243 +
W³±cza pe³en monitor sieci. + +

Menu 10-250 +
Wed³ug angielskich opisów czy¶ci informacje z +Menu 10-57 (ja tego nie zauwa¿y³em). + +

Menu 10-497 +
Prosta arytmetyka pokazuje, ¿e wywo³anie tego menu ma takie same skutki +jak u¿ycie Menu 10-241 (wy³±cza +monitor sieci). Niektóre jednak strony +(np. +www.versamart.com/Nokia5110/nokia5110code.shtml +pisz±, ¿e: + +

The tips needs Net Monitor enabled. +
Be aware that the trick wil remove Netmonitor in some +
sw versions like v4.73 and v5.04. + +

+

    +
  1. Laungh the NetMonitor in your Nokia 51xx / 61xx
  2. +
  3. Execute the test number 497
  4. +
  5. Free calling for about 90 sec should now have been activated.
  6. +
+ +

The trick has not been comfirmed working yet. + +

W wolnym t³umaczeniu mo¿e to oznaczaæ: wejd¼ bezpo¶rednio do tego testu, +a przez (oko³o) 90 sekund bêdziesz móg³(mog³a) bezp³atnie dzwoniæ. + +

My¶lê, ¿e jednak jest to swego rodzaju ¿art... + + +

Na pocz±tek + + +

13. Mo¿na te¿ u¿yæ programu...
+


+ +

S± ju¿ programy, które pozwalaj± ¶ledziæ niektóre z tych parametrów +na ekranie komputera (telefon musi byæ oczywi¶cie z nim po³±czony kablem): + +

+

    +
  • +program Andreasa Schmidta (www.aschmidt.de/): +wy¶wietla on na ekranie komputera to, co pokazuje telefon w wybranym te¶cie +i pozwala ¶ledziæ BTSy +(m.in. porównywaæ moc ich sygna³u).
  • + +
  • +gnokii: tak nazywa siê projekt (oficjalna strona - http://multivac.fatburen.org/gnokii/) +i oprogramowanie (najnowsze wersje - ftp://ftp.inet.cz/pub/People/Pavel.Janik/gnokii/), +które ma ambicjê staæ siê Nokia +Cellular Data Suite w Unixie i Linuxie. Ju¿ teraz wy¶wietla ono podobne +informacje do tych podawanych przez program wymieniony wcze¶niej (LAC i +CID komórek) oraz programu Andreasa Schmidta.
  • + +
  • Logo Manager (http://clicksave.eu.org/nlm/) +w wersji zarejestrowanej pozwala wy¶wietlaæ wygl±dy testów monitora.
  • + +
  • +autorstwa N. Hüttischa (www.nobbi.com/). +Mo¿e dzia³aæ te¿ np. z Siemensem C10. Je¶li chodzi o Nokiê, wymagany jest +niestety Nokia Cellular +Data Suite. Po rozpakowaniu musisz zmieniæ w pliku +monitor.ini +(jest w archiwum z pobranym programem) parametr comport (podajesz +tam numer portu, pod którym masz w systemie modemy 'Nokia GSM Data' +i 'Nokia GSM Voice'). I ju¿... My¶lê, i¿ nie bêdziesz mia³ teraz problemów +z rozpoznaniem wy¶wietlanych parametrów...
  • + +
  • +Logo Express (http://memsu1.iam.ntu.edu.tw/~jrywu/ +albo http://logoexpress.bizland.com/): +równie¿ pokazuje LAC i CID komórek.
  • + +
  • +dostêpne pod adresem http://members.tripod.com/smssend/gsm_csq.htm +(wersje pod PSIONa, DOSa i Windows): rysuj± one wykres poziomu sygna³u +sieci (na podstawie sygna³u z telefonu), dzia³aj± chyba tylko z Nokiami +6xxx.
  • + +
  • +WinTesla: ten komercyjny program serwisowy podaje bardzo du¿o ró¿nych i +szczegó³owych danych (tak przynajmniej wynika z opisów na ró¿nych stronach)
  • + +
  • +PC-Locals w wersji 1.3: tutaj dostêpne s± dwie mo¿liwo¶ci: + +

    +

      +
    1. +w oknie, w którym normalnie aktywowany jest monitor sieci, wpisujesz po +prostu numer testu - komputer pokazuje to, co wy¶wietli³by w te¶cie o tym +numerze telefon.
    2. + +
    3. uruchomienie monitora dostêpnego w programie. Nale¿y: + +

      +

        +
      1. wybraæ menu 8 (Event Trace)
      2. + +
      3. wybraæ menu 9 (Load TRC file)
      4. + +
      5. +wpisaæ nazwê pliku TRC (z PC-Locals w wersji 1.3 rozpowszechnionej w Internecie +jest dostêpny plik nse3_433.trc dla Nokii 6110 z oprogramowaniem 4.33) +odpowiedni± dla modelu telefonu i jego oprogramowania (albo nacisn±æ Enter +i wybraæ odpowiedni plik). Je¿eli wersja z pliku i wersja telefonu nie +zgadza siê, komputer upewni siê, ¿e chcemy za³adowaæ wybrany plik (nie +spowoduje to ¿adnych skutków typu uszkodzenie telefonu; niemniej jednak +parametry wy¶wietlane przez program mog± nie zgadzaæ siê z parametrami +dostêpnymi w monitorze telefonu).
      6. + +
      7. +wybraæ menu 1 (MCU Events)
      8. + +
      9. +zmieniæ status zdarzeñ, które chcemy ¶ledziæ w oknie Trace - robi siê to +szarym klawiszem + po prawej stronie klawiatury (mo¿na wy³±czyæ ¶ledzenie +zdarzenia, w³±czyæ normalne albo rozszerzone ¶ledzenie). Je¿eli chcemy, +aby by³ dostêpny monitor wy¶wietlany po naci¶niêciu klawisza F8, musimy +w³±czyæ ¶ledzenie CONSTANT_WINDOW_TRA (zmieniæ na NORM albo EXT).
      10. + +
      11. +wybraæ menu 2 (Event Control) i zmieniæ na On.
      12. + +
      +
    4. + +

      W oknie "Trace" bêd± teraz wy¶wietlane monitorowane zdarzenia. Parametry +sieci mo¿esz te¿ obserwowaæ po naci¶niêciu F8. Menu 6 (Break Trace Functions) +przerywa monitorowanie zdarzeñ.

    +
  • +
+ +

+ + + + + + +
Je¿eli interesuj± Ciê komendy u¿ywane przez wspomiane programy +od odczytywania testów monitora sieci, tutaj znajdziesz adresy +strony WWW z ich opisami.
+ + +

Na pocz±tek + + +

14. Czy mo¿na korzystaæ z monitora sieci, gdy nie ma w telefonie karty SIM, nie zosta³ podany jej PIN lub jest nieaktywna ?
+


+ +

Wed³ug za³o¿eñ standardu GSM telefon komórkowy zawsze powinien pozwalaæ +skorzystaæ z numeru alarmowego (z regu³y 112) - nawet wtedy, gdy zosta³ +zablokowany (tzn. gdy operator nie pozwala korzystaæ w swojej sieci telefonowi +o takim IMEI) albo nie ma w nim karty SIM +(ewentualnie jest ona równie¿ zablokowana). Wymogi te powoduj±, ¿e od momentu +w³±czenia Twoja Nokia wyszukuje dostêpne sieci komórkowe. Istniej± ju¿ +programy (patrz w Mo¿na te¿ u¿yæ programu...), +które wy¶wietlaj± na ekranie komputera to, co pokaza³by w danym momencie +telefon w podanym te¶cie. Innymi s³owy: je¿eli pod³±czysz Nokiê do komputera +kablem i u¿yjesz np. Pc-Locals 1.3 albo programu +Andreasa Schmidta, mo¿esz sobie +ogl±daæ ró¿ne dane podawane normalnie w menu "Net Monitor". W niektórych telefonach +(sprawdza³em to np. w Nokii 5110) mo¿esz uzyskaæ do tego menu (w ogóle, do +menu telefonu) u¿ywaj±c gnokii: nale¿y wys³aæ do telefonu sekwencjê +dtmf (np. uruchmiaj±c gnokii z parameterem "--senddtmf sekwencja", gdzie +sekwencja sk³ada siê z dowolnych liczb). + +

Dopiero po wpisaniu PINu masz mo¿liwo¶æ "normalnego" skorzystania z menu "Net monitor" +z klawiatury telefonu (o ile oczywi¶cie zosta³o wcze¶niej uaktywnione) +i wszystkich dostêpnych w nim ustawieñ oraz testów (przyk³adowo: dopiero +wtedy w Menu 10-6 poka¿± siê sieci +"preferowane" oraz "zabronione"). Ci±gle te¿ mo¿na wy¶wietlaæ testy u¿ywaj±c +wymienionych programów (co jest np. przydatne, gdy chcesz monitorowaæ stan +sieci i nie traciæ identyfikacji dzwoni±cych do Ciebie osób albo sprawdziæ +rodzaj u¿ytego kana³u po wpisaniu PINu) - ich dzia³anie jest niezale¿ne +od tego, czy w telefonie masz uaktywnione menu "Net monitor" i który test +jest w nim wy¶wietlany. + +

Dane karty SIM mo¿esz natomiast odczytaæ w Menu +10-51 (o ile oczywi¶cie test ten dostêpny w Twojej Nokii) u¿ywaj±c +wspomnianych programów niezale¿nie od tego, czy zosta³ jej podany PIN czy +nie. Je¿eli nie zosta³a ona w³o¿ona do telefonu, zobaczysz tam "ERROR1". + +

Przy u¿yciu zdeaktywowanej karty SIM masz oczywi¶cie dostêp do testów +z menu telefonu (o ile oczywi¶cie menu monitora zosta³o uaktywnione). +Sieæ karty jest normalnie monitorowana. Telefon próbuje siê z ni± +skomunikowaæ tylko raz po w³±czeniu (monitor pokazuje, ¿e u¿ywane s± kolejno kana³y +CCCH, AGCH, +SDCC (od¶wie¿ane jest wtedy TA), +BCCH i CCCH +- wszystko jak przy normalnej karcie SIM). Pó¼niej jest to niemo¿liwe, +ca³a operacja jest natomiast powtarzana po resecie telefonu. Z wiadomych wzglêdów +na jego ekranie nie ma nazwy monitorowanej sieci ani jej cellinfo. +Ciekawostk± jest natomiast, ¿e mo¿na normalnie np. u¿ywaæ +test BTS... + + +

Na pocz±tek + + +

15. W jaki sposób mogê wy³±czyæ monitor sieci ?
+


+ +

telefony GSM/DCS/PCS: + +

Nale¿y wybraæ w telefonie test 241 ewentualnie u¿yæ którego¶ z opisanych +w punkcie Jak go w³±czyæ ? programów (podajesz tam numer 241, wybierasz +opcjê "OFF" czy co¶ podobnego...). + +

telefony TDMA 800/TDMA 1900: + +

Wejd¼ do menu s³u¿±cego do programowania NAM (kod *3001#12345# +- niektóre ¼ród³a podaj±, ¿e zamiast 12345 nale¿y wpisywaæ +kod zabezpieczaj±cy (security code) telefonu), ustaw "Field Test display" na "Off" i zresetuj telefon. + + +

Na pocz±tek + + +

16. Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
+


+ +

Standardowo (fabrycznie) telefony Nokia nie maj± w³±czonego monitora. Je¿eli +wiêc oddasz swoj± s³uchawkê do serwisu, kto¶ mo¿e uznaæ, i¿ robi³e¶(a¶) z ni± ró¿ne +"dziwne" rzeczy (oczywi¶cie tak nie musi byæ - zale¿y to od serwisu i osób, +które bêd± naprawiaæ Twoj± s³uchawkê)... My¶lê jednak, i¿ warto sobie +oszczêdziæ (ewentualnych) k³opotów z tym zwi±zanych i po prostu zdeaktywowaæ +menu monitora przed jej oddaniem do niego (powtarzam: nie jest to konieczne, +niemniej jednak po co mieæ pó¼niej jakie¶ problemy ?)... + + +

Na pocz±tek + + +

17. Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
+


+ +

TAK ! W³±czanie (i wy³±czanie) +monitora sieci mo¿esz powtarzaæ w nieskoñczono¶æ (a nawet raz wiêcej ;-)) + + +

Na pocz±tek + + +

18. Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
+


+ +

Tak, jest on dostêpny w wiêkszo¶ci Nokii (niezale¿nie od systemu, w którym +dzia³aj±). + + +

Na pocz±tek + + +

19. Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
+


+ +

Nie - je¿eli chcesz sobie bezp³atnie rozmawiaæ z osobami znajduj±cymi siê +blisko Ciebie, musisz mieæ np. radiostacjê albo telefon bezprzewodowy. + + +

Na pocz±tek + + +

20. Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
+


+ +

Ten FAQ dotyczy i wymienia testy z RÓ¯NYCH modeli Nokii. Je¿eli chcesz powiêkszyæ +ich ilo¶æ, bêdziesz musia³(a) wymieniæ wiêc telefon na taki, który ma bogatszy monitor +(np. Nokiê 7110) albo zmieniæ w nim oprogramowanie na nowsze - czasami, jak np. w Nokii +5110, uzyskasz A¯ 1 test (oprogramowanie 5.04 i nowsze maj± +dodatkowy test 89). + +

Je¿eli natomiast masz TYLKO 19 pierwszych testów, masz uaktywniony TYLKO +podstawow± wersjê monitora - w³±cz sobie pe³n± (tutaj +jest wiêcej informacji na ten temat). + + +

Na pocz±tek + + +

21. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
+


+ +

NIE. Dane takie znajduj± siê wprawdzie w rejestrach sieci, ale nie s± +przesy³ane do Twojego telefonu. Monitor sieci pozwala natomiast (przynajmniej teoretycznie) +na okre¶lenie parameterów d¼wiêku, jaki jest przesy³any z jego telefonu... + + +

Na pocz±tek + + +

22. Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
+


+ +

Jest to mo¿liwe tylko z pewn± dok³adno¶ci±. Dlaczego ? + +

Telefon mo¿e odczytaæ dane potrzebne do identyfikacji BTSów +takie jak ich numery (patrz Menu 10-11) czy +TA (patrz Menu 10-1), +ale odczyt TA nie musi oznaczaæ odleg³o¶ci od +BTSa w linii prostej (sygna³ mo¿e siê za³amywaæ) +i ci±gle niemo¿liwe jest poznanie, w któr± stronê (pod jakim k±tem) s± umieszczone +BTSy, których sygna³ odbiera Twój telefon. Jednym s³owem, +mo¿na okre¶liæ jedynie obszar, w którym sie znajdujesz (w miastach, gdzie +BTSy s± ustawione gê¶ciej, bêdzie to dok³adniejsze). +I mo¿e to byæ zrobione przez Ciebie lub przez Twojego operatora... + + +

Na pocz±tek + + +

23. Co to s± kody monitora sieci ?
+


+ +

Czasami czytam og³oszenia z pro¶b± o kody monitora sieci i nie wiem, o co chodzi. +Po prostu: w Polsce u¿ywane s± g³ównie telefony GSM/DCS, +w których nie ma raczej jakich¶ "tajnych" kodów aktywuj±cych monitor... Je¿eli chodzi +o jego opis - jest zawarty w tym FAQ. + + +

Na pocz±tek + + +

24. Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
+


+ +

O ile wiem, nie ma takich urz±dzeñ, a artyku³ o nich w Twojej Komórce 4/2000 (strona 18) +by³ jedynie ¿artem prima-aprilisowym... + + +

Na pocz±tek + + +

25. Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
+


+ +

Nie ma ten temat oficjalnych informacji, a wszystkie poni¿sze strony +zosta³y stworzone przez ró¿nych ludzi na podstawie obserwacji dzia³ania +gotowego oprogramowania: + +

+

+ +

Na powy¿szych stronach znajdziesz na pewno informacje o tym, jakie komendy s± +zwi±zane z monitorem sieci, dla modeli NSx (je¿eli nie wiesz, jaki jest model Twojego +telefonu, zajrzyj na tê stronê). Zawsze mo¿esz te¿ gotowej +i bezp³atnej kontrolki ActiveX (http://www.gertjaap.com) +dzia³aj±cej z tymi modelami... + + +

Na pocz±tek + + +

26. U¿yte materia³y
+


+ +

Przy opracowaniu tego FAQ skorzysta³em z: + +

+

+ +

Je¿eli kogo¶ nie wymieni³em, powinien mi zwróciæ na to uwagê :-) ! + + +

Na pocz±tek + + +

27. Dodatkowe informacje
+


+ +

+

+ + +

Na pocz±tek
+ +

+

[Czê¶æ 1][Czê¶æ 2][Czê¶æ 3][Czê¶æ 4][Czê¶æ 5][Czê¶æ 6][Czê¶æ 7] +

+
+
+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/faqkable.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/faqkable.htm new file mode 100644 index 0000000..de04038 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/faqkable.htm @@ -0,0 +1,273 @@ + + + + + + + + + + FAQ - kable do Nokii + + + + + +

Strona g³ówna

+
Kable
+ +


+ +

Pamiêtaj, ¿e ja ani osoby tu wymienione nie ponosz± ¿adnej odpowiedzialno¶ci +za szkody wynik³e z u¿ycia zawartych tu wiadomo¶ci (wykorzystujesz je na +w³asn± odpowiedzialno¶æ) ! + +

+

    +
  1. Jakie s± rodzaje kabli do telefonów Nokia ?
  2. +
  3. Czy siê ró¿ni± ?
  4. +
  5. Jak je rozpoznaæ ?
  6. +
  7. Gdzie mogê znale¼æ ich schematy ?
  8. +
  9. Czy mogê przerobiæ kabel FBUS na MBUS ?
  10. +
  11. Gdzie i za ile mogê kupiæ gotowy kabel ?
  12. +
  13. Gdzie znajdê protoko³y transmisji ?
  14. +
  15. Podczas próby po³±czenia z telefonem otrzymujê komunikaty "Z³a suma kontrolna" ("Bad checksum") albo podobne...
  16. +
+ +

+ +Jakie s± rodzaje kabli do telefonów Nokia ?
+


+ +

S± dwa ich rodzaje: FBUS i M2BUS (zwany potocznie MBUS). + +

W sprzeda¿y dostêpne s± tak¿e kable uniwersalne obs³uguj±ce oba +wymienione standardy. + +

Je¿eli interesuj± Ciê oznaczenia oryginalnych kabli do ró¿nych modeli telefonów, +zajrzyj na stronê http://www.fkn.pl/varia/kable.html. + +

Na pocz±tek

+ +2. Czy siê ró¿ni± ?
+


+ +

Inne s± styki, którymi +przesy³ane s± sygna³y do (z) telefonu: w kablu FBUS s± one oddzielne (na +schematach oznaczane jako RX i TX) i m.in. dziêki temu jest on szybszy ni¿ MBUS +(tam ca³a transmisja jest prowadzona na jednym styku i dane nie bêd± byæ przesy³ane +w jednym momencie (równocze¶nie) do i z telefonu). + +

Ta drobna w sumie modyfikacja powoduje, ¿e u¿ywaj±c ró¿nych kabli mo¿na +robiæ ró¿ne rzeczy (przyk³adowo): + +

+

+ +

Kable uniwersalne pozwalaj± natomiast na wszystko, co wymieni³em +wy¿ej (tryb pracy wybierasz mikroprze³±cznikiem albo ustawia siê on samoczynnie). + +

Na pocz±tek

+ +3. Jak je rozpoznaæ ?
+


+ +

Trzeba po prostu skorzystaæ z programów, które wymagaj± kabli okre¶lonego +rodzaju: PC-Locals wersja 1.3 albo +LogoManager (pozwalaj± ustawiæ typ kabla), +ewentualnie z programów u¿ywaj±cych sterowników DESKEY (poka¿± b³±d "MTI FAILED +(5)", gdy telefon pod³±czysz kablem FBUS). + +

+Je¿eli masz kabel uniwersalny, prawie na pewno (nie zawsze !) bêdzie on +zawiera³ ma³y prze³±cznik. + +

Na pocz±tek

+ +4. Gdzie mogê znale¼æ ich schematy ?
+


+ +

S± dostêpne w wielu miejscach w Internecie... Niestety, czê¶æ z nich +jest b³êdna... + +

Ja poleci³bym gor±co nastêpuj±ce adresy: + +

+ +

Je¿eli chodzi o model 3210, ostatnio przeczyta³em uwagê £ukasza Kupniewskiego, +i¿ rozstaw pinów jest taki sam jak rozstaw pinów od kabelka CD-AUDIO. S³ysza³em, +i¿ do zrobienia wtyczki do tego telefonu mo¿na równie¿ u¿yæ wtyczki zasilania +od napêdu FDD. + +

Na pocz±tek

+ +5. Czy mogê przerobiæ kabel FBUS na MBUS ?
+


+ +Oczywi¶cie ! Przyk³ad takiej przeróbki (dla Nokii 5110 i telefonów zgodnych z ni±) zosta³ +przedstawiony na poni¿szym rysunku (rysunek i pomys³ pochodzi +z "The Nokia page"). Ca³a modyfikacja polega na +dolutowaniu diody (czerwone linie oznaczaj± modyfikacjê) 4148 pomiêdzy liniami RX i TX kabla FBUS... +
Schemat przeróbki
+Dla innych Nokii musisz spojrzeæ, gdzie maj± sygna³y RX i TX kabla FBUS (oraz +gdzie jest prowadzony sygna³ kabla MBUS) w z³±czu krawêdziowym i zmieniæ odpowiednie piny z powy¿szego rysunku. +I to wszystko... + +

Otrzyma³em w tej sprawie list od Krzysztofa Pawluka list w tej sprawie. Pisa³ on, i¿ +u niego powy¿sza przeróbka nie dzia³a i zaproponowa³ inn± (je¿eli masz jakie¶ pytania w jej sprawie, +skieruj je bezpo¶rednio do niego): +

Schemat przeróbki autorstwa Krzysztofa Pawluka
+Napisa³ on równie¿: "Bardzo czêsto porty COM w komputerze daj± za niskie napiêcie, (...) +jest to przyczyna czêstych niepowodzeñ, a mo¿na do³o¿yæ tylko zasilacz 5V i jest OK.". + +

Mo¿esz tak¿e odwiedziæ stronê +http://www.fkn.pl/varia/kable.html +i tam równie¿ znajdziesz schemat odpowiedniej przeróbki (z prze³±cznikiem). + +

Na pocz±tek

+ +6. Gdzie i za ile mogê kupiæ gotowy kabel ?
+


+ +

+

    +
  1. +za cenê ok. 630 z³ dostaniesz kabel uniwersalny wraz z oryginalnym +Nokia +Cellular Data Suite (w salonach autoryzowanych dealerów GSM)
  2. + +
  3. +od 50 do 100 z³ s± one dostêpne (ró¿ne rodzaje) u ludzi og³aszaj±cych na +listach dyskusyjnych zwi±zanych z GSM (np. pl.misc.telefonia.gsm.gielda +albo pl.misc.telefonia.gsm). Poni¿ej +podajê ich przyk³adowe adresy (mo¿esz te¿ tam czêsto kupiæ same wtyczki +do telefonów): + +

    +

      +
    1. http://angel.qdnet.pl/nokia/
    2. +
    3. http://www.compunet.com.pl/gsm/
    4. +
    5. http://www.ibt.com.pl/~gsm
    6. +
    7. http://www.kabelki.w.pl
    8. +
    9. http://friko5.onet.pl/wa/falkorp5/
    10. +
    11. http://friko.onet.pl/ld/oskar1
    12. +
    13. http://www.promail.pl/~ncds/
    14. +
    15. http://www.free.com.pl/gsmphone
    16. +
    17. http://www.carlab.com/cables/
    18. +
    19. http://www.teedex.com.pl
    20. +
    21. http://www.codserv.csl.pl/
    22. +
    23. http://free.polbox.pl/m/mazurek9/
    24. +
    25. http://www.kki.net.pl/~kabelek/
    26. +
    27. http://gsmzone.prv.pl/
    28. +
    29. http://www.datex.pl
    30. +
    31. http://www.netart.com.pl/rafal/gsm/main.htm
    32. +
    +
  4. +
+ +

Na pocz±tek

+ +7. Gdzie znajdê protoko³y transmisji ?
+


+ +

Tutaj jest lista stron... + +

Na pocz±tek

+ +8. Podczas próby po³±czenia z telefonem otrzymujê komunikaty "Z³a suma kontrolna" ("Bad checksum") albo podobne...
+


+ +

Ka¿dy pakiet wysy³any do/z telefonu zawiera sumê kontroln±. Je¿eli Twój program +pokazuje podobne b³êdy oznacza to, ¿e suma wyliczona przez niego dla otrzymanego pakietu +nie zgadza siê z sum± kontroln± wys³an± przez telefon. Innymi s³owy, komputer nie dostaje +tego, co wysy³a telefon (albo odwrotnie). Jakie mog± byæ przyczyny ? + +

+

    +
  • niesprawny uk³ad scalony w kablu (dzia³a b³êdnie)
  • +
  • brak gdzie¶ styku (zimny lut ?)
  • +
+ +

Ja osobi¶cie widzia³em podobne komunikaty równie¿ przy u¿ywaniu +Logo Managera +z kablem MBUS. Zresetowanie telefonu (komend± z menu programu) prawie zawsze +pomaga³o... + +

Na pocz±tek

+ +


+ +

Marcin Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000
+ + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/firmware.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/firmware.htm new file mode 100644 index 0000000..efee430 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/firmware.htm @@ -0,0 +1,1206 @@ + + + + + + + + + Nokia identification & firmware/Identyfikacja i oprogramowanie telefonów Nokia + + + + +

+ +
+


Nokia identification & firmware/Identyfikacja +i oprogramowanie telefonów Nokia

+ +

On this page you can find information about model numbers for Nokia +phones, codes to see their firmware versions, different firmware revisions +and changes among them (I think, it will help to answer, if firmware upgrade +for your phone will give you something and correct some bugs). Additionaly +I want to put here TAC numbers (first 6 digits of IMEI) given for various +Nokia phones (if I will have them, I will be able to tell you your phone +model from its IMEI). +

Na tej stronie znajdziesz informacje o oznaczeniach Nokii, kodach pozwalaj±cych +sprawdziæ ich wersje oprogramowania, jakie s± wersje ich oprogramowania +i czym siê ró¿ni± (mam nadziejê, ¿e pomo¿e to odpowiedzieæ, czy upgrade +oprogramowania w Twoim telefonie da co¶ i czy np. poprawi jakie¶ dokuczliwe +b³êdy). Równocze¶nie chcia³bym tutaj umie¶ciæ numery TAC (pierwsze 6 cyfr +IMEI) nadawane ró¿nym modelom (je¿eli je bêdê mia³, bêdê móg³ podaæ model +telefonu wy³±cznie na podstawie jego IMEI). +

If you want to add or correct something to this list, please write +me (for example, when you changed firmware in your phone and noticed +some changes, inform me about them and write, what is phone model, old +and new firmware version). +

Je¿eli masz co¶ dodania do tej listy albo znalaz³e¶(a¶) na niej b³êdy, +proszê do mnie napisaæ w tej +sprawie (przyk³adowo: je¿eli wymieni³e¶ oprogramowanie w swoim telefonie +i zauwa¿y³e¶ jakie¶ zmiany, napisz mi o nich podaj±c równie¿ model telefonu, +star± i now± wersjê oprogramowania). +
  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Phone (telefon)Model number (Oznaczenie)Firmware version code (kod do sprawdzania wersji oprogramowania)TAC in IMEI (TAC w IMEI)
100THX-9L
540THF-11
550THF-10*#9999#
V1.04 09-06-97
640THF-13
650THF-12
1011NHE-2
1610NHE-5*#170602112302#
V3.92 17-03-96 +
V4.12 30-05-96 +
V5.02 26-06-96 +

(V4.12) SMS sending added. +
(V4.12) Dodane wysy³anie SMS. +

V5.15 25-02-97

1611NHE-5SX
V5.02 26-06-96 +

Some firmware versions display full network names. +
Niektóre wersje oprogramowania wy¶wietlaj± pe³ne nazwy sieci.

1630NHE-5NA*#170602112302#
1631NHE-5SA
2010NHE-3*#9999#
2110NHE-1XN*#9999#
Vm4.95 02-07-96 +
V5.56 03-12-96
2110i, 2110e for GSM 900NHE-4*#170602112302#
V5.11 27-09-95 +
V5.62 05-05-97
2110i, 2110e for GSM 900NHE-4NX*#682371158412125#490130
V5.49 09-10-96 +
V5.70 15-11-97
2110i, 2110e for GSM 1800NHK-IEA*#682371158412125#
2140NHK-1XA
Vm4.92 01-06-95
2148NHK-1
2148iNHK-4
2160NHC-4NE
3110NHE-8*#3110#490165, 490184 (Finland)
V6.52 15-05-97 +
V7.11 24-09-97 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

By pressing C during a call which then changes the NaviKey's function +to Options that include putting the call on hold, address book, sending +DTMF and ending the Call (it can be activated via a settting menu item +"In Call functions"). +
Przez naci¶niêcie klawisza C w czasie rozmowy oznaczenie NaviKey zmienia +siê na "Opcje" daj±c dostêp do  menu zawieraj±cego ró¿ne opcje przydatne +podczas rozmowy (mo¿e byæ ono w³±czane przy pomocy opcji "Funkcje równoleg³e" +w menu). +

The hold function is complemented by a new Menu function "call waiting +service". +
Funkcja zawieszenia po³±czenia jest obecna w postaci nowej pozycji +menu ("Us³uga po³±czeñ oczekuj±c."). +

The leaflet also indicates that the volume of all ringing tones have +been raised. +
Zwiêkszono g³o¶no¶æ wszystkich dzwonków. +

The option to add a number directly from the dialled/received/missed +calls to the phonebook - When a number in those registers is highlighted +and is not in the phonebook already, the Navikey displays "Options" which +include save and dial. +
Dodano opcjê zapisu numeru do ksi±¿ki telefonicznej z menu z wybieranymi/odebranymi +i nieodebranymi po³±czeniami - je¿eli nie ma jakiego w ksi±¿ce, oznaczenie +Navikey zmienia siê na "Options", które pozwala w³a¶nie na zapis (i dzwonienie). +

A "fast silent mode" (like in 8110) - press Menu and #. +
Szybkie przej¶cie do cichego trybu (jak w Nokii 8110) - wystarczy nacisn±æ +Menu +i #. +

Any answer key function removed. +
Usuniêto funkcjê odbioru jednym klawiszem. +

V7.72 18-12-97 +

Support for vibra battery - added menu in option. +
Obs³uga baterii wibracyjnych - odpowiednia opcja w menu. +

Added "Cell Info Display" and "Broadcast Messages" options in menu. +
Dodana obs³uga cell info i cell broadcast (pozycje "Informacje o sieciach" +i "Wiadomo¶ci sieciowe" w menu) +

V7.73 30-01-98 +
V8.11 27-02-98 +

I know, that in this and older (never probably too) firmware, when you're +in menu and press (c) key, phone leaves menu (it doesn't go to one level +higher) +
Na pewno w tym i starszych (nowszych prawdopodobnie te¿) wersjach oprogramowania, +je¿eli u¿ytkownik jest w menu i naci¶nie klawisz (c), opu¶ci ca³kowicie +menu (a nie przejdzie do jednego poziomu wy¿ej). +

V8.30 16-04-98 +
V8.32 21-09-98 +
V8.50 20-10-98 +
+


+
B£¡D (nie wiem, czy z równie¿ z najnowszym oprogramowaniem): nie mo¿na +do³adowaæ karty SIM+ (zadzwoniæ pod 5555) po wyczerpaniu limitu do 0 PLN.
3210NSE-8/9*#0000#448903 (Finland), 449142, 499149 (Germany)
V3.00 07-06-99 +
V3.01 10-06-99 +
V3.10 17-06-99 +
V4.02 20-07-99 +
V4.43 14-09-99 +
V4.65 07-10-99 +
V5.01 26-11-99 +

(V4.02) With connected headset the light turn on all time (previously +not always). +
(V4.02) Przy pod³±czaniu zestawu s³uchawkowego zawsze zapala siê pod¶wietlenie +(poprzednio nie zawsze). +

Added Menu 3-8 ("Prepaid credit"). +
Dodane Menu 3-8 ("Op³acony kredyt"). Nie dzia³a z SIM+. +

V5.10 21-01-00 +

Changes in parts connected with charging battery. +
Zmiany w czê¶ci odpowiedzialnej za ³adowanie baterii. +
+


+
B£¡D: Po wybraniu czasu 12-godzinnego i jêzyka polskiego w godzinach +popo³udniowych w menu ustawiaj±cym zegarek pojawia siê godzina, "po po³." +(po po³udniu) i ró¿ne dziwne znaczki... +

BUG: Test 45 in NetMonitor and parameter +ChCur in test 23 don't work correctly. +
B£¡D: Test 45 w monitorze sieci i +parametr ChCur w te¶cie 23 nie dzia³aj± +poprawnie.

3810NHE-9*#3810#
V6.20 21-03-97 +
V6.32 06-06-97
5110NSE-1*#0000#490520, 490542, 490546, 490547 (Germany), 490550
V4.51 26-03-98 +
V4.59 01-06-98 +

Phone goes crazy if you scroll the received SMS with 160 dots. +
Telefon wariuje przy przewijaniu odebranego SMSa zawieraj±cego 160 +kropek. +

Phone clears "Headset" text from display after disconnecting HF. +
Telefon kasuje napis "Mikrozestaw" z wy¶wietlacza po od³±czeniu zestawu +s³uchawkowego. +

Half Rate codes (#HRC0# and *HRC0#) +don't work - to enable this channel you have to use WinTesla or other software +
Nie dzia³aj± kody do obs³ugi Half Rate +(#HRC0# i *HRC0#) - do w³±czenia tego kana³u trzeba u¿yæ +np. WinTesli albo innego oprogramowania +

V5.04 14-09-98 +

**04*pin*pin*pin# code doesn't work +
Kod **04*pin*pin*pin# nie dzia³a +

Added test 89 in NetMonitor. +
Dodano test 89 w monitorze sieci. +

4 lines with parameters in test 2 in NetMonitor +(earlier there were 2 only there). +
4 linijki z parametrami w te¶cie 2 monitora +sieci (wcze¶niej by³y tam tylko dwie). +

Added *#sim0clock# code +
Dodano kod *#sim0clock# +

V5.07 20-11-98 +

New 'Text version' parameter in test 89 +of NetMonitor +
Nowy parametr 'Text version' w te¶cie +89 monitora sieci +

CCCH channel always used, when network +doesn't support cell broadcasting (in V5.04 CBCH +channel was used with enabled "Info service"or "Cell info display" +options) +
U¿ywany jest zawsze kana³ CCCH, gdy +sieæ nie obs³uguje nadawania komórkowego (w wersji 5.04 u¿ywany by³ kana³ +CBCH po w³±czeniu opcji "Info service" albo "Cell info display") +

When you set "Incoming call alert" to "Ascending" and "Ringing volume" +to higher volume than 2, phone correctly changes volume from volume 1 to +set (previously it changed it only one level) +
Przy ustawieniu "Sygna³ nadej¶cia po³±czenia" na "Rosn±co" i "G³o¶no¶æ +dzwonka" na wiêcej ni¿ poziom 2, telefon poprawnie zmienia g³o¶no¶æ od +poziomu 1 do ustawionego (wcze¶niej zmienia³ j± tylko o jeden poziom) +

LAC and CID in test 11 in NetMonitor +are in decimal format. +
LAC i CID w te¶cie 11 monitora sieci +s± podawane dziesiêtnie. +

V5.11 18-02-99 +
V5.20 03-06-99 +
V5.22 01-07-99 +
V5.24 03-09-99 +

Ringtones names changed: from "Polka" to "Polska", from "Knock knock" +to "Knock again", from "Tango" to "Tangoed", from 'Lamb' to 'Marry' +
Zmiany nazw dzwonków: "Polka" na "Polska", "Knock knock" na "Knock +again", 'Tango" na 'Tangoed", 'Lamb' na 'Marry' +
+


+
B£¡D: Niedok³adne t³umaczenie w Menu 1-7-2 i Menu 1-4-1 +

OTHER: This phone has working clock with date and interesting thing +is, that you can't set date from menu (you have to use gnokii) +
INNE: Telefon ma poprawnie dzia³aj±cy zegar z dat±, przy czym daty +nie mo¿na ustawiæ z menu (ale np. przy pomocy gnokii) +
+


+
V5.27 +

Added code *#7760# for displaying Production Serial Number. +
Dodano kod *#7760# do pokazywania numeru seryjnego.

5130NSK-1*#0000#495503, 495508, 495509
V3.08 03-04-98 +
V4.11 12-06-98 +
V5.00 01-09-98 +
V5.30 23-04-99 +
V5.51 03-08-99 +
V5.60 14-10-99
5160NSW-1
V3.47 15-07-99
5190NSB-1*#5190#
V3.41 07-02-98 +
V4.01 22-10-98 +
V5.01 02-11-98 +

V5.24 +

NetMonitor in Menu 11 (in older firmware +in Menu 10). +
Monitor sieci w Menu 11 (w starszych +wersjach w Menu 10). +

V5.81 20-09-99

6050NME-1
6080NME-2*#0000#
6081NME-2E*#0000#
6110NSE-3*#0000#490518, 490523, 490526, 490527, 490545
V3.11 14-11-97 +
V3.14 28-11-97 +

First shipping version of the software. +
Pierwsza wersja oprogramowania w sprzedawanych telefonach. +

V4.05 07-01-98 +
V4.06 16-01-98 +
V4.33 11-03-98  +

Improves the reception quality. +
Poprawiona jako¶æ odbioru. +

SMS message alert volume now linked to ringing volume. +
G³o¶no¶æ sygna³u SMS po³±czona z g³o¶no¶ci± dzwonka. +

Minor changes in Profiles menu. +
Niewielkie zmiany w menu profili. +

'Long & Loud' SMS alert is now called 'Ascending' +
D¼wiêk dzwonka SMS 'Long & Loud' zmieniony na 'Ascending' +

'Warning Tones' is now 'Warning and Games Tones' +
'Warning Tones' zmienione na 'Warning and Games Tones' +

The 'No Service' areas between cells seem to have disappeared.When the +phone does go 'No Service', it will very quickly log onto a new cell, usually +within a few seconds. +
Telefon szybciej siê loguje do nowej komórki po odzyskaniu zasiêgu. +

The desktop charger now works correctly when the phone is inserted with +the battery connected. +
£adowarka biurkowa pracuje poprawnie, gdy pod³±czany jest do niej telefon +z w³o¿on± bateri±. +

BUG: Nokia Cellular Data Suite 1.2 (NCDS) infra red function has now +gone intermittent. This has been confirmed this by using a V3.14 phone +which works perfectly with the installed version of the NCDS. Basically +if I connect the phone using the RS232 cable the NCDS works fine. If you +then disconnect and re-connect using IR, also no problem. If you then disconnect +and re-connect a 2nd time using IR you get no connection. The IR symbol +on the phone flashes, then goes static, then flashes again. +
B£¡D: Po³±czenie przez podczerwieñ z NCDS 1.2 nie dzia³a dobrze (podczas +gdy w telefonem z oprogramowaniem 3.14 nie ma problemów), natomiast po³±czenie +kablem ci±gle funkcjonuje bez zarzutu. Je¿eli od³±czysz i po³±czysz ponownie +podczerwieñ, nie ma problemu. Je¿eli próbujesz natomiast jeszcze raz, problem +siê pojawia. Symbol podczerwieni w telefonie mruga, pó¼niej wy¶wietla siê +na sta³e i znów mruga. +

V4.73 22-04-98 +

(V4.06) Correct call counters (Received+Dialled calls=All calls) +
(V4.06) Poprawne liczenie d³ugo¶ci po³±czeñ (Odbierane+Wykonywane po³±czenia=Wszystkie) +

IR-Software improved +
Poprawnione oprogramowanie do obs³ugi IR +

Charger recognition improved. +
Poprawiono rozpoznawanie ³adowarek. +

Headset features improved. +
Poprawiono obs³ugê zestawu s³uchawkowego. +

Same standard SMS alert as 8110i. +
Niektóre d¼wiêki SMSów jak w Nokii 8110i. +

Better energy saving functions. +
Lepsze funkcje oszczêdzania energii. +

Better conference call features. +
Poprawiono obs³ugê po³±czeñ konferencyjnych. +

Better SMS status report. +
Lepsze raporty SMS. +

Display of saving status (phone or SIM). +
Wy¶wietlanie statusu zapisu (telefon albo karta SIM). +

HFU-2 improved. +
Poprawiona obs³uga zestawu samochodowego HFU-2. +

Better charging with standard, car charger and "cold" battery. +
Lepsze ³adowanie ze standardow± albo samochodow± ³adowark± i zimn± +bateri±. +

Faster network connection. +
Szybsze po³±czenie z sieci±. +

Safer network connection at a low signal strength. +
Bezpieczniejsze po³±czenia z sieci± na obszarach o s³abym sygnale. +

Longer single ringtone with vibra pack. +
D³u¿szy sygna³ d¼wiêkowy przy u¿ywaniu baterii wibracyjnej. +

Corrected the problem of the battery indicator bar flickering between +one and two bars with a Li-ion battery. +
Poprawiono problem ze wska¼nikiem poziomu na³adowania baterii (wcze¶niej +przy baterii Li-ion miga³ pomiêdzy jedn± i dwoma kreskami) +

No more changing Half Rate settings via +keypad. +
Nie dzia³aj± kody do aktywacji/deaktywacji kana³ów Half +Rate z klawiatury. +

Improved audio quality when using the EFR +Speech Codec. +
Lepsza jako¶æ d¼wiêku przy u¿ywaniu EFR. +

Reception of CCH blocks after cell reselection in weak field has been +improved. +
Poprawiono odbiór bloków CCH po powtórnym wyborze komórki na obaszrach +o s³abym sygnale. +

Improved the maintenance charging when using the ACP-7 charger. +
Poprawione ³adowanie podtrzymuj±ce z ³adowark± ACP-7. +

More frequent battery low warning beeps added during a call made with +a Li-ion battery. +
Czêstsze ostrze¿enia o wy³adowaniu baterii przy po³±czeniu i baterii +Li-ion. +

Improved SMS storage time handling. If the user has not selected a storage +time, the phone uses the maximum storage time set by the network. +
Je¿eli uzytkownik nie wybra³ czasu wa¿no¶ci SMSa (przy wysy³aniu), +telefon przyjmuje maksymaln± warto¶æ przyjmowan± przez sieæ. +

Improved recovery of SIM card in error situations. +

Fixed bug in SMS editing screen where the cursor is one character to +far right. +
Poprawiono b³±d przy edycji SMSów w sytuacji gdy kursor jest odleg³y +jeden znak od prawej strony. +

V5.00 28-05-98 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.22 18-08-98 +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.24 14-09-98 +

Implemented code *#sim0clock# which shows whether the SIM card +inserted supports clock stopping. +
Dodano kod *#sim0clock# do sprawdzania, czy zegar karty SIM +mo¿e byæ zatrzymany. +

Headset detection improved. +
Poprawione wykrywanie zestawu s³uchawkowego. +

Performance in weak signal area improved. +
Poprawiono czu³o¶æ przy s³abym sygnale sieci. +

Improvements to short message handling. +

Tone levels tuned (distinct difference now between levels 5 and 4). +
Zmieniono poziomy dzwonków (wyczuwalna ró¿nica miêdzy poziomem 4 i +5). +

(V4.73) Different energy consumption in test +23 of NetMonitor. +
(V4.73) Inne zu¿ycie energii w te¶cie +23 monitora sieci. +

V5.30 23-12-98  +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.31 18-02-99 +

Added Menu 4-3-6 ("Active line"), which allows to select active +line on SIM card (ALS function) +
Dodano Menu 4-3-6, które pozwala wybraæ numer na karcie SIM +(funkcja ALS) +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +

V5.47 01-07-99 +
V5.48 09-08-99 +

New ringing tones. +
Nowe dzwonki.

6120NSC-3*#6120#
V1.18 01-07-99
6130NSK-3*#9999#
V3.26 10-02-98 +
V3.28 24-02-98 +
V4.11 10-06-98 +
V5.00 08-09-98 +

(V4.11) NetMonitor in Menu 11 (in +older firmware in Menu 10). +
(V4.11) Monitor sieci w Menu 11 (w +starszych wersjach w Menu 10). +

V5.60 14-10-99

6138NSK-3
6150NSM-1*#0000#493002, 493006 (Germany)
V3.02 08-07-98 +
V3.06 10-08-98 +
V4.01 23-09-98 +
V4.02 01-10-98 +
V4.11 05-11-98 +
V4.12 02-12-98 +

Added corect recognizing phase 2+ SIM cards. +
Dodano poprawne rozpoznawania karty SIM fazy 2+ GSM. +

V4.13 16-12-98 +

BUG: Calling Menu 10-3 causes the phone to hang and you will +have to remove the battery. +
B£¡D: Wywo³anie Menu 10-3 zawiesza telefon (pomaga dopiero wypiêcie +baterii). +

V4.14 18-12-98 +
V5.02 02-02-99 +
V5.16 22-06-99 +

(V4.13) NetMonitor in Menu 12 (in +older firmware in Menu 11). +
(V4.13) Monitor sieci w Menu 12 (w +starszych wersjach w Menu 11). +

V5.17 01-07-99 +
V5.20 20-09-99 +

NetMonitor in Menu 13 (in older firmware +in Menu 12). +
Monitor sieci w Menu 13 (w starszych +wersjach w Menu 12). +

V5.22 10-11-99 +

(V4.13) Added Menu 4-4-6 ("Confirm SIM service actions") with +Menu +4-4-6-1 ("Asked") and 4-4-6-2 ("Not asked") options. +
(V4.13) Dodane Menu 4-4-6 ("Powiadomienia o zmianach") z Menu +4-4-6-1 ("Widaæ") i 4-4-6-2 ("Nie widaæ"). +

(V4.13) Added Menu 4-5-2 ("Call barring service") with Menu +4-5-2-1 ("Outgoing calls"), 4-5-2-2 ("International calls"), +4-5-2-3 +("International except to home country"), 4-5-2-4 ("Incoming calls"), +4-5-2-5 +("Incoming calls if abroad") and 4-5-2-6 ("Cancel all barrings") +options +
(V4.13) Dodane Menu 4-5-2 ("Us³uga zakazu po³±czeñ") z Menu +4-5-2-1 ("Po³±czenia wychodz±ce"), 4-5-2-2 ("Po³±czenia miêdzynarodowe"), +4-5-2-3 +("Za granicê, oprócz do w³asnego kraju"), 4-5-2-4 ("Po³±czenia przychodz±ce"), +4-5-2-5 +("Po³±czenia odbierane za granic±") i 4-5-2-6 ("Anuluj wszystkie +zakazy") +

(V4.13) "Fixed dialing" moved to Menu 4-5-3 (earlier in Menu +4-5-2) +
(V4.13) "Wybieranie ustalone" przeniesione do Menu 4-5-3 (wcze¶niej +w Menu 4-5-2) +

(V4.13) "Closed user group" moved to Menu 4-5-4 (earlier in Menu +4-5-3) +
(V4.13) "Grupa zamkniêta" przeniesiona do Menu 4-5-4 (wcze¶niej +w Menu 4-5-3) +

(V4.13) "Security level" moved to Menu 4-5-5 (earlier in Menu +4-5-4) +
(V4.13) "Poziom zabezpieczeñ" przeniesiony do Menu 4-5-5 (wcze¶niej +w Menu 4-5-4) +

(V4.13) "Change access codes" moved to Menu  4-5-6 (earlier +in Menu 4-5-5) +
(V4.13) "Zmieñ kody dostêpu" przeniesione do Menu  4-5-6 +(wcze¶niej w Menu 4-5-5) +

(V4.13) Added Menu 4-5-6-4 ("Change barring password") +
(V4.13) Dodane Menu 4-5-6-4 ("Zmieñ has³o zakazu") +

Production Serial Number String added (*#7760# code) +
Dodano kod *#7760# do pokazywania numeru seryjnego. +

Calendar birthday reminder, related to the last day of February on non-leap-years, +will now be set to right day +
Notaki w kalendarzu dotycz±ce urodzin odnosz±ce siê ostatniego dnia +Lutego w latach nieprzestêpnych jest teraz ustawiany we w³a¶ciwym dniu. +

Improvement to character conversion. Earlier blank display was shown +when UCS2 type (e.g. Greek characters) of SMS was received. +
Poprawiono konwersjê znaków. Wcze¶niej pokazywany by³ pusty ekran, +gdy SMS typu UCS2 (np.ze znakami greckimi) zosta³ odebrany. +

Multiple multi-page Cell Broadcast reception improved. +
Poprawiono odbiór wielostronicowych po³±czonych komunikatów nadawanaia +komórkowego. +

An updated GSM operators' list. +
Uaktualniona lista operatorów. +
 

6160/6162NSW-3*#9999#
V1.12 01-02-99 +
V3.01 09-07-99
6185/6188NSD-3AX*#837#
V430SD3a2.nef 05-18-99 +
V441SD3a3.nef 11-12-99
6190NSB-3*#6190#
V5.24 +

NetMonitor in Menu 11 (in older firmware +in Menu 10). +
Monitor sieci w Menu 11 (w starszych +wersjach w Menu 10). +

V5.30 +

Support for caller groups logos. +
Wsparcie dla log grupy. +

V5.53 +

Custom ringtones and the Startup logo are all now uploadable to the +phone directly using a data cable. +
W³asne dzwonki i loga startowe mog± byæ teraz bezpo¶rednio wgrywane +do telefonu przez kabel. +

The max volume is slightler louder than previous  +
Maksymalna g³o¶no¶æ jest teraz wiêksza. +

Added Menu 4-3-7 (Notifications on SIM update) +
Dodano Menu 4-3-7. +

V5.83 17-09-99 +

Added support for operator logo (uploading via cable or general support) +
Dodano obs³ugê loga operatora (mo¿liwo¶æ +wgrywania przez kabel albo ogóln± obs³ugê)

7110NSE-5*#0000#448895
V4.67 28-09-99 +
V4.69 05-10-99 +
V4.70 28-10-99 +
V4.72 10-11-99 +
V4.73 15-11-99 +
V4.75 23-11-99 +
V4.76 13-01-00 +

(V4.73) Improvement to Manual Network selection search +
(V4.73) Poprawiono wyszukiwanie sieci przy rêcznym ich wyborze +

(V4.73) Improvements to CLI Graphics: +
(V4.73) Poprawki nastêpuj±cych b³êdów: +

    +
  • +CLI group tone can't be changed
  • + +
    D¼wiêk nie mo¿e byæ zmieniony w grupach osób +
      +
  • +Can't make call by pressing "send" key in CLI member list
  • + +
    Nie mo¿na zadzwoniæ przez naci¶niêcie "wy¶lij" w menu grupy osób cz³onkowie +
      +
  • +"End" key doesn't work right in Caller Group General Note
  • + +
    Klawisz "Koniec" nie dzia³a poprawnie w ogólnych notatkach grupy osób +dzwoni±cych +
      +
  • +Phone reset when there are two or more active downloaded ringing tones +in Caller groups
  • + +
    Telefon siê resetuje, gdy s± dwa albo wiêcej wgranych przez u¿ytkownika +dzwonków w grupach osób dzwoni±cych +
      +
  • +CLI group tones list problems
  • + +
    Problemy z list± dzwonków grupy (pozycje s± przesuniête - po wybraniu +jakiego¶ telefon faktycznie ustawia kolejny na li¶cie)
+(V4.73) The Euro character can now be sent by SMS +
(V4.73) Symbol Euro mo¿e byæ teraz wys³any w wiadomo¶ci SMS +

(V4.73) The Call Waiting functionality in the car kit is now improved +concerning radio mute +
(V4.73) Poprawiono funkcjê po³±czeñ oczekuj±cych w zestawie samochodowym +

(V4.73) Dialled numbers removed in Roller menu. +
(V4.73) Wybierane numery zosta³y usuniête z Roller menu. +

(V4.73) The user is now able to insert a phone number into a SMS message +by searching the phonebook for the number. +
(V4.73) U¿ytkownik mo¿e teraz wstawiæ numer telefonu do wiadomo¶ci +SMS przez znalezienie go w ksi±¿ce telefonicznej. +

(V4.73) Improvement of Calendar using am/pm clock +
(V4.73) Poprawki w kalendarzu przy u¿ywaniu 12-godzinnego formatu czasu +

(V4.73) Improvement of speed dial function when same name is assigned +to speed dial twice +
(V4.73) Poprawki w funkcji szybkiego dzwonienia, gdy ta sama pozycja +jest przypisana do dwóch klawiszy szybkiego wyboru. +

V4.77 25-01-00 +
V4.84 07-04-00 +
+


+
BUG: Test 45 in NetMonitor doesn't +work correctly. +
B£¡D: Test 45 w monitorze sieci nie +dzia³a poprawnie. +
 
8110NHE-6, NHE-6BX*#8110#490137
V4.25 09-09-96 +
V4.36 23-10-96 +
V6.01 27-02-98
8110iNHE-6, NHE-6BM*#8110#
V24.11 09-09-97 +
V25.20 16-10-98
8146NHK-6*#170602112302#
8148 NHK-6*#8110#
8148iNHK-6V
V3.10 09-12-97
8210NSM-3
V5.08 16-11-99
8810NSE-6*#0000#
V4.03 10-08-98 +
V4.05 26-11-98 +
V5.00 29-09-99
8850NSM-2*#0000#448901
V5.08 17-11-99 +
V5.11 09-12-99
Communicator 9000RAE-1*#682371158412125#
V4.01 15-09-97 +
V4.55 04-02-97
Communicator 9000iRAE-4*#682371158412125#
V6.34 16-09-97 +
V6.51 02-02-98
Communicator 9110RAE-2*#0000#
V3.07 17-01-99 +
V5.02 28-08-99
Card Phone 1.0RPE-1
+ +

I na koniec jedna ciekawostka: w niektórych modelach, kiedy ustawisz +sygna³ wiadomo¶ci SMS na "Narastaj±cy", telefon bêdzie wygrywa³ komunikat +"Connecting people" alfabetem Morse'a. +
And on the end one interesting thing: in some models, when you set +SMS message tone to "Ascending" ('Long & Loud' with older firmware), +phone plays "Connecting people" with Morse alphabet. +

Niektóre u¿yte materia³y pochodz± ze stron: +
Some used materials are from WWW pages: +

    +
  1. +http://www.ozemail.com.au/~graemec/51106110/6110frequent.htm
  2. + +
  3. +http://www.webit.com/tw/nokia.shtml
  4. + +
  5. +http://vzone.virgin.net/neil.hobbs/Nokia/Phone.htm
  6. + +
  7. +http://home.wanadoo.nl/nokiainfo/firmware_revisions.html
  8. + +
  9. +http://www.worldofcellularsecrets.com/free.htm
  10. + +
  11. +http://www.telephone.ru/faq/nokia6100/
  12. + +
  13. +http://gsm.erc.bc.ca/553software.html
  14. + +
  15. +http://www.users.bigpond.com/Scotth/
  16. +
+Back to the top/Na pocz±tek +

+


+
Marcin +Wi±cek (WWW) +
Ostatnia aktualizacja: 4 maja 2000/Last modification: +4 May 2000
+ + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/index.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/index.htm new file mode 100644 index 0000000..b3d4fb4 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/index.htm @@ -0,0 +1,20 @@ + + + + + + + Nieistniej±ca strona + + + + + 

Nieistniej±ca strona + +

Strona zasta³a usuniêta ! Proszê klikn±æ tutaj, +aby przej¶æ do nowego spisu tre¶ci (przypominam te¿ o uaktualnieniu zak³adek :-)). + +

+ + + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/net_mon1.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/net_mon1.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a8988936a7c8ee9a6856b940b39cc0a4f88aadc GIT binary patch literal 702 zcmV;v0zv&pNk%w1VYdKl0Du4h00030|NkNR1OWg50RSuj0002D0BZn10{)DTsmtvT zqnxx_3s63r^$TL*NR}Xgrs~SJ?hD8AOxO0En#RW^s16JYg}hPGaa8<<%w{loflj25 zrSpmnP(6!n$Xl^?HQ8(j+(1vyzVc4(4g=v%I?;~BkK-c#x~!+(^9h=nmLpnfdW!ngBbM6QWVr>!>Pm|=cY?uLs{{KqIUAv} z8+<~lHB_Xlq@4L7+@~7aW(b_xd&>NkP0TxdyjzXi?af90_^@rRzCOj?F6|yKZzS!! zZa+_gzoQ6mZJaNlKz13z4J3H0pTUE!u9Z8-u$4n}=+Z@$l(14I{)-p=iTfCaW59{@ zI*BBQ$QUzD3m?XF25`@`I(3q5%I68>I6-Dk0?G*Vh|f1ecXp!GvL-E(NSh@!1JqQ} zU`3gtnz}KY)rKe&Z5@VH-_vh|M$Q8U3y0dZY}>kh>!PDvxz8@Hm|JD;KD>PU`aM{; z1<|p8!PV=B5^-S;b@^#%-0<$=nPe;TT&j4oI8{s%cl;O|08mw7aKuIrAK z*ES-X?{hhXnoA|FT`Z=vQLsmw<7M+pkM6tcMuwI#PWqRZGb6hao;NwQM?`)2F*II# zF`X13Ht4NqUxb>>N8NW4Uf7d43Fd;Ee{M7w$A(Zj0wRD9`eEK7=T%5zDJ5p--HI+^ zB_cKdgm|KAk>!zNGvFvwqmE$x(xZ$+ribK_8qyKuRqiC!q&4z{6Qx8r-BzT4aBayY kcV2$UU59{$mLiUzl}QtS;_2m~UugcOBA9YAPyhe`JCN5}o&W#< literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/net_mon2.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/net_mon2.gif new file mode 100644 index 0000000000000000000000000000000000000000..841ead5729d2baa2770716fd5df9870f50359528 GIT binary patch literal 154 zcmZ?wbhEHbv}2HBXkY+=|Ns9h{$ycfU|?j>0r5dH4ornT{VPwuU4LM5qm#$mO;S&) z3m_qf%0qp18&#ns=O?H2MMXBgy7aGcOl`Nt$ZaFI~g*{toi zw68yz+v;s{X$F_A`QBH7(j9J7*BYi5$Q@1o68xiXs0r5dH4ovwy{VPwuJ>M|7(a9rs^Q`-? zYae+`<8D~?>eRM(vzsDP-L~A3%vjsbN$g{?2$ihmCpMY>--WcEz90@M{lct)LVHIPKhJizHeFlyu9Pt))O-V7#OSp DJQqZV literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/net_spis.htm b/xgnokii/docs/help/pl_PL/netmon/gsm/net_spis.htm new file mode 100644 index 0000000..2e4d58a --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/gsm/net_spis.htm @@ -0,0 +1,130 @@ + + + + + + Odsy³acze do testów monitora sieci + + + + + + +
Wybierz numer testu

+ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +17 +18 +19 +20 +21 +22 +23 +24 +25 +30 +34 +35 +36 +38 +39 +40 +41 +42 +43 +44 +45 +46 +48 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +110-115 +130 +240 +241 +242 +243 +250 +497 + +

+ + diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/nm2_5110.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/nm2_5110.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b221c14ff2b7114c72fce46cab6c01b2cb308a0 GIT binary patch literal 228 zcmVea%q08+LqntD)inHF& z9u9^ga~b1_RtjLI?z^xoOxO0E$#T`=_lyDhe!bmlW*pXpNJLAhq%n1e9W?ryI-1yJ z(W>o=$KlvxthB5P)Mh%nhnk00282>TLx8 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/nm_3210.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/nm_3210.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1259fb8bfe7f628b580de3af86da0831e504cf4 GIT binary patch literal 392 zcmV;30eAjKNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtx(05}rbi?fn5 za1Dkc)p_NJrc7n9>I=IrOpo$e=lLDsDLb=mN(6-z^_!MuhJzRA*0zS|H}|!MmQa{zxHoth z2FdtQbZ407ImtJ<2uUPb`4~wlX(#&d$BK25>ZQo_HVTzHrOTUf*$dnfJiJ0|Y;>Ib zYjO0`?2B}|CHO3MyCj5(tnCoksfAu9Q?)t@=1BtL(<7D-~4~0027#ytY07 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/nm_5110.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/nm_5110.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d41c3d58067ed8bd4460047baf6067a9c74f391 GIT binary patch literal 374 zcmV-+0g3)cNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtxZ0622Oi?c@6 z$nb6ANQPfXrmAC3=nBUzXvMaQcK6OJdF=zjX2T#w$U)*PuM|?(O!hoV(UVwV>ZsXT zmOJ~>!c|J}>#uWrtzmNHOdX1$PWoPu&rN`G6*XIXV#%46O$0wyI zcqz9CaVHtoWZAeFILQ*ph(`)4`qy~+!0GoQ``0r1117gQwOhjLtMT|N>@i$SXpC%@ zoE*H|)2w?Y20RG7;u3LK&35R7qs-lf+MvDt`aLe)QKl_v25WHeN&4JYwCB(ydbX@H>MV|`dP4Wfqa`wB U)sM3#;oKVTAS<0jZWI6jI|^#I00000 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/gsm/nm_9110.gif b/xgnokii/docs/help/pl_PL/netmon/gsm/nm_9110.gif new file mode 100644 index 0000000000000000000000000000000000000000..921ccdb83f7ee94ba40bf5bb44134ab4de16b258 GIT binary patch literal 392 zcmV;30eAjKNk%w1VN?Jx0Du4h00030|Nkri0000~05AXm0{)DTsmtvTft0Y?izCRq z`$c`?Xocj7CT7Z#YYW5Xi_l_dV;i^!x!*hCf*s;vV)*?=%Zf2Mgbr7e>JbUVQmonC z_L*c@ztD1RLyoGw>~ac^O@W*DTGH6If*B3Pj zcO)mJc=c$RNQo%9n0bh~=_#4&SSi}T$k}x!tIFzFSUDP_TeRD&;|m-SJS;|RTyva! znH;nH@z$ik^_&6;?c6n;f$bD`_U7$+1->n0IzA>YsNL-nCVgF;Hx-S{bSec65)Mw@ zPW>v|opAZ)>EO06puiaf(aqt25ShYjNW92-2yq+6Xij|kh56I)*9CU4HjU}A@#Bq= zBo)y}r4m!beNI~PgQF$R!;~7C`TPkqXbUVH7tOrUk`O7Q#Ok#Yq)8J|Ut9=P)DtOd mNnlj8&X|Yi>Q<`ON|`GWYNr!iG1^D)u z-Lzf2L^w#|NR#&F2NiR!S{%JPXC|}9_By|m>R|g&|7s~_#@eia7U^cTR&@>Q4v8+I z(#(kJ38Irs?G-CTW=v+BIoY0tC1FALq7XB-W%GnrE)=n-SUx{Jb~PKb#d@zzq71t$ r+=UK`9gaQ5c0&A=*g1&{8+VrMzErd5=Jjh@-S;0pdi+?Bfx#L88ApI2 literal 0 HcmV?d00001 diff --git a/xgnokii/docs/help/pl_PL/netmon/htm.gif b/xgnokii/docs/help/pl_PL/netmon/htm.gif new file mode 100644 index 0000000000000000000000000000000000000000..e438447aaa7d22aab61fbabdbbed54c8c10ff878 GIT binary patch literal 130 zcmZ?wbhEHb6krfw*u($=2M!!)XlVG)!0;c4fdrUR{K>+|z`)F)15yD}%f#$%vFnbm zftPxZ>NSBMCCAtljHZUpVHIOoQnssg + + + + Nokia i GSM offline + + + + + + + + <font face="Comic Sans MS" size=+3>Nokia i GSM </font><b><font face="Tahoma" color="#FF6666" size=+1>offline</font></b> + <p>Twoja przegl±darka nie obs³uguje niestety ramek. + Kliknij <a href="glowna.htm">tutaj</a>, aby przej¶æ do spisu tre¶ci. + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/konw.js b/xgnokii/docs/help/pl_PL/netmon/konw.js new file mode 100644 index 0000000..2dbe053 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/konw.js @@ -0,0 +1,20 @@ +var konw='0'; //jezeli na dysku jest www.fkn.pl off-line, nalezy wgrac + //do katalogu marcinw i zmienic ten parameter na 1 + //(wtedy wszystkie odnosniki do www.fkn.pl beda zmieniane + //na odnosniki do lokalnych plikow) + +if (konw=='1') +{ + if (document.location.protocol=="file:") + { + for (var i=0;i + + + +Strona Marcina - spis treœci + + + + + + + + + + Strona g³ówna
+ NOKIA I GSM
+     Identyfikacja i oprogramowanie telefonów Nokia (4 maja 2000)
+     Kable (4 maja 2000)
+         Jakie s± rodzaje kabli do telefonów Nokia ?
+         Czy siê ró¿ni± ?
+         Jak je rozpoznaæ ?
+         Gdzie mogê znale¼æ ich schematy ?
+         Czy mogê przerobiæ kabel FBUS na MBUS ?
+         Gdzie i za ile mogê kupiæ gotowy kabel ?
+         Gdzie znajdê protoko³y transmisji ?
+         Podczas próby po³±czenia z telefonem otrzymujê komunikaty "Z³a suma kontrolna" ("Bad checksum") albo podobne...
+
+     Loga operatora (4 maja 2000)
+         Co to jest ?
+         Czy mój telefon mo¿e je wy¶wietlaæ ?
+         Co potrzeba do stworzenia loga ?
+         Gdzie w Internecie mo¿na znale¼æ gotowe loga ?
+         W jaki sposób mo¿na przes³aæ logo do telefonu ?
+         Przegl±d dostêpnych programów do edycji/wysy³ania log
+         Dlaczego nie mogê zainstalowaæ programów Thomasa Kesslera (pokazuje siê 'Runtime error') ?
+         Dlaczego nie mogê zainstalowaæ programu Logo Express (b³±d rejestracji bibliotek) ?
+         Jak skonfigurowaæ programy ?
+         Przesy³anie log przy u¿yciu konkretnych programów
+         Dlaczego nie mogê go po prostu przes³aæ kablem (we wszystkich modelach) ?
+         Czy mogê je wys³aæ przez Internet albo modem ?
+         Dlaczego nie mogê go przes³aæ u¿ywaj±c tego centrum wiadomo¶ci SMS co zawsze ?
+         Jak zapisaæ logo w pamiêci telefonu ?
+         Chcê wykasowaæ moje logo !
+         Czy mogê skopiowaæ logo z pamiêci telefonu do komputera ?
+         Mój notebook ze z³±czem podczerwieni nie chce dzia³aæ...
+         Jak przesy³aæ loga do Nokii 3210 ?
+         Czy wgranie loga operatora narusza warunki gwarancji ?
+         Przy próbie bezpo¶redniego wgrania loga przez kabel (albo jego wykasowania) programem LogoManager nic siê nie dzieje...
+         Jak skopiowaæ logo z telefonu do telefonu ?
+         Dodatkowe informacje
+
+     Monitor sieci (4 maja 2000)
+         Co to jest ?
+         Czy jest mi potrzebny ?
+         Czy po w³±czeniu monitora telefon pobiera wiêcej energii ?
+         Jak go w³±czyæ ?
+         Jak± wersjê monitora mogê w³±czyæ w telefonie ?
+         Czy w³±czenie monitora powoduje utratê gwarancji ?
+         W moim telefonie menu monitora ma numer inny ni¿ 10. Czy to normalne ?
+         W moim telefonie menu monitora ma numer 11, natomiast poprzednia pozycja numer 9. Czy to normalne ?
+         Jak siê nim pos³ugiwaæ ?
+         Czy mogê zepsuæ sobie telefon ?
+         S³owniczek
+         Znaczenie poszczególnych testów
+         Mo¿na te¿ u¿yæ programu...
+         Czy mo¿na korzystaæ z monitora sieci, gdy nie w telefonie karty SIM (nie zosta³ podany jej PIN) ?
+         W jaki sposób mogê wy³±czyæ monitor sieci ?
+         Czy powinienem wy³±czyæ monitor sieci przed oddaniem telefonu do serwisu ?
+         Czy po wy³±czeniu monitora sieci bêdê go móg³ w³±czyæ ponownie ?
+         Czy monitor sieci jest dostêpny tak¿e w analogowych Nokiach ?
+         Czy monitor sieci pozwoli na u¿ywanie telefonu podobnie jak radiostacji ?
+         Dlaczego w moim telefonie jest znacznie mniej testów ni¿ zosta³o tutaj opisane ? Czy mogê zwiêkszyæ ich ilo¶æ ?
+         Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie znajduje siê mój rozmówca ?
+         Czy mogê stwierdziæ z pomoc± monitora sieci, gdzie siê znajdujê ?
+         Co to s± kody monitora sieci ?
+         Czy jest prawd±, ¿e monitor sieci w telefonie z dodatkowym urz±dzeniem zmieniaj±cym jego pasmo dzia³a niepoprawnie ?
+         Gdzie znajdê opis protoko³u MBUS/FBUS i komendy zwi±zane z monitorem sieci ?
+         U¿yte materia³y
+         Dodatkowe informacje
+
+
+
+ + diff --git a/xgnokii/docs/help/pl_PL/netmon/spis_d.htm b/xgnokii/docs/help/pl_PL/netmon/spis_d.htm new file mode 100644 index 0000000..1479c2d --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/spis_d.htm @@ -0,0 +1,17 @@ + + + + + + + + + + Strona Marcina ON-LINE + + + + + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/spis_d2.htm b/xgnokii/docs/help/pl_PL/netmon/spis_d2.htm new file mode 100644 index 0000000..8a1896f --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/spis_d2.htm @@ -0,0 +1,17 @@ + + + + + + + + + + Strona Marcina ON-LINE + + + + + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/spis_g.htm b/xgnokii/docs/help/pl_PL/netmon/spis_g.htm new file mode 100644 index 0000000..5633a6e --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/spis_g.htm @@ -0,0 +1,108 @@ + + + + + Spis tresci - gora + + + + + + + + + SPIS TRE¦CI + MONITOR SIECI + + + + diff --git a/xgnokii/docs/help/pl_PL/netmon/styl.css b/xgnokii/docs/help/pl_PL/netmon/styl.css new file mode 100644 index 0000000..e750280 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/netmon/styl.css @@ -0,0 +1,47 @@ + + + diff --git a/xgnokii/docs/help/pl_PL/sms.html b/xgnokii/docs/help/pl_PL/sms.html new file mode 100644 index 0000000..304b746 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/sms.html @@ -0,0 +1,12 @@ + + + +Xgnokii SMS Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/speeddial.html b/xgnokii/docs/help/pl_PL/speeddial.html new file mode 100644 index 0000000..ea48b0e --- /dev/null +++ b/xgnokii/docs/help/pl_PL/speeddial.html @@ -0,0 +1,12 @@ + + + +Xgnokii Speed Dial Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/docs/help/pl_PL/xkeyb.html b/xgnokii/docs/help/pl_PL/xkeyb.html new file mode 100644 index 0000000..b8c8ed1 --- /dev/null +++ b/xgnokii/docs/help/pl_PL/xkeyb.html @@ -0,0 +1,12 @@ + + + +Xgnokii Keyboard Window + + + +

Sorry, we don't have own help page for yet.

+ + + + diff --git a/xgnokii/xgnokii.c b/xgnokii/xgnokii.c new file mode 100644 index 0000000..8375be4 --- /dev/null +++ b/xgnokii/xgnokii.c @@ -0,0 +1,2491 @@ +/* + + $Id$ + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:26 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.39 2001/11/08 16:34:20 pkot + Updates to work with new libsms + + Revision 1.38 2001/09/14 13:14:03 pkot + Xgnokii WM fixes (Martin Lucina) + + Revision 1.37 2001/06/27 23:52:52 pkot + 7110/6210 updates (Marian Jancar) + + Revision 1.36 2001/06/20 21:27:36 pkot + IrDA patch (Marian Jancar) + + Revision 1.35 2001/05/24 20:47:30 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.34 2001/03/23 08:24:56 ja + New preview for 6210 in xgnokii's logos module. + + Revision 1.33 2001/03/19 23:43:47 pkot + Solaris/BSD '#if defined' cleanup + + Revision 1.32 2001/03/13 01:21:39 pkot + *BSD updates (Bert Driehuis) + + Revision 1.31 2001/03/05 10:42:02 ja + Pavel Machek's vcard and finegrained indicators patch. + + Revision 1.30 2001/01/29 15:22:20 machek + Use integer as bitfield instead of struct of int:1. + + Be able to read phonebook saved in gnokii format from xgnokii. + + Revision 1.29 2001/01/15 21:10:20 ja + Better status reporting in xgnokii, fixed phone capabilities detection in xgnokii. + + Revision 1.28 2000/12/20 11:49:25 ja + Bringing back to life smsd. It was broken after last Pawel update. + + Revision 1.27 2000/12/19 16:18:21 pkot + configure script updates and added shared function for configfile reading + + +*/ + +#include /* for getenv */ +#include +#include +#include /* for time */ +#include + +#ifndef WIN32 +# include /* for usleep */ +# include +#else +# include +# include "../win32/winserial.h" +# define WRITEPHONE(a, b, c) WriteCommBlock(b, c) +# undef IN +# undef OUT +# define sleep(x) Sleep((x) * 1000) +# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +#endif + +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "cfgreader.h" +#include "phones/nk7110.h" +#include "phones/nk6110.h" +#include "phones/nk3110.h" +#include "phones/nk2110.h" +#include "xgnokii.h" +#include "xgnokii_common.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_contacts.h" +#include "xgnokii_sms.h" +#include "xgnokii_netmon.h" +#include "xgnokii_dtmf.h" +#include "xgnokii_speed.h" +#include "xgnokii_xkeyb.h" +#include "xgnokii_calendar.h" +#include "xgnokii_logos.h" +#include "xgnokii_cfg.h" +#include "xgnokii_data.h" + +#include "xpm/logo.xpm" +#include "xpm/background.xpm" +#include "xpm/sms.xpm" +#include "xpm/alarm.xpm" + +/* Widgets for dialogs. */ +static GtkWidget *SplashWindow; +static GtkWidget *GUI_MainWindow; +static GtkWidget *AboutDialog; +static ErrorDialog errorDialog = {NULL, NULL}; +static InfoDialog infoDialog = {NULL, NULL}; +static GtkWidget *OptionsDialog; +static bool optionsDialogIsOpened; + +/* SMS sets list */ +static GtkWidget *SMSClist; + +/* Pixmap used for drawing all the stuff. */ +static GdkPixmap *Pixmap = NULL; + +/* Pixmap used for background. */ +static GdkPixmap *BackgroundPixmap = NULL; + +/* Pixmap used for SMS picture. */ +static GdkPixmap *SMSPixmap = NULL; + +/* Pixmap used for alarm picture. */ +static GdkPixmap *AlarmPixmap = NULL; + + +/* Widget for popup menu */ +static GtkWidget *Menu; +static GtkWidget *netmon_menu_item; +static GtkWidget *sms_menu_item; +static GtkWidget *calendar_menu_item; +static GtkWidget *logos_menu_item; +static GtkWidget *dtmf_menu_item; +static GtkWidget *speedDial_menu_item; +static GtkWidget *xkeyb_menu_item; +static GtkWidget *cg_names_option_frame; +static GtkWidget *sms_option_frame; +static GtkWidget *mail_option_frame; +static GtkWidget *user_option_frame; +static GtkWidget *data_menu_item; + +/* Hold main configuration data for xgnokii */ +XgnokiiConfig xgnokiiConfig; + +gint max_phonebook_name_length; +gint max_phonebook_number_length; +gint max_phonebook_sim_name_length; +gint max_phonebook_sim_number_length; + +/* Local variables */ +static char *DefaultXGnokiiDir = XGNOKIIDIR; +static bool SMSSettingsInitialized = FALSE; +static bool CallersGroupsInitialized = FALSE; +static gint hiddenCallDialog; +static guint splashRemoveHandler; + +static struct CallDialog { + GtkWidget *dialog; + GtkWidget *label; +} inCallDialog; + +typedef struct { + GtkWidget *alarmSwitch; + GtkWidget *alarmHour; + GtkWidget *alarmMin; +} AlarmWidgets; + +typedef struct { + GtkWidget *port; + GtkWidget *model; + GtkWidget *init; + GtkWidget *bindir; + GtkWidget *serial, *infrared, *irda; +} ConnectionWidgets; + +typedef struct { + GtkWidget *model; + GtkWidget *version; + GtkWidget *revision; + GtkWidget *imei; + GtkWidget *simNameLen; + GtkWidget *phoneNameLen; +} PhoneWidgets; + +typedef struct { + GtkWidget *set; + GtkWidget *number; + GtkWidget *format; + GtkWidget *validity; + GSM_MessageCenter smsSetting[MAX_SMS_CENTER]; +} SMSWidgets; + +typedef struct { + GtkWidget *name; + GtkWidget *title; + GtkWidget *company; + GtkWidget *telephone; + GtkWidget *fax; + GtkWidget *email; + GtkWidget *address; + GtkWidget *status; + gint max; + gint used; +} UserWidget; + +static struct ConfigDialogData +{ + ConnectionWidgets connection; + PhoneWidgets phone; + GtkWidget *groups[6]; + AlarmWidgets alarm; + SMSWidgets sms; + UserWidget user; + GtkWidget *mailbox; + GtkWidget *help; +} configDialogData; + +static GSM_MessageCenter tempMessageSettings; + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +void GUI_InitCallerGroupsInf (void) +{ + D_CallerGroup *cg; + PhoneEvent *e; + register gint i; + + if (CallersGroupsInitialized) + return; + + gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading caller groups names ...")); + gtk_widget_show_now (infoDialog.dialog); + GUI_Refresh (); + + xgnokiiConfig.callerGroups[0] = g_strndup( _("Familly"), MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[1] = g_strndup( _("VIP"), MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[2] = g_strndup( _("Friends"), MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[3] = g_strndup( _("Colleagues"), MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[4] = g_strndup( _("Other"), MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[5] = g_strndup( _("No group"), MAX_CALLER_GROUP_LENGTH); + + if (phoneMonitor.supported & PM_CALLERGROUP) + for (i = 0; i < 5; i++) + { + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = i; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + pthread_mutex_lock (&callerGroupMutex); + pthread_cond_wait (&callerGroupCond, &callerGroupMutex); + pthread_mutex_unlock (&callerGroupMutex); + + if (*cg->text != '\0' && cg->status == GE_NONE) + { + g_free (xgnokiiConfig.callerGroups[i]); + xgnokiiConfig.callerGroups[i] = g_strndup (cg->text, MAX_CALLER_GROUP_LENGTH); + } + g_free (cg); + } + + CallersGroupsInitialized = TRUE; + gtk_widget_hide (infoDialog.dialog); + GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED); +} + + +static inline void DrawBackground (GtkWidget *data) +{ + gdk_draw_pixmap (Pixmap, + GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL], + BackgroundPixmap, + 0, 0, + 0, 0, + 261, 96); +} + + +int network_levels[] = { + 152, 69, 11, 3, + 138, 69, 11, 3, + 124, 69, 11, 4, + 110, 69, 11, 6 +}; + + +static inline void DrawNetwork (GtkWidget *data, int rflevel) +{ + int i; + + if (rflevel > 100) + rflevel = 100; + for (i = 0; (i * 25) <= rflevel; i++) + { + float percent = ((float) rflevel - i * 25) / 25; + + if (percent > 1) + percent = 1; + gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE, + network_levels[4 * i] + network_levels[4 * i + 2] * (1 - percent), + network_levels[4 * i + 1], + network_levels[4 * i + 2] * percent, + network_levels[4 * i + 3]); + } +} + + +int battery_levels[] = { + 50, 69, 11, 3, + 64, 69, 11, 3, + 78, 69, 11, 4, + 92, 69, 11, 6 +}; + + +static inline void DrawBattery (GtkWidget *data, int batterylevel) +{ + int i; + + if (batterylevel < 0) + return; + if (batterylevel > 100) + batterylevel = 100; + for (i = 0; (i * 25) <= batterylevel; i++) + { + float percent = ((float) batterylevel - i * 25) / 25; + if (percent > 1) + percent = 1; + gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE, + battery_levels[4 * i], + battery_levels[4 * i + 1], + battery_levels[4 * i + 2] * percent, + battery_levels[4 * i + 3]); + } +} + + +static inline void DrawSMS (GtkWidget *data) +{ + gdk_draw_pixmap (Pixmap, + GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL], + SMSPixmap, + 0, 0, + 25, 47, + 26, 7); +} + + +static inline void DrawAlarm (GtkWidget *data) +{ + gdk_draw_pixmap (Pixmap, + GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL], + AlarmPixmap, + 0, 0, + 163, 11, + 9, 9); +} + + +static inline void DrawText (GtkWidget *data, int at, char *text) +{ + static GdkFont *Font; + + Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-iso8859-*"); + gdk_draw_string (Pixmap, + Font, + GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL], + 33, at, text); +} + + +static inline void DrawSMSReceived (GtkWidget *data) +{ + DrawText (data, 25, _("Short Message received")); +} + + +static inline void DrawWorking (GtkWidget *data) +{ + DrawText(data, 40, _("Working ...")); +} + + +static inline void HideCallDialog (GtkWidget *widget, gpointer data) +{ + hiddenCallDialog = 1; + gtk_widget_hide (GTK_WIDGET (data)); +} + + +static void CreateInCallDialog (void) +{ + GtkWidget *button, *hbox; + + inCallDialog.dialog = gtk_dialog_new (); + gtk_window_position (GTK_WINDOW (inCallDialog.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_title (GTK_WINDOW (inCallDialog.dialog), _("Call in progress")); + gtk_container_set_border_width (GTK_CONTAINER (inCallDialog.dialog), 5); + gtk_signal_connect (GTK_OBJECT (inCallDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->vbox), hbox, FALSE, FALSE, 5); + gtk_widget_show (hbox); + + inCallDialog.label = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (hbox), inCallDialog.label, FALSE, FALSE, 0); + gtk_widget_show (inCallDialog.label); + + button = gtk_button_new_with_label (_("Hide")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->action_area), + button, TRUE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (HideCallDialog), (gpointer) inCallDialog.dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); +} + + +static gint Update (gpointer data) +{ + static gchar lastCallNum[20] = ""; + static gchar callBuf[80]; + static gchar timeBuf[10]; + static gchar *anonym = "anonymous"; + static struct tm stm; + static gint smsNumber = 0; + static gint callTimerStart = 0; + gint callTimer = 0; + time_t t; + static gchar *name; + static bool outgoing = TRUE; + + + /* The number of SMS messages before second */ + static int smsold=0; + + /* The number of second for we should display "Short Message Received" message */ + static int smsreceived=-1; + + DrawBackground (data); + + DrawNetwork (data, phoneMonitor.rfLevel); + + DrawBattery (data, phoneMonitor.batteryLevel); + + if (phoneMonitor.alarm) + DrawAlarm (data); + + if (phoneMonitor.working) + DrawText (data, 25, phoneMonitor.working); + + pthread_mutex_lock (&smsMutex); + if (phoneMonitor.sms.unRead > 0) + { + DrawSMS (data); + + if (phoneMonitor.sms.unRead > smsold && smsold != -1) + smsreceived = 10; /* The message "Short Message Received" is displayed for 10s */ + } + if (smsNumber != phoneMonitor.sms.number) + GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED); + + smsold = phoneMonitor.sms.unRead; + + smsNumber = phoneMonitor.sms.number; + + pthread_mutex_unlock (&smsMutex); + + if (smsreceived >= 0) + { + DrawSMSReceived (data); + smsreceived--; + } + + pthread_mutex_lock (&callMutex); + if (phoneMonitor.call.callInProgress != CS_Idle) + { + if (phoneMonitor.call.callInProgress == CS_InProgress) + { + if (!callTimerStart) + callTimerStart = callTimer = time (NULL); + else + callTimer = time (NULL); + } + + if (phoneMonitor.call.callInProgress == CS_Waiting) + { + outgoing = FALSE; + + if (*phoneMonitor.call.callNum == '\0') + name = anonym; + else if (strncmp (phoneMonitor.call.callNum, lastCallNum, 20)) + { + strncpy (lastCallNum, phoneMonitor.call.callNum, 20); + lastCallNum[19] = '\0'; + name = GUI_GetName (phoneMonitor.call.callNum); + if (!name) + name = phoneMonitor.call.callNum; + } + } + t = (time_t) difftime (callTimer, callTimerStart); + (void) gmtime_r (&t, &stm); + strftime (timeBuf, 10, "%T", &stm); + if (outgoing) + g_snprintf (callBuf, 80, _("Outgoing call in progress:\nTime: %s"), + timeBuf); + else + g_snprintf (callBuf, 80, _("Incomming call from: %s\nTime: %s"), + name, timeBuf); + + gtk_label_set_text (GTK_LABEL (inCallDialog.label), callBuf); + if (!GTK_WIDGET_VISIBLE (inCallDialog.dialog) && !hiddenCallDialog) + gtk_widget_show (inCallDialog.dialog); + } + else + { + callTimerStart = callTimer = 0; + *lastCallNum = '\0'; + outgoing = TRUE; + if (GTK_WIDGET_VISIBLE (inCallDialog.dialog)) + gtk_widget_hide (inCallDialog.dialog); + hiddenCallDialog = 0; + } + pthread_mutex_unlock (&callMutex); + + gtk_widget_draw (data,NULL); + + GUIEventSend (GUI_EVENT_NETMON_CHANGED); + + return TRUE; +} + + +/* Redraw the screen from the backing pixmap */ +static inline gint ExposeEvent (GtkWidget *widget, GdkEventExpose *event) +{ + gdk_draw_pixmap (widget->window, + widget->style->fg_gc[GTK_WIDGET_STATE (widget)], + Pixmap, + event->area.x, event->area.y, + event->area.x, event->area.y, + event->area.width, event->area.height); + + return FALSE; +} + + +static void ParseSMSCenters (void) +{ + register gint i; + register gint j; + + gtk_clist_freeze (GTK_CLIST (SMSClist)); + + gtk_clist_clear (GTK_CLIST (SMSClist)); + + for (i = 0; i < xgnokiiConfig.smsSets; i++) + { + gchar *row[4]; + if (*(configDialogData.sms.smsSetting[i].Name) == '\0') + row[0] = g_strdup_printf (_("Set %d"), i + 1); + else + row[0] = g_strdup (configDialogData.sms.smsSetting[i].Name); + + row[1] = g_strdup (configDialogData.sms.smsSetting[i].Number); + + switch (configDialogData.sms.smsSetting[i].Format) + { + case GSMF_Text: + row[2] = g_strdup (_("Text")); + break; + + case GSMF_Paging: + row[2] = g_strdup (_("Paging")); + break; + + case GSMF_Fax: + row[2] = g_strdup (_("Fax")); + break; + + case GSMF_Email: + case GSMF_UCI: + row[2] = g_strdup (_("E-Mail")); + break; + + case GSMF_ERMES: + row[2] = g_strdup (_("ERMES")); + break; + + case GSMF_X400: + row[2] = g_strdup (_("X.400")); + break; + + case GSMF_Voice: + row[2] = g_strdup (_("Voice")); + break; + + default: + row[2] = g_strdup (_("Text")); + break; + } + + switch (configDialogData.sms.smsSetting[i].Validity) + { + case GSMV_1_Hour: + row[3] = g_strdup (_("1 h")); + break; + + case GSMV_6_Hours: + row[3] = g_strdup (_("6 h")); + break; + + case GSMV_24_Hours: + row[3] = g_strdup (_("24 h")); + break; + + case GSMV_72_Hours: + row[3] = g_strdup (_("72 h")); + break; + + case GSMV_1_Week: + row[3] = g_strdup (_("1 week")); + break; + + case GSMV_Max_Time: + row[3] = g_strdup (_("Max. time")); + break; + + default: + row[3] = g_strdup (_("24 h")); + break; + } + + gtk_clist_append( GTK_CLIST (SMSClist), row); + + for (j = 0; j < 4; j++) + g_free (row[j]); + } + + gtk_clist_thaw (GTK_CLIST (SMSClist)); +} + + +static void RefreshUserStatus (void) +{ + gchar buf[8]; + configDialogData.user.used = GTK_ENTRY (configDialogData.user.name)->text_length + + GTK_ENTRY (configDialogData.user.title)->text_length + + GTK_ENTRY (configDialogData.user.company)->text_length + + GTK_ENTRY (configDialogData.user.telephone)->text_length + + GTK_ENTRY (configDialogData.user.fax)->text_length + + GTK_ENTRY (configDialogData.user.email)->text_length + + GTK_ENTRY (configDialogData.user.address)->text_length; + configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH; + if (GTK_ENTRY (configDialogData.user.telephone)->text_length > 0) + configDialogData.user.max -= 4; + if (GTK_ENTRY (configDialogData.user.fax)->text_length > 0) + configDialogData.user.max -= 4; + g_snprintf (buf, 8, "%d/%d", configDialogData.user.used, configDialogData.user.max); + gtk_label_set_text (GTK_LABEL (configDialogData.user.status), buf); +} + + +void GUI_InitSMSSettings (void) +{ + PhoneEvent *e; + D_SMSCenter *c; + register gint i; + + if (SMSSettingsInitialized) + return; + + gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading SMS centers ...")); + gtk_widget_show_now (infoDialog.dialog); + GUI_Refresh (); + + for (i = 1; i <= MAX_SMS_CENTER; i++) + { + xgnokiiConfig.smsSetting[i - 1].No = i; + c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter)); + c->center = &(xgnokiiConfig.smsSetting[i - 1]); + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetSMSCenter; + e->data = c; + GUI_InsertEvent (e); + pthread_mutex_lock (&smsCenterMutex); + pthread_cond_wait (&smsCenterCond, &smsCenterMutex); + pthread_mutex_unlock (&smsCenterMutex); + + if (c->status != GE_NONE) + break; + + g_free (c); + + configDialogData.sms.smsSetting[i - 1] = xgnokiiConfig.smsSetting[i - 1]; + } + + xgnokiiConfig.smsSets = i - 1; + + ParseSMSCenters (); + + SMSSettingsInitialized = TRUE; + + gtk_widget_hide (infoDialog.dialog); +} + + +void GUI_ShowOptions (void) +{ + PhoneEvent *e; + D_Alarm *alarm; + register gint i; + + if (optionsDialogIsOpened) + return; + + gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.port), xgnokiiConfig.port); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.model), xgnokiiConfig.model); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.init), xgnokiiConfig.initlength); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.bindir), xgnokiiConfig.bindir); + + if(!strcmp(xgnokiiConfig.connection, "serial")) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.serial), TRUE); + } else if(!strcmp(xgnokiiConfig.connection, "infrared")) { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.infrared), TRUE); + } else { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.irda), TRUE); + } + + /* Phone */ + gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.model), phoneMonitor.phone.model); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.version), phoneMonitor.phone.version); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.revision), phoneMonitor.phone.revision); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.imei), phoneMonitor.phone.imei); + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), + atof (xgnokiiConfig.maxSIMLen)); + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), + atof (xgnokiiConfig.maxPhoneLen)); + + /* Alarm */ + alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm)); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetAlarm; + e->data = alarm; + GUI_InsertEvent (e); + pthread_mutex_lock (&alarmMutex); + pthread_cond_wait (&alarmCond, &alarmMutex); + pthread_mutex_unlock (&alarmMutex); + + if (alarm->status != GE_NONE) + { + xgnokiiConfig.alarmSupported = FALSE; + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), 0.0); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), 0.0); + } + else + { + xgnokiiConfig.alarmSupported = TRUE; + if (alarm->time.AlarmEnabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), alarm->time.Hour); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), alarm->time.Minute); + } + g_free (alarm); + + /* SMS */ + if (phoneMonitor.supported & PM_SMS) + { + gtk_widget_show (sms_option_frame); + GUI_InitSMSSettings (); + } + else + gtk_widget_hide (sms_option_frame); + + + /* BUSINESS CARD */ + if (phoneMonitor.supported & PM_SMS) + { + gtk_widget_show (user_option_frame); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.name), + xgnokiiConfig.user.name); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.title), + xgnokiiConfig.user.title); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.company), + xgnokiiConfig.user.company); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.telephone), + xgnokiiConfig.user.telephone); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.fax), + xgnokiiConfig.user.fax); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.email), + xgnokiiConfig.user.email); + gtk_entry_set_text (GTK_ENTRY (configDialogData.user.address), + xgnokiiConfig.user.address); + + RefreshUserStatus(); + } + else + gtk_widget_hide (user_option_frame); + + + /* Groups */ + if (phoneMonitor.supported & PM_CALLERGROUP) + { + gtk_widget_show (cg_names_option_frame); + GUI_InitCallerGroupsInf (); + for ( i = 0; i < 6; i++) + gtk_entry_set_text (GTK_ENTRY (configDialogData.groups[i]), xgnokiiConfig.callerGroups[i]); + } + else + gtk_widget_hide (cg_names_option_frame); + + /* Mail */ + if (phoneMonitor.supported & PM_SMS) + { + gtk_widget_show (mail_option_frame); + gtk_entry_set_text (GTK_ENTRY (configDialogData.mailbox), + xgnokiiConfig.mailbox);; + } + else + gtk_widget_hide (mail_option_frame); + + /* Help */ + gtk_entry_set_text (GTK_ENTRY (configDialogData.help), + xgnokiiConfig.helpviewer); + + optionsDialogIsOpened = TRUE; + gtk_widget_show (OptionsDialog); +} + + +inline void GUI_ShowAbout (void) +{ + gtk_widget_show (AboutDialog); +} + + +inline void GUI_HideAbout(void) +{ + gtk_widget_hide (AboutDialog); +} + + +static void MainExit (void) +{ + PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + + e->event = Event_Exit; + e->data = NULL; + GUI_InsertEvent (e); + pthread_join (monitor_th, NULL); + gtk_main_quit(); +} + + +static void ShowMenu (GdkEventButton *event) +{ + GdkEventButton *bevent = (GdkEventButton *) event; + + if (phoneMonitor.supported & PM_KEYBOARD) + gtk_widget_show (xkeyb_menu_item); + else + gtk_widget_hide (xkeyb_menu_item); + + if (phoneMonitor.supported & PM_NETMONITOR) + gtk_widget_show (netmon_menu_item); + else + gtk_widget_hide (netmon_menu_item); + + if (phoneMonitor.supported & PM_SMS) + gtk_widget_show (sms_menu_item); + else + gtk_widget_hide (sms_menu_item); + + if (phoneMonitor.supported & PM_CALENDAR) + gtk_widget_show (calendar_menu_item); + else + gtk_widget_hide (calendar_menu_item); + + if (phoneMonitor.supported & PM_DTMF) + gtk_widget_show (dtmf_menu_item); + else + gtk_widget_hide (dtmf_menu_item); + + if (phoneMonitor.supported & PM_SPEEDDIAL) + gtk_widget_show (speedDial_menu_item); + else + gtk_widget_hide (speedDial_menu_item); + + if (phoneMonitor.supported & PM_DATA) + gtk_widget_show (data_menu_item); + else + gtk_widget_hide (data_menu_item); + + gtk_menu_popup (GTK_MENU (Menu), NULL, NULL, NULL, NULL, + bevent->button, bevent->time); +} + + +static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event) +{ + /* Left button */ + if (event->button == 1) { + + /* Close */ + if (event->x >= 206 && event->x <= 221 && + event->y >= 42 && event->y <= 55) + { + if (GUI_ContactsIsChanged()) + GUI_QuitSaveContacts(); + else + MainExit (); + } + else if ((event->x >= 180 && event->x <= 195 && + event->y >= 30 && event->y <= 50) || + (event->x >= 185 && event->x <= 215 && + event->y >= 15 && event->y <= 30)) + { + GUI_ShowContacts (); + } + else if (event->x >= 190 && event->x <= 210 && + event->y >= 70 && event->y <= 85) + { + if (!phoneMonitor.supported & PM_SMS) + phoneMonitor.working = _("SMS not supported!"); + else + GUI_ShowSMS (); + } + else if (event->x >= 235 && event->x <= 248 && + event->y >= 27 && event->y <= 75) + { + if (!phoneMonitor.supported & PM_CALENDAR) + phoneMonitor.working = _("Calendar not supported!"); + else + GUI_ShowCalendar (); + } + else if (event->x >= 245 && event->x <= 258 && + event->y >= 83 && event->y <= 93) + { + GUI_ShowOptions(); + } + } /* Right button */ + else if (event->button == 3) + ShowMenu (event); + + // g_print ("event->x: %f\n", event->x); + // g_print ("event->y: %f\n", event->y); + + return TRUE; +} + + +static void OptionsApplyCallback (GtkWidget *widget, gpointer data ) +{ + PhoneEvent *e; + D_Alarm *alarm; + register gint i; + + /* Phone */ + max_phonebook_sim_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen)); + max_phonebook_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen)); + g_free (xgnokiiConfig.maxSIMLen); + g_free (xgnokiiConfig.maxPhoneLen); + xgnokiiConfig.maxSIMLen = g_strdup_printf ("%d", max_phonebook_sim_name_length); + xgnokiiConfig.maxPhoneLen = g_strdup_printf ("%d", max_phonebook_name_length); + + /* ALARM */ + /* From fbus-6110.c + FIXME: we should also allow to set the alarm off :-) */ + if (xgnokiiConfig.alarmSupported + && GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch)->active) + { + alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm)); + alarm->time.Hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour)); + alarm->time.Minute = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin)); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SetAlarm; + e->data = alarm; + GUI_InsertEvent (e); + } + + /* SMS */ + if (phoneMonitor.supported & PM_SMS) + { + for (i = 0; i < xgnokiiConfig.smsSets; i++) + xgnokiiConfig.smsSetting[i] = configDialogData.sms.smsSetting[i]; + GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED); + } + + /* BUSINESS CARD */ + if (phoneMonitor.supported & PM_SMS) + { + g_free(xgnokiiConfig.user.name); + xgnokiiConfig.user.name = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.name))); + g_free(xgnokiiConfig.user.title); + xgnokiiConfig.user.title = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.title))); + g_free(xgnokiiConfig.user.company); + xgnokiiConfig.user.company = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.company))); + g_free(xgnokiiConfig.user.telephone); + xgnokiiConfig.user.telephone = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.telephone))); + g_free(xgnokiiConfig.user.fax); + xgnokiiConfig.user.fax = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.fax))); + g_free(xgnokiiConfig.user.email); + xgnokiiConfig.user.email = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.email))); + g_free(xgnokiiConfig.user.address); + xgnokiiConfig.user.address = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.address))); + } + + /* GROUPS */ + if (phoneMonitor.supported & PM_CALLERGROUP) + { + for ( i = 0; i < 6; i++) + { + strncpy(xgnokiiConfig.callerGroups[i], + gtk_entry_get_text(GTK_ENTRY (configDialogData.groups[i])), + MAX_CALLER_GROUP_LENGTH); + xgnokiiConfig.callerGroups[i][MAX_CALLER_GROUP_LENGTH] = '\0'; + } + GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED); + GUIEventSend (GUI_EVENT_CONTACTS_CHANGED); + } + + /* Mail */ + if (phoneMonitor.supported & PM_SMS) + { + g_free(xgnokiiConfig.mailbox); + xgnokiiConfig.mailbox = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.mailbox))); + } + + /* Help */ + g_free(xgnokiiConfig.helpviewer); + xgnokiiConfig.helpviewer = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.help))); +} + + +static void OptionsSaveCallback (GtkWidget *widget, gpointer data ) +{ + D_CallerGroup *cg; + D_SMSCenter *c; + PhoneEvent *e; + register gint i; + + //gtk_widget_hide(GTK_WIDGET(data)); + OptionsApplyCallback (widget, data); + for (i = 0; i < xgnokiiConfig.smsSets; i++) + { + xgnokiiConfig.smsSetting[i].No = i + 1; + c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter)); + c->center = &(xgnokiiConfig.smsSetting[i]); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SetSMSCenter; + e->data = c; + GUI_InsertEvent (e); + } + + if (phoneMonitor.supported & PM_CALLERGROUP) + { + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = 0; + if (strcmp (xgnokiiConfig.callerGroups[0], _("Familly")) == 0) + *cg->text = '\0'; + else + strncpy (cg->text, xgnokiiConfig.callerGroups[0], 256); + cg->text[255] = '\0'; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = 1; + if (strcmp (xgnokiiConfig.callerGroups[1], _("VIP")) == 0) + *cg->text = '\0'; + else + strncpy (cg->text, xgnokiiConfig.callerGroups[1], 256); + cg->text[255] = '\0'; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = 2; + if (strcmp (xgnokiiConfig.callerGroups[2], _("Friends")) == 0) + *cg->text = '\0'; + else + strncpy (cg->text, xgnokiiConfig.callerGroups[2], 256); + cg->text[255] = '\0'; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = 3; + if (strcmp (xgnokiiConfig.callerGroups[3], _("Colleagues")) == 0) + *cg->text = '\0'; + else + strncpy (cg->text, xgnokiiConfig.callerGroups[3], 256); + cg->text[255] = '\0'; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + + cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup)); + cg->number = 4; + if (strcmp (xgnokiiConfig.callerGroups[4], _("Other")) == 0) + *cg->text = '\0'; + else + strncpy (cg->text, xgnokiiConfig.callerGroups[4], 256); + cg->text[255] = '\0'; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendCallerGroup; + e->data = cg; + GUI_InsertEvent (e); + } + + if (GUI_SaveXConfig()) + { + gtk_label_set_text (GTK_LABEL(errorDialog.text), _("Error writing configuration file!")); + gtk_widget_show (errorDialog.dialog); + } +} + + +static GtkWidget *CreateMenu (void) +{ + GtkWidget *menu, *menu_items; + + menu = gtk_menu_new (); + + menu_items = gtk_menu_item_new_with_label (_("Contacts")); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate", + GTK_SIGNAL_FUNC (GUI_ShowContacts), NULL); + gtk_widget_show (menu_items); + + sms_menu_item = gtk_menu_item_new_with_label (_("SMS")); + gtk_menu_append (GTK_MENU (menu), sms_menu_item); + gtk_signal_connect_object (GTK_OBJECT (sms_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowSMS), NULL); + + calendar_menu_item = gtk_menu_item_new_with_label (_("Calendar")); + gtk_menu_append (GTK_MENU (menu), calendar_menu_item); + gtk_signal_connect_object (GTK_OBJECT (calendar_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowCalendar), NULL); + + logos_menu_item = gtk_menu_item_new_with_label (_("Logos")); + gtk_menu_append (GTK_MENU (menu), logos_menu_item); + gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowLogosWindow), NULL); + gtk_widget_show(logos_menu_item); + + dtmf_menu_item = gtk_menu_item_new_with_label (_("DTMF")); + gtk_menu_append (GTK_MENU (menu), dtmf_menu_item); + gtk_signal_connect_object (GTK_OBJECT (dtmf_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowDTMF), NULL); + + speedDial_menu_item = gtk_menu_item_new_with_label (_("Speed Dial")); + gtk_menu_append (GTK_MENU (menu), speedDial_menu_item); + gtk_signal_connect_object (GTK_OBJECT (speedDial_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowSpeedDial), NULL); + + xkeyb_menu_item = gtk_menu_item_new_with_label (_("Keyboard")); + gtk_menu_append (GTK_MENU (menu), xkeyb_menu_item); + gtk_signal_connect_object (GTK_OBJECT (xkeyb_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowXkeyb), NULL); + + netmon_menu_item = gtk_menu_item_new_with_label (_("Net Monitor")); + gtk_menu_append (GTK_MENU (menu), netmon_menu_item); + gtk_signal_connect_object (GTK_OBJECT (netmon_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowNetmon), NULL); + + data_menu_item = gtk_menu_item_new_with_label (_("Data calls")); + gtk_menu_append (GTK_MENU (menu), data_menu_item); + gtk_signal_connect_object (GTK_OBJECT (data_menu_item), "activate", + GTK_SIGNAL_FUNC (GUI_ShowData), NULL); + + menu_items = gtk_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_widget_show (menu_items); + + menu_items = gtk_menu_item_new_with_label (_("Options")); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate", + GTK_SIGNAL_FUNC(GUI_ShowOptions), NULL); + gtk_widget_show (menu_items); + + menu_items = gtk_menu_item_new (); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_widget_show (menu_items); + + menu_items = gtk_menu_item_new_with_label (_("Help")); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate", + GTK_SIGNAL_FUNC(Help1), NULL); + gtk_widget_show (menu_items); + + menu_items = gtk_menu_item_new_with_label (_("About")); + gtk_menu_append (GTK_MENU (menu), menu_items); + gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate", + GTK_SIGNAL_FUNC (GUI_ShowAbout), NULL); + gtk_widget_show (menu_items); + + return menu; +} + + +static GtkWidget *CreateAboutDialog (void) +{ + GtkWidget *dialog; + GtkWidget *button, *hbox, *label; + gchar buf[2000]; + + dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialog), _("About")); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, FALSE, 5); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (GUI_HideAbout), NULL); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + g_snprintf (buf, 2000, _("xgnokii version: %s\ngnokii version: %s\n\n\ +Copyright (C) 1999,2000 Pavel Janík ml.,\nHugh Blemings, Jan Derfinak and others\n\ +xgnokii is free software, covered by the GNU General Public License, and you are\n\ +welcome to change it and/or distribute copies of it under certain conditions.\n\ +There is absolutely no waranty for xgnokii. See GPL for details.\n"), + XVERSION, VERSION); + label = gtk_label_new ((gchar *) buf); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + return dialog; +} + + +static inline void SetFormat (GtkWidget *item, gpointer data) +{ + tempMessageSettings.Format = GPOINTER_TO_INT (data); +} + + +static inline void SetValidity (GtkWidget *item, gpointer data) +{ + tempMessageSettings.Validity = GPOINTER_TO_INT (data); +} + + +static inline void OptionsDeleteEvent (GtkWidget *widget, GdkEvent *event, gpointer data ) +{ + gtk_widget_hide( GTK_WIDGET (widget)); + optionsDialogIsOpened = FALSE; +} + + +static inline void OptionsCloseCallback (GtkWidget *widget, gpointer data ) +{ + gtk_widget_hide(GTK_WIDGET(data)); + optionsDialogIsOpened = FALSE; +} + + +static gint CheckInUserDataLength (GtkWidget *widget, + GdkEvent *event, + gpointer callback_data) +{ + register gint len; + + len = configDialogData.user.max - (GTK_ENTRY (configDialogData.user.name)->text_length + + GTK_ENTRY (configDialogData.user.title)->text_length + + GTK_ENTRY (configDialogData.user.company)->text_length + + GTK_ENTRY (configDialogData.user.telephone)->text_length + + GTK_ENTRY (configDialogData.user.fax)->text_length + + GTK_ENTRY (configDialogData.user.email)->text_length + + GTK_ENTRY (configDialogData.user.address)->text_length + - GTK_ENTRY (widget)->text_length); + + if (len < 1) + { + gtk_entry_set_editable (GTK_ENTRY (widget), FALSE); + return (FALSE); + } + else + gtk_entry_set_editable (GTK_ENTRY (widget), TRUE); + if (GPOINTER_TO_INT (callback_data) == 3 + || GPOINTER_TO_INT (callback_data) == 4) + { + if ((GPOINTER_TO_INT (callback_data) == 3 + && GTK_ENTRY (configDialogData.user.telephone)->text_length == 0) + || (GPOINTER_TO_INT (callback_data) == 4 + && GTK_ENTRY (configDialogData.user.fax)->text_length == 0)) + len -= 4; + + if (len < 1) + { + gtk_entry_set_editable (GTK_ENTRY (widget), FALSE); + return (FALSE); + } + + if (len > max_phonebook_number_length) + len = max_phonebook_number_length; + } + + gtk_entry_set_max_length (GTK_ENTRY (widget), len); + return (FALSE); +} + + +static inline gint CheckOutUserDataLength (GtkWidget *widget, + GdkEvent *event, + gpointer callback_data) +{ + gtk_entry_set_max_length (GTK_ENTRY (widget), GPOINTER_TO_INT (callback_data)); + return (FALSE); +} + + +static inline gint RefreshUserStatusCallBack (GtkWidget *widget, + GdkEventKey *event, + gpointer callback_data) +{ + RefreshUserStatus (); + if (GTK_EDITABLE (widget)->editable == FALSE) + return (FALSE); + if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear || + event->keyval == GDK_Insert || event->keyval == GDK_Delete || + event->keyval == GDK_Home || event->keyval == GDK_End || + event->keyval == GDK_Left || event->keyval == GDK_Right || + event->keyval == GDK_Return || + (event->keyval >= 0x20 && event->keyval <= 0xFF)) + return (TRUE); + + return (FALSE); +} + + +static void OkEditSMSSetDialog (GtkWidget *w, gpointer data) +{ + + strncpy(configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name, + gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.set)), + GSM_MAX_SMS_CENTER_NAME_LENGTH); + configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name[GSM_MAX_SMS_CENTER_NAME_LENGTH - 1] + = '\0'; + + strncpy(configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number, + gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.number)), + GSM_MAX_SMS_CENTER_LENGTH); + configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number[GSM_MAX_SMS_CENTER_LENGTH] + = '\0'; + + configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format + = tempMessageSettings.Format; + + configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity + = tempMessageSettings.Validity; + + ParseSMSCenters (); + + gtk_widget_hide (GTK_WIDGET (data)); +} + + +static inline void EditSMSSetDialogClick (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + GtkWidget *data ) +{ + if(event && event->type == GDK_2BUTTON_PRESS) + gtk_signal_emit_by_name(GTK_OBJECT (data), "clicked"); +} + + +static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data) +{ + static GtkWidget *dialog = NULL; + GtkWidget *button, *label, *hbox, *menu, *item; + + if (GTK_CLIST (SMSClist)->selection == NULL) + return; + + if (dialog == NULL) + { + dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (dialog), _("Edit SMS Setting")); + gtk_window_set_modal(GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkEditSMSSetDialog), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Set's name:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.sms.set = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_NAME_LENGTH - 1); + gtk_widget_set_usize (configDialogData.sms.set, 110, 22); + gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.set, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.sms.set); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Center:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.sms.number = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_LENGTH - 1); + gtk_widget_set_usize (configDialogData.sms.number, 110, 22); + gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.number, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.sms.number); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Sending Format:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.sms.format = gtk_option_menu_new (); + menu = gtk_menu_new (); + gtk_widget_set_usize (configDialogData.sms.format, 110, 28); + + item = gtk_menu_item_new_with_label (_("Text")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetFormat), + (gpointer) GSMF_Text); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("Fax")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetFormat), + (gpointer) GSMF_Fax); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("Paging")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetFormat), + (gpointer) GSMF_Paging); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("E-Mail")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetFormat), + (gpointer) GSMF_Email); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.format), menu); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.format, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.sms.format); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Validity Period:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.sms.validity = gtk_option_menu_new (); + menu = gtk_menu_new (); + gtk_widget_set_usize (configDialogData.sms.validity, 110, 28); + + item = gtk_menu_item_new_with_label (_("Max. Time")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_Max_Time); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("1 h")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_1_Hour); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("6 h")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_6_Hours); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("24 h")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_24_Hours); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("72 h")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_72_Hours); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + item = gtk_menu_item_new_with_label (_("1 week")); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC(SetValidity), + (gpointer) GSMV_1_Week); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (menu), item); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.validity), menu); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.validity, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.sms.validity); + } + + gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.set), + configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name); + + gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.number), + configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number); + + switch (configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format) + { + case GSMF_Text: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format), + 0); + break; + + case GSMF_Paging: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format), + 2); + break; + + case GSMF_Fax: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format), + 1); + break; + + case GSMF_Email: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format), + 3); + break; + + default: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format), + 0); + } + + switch (configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity) + { + case GSMV_1_Hour: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 1); + break; + + case GSMV_6_Hours: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 2); + break; + + case GSMV_24_Hours: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 3); + break; + + case GSMV_72_Hours: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 4); + break; + + case GSMV_1_Week: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 5); + break; + + case GSMV_Max_Time: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 0); + break; + + default: + gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity), + 3); + } + + tempMessageSettings.Format = configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format; + tempMessageSettings.Validity = configDialogData.sms.smsSetting + [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity; + + gtk_widget_show (dialog); +} + + +static GtkWidget *CreateOptionsDialog (void) +{ + gchar labelBuffer[10]; + GtkWidget *dialog; + GtkWidget *button, *hbox, *vbox, *label, *notebook, *frame, *clistScrolledWindow; + register gint i; + GtkAdjustment *adj; + gchar *titles[4] = { _("Set's name"), _("Center number"), _("Format"), _("Validity")}; + + dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialog), _("Options")); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (OptionsDeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Apply")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OptionsApplyCallback), (gpointer)dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Save")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OptionsSaveCallback), (gpointer)dialog); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Close")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OptionsCloseCallback), (gpointer)dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + notebook = gtk_notebook_new (); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook); + gtk_widget_show(notebook); + + /*** Connection notebook ***/ + frame = gtk_frame_new (_("Phone and connection type")); + gtk_widget_show (frame); + + vbox = gtk_vbox_new( FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("Connection")); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Port:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.connection.port = gtk_entry_new_with_max_length (10); + gtk_widget_set_usize (configDialogData.connection.port, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.port), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.port, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.connection.port); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Model:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.connection.model = gtk_entry_new_with_max_length (5); + gtk_widget_set_usize (configDialogData.connection.model, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.model), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.model, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.connection.model); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Init length:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.connection.init = gtk_entry_new_with_max_length (100); + gtk_widget_set_usize (configDialogData.connection.init, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.init), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.init, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.connection.init); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Bindir:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.connection.bindir = gtk_entry_new_with_max_length (100); + gtk_widget_set_usize (configDialogData.connection.bindir, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.bindir), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.bindir, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.connection.bindir); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Connection:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.connection.infrared = gtk_radio_button_new_with_label (NULL, _("infrared")); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.infrared, TRUE, FALSE, 2); + gtk_widget_show (configDialogData.connection.infrared); + + configDialogData.connection.serial = gtk_radio_button_new_with_label ( + gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("serial")); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.serial, TRUE, FALSE, 2); + gtk_widget_show (configDialogData.connection.serial); + + configDialogData.connection.irda = gtk_radio_button_new_with_label ( + gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("irda")); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.irda, TRUE, FALSE, 2); + gtk_widget_show (configDialogData.connection.irda); + + /*** Phone notebook ***/ + frame = gtk_frame_new (_("Phone information")); + gtk_widget_show (frame); + + vbox = gtk_vbox_new( FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("Phone")); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Model:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.phone.model = gtk_entry_new_with_max_length (7); + gtk_widget_set_usize (configDialogData.phone.model, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.model), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.model, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.model); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Version:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.phone.version = gtk_entry_new_with_max_length (7); + gtk_widget_set_usize (configDialogData.phone.version, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.version), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.version, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.version); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Revision:")); + gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.phone.revision = gtk_entry_new_with_max_length (64); + gtk_widget_set_usize (configDialogData.phone.revision, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.revision), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.revision, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.revision); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("IMEI:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.phone.imei = gtk_entry_new_with_max_length (64); + gtk_widget_set_usize (configDialogData.phone.imei, 220, 22); + gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.imei), + FALSE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.imei, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.imei); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Names length:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("SIM:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0); + configDialogData.phone.simNameLen = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE); + gtk_box_pack_start (GTK_BOX (hbox), configDialogData.phone.simNameLen, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.simNameLen); + + adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0); + configDialogData.phone.phoneNameLen = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.phoneNameLen, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.phone.phoneNameLen); + + label = gtk_label_new (_("Phone:")); + gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + /*** Alarm notebook ***/ + xgnokiiConfig.alarmSupported = TRUE; + + frame = gtk_frame_new (_("Alarm setting")); + gtk_widget_show (frame); + + vbox = gtk_vbox_new( FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show(vbox); + + label = gtk_label_new (_("Alarm")); + gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5); + gtk_widget_show (hbox); + + configDialogData.alarm.alarmSwitch = gtk_check_button_new_with_label (_("Alarm")); + gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmSwitch, FALSE, FALSE, 10); + gtk_widget_show (configDialogData.alarm.alarmSwitch); + + adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 23.0, 1.0, 4.0, 0.0); + configDialogData.alarm.alarmHour = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE); + gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmHour, FALSE, FALSE, 0); + gtk_widget_show (configDialogData.alarm.alarmHour); + + label = gtk_label_new (":"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 59.0, 1.0, 10.0, 0.0); + configDialogData.alarm.alarmMin = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE); + gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmMin, FALSE, FALSE, 0); + gtk_widget_show (configDialogData.alarm.alarmMin); + + /*** SMS notebook ***/ + sms_option_frame = gtk_frame_new (_("Short Message Service")); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (sms_option_frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("SMS")); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sms_option_frame, label); + + SMSClist = gtk_clist_new_with_titles (4, titles); + gtk_clist_set_shadow_type (GTK_CLIST (SMSClist), GTK_SHADOW_OUT); + gtk_clist_column_titles_passive (GTK_CLIST (SMSClist)); + gtk_clist_set_auto_sort (GTK_CLIST (SMSClist), FALSE); + + gtk_clist_set_column_width (GTK_CLIST (SMSClist), 0, 70); + gtk_clist_set_column_width (GTK_CLIST (SMSClist), 1, 115); + gtk_clist_set_column_width (GTK_CLIST (SMSClist), 2, 40); + gtk_clist_set_column_width (GTK_CLIST (SMSClist), 3, 55); +// gtk_clist_set_column_justification (GTK_CLIST (SMSClist), 1, GTK_JUSTIFY_RIGHT); + + clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (clistScrolledWindow), SMSClist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (vbox), clistScrolledWindow, + TRUE, TRUE, 10); + + gtk_widget_show (SMSClist); + gtk_widget_show (clistScrolledWindow); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 9); + gtk_widget_show (hbox); + + button = gtk_button_new_with_label (_("Edit")); + gtk_box_pack_start (GTK_BOX (hbox), + button, TRUE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowEditSMSSetDialog), (gpointer)dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + gtk_signal_connect (GTK_OBJECT (SMSClist), "select_row", + GTK_SIGNAL_FUNC (EditSMSSetDialogClick), + (gpointer) button); + + /*** Business notebook ***/ + user_option_frame = gtk_frame_new (_("Business Card")); + + vbox = gtk_vbox_new( FALSE, 0); + gtk_container_add (GTK_CONTAINER (user_option_frame), vbox); + gtk_widget_show(vbox); + + label = gtk_label_new(_("User")); + gtk_notebook_append_page( GTK_NOTEBOOK (notebook), user_option_frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + configDialogData.user.status = gtk_label_new (""); + gtk_box_pack_end(GTK_BOX(hbox), configDialogData.user.status, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.status); + + configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH; + configDialogData.user.used = 0; + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Name:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.name = gtk_entry_new_with_max_length(configDialogData.user.max); + gtk_widget_set_usize (configDialogData.user.name, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.name), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 0); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.name), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), + (gpointer) configDialogData.user.max); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.name, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.name); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Title:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.title = gtk_entry_new_with_max_length(configDialogData.user.max); + gtk_widget_set_usize (configDialogData.user.title, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.title), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 1); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.title), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), + (gpointer) configDialogData.user.max); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.title, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.title); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Company:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.company = gtk_entry_new_with_max_length(configDialogData.user.max); + gtk_widget_set_usize (configDialogData.user.company, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.company), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 2); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.company), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), + (gpointer) configDialogData.user.max); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.company, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.company); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Telephone:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.telephone = gtk_entry_new_with_max_length(max_phonebook_number_length); + gtk_widget_set_usize (configDialogData.user.telephone, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 3); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.telephone, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.telephone); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Fax:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.fax = gtk_entry_new_with_max_length(max_phonebook_number_length); + gtk_widget_set_usize (configDialogData.user.fax, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 4); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.fax, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.fax); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("E-Mail:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.email = gtk_entry_new_with_max_length(configDialogData.user.max); + gtk_widget_set_usize (configDialogData.user.email, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.email), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 5); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.email), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), + (gpointer) configDialogData.user.max); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.email, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.email); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Address:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.user.address = gtk_entry_new_with_max_length(configDialogData.user.max); + gtk_widget_set_usize (configDialogData.user.address, 220, 22); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.address), + "focus_in_event", + GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 6); + gtk_signal_connect (GTK_OBJECT (configDialogData.user.address), + "focus_out_event", + GTK_SIGNAL_FUNC(CheckOutUserDataLength), + (gpointer) configDialogData.user.max); + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.address, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.user.address); + + + /*** Groups notebook ***/ + cg_names_option_frame = gtk_frame_new (_("Caller groups names")); + + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (cg_names_option_frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("Groups")); + gtk_notebook_append_page( GTK_NOTEBOOK (notebook), cg_names_option_frame, label); + + for ( i = 0; i < 6; i++) + { + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 3); + gtk_widget_show (hbox); + + g_snprintf (labelBuffer, 10, _("Group %d:"), i + 1); + label = gtk_label_new (labelBuffer); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.groups[i] = gtk_entry_new_with_max_length (MAX_CALLER_GROUP_LENGTH); + gtk_widget_set_usize (configDialogData.groups[i], 220, 22); + + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.groups[i], FALSE, FALSE, 2); + gtk_widget_show (configDialogData.groups[i]); + } + + /* Mail */ + mail_option_frame = gtk_frame_new (_("Mailbox")); + gtk_widget_show (mail_option_frame); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (mail_option_frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("Mail")); + gtk_notebook_append_page( GTK_NOTEBOOK (notebook), mail_option_frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Path to mailbox:")); + gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.mailbox = gtk_entry_new_with_max_length (MAILBOX_LENGTH - 1); + gtk_widget_set_usize (configDialogData.mailbox, 220, 22); + + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.mailbox, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.mailbox); + + /* Help */ + frame = gtk_frame_new (_("Help viewer")); + gtk_widget_show (frame); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (frame), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (_("Help")); + gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Viewer:")); + gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + configDialogData.help = gtk_entry_new_with_max_length (HTMLVIEWER_LENGTH - 1); + gtk_widget_set_usize (configDialogData.help, 220, 22); + + gtk_box_pack_end (GTK_BOX (hbox), configDialogData.help, FALSE, FALSE, 2); + gtk_widget_show (configDialogData.help); + + + optionsDialogIsOpened = FALSE; + return dialog; +} + + +static void TopLevelWindow (void) +{ + GtkWidget *drawing_area; + GdkBitmap *mask; + GtkStyle *style; + GdkGC *gc; + struct sigaction act; + + GUI_MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_MainWindow), "MainWindow", "Xgnokii"); +/* gtk_window_set_decorated (GTK_WINDOW (GUI_MainWindow), GTK_FALSE); */ + gtk_widget_realize (GUI_MainWindow); + + BackgroundPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background); + + SMSPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_sms); + + AlarmPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_alarm); + + Pixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background); + +// gdk_window_set_icon_name (GUI_MainWindow->window, "XXX"); + style = gtk_widget_get_default_style (); + gc = style->black_gc; + + /* Create the drawing area */ + drawing_area = gtk_drawing_area_new (); + + /* Signals used to handle backing pixmap */ + gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event", + (GtkSignalFunc) ExposeEvent, NULL); + + gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event", + (GtkSignalFunc) ButtonPressEvent, NULL); + + gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK + | GDK_BUTTON_PRESS_MASK); + + gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 261, 96); + gtk_container_add (GTK_CONTAINER (GUI_MainWindow), drawing_area); + + gdk_draw_pixmap (drawing_area->window, + drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)], + Pixmap, + 0, 0, + 0, 0, + 261, 96); + + gtk_widget_shape_combine_mask (GUI_MainWindow, mask, 0, 0); + + gtk_signal_connect (GTK_OBJECT (GUI_MainWindow), "destroy", + GTK_SIGNAL_FUNC (MainExit), + NULL); + + Menu = CreateMenu (); + OptionsDialog = CreateOptionsDialog (); + AboutDialog = CreateAboutDialog (); + GUI_CreateSMSWindow (); + GUI_CreateContactsWindow (); + GUI_CreateNetmonWindow (); + GUI_CreateDTMFWindow (); + GUI_CreateSpeedDialWindow (); + GUI_CreateXkeybWindow (); + GUI_CreateCalendarWindow (); + GUI_CreateLogosWindow (); + GUI_CreateDataWindow(); + CreateErrorDialog (&errorDialog, GUI_MainWindow); + CreateInfoDialog (&infoDialog, GUI_MainWindow); + CreateInCallDialog (); + + act.sa_handler = RemoveZombie; + sigemptyset (&(act.sa_mask)); + act.sa_flags = SA_NOCLDSTOP; + sigaction (SIGCHLD, &act, NULL); + +#if __unices__ + act.sa_handler = SIG_IGN; + sigemptyset (&(act.sa_mask)); + sigaction (SIGALRM, &act, NULL); +#endif + + gtk_widget_show_all (GUI_MainWindow); + GUI_Refresh (); + + GUI_InitPhoneMonitor (); + pthread_create (&monitor_th, NULL, GUI_Connect, NULL); + + gtk_timeout_add (1000, (GtkFunction) Update, GUI_MainWindow); + + hiddenCallDialog = 0; +} + + +static void SplashScreen (void) +{ + GtkWidget *pixmap, *fixed; + GdkPixmap *gdk_pixmap; + GdkBitmap *mask; + GtkStyle *style; + GdkGC *gc; + + SplashWindow = gtk_window_new (GTK_WINDOW_POPUP); + gtk_widget_realize (SplashWindow); + + gtk_widget_set_usize (SplashWindow, 475, 160); + gtk_window_position (GTK_WINDOW (SplashWindow), GTK_WIN_POS_CENTER); + + style = gtk_widget_get_default_style(); + gc = style->black_gc; + gdk_pixmap = gdk_pixmap_create_from_xpm_d(SplashWindow->window, &mask, + &style->bg[GTK_STATE_NORMAL], + XPM_logo); + pixmap = gtk_pixmap_new(gdk_pixmap, mask); + + fixed = gtk_fixed_new(); + gtk_widget_set_usize(fixed, 261, 96); + gtk_fixed_put(GTK_FIXED(fixed), pixmap, 0, 0); + gtk_container_add(GTK_CONTAINER (SplashWindow), fixed); + + gtk_widget_shape_combine_mask (SplashWindow, mask, 0, 0); + + gtk_widget_show_all (SplashWindow); +} + + +static gint RemoveSplash (GtkWidget *Win) +{ + if (GTK_WIDGET_VISIBLE (SplashWindow)) + { + gtk_timeout_remove (splashRemoveHandler); + gtk_widget_hide (SplashWindow); + gtk_widget_destroy (SplashWindow); + return TRUE; + } + + return FALSE; +} + +static void ReadConfig (void) +{ +#ifdef WIN32 + xgnokiiConfig.locale = ""; +#else + if ((xgnokiiConfig.locale = getenv ("LC_ALL")) == NULL) + if ((xgnokiiConfig.locale = getenv ("LC_MESSAGES")) == NULL) + if ((xgnokiiConfig.locale = getenv ("LANG")) == NULL) + xgnokiiConfig.locale = "POSIX"; +#endif + if (readconfig(&xgnokiiConfig.model, &xgnokiiConfig.port, + &xgnokiiConfig.initlength, &xgnokiiConfig.connection, + &xgnokiiConfig.bindir) < 0) + { + exit(-1); + } + + GUI_ReadXConfig(); + max_phonebook_name_length = atoi (xgnokiiConfig.maxPhoneLen); + max_phonebook_sim_name_length = atoi (xgnokiiConfig.maxSIMLen); + +#ifndef WIN32 + xgnokiiConfig.xgnokiidir = DefaultXGnokiiDir; + + if (strstr(FB38_Information.Models, xgnokiiConfig.model) != NULL) + { + max_phonebook_number_length = 30; + max_phonebook_sim_number_length = 30; + } + else +#endif + if (strstr(FB61_Information.Models, xgnokiiConfig.model) != NULL) + { + max_phonebook_number_length = FB61_MAX_PHONEBOOK_NUMBER_LENGTH; + max_phonebook_sim_number_length = FB61_MAX_PHONEBOOK_NUMBER_LENGTH; + } + else + { + max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH; + } + + xgnokiiConfig.callerGroups[0] = xgnokiiConfig.callerGroups[1] = + xgnokiiConfig.callerGroups[2] = xgnokiiConfig.callerGroups[3] = + xgnokiiConfig.callerGroups[4] = xgnokiiConfig.callerGroups[5] = NULL; + xgnokiiConfig.smsSets = 0; +} + + +int main (int argc, char *argv[]) +{ +#ifdef USE_NLS + textdomain("gnokii"); +#endif + + (void) gtk_set_locale (); + + gtk_init (&argc, &argv); + + /* Show the splash screen. */ + + SplashScreen (); + + /* Remove it after a while. */ + + ReadConfig (); + TopLevelWindow (); + + splashRemoveHandler = gtk_timeout_add(5000, (GtkFunction) RemoveSplash, (gpointer) SplashWindow); + + gtk_main (); + + return (0); +} diff --git a/xgnokii/xgnokii.h b/xgnokii/xgnokii.h new file mode 100644 index 0000000..d1ed2ec --- /dev/null +++ b/xgnokii/xgnokii.h @@ -0,0 +1,68 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Wed Apr 26 2000 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_H +#define XGNOKII_H + +#include +#include "config.h" +#include "misc.h" +#include "gsm-common.h" + +#define MAX_CALLER_GROUP_LENGTH 10 +#define MAX_SMS_CENTER 10 +#define MAX_BUSINESS_CARD_LENGTH 139 + +typedef struct { + gchar *name; + gchar *title; + gchar *company; + gchar *telephone; + gchar *fax; + gchar *email; + gchar *address; +} UserInf; + +typedef struct { + gchar *initlength; /* Init length from .gnokiirc file */ + gchar *model; /* Model from .gnokiirc file. */ + gchar *port; /* Serial port from .gnokiirc file */ + gchar *connection; /* Connection type from .gnokiirc file */ + gchar *bindir; + gchar *xgnokiidir; + gchar *helpviewer; /* Program to showing help files */ + gchar *mailbox; /* Mailbox, where we can save SMS's */ + gchar *maxSIMLen; /* Max length of names on SIM card */ + gchar *maxPhoneLen;/* Max length of names in phone */ + gchar *locale; + GSM_MessageCenter smsSetting[MAX_SMS_CENTER]; + UserInf user; + gchar *callerGroups[6]; + gint smsSets:4; + bool alarmSupported:1; +} XgnokiiConfig; + +/* Hold main configuration data for xgnokii */ +extern XgnokiiConfig xgnokiiConfig; + +extern gint max_phonebook_name_length; +extern gint max_phonebook_number_length; +extern gint max_phonebook_sim_name_length; +extern gint max_phonebook_sim_number_length; +extern void GUI_InitCallerGroupsInf (void); +extern void GUI_InitSMSSettings (void); +extern void GUI_ShowAbout (void); + +#endif /* XGNOKII_H */ diff --git a/xgnokii/xgnokii_calendar.c b/xgnokii/xgnokii_calendar.c new file mode 100644 index 0000000..c0741e2 --- /dev/null +++ b/xgnokii/xgnokii_calendar.c @@ -0,0 +1,1529 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tue Nov 28 1999 + Modified by Jan Derfinak + +*/ + +#include +#include +#include +#include "misc.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_calendar.h" +#include "xpm/Read.xpm" +#include "xpm/Send.xpm" +#include "xpm/Open.xpm" +#include "xpm/Save.xpm" +#include "xpm/Edit.xpm" +#include "xpm/Delete.xpm" +#include "xpm/SendSMS.xpm" +#include "xpm/NewBD.xpm" +#include "xpm/NewCall.xpm" +#include "xpm/NewMeet.xpm" +#include "xpm/NewRem.xpm" +#include "xpm/quest.xpm" + + +typedef struct { + GtkWidget *calendar; + GtkWidget *notesClist; + GtkWidget *noteText; + GdkColor colour; +} CalendarWidget; + + +typedef struct { + guint year; + guint month; + guint day; + GtkWidget *button; +} Date; + + +typedef struct { + Date date; + guchar hours; + guchar minutes; + GtkWidget *button; + GtkWidget *hButton; + GtkWidget *mButton; +} DateTime; + + +typedef struct { + GtkWidget *dialog; + Date date; + DateTime alarm; + GtkWidget *alarmCheck; + GtkWidget *text; +} AddDialogData; + +typedef struct { + GtkWidget *dialog; + DateTime date; + DateTime alarm; + GtkWidget *alarmCheck; + GtkWidget *text; +} AddDialogData2; + + +typedef struct { + GtkWidget *dialog; + GtkWidget *cal; +} CalendarDialog; + + +typedef struct { + GtkWidget *dialog; + GtkWidget *cal; +} CalTimeDialog; + + +static GtkWidget *GUI_CalendarWindow; +static ErrorDialog errorDialog = {NULL, NULL}; +static CalendarWidget cal = {NULL, NULL}; +static QuestMark questMark; +static AddDialogData addReminderDialogData; +static AddDialogData2 addCallDialogData; +static AddDialogData2 addMeetingDialogData; +static AddDialogData addBirthdayDialogData; +static CalendarDialog calendarDialog = {NULL, NULL}; +static CalTimeDialog calTimeDialog = {NULL, NULL}; + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/calendar/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static inline void CloseCalendar (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_CalendarWindow); +} + + +inline void GUI_ShowCalendar () +{ + if (phoneMonitor.supported & PM_CALENDAR) + gtk_widget_show (GUI_CalendarWindow); +} + + +static gint InsertCalendarEntry (GSM_CalendarNote *note) +{ + gchar *row[6]; + + row[0] = g_strdup_printf ("%d", note->Location); + + switch (note->Type) + { + case GCN_REMINDER: + row[1] = _("Reminder"); + row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day, + note->Time.Month, note->Time.Year); + row[5] = ""; + break; + + case GCN_CALL: + row[1] = _("Call"); + row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day, + note->Time.Month, note->Time.Year, + note->Time.Hour, note->Time.Minute); + row[5] = note->Phone; + break; + + case GCN_MEETING: + row[1] = _("Meeting"); + row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day, + note->Time.Month, note->Time.Year, + note->Time.Hour, note->Time.Minute); + row[5] = ""; + break; + + case GCN_BIRTHDAY: + row[1] = _("Birthday"); + row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day, + note->Time.Month, note->Time.Year); + row[5] = ""; + break; + + default: + row[1] = _("Unknown"); + row[5] = ""; + break; + } + + row[3] = note->Text; + + if (note->Alarm.Year == 0) + row[4] = ""; + else + row[4] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Alarm.Day, + note->Alarm.Month, note->Alarm.Year, + note->Alarm.Hour, note->Alarm.Minute); + + gtk_clist_freeze (GTK_CLIST (cal.notesClist)); + gtk_clist_append (GTK_CLIST (cal.notesClist), row); + gtk_clist_sort (GTK_CLIST (cal.notesClist)); + gtk_clist_thaw (GTK_CLIST (cal.notesClist)); + + g_free (row[0]); + g_free (row[2]); + if (*row[4] != '\0') + g_free (row[4]); + + return (GE_NONE); +} + +static void ClickEntry (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + gpointer data ) +{ + gchar *buf; + + gtk_text_freeze (GTK_TEXT (cal.noteText)); + + gtk_text_set_point (GTK_TEXT (cal.noteText), 0); + gtk_text_forward_delete (GTK_TEXT (cal.noteText), gtk_text_get_length (GTK_TEXT (cal.noteText))); + + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL, + _("Type: "), -1); + gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL, + _("Date: "), -1); + gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + "\n", -1); + + gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), + atoi (buf + 3) - 1, atoi (buf + 6)); + gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), atoi (buf)); + + gtk_clist_get_text (GTK_CLIST (clist), row, 4, &buf); + if (*buf != '\0') + { + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL, + _("Alarm: "), -1); + + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + "\n", -1); + } + + gtk_clist_get_text (GTK_CLIST (clist), row, 5, &buf); + if (*buf != '\0') + { + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL, + _("Number: "), -1); + + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + "\n", -1); + } + + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL, + _("Text: "), -1); + gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf); + gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL, + buf, -1); + + gtk_text_thaw (GTK_TEXT (cal.noteText)); +} + +static inline gint ReadCalendarFailed (gint i) +{ + return (0); +} + + +static void ReadCalNotes (void) +{ + PhoneEvent *e; + D_CalendarNoteAll *cna; + + gtk_clist_clear (GTK_CLIST (cal.notesClist)); + + cna = (D_CalendarNoteAll *) g_malloc (sizeof (D_CalendarNoteAll)); + cna->InsertEntry = InsertCalendarEntry; + cna->ReadFailed = ReadCalendarFailed; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetCalendarNoteAll; + e->data = cna; + GUI_InsertEvent (e); +} + + +static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) +{ + char *text1 = NULL; + char *text2 = NULL; + + GtkCListRow *row1 = (GtkCListRow *) ptr1; + GtkCListRow *row2 = (GtkCListRow *) ptr2; + + switch (row1->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text; + break; + default: + break; + } + switch (row2->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text; + break; + default: + break; + } + + if (!text2) + return (text1 != NULL); + + if (!text1) + return -1; + + if (*text2 == '\0') + return (*text1 != '\0'); + + if (*text1 == '\0') + return (-1); + + if (clist->sort_column == 0) + { + gint n1 = atoi (text1); + gint n2 = atoi (text2); + + if (n1 > n2) + return (1); + else if (n1 < n2) + return (-1); + else + return 0; + } + + if (clist->sort_column == 2 || clist->sort_column == 4) + { + GDate *date1, *date2; + gint time1, time2; + gint ret; + + date1 = g_date_new_dmy (atoi (text1), atoi (text1 + 3), atoi (text1 + 6)); + date2 = g_date_new_dmy (atoi (text2), atoi (text2 + 3), atoi (text2 + 6)); + + ret = g_date_compare (date1, date2); + + g_date_free (date1); + g_date_free (date2); + + if (ret) + return (ret); + + if (strlen (text1) > 10) + time1 = atoi (text1 + 11) * 60 + atoi (text1 + 14); + else + time1 = 0; + + if (strlen (text2) > 10) + time2 = atoi (text2 + 11) * 60 + atoi (text2 + 14); + else + time2 = 0; + + if (time1 > time2) + return (1); + else if (time1 < time2) + return (-1); + else + return 0; + +/* struct tm bdTime; + time_t time1, time2; + + bdTime.tm_sec = 0; + if (strlen (text1) > 10) + { + bdTime.tm_min = atoi (text1 + 14); + bdTime.tm_hour = atoi (text1 + 11); + } + else + bdTime.tm_min = bdTime.tm_hour = 0; + bdTime.tm_mday = atoi (text1); + bdTime.tm_mon = atoi (text1 + 3); + bdTime.tm_year = atoi (text1 + 6) - 1900; + bdTime.tm_isdst = -1; + + time1 = mktime (&bdTime); + + bdTime.tm_sec = 0; + if (strlen (text2) > 10) + { + bdTime.tm_min = atoi (text2 + 14); + bdTime.tm_hour = atoi (text2 + 11); + } + else + bdTime.tm_min = bdTime.tm_hour = 0; + bdTime.tm_mday = atoi (text2); + bdTime.tm_mon = atoi (text2 + 3); + bdTime.tm_year = atoi (text2 + 6) - 1900; + bdTime.tm_isdst = -1; + + time2 = mktime (&bdTime); + + g_print ("Cas1: %s - %d, Cas2: %s - %d\n", text1, time1, text2, time2); + + if (time1 > time2) + return (1); + else if (time1 < time2) + return (-1); + else + return 0; */ + } + + return (g_strcasecmp (text1, text2)); +} + + +static gint ReverseSelection (gconstpointer a, gconstpointer b) +{ + gchar *buf1, *buf2; + gint index1, index2; + gint row1 = GPOINTER_TO_INT (a); + gint row2 = GPOINTER_TO_INT (b); + + gtk_clist_get_text (GTK_CLIST (cal.notesClist), row1, 0, &buf1); + gtk_clist_get_text (GTK_CLIST (cal.notesClist), row2, 0, &buf2); + + index1 = atoi (buf1); + index2 = atoi (buf2); + + if (index1 < index2) + return (1); + else if (index1 > index2) + return (-1); + else + return (0); +} + + +static gint AddCalendarNote(GSM_CalendarNote *cnote) +{ + GSM_Error error; + PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + D_CalendarNote *dnote = (D_CalendarNote *)g_malloc(sizeof(D_CalendarNote)); + + dnote->entry = cnote; + e->event = Event_WriteCalendarNote; + e->data = dnote; + GUI_InsertEvent (e); + pthread_mutex_lock (&calendarMutex); + pthread_cond_wait (&calendarCond, &calendarMutex); + pthread_mutex_unlock (&calendarMutex); + +#ifdef XDEBUG + g_print ("Saving calendar note\n"); +#endif + + error = dnote->status; + g_free (dnote); + + if (error != GE_NONE) + { + gchar *buf = g_strdup_printf (_("Saving failed failed\n(error=%d)"), error); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + g_free (buf); + } + else + g_print ("Note saved\n"); + + return (error); +} + +static void OkAddReminderDialog (GtkWidget *widget, gpointer data) +{ + GSM_CalendarNote note; + + note.Type = GCN_REMINDER; + note.Location = 0; + strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20); + note.Time.Year = ((AddDialogData *)data)->date.year; + note.Time.Month = ((AddDialogData *)data)->date.month; + note.Time.Day = ((AddDialogData *)data)->date.day; + note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0; + if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) { + note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year; + note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month; + note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day; + note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours; + note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes; + note.Alarm.Second = note.Alarm.Timezone = 0; + } else { + note.Alarm.Year = 0; + } + AddCalendarNote(¬e); + gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), ""); + gtk_widget_hide (((AddDialogData *)data)->dialog); +} + +static void OkAddCallDialog (GtkWidget *widget, gpointer data) +{ + GSM_CalendarNote note; + + note.Type = GCN_CALL; + note.Location = 0; + strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20); + note.Time.Year = ((AddDialogData2 *)data)->date.date.year; + note.Time.Month = ((AddDialogData2 *)data)->date.date.month; + note.Time.Day = ((AddDialogData2 *)data)->date.date.day; + note.Time.Hour = ((AddDialogData2 *)data)->date.hours; + note.Time.Minute = ((AddDialogData2 *)data)->date.minutes; + note.Time.Second = note.Time.Timezone = 0; + if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) { + note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year; + note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month; + note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day; + note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours; + note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes; + note.Alarm.Second = note.Alarm.Timezone = 0; + } else { + note.Alarm.Year = 0; + } + AddCalendarNote(¬e); + gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), ""); + gtk_widget_hide (((AddDialogData2 *)data)->dialog); +} + +static void OkAddMeetingDialog (GtkWidget *widget, gpointer data) +{ + GSM_CalendarNote note; + + note.Type = GCN_MEETING; + note.Location = 0; + strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20); + note.Time.Year = ((AddDialogData2 *)data)->date.date.year; + note.Time.Month = ((AddDialogData2 *)data)->date.date.month; + note.Time.Day = ((AddDialogData2 *)data)->date.date.day; + note.Time.Hour = ((AddDialogData2 *)data)->date.hours; + note.Time.Minute = ((AddDialogData2 *)data)->date.minutes; + note.Time.Second = note.Time.Timezone = 0; + if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) { + note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year; + note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month; + note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day; + note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours; + note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes; + note.Alarm.Second = note.Alarm.Timezone = 0; + } else { + note.Alarm.Year = 0; + } + AddCalendarNote(¬e); + gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), ""); + gtk_widget_hide (((AddDialogData2 *)data)->dialog); +} + +static void OkAddBdayDialog (GtkWidget *widget, gpointer data) +{ + GSM_CalendarNote note; + + note.Type = GCN_BIRTHDAY; + note.Location = 0; + strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20); + note.Time.Year = ((AddDialogData *)data)->date.year; + note.Time.Month = ((AddDialogData *)data)->date.month; + note.Time.Day = ((AddDialogData *)data)->date.day; + note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0; + if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) { + note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year; + note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month; + note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day; + note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours; + note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes; + note.Alarm.Second = note.Alarm.Timezone = 0; + } else { + note.Alarm.Year = 0; + } + AddCalendarNote(¬e); + gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), ""); + gtk_widget_hide (((AddDialogData *)data)->dialog); +} + + +static inline void SetDateButton (Date *date) +{ + gchar *buf = g_strdup_printf ("%d-%02d-%02d", date->year, + date->month, date->day); + gtk_label_set_text (GTK_LABEL (date->button), buf); + g_free (buf); +} + + +static inline void SetDateTimeButton (DateTime *date) +{ + gchar *buf = g_strdup_printf ("%d-%02d-%02d %02d:%02d", date->date.year, + date->date.month, date->date.day, + date->hours, date->minutes); + gtk_label_set_text (GTK_LABEL (date->button), buf); + g_free (buf); +} + + +static void OkCalendarDialog (GtkWidget *widget, Date *date) +{ + gtk_calendar_get_date (GTK_CALENDAR (calendarDialog.cal), &(date->year), + &(date->month), &(date->day)); + date->month += 1; + + SetDateButton (date); + + gtk_widget_hide (calendarDialog.dialog); +} + + +static void OkCalTimeDialog (GtkWidget *widget, DateTime *date) +{ + gtk_calendar_get_date (GTK_CALENDAR (calTimeDialog.cal), &(date->date.year), + &(date->date.month), &(date->date.day)); + date->date.month += 1; + + date->hours = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->hButton)); + date->minutes = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->mButton)); + + SetDateTimeButton (date); + + gtk_widget_hide (calTimeDialog.dialog); +} + + +static void ShowCalendar (GtkWidget *widget, Date *date) +{ + GtkWidget *button; + + if (calendarDialog.dialog == NULL) + { + calendarDialog.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (calendarDialog.dialog), _("Choose date")); + gtk_window_position (GTK_WINDOW (calendarDialog.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (calendarDialog.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (calendarDialog.dialog), 10); + gtk_signal_connect (GTK_OBJECT (calendarDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkCalendarDialog), (gpointer) date); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calendarDialog.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), 5); + + calendarDialog.cal = gtk_calendar_new (); + + gtk_calendar_select_month (GTK_CALENDAR (calendarDialog.cal), date->month - 1, date->year); + gtk_calendar_select_day (GTK_CALENDAR (calendarDialog.cal), date->day); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), calendarDialog.cal); + gtk_widget_show (calendarDialog.cal); + } + + gtk_widget_show (calendarDialog.dialog); +} + + +static void ShowCalTime (GtkWidget *widget, DateTime *date) +{ + GtkWidget *button, *hbox, *label; + GtkAdjustment *adj; + + if (calTimeDialog.dialog == NULL) + { + calTimeDialog.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (calTimeDialog.dialog), _("Choose date")); + gtk_window_position (GTK_WINDOW (calTimeDialog.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (calTimeDialog.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (calTimeDialog.dialog), 10); + gtk_signal_connect (GTK_OBJECT (calTimeDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkCalTimeDialog), (gpointer) date); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calTimeDialog.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), 5); + + calTimeDialog.cal = gtk_calendar_new (); + + gtk_calendar_select_month (GTK_CALENDAR (calTimeDialog.cal), date->date.month - 1, date->date.year); + gtk_calendar_select_day (GTK_CALENDAR (calTimeDialog.cal), date->date.day); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), calTimeDialog.cal); + gtk_widget_show (calTimeDialog.cal); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Alarm time:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (date->hours, + 0.0, 23.0, 1.0, 4.0, 0.0); + date->hButton = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->hButton), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->hButton), TRUE); + gtk_box_pack_start (GTK_BOX (hbox), date->hButton, FALSE, FALSE, 0); + gtk_widget_show (date->hButton); + + label = gtk_label_new (":"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (date->minutes, + 0.0, 59.0, 1.0, 10.0, 0.0); + date->mButton = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->mButton), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->mButton), TRUE); + gtk_box_pack_start (GTK_BOX (hbox), date->mButton, FALSE, FALSE, 0); + gtk_widget_show (date->mButton); + } + + gtk_widget_show (calTimeDialog.dialog); +} + + +static void AddReminder (void) +{ + GtkWidget *button, *hbox, *vbox, *label; + time_t t; + struct tm *tm; + + if (addReminderDialogData.dialog == NULL) + { + addReminderDialogData.dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (addReminderDialogData.dialog), _("Add reminder")); + gtk_window_position (GTK_WINDOW (addReminderDialogData.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (addReminderDialogData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (addReminderDialogData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (addReminderDialogData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkAddReminderDialog), (gpointer) &addReminderDialogData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addReminderDialogData.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), 5); + + vbox = gtk_vbox_new (FALSE, 10); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), vbox); + gtk_widget_show (vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Date:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + t = time (NULL); + tm = localtime (&t); + + addReminderDialogData.date.year = addReminderDialogData.alarm.date.year = + tm->tm_year + 1900; + addReminderDialogData.date.month = addReminderDialogData.alarm.date.month = + tm->tm_mon + 1; + addReminderDialogData.date.day = addReminderDialogData.alarm.date.day = + tm->tm_mday; + + addReminderDialogData.alarm.hours = tm->tm_hour; + addReminderDialogData.alarm.minutes = tm->tm_min; + + button = gtk_button_new (); + + addReminderDialogData.date.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.date.button); + SetDateButton (&(addReminderDialogData.date)); + + gtk_widget_show (addReminderDialogData.date.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addReminderDialogData.date)); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Subject:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + addReminderDialogData.text = gtk_entry_new_with_max_length (30); + gtk_box_pack_end (GTK_BOX (hbox), addReminderDialogData.text, FALSE, FALSE, 2); + gtk_widget_show (addReminderDialogData.text); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + addReminderDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm")); + gtk_box_pack_start (GTK_BOX(hbox), addReminderDialogData.alarmCheck, FALSE, FALSE, 2); +// gtk_signal_connect (GTK_OBJECT (addReminderDialogData.alarmCheck), "toggled", +// GTK_SIGNAL_FUNC (TogleAlarm), &addReminderDialogData); + gtk_widget_show (addReminderDialogData.alarmCheck); + + button = gtk_button_new (); + + addReminderDialogData.alarm.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.alarm.button); + SetDateTimeButton (&(addReminderDialogData.alarm)); + + gtk_widget_show (addReminderDialogData.alarm.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addReminderDialogData.alarm)); + gtk_widget_show (button); + } + + gtk_widget_show (GTK_WIDGET (addReminderDialogData.dialog)); +} + + +static void AddCall (void) +{ + GtkWidget *button, *hbox, *vbox, *label; + time_t t; + struct tm *tm; + + if (addCallDialogData.dialog == NULL) + { + addCallDialogData.dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (addCallDialogData.dialog), _("Add Call")); + gtk_window_position (GTK_WINDOW (addCallDialogData.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (addCallDialogData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (addCallDialogData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (addCallDialogData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkAddCallDialog), (gpointer) &addCallDialogData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addCallDialogData.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), 5); + + vbox = gtk_vbox_new (FALSE, 10); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), vbox); + gtk_widget_show (vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Date:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + t = time (NULL); + tm = localtime (&t); + + addCallDialogData.date.date.year = addCallDialogData.alarm.date.year = + tm->tm_year + 1900; + addCallDialogData.date.date.month = addCallDialogData.alarm.date.month = + tm->tm_mon + 1; + addCallDialogData.date.date.day = addCallDialogData.alarm.date.day = + tm->tm_mday; + + addCallDialogData.date.hours = addCallDialogData.alarm.hours = tm->tm_hour; + addCallDialogData.date.minutes = addCallDialogData.alarm.minutes = tm->tm_min; + + button = gtk_button_new (); + + addCallDialogData.date.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addCallDialogData.date.button); + SetDateTimeButton (&(addCallDialogData.date)); + + gtk_widget_show (addCallDialogData.date.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.date)); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Number:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + addCallDialogData.text = gtk_entry_new_with_max_length (30); + gtk_box_pack_end (GTK_BOX (hbox), addCallDialogData.text, FALSE, FALSE, 2); + gtk_widget_show (addCallDialogData.text); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + addCallDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm")); + gtk_box_pack_start (GTK_BOX(hbox), addCallDialogData.alarmCheck, FALSE, FALSE, 2); + + gtk_widget_show (addCallDialogData.alarmCheck); + + button = gtk_button_new (); + + addCallDialogData.alarm.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addCallDialogData.alarm.button); + SetDateTimeButton (&(addCallDialogData.alarm)); + + gtk_widget_show (addCallDialogData.alarm.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.alarm)); + gtk_widget_show (button); + } + + gtk_widget_show (GTK_WIDGET (addCallDialogData.dialog)); +} + + +static void AddMeeting (void) +{ + GtkWidget *button, *hbox, *vbox, *label; + time_t t; + struct tm *tm; + + if (addMeetingDialogData.dialog == NULL) + { + addMeetingDialogData.dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (addMeetingDialogData.dialog), _("Add meeting")); + gtk_window_position (GTK_WINDOW (addMeetingDialogData.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (addMeetingDialogData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (addMeetingDialogData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkAddMeetingDialog), (gpointer) &addMeetingDialogData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addMeetingDialogData.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), 5); + + vbox = gtk_vbox_new (FALSE, 10); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), vbox); + gtk_widget_show (vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Date:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + t = time (NULL); + tm = localtime (&t); + + addMeetingDialogData.date.date.year = addMeetingDialogData.alarm.date.year = + tm->tm_year + 1900; + addMeetingDialogData.date.date.month = addMeetingDialogData.alarm.date.month = + tm->tm_mon + 1; + addMeetingDialogData.date.date.day = addMeetingDialogData.alarm.date.day = + tm->tm_mday; + + addMeetingDialogData.date.hours = addMeetingDialogData.alarm.hours = tm->tm_hour; + addMeetingDialogData.date.minutes = addMeetingDialogData.alarm.minutes = tm->tm_min; + + button = gtk_button_new (); + + addMeetingDialogData.date.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.date.button); + SetDateTimeButton (&(addMeetingDialogData.date)); + + gtk_widget_show (addMeetingDialogData.date.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.date)); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Name:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + addMeetingDialogData.text = gtk_entry_new_with_max_length (30); + gtk_box_pack_end (GTK_BOX (hbox), addMeetingDialogData.text, FALSE, FALSE, 2); + gtk_widget_show (addMeetingDialogData.text); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + addMeetingDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm")); + gtk_box_pack_start (GTK_BOX(hbox), addMeetingDialogData.alarmCheck, FALSE, FALSE, 2); +// gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.alarmCheck), "toggled", +// GTK_SIGNAL_FUNC (TogleAlarm), &addMeetingDialogData); + gtk_widget_show (addMeetingDialogData.alarmCheck); + + button = gtk_button_new (); + + addMeetingDialogData.alarm.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.alarm.button); + SetDateTimeButton (&(addMeetingDialogData.alarm)); + + gtk_widget_show (addMeetingDialogData.alarm.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.alarm)); + gtk_widget_show (button); + } + + gtk_widget_show (GTK_WIDGET (addMeetingDialogData.dialog)); +} + + +static void AddBirthday (void) +{ + GtkWidget *button, *hbox, *vbox, *label; + time_t t; + struct tm *tm; + + if (addBirthdayDialogData.dialog == NULL) + { + addBirthdayDialogData.dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (addBirthdayDialogData.dialog), _("Add birthday")); + gtk_window_position (GTK_WINDOW (addBirthdayDialogData.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (addBirthdayDialogData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (addBirthdayDialogData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkAddBdayDialog), (gpointer) &addBirthdayDialogData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addBirthdayDialogData.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), 5); + + vbox = gtk_vbox_new (FALSE, 10); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), vbox); + gtk_widget_show (vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Date:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + t = time (NULL); + tm = localtime (&t); + + addBirthdayDialogData.date.year = addBirthdayDialogData.alarm.date.year = + tm->tm_year + 1900; + addBirthdayDialogData.date.month = addBirthdayDialogData.alarm.date.month = + tm->tm_mon + 1; + addBirthdayDialogData.date.day = addBirthdayDialogData.alarm.date.day = + tm->tm_mday; + + addBirthdayDialogData.alarm.hours = tm->tm_hour; + addBirthdayDialogData.alarm.minutes = tm->tm_min; + + button = gtk_button_new (); + + addBirthdayDialogData.date.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.date.button); + SetDateButton (&(addBirthdayDialogData.date)); + + gtk_widget_show (addBirthdayDialogData.date.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addBirthdayDialogData.date)); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Name:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + addBirthdayDialogData.text = gtk_entry_new_with_max_length (30); + gtk_box_pack_end (GTK_BOX (hbox), addBirthdayDialogData.text, FALSE, FALSE, 2); + gtk_widget_show (addBirthdayDialogData.text); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + addBirthdayDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm")); + gtk_box_pack_start (GTK_BOX(hbox), addBirthdayDialogData.alarmCheck, FALSE, FALSE, 2); +// gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.alarmCheck), "toggled", +// GTK_SIGNAL_FUNC (TogleAlarm), &addBirthdayDialogData); + gtk_widget_show (addBirthdayDialogData.alarmCheck); + + button = gtk_button_new (); + + addBirthdayDialogData.alarm.button = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.alarm.button); + SetDateTimeButton (&(addBirthdayDialogData.alarm)); + + gtk_widget_show (addBirthdayDialogData.alarm.button); + + gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addBirthdayDialogData.alarm)); + gtk_widget_show (button); + } + + gtk_widget_show (GTK_WIDGET (addBirthdayDialogData.dialog)); +} + + +static void OkDeleteNoteDialog (GtkWidget *widget, gpointer data) +{ + GSM_CalendarNote *note; + PhoneEvent *e; + GList *sel; + gint row; + gchar *buf; + + + sel = GTK_CLIST (cal.notesClist)->selection; + + gtk_clist_freeze (GTK_CLIST (cal.notesClist)); + + sel = g_list_sort (sel, ReverseSelection); + + while (sel != NULL) + { + row = GPOINTER_TO_INT (sel->data); + sel = sel->next; + + note = (GSM_CalendarNote *) g_malloc (sizeof (GSM_CalendarNote)); + gtk_clist_get_text (GTK_CLIST (cal.notesClist), row, 0, &buf); + note->Location = atoi (buf); + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_DeleteCalendarNote; + e->data = note; + GUI_InsertEvent (e); + } + + gtk_widget_hide (GTK_WIDGET (data)); + + gtk_clist_thaw (GTK_CLIST (cal.notesClist)); + + ReadCalNotes (); +} + + +static void DeleteNote (void) +{ + static GtkWidget *dialog = NULL; + GtkWidget *button, *hbox, *label, *pixmap; + + if (dialog == NULL) + { + dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (dialog), _("Delete calendar note")); + gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkDeleteNoteDialog), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask); + gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show (pixmap); + + label = gtk_label_new (_("Do you want to delete selected note(s)?")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10); + gtk_widget_show (label); + } + + gtk_widget_show (GTK_WIDGET (dialog)); +} + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "R", ReadCalNotes, 0, NULL}, + { NULL, "S", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "X", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", NULL, 0, NULL}, + { NULL, "E", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseCalendar, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", NULL, 0, NULL}, + { NULL, "C", NULL, 0, NULL}, + { NULL, "M", NULL, 0, NULL}, + { NULL, "B", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, NULL}, + { NULL, "D", DeleteNote, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "A", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Read from phone")); + menu_items[2].path = g_strdup (_("/File/_Save to phone")); + menu_items[3].path = g_strdup (_("/File/Sep1")); + menu_items[4].path = g_strdup (_("/File/Send via S_MS")); + menu_items[5].path = g_strdup (_("/File/Sep2")); + menu_items[6].path = g_strdup (_("/File/_Import from file")); + menu_items[7].path = g_strdup (_("/File/_Export to file")); + menu_items[8].path = g_strdup (_("/File/Sep3")); + menu_items[9].path = g_strdup (_("/File/_Close")); + menu_items[10].path = g_strdup (_("/_Edit")); + menu_items[11].path = g_strdup (_("/Edit/Add _reminder")); + menu_items[12].path = g_strdup (_("/Edit/Add _call")); + menu_items[13].path = g_strdup (_("/Edit/Add _meeting")); + menu_items[14].path = g_strdup (_("/Edit/Add _birthday")); + menu_items[15].path = g_strdup (_("/Edit/_Edit")); + menu_items[16].path = g_strdup (_("/Edit/_Delete")); + menu_items[17].path = g_strdup (_("/Edit/Sep4")); + menu_items[18].path = g_strdup (_("/Edit/Select _all")); + menu_items[19].path = g_strdup (_("/_Help")); + menu_items[20].path = g_strdup (_("/Help/_Help")); + menu_items[21].path = g_strdup (_("/Help/_About")); +} + +void GUI_CreateCalendarWindow () +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar, *toolbar, *scrolledWindow, *hpaned; + GtkWidget *main_vbox; + GdkColormap *cmap; + time_t t; + struct tm *tm; + SortColumn *sColumn; + register gint i; + gchar *titles[6] = { _("#"), _("Type"), _("Date"), _("Text"), + _("Alarm"), _("Number")}; + + InitMainMenu (); + GUI_CalendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_CalendarWindow), "CalendarWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_CalendarWindow), _("Calendar")); + //gtk_widget_set_usize (GTK_WIDGET (GUI_CalendarWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (GUI_CalendarWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_CalendarWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_CalendarWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_CalendarWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + /* Create the toolbar */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL, + NewPixmap(Read_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ReadCalNotes, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL, + NewPixmap(Send_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send via SMS"), NULL, + NewPixmap(SendSMS_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL, + NewPixmap(Open_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL, + NewPixmap(Save_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit note"), NULL, + NewPixmap(Edit_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add reminder"), NULL, + NewPixmap(NewRem_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) AddReminder, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add call"), NULL, + NewPixmap(NewCall_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) AddCall, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add meeting"), NULL, + NewPixmap(NewMeet_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) AddMeeting, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add birthday"), NULL, + NewPixmap(NewBD_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) AddBirthday, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete note"), NULL, + NewPixmap(Delete_xpm, GUI_CalendarWindow->window, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) DeleteNote, NULL); + + gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + hpaned = gtk_hpaned_new (); + //gtk_paned_set_handle_size (GTK_PANED (hpaned), 10); + //gtk_paned_set_gutter_size (GTK_PANED (hpaned), 15); + gtk_box_pack_start (GTK_BOX (main_vbox), hpaned, TRUE, TRUE, 0); + gtk_widget_show (hpaned); + + /* Note viewer */ + cal.noteText = gtk_text_new (NULL, NULL); + gtk_text_set_editable (GTK_TEXT (cal.noteText), FALSE); + gtk_text_set_word_wrap (GTK_TEXT (cal.noteText), TRUE); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + + gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow); + + gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.noteText); + gtk_widget_show_all (scrolledWindow); + + /* Calendar */ + cal.calendar = gtk_calendar_new (); + + t = time (NULL); + tm = localtime (&t); + gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), tm->tm_mon, tm->tm_year + 1900); + gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), tm->tm_mday); + + gtk_paned_add2 (GTK_PANED (hpaned), cal.calendar); + gtk_widget_show (cal.calendar); + + /* Notes list */ + cal.notesClist = gtk_clist_new_with_titles (6, titles); + gtk_clist_set_shadow_type (GTK_CLIST (cal.notesClist), GTK_SHADOW_OUT); + gtk_clist_set_compare_func (GTK_CLIST (cal.notesClist), CListCompareFunc); + gtk_clist_set_sort_column (GTK_CLIST (cal.notesClist), 0); + gtk_clist_set_sort_type (GTK_CLIST (cal.notesClist), GTK_SORT_ASCENDING); + gtk_clist_set_auto_sort (GTK_CLIST (cal.notesClist), FALSE); + gtk_clist_set_selection_mode (GTK_CLIST (cal.notesClist), GTK_SELECTION_EXTENDED); + + gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 0, 15); + gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 1, 52); + gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 2, 110); + gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 3, 130); + gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 4, 110); + gtk_clist_set_column_justification (GTK_CLIST (cal.notesClist), 0, GTK_JUSTIFY_RIGHT); + + for (i = 0; i < 6; i++) + { + if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL) + { + g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + gtk_main_quit (); + } + sColumn->clist = cal.notesClist; + sColumn->column = i; + gtk_signal_connect (GTK_OBJECT (GTK_CLIST (cal.notesClist)->column[i].button), "clicked", + GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn); + } + + gtk_signal_connect (GTK_OBJECT (cal.notesClist), "select_row", + GTK_SIGNAL_FUNC (ClickEntry), NULL); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_set_usize (scrolledWindow, 550, 100); + gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.notesClist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_box_pack_end (GTK_BOX (main_vbox), scrolledWindow, + TRUE, TRUE, 0); + + gtk_widget_show (cal.notesClist); + gtk_widget_show (scrolledWindow); + + cmap = gdk_colormap_get_system(); + cal.colour.red = 0xffff; + cal.colour.green = 0; + cal.colour.blue = 0; + if (!gdk_color_alloc (cmap, &(cal.colour))) + g_error (_("couldn't allocate colour")); + + questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_CalendarWindow->window, + &questMark.mask, + &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL], + quest_xpm); + + CreateErrorDialog (&errorDialog, GUI_CalendarWindow); +} diff --git a/xgnokii/xgnokii_calendar.h b/xgnokii/xgnokii_calendar.h new file mode 100644 index 0000000..a4c5b91 --- /dev/null +++ b/xgnokii/xgnokii_calendar.h @@ -0,0 +1,23 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Apr 31 2000 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_CALENDAR_H +#define XGNOKII_CALENDAR_H + +extern void GUI_CreateCalendarWindow (); + +extern void GUI_ShowCalendar (); + +#endif diff --git a/xgnokii/xgnokii_cfg.c b/xgnokii/xgnokii_cfg.c new file mode 100644 index 0000000..7286ce1 --- /dev/null +++ b/xgnokii/xgnokii_cfg.c @@ -0,0 +1,226 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Mon Oct 10 1999 + Modified by Jan Derfinak + +*/ + +#include +#include +#include +#include + +#include "xgnokii_cfg.h" +#include "xgnokii.h" + +ConfigEntry config[] = { + {"name", &(xgnokiiConfig.user.name)}, + {"title", &(xgnokiiConfig.user.title)}, + {"company", &(xgnokiiConfig.user.company)}, + {"telephone", &(xgnokiiConfig.user.telephone)}, + {"fax", &(xgnokiiConfig.user.fax)}, + {"email", &(xgnokiiConfig.user.email)}, + {"address", &(xgnokiiConfig.user.address)}, + {"viewer", &(xgnokiiConfig.helpviewer)}, + {"mailbox", &(xgnokiiConfig.mailbox)}, + {"simlen", &(xgnokiiConfig.maxSIMLen)}, + {"phonelen", &(xgnokiiConfig.maxPhoneLen)}, + {"", NULL} +}; + + +static void GetDefaultValues () +{ + gchar *homedir; + + xgnokiiConfig.user.name = g_strdup (""); + xgnokiiConfig.user.title = g_strdup (""); + xgnokiiConfig.user.company = g_strdup (""); + xgnokiiConfig.user.telephone = g_strdup (""); + xgnokiiConfig.user.fax = g_strdup (""); + xgnokiiConfig.user.email = g_strdup (""); + xgnokiiConfig.user.address = g_strdup (""); + xgnokiiConfig.helpviewer = g_strdup ("netscape"); + if ((homedir = g_get_home_dir ()) == NULL) + homedir = ""; + xgnokiiConfig.mailbox = g_strdup_printf ("%s/Mail/smsbox", homedir); + xgnokiiConfig.maxSIMLen = g_strdup ("14"); + xgnokiiConfig.maxPhoneLen = g_strdup ("16"); +} + + +void GUI_ReadXConfig () +{ + FILE *file; + gchar *line; + gchar *homedir; + gchar *rcfile; + gchar *current; + register gint len; + register gint i; + + GetDefaultValues (); + +#ifdef WIN32 +/* homedir = getenv("HOMEDRIVE"); + g_strconcat(homedir, getenv("HOMEPATH"), NULL); */ + homedir = g_get_home_dir (); + rcfile=g_strconcat(homedir, "\\_xgnokiirc", NULL); +#else + if ((homedir = g_get_home_dir ()) == NULL) + { + g_print (_("WARNING: Can't find HOME enviroment variable!\n")); + return; + } + + if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL) + { + g_print (_("WARNING: Can't allocate memory for config reading!\n")); + return; + } +#endif + + if ((file = fopen (rcfile, "r")) == NULL) + { + g_free (rcfile); + return; + } + + g_free (rcfile); + + if ((line = (char *) g_malloc (255)) == NULL) + { + g_print (_("WARNING: Can't allocate memory for config reading!\n")); + fclose (file); + return; + } + + while (fgets (line, 255, file) != NULL) + { + gint v; + current = line; + + /* Strip leading, trailing whitespace */ + while (isspace ((gint) *current)) + current++; + + while ((strlen (current) > 0) && isspace ((gint) current[strlen (current) - 1])) + current[strlen (current) - 1] = '\0'; + + /* Ignore blank lines and comments */ + + if ((*current == '\n') || (*current == '\0') || (*current == '#')) + continue; + + i = 0; + while (*config[i].key != '\0') + { + len = strlen (config[i].key); + if (g_strncasecmp (config[i].key, current, len) == 0) + { + current += len; + while (isspace ((int) *current)) + current++; + if (*current == '=') + { + current++; + while(isspace ((int) *current)) + current++; + g_free (*config[i].value); + switch (i) + { + case 3: + case 4: + *config[i].value = g_strndup (current, max_phonebook_number_length); + break; + + case 7: + *config[i].value = g_strndup (current, HTMLVIEWER_LENGTH); + break; + + case 8: + *config[i].value = g_strndup (current, MAILBOX_LENGTH); + break; + + case 9: + case 10: + v = atoi (current); + if ( v > 0 && v < 100 ) + *config[i].value = g_strndup (current, 3); + break; + + default: + *config[i].value = g_strndup (current, MAX_BUSINESS_CARD_LENGTH); + break; + } + } + } + i++; + } + } + + fclose (file); + g_free (line); +} + + +gint GUI_SaveXConfig () +{ + FILE *file; + gchar *line; + gchar *homedir; + gchar *rcfile; + register gint i; + + if ((homedir = getenv ("HOME")) == NULL) + { + g_print (_("ERROR: Can't find HOME enviroment variable!\n")); + return (1); + } + + if ((rcfile = g_strconcat (homedir, "/.xgnokiirc", NULL)) == NULL) + { + g_print (_("ERROR: Can't allocate memory for config writing!\n")); + return (2); + } + + if ((file = fopen (rcfile, "w")) == NULL) + { + g_print (_("ERROR: Can't open file %s for writing!\n"), rcfile); + g_free (rcfile); + return (3); + } + + g_free (rcfile); + + i = 0; + while (*config[i].key != '\0') + { + if ((line = g_strdup_printf ("%s = %s\n", config[i].key, *config[i].value)) == NULL) + { + g_print (_("ERROR: Can't allocate memory for config writing!\n")); + fclose (file); + return (2); + } + if (fputs (line, file) == EOF) + { + g_print (_("ERROR: Can't write config file!\n")); + g_free (line); + fclose (file); + return (4); + } + g_free (line); + i++; + } + + fclose (file); + return (0); +} diff --git a/xgnokii/xgnokii_cfg.h b/xgnokii/xgnokii_cfg.h new file mode 100644 index 0000000..75dfab9 --- /dev/null +++ b/xgnokii/xgnokii_cfg.h @@ -0,0 +1,33 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Mon Oct 10 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_CFG_H +#define XGNOKII_CFG_H + +#include +#include "xgnokii.h" + +#define HTMLVIEWER_LENGTH 200 +#define MAILBOX_LENGTH 200 + +typedef struct { + gchar key[10]; + gchar **value; +} ConfigEntry; + +extern void GUI_ReadXConfig(); +extern gint GUI_SaveXConfig(); + +#endif diff --git a/xgnokii/xgnokii_common.c b/xgnokii/xgnokii_common.c new file mode 100644 index 0000000..10748f0 --- /dev/null +++ b/xgnokii/xgnokii_common.c @@ -0,0 +1,338 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Mon May 01 2000 + Modified by Jan Derfinak + +*/ + +#ifndef WIN32 +# include +# include +# include +# include +#endif +#include +#include +#include "misc.h" /* for _() */ +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xpm/quest.xpm" +#include "xpm/stop.xpm" +#include "xpm/info.xpm" + + +typedef struct { + GUIEventType type; + void (*func)(void); +} GUIEvent; + +static GSList *guiEvents = NULL; + + +inline void DeleteEvent (const GtkWidget *widget, const GdkEvent *event, const gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (widget)); +} + + +inline void CancelDialog (const GtkWidget *widget, const gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); +} + + +void CreateErrorDialog (ErrorDialog *errorDialog, GtkWidget *window) +{ + GtkWidget *button, *hbox, *pixmap; + + errorDialog->dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (errorDialog->dialog), _("Error")); + gtk_window_set_modal (GTK_WINDOW (errorDialog->dialog), TRUE); + gtk_window_position (GTK_WINDOW (errorDialog->dialog), GTK_WIN_POS_MOUSE); + gtk_container_set_border_width (GTK_CONTAINER (errorDialog->dialog), 5); + gtk_signal_connect (GTK_OBJECT (errorDialog->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (errorDialog->dialog)->action_area), + button, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) errorDialog->dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (errorDialog->dialog)->vbox), hbox); + gtk_widget_show (hbox); + + if (window) + { + pixmap = NewPixmap (stop_xpm, window->window, + &window->style->bg[GTK_STATE_NORMAL]); + gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show (pixmap); + } + + errorDialog->text = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX(hbox), errorDialog->text, FALSE, FALSE, 10); + gtk_widget_show (errorDialog->text); +} + + +void CreateInfoDialog (InfoDialog *infoDialog, GtkWidget *window) +{ + GtkWidget *hbox, *pixmap; + + infoDialog->dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (infoDialog->dialog), _("Info")); + gtk_window_set_modal (GTK_WINDOW (infoDialog->dialog), TRUE); + gtk_window_position (GTK_WINDOW (infoDialog->dialog), GTK_WIN_POS_MOUSE); + gtk_container_set_border_width (GTK_CONTAINER (infoDialog->dialog), 5); + gtk_signal_connect (GTK_OBJECT (infoDialog->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (infoDialog->dialog)->vbox), hbox); + gtk_widget_show_now (hbox); + + if (window) + { + pixmap = NewPixmap (info_xpm, window->window, + &window->style->bg[GTK_STATE_NORMAL]); + gtk_box_pack_start (GTK_BOX(hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show_now (pixmap); + } + + infoDialog->text = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX(hbox), infoDialog->text, FALSE, FALSE, 10); + gtk_widget_show_now (infoDialog->text); +} + + +void CreateYesNoDialog (YesNoDialog *yesNoDialog, const GtkSignalFunc yesFunc, + const GtkSignalFunc noFunc, GtkWidget *window) +{ + GtkWidget *button, *hbox, *pixmap; + + yesNoDialog->dialog = gtk_dialog_new (); + gtk_window_position (GTK_WINDOW (yesNoDialog->dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal (GTK_WINDOW (yesNoDialog->dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (yesNoDialog->dialog), 5); + gtk_signal_connect (GTK_OBJECT (yesNoDialog->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + + button = gtk_button_new_with_label (_("Yes")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area), + button, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (yesFunc), (gpointer) yesNoDialog->dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("No")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area), + button, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (noFunc), (gpointer) yesNoDialog->dialog); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (yesNoDialog->dialog)->action_area), + button, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) yesNoDialog->dialog); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (yesNoDialog->dialog)->vbox), hbox); + gtk_widget_show (hbox); + + if (window) + { + pixmap = NewPixmap (quest_xpm, window->window, + &window->style->bg[GTK_STATE_NORMAL]); + gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show (pixmap); + } + + yesNoDialog->text = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (hbox), yesNoDialog->text, FALSE, FALSE, 10); + gtk_widget_show (yesNoDialog->text); +} + + +GtkWidget* NewPixmap (gchar **data, GdkWindow *window, GdkColor *background) +{ + GtkWidget *wpixmap; + GdkPixmap *pixmap; + GdkBitmap *mask; + + pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, background, data); + + wpixmap = gtk_pixmap_new (pixmap, mask); + + return wpixmap; +} + + +gint LaunchProcess (const gchar *p, const gchar *arg, const gint infile, + const gint outfile, const gint errfile) +{ + pid_t pid; + + if (p == 0) + return (1); + pid = fork (); + if (pid == -1) + return (-1); + if (pid == 0) + { + pid = getpid (); + setpgid (pid, pid); + if (getuid () != geteuid ()) + seteuid (getuid ()); + + signal (SIGINT, SIG_DFL); + signal (SIGQUIT, SIG_DFL); + signal (SIGTSTP, SIG_DFL); + signal (SIGTTIN, SIG_DFL); + signal (SIGTTOU, SIG_DFL); + signal (SIGCHLD, SIG_DFL); + + if (infile != STDIN_FILENO) + { + dup2 (infile, STDIN_FILENO); + close (infile); + } + if (outfile != STDOUT_FILENO) + { + dup2 (outfile, STDOUT_FILENO); + close (outfile); + } + if (errfile != STDERR_FILENO) + { + dup2 (errfile, STDERR_FILENO); + close (errfile); + } + + execlp (p, p, arg, NULL); + g_print (_("Can't exec %s\n"), p); + execlp ("/bin/false", p, NULL); + return (-1); + } + + setpgid (pid, pid); + return (0); +} + + +void RemoveZombie (const gint sign) +{ + gint status; + + wait (&status); +} + + +void Help (const GtkWidget *w, const gpointer data) +{ + gchar buf[255] = "file:"; + + strncat (buf, xgnokiiConfig.xgnokiidir, 255 - strlen (buf)); + buf[254] = '\0'; + strncat (buf, (gchar *) data, 255 - strlen (buf)); + buf[254] = '\0'; + LaunchProcess (xgnokiiConfig.helpviewer, buf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO); +} + + +inline gint strrncmp (const gchar * const s1, const gchar * const s2, size_t n) +{ + gint l1 = strlen (s1); + gint l2 = strlen (s2); + + if (l1 == 0 && l2 != 0) + return (-1); + else if (l1 != 0 && l2 == 0) + return (1); + + while (l1-- > 0 && l2-- > 0 && n-- > 0) + { + if (s1[l1] < s2[l2]) + return (-1); + else if (s1[l1] > s2[l2]) + return (1); + } + + return (0); +} + + +inline void GUI_Refresh (void) +{ + while (gtk_events_pending()) + gtk_main_iteration(); +} + + +inline void SetSortColumn (GtkWidget *widget, SortColumn *data) +{ + gtk_clist_set_sort_column (GTK_CLIST (data->clist), data->column); + gtk_clist_sort (GTK_CLIST (data->clist)); +} + + +inline void GUIEventAdd (GUIEventType type, void (*func)(void)) +{ + GUIEvent *event = g_malloc (sizeof (GUIEvent)); + + event->type = type; + event->func = func; + + guiEvents = g_slist_append (guiEvents, event); +} + + +bool GUIEventRemove (GUIEventType type, void (*func)(void)) +{ + GUIEvent event; + GSList *list; + + event.type = type; + event.func = func; + + list = g_slist_find (guiEvents, &event); + if (list) + { + g_print ("Nasiel som\n"); + guiEvents = g_slist_remove_link (guiEvents, list); + g_slist_free_1 (list); + return (TRUE); + } + + return (FALSE); +} + +static inline void CallEvent (gpointer data, gpointer user_data) +{ + GUIEvent *event = (GUIEvent *) data; + + if (event->type == GPOINTER_TO_INT (user_data)) + event->func (); +} + +inline void GUIEventSend (GUIEventType type) +{ + g_slist_foreach (guiEvents, CallEvent, GINT_TO_POINTER (type)); +} diff --git a/xgnokii/xgnokii_common.h b/xgnokii/xgnokii_common.h new file mode 100644 index 0000000..e594a38 --- /dev/null +++ b/xgnokii/xgnokii_common.h @@ -0,0 +1,78 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Mon May 01 2000 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_COMMON_H +#define XGNOKII_COMMON_H + +#include +#include /* for size_t */ + +typedef struct { + GtkWidget *clist; + gint column; +} SortColumn; + +/* typedef struct { + gchar *model; + gchar *number; +} Model; +*/ + +typedef struct { + GtkWidget *dialog; + GtkWidget *text; +} ErrorDialog; + +typedef struct { + GtkWidget *dialog; + GtkWidget *text; +} InfoDialog; + +typedef struct { + GtkWidget *dialog; + GtkWidget *text; +} YesNoDialog; + +typedef struct { + GdkPixmap *pixmap; + GdkBitmap *mask; +} QuestMark; + +typedef enum { + GUI_EVENT_CONTACTS_CHANGED, + GUI_EVENT_CALLERS_GROUPS_CHANGED, + GUI_EVENT_SMS_NUMBER_CHANGED, + GUI_EVENT_SMS_CENTERS_CHANGED, + GUI_EVENT_NETMON_CHANGED, +} GUIEventType; + +extern void CancelDialog (const GtkWidget *, const gpointer); +extern void CreateErrorDialog (ErrorDialog *, GtkWidget *); +extern void CreateInfoDialog (InfoDialog *, GtkWidget *); +extern void CreateYesNoDialog (YesNoDialog *, const GtkSignalFunc, + const GtkSignalFunc, GtkWidget *); +extern GtkWidget* NewPixmap (gchar **, GdkWindow *, GdkColor *); +extern void DeleteEvent (const GtkWidget *, const GdkEvent *, const gpointer ); +extern gint LaunchProcess (const gchar *, const gchar *, const gint, + const gint, const gint); +extern void RemoveZombie (const gint); +extern void Help (const GtkWidget *, const gpointer); +extern gint strrncmp (const gchar * const, const gchar * const, size_t); +extern void GUI_Refresh (void); +extern void SetSortColumn (GtkWidget *, SortColumn *); +extern void GUIEventAdd (GUIEventType, void (*)(void)); +extern bool GUIEventRemove (GUIEventType, void (*)(void)); +extern void GUIEventSend (GUIEventType); +#endif diff --git a/xgnokii/xgnokii_contacts.c b/xgnokii/xgnokii_contacts.c new file mode 100644 index 0000000..c34d5f7 --- /dev/null +++ b/xgnokii/xgnokii_contacts.c @@ -0,0 +1,3459 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Id$ + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:28 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.31 2001/11/14 10:46:12 pkot + Small cleanup with __unices__ + + Revision 1.30 2001/09/14 13:14:04 pkot + Xgnokii WM fixes (Martin Lucina) + + Revision 1.29 2001/03/23 08:24:56 ja + New preview for 6210 in xgnokii's logos module. + + Revision 1.28 2001/03/19 23:43:47 pkot + Solaris/BSD '#if defined' cleanup + + Revision 1.27 2001/03/13 01:21:39 pkot + *BSD updates (Bert Driehuis) + + Revision 1.26 2001/03/05 10:42:03 ja + Pavel Machek's vcard and finegrained indicators patch. + + Revision 1.25 2001/02/12 15:13:46 chris + Fixed my bug in xgnokii_contacts.c and added to tekram.c + + Revision 1.24 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + +*/ + + +#include "misc.h" + +#include +#include + +#ifndef WIN32 +# include +#else +# include +# define sleep(x) Sleep((x) * 1000) +# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000)) +# define index strchr +#endif + +#include +#include +#include + +#include "gsm-common.h" +#include "xgnokii_contacts.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii.h" +#include "xgnokii_common.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_sms.h" +#include "xpm/Read.xpm" +#include "xpm/Send.xpm" +#include "xpm/Open.xpm" +#include "xpm/Save.xpm" +#include "xpm/New.xpm" +#include "xpm/Duplicate.xpm" +#include "xpm/Edit.xpm" +#include "xpm/Delete.xpm" +#include "xpm/Dial.xpm" +#include "xpm/sim.xpm" +#include "xpm/phone.xpm" +#include "xpm/quest.xpm" + + +typedef struct { + GtkWidget *dialog; + GtkWidget *entry; +} DialVoiceDialog; + +typedef struct { + GtkWidget *dialog; + GtkWidget *entry; + gint row; + GtkWidget *gbutton; + GtkWidget *mbutton; + GtkWidget *wbutton; + GtkWidget *fbutton; + GtkWidget *hbutton; + PhonebookEntry *pbEntry; +} ExtPbkDialog; + +static GtkWidget *GUI_ContactsWindow; +static bool fbus3810; +static bool contactsMemoryInitialized; +static MemoryStatus memoryStatus; +static ContactsMemory contactsMemory; /* Hold contacts. */ +static GtkWidget *clist; +static StatusInfo statusInfo; +static ProgressDialog progressDialog = {NULL, NULL, NULL}; +static ErrorDialog errorDialog = {NULL, NULL}; +static FindEntryStruct findEntryStruct = { "", 0}; +static ExportDialogData exportDialogData = {NULL}; +static MemoryPixmaps memoryPixmaps; +static QuestMark questMark; +static EditEntryData newEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +static EditEntryData editEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +static EditEntryData duplicateEditEntryData = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +static EditNumbersData editNumbersData = {NULL, NULL}; + +/* return != 0 if user has unsaved changes in contacts memory */ +inline gint GUI_ContactsIsChanged (void) +{ + return statusInfo.ch_ME | statusInfo.ch_SM; +} + + +/* return TRUE if Contacts memory was read from phone or from file */ +inline bool GUI_ContactsIsIntialized (void) +{ + return contactsMemoryInitialized; +} + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/contacts/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +void RefreshStatusInfo (void) +{ + char p,s; + + if (statusInfo.ch_ME) + p = '*'; + else + p = ' '; + + if (statusInfo.ch_SM) + s = '*'; + else + s = ' '; + g_snprintf(statusInfo.text, STATUS_INFO_LENGTH, "SIM: %d/%d%c Phone: %d/%d%c", + memoryStatus.UsedSM, memoryStatus.MaxSM, s, + memoryStatus.UsedME, memoryStatus.MaxME, p); + gtk_label_set_text(GTK_LABEL (statusInfo.label), statusInfo.text); +} + + +static inline void SetGroup0 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 0; +} + + +static inline void SetGroup1 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 1; +} + + +static inline void SetGroup2 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 2; +} + + +static inline void SetGroup3 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 3; +} + + +static inline void SetGroup4 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 4; +} + + +static inline void SetGroup5 (GtkWidget *item, gpointer data) +{ + ((EditEntryData *) data)->newGroup = 5; +} + + +PhonebookEntry *FindFreeEntry (GSM_MemoryType type) +{ + PhonebookEntry *entry; + gint start, end; + register gint i; + + if (type == GMT_ME) + { + if (memoryStatus.FreeME == 0) + return NULL; + start = 0; + end = memoryStatus.MaxME; + } + else + { + if (memoryStatus.FreeSM == 0) + return NULL; + start = memoryStatus.MaxME; + end = memoryStatus.MaxME + memoryStatus.MaxSM; + } + + for(i = start; i < end; i++) + { + entry = g_ptr_array_index(contactsMemory, i); + if (entry->status == E_Empty || entry->status == E_Deleted) + return entry; + } + + return NULL; +} + + +inline PhonebookEntry *GUI_GetEntry (GSM_MemoryType type, gint nr) +{ + if ((type == GMT_ME && (nr < 1 || nr >= memoryStatus.MaxME)) || + (type == GMT_SM && (nr < 1 || nr >= memoryStatus.MaxSM))) + return NULL; + + if (type == GMT_ME) + return g_ptr_array_index (contactsMemory, nr - 1); + else + return g_ptr_array_index (contactsMemory, nr + memoryStatus.MaxME - 1); +} + + +static void CloseContacts (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_ContactsWindow); +} + + +/* I don't want to allow window to close */ +static void ProgressDialogDeleteEvent (GtkWidget *w, gpointer data) +{ + return; +} + + +static void CancelEditDialog (GtkWidget *widget, gpointer data ) +{ + gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog)); +} + + + +static void OkEditEntryDialog (GtkWidget *widget, gpointer data) +{ + gchar *clist_row[4]; + PhonebookEntry *entry; + + if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active && + ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM) + { + if ((entry = FindFreeEntry(GMT_ME)) == NULL) + { + gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + strncpy(entry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_name_length); + entry->entry.Name[max_phonebook_name_length] = '\0'; + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(entry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_number_length); + entry->entry.Name[max_phonebook_number_length] = '\0'; + } + + entry->entry.Group = ((EditEntryData*) data)->newGroup; + + entry->status = E_Changed; + + ((EditEntryData*) data)->pbEntry->status = E_Deleted; + + memoryStatus.UsedME++; + memoryStatus.FreeME--; + memoryStatus.UsedSM--; + memoryStatus.FreeSM++; + statusInfo.ch_ME = statusInfo.ch_SM = 1; + + ((EditEntryData*) data)->pbEntry = entry; + } + else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active && + ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + { + if ((entry = FindFreeEntry(GMT_SM)) == NULL) + { + gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + strncpy(entry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_sim_name_length); + entry->entry.Name[max_phonebook_sim_name_length] = '\0'; + + if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length) + { + gtk_label_set_text( GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\ +because you save it into SIM memory!")); + gtk_widget_show (errorDialog.dialog); + } + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(entry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_sim_number_length); + entry->entry.Name[max_phonebook_sim_number_length] = '\0'; + } + + entry->entry.Group = ((EditEntryData*) data)->newGroup; + + entry->status = E_Changed; + + ((EditEntryData*) data)->pbEntry->status = E_Deleted; + + memoryStatus.UsedME--; + memoryStatus.FreeME++; + memoryStatus.UsedSM++; + memoryStatus.FreeSM--; + statusInfo.ch_ME = statusInfo.ch_SM = 1; + + ((EditEntryData*) data)->pbEntry = entry; + } + else + { + if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active) + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_name_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0'; + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_number_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0'; + } + } + else + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_sim_name_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0'; + + if (strlen(gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated,\n\ +because you save it into SIM memory!")); + gtk_widget_show (errorDialog.dialog); + } + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_sim_number_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0'; + } + } + + ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup; + + ((EditEntryData*) data)->pbEntry->status = E_Changed; + + if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + statusInfo.ch_ME = 1; + else + statusInfo.ch_SM = 1; + } + + gtk_widget_hide (GTK_WIDGET(((EditEntryData*) data)->dialog)); + + RefreshStatusInfo (); + + gtk_clist_freeze (GTK_CLIST (clist)); + gtk_clist_remove (GTK_CLIST (clist), ((EditEntryData*) data)->row); + + clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name; + + clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number; + + if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + clist_row[2] = "P"; + else + clist_row[2] = "S"; + if (phoneMonitor.supported & PM_CALLERGROUP) + clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group]; + else + clist_row[3] = ""; + gtk_clist_insert(GTK_CLIST (clist), ((EditEntryData*) data)->row, clist_row); + if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap( GTK_CLIST (clist), ((EditEntryData*) data)->row, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); + + gtk_clist_set_row_data(GTK_CLIST (clist), ((EditEntryData*) data)->row, (gpointer) ((EditEntryData*) data)->pbEntry); + + gtk_clist_sort(GTK_CLIST (clist)); + gtk_clist_thaw(GTK_CLIST (clist)); +} + + +static void OkDeleteEntryDialog(GtkWidget *widget, gpointer data ) +{ + PhonebookEntry *pbEntry; + GList *sel; + gint row; + + sel = GTK_CLIST (clist)->selection; + + gtk_clist_freeze(GTK_CLIST (clist)); + + while (sel != NULL) + { + row = GPOINTER_TO_INT(sel->data); + pbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row); + sel = sel->next; + + pbEntry->status = E_Deleted; + + if (pbEntry->entry.MemoryType == GMT_ME) + { + memoryStatus.UsedME--; + memoryStatus.FreeME++; + statusInfo.ch_ME = 1; + } + else + { + memoryStatus.UsedSM--; + memoryStatus.FreeSM++; + statusInfo.ch_SM = 1; + } + + gtk_clist_remove(GTK_CLIST (clist), row); + } + + RefreshStatusInfo (); + + gtk_widget_hide(GTK_WIDGET (data)); + + gtk_clist_thaw(GTK_CLIST (clist)); +} + + +static void OkNewEntryDialog(GtkWidget *widget, gpointer data ) +{ + gchar *clist_row[4]; + PhonebookEntry *entry; + + if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active && + ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_SM) + { + if ((entry = FindFreeEntry (GMT_ME)) == NULL) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + strncpy(entry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_name_length); + entry->entry.Name[max_phonebook_name_length] = '\0'; + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(entry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_number_length); + entry->entry.Name[max_phonebook_number_length] = '\0'; + } + + entry->entry.Group = ((EditEntryData*) data)->newGroup; + + entry->status = E_Changed; + + ((EditEntryData*) data)->pbEntry = entry; + } + else if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypeSIM)->active && + ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + { + if ((entry = FindFreeEntry (GMT_SM)) == NULL) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + strncpy(entry->entry.Name, + gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_sim_name_length); + entry->entry.Name[max_phonebook_sim_name_length] = '\0'; + + if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\ +because you save it into SIM memory!")); + gtk_widget_show (errorDialog.dialog); + } + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(entry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_sim_number_length); + entry->entry.Name[max_phonebook_sim_number_length] = '\0'; + } + + entry->entry.Group = ((EditEntryData*) data)->newGroup; + + entry->status = E_Changed; + + ((EditEntryData*) data)->pbEntry = entry; + } + else + { + if (GTK_TOGGLE_BUTTON(((EditEntryData*) data)->memoryTypePhone)->active) + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_name_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_name_length] = '\0'; + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy(((EditEntryData*) data)->pbEntry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_number_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_number_length] = '\0'; + } + } + else + { + strncpy (((EditEntryData*) data)->pbEntry->entry.Name, + gtk_entry_get_text(GTK_ENTRY (((EditEntryData*) data)->name)), + max_phonebook_sim_name_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_name_length] = '\0'; + + if (strlen(gtk_entry_get_text (GTK_ENTRY (((EditEntryData*) data)->name))) > max_phonebook_sim_name_length) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Sorry, phonebook name will be truncated\n\ +because you save it into SIM memory!")); + gtk_widget_show (errorDialog.dialog); + } + + if (phoneMonitor.supported & PM_EXTPBK) + { + } + else + { + strncpy (((EditEntryData*) data)->pbEntry->entry.Number, + gtk_entry_get_text (GTK_ENTRY(((EditEntryData*) data)->number)), + max_phonebook_sim_number_length); + ((EditEntryData*) data)->pbEntry->entry.Name[max_phonebook_sim_number_length] = '\0'; + } + } + + ((EditEntryData*) data)->pbEntry->entry.Group = ((EditEntryData*) data)->newGroup; + + ((EditEntryData*) data)->pbEntry->status = E_Changed; + } + + if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + { + memoryStatus.UsedME++; + memoryStatus.FreeME--; + statusInfo.ch_ME = 1; + } + else + { + memoryStatus.UsedSM++; + memoryStatus.FreeSM--; + statusInfo.ch_SM = 1; + } + + gtk_widget_hide(GTK_WIDGET(((EditEntryData*) data)->dialog)); + + RefreshStatusInfo (); + + gtk_clist_freeze (GTK_CLIST (clist)); + clist_row[0] = ((EditEntryData*) data)->pbEntry->entry.Name; + + clist_row[1] = ((EditEntryData*) data)->pbEntry->entry.Number; + + if( ((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + clist_row[2] = "P"; + else + clist_row[2] = "S"; + if (phoneMonitor.supported & PM_CALLERGROUP) + clist_row[3] = xgnokiiConfig.callerGroups[((EditEntryData*) data)->pbEntry->entry.Group]; + else + clist_row[3] = ""; + gtk_clist_insert (GTK_CLIST (clist), 1, clist_row); + + if (((EditEntryData*) data)->pbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap (GTK_CLIST (clist), 1, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); + + gtk_clist_set_row_data (GTK_CLIST (clist), 1, (gpointer) ((EditEntryData*) data)->pbEntry); + + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); +} + + +static void OkChangeEntryDialog( GtkWidget *widget, gpointer data) +{ + gchar *clist_row[4]; + gint row; + PhonebookEntry *oldPbEntry, *newPbEntry; + GList *sel; + gchar string[100]; + + sel = GTK_CLIST (clist)->selection; + + gtk_widget_hide(GTK_WIDGET (data)); + + gtk_clist_freeze(GTK_CLIST (clist)); + + while (sel != NULL) + { + row = GPOINTER_TO_INT (sel->data); + oldPbEntry = (PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row); + + sel = sel->next; + + if (oldPbEntry->entry.MemoryType == GMT_SM) + { + if ((newPbEntry = FindFreeEntry (GMT_ME)) == NULL) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + + newPbEntry->entry = oldPbEntry->entry; + newPbEntry->entry.MemoryType = GMT_ME; + + newPbEntry->status = E_Changed; + oldPbEntry->status = E_Deleted; + + memoryStatus.UsedME++; + memoryStatus.FreeME--; + memoryStatus.UsedSM--; + memoryStatus.FreeSM++; + statusInfo.ch_ME = statusInfo.ch_SM = 1; + + } + else + { + if ((newPbEntry = FindFreeEntry(GMT_SM)) == NULL) + { + gtk_label_set_text(GTK_LABEL (errorDialog.text), _("Can't change memory type!")); + gtk_widget_show (errorDialog.dialog); + return; + } + + newPbEntry->entry = oldPbEntry->entry; + newPbEntry->entry.Name[max_phonebook_sim_name_length] = '\0'; + newPbEntry->entry.MemoryType = GMT_SM; + + newPbEntry->status = E_Changed; + oldPbEntry->status = E_Deleted; + + memoryStatus.UsedME--; + memoryStatus.FreeME++; + memoryStatus.UsedSM++; + memoryStatus.FreeSM--; + statusInfo.ch_ME = statusInfo.ch_SM = 1; + } + + gtk_clist_remove(GTK_CLIST (clist), row); + + clist_row[0] = newPbEntry->entry.Name; + + if (newPbEntry->entry.SubEntriesCount>0) { + snprintf(string,100,"%s *",newPbEntry->entry.Number); + clist_row[1]=string; + } else clist_row[1] = newPbEntry->entry.Number; + + if( newPbEntry->entry.MemoryType == GMT_ME) + clist_row[2] = "P"; + else + clist_row[2] = "S"; + if (phoneMonitor.supported & PM_CALLERGROUP) + clist_row[3] = xgnokiiConfig.callerGroups[newPbEntry->entry.Group]; + else + clist_row[3] = ""; + gtk_clist_insert (GTK_CLIST (clist), row, clist_row); + if (newPbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap (GTK_CLIST (clist), row, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); + + gtk_clist_set_row_data (GTK_CLIST (clist), row, (gpointer) newPbEntry); + } + + RefreshStatusInfo (); + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); +} + + +static void SearchEntry (void) +{ + gchar *buf; + gchar *entry; + gint i; + + if (!contactsMemoryInitialized || *findEntryStruct.pattern == '\0') + return; + + gtk_clist_unselect_all( GTK_CLIST (clist)); + g_strup(findEntryStruct.pattern); + + gtk_clist_get_text( GTK_CLIST (clist), findEntryStruct.lastRow, + findEntryStruct.type, &entry); + i = (findEntryStruct.lastRow + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM); + + while (findEntryStruct.lastRow != i) + { + buf = g_strdup (entry); + g_strup (buf); + + if (strstr( buf, findEntryStruct.pattern)) + { + g_free(buf); + findEntryStruct.lastRow = i; + gtk_clist_select_row( GTK_CLIST (clist), + (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1) + % (memoryStatus.MaxME + memoryStatus.MaxSM), + findEntryStruct.type); + gtk_clist_moveto( GTK_CLIST (clist), + (i + memoryStatus.MaxME + memoryStatus.MaxSM - 1) + % (memoryStatus.MaxME + memoryStatus.MaxSM), + findEntryStruct.type, 0.5, 0.5); + return; + } + g_free(buf); + gtk_clist_get_text (GTK_CLIST (clist), i, findEntryStruct.type, &entry); + + i = (i + 1) % (memoryStatus.MaxME + memoryStatus.MaxSM); + } + + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find pattern!")); + gtk_widget_show (errorDialog.dialog); +} + + +static void OkFindEntryDialog (GtkWidget *widget, gpointer data) +{ + if (GTK_TOGGLE_BUTTON (((FindEntryData*) data)->nameB)->active) + findEntryStruct.type = FIND_NAME; + else + findEntryStruct.type = FIND_NUMBER; + + strncpy(findEntryStruct.pattern, + gtk_entry_get_text (GTK_ENTRY (((FindEntryData*) data)->pattern)), + max_phonebook_number_length); + findEntryStruct.pattern[max_phonebook_number_length] = '\0'; + + findEntryStruct.lastRow = 0; + + gtk_widget_hide( ((FindEntryData*) data)->dialog); + + SearchEntry (); +} + + +void CreateGroupMenu (EditEntryData *data) +{ + GtkWidget *item; + + if (data->groupMenu) + { + gtk_option_menu_remove_menu (GTK_OPTION_MENU (data->group)); + if (GTK_IS_WIDGET (data->groupMenu)) + gtk_widget_destroy (GTK_WIDGET (data->groupMenu)); + data->groupMenu = NULL; + } + + data->groupMenu = gtk_menu_new (); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[0]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup0), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[1]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup1), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[2]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup2), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[3]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup3), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[4]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup4), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + item = gtk_menu_item_new_with_label (xgnokiiConfig.callerGroups[5]); + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetGroup5), + (gpointer) data); + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (data->groupMenu), item); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (data->group), data->groupMenu); +} + + +inline void GUI_RefreshGroupMenu (void) +{ + if (newEditEntryData.group) + CreateGroupMenu (&newEditEntryData); + + if (editEditEntryData.group) + CreateGroupMenu (&editEditEntryData); + + if (duplicateEditEntryData.group) + CreateGroupMenu (&duplicateEditEntryData); +} + + +static void EditSubEntries (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + gpointer data ) +{ + if(event && event->type == GDK_2BUTTON_PRESS) +// EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row), +// row); + { + gchar *buf; + + gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf); + g_print (buf); + } +} + + +static void EditNumbers (GtkWidget *widget, void *data) +{ + GtkWidget *button, *clistScrolledWindow; + gchar *row[3]; + register gint i; + + + if (editNumbersData.dialog == NULL) + { + editNumbersData.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (editNumbersData.dialog), _("Numbers")); + gtk_window_set_modal (GTK_WINDOW (editNumbersData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (editNumbersData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (editNumbersData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area), + button, TRUE, TRUE, 10); +// gtk_signal_connect (GTK_OBJECT (button), "clicked", +// GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("New")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area), + button, TRUE, TRUE, 10); +// gtk_signal_connect (GTK_OBJECT (button), "clicked", +// GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editNumbersData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) editNumbersData.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox), 5); + + editNumbersData.clist = gtk_clist_new (3); + gtk_clist_set_shadow_type (GTK_CLIST (editNumbersData.clist), GTK_SHADOW_OUT); + + gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 0, 4); + gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 1, 115); + gtk_clist_set_column_width (GTK_CLIST (editNumbersData.clist), 2, 10); + //gtk_clist_set_column_justification (GTK_CLIST (editNumbersData.clist), 2, GTK_JUSTIFY_CENTER); + + gtk_signal_connect (GTK_OBJECT (editNumbersData.clist), "select_row", + GTK_SIGNAL_FUNC (EditSubEntries), NULL); + + clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (clistScrolledWindow), editNumbersData.clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editNumbersData.dialog)->vbox), + clistScrolledWindow); + + gtk_widget_show (editNumbersData.clist); + gtk_widget_show (clistScrolledWindow); + } + + gtk_clist_freeze (GTK_CLIST (editNumbersData.clist)); + gtk_clist_clear (GTK_CLIST (editNumbersData.clist)); + + for(i = 0; i < editNumbersData.pbEntry->entry.SubEntriesCount; i++) + { + if (strcmp (editNumbersData.pbEntry->entry.Number, + editNumbersData.pbEntry->entry.SubEntries[i].data.Number) == 0) + row[0] = "*"; + else + row[0] = ""; + + row[1] = editNumbersData.pbEntry->entry.SubEntries[i].data.Number; + + switch (editNumbersData.pbEntry->entry.SubEntries[i].EntryType) + { + case GSM_Number: + switch (editNumbersData.pbEntry->entry.SubEntries[i].NumberType) + { + case GSM_General: + row[2] = "General"; + break; + + case GSM_Mobile: + row[2] = "Mobile"; + break; + + case GSM_Work: + row[2] = "Work"; + break; + + case GSM_Fax: + row[2] = "Fax"; + break; + + case GSM_Home: + row[2] = "Home"; + break; + + default: + row[2] = "Unknown"; + break; + } + break; + + case GSM_Note: + row[2] = "Note"; + break; + + case GSM_Postal: + row[2] = "Postal"; + break; + + case GSM_Email: + row[2] = "E-Mail"; + break; + + case GSM_Name: + row[2] = "Name"; + break; + + default: + row[2] = "Unknown"; + break; + } + + gtk_clist_append (GTK_CLIST (editNumbersData.clist), row); +/* if (pbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); +*/ + } + + gtk_clist_thaw (GTK_CLIST (editNumbersData.clist)); + + gtk_widget_show (editNumbersData.dialog); +} + + +static void CreateEditDialog (EditEntryData *editEntryData, gchar *title, + GtkSignalFunc okFunc) +{ + GtkWidget *button, *label, *hbox; + + editEntryData->dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (editEntryData->dialog), title); + gtk_window_set_modal (GTK_WINDOW (editEntryData->dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (editEntryData->dialog), 10); + gtk_signal_connect (GTK_OBJECT (editEntryData->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (okFunc), (gpointer) editEntryData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (editEntryData->dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) editEntryData); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Name:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + editEntryData->name = gtk_entry_new_with_max_length (100); + + gtk_box_pack_end(GTK_BOX(hbox), editEntryData->name, FALSE, FALSE, 2); + gtk_widget_show (editEntryData->name); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Number:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + if (phoneMonitor.supported & PM_EXTPBK) + { + button = gtk_button_new (); + editEntryData->number = gtk_label_new (""); + + gtk_container_add (GTK_CONTAINER (button), editEntryData->number); + + gtk_box_pack_end(GTK_BOX(hbox), button, TRUE, TRUE, 2); + + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (EditNumbers), NULL); + gtk_widget_show_all (button); + } + else + { + editEntryData->number = gtk_entry_new_with_max_length (max_phonebook_number_length); + gtk_box_pack_end(GTK_BOX(hbox), editEntryData->number, FALSE, FALSE, 2); + gtk_widget_show (editEntryData->number); + } + +/* if (phoneMonitor.supported & PM_EXTPBK) { + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox); +// gtk_widget_show (hbox); + + label = gtk_label_new (_("Extended:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2); +// gtk_widget_show (label); + + editEntryData->extended = gtk_combo_new(); + gtk_box_pack_end(GTK_BOX(hbox), editEntryData->extended, FALSE, FALSE, 2); +// gtk_widget_show (editEntryData->extended); + + gtk_signal_connect (GTK_OBJECT (GTK_COMBO(editEntryData->extended)->entry), "activate", + GTK_SIGNAL_FUNC (ExtPbkChanged), (gpointer) editEntryData); + } +*/ + + editEntryData->memoryBox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), + editEntryData->memoryBox); + + label = gtk_label_new (_("Memory:")); + gtk_box_pack_start(GTK_BOX (editEntryData->memoryBox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + editEntryData->memoryTypePhone = gtk_radio_button_new_with_label (NULL, _("phone")); + gtk_box_pack_end (GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypePhone, TRUE, FALSE, 2); + gtk_widget_show (editEntryData->memoryTypePhone); + + editEntryData->memoryTypeSIM = gtk_radio_button_new_with_label( + gtk_radio_button_group (GTK_RADIO_BUTTON (editEntryData->memoryTypePhone)), "SIM"); + gtk_box_pack_end(GTK_BOX (editEntryData->memoryBox), editEntryData->memoryTypeSIM, TRUE, FALSE, 2); + gtk_widget_show (editEntryData->memoryTypeSIM); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (editEntryData->dialog)->vbox), hbox); + gtk_widget_show (hbox); + + editEntryData->groupLabel = gtk_label_new (_("Caller group:")); + gtk_box_pack_start (GTK_BOX (hbox), editEntryData->groupLabel, FALSE, FALSE, 2); + + editEntryData->group = gtk_option_menu_new (); + + CreateGroupMenu (editEntryData); + + gtk_box_pack_start (GTK_BOX (hbox), editEntryData->group, TRUE, TRUE, 0); +} + + +static void EditPbEntry(PhonebookEntry *pbEntry, gint row) +{ + if (editEditEntryData.dialog == NULL) + CreateEditDialog(&editEditEntryData, _("Edit entry"), OkEditEntryDialog); + + editEditEntryData.pbEntry = pbEntry; + editEditEntryData.newGroup = pbEntry->entry.Group; + editEditEntryData.row = row; + editNumbersData.pbEntry = pbEntry; + + gtk_entry_set_text (GTK_ENTRY (editEditEntryData.name), pbEntry->entry.Name); + + if (phoneMonitor.supported & PM_EXTPBK) + gtk_label_set_text (GTK_LABEL (editEditEntryData.number), pbEntry->entry.Number); + else + gtk_entry_set_text (GTK_ENTRY (editEditEntryData.number), pbEntry->entry.Number); + + if (pbEntry->entry.MemoryType == GMT_ME) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypePhone), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (editEditEntryData.memoryTypeSIM), TRUE); + + gtk_option_menu_set_history( GTK_OPTION_MENU (editEditEntryData.group), + pbEntry->entry.Group); + + if (phoneMonitor.supported & PM_CALLERGROUP) + { + gtk_widget_show (editEditEntryData.group); + gtk_widget_show (editEditEntryData.groupLabel); + } + else + { + gtk_widget_hide (editEditEntryData.group); + gtk_widget_hide (editEditEntryData.groupLabel); + } + + if (memoryStatus.MaxME > 0) + gtk_widget_show (GTK_WIDGET (editEditEntryData.memoryBox)); + else + gtk_widget_hide (GTK_WIDGET (editEditEntryData.memoryBox)); + + gtk_widget_show (GTK_WIDGET (editEditEntryData.dialog)); +} + + +void DeletePbEntry (void) +{ + static GtkWidget *dialog = NULL; + GtkWidget *button, *hbox, *label, *pixmap; + + if (dialog == NULL) + { + dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialog), _("Delete entries")); + gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkDeleteEntryDialog), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask); + gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show(pixmap); + + label = gtk_label_new(_("Do you want to delete selected entries?")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10); + gtk_widget_show(label); + } + + gtk_widget_show(GTK_WIDGET (dialog)); +} + + +void NewPbEntry(PhonebookEntry *pbEntry) +{ + if (newEditEntryData.dialog == NULL) + CreateEditDialog (&newEditEntryData, _("New entry"), OkNewEntryDialog); + + newEditEntryData.pbEntry = pbEntry; + newEditEntryData.newGroup = 5; + editNumbersData.pbEntry = pbEntry; + + gtk_entry_set_text (GTK_ENTRY (newEditEntryData.name), ""); + + if (phoneMonitor.supported & PM_EXTPBK) + gtk_label_set_text (GTK_LABEL (newEditEntryData.number), ""); + else + gtk_entry_set_text (GTK_ENTRY (newEditEntryData.number), ""); + + if (pbEntry->entry.MemoryType == GMT_ME) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypePhone), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (newEditEntryData.memoryTypeSIM), TRUE); + + gtk_option_menu_set_history( GTK_OPTION_MENU (newEditEntryData.group), + pbEntry->entry.Group); + + if (phoneMonitor.supported & PM_CALLERGROUP) + { + gtk_widget_show (newEditEntryData.group); + gtk_widget_show (newEditEntryData.groupLabel); + } + else + { + gtk_widget_hide (newEditEntryData.group); + gtk_widget_hide (newEditEntryData.groupLabel); + } + + if (memoryStatus.MaxME > 0) + gtk_widget_show (GTK_WIDGET (newEditEntryData.memoryBox)); + else + gtk_widget_hide (GTK_WIDGET (newEditEntryData.memoryBox)); + + gtk_widget_show(GTK_WIDGET (newEditEntryData.dialog)); +} + + +void DuplicatePbEntry (PhonebookEntry *pbEntry) +{ + if (duplicateEditEntryData.dialog == NULL) + CreateEditDialog (&duplicateEditEntryData, _("Duplicate entry"), OkNewEntryDialog); + + duplicateEditEntryData.pbEntry = pbEntry; + duplicateEditEntryData.newGroup = pbEntry->entry.Group; + editNumbersData.pbEntry = pbEntry; + + gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.name), pbEntry->entry.Name); + + if (phoneMonitor.supported & PM_EXTPBK) + gtk_label_set_text (GTK_LABEL (duplicateEditEntryData.number), pbEntry->entry.Number); + else + gtk_entry_set_text (GTK_ENTRY (duplicateEditEntryData.number), pbEntry->entry.Number); + + if (pbEntry->entry.MemoryType == GMT_ME) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypePhone), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (duplicateEditEntryData.memoryTypeSIM), TRUE); + + gtk_option_menu_set_history( GTK_OPTION_MENU (duplicateEditEntryData.group), + pbEntry->entry.Group); + + if (phoneMonitor.supported & PM_CALLERGROUP) + { + gtk_widget_show (duplicateEditEntryData.group); + gtk_widget_show (duplicateEditEntryData.groupLabel); + } + else + { + gtk_widget_hide (duplicateEditEntryData.group); + gtk_widget_hide (duplicateEditEntryData.groupLabel); + } + + if (memoryStatus.MaxME > 0) + gtk_widget_show (GTK_WIDGET (duplicateEditEntryData.memoryBox)); + else + gtk_widget_hide (GTK_WIDGET (duplicateEditEntryData.memoryBox)); + + gtk_widget_show(GTK_WIDGET (duplicateEditEntryData.dialog)); +} + + +static void EditEntry (void) +{ + if (contactsMemoryInitialized) + { + if (GTK_CLIST (clist)->selection == NULL) + return; + + EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), + GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data)), + GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data)); + } +} + + +static void DuplicateEntry (void) +{ + PhonebookEntry *new, *old; + + if (contactsMemoryInitialized) + { + if (GTK_CLIST (clist)->selection == NULL) + return; + + old = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist), GPOINTER_TO_INT(GTK_CLIST (clist)->selection->data)); + + if ( old->entry.MemoryType == GMT_ME) + { + if ((new = FindFreeEntry (GMT_ME)) == NULL) + if ((new = FindFreeEntry (GMT_SM)) == NULL) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory.")); + gtk_widget_show (errorDialog.dialog); + return; + } + } + else + { + if ((new = FindFreeEntry(GMT_SM)) == NULL) + if ((new = FindFreeEntry(GMT_ME)) == NULL) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory.")); + gtk_widget_show (errorDialog.dialog); + return; + } + } + + new->entry = old->entry; + + DuplicatePbEntry (new); + } +} + + +static void NewEntry (void) +{ + PhonebookEntry *entry; + + if (contactsMemoryInitialized) + { + if ((entry = FindFreeEntry (GMT_SM)) != NULL) + NewPbEntry(entry); + else if ((entry = FindFreeEntry (GMT_ME)) != NULL) + NewPbEntry(entry); + else + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't find free memory.")); + gtk_widget_show (errorDialog.dialog); + } + } +} + + +static inline void ClickEntry (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + gpointer data ) +{ + if(event && event->type == GDK_2BUTTON_PRESS) + EditPbEntry((PhonebookEntry *) gtk_clist_get_row_data(GTK_CLIST (clist), row), + row); +} + + +static inline void DeleteEntry (void) +{ + if (contactsMemoryInitialized) + { + if (GTK_CLIST (clist)->selection == NULL) + return; + + DeletePbEntry (); + } +} + + +static void ChMemType (void) +{ + static GtkWidget *dialog = NULL; + GtkWidget *button, *hbox, *label; + + if (contactsMemoryInitialized) + { + if (GTK_CLIST (clist)->selection == NULL) + return; + + if (dialog == NULL) + { + dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialog), _("Changing memory type")); + gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Continue")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkChangeEntryDialog), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("If you change from phone memory to SIM memory\nsome entries may be truncated.")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10); + gtk_widget_show (label); + } + + gtk_widget_show (dialog); + } +} + + +static void FindFirstEntry (void) +{ + static FindEntryData findEntryData = { NULL }; + GtkWidget *button, *label, *hbox; + + if (contactsMemoryInitialized) + { + if (findEntryData.dialog == NULL) + { + findEntryData.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (findEntryData.dialog), _("Find")); + gtk_window_set_modal (GTK_WINDOW (findEntryData.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (findEntryData.dialog), 10); + gtk_signal_connect (GTK_OBJECT (findEntryData.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Find")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkFindEntryDialog), (gpointer) &findEntryData); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (findEntryData.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelEditDialog), (gpointer) &findEntryData); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox); + gtk_widget_show (hbox); + + label = gtk_label_new (_("Pattern:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + findEntryData.pattern = gtk_entry_new_with_max_length (max_phonebook_name_length); + + gtk_box_pack_end (GTK_BOX (hbox), findEntryData.pattern, FALSE, FALSE, 2); + gtk_widget_show (findEntryData.pattern); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (findEntryData.dialog)->vbox), hbox); + gtk_widget_show (hbox); + + findEntryData.nameB = gtk_radio_button_new_with_label (NULL, _("Name")); + gtk_box_pack_start (GTK_BOX (hbox), findEntryData.nameB, TRUE, FALSE, 2); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (findEntryData.nameB), TRUE); + gtk_widget_show (findEntryData.nameB); + + findEntryData.numberB = gtk_radio_button_new_with_label ( + gtk_radio_button_group (GTK_RADIO_BUTTON (findEntryData.nameB)), _("Number")); + gtk_box_pack_start (GTK_BOX(hbox), findEntryData.numberB, TRUE, FALSE, 2); + gtk_widget_show (findEntryData.numberB); + } + + gtk_widget_show (findEntryData.dialog); + } +} + + +static inline void SelectAll (void) +{ + gtk_clist_select_all (GTK_CLIST (clist)); +} + + +static inline void OkDialVoiceDialog (GtkWidget *w, gpointer data) +{ + PhoneEvent *e; + gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (((DialVoiceDialog *) data)->entry))); + + if (strlen (buf) > 0) + { + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_DialVoice; + e->data = buf; + GUI_InsertEvent (e); + } + else + g_free (buf); + + gtk_widget_hide (((DialVoiceDialog *) data)->dialog); +} + + +static void DialVoice (void) +{ + static DialVoiceDialog dialVoiceDialog = {NULL, NULL}; + GtkWidget *button, *label; + PhonebookEntry *pbEntry; + + if (dialVoiceDialog.dialog == NULL) + { + dialVoiceDialog.dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialVoiceDialog.dialog), _("Dial voice")); + gtk_window_set_modal(GTK_WINDOW (dialVoiceDialog.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialVoiceDialog.dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialVoiceDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkDialVoiceDialog), (gpointer) &dialVoiceDialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialVoiceDialog.dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), 5); + + label = gtk_label_new (_("Number:")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), label, FALSE, FALSE, 5); + gtk_widget_show (label); + + dialVoiceDialog.entry = gtk_entry_new_with_max_length (GSM_MAX_PHONEBOOK_NUMBER_LENGTH); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialVoiceDialog.dialog)->vbox), dialVoiceDialog.entry, FALSE, FALSE, 5); + gtk_widget_show (dialVoiceDialog.entry); + } + + if (GTK_CLIST (clist)->selection != NULL) + { + pbEntry = (PhonebookEntry *) gtk_clist_get_row_data (GTK_CLIST (clist), + GPOINTER_TO_INT (GTK_CLIST (clist)->selection->data)); + + gtk_entry_set_text (GTK_ENTRY (dialVoiceDialog.entry), pbEntry->entry.Number); + } + + gtk_widget_show (dialVoiceDialog.dialog); +} + + +static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) +{ + static gchar phoneText[] = "B"; + static gchar simText[] = "A"; + char *text1 = NULL; + char *text2 = NULL; + gint ret; + + GtkCListRow *row1 = (GtkCListRow *) ptr1; + GtkCListRow *row2 = (GtkCListRow *) ptr2; + + switch (row1->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text; + break; + default: + break; + } + switch (row2->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text; + break; + default: + break; + } + + if (clist->sort_column == 2) + { + if (((PhonebookEntry *) row1->data)->entry.MemoryType == GMT_ME) + text1 = phoneText; + else + text1 = simText; + if (((PhonebookEntry *) row2->data)->entry.MemoryType == GMT_ME) + text2 = phoneText; + else + text2 = simText; + } + + if (!text2) + return (text1 != NULL); + + if (!text1) + return -1; + + if ((ret = g_strcasecmp (text1, text2)) == 0) + { + if (((PhonebookEntry *) row1->data)->entry.MemoryType < ((PhonebookEntry *) row2->data)->entry.MemoryType) + ret = -1; + else if (((PhonebookEntry *) row1->data)->entry.MemoryType > ((PhonebookEntry *) row2->data)->entry.MemoryType) + ret = 1; + } + + return ret; +} + + +static void CreateProgressDialog (gint maxME, gint maxSM) +{ + GtkWidget *vbox, *label; + GtkAdjustment *adj; + + progressDialog.dialog = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_window_position (GTK_WINDOW (progressDialog.dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal (GTK_WINDOW (progressDialog.dialog), TRUE); + gtk_signal_connect (GTK_OBJECT (progressDialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (ProgressDialogDeleteEvent), NULL); + + vbox = gtk_vbox_new (FALSE, 10); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); + gtk_container_add (GTK_CONTAINER (progressDialog.dialog), vbox); + + gtk_widget_show (vbox); + + label = gtk_label_new (_("Phone memory...")); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxME, 0, 0, 0); + progressDialog.pbarME = gtk_progress_bar_new_with_adjustment (adj); + + gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarME, FALSE, FALSE, 0); + gtk_widget_show (progressDialog.pbarME); + + label = gtk_label_new (_("SIM memory...")); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + + gtk_widget_show (label); + + adj = (GtkAdjustment *) gtk_adjustment_new (0, 1, maxSM, 0, 0, 0); + progressDialog.pbarSM = gtk_progress_bar_new_with_adjustment (adj); + + gtk_box_pack_start (GTK_BOX (vbox), progressDialog.pbarSM, FALSE, FALSE, 0); + gtk_widget_show (progressDialog.pbarSM); +} + + +static void SaveContacts (void) +{ + register gint i; + PhonebookEntry *pbEntry; + PhoneEvent *e; + D_MemoryLocation *ml; + + if (progressDialog.dialog == NULL) + { + CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM); + } + + if (contactsMemoryInitialized && progressDialog.dialog) + { + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0); + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0); + gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Saving entries")); + gtk_widget_show_now (progressDialog.dialog); + + /* Save Phone memory */ + for(i = 0; i < memoryStatus.MaxME; i++) + { + pbEntry = g_ptr_array_index(contactsMemory, i); +#ifdef XDEBUG + g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name, + pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group, + (int) pbEntry->status); +#endif + if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted) + { + if (pbEntry->status == E_Deleted) + { + pbEntry->entry.Name[0] = '\0'; + pbEntry->entry.Number[0] = '\0'; + pbEntry->entry.Group = 5; + } + + pbEntry->entry.Location = i + 1; + ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation)); + ml->entry = &(pbEntry->entry); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_WriteMemoryLocation; + e->data = ml; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ml->status != GE_NONE) + { + g_print (_("%s: line: %d:Can't write ME memory entry number %d! Error: %d\n"), + __FILE__, __LINE__, i + 1, ml->status); + } + g_free (ml); + } + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), i + 1); + GUI_Refresh (); + } + + /* Save SIM memory */ + for (i = memoryStatus.MaxME; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + +#ifdef XDEBUG + g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name, + pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group, + (int) pbEntry->status); +#endif + + if (pbEntry->status == E_Changed || pbEntry->status == E_Deleted) + { + if (pbEntry->status == E_Deleted) + { + pbEntry->entry.Name[0] = '\0'; + pbEntry->entry.Number[0] = '\0'; + pbEntry->entry.Group = 5; + } + + pbEntry->entry.Location = i - memoryStatus.MaxME + 1; + ml = (D_MemoryLocation *) g_malloc (sizeof (D_MemoryLocation)); + ml->entry = &(pbEntry->entry); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_WriteMemoryLocation; + e->data = ml; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ml->status != GE_NONE) + { + g_print(_("%s: line %d:Can't write SM memory entry number %d! Error: %d\n"), + __FILE__, __LINE__, i - memoryStatus.MaxME + 1, ml->status); + } + g_free (ml); + } + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), i - memoryStatus.MaxME + 1); + GUI_Refresh (); + } + + statusInfo.ch_ME = statusInfo.ch_SM = 0; + RefreshStatusInfo (); + gtk_widget_hide (progressDialog.dialog); + } +} + + +static GtkWidget *CreateSaveQuestionDialog (GtkSignalFunc SaveFunc, + GtkSignalFunc DontSaveFunc) +{ + GtkWidget *dialog; + GtkWidget *button, *label, *hbox, *pixmap; + + dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dialog), _("Save changes?")); + gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Save")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (SaveFunc), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Don't save")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (DontSaveFunc), (gpointer) dialog); + gtk_widget_show (button); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start(GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect(GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask); + gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show (pixmap); + + label = gtk_label_new (_("You have made changes in your\ncontacts directory.\n\ +\n\nDo you want save these changes into phone?\n")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2); + gtk_widget_show (label); + + return dialog; +} + + +static void OkExtPbkDialog (GtkWidget *w, gpointer data) { + + ExtPbkDialog *d=(ExtPbkDialog*)data; + GSM_NumberType numtype; + gint i, found=999; + gchar *chars; + + if (w==d->gbutton) numtype=GSM_General; + else if (w==d->mbutton) numtype=GSM_Mobile; + else if (w==d->wbutton) numtype=GSM_Work; + else if (w==d->fbutton) numtype=GSM_Fax; + else if (w==d->hbutton) numtype=GSM_Home; + else numtype=GSM_General; + + /* Search through subentries */ + + for (i=0;ipbEntry->entry.SubEntriesCount;i++) { + if (d->pbEntry->entry.SubEntries[i].EntryType==GSM_Number) + if (d->pbEntry->entry.SubEntries[i].NumberType==numtype) + found=i; + } + + if (found>i) { /* Not found */ + found=d->pbEntry->entry.SubEntriesCount; + d->pbEntry->entry.SubEntriesCount++; + d->pbEntry->entry.SubEntries[found].EntryType=GSM_Number; + d->pbEntry->entry.SubEntries[found].NumberType=numtype; + } + + chars=gtk_editable_get_chars(GTK_EDITABLE(d->entry),0,-1); + strcpy(d->pbEntry->entry.SubEntries[found].data.Number,chars); + g_free(chars); + + /* Update the entry dialog */ + EditPbEntry(d->pbEntry,d->row); + + gtk_widget_hide (d->dialog); +} + + +void ExtPbkChanged (GtkWidget *widget, gpointer data ) +{ + static ExtPbkDialog dialog = {NULL,NULL,0,NULL,NULL,NULL,NULL,NULL}; + GtkWidget *button; + static GtkWidget *label; + gchar *chars; + + + if (dialog.dialog==NULL) { + + dialog.dialog=gtk_dialog_new(); + + gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Which Extended Phonebook Entry?")); + gtk_window_set_modal(GTK_WINDOW (dialog.dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog.dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog.dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + dialog.gbutton = gtk_button_new_with_label (_("General")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), + dialog.gbutton, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (dialog.gbutton), "clicked", + GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog ); + gtk_widget_show (dialog.gbutton); + dialog.mbutton = gtk_button_new_with_label (_("Mobile")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), + dialog.mbutton, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (dialog.mbutton), "clicked", + GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog ); + gtk_widget_show (dialog.mbutton); + dialog.wbutton = gtk_button_new_with_label (_("Work")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), + dialog.wbutton, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (dialog.wbutton), "clicked", + GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog ); + gtk_widget_show (dialog.wbutton); + dialog.fbutton = gtk_button_new_with_label (_("Fax")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), + dialog.fbutton, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (dialog.fbutton), "clicked", + GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog ); + gtk_widget_show (dialog.fbutton); + dialog.hbutton = gtk_button_new_with_label (_("Home")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), + dialog.hbutton, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (dialog.hbutton), "clicked", + GTK_SIGNAL_FUNC (OkExtPbkDialog), (gpointer)&dialog ); + gtk_widget_show (dialog.hbutton); + + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog.dialog); + gtk_widget_show (button); + + label = gtk_label_new(""); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog.dialog)->vbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + } + + chars=gtk_editable_get_chars(GTK_EDITABLE(widget),0,-1); + gtk_label_set_text(GTK_LABEL(label),chars); + g_free(chars); + dialog.pbEntry=((EditEntryData*)data)->pbEntry; + dialog.row=((EditEntryData*)data)->row; + dialog.entry=widget; + gtk_widget_show(dialog.dialog); +} + + + +void GUI_RefreshContacts (void) +{ + PhonebookEntry *pbEntry; + gint row_i = 0; + register gint i; + + if (contactsMemoryInitialized == FALSE) + return; + + gtk_clist_freeze (GTK_CLIST (clist)); + gtk_clist_clear (GTK_CLIST (clist)); + + for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + gchar *row[4]; + + pbEntry = g_ptr_array_index (contactsMemory, i); + if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted) + { + row[0] = pbEntry->entry.Name; + + row[1] = pbEntry->entry.Number; + + if (pbEntry->entry.MemoryType == GMT_ME) + row[2] = "P"; + else + row[2] = "S"; + if (phoneMonitor.supported & PM_CALLERGROUP) + row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group]; + else + row[3] = ""; + gtk_clist_append (GTK_CLIST (clist), row); + if (pbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap (GTK_CLIST (clist), row_i, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); + + gtk_clist_set_row_data (GTK_CLIST (clist), row_i++, (gpointer) pbEntry); + } +#ifdef XDEBUG + g_print ("%d;%s;%s;%d;%d;%d\n", pbEntry->entry.Empty, pbEntry->entry.Name, + pbEntry->entry.Number, (int) pbEntry->entry.MemoryType, pbEntry->entry.Group, + (int) pbEntry->status); +#endif + } + + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); +} + + +static gint InsertPBEntryME (GSM_PhonebookEntry *entry) +{ + PhonebookEntry *pbEntry; + + if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL) + { + g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + g_ptr_array_free (contactsMemory, TRUE); + gtk_widget_hide (progressDialog.dialog); + return (-1); + } + + pbEntry->entry = *entry; + + if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0') + pbEntry->status = E_Empty; + else + pbEntry->status = E_Unchanged; + + g_ptr_array_add (contactsMemory, (gpointer) pbEntry); + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), entry->Location); + GUI_Refresh (); + + return (GE_NONE); +} + + +static gint InsertPBEntrySM (GSM_PhonebookEntry *entry) +{ + PhonebookEntry *pbEntry; + + if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL) + { + g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + g_ptr_array_free (contactsMemory, TRUE); + gtk_widget_hide (progressDialog.dialog); + return (-1); + } + + pbEntry->entry = *entry; + + if (*pbEntry->entry.Name == '\0' && *pbEntry->entry.Number == '\0') + pbEntry->status = E_Empty; + else + { + pbEntry->status = E_Unchanged; + if (fbus3810) + { + memoryStatus.UsedSM++; + memoryStatus.FreeSM--; + } + } + + g_ptr_array_add (contactsMemory, (gpointer) pbEntry); + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), entry->Location); + GUI_Refresh (); + + return (GE_NONE); +} + + +static inline gint ReadFailedPBEntry (gint i) +{ + g_ptr_array_free (contactsMemory, TRUE); + gtk_widget_hide (progressDialog.dialog); + return (0); +} + + +static void ReadContactsMain (void) +{ + PhoneEvent *e; + D_MemoryStatus *ms; + D_MemoryLocationAll *mla; + PhonebookEntry *pbEntry; + register gint i; + + fbus3810 = FALSE; + + if (contactsMemoryInitialized == TRUE) + { + for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + g_free (pbEntry); + } + g_ptr_array_free (contactsMemory, TRUE); + contactsMemory = NULL; + gtk_clist_clear (GTK_CLIST (clist)); + contactsMemoryInitialized = FALSE; + memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = + memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0; + statusInfo.ch_ME = statusInfo.ch_SM = 0; + RefreshStatusInfo (); + } + + ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus)); + ms->memoryStatus.MemoryType = GMT_ME; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryStatus; + e->data = ms; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ms->status != GE_NONE) + /* Phone don't support ME (5110) */ + memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0; + else + { + memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free; + memoryStatus.UsedME = ms->memoryStatus.Used; + memoryStatus.FreeME = ms->memoryStatus.Free; + } + + ms->memoryStatus.MemoryType = GMT_SM; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryStatus; + e->data = ms; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ms->status != GE_NONE) + { + fbus3810 = TRUE; /* I try to recognize memoryStatus.UsedSM while reading */ + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\ +Setting max SIM entries to 100!\n")); + memoryStatus.MaxSM = memoryStatus.FreeSM = 100; + memoryStatus.UsedSM = 0; + gtk_widget_show (errorDialog.dialog); + } + else + { + memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free; + memoryStatus.UsedSM = ms->memoryStatus.Used; + memoryStatus.FreeSM = ms->memoryStatus.Free; + } + g_free (ms); + + statusInfo.ch_ME = statusInfo.ch_SM = 0; + + RefreshStatusInfo (); + + if (progressDialog.dialog == NULL) + { + CreateProgressDialog (memoryStatus.MaxME, memoryStatus.MaxSM); + } + + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarME), 0); + gtk_progress_set_value (GTK_PROGRESS (progressDialog.pbarSM), 0); + gtk_window_set_title (GTK_WINDOW (progressDialog.dialog), _("Getting entries")); + gtk_widget_show_now (progressDialog.dialog); + + contactsMemory = g_ptr_array_new (); + + mla = (D_MemoryLocationAll *) g_malloc (sizeof (D_MemoryLocationAll)); + if (memoryStatus.MaxME > 0) + { + mla->min = 1; + mla->max = memoryStatus.MaxME; + mla->type = GMT_ME; + mla->InsertEntry = InsertPBEntryME; + mla->ReadFailed = ReadFailedPBEntry; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryLocationAll; + e->data = mla; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (mla->status != GE_NONE) + { + g_free (mla); + gtk_widget_hide (progressDialog.dialog); + return; + } + } + + mla->min = 1; + mla->max = memoryStatus.MaxSM; + mla->type = GMT_SM; + mla->InsertEntry = InsertPBEntrySM; + mla->ReadFailed = ReadFailedPBEntry; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryLocationAll; + e->data = mla; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (mla->status != GE_NONE) + { + g_free (mla); + gtk_widget_hide (progressDialog.dialog); + return; + } + + g_free (mla); + + gtk_widget_hide (progressDialog.dialog); + + contactsMemoryInitialized = TRUE; + statusInfo.ch_ME = statusInfo.ch_SM = 0; + GUIEventSend (GUI_EVENT_CONTACTS_CHANGED); + GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED); +} + + +static void ReadSaveCallback (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + SaveContacts (); + ReadContactsMain (); +} + + +static void ReadDontSaveCallback (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + ReadContactsMain (); +} + + +static void ReadSaveContacts (void) +{ + static GtkWidget *dialog = NULL; + + if (dialog == NULL) + dialog = CreateSaveQuestionDialog (ReadSaveCallback, ReadDontSaveCallback); + + gtk_widget_show (dialog); +} + + +static void ReadContacts (void) +{ + if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM)) + ReadSaveContacts (); + else + ReadContactsMain (); +} + + +inline void GUI_ReadContacts (void) +{ + ReadContacts (); +} + + +inline void GUI_SaveContacts (void) +{ + SaveContacts (); +} + + +inline void GUI_ShowContacts (void) +{ + if (xgnokiiConfig.callerGroups[0] == NULL) + { + GUI_Refresh (); + GUI_InitCallerGroupsInf (); + } + gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, phoneMonitor.supported & PM_CALLERGROUP); + GUI_RefreshContacts (); + gtk_widget_show (GUI_ContactsWindow); +// if (!contactsMemoryInitialized) +// ReadContacts (); +} + +static void ExportVCARD (FILE *f) +{ + gchar buf2[10]; + register gint i,j; + PhonebookEntry *pbEntry; + + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status == E_Deleted || pbEntry->status == E_Empty) + continue; + + fprintf (f, "BEGIN:VCARD\n"); + fprintf (f, "VERSION:3.0\n"); + fprintf (f, "FN:%s\n", pbEntry->entry.Name); + fprintf (f, "TEL;PREF:%s\n", pbEntry->entry.Number); + + if (pbEntry->entry.MemoryType == GMT_ME) + sprintf (buf2, "ME%d", i + 1); + else + sprintf (buf2, "SM%d", i - memoryStatus.MaxME + 1); + + fprintf (f, "X_GSM_STORE_AT:%s\n", buf2); + fprintf (f, "X_GSM_CALLERGROUP:%d\n", pbEntry->entry.Group); + + /* Add ext. pbk info if required */ + if (phoneMonitor.supported & PM_EXTPBK) + for (j = 0; j < pbEntry->entry.SubEntriesCount; j++) + { + if (pbEntry->entry.SubEntries[j].EntryType == GSM_Number) + fprintf (f, "TEL;UNKNOWN_%d:%s\n", pbEntry->entry.SubEntries[j].NumberType, + pbEntry->entry.SubEntries[j].data.Number); + } + + fprintf (f, "END:VCARD\n\n"); + } + + fclose (f); +} + + +static void ExportNative (FILE *f) +{ + gchar buf[IO_BUF_LEN], buf2[10]; + register gint i,j; + PhonebookEntry *pbEntry; + + + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status != E_Deleted && pbEntry->status != E_Empty) + { + if (index (pbEntry->entry.Name, ';') != NULL) + { + strcpy (buf, "\""); + strcat (buf, pbEntry->entry.Name); + strcat (buf, "\";"); + } + else + { + strcpy (buf, pbEntry->entry.Name); + strcat (buf, ";"); + } + + if (index (pbEntry->entry.Number, ';') != NULL) + { + strcat (buf, "\""); + strcat (buf, pbEntry->entry.Number); + strcat (buf, "\";"); + } + else + { + strcat (buf, pbEntry->entry.Number); + strcat (buf, ";"); + } + + if (pbEntry->entry.MemoryType == GMT_ME) + sprintf (buf2, "B;%d;%d;", i + 1, pbEntry->entry.Group); + else + sprintf (buf2, "A;%d;%d;", i - memoryStatus.MaxME + 1, pbEntry->entry.Group); + strcat (buf, buf2); + + /* Add ext. pbk info if required */ + if (phoneMonitor.supported & PM_EXTPBK) + { + for (j = 0; j < pbEntry->entry.SubEntriesCount; j++) + if (pbEntry->entry.SubEntries[j].EntryType==GSM_Number) + { + sprintf(buf2,"%d;",pbEntry->entry.SubEntries[j].NumberType); + strcat(buf,buf2); + + if (index (pbEntry->entry.SubEntries[j].data.Number, ';') != NULL) + { + strcat (buf, "\""); + strcat (buf, pbEntry->entry.SubEntries[j].data.Number); + strcat (buf, "\";"); + } + else + { + strcat (buf, pbEntry->entry.SubEntries[j].data.Number); + strcat (buf, ";"); + } + } + } + fprintf (f, "%s\n", buf); + } + } + + fclose(f); +} + + +static void ExportContactsMain (gchar *name) +{ + FILE *f; + gchar buf[IO_BUF_LEN]; + + if ((f = fopen (name, "w")) == NULL) + { + g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + if (strstr (name, ".vcard") || strstr (name, ".gcrd")) + ExportVCARD (f); + else + ExportNative (f); +} + + +static void YesExportDialog (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + ExportContactsMain (exportDialogData.fileName); +} + + +static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs) +{ + static YesNoDialog dialog = { NULL, NULL}; + FILE *f; + gchar err[80]; + + exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (exportDialogData.fileName, "r")) != NULL) + { + fclose (f); + if (dialog.dialog == NULL) + { + CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_ContactsWindow); + gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?")); + g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); + gtk_label_set_text (GTK_LABEL(dialog.text), err); + } + gtk_widget_show (dialog.dialog); + } + else + ExportContactsMain (exportDialogData.fileName); +} + + +static void ExportContacts (void) +{ + static GtkWidget *fileDialog = NULL; + + if (contactsMemoryInitialized) + { + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Export")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); + } +} + + +static bool ParseLine (GSM_PhonebookEntry *entry, gint *num, gchar *buf) +{ + register gint i = 0; + size_t len; + gchar s_num[5]; + gchar *endptr; + + entry->Empty = FALSE; + entry->SubEntriesCount=0; + + len = strlen (buf); + if (buf[i] == '"') + { + i++; + while (i < len && i <= GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != '"') + { + entry->Name[i - 1] = buf[i]; + i++; + } + entry->Name[i - 1] = '\0'; + if (i >= len) + return FALSE; + if (buf[++i] != ';') + return FALSE; + } + else + { + while (i < len && i < GSM_MAX_PHONEBOOK_NAME_LENGTH && buf[i] != ';') + { + entry->Name[i] = buf[i]; + i++; + } + entry->Name[i] = '\0'; + if (buf[i] != ';') + return FALSE; + if (i >= len) + return FALSE; + } + buf += (i + 1); + i = 0; + + len = strlen (buf); + if (buf[i] == '"') + { + i++; + while (i < len && i <= GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != '"') + { + entry->Number[i - 1] = buf[i]; + i++; + } + entry->Number[i - 1] = '\0'; + if (i >= len) + return FALSE; + if (buf[++i] != ';') + return FALSE; + } + else + { + while (i < len && i < GSM_MAX_PHONEBOOK_NUMBER_LENGTH && buf[i] != ';') + { + entry->Number[i] = buf[i]; + i++; + } + entry->Number[i] = '\0'; + if (buf[i] != ';') + return FALSE; + if (i >= len) + return FALSE; + } + buf += (i + 1); + i = 0; + + if (!strncmp(buf, "B;", 2)) + { + entry->MemoryType = GMT_ME; + buf += 2; + } + else + if (!strncmp(buf, "A;", 2)) + { + entry->MemoryType = GMT_SM; + buf += 2; + } + else + if (!strncmp(buf, "ME;", 3)) + { + entry->MemoryType = GMT_ME; + buf += 3; + } + else + if (!strncmp(buf, "SM;", 3)) + { + entry->MemoryType = GMT_SM; + buf += 3; + } + else + return FALSE; + + len = strlen (buf); + while (i < len && i < 4 && buf[i] != ';') + { + s_num[i] = buf[i]; + i++; + } + s_num[i] = '\0'; + if (buf[i] != ';') + return FALSE; + if (i >= len) + return FALSE; + buf += (i + 1); + i = 0; + + *num = strtol (s_num, &endptr, 10); + if (s_num == endptr) + return FALSE; + if (*num == LONG_MIN || *num == LONG_MAX) + return FALSE; + + + if ( *buf == '\n' || *buf == '\r') /* for compatibility with NCDS */ + entry->Group = 5; + else + { + len = strlen (buf); + while (i < len && i < 4 && buf[i] != ';') + { + s_num[i] = buf[i]; + i++; + } + s_num[i] = '\0'; + if (buf[i] != ';') + return FALSE; + if (i >= len) + return FALSE; + + entry->Group = strtol (s_num, &endptr, 10); + if (s_num == endptr) + return FALSE; + if (entry->Group == LONG_MIN || entry->Group == LONG_MAX) + return FALSE; + if (entry->Group < 0 || entry->Group > 5) + return FALSE; + + buf += (i + 1); + i = 0; + + /* Ext Pbk Support */ + + while (*buf!='\n') + { + entry->SubEntries[entry->SubEntriesCount].EntryType=GSM_Number; + len = strlen (buf); + while (i < len && i < 4 && buf[i] != ';') + { + s_num[i] = buf[i]; + i++; + } + s_num[i] = '\0'; + if (buf[i] != ';') + return FALSE; + if (i >= len) + return FALSE; + entry->SubEntries[entry->SubEntriesCount].NumberType=(GSM_NumberType)strtol (s_num, &endptr, 10); + if (s_num == endptr) + return FALSE; + buf += (i + 1); + i = 0; + len = strlen (buf); + while (i < len && i < GSM_MAX_PHONEBOOK_TEXT_LENGTH && buf[i] != ';') + { + entry->SubEntries[entry->SubEntriesCount].data.Number[i] = buf[i]; + i++; + } + entry->SubEntries[entry->SubEntriesCount].data.Number[i] = '\0'; + buf += (i + 1); + i = 0; + if (i >= len) + return FALSE; + entry->SubEntriesCount++; + } + } + + return TRUE; +} + + +static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs) +{ + FILE *f; + PhoneEvent *e; + D_MemoryStatus *ms; + PhonebookEntry *pbEntry; + GSM_PhonebookEntry gsmEntry; + gchar buf[IO_BUF_LEN]; + gchar *fileName; + gint i; + + fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (fileName, "r")) == NULL) + { + g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + if (contactsMemoryInitialized == TRUE) + { + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index(contactsMemory, i); + g_free(pbEntry); + } + g_ptr_array_free (contactsMemory, TRUE); + contactsMemory = NULL; + gtk_clist_clear (GTK_CLIST (clist)); + contactsMemoryInitialized = FALSE; + memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = + memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0; + statusInfo.ch_ME = statusInfo.ch_SM = 0; + RefreshStatusInfo (); + } + + ms = (D_MemoryStatus *) g_malloc (sizeof (D_MemoryStatus)); + ms->memoryStatus.MemoryType = GMT_ME; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryStatus; + e->data = ms; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ms->status != GE_NONE) + /* Phone don't support ME (5110) */ + memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = 0; + else + { + memoryStatus.MaxME = ms->memoryStatus.Used + ms->memoryStatus.Free; + memoryStatus.UsedME = 0; + memoryStatus.FreeME = memoryStatus.MaxME; + } + + ms->memoryStatus.MemoryType = GMT_SM; + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_GetMemoryStatus; + e->data = ms; + GUI_InsertEvent (e); + pthread_mutex_lock (&memoryMutex); + pthread_cond_wait (&memoryCond, &memoryMutex); + pthread_mutex_unlock (&memoryMutex); + + if (ms->status != GE_NONE) + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Can't get SM memory status!\n\n\ +Setting max SIM entries set to 100!\n")); + memoryStatus.MaxSM = memoryStatus.FreeSM = 100; + memoryStatus.UsedSM = 0; + gtk_widget_show (errorDialog.dialog); + } + else + { + memoryStatus.MaxSM = ms->memoryStatus.Used + ms->memoryStatus.Free; + memoryStatus.UsedSM = 0; + memoryStatus.FreeSM = memoryStatus.MaxSM; + } + g_free (ms); + + statusInfo.ch_ME = statusInfo.ch_SM = 0; + + RefreshStatusInfo (); + + contactsMemory = g_ptr_array_new (); + + for (i = 1; i <= memoryStatus.MaxME; i++) + { + if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL) + { + fclose (f); + g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + g_ptr_array_free (contactsMemory, TRUE); + return; + } + + pbEntry->entry.Empty = FALSE; + pbEntry->entry.Name[0] = '\0'; + pbEntry->entry.Number[0] = '\0'; + pbEntry->entry.MemoryType = GMT_ME; + pbEntry->entry.Group = 5; + pbEntry->status = E_Deleted; /* I must set status to E_Deleted, since I */ + /* I want clear empty entries when saving to */ + /* to phone */ + pbEntry->entry.SubEntriesCount=0; + + g_ptr_array_add (contactsMemory, (gpointer) pbEntry); + pbEntry = NULL; + } + + for (i = 1; i <= memoryStatus.MaxSM; i++) + { + if ((pbEntry = (PhonebookEntry *) g_malloc (sizeof (PhonebookEntry))) == NULL) + { + fclose (f); + g_print (_("%s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + g_ptr_array_free (contactsMemory, TRUE); + return; + } + + pbEntry->entry.Empty = FALSE; + pbEntry->entry.Name[0] = '\0'; + pbEntry->entry.Number[0] = '\0'; + pbEntry->entry.MemoryType = GMT_SM; + pbEntry->entry.Group = 5; + pbEntry->status = E_Deleted; + pbEntry->entry.SubEntriesCount=0; + + g_ptr_array_add (contactsMemory, (gpointer) pbEntry); + pbEntry = NULL; + } + + + while (fgets (buf, IO_BUF_LEN, f)) + { + if (ParseLine (&gsmEntry, &i, buf)) + { + if (gsmEntry.MemoryType == GMT_ME && memoryStatus.FreeME > 0 + && i > 0 && i <= memoryStatus.MaxME) + { + pbEntry = g_ptr_array_index (contactsMemory, i - 1); + + if (pbEntry->status == E_Deleted) + { + pbEntry->entry = gsmEntry; + pbEntry->status = E_Changed; + memoryStatus.UsedME++; + memoryStatus.FreeME--; + statusInfo.ch_ME = 1; + } + } + else if (gsmEntry.MemoryType == GMT_SM && memoryStatus.FreeSM > 0 + && i > 0 && i <= memoryStatus.MaxSM) + { + pbEntry = g_ptr_array_index (contactsMemory, memoryStatus.MaxME + i - 1); + + if (pbEntry->status == E_Deleted) + { + pbEntry->entry = gsmEntry; + pbEntry->status = E_Changed; + memoryStatus.UsedSM++; + memoryStatus.FreeSM--; + statusInfo.ch_SM = 1; + } + } + } + } + + contactsMemoryInitialized = TRUE; + RefreshStatusInfo (); + GUIEventSend (GUI_EVENT_CONTACTS_CHANGED); + GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED); +} + + +static void ImportContactsFileDialog () +{ + static GtkWidget *fileDialog = NULL; + + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Import")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); +} + + +static void ImportSaveCallback (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + SaveContacts (); + ImportContactsFileDialog (); +} + + +static void ImportDontSaveCallback (GtkWidget *widget, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + ImportContactsFileDialog (); +} + + +void static ImportSaveContacts (void) +{ + static GtkWidget *dialog = NULL; + + if (dialog == NULL) + dialog = CreateSaveQuestionDialog (ImportSaveCallback, ImportDontSaveCallback); + + gtk_widget_show (dialog); +} + + +static void ImportContacts (void) +{ + if (contactsMemoryInitialized == TRUE && (statusInfo.ch_ME || statusInfo.ch_SM)) + ImportSaveContacts (); + else + ImportContactsFileDialog (); +} + + +static void QuitSaveCallback (GtkWidget *widget, gpointer data) +{ + PhoneEvent *e; + + gtk_widget_hide (GTK_WIDGET (data)); + SaveContacts (); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_Exit; + e->data = NULL; + GUI_InsertEvent (e); + pthread_join (monitor_th, NULL); + gtk_main_quit (); +} + + +static void QuitDontSaveCallback (GtkWidget *widget, gpointer data) +{ + PhoneEvent *e; + + gtk_widget_hide (GTK_WIDGET (data)); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_Exit; + e->data = NULL; + GUI_InsertEvent (e); + pthread_join (monitor_th, NULL); + gtk_main_quit (); +} + + +void GUI_QuitSaveContacts (void) +{ + static GtkWidget *dialog = NULL; + + if (dialog == NULL) + dialog = CreateSaveQuestionDialog (QuitSaveCallback, QuitDontSaveCallback); + + gtk_widget_show (dialog); +} + + +/* Function take number and return name belonged to number. + If no name is found, return NULL; + Do not modify returned name! +*/ +gchar *GUI_GetName (gchar *number) +{ + PhonebookEntry *pbEntry; + register gint i; + + if (contactsMemoryInitialized == FALSE || number == NULL) + return (gchar *)NULL; + + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted) + continue; + + if (strcmp (pbEntry->entry.Number, number) == 0) + return pbEntry->entry.Name; + } + + for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted) + continue; + + if (strrncmp (pbEntry->entry.Number, number, 9) == 0) + return pbEntry->entry.Name; + } + + return NULL; +} + + +gchar *GUI_GetNameExact (gchar *number) +{ + PhonebookEntry *pbEntry; + register gint i; + + if (contactsMemoryInitialized == FALSE || number == NULL) + return (gchar *)NULL; + + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted) + continue; + + if (strcmp (pbEntry->entry.Number, number) == 0) + return pbEntry->entry.Name; + } + + return NULL; +} + + +gchar *GUI_GetNumber (gchar *name) +{ + PhonebookEntry *pbEntry; + register gint i; + + if (contactsMemoryInitialized == FALSE || name == NULL || *name == '\0') + return (gchar *)NULL; + + for(i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + pbEntry = g_ptr_array_index (contactsMemory, i); + + if (pbEntry->status == E_Empty || pbEntry->status == E_Deleted) + continue; + + if (strcmp (pbEntry->entry.Name, name) == 0) + return pbEntry->entry.Number; + } + + return NULL; +} + + +static void SelectDialogClickEntry (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + SelectContactData *data ) +{ + if(event && event->type == GDK_2BUTTON_PRESS) + gtk_signal_emit_by_name(GTK_OBJECT (data->okButton), "clicked"); +} + + +SelectContactData *GUI_SelectContactDialog (void) +{ + PhonebookEntry *pbEntry; + static SelectContactData selectContactData; + SortColumn *sColumn; + gchar *titles[4] = { "Name", "Number", "Memory", "Group"}; + gint row_i = 0; + register gint i; + gchar string[100]; + + if (contactsMemoryInitialized == FALSE) + return NULL; + + selectContactData.dialog = gtk_dialog_new (); + gtk_widget_set_usize (GTK_WIDGET (selectContactData.dialog), 436, 200); + gtk_window_set_title (GTK_WINDOW (selectContactData.dialog), _("Select contacts")); + gtk_window_set_modal (GTK_WINDOW (selectContactData.dialog), TRUE); + + selectContactData.okButton = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area), + selectContactData.okButton, TRUE, TRUE, 10); + GTK_WIDGET_SET_FLAGS (selectContactData.okButton, GTK_CAN_DEFAULT); + gtk_widget_grab_default (selectContactData.okButton); + gtk_widget_show (selectContactData.okButton); + + selectContactData.cancelButton = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->action_area), + selectContactData.cancelButton, TRUE, TRUE, 10); + gtk_widget_show (selectContactData.cancelButton); + + selectContactData.clist = gtk_clist_new_with_titles (4, titles); + gtk_clist_set_shadow_type (GTK_CLIST (selectContactData.clist), GTK_SHADOW_OUT); + gtk_clist_set_compare_func (GTK_CLIST (selectContactData.clist), CListCompareFunc); + gtk_clist_set_sort_column (GTK_CLIST (selectContactData.clist), 0); + gtk_clist_set_sort_type (GTK_CLIST (selectContactData.clist), GTK_SORT_ASCENDING); + gtk_clist_set_auto_sort (GTK_CLIST (selectContactData.clist), FALSE); + gtk_clist_set_selection_mode (GTK_CLIST (selectContactData.clist), GTK_SELECTION_EXTENDED); + + gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 0, 150); + gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 1, 115); + gtk_clist_set_column_width (GTK_CLIST(selectContactData.clist), 3, 70); + gtk_clist_set_column_justification (GTK_CLIST(selectContactData.clist), 2, GTK_JUSTIFY_CENTER); + gtk_clist_set_column_visibility (GTK_CLIST(selectContactData.clist), 3, phoneMonitor.supported & PM_CALLERGROUP); + + for (i = 0; i < 4; i++) + { + if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL) + { + g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + return NULL; + } + sColumn->clist = selectContactData.clist; + sColumn->column = i; + gtk_signal_connect (GTK_OBJECT (GTK_CLIST (selectContactData.clist)->column[i].button), "clicked", + GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn); + } + + gtk_signal_connect (GTK_OBJECT (selectContactData.clist), "select_row", + GTK_SIGNAL_FUNC (SelectDialogClickEntry), + (gpointer) &selectContactData); + + selectContactData.clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (selectContactData.clistScrolledWindow), + selectContactData.clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (selectContactData.clistScrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (selectContactData.dialog)->vbox), + selectContactData.clistScrolledWindow, + TRUE, TRUE, 0); + + gtk_widget_show (selectContactData.clist); + gtk_widget_show (selectContactData.clistScrolledWindow); + + if (xgnokiiConfig.callerGroups[0] == NULL) + GUI_InitCallerGroupsInf (); + + gtk_clist_freeze (GTK_CLIST (selectContactData.clist)); + for (i = 0; i < memoryStatus.MaxME + memoryStatus.MaxSM; i++) + { + gchar *row[4]; + + pbEntry = g_ptr_array_index (contactsMemory, i); + if (pbEntry->status != E_Empty && pbEntry->status != E_Deleted) + { + row[0] = pbEntry->entry.Name; + + if (pbEntry->entry.SubEntriesCount>0) { + snprintf(string,100,"%s *",pbEntry->entry.Number); + row[1]=string; + } else row[1] = pbEntry->entry.Number; + + + if (pbEntry->entry.MemoryType == GMT_ME) + row[2] = "P"; + else + row[2] = "S"; + if (phoneMonitor.supported & PM_CALLERGROUP) + row[3] = xgnokiiConfig.callerGroups[pbEntry->entry.Group]; + else + row[3] = ""; + gtk_clist_append (GTK_CLIST (selectContactData.clist), row); + if (pbEntry->entry.MemoryType == GMT_ME) + gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2, + memoryPixmaps.phoneMemPix, memoryPixmaps.mask); + else + gtk_clist_set_pixmap (GTK_CLIST (selectContactData.clist), row_i, 2, + memoryPixmaps.simMemPix, memoryPixmaps.mask); + + gtk_clist_set_row_data (GTK_CLIST (selectContactData.clist), row_i++, (gpointer) pbEntry); + } + } + + gtk_clist_sort (GTK_CLIST (selectContactData.clist)); + gtk_clist_thaw (GTK_CLIST (selectContactData.clist)); + + gtk_widget_show (selectContactData.dialog); + + return &selectContactData; +} + + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "R", ReadContacts, 0, NULL}, + { NULL, "S", SaveContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", ImportContacts, 0, NULL}, + { NULL, "E", ExportContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseContacts, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", NewEntry, 0, NULL}, + { NULL, "U", DuplicateEntry, 0, NULL}, + { NULL, NULL, EditEntry, 0, NULL}, + { NULL, "D", DeleteEntry, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "C", ChMemType, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "F", FindFirstEntry, 0, NULL}, + { NULL, "L", SearchEntry, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "A", SelectAll, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "V", DialVoice, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Read from phone")); + menu_items[2].path = g_strdup (_("/File/_Save to phone")); + menu_items[3].path = g_strdup (_("/File/Sep1")); + menu_items[4].path = g_strdup (_("/File/_Import from file")); + menu_items[5].path = g_strdup (_("/File/_Export to file")); + menu_items[6].path = g_strdup (_("/File/Sep2")); + menu_items[7].path = g_strdup (_("/File/_Close")); + menu_items[8].path = g_strdup (_("/_Edit")); + menu_items[9].path = g_strdup (_("/Edit/_New")); + menu_items[10].path = g_strdup (_("/Edit/D_uplicate")); + menu_items[11].path = g_strdup (_("/Edit/_Edit")); + menu_items[12].path = g_strdup (_("/Edit/_Delete")); + menu_items[13].path = g_strdup (_("/Edit/Sep3")); + menu_items[14].path = g_strdup (_("/Edit/_Change memory type")); + menu_items[15].path = g_strdup (_("/Edit/Sep4")); + menu_items[16].path = g_strdup (_("/Edit/_Find")); + menu_items[17].path = g_strdup (_("/Edit/Find ne_xt")); + menu_items[18].path = g_strdup (_("/Edit/Sep5")); + menu_items[19].path = g_strdup (_("/Edit/Select _all")); + menu_items[20].path = g_strdup (_("/_Dial")); + menu_items[21].path = g_strdup (_("/Dial/Dial _voice")); + menu_items[22].path = g_strdup (_("/_Help")); + menu_items[23].path = g_strdup (_("/Help/_Help")); + menu_items[24].path = g_strdup (_("/Help/_About")); +} + + +void GUI_CreateContactsWindow (void) +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + SortColumn *sColumn; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *toolbar; + GtkWidget *clistScrolledWindow; + GtkWidget *status_hbox; + register gint i; + gchar *titles[4] = { _("Name"), _("Number"), _("Memory"), _("Group")}; + + InitMainMenu (); + contactsMemoryInitialized = FALSE; + GUI_ContactsWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_ContactsWindow), "ContactsWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_ContactsWindow), _("Contacts")); + gtk_widget_set_usize (GTK_WIDGET (GUI_ContactsWindow), 436, 220); + //gtk_container_set_border_width (GTK_CONTAINER (GUI_ContactsWindow), 10); + gtk_signal_connect (GTK_OBJECT (GUI_ContactsWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_ContactsWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_ContactsWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_ContactsWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + /* Create the toolbar */ + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL, + NewPixmap(Read_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ReadContacts, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL, + NewPixmap(Send_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) SaveContacts, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL, + NewPixmap(Open_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ImportContacts, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL, + NewPixmap(Save_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ExportContacts, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New entry"), NULL, + NewPixmap(New_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NewEntry, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Duplicate entry"), NULL, + NewPixmap(Duplicate_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) DuplicateEntry, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL, + NewPixmap(Edit_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) EditEntry, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete entry"), NULL, + NewPixmap(Delete_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) DeleteEntry, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR(toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Dial voice"), NULL, + NewPixmap(Dial_xpm, GUI_ContactsWindow->window, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) DialVoice, NULL); + +// gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); + + gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + + clist = gtk_clist_new_with_titles (4, titles); + gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT); + gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc); + gtk_clist_set_sort_column (GTK_CLIST (clist), 0); + gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING); + gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE); + gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); + + gtk_clist_set_column_width (GTK_CLIST (clist), 0, 150); + gtk_clist_set_column_width (GTK_CLIST (clist), 1, 115); + gtk_clist_set_column_width (GTK_CLIST (clist), 3, 70); + gtk_clist_set_column_justification (GTK_CLIST (clist), 2, GTK_JUSTIFY_CENTER); +// gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, phoneMonitor.supported & PM_CALLERGROUP); + + for (i = 0; i < 4; i++) + { + if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL) + { + g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + gtk_main_quit (); + } + sColumn->clist = clist; + sColumn->column = i; + gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked", + GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn); + } + + gtk_signal_connect (GTK_OBJECT (clist), "select_row", + GTK_SIGNAL_FUNC (ClickEntry), NULL); + + clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow, + TRUE, TRUE, 0); + + gtk_widget_show (clist); + gtk_widget_show (clistScrolledWindow); + + status_hbox = gtk_hbox_new (FALSE,20); + gtk_box_pack_start (GTK_BOX (main_vbox), status_hbox, FALSE, FALSE, 0); + gtk_widget_show (status_hbox); + + memoryStatus.MaxME = memoryStatus.UsedME = memoryStatus.FreeME = + memoryStatus.MaxSM = memoryStatus.UsedSM = memoryStatus.FreeSM = 0; + statusInfo.ch_ME = statusInfo.ch_SM = 0; + + statusInfo.label = gtk_label_new (""); + RefreshStatusInfo (); + gtk_box_pack_start (GTK_BOX (status_hbox), statusInfo.label, FALSE, FALSE, 10); + gtk_widget_show (statusInfo.label); + + memoryPixmaps.simMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window, + &memoryPixmaps.mask, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL], + sim_xpm); + + memoryPixmaps.phoneMemPix = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window, + &memoryPixmaps.mask, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL], + phone_xpm); + + questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_ContactsWindow->window, + &questMark.mask, + &GUI_ContactsWindow->style->bg[GTK_STATE_NORMAL], + quest_xpm); + + CreateErrorDialog (&errorDialog, GUI_ContactsWindow); + GUIEventAdd (GUI_EVENT_CONTACTS_CHANGED, GUI_RefreshContacts); + GUIEventAdd (GUI_EVENT_CALLERS_GROUPS_CHANGED, GUI_RefreshGroupMenu); +} + diff --git a/xgnokii/xgnokii_contacts.h b/xgnokii/xgnokii_contacts.h new file mode 100644 index 0000000..59f5c7c --- /dev/null +++ b/xgnokii/xgnokii_contacts.h @@ -0,0 +1,191 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Id$ + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:28 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.12 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + +*/ + +#ifndef XGNOKII_CONTACTS_H +#define XGNOKII_CONTACTS_H + +#include +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" + +#define IO_BUF_LEN 160 + +/* Structure to keep memory status information */ +typedef struct { + int MaxME; /* Maximum Phone memory entries. */ + int UsedME; /* Actualy used Phone memory entries. */ + int FreeME; /* FreeME = MaxME - UsedME */ + int MaxSM; /* Maximum SIM memory entries. */ + int UsedSM; + int FreeSM; +} MemoryStatus; + +/* Array to hold contacts entry */ +typedef GPtrArray* ContactsMemory; + +/* Structure to keep contacts memory entry status */ +typedef enum { + E_Unchanged, /* Entry is not empty and is unchanged. */ + E_Changed, /* Entry is not empty and is changed. */ + E_Deleted, /* Entry was deleted. */ + E_Empty /* Entry is empty. */ +} EntryStatus; + +/* Memory entry data */ +typedef struct { + GSM_PhonebookEntry entry; /* Phonebook entry self. */ + EntryStatus status; /* Entry status. */ +} PhonebookEntry; + +/* Structure to hold information of Edit and New dialogs */ +typedef struct { + PhonebookEntry *pbEntry; + GtkWidget *dialog; + GtkWidget *name; + GtkWidget *number; + GtkWidget *extended; + GtkWidget *memoryBox; + GtkWidget *memoryTypePhone; + GtkWidget *memoryTypeSIM; + GtkWidget *group; + GtkWidget *groupLabel; + GtkWidget *groupMenu; + gint newGroup; + gint row; +} EditEntryData; + + +typedef struct { + PhonebookEntry *pbEntry; + GtkWidget *dialog; + GtkWidget *clist; +} EditNumbersData; + + +/* Structure to hold information for FindEntry dialog. */ +typedef struct { + GtkWidget *dialog; + GtkWidget *pattern; + GtkWidget *nameB; + GtkWidget *numberB; +} FindEntryData; + + +/* Contains fileName for Export dialog. */ +typedef struct { + gchar *fileName; +} ExportDialogData; + + +/* Hold widgets for SelectContactDialog */ +typedef struct { + GtkWidget *dialog; + GtkWidget *clist; /* list of contacts */ + GtkWidget *clistScrolledWindow; + GtkWidget *okButton; /* Ok and Cancel button widgets */ + GtkWidget *cancelButton; +} SelectContactData; + + +/* Max length for status line. (Line that shows used/max information for + memories). */ +#define STATUS_INFO_LENGTH 40 + + +/* Structure to hold information for status line (bottom line of window) */ +typedef struct { + GtkWidget *label; + gchar text[STATUS_INFO_LENGTH]; /* Status line text. */ + gint ch_ME:1; /* 1 if phone memory was changed */ + gint ch_SM:1; /* 1 if phone SIM was changed */ +} StatusInfo; + + +/* Structure to hold information for progress dialog */ +typedef struct { + GtkWidget *dialog; + GtkWidget *pbarME; + GtkWidget *pbarSM; +} ProgressDialog; + + +/* Search type. */ +typedef enum { + FIND_NAME = 0, + FIND_NUMBER +} FindType; + + +typedef struct { + gchar pattern[GSM_MAX_PHONEBOOK_NAME_LENGTH + 1]; + gint lastRow; + FindType type; +} FindEntryStruct; + + +typedef struct { + GdkPixmap *simMemPix, *phoneMemPix; + GdkBitmap *mask; +} MemoryPixmaps; + + +extern void GUI_CreateContactsWindow (void); + +extern void GUI_ShowContacts (void); + +/* return != 0 if user has unsaved changes in contacts memory */ +extern gint GUI_ContactsIsChanged (void); + +/* return TRUE if Contacts memory was read from phone or from file */ +extern bool GUI_ContactsIsIntialized (void); + +/* Read contacts from phone */ +extern void GUI_ReadContacts (void); + +/* Save contacts to phone */ +extern void GUI_SaveContacts (void); + +/* Create save question dialog and can end application */ +extern void GUI_QuitSaveContacts (void); + +extern void GUI_RefreshContacts (void); + +/* Function take number and return name belonged to number. + If no name is found, return NULL; + Do not modify returned name! */ +extern gchar *GUI_GetName (gchar *number); + +extern gchar *GUI_GetNameExact (gchar *number); + +extern gchar *GUI_GetNumber (gchar *name); +/* Function show dialog with contacts and let select entries. + See xgnokii_contacts.c for sample of use. */ +extern SelectContactData *GUI_SelectContactDialog (void); + +extern void GUI_RefreshGroupMenu (void); + +extern PhonebookEntry *GUI_GetEntry (GSM_MemoryType, gint); + +void ExtPbkChanged (GtkWidget *widget, gpointer data ); + +#endif diff --git a/xgnokii/xgnokii_data.c b/xgnokii/xgnokii_data.c new file mode 100644 index 0000000..261f75f --- /dev/null +++ b/xgnokii/xgnokii_data.c @@ -0,0 +1,134 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tues 13 June 2000 + Modified by Chris Kemp + +*/ + +#include +#include +#include "misc.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_data.h" +#include "data/virtmodem.h" + +static GtkWidget *GUI_DataWindow; +bool TerminateThread = false; +bool enabled = false; +static GtkWidget *label = NULL; + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/data/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + +static void UpdateStatus (void) +{ + gchar *buf; + + if (!enabled) + buf = g_strdup_printf (_("Data calls are currently\nDisabled\n ")); + else + buf = g_strdup_printf (_("Data calls are currently\nEnabled\n ")); + + if (label != NULL) + gtk_label_set_text (GTK_LABEL (label), buf); + + g_free (buf); +} + + +inline void GUI_ShowData (void) +{ + if (!phoneMonitor.supported & PM_DATA) + return; + + if (TerminateThread) + { + VM_Terminate (); + enabled = false; + TerminateThread = false; + } + UpdateStatus (); + + gtk_widget_show (GUI_DataWindow); +} + + +inline void GUI_HideData(void) +{ + gtk_widget_hide (GUI_DataWindow); +} + +static inline void DisableData (GtkWidget *widget, + gpointer data ) +{ + VM_Terminate (); + enabled = false; + UpdateStatus (); +} + + +static inline void EnableData (GtkWidget *widget, + gpointer data) +{ + + TerminateThread = false; + VM_Initialise (xgnokiiConfig.model, xgnokiiConfig.port, + 0, 0, xgnokiiConfig.bindir, false, false); + enabled = true; + UpdateStatus (); +} + + +void GUI_CreateDataWindow (void) +{ + GtkWidget *button, *hbox, *vbox; + + GUI_DataWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_DataWindow), "DataWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_DataWindow), _("Virtual Modem")); + gtk_container_set_border_width (GTK_CONTAINER (GUI_DataWindow), 10); + gtk_signal_connect (GTK_OBJECT (GUI_DataWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_DataWindow), vbox); + gtk_widget_show (vbox); + + label = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_widget_show (hbox); + + button = gtk_button_new_with_label (_("Enable")); + gtk_box_pack_start (GTK_BOX (hbox), + button, TRUE, FALSE, 5); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (EnableData), NULL); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Disable")); + gtk_box_pack_start (GTK_BOX (hbox), + button, TRUE, FALSE, 5); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (DisableData), NULL); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); +} diff --git a/xgnokii/xgnokii_data.h b/xgnokii/xgnokii_data.h new file mode 100644 index 0000000..d71a331 --- /dev/null +++ b/xgnokii/xgnokii_data.h @@ -0,0 +1,25 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tue Nov 27 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_DATA_H +#define XGNOKII_DATA_H + +void GUI_CreateDataWindow (void); +inline void GUI_ShowData (void); +inline void GUI_HideData (void); + +#endif + + diff --git a/xgnokii/xgnokii_dtmf.c b/xgnokii/xgnokii_dtmf.c new file mode 100644 index 0000000..54ee4bc --- /dev/null +++ b/xgnokii/xgnokii_dtmf.c @@ -0,0 +1,342 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Apr 30 2000 + Modified by Jan Derfinak + +*/ + +#include +#include +#include "misc.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_dtmf.h" +#include "xpm/Send.xpm" +#include "xpm/Delete.xpm" + +#define MAX_DTMF_LENGTH 50 + +static GtkWidget *GUI_DTMFWindow; +static GtkWidget *displayEntry; +static ErrorDialog errorDialog = {NULL, NULL}; +static gchar *saveFileName; + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/dtmf/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static inline void ButtonCB (GtkWidget *widget, + gpointer data ) +{ + gchar buf[2] = " "; + + *buf = GPOINTER_TO_INT (data); + gtk_entry_append_text (GTK_ENTRY (displayEntry), buf); +} + + +static inline void ClearCB (GtkWidget *widget, + gpointer data ) +{ + gtk_entry_set_text (GTK_ENTRY (displayEntry), ""); +} + + +static inline void SendCB (GtkWidget *widget, + gpointer data ) +{ + PhoneEvent *e; + gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry))); + + if (*buf == '\0') + { + g_free (buf); + return; + } + + e = g_malloc (sizeof (PhoneEvent)); + e->event = Event_SendDTMF; + e->data = buf; + GUI_InsertEvent (e); +} + + +static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs) +{ + FILE *f; + gchar *fileName; + gchar line[MAX_DTMF_LENGTH + 1]; + gchar buf[80]; + + fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (fileName, "r")) == NULL) + { + g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + fgets (line, MAX_DTMF_LENGTH + 1, f); + gtk_entry_set_text (GTK_ENTRY (displayEntry), line); + fclose (f); +} + + +static void LoadFileDialog () +{ + static GtkWidget *fileDialog = NULL; + + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Load")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); +} + + +static void SaveDTMF () +{ + FILE *f; + gchar buf[80]; + + if ((f = fopen (saveFileName, "w")) == NULL) + { + g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f); + fclose (f); +} + + +static inline void YesSaveDialog (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + SaveDTMF(); +} + + +static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs) +{ + FILE *f; + static YesNoDialog dialog = { NULL, NULL}; + gchar err[80]; + + saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (saveFileName, "r")) != NULL) + { + fclose (f); + if (dialog.dialog == NULL) + { + CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow); + gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?")); + g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName); + gtk_label_set_text (GTK_LABEL(dialog.text), err); + } + gtk_widget_show (dialog.dialog); + } + else + SaveDTMF (); +} + + +static void SaveFileDialog () +{ + static GtkWidget *fileDialog = NULL; + + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Save")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); +} + + +static inline void CloseDTMF (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_DTMFWindow); +} + + +inline void GUI_ShowDTMF () +{ + gtk_widget_show (GUI_DTMFWindow); +} + + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "O", LoadFileDialog, 0, NULL}, + { NULL, "S", SaveFileDialog, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseDTMF, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Open")); + menu_items[2].path = g_strdup (_("/File/_Save")); + menu_items[3].path = g_strdup (_("/File/Sep1")); + menu_items[4].path = g_strdup (_("/File/_Close")); + menu_items[5].path = g_strdup (_("/_Help")); + menu_items[6].path = g_strdup (_("/Help/_Help")); + menu_items[7].path = g_strdup (_("/Help/_About")); +} + + +void GUI_CreateDTMFWindow () +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *table; + GtkWidget *frame; + GtkWidget *button; + GtkWidget *pixmap; + gchar buf[2]; + gint i,j; + + + InitMainMenu (); + GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_DTMFWindow), "DTMFWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone")); + //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_DTMFWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + table = gtk_table_new (8, 3, TRUE); + + frame = gtk_frame_new (NULL); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_container_border_width (GTK_CONTAINER (table), 3); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 2); + + displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH); + gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1); + gtk_widget_set_usize (displayEntry, 110, 22); + + for (i = 0; i < 3; i++) + for (j = 0; j < 3; j++) + { + g_snprintf (buf, 2, "%d", j * 3 + i + 1); + button = gtk_button_new_with_label (buf); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf)); + gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3); + } + + button = gtk_button_new_with_label ("*"); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*'); + gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6); + + button = gtk_button_new_with_label ("0"); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0'); + gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6); + + button = gtk_button_new_with_label ("#"); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#'); + gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6); + + + button = gtk_button_new_with_label ("Pause"); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p'); + gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7); + + button = gtk_button_new_with_label ("Wait"); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w'); + gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7); + + button = gtk_button_new (); + pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window, + &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]); + gtk_container_add (GTK_CONTAINER (button), pixmap); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL); + gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8); + + button = gtk_button_new (); + pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window, + &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]); + gtk_container_add (GTK_CONTAINER (button), pixmap); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL); + gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7); + + gtk_widget_show_all (table); + + CreateErrorDialog (&errorDialog, GUI_DTMFWindow); +} diff --git a/xgnokii/xgnokii_dtmf.h b/xgnokii/xgnokii_dtmf.h new file mode 100644 index 0000000..737c1f0 --- /dev/null +++ b/xgnokii/xgnokii_dtmf.h @@ -0,0 +1,23 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tue Nov 27 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_DTMF_H +#define XGNOKII_DTMF_H + +extern void GUI_CreateDTMFWindow (); + +extern void GUI_ShowDTMF (); + +#endif diff --git a/xgnokii/xgnokii_logos.c b/xgnokii/xgnokii_logos.c new file mode 100644 index 0000000..0d2a90b --- /dev/null +++ b/xgnokii/xgnokii_logos.c @@ -0,0 +1,1729 @@ +/* + + $Id$ + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:31 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.9 2001/09/14 12:53:00 pkot + New preview logos. + Localization fixes. + Set valid operator on logos xgnokii screen. + + Revision 1.8 2001/05/24 20:47:31 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.7 2001/03/23 08:24:56 ja + New preview for 6210 in xgnokii's logos module. + + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "cfgreader.h" +#include "gsm-networks.h" +#include "gsm-filetypes.h" +#include "gsm-bitmaps.h" + +#include "xgnokii_logos.h" +#include "xgnokii_common.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii.h" + +#include "xpm/Operator_logo.xpm" +#include "xpm/Startup_logo.xpm" +#include "xpm/Caller_logo.xpm" + +#include "xpm/Black_point.xpm" +#include "xpm/Green_point.xpm" +#include "xpm/Green_pixel.xpm" + +#include "xpm/New.xpm" +#include "xpm/Send.xpm" +#include "xpm/Read.xpm" +#include "xpm/Open.xpm" +#include "xpm/Save.xpm" + +#include "xpm/Edit_invert.xpm" +#include "xpm/Edit_flip_horizontal.xpm" +#include "xpm/Edit_flip_vertical.xpm" + +#include "xpm/Tool_brush.xpm" +#include "xpm/Tool_line.xpm" +#include "xpm/Tool_rectangle.xpm" +#include "xpm/Tool_filled_rectangle.xpm" + +extern GSM_Network GSM_Networks[]; +extern GSM_Statemachine statemachine; + +GtkWidget *GUI_LogosWindow; + +ErrorDialog errorDialog = {NULL, NULL}; +InfoDialog infoDialog = {NULL, NULL}; + +/* stuff for drawingArea */ +GtkWidget *drawingArea = NULL; +GdkPixmap *drawingPixmap = NULL; +GdkPixmap *greenPointPixmap, *blackPointPixmap; +int drawingAreaWidth, drawingAreaHeight; /* in pixels */ +int mouseButtonPushed = 0; + +/* stuff for previewArea */ +GtkWidget *previewArea = NULL; +GdkPixmap *previewPixmap = NULL; +GdkPixmap *greenPixelPixmap; +int previewPixmapWidth, previewPixmapHeight; +int previewAvailable = 1, showPreviewErrorDialog = 1; +int previewPixmapNumber = 0; + +GSM_Bitmap bitmap, oldBitmap; +GSM_NetworkInfo networkInfo; + +/* widgets for toolbar - some, need global variables */ +GtkWidget *buttonStartup, *buttonOperator, *buttonCaller; +GtkWidget *networkCombo, *callerCombo; + +int activeTool = TOOL_BRUSH; +int toolStartX, toolStartY, toolLastX, toolLastY; + +/* tools for drawing */ +static GtkWidget *buttonBrush, *buttonLine, *buttonRectangle; +static GtkWidget *buttonFilledRectangle; + +/* Contains fileName for Export dialog. */ +typedef struct { + gchar *fileName; +} ExportDialogData; + +static ExportDialogData exportDialogData = {NULL}; + +GtkWidget *FileSelection; + +static int callersGroupsInitialized = 0; + +/* returns lowest number from three numbers */ +int GetMinFrom3(int a, int b, int c) { + if (a > b) { + if (b > c) + return c; + else + return b; + } else { + if (a > c) + return c; + else + return a; + } +} + +/* returns highest number from three numbers */ +int GetMaxFrom3(int a, int b, int c) { + if (a > b) { + if (c > a) + return c; + else + return a; + } else { + if (c > b) + return c; + else + return b; + } +} + +/* load preview pixmap from file */ +GdkPixmap *GetPreviewPixmap (GtkWidget *widget) { + GdkPixmap *pixmap; + GdkBitmap *mask; + gchar *file; + + if (previewPixmapNumber == 0) + { + if (!strcmp (xgnokiiConfig.model, "6110") || + !strcmp (xgnokiiConfig.model, "6120")) + { + file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6110.xpm"); + previewPixmapNumber = 1; + } + else if (!strcmp (xgnokiiConfig.model, "6130") || + !strcmp (xgnokiiConfig.model, "6150") || + !strcmp (xgnokiiConfig.model, "616x") || + !strcmp (xgnokiiConfig.model, "6185") || + !strcmp (xgnokiiConfig.model, "6190")) + { + file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6150.xpm"); + previewPixmapNumber = 2; + } + else if (!strcmp (xgnokiiConfig.model, "3210")) + { + file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir, + "/xpm/Preview_3210.xpm"); + previewPixmapNumber = 3; + } + else if (!strcmp (xgnokiiConfig.model, "3310") || + !strcmp (xgnokiiConfig.model, "3330")) + { + file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir, + "/xpm/Preview_3310.xpm"); + previewPixmapNumber = 4; + } + else if (!strcmp (xgnokiiConfig.model, "5110") || + !strcmp (xgnokiiConfig.model, "5130")) + { + file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir, + "/xpm/Preview_5110.xpm"); + previewPixmapNumber = 5; + } + else if (!strcmp (xgnokiiConfig.model, "6250")) + { + file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6250.xpm"); + previewPixmapNumber = 6; + } + else if (!strcmp (xgnokiiConfig.model, "7110")) + { + file = g_strdup_printf("%s%s", xgnokiiConfig.xgnokiidir, + "/xpm/Preview_7110.xpm"); + previewPixmapNumber = 7; + } + else + { + file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6210.xpm"); + previewPixmapNumber = 8; + } + } + else + switch (previewPixmapNumber) + { + case 1: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6110.xpm"); + break; + case 2: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6150.xpm"); + break; + case 3: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_3210.xpm"); + break; + case 4: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_3310.xpm"); + break; + case 5: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_5110.xpm"); + break; + case 6: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6250.xpm"); + break; + case 7: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_7110.xpm"); + break; + default: file = g_strdup_printf("%s%s",xgnokiiConfig.xgnokiidir, + "/xpm/Preview_6210.xpm"); + break; + } + + pixmap = gdk_pixmap_create_from_xpm(widget->window,&mask, + &widget->style->bg[GTK_STATE_NORMAL], + file); + + g_free(file); + + return pixmap; +} + +/* ******************************************************** + * ** SET/CLEAR POINTS ************************************ + * ******************************************************** + */ +void SetPreviewPoint(GtkWidget *widget, int x, int y, int update) { + if (!previewAvailable) return; + + /* there is difference between positiong of startupLogo and others */ + if (bitmap.type != GSM_StartupLogo) { + x += PREVIEWJUMPX; + y += PREVIEWJUMPY; + } + + /* draw point to pixmap */ + if (previewPixmap) + gdk_draw_point(previewPixmap,widget->style->black_gc, + x+PREVIEWSTARTX,y+PREVIEWSTARTY); + + if (update) { + GdkRectangle updateRect; + + /* update point on screen */ + updateRect.width = 1; + updateRect.height = 1; + updateRect.x = PREVIEWSTARTX+x; + updateRect.y = PREVIEWSTARTY+y; + + gtk_widget_draw(previewArea,&updateRect); + } +} + +void ClearPreviewPoint(GtkWidget *widget, int x, int y, int update) { + if (!previewAvailable) return; + + /* there is difference between positiong of startupLogo and others */ + if (bitmap.type != GSM_StartupLogo) { + x += PREVIEWJUMPX; + y += PREVIEWJUMPY; + } + + /* clean point from pixmap - any idea how to draw green point without pixmap? */ + if (previewPixmap) + gdk_draw_pixmap(previewPixmap, + widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + greenPixelPixmap,0,0,x+PREVIEWSTARTX,y+PREVIEWSTARTY,1,1); + if (update) { + GdkRectangle updateRect; + + /* clean from screen too */ + updateRect.width = 1; + updateRect.height = 1; + updateRect.x = PREVIEWSTARTX+x; + updateRect.y = PREVIEWSTARTY+y; + + gtk_widget_draw(previewArea,&updateRect); + } +} + +int IsPoint(int x, int y) { + return GSM_IsPointBitmap(&bitmap,x,y); +} + +void SetPoint(GtkWidget *widget, int x, int y, int update) { + /* difference between settings points in startupLogo and others */ + GSM_SetPointBitmap(&bitmap,x,y); + + /* draw point to pixmap */ + gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + + if (update) { + GdkRectangle updateRect; + + /* calculate update rectangle */ + updateRect.width = POINTSIZE+2; + updateRect.height = POINTSIZE+2; + updateRect.x = x * (POINTSIZE+1); + updateRect.y = y * (POINTSIZE+1); + + /* update on screen */ + gtk_widget_draw(drawingArea,&updateRect); + } + + /* draw preview point too */ + if (previewAvailable) SetPreviewPoint(widget,x,y,update); +} + +void ClearPoint(GtkWidget *widget, int x, int y, int update) { + /* difference between settings points in startupLogo and others */ + GSM_ClearPointBitmap(&bitmap,x,y); + + /* clear point from pixmap */ + gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + + if (update) { + GdkRectangle updateRect; + + /* calculate update rectangle */ + updateRect.width = POINTSIZE+2; + updateRect.height = POINTSIZE+2; + updateRect.x = x * (POINTSIZE+1); + updateRect.y = y * (POINTSIZE+1); + + /* update on screen */ + gtk_widget_draw(drawingArea,&updateRect); + } + + /* clear point from previewArea too */ + if (previewAvailable) ClearPreviewPoint(widget,x,y,update); +} + +/* **************************************************** + * *** UPDATES - PREVIEW & DRAWING AREAS ************** + * **************************************************** + */ + +/* this redraw all logo points - preview & drawing area */ +void UpdatePointsRectangle(GtkWidget *widget, int x1, int y1, int x2, int y2) { + GdkRectangle updateRect; + int x, y, dx = 0, dy = 0; + + if (bitmap.type != GSM_StartupLogo) { + dx = PREVIEWJUMPX; + dy = PREVIEWJUMPY; + } + + if (x1 > x2) { + x = x1; + x1 = x2; + x2 = x; + } + + if (y1 > y2) { + y = y1; + y1 = y2; + y2 = y; + } + + for (y = y1;y <= y2;y++) + for (x = x1;x <= x2;x++) { + if (IsPoint(x,y)) { + /* set on drawing area */ + gdk_draw_pixmap(drawingPixmap, + drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)], + blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + + /* set on preview */ + if (previewAvailable && previewPixmap) + gdk_draw_point(previewPixmap,previewArea->style->black_gc, + x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy); + } else { + /* clear from drawing */ + gdk_draw_pixmap(drawingPixmap, + drawingArea->style->fg_gc[GTK_WIDGET_STATE(drawingArea)], + greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + + /* clear from preview */ + if (previewAvailable && previewPixmap) + gdk_draw_pixmap(previewPixmap, + previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)], + greenPixelPixmap,0,0,x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy, + 1,1); + } + } + + if (previewAvailable) { + updateRect.x = PREVIEWSTARTX+dx+x1; + updateRect.y = PREVIEWSTARTY+dy+y1; + updateRect.width = x2-x1+1; + updateRect.height = y2-y1+1; + gtk_widget_draw(previewArea,&updateRect); + } + + updateRect.x = x1*(POINTSIZE+1); + updateRect.y = y1*(POINTSIZE+1); + updateRect.width = (x2-x1+1)*(POINTSIZE+1)+1; + updateRect.height = (y2-y1+1)*(POINTSIZE+1)+1; + gtk_widget_draw(drawingArea,&updateRect); +} + +void UpdatePoints(GtkWidget *widget) { + UpdatePointsRectangle(widget,0,0,bitmap.width-1,bitmap.height-1); +} + +/* this redraw all logo points in previewArea, NO DRAWING AREA */ +void UpdatePreviewPoints (void) { + GdkRectangle updateRect; + int x, y, dx = 0, dy = 0; + + if (!previewPixmap || !previewAvailable) return; + + if (bitmap.type != GSM_StartupLogo) { + dx = PREVIEWJUMPX; + dy = PREVIEWJUMPY; + } + + for (y = 0;y < bitmap.height;y++) + for (x = 0;x < bitmap.width;x++) { + if (IsPoint(x,y)) { + gdk_draw_point(previewPixmap,previewArea->style->black_gc, + x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy); + } else { + gdk_draw_pixmap(previewPixmap, + previewArea->style->fg_gc[GTK_WIDGET_STATE(previewArea)], + greenPixelPixmap,0,0, + x+PREVIEWSTARTX+dx,y+PREVIEWSTARTY+dy,1,1); + } + } + + updateRect.x = dx; + updateRect.y = dy; + updateRect.width = bitmap.width; + updateRect.height = bitmap.height; + gtk_widget_draw(previewArea,&updateRect); +} + +/* ****************************************************** + * **** DRAWING TOOLS *********************************** + * ****************************************************** + */ + +/* TOOL - BRUSH */ +void ToolBrush(GtkWidget *widget, int column, int row, int button) { + /* only this tool directly update bitmap & screen */ + if (button > 1) + ClearPoint(widget,column,row,1); + else + SetPoint(widget,column,row,1); +} + +/* TOOL - LINE */ + +/* this function clear or draw a line on the screen USED BY TOOLLINEUPDATE */ +void ToolLine(GtkWidget *widget, int x1, int y1, int x2, int y2, int draw) { + int udx, udy, dx, dy, error, loop, xadd, yadd; + + dx = x2 - x1; /* x delta */ + dy = y2 - y1; /* y delta */ + + udx = abs(dx); /* unsigned x delta */ + udy = abs(dy); /* unsigned y delta */ + + if (dx < 0) { xadd = -1; } else { xadd = 1; } /* set directions */ + if (dy < 0) { yadd = -1; } else { yadd = 1; } + + error = 0; + loop = 0; + if (udx > udy) { /* delta X > delta Y */ + do { + error += udy; + + if (error >= udx) { /* is time to move up or down? */ + error -= udx; + y1 += yadd; + } + loop++; + if (draw == 1) { + SetPoint(widget,x1,y1,0); + } else { + /* now clearing line before drawing new one, we must check */ + /* if there is a point in oldBitmap which saves bitmap before */ + /* we starting drawing new line */ + if (!GSM_IsPointBitmap(&oldBitmap,x1,y1)) { + ClearPoint(widget,x1,y1,0); + } + } + x1 += xadd; /* move horizontally */ + } while (loop < udx); /* repeat for x length */ + } else { + do { + error += udx; + if (error >= udy) { /* is time to move left or right? */ + error -= udy; + x1 += xadd; + } + loop++; + if (draw == 1) { + SetPoint(widget,x1,y1,0); + } else { + /* check comment in delta X > delta Y */ + if (!GSM_IsPointBitmap(&oldBitmap,x1,y1)) { + ClearPoint(widget,x1,y1,0); + } + } + y1 += yadd; /* move vertically */ + } while (loop < udy); /* repeat for y length */ + } +} + +/* going to rewrite to Bresenham algorithm */ +void ToolLineUpdate(GtkWidget *widget, int column, int row) { + /* clear old line */ + ToolLine(widget,toolStartX,toolStartY,toolLastX,toolLastY,0); + /* draw new one */ + ToolLine(widget,toolStartX,toolStartY,column,row,1); +} + +/* TOOL - FILLED RECT */ + +/* FIXME - going to rewrite for optimalized version, clearing and */ +/* drawing new parts only before clearing and drawing whole */ +/* filled rectangle - it's too slow on diskless terminal ;(( */ +void ToolFilledRectangleUpdate(GtkWidget *widget, int column, int row) { + int i, j, x1, y1, x2, y2; + + /* swap Xs to x1 < x2 */ + if (toolStartX > toolLastX) { + x1 = toolLastX; + x2 = toolStartX; + } else { + x1 = toolStartX; + x2 = toolLastX; + } + + /* swap Ys to y1 < y2 */ + if (toolStartY > toolLastY) { + y1 = toolLastY; + y2 = toolStartY; + } else { + y1 = toolStartY; + y2 = toolLastY; + } + + /* clear one now */ + for (j = y1;j <= y2;j++) + for (i = x1;i <= x2;i++) + if (!GSM_IsPointBitmap(&oldBitmap,i,j)) ClearPoint(widget,i,j,0); + + /* swap Xs to x1 < x2 */ + if (toolStartX > column) { + x1 = column; + x2 = toolStartX; + } else { + x1 = toolStartX; + x2 = column; + } + + /* swap Ys to y1 < y2 */ + if (toolStartY > row) { + y1 = row; + y2 = toolStartY; + } else { + y1 = toolStartY; + y2 = row; + } + + /* draw new one */ + for (j = y1;j <= y2;j++) + for (i = x1;i <= x2;i++) + SetPoint(widget,i,j,0); +} + +/* TOOL - RECTANGLE */ +void ToolRectangleUpdate(GtkWidget *widget, int column, int row) { + int i, j, x1, y1, x2, y2; + + /* clear old rectangle */ + /* swap Xs to x1 < x2 */ + if (toolStartX > toolLastX) { + x1 = toolLastX; + x2 = toolStartX; + } else { + x1 = toolStartX; + x2 = toolLastX; + } + + /* swap Ys to y1 < y2 */ + if (toolStartY > toolLastY) { + y1 = toolLastY; + y2 = toolStartY; + } else { + y1 = toolStartY; + y2 = toolLastY; + } + + /* clear old one */ + for (i = x1;i <= x2;i++) { + if (!GSM_IsPointBitmap(&oldBitmap,i,y1)) ClearPoint(widget,i,y1,0); + if (!GSM_IsPointBitmap(&oldBitmap,i,y2)) ClearPoint(widget,i,y2,0); + } + + for (j = y1;j <= y2;j++) { + if (!GSM_IsPointBitmap(&oldBitmap,x1,j)) ClearPoint(widget,x1,j,0); + if (!GSM_IsPointBitmap(&oldBitmap,x2,j)) ClearPoint(widget,x2,j,0); + } + + /* draw new rectangle */ + /* swap Xs to x1 < x2 */ + if (toolStartX > column) { + x1 = column; + x2 = toolStartX; + } else { + x1 = toolStartX; + x2 = column; + } + + /* swap Ys to y1 < y2 */ + if (toolStartY > row) { + y1 = row; + y2 = toolStartY; + } else { + y1 = toolStartY; + y2 = row; + } + + /* draw new one */ + for (i = x1;i <= x2;i++) { + if (!IsPoint(i,y1)) SetPoint(widget,i,y1,0); + if (!IsPoint(i,y2)) SetPoint(widget,i,y2,0); + } + + for (j = y1;j <= y2;j++) { + if (!IsPoint(x1,j)) SetPoint(widget,x1,j,0); + if (!IsPoint(x2,j)) SetPoint(widget,x2,j,0); + } +} + +/* this update tools actions on the screen - this is for optimalization */ +/* eg. for faster redrawing tools actions - we do not need redraw pixel */ +/* by pixel. Faster is redraw whole rectangle which contains all changes */ +void UpdateToolScreen(GtkWidget *widget, int x1, int y1, int x2, int y2) { + GdkRectangle updateRect; + + /* update preview area */ + if (previewAvailable) { + updateRect.x = PREVIEWSTARTX+x1; + updateRect.y = PREVIEWSTARTY+y1; + if (bitmap.type != GSM_StartupLogo) { + updateRect.x += PREVIEWJUMPX; + updateRect.y += PREVIEWJUMPY; + } + updateRect.width = x2-x1+1; + updateRect.height = y2-y1+1; + gtk_widget_draw(previewArea,&updateRect); + } + + /* update drawing area */ + updateRect.x = x1 * (POINTSIZE+1); + updateRect.y = y1 * (POINTSIZE+1); + updateRect.width = (x2-x1+1)*(POINTSIZE+2); + updateRect.height = (y2-y1+1)*(POINTSIZE+2); + gtk_widget_draw(drawingArea,&updateRect); +} + +/* ************************************* + * ** PREVIEW AREA EVENTS ************** + * ************************************* + */ + +gint PreviewAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { + previewPixmapNumber = (previewPixmapNumber % 8) + 1; + + gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea), + previewPixmapWidth,previewPixmapHeight); + + return TRUE; +} + +gint PreviewAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { + if (previewPixmap) gdk_pixmap_unref(previewPixmap); + previewPixmap = GetPreviewPixmap(widget); + + UpdatePreviewPoints(); + + return TRUE; +} + +gint PreviewAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { + /* got previewPixmap? */ + if (previewPixmap) + /* yes - simply redraw some rectangle */ + gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + previewPixmap,event->area.x,event->area.y,event->area.x, + event->area.y,event->area.width,event->area.height); + + return FALSE; +} + +/* ******************************** + * ** DRAWING AREA EVENTS ********* + * ******************************** + */ + +gint DrawingAreaButtonPressEvent(GtkWidget *widget, GdkEventButton *event) { + /* got drawingPixmap? */ + if (drawingPixmap == NULL) return TRUE; + + if (!mouseButtonPushed) { + if ((event->button == 1 && activeTool != TOOL_BRUSH) || + (activeTool == TOOL_BRUSH)) { + /* position from we starting drawing */ + toolStartX = event->x / (POINTSIZE+1); + if (toolStartX < 0) toolStartX = 0; + if (toolStartX > bitmap.width-1) toolStartX = bitmap.width-1; + + toolStartY = event->y / (POINTSIZE+1); + if (toolStartY < 0) toolStartY = 0; + if (toolStartY > bitmap.height-1) toolStartY = bitmap.height-1; + + toolLastX = toolStartX; + toolLastY = toolStartY; + + /* store old bitmap for drawing, resp. for moving, resizing primitive */ + memcpy(&oldBitmap,&bitmap,sizeof(oldBitmap)); + } + + if (event->button == 1) mouseButtonPushed = 1; + + switch (activeTool) { + case TOOL_BRUSH: + ToolBrush(widget,toolStartX,toolStartY,event->button); + break; + case TOOL_LINE: + case TOOL_RECTANGLE: + if (event->button == 1) ToolBrush(widget,toolStartX,toolStartY,event->button); + break; + } + } + + /* user is drawing some tool other than TOOL_BRUSH and pushed mouse button + * another than first => cancel tool and redraw to oldBitmap (bitmap when + * user start drawing) + */ + if (mouseButtonPushed && activeTool != TOOL_BRUSH && event->button != 1) { + int lowestX, lowestY, highestX, highestY; + int i, j; + + lowestX = GetMinFrom3(toolStartX,toolLastX,toolLastX); + lowestY = GetMinFrom3(toolStartY,toolLastY,toolLastY); + highestX = GetMaxFrom3(toolStartX,toolLastX,toolLastX); + highestY = GetMaxFrom3(toolStartY,toolLastY,toolLastY); + + for (j = lowestY;j <= highestY;j++) + for (i = lowestX;i <= highestX;i++) + if (GSM_IsPointBitmap(&oldBitmap,i,j)) + SetPoint(widget,i,j,0); + else + ClearPoint(widget,i,j,0); + UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY); + + mouseButtonPushed = 0; + } + + return TRUE; +} + +gint DrawingAreaButtonReleaseEvent(GtkWidget *widget, GdkEventButton *event) { + if (event->button == 1) + mouseButtonPushed = 0; + + return TRUE; +} + +gint DrawingAreaMotionNotifyEvent(GtkWidget *widget, GdkEventMotion *event) { + int x,y; + GdkModifierType state; + + if (!mouseButtonPushed && activeTool != TOOL_BRUSH) return TRUE; + + if (event->is_hint) + gdk_window_get_pointer(event->window,&x,&y,&state); + else { + x = event->x; + y = event->y; + state = event->state; + } + + x = x / (POINTSIZE+1); + y = y / (POINTSIZE+1); + if (x < 0) x = 0; + if (y < 0) y = 0; + if (x > bitmap.width-1) x = bitmap.width-1; + if (y > bitmap.height-1) y = bitmap.height-1; + + if (y == toolLastY && x == toolLastX) return TRUE; + + switch (activeTool) { + case TOOL_BRUSH: + if (state & GDK_BUTTON1_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,1); + if (state & GDK_BUTTON2_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,2); + if (state & GDK_BUTTON3_MASK && drawingPixmap != NULL) ToolBrush(widget,x,y,3); + break; + case TOOL_RECTANGLE: + if (drawingPixmap != NULL) ToolRectangleUpdate(widget,x,y); + break; + case TOOL_FILLED_RECTANGLE: + if (drawingPixmap != NULL) ToolFilledRectangleUpdate(widget,x,y); + break; + case TOOL_LINE: + if (drawingPixmap != NULL) ToolLineUpdate(widget,x,y); + break; + } + + /* what is this? + * it's simple, above tools updates only bitmap in memory and this + * function update from bitmap to screen, it's made as non-blinking + * drawing functions with this, simply draw everything we need and + * after that, redraw to screen rectangle in which we made changes + * it's not redrawing pixel by pixel (blinking) + */ + if (activeTool != TOOL_BRUSH) { + int lowestX, lowestY, highestX, highestY; + + lowestX = GetMinFrom3(toolStartX,toolLastX,x); + lowestY = GetMinFrom3(toolStartY,toolLastY,y); + highestX = GetMaxFrom3(toolStartX,toolLastX,x); + highestY = GetMaxFrom3(toolStartY,toolLastY,y); + + UpdateToolScreen(widget,lowestX,lowestY,highestX,highestY); + } + + toolLastX = x; + toolLastY = y; + return TRUE; +} + +/* configureEvent? -> event when someone resize windows, ... */ +gint DrawingAreaConfigureEvent(GtkWidget *widget, GdkEventConfigure *event) { + int x, y; + /* got drawingPixmap? */ + if (drawingPixmap) gdk_pixmap_unref(drawingPixmap); /* got, erase it */ + + /* make a new pixmap */ + drawingPixmap = gdk_pixmap_new(widget->window,drawingAreaWidth, + drawingAreaHeight,-1); + + /* draw grid into pixmap */ + for (y = 0;y < bitmap.height;y++) + for (x = 0;x < bitmap.width;x++) + if (IsPoint(x,y)) + gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + blackPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + else + gdk_draw_pixmap(drawingPixmap,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + greenPointPixmap,0,0,x*(POINTSIZE+1),y*(POINTSIZE+1),-1,-1); + + return TRUE; +} + +gint DrawingAreaExposeEvent(GtkWidget *widget, GdkEventExpose *event) { + /* got drawingPixmap? */ + if (drawingPixmap) + /* got - draw it */ + gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE(widget)], + drawingPixmap, + event->area.x,event->area.y,event->area.x,event->area.y, + event->area.width,event->area.height); + return FALSE; +} + +/* ***************************************** + * ** TOOLBAR & MENU EVENTS **************** + * ***************************************** + */ + +void GetNetworkInfoEvent(GtkWidget *widget) { + GSM_Error error; + PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent)); + D_NetworkInfo *data = (D_NetworkInfo *)g_malloc(sizeof(D_NetworkInfo)); + + /* prepare data for event */ + data->info = &networkInfo; + e->event = Event_GetNetworkInfo; + e->data = data; + + /* launch event and wait for result */ + GUI_InsertEvent(e); + pthread_mutex_lock(&getNetworkInfoMutex); + pthread_cond_wait(&getNetworkInfoCond,&getNetworkInfoMutex); + pthread_mutex_unlock(&getNetworkInfoMutex); + error = data->status; + g_free(data); + + /* watch for errors */ + if (error != GE_NONE) { + gchar *buf = g_strdup_printf(_("Error getting network info\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + } + + /* set new operator name to combo */ + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry), + GSM_GetNetworkName(networkInfo.NetworkCode)); +} + +void GetLogoEvent(GtkWidget *widget) { + GSM_Error error; + int i; + PhoneEvent *e = (PhoneEvent *) g_malloc(sizeof(PhoneEvent)); + D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap)); + char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry)); + + /* prepare data for event */ + strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7); + data->bitmap = &bitmap; + e->event = Event_GetBitmap; + e->data = data; + if (phoneMonitor.supported & PM_CALLERGROUP) { + for (i = 0;i < 6;i++) + if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)), + xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; + } + + /* launch event and wait for result */ + GUI_InsertEvent(e); + pthread_mutex_lock(&getBitmapMutex); + pthread_cond_wait(&getBitmapCond,&getBitmapMutex); + pthread_mutex_unlock(&getBitmapMutex); + error = data->status; + g_free(data); + + /* watch for errors */ + if (error != GE_NONE) { + gchar *buf = g_strdup_printf(_("Error getting bitmap\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + } else { + /* no error, draw logo from phone */ + UpdatePoints(drawingArea); + } +} + +void SetLogoEvent(GtkWidget *widget) { + GSM_Error error; + PhoneEvent *e = (PhoneEvent *)g_malloc(sizeof(PhoneEvent)); + D_Bitmap *data = (D_Bitmap *)g_malloc(sizeof(D_Bitmap)); + char *operator = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(networkCombo)->entry)); + int i; + + /* prepare data */ + strncpy(bitmap.netcode,GSM_GetNetworkCode(operator),7); + + if (bitmap.type == GSM_CallerLogo) { + /* above condition must be there, because if you launch logos before + * callerGroups are available, you will see segfault - callerGroups not initialized + */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + for (i = 0;i < 6;i++) + if (strcmp(gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(callerCombo)->entry)), + xgnokiiConfig.callerGroups[i]) == 0) bitmap.number = i; + } + } + + data->bitmap = &bitmap; + e->event = Event_SetBitmap; + e->data = data; + + /* launch event and wait for result */ + GUI_InsertEvent(e); + pthread_mutex_lock(&setBitmapMutex); + pthread_cond_wait(&setBitmapCond,&setBitmapMutex); + pthread_mutex_unlock(&setBitmapMutex); + error = data->status; + g_free(data); + + /* watch for errors */ + if (error != GE_NONE) { + gchar *buf = g_strdup_printf(_("Error setting bitmap\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + } +} + +static void ClearLogoEvent(GtkWidget *widget) { + + // bitmap.size=bitmap.width*bitmap.height/8; + + GSM_ClearBitmap(&bitmap); + + UpdatePoints(widget); +} + +void InvertLogoEvent(GtkWidget *widget) { + int column, row; + + for (column = 0;column < bitmap.width;column++) + for (row = 0;row < bitmap.height;row++) + if (IsPoint(column,row)) + GSM_ClearPointBitmap(&bitmap,column,row); + else + GSM_SetPointBitmap(&bitmap,column,row); + + UpdatePoints(widget); +} + +void UpLogoEvent(GtkWidget *widget) { + int column, row; + + GSM_Bitmap tbitmap; + + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); + + for (row = 0;row < bitmap.height-1;row++) + for (column = 0;column < bitmap.width;column++) + if (IsPoint(column,row+1)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + for (column = 0;column < bitmap.width;column++) + if (GSM_IsPointBitmap(&tbitmap,column,0)) + GSM_SetPointBitmap(&bitmap,column,bitmap.height-1); + else + GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1); + + UpdatePoints(widget); +} + +void DownLogoEvent(GtkWidget *widget) { + int column, row; + + GSM_Bitmap tbitmap; + + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); + + for (row = bitmap.height-1;row > 0;row--) + for (column = 0;column < bitmap.width;column++) + if (IsPoint(column,row-1)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + for (column = 0;column < bitmap.width;column++) + if (GSM_IsPointBitmap(&tbitmap,column,bitmap.height-1)) + GSM_SetPointBitmap(&bitmap,column,0); + else + GSM_ClearPointBitmap(&bitmap,column,0); + + UpdatePoints(widget); +} + +void LeftLogoEvent(GtkWidget *widget) { + int column, row; + + GSM_Bitmap tbitmap; + + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); + + for (column = 0; column < bitmap.width-1;column++) + for (row = 0;row < bitmap.height;row++) + if (IsPoint(column+1,row)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + for (row = 0;row < bitmap.height;row++) + if (GSM_IsPointBitmap(&tbitmap,0,row)) + GSM_SetPointBitmap(&bitmap,bitmap.width-1,row); + else + GSM_ClearPointBitmap(&bitmap,bitmap.width-1,row); + + UpdatePoints(widget); +} + +void RightLogoEvent(GtkWidget *widget) { + int column, row; + + GSM_Bitmap tbitmap; + + memcpy(&tbitmap,&bitmap,sizeof(GSM_Bitmap)); + + for (column = bitmap.width-1;column > 0;column--) + for (row = 0;row < bitmap.height;row++) + if (IsPoint(column-1,row)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + for (row = 0;row < bitmap.height;row++) + if (GSM_IsPointBitmap(&tbitmap,bitmap.width-1,row)) + GSM_SetPointBitmap(&bitmap,0,row); + else + GSM_ClearPointBitmap(&bitmap,0,row); + + UpdatePoints(widget); +} + +void FlipVerticalLogoEvent(GtkWidget *widget) { + int row, column, temp; + + for (row = 0;row < (bitmap.height/2);row++) + for (column = 0;column < bitmap.width;column++) { + temp = IsPoint(column,row); + if (IsPoint(column,bitmap.height-1-row)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + if (temp) + GSM_SetPointBitmap(&bitmap,column,bitmap.height-1-row); + else + GSM_ClearPointBitmap(&bitmap,column,bitmap.height-1-row); + } + + UpdatePoints(widget); +} + +void FlipHorizontalLogoEvent(GtkWidget *widget) { + int row, column, temp; + + for (row = 0;row < bitmap.height;row++) + for (column = 0;column < (bitmap.width/2);column++) { + temp = IsPoint(column,row); + + if (IsPoint(bitmap.width-1-column,row)) + GSM_SetPointBitmap(&bitmap,column,row); + else + GSM_ClearPointBitmap(&bitmap,column,row); + + if (temp) + GSM_SetPointBitmap(&bitmap,bitmap.width-1-column,row); + else + GSM_ClearPointBitmap(&bitmap,bitmap.width-1-column,row); + } + + UpdatePoints(widget); +} + +/* this is launched when tool was changed */ +gint ToolTypeEvent(GtkWidget *widget) { + if (GTK_TOGGLE_BUTTON(buttonBrush)->active) activeTool = TOOL_BRUSH; else + if (GTK_TOGGLE_BUTTON(buttonLine)->active) activeTool = TOOL_LINE; else + if (GTK_TOGGLE_BUTTON(buttonRectangle)->active) activeTool = TOOL_RECTANGLE; else + if (GTK_TOGGLE_BUTTON(buttonFilledRectangle)->active) + activeTool = TOOL_FILLED_RECTANGLE; + + return 0; +} + +/* this is launched when logo type was change by buttons on toolbar */ +gint LogoTypeEvent(GtkWidget *widget) { + int clear = 0; + + /* is startupLogo? */ + /* Resize and clear anyway - CK */ + if (GTK_TOGGLE_BUTTON(buttonStartup)->active) { + /* look for old bitmap type, clean if another */ + clear = 1; + GSM_ResizeBitmap(&bitmap,GSM_StartupLogo, &statemachine.Phone.Info); + } + + /* has phone support for callerGroups? */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + if (GTK_TOGGLE_BUTTON(buttonCaller)->active && bitmap.type != GSM_CallerLogo) { + /* previous was startup? clear and draw batteries, signal, ... */ + /* Clear anyway for 7110...CK */ + clear = 1; + GSM_ResizeBitmap(&bitmap,GSM_CallerLogo, &statemachine.Phone.Info); + } + } + + /* is new type operatorLogo? */ + if (GTK_TOGGLE_BUTTON(buttonOperator)->active && bitmap.type != GSM_OperatorLogo) { + /* previous startup? clear and draw batteries, signal, ... */ + /* Clear anyway for 7110..CK */ + clear = 1; + GSM_ResizeBitmap(&bitmap,GSM_OperatorLogo, &statemachine.Phone.Info); + } + + /* must clear? */ + if (clear) { + if (previewAvailable) { + /* configure event reload pixmap from disk and redraws */ + gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea), + previewPixmapWidth,previewPixmapHeight); + } + + /* change new drawingArea size */ + drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1; + drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1; + + gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea), + drawingAreaWidth,drawingAreaHeight); + } + + return 0; +} + +inline void CloseLogosWindow (void) { + gtk_widget_hide(GUI_LogosWindow); +} + +void ExportLogoFileMain(gchar *name) +{ + GSM_Bitmap tbitmap; + GSM_Error error; + + tbitmap=bitmap; + + strncpy(tbitmap.netcode,GSM_GetNetworkCode(networkInfo.NetworkCode),7); + + error=GSM_SaveBitmapFile(name,&tbitmap); + if (error!=GE_NONE) { + gchar *buf = g_strdup_printf(_("Error saving file\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + } +} + +static void YesLogoFileExportDialog (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + ExportLogoFileMain(exportDialogData.fileName); +} + +static void ExportFileSelected (GtkWidget *w, GtkFileSelection *fs) +{ + static YesNoDialog dialog = { NULL, NULL}; + FILE *f; + gchar err[80]; + + exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (exportDialogData.fileName, "r")) != NULL) + { + fclose (f); + if (dialog.dialog == NULL) + { + CreateYesNoDialog (&dialog, YesLogoFileExportDialog, CancelDialog, GUI_LogosWindow); + gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?")); + g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); + gtk_label_set_text (GTK_LABEL(dialog.text), err); + } + gtk_widget_show (dialog.dialog); + } + else + ExportLogoFileMain(exportDialogData.fileName); +} + +void ImportFileSelected(GtkWidget *w, GtkFileSelection *fs) +{ + GSM_Bitmap tbitmap; + GSM_Error error=0; + + gchar *fileName; + FILE *f; + + fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (fileName, "r")) == NULL) { + gchar *buf = g_strdup_printf(_("Can't open file %s for reading !"),fileName); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + return; + } else fclose(f); + + error=GSM_ReadBitmapFile(fileName,&tbitmap); + if (error!=GE_NONE) { + gchar *buf = g_strdup_printf(_("Error reading file\n(error=%d)"),error); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + return; + } + + exportDialogData.fileName=fileName; + + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),false); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),false); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),false); + + if (tbitmap.type==GSM_OperatorLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonOperator),true); + if (tbitmap.type==GSM_StartupLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonStartup),true); + if (tbitmap.type==GSM_CallerLogo) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttonCaller),true); + + memcpy(&bitmap,&tbitmap,sizeof(GSM_Bitmap)); + + UpdatePoints(drawingArea); +} + +void SaveLogoAs(GtkWidget *widget) +{ + FileSelection=gtk_file_selection_new (_("Save logo as ...")); + + gtk_signal_connect ( + GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button), + "clicked", (GtkSignalFunc) ExportFileSelected, FileSelection); + + gtk_signal_connect_object ( + GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT (FileSelection)); + + gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection)); + + gtk_widget_show(FileSelection); +} + +void SaveLogo(GtkWidget *widget) +{ + if (exportDialogData.fileName==NULL) { + SaveLogoAs(widget); + } else { + ExportLogoFileMain(exportDialogData.fileName); + } +} + +void OpenLogo(GtkWidget *widget) +{ + FileSelection=gtk_file_selection_new (_("Open logo...")); + + gtk_signal_connect ( + GTK_OBJECT (GTK_FILE_SELECTION (FileSelection)->ok_button), + "clicked", (GtkSignalFunc) ImportFileSelected, FileSelection); + + gtk_signal_connect_object ( + GTK_OBJECT(GTK_FILE_SELECTION(FileSelection)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT (FileSelection)); + + gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(FileSelection)); + + gtk_widget_show(FileSelection); +} + +static GtkItemFactoryEntry logosMenuItems[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "O", OpenLogo, 0, NULL}, + { NULL, "S", SaveLogo, 0, NULL}, + { NULL, NULL, SaveLogoAs, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "G", GetNetworkInfoEvent, 0, NULL}, + { NULL, NULL, GetLogoEvent, 0, NULL}, + { NULL, "T", SetLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseLogosWindow, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "C", ClearLogoEvent, 0, NULL}, + { NULL, "I", InvertLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "U", UpLogoEvent, 0, NULL}, + { NULL, "D", DownLogoEvent, 0, NULL}, + { NULL, "L", LeftLogoEvent, 0, NULL}, + { NULL, "R", RightLogoEvent, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "H", FlipHorizontalLogoEvent, 0, NULL}, + { NULL, "V", FlipVerticalLogoEvent, 0, NULL}, +}; + +void InitLogosMenu (void) { + logosMenuItems[0].path = g_strdup(_("/_File")); + logosMenuItems[1].path = g_strdup(_("/File/_Open")); + logosMenuItems[2].path = g_strdup(_("/File/_Save")); + logosMenuItems[3].path = g_strdup(_("/File/Save _as ...")); + logosMenuItems[4].path = g_strdup(_("/File/Sep1")); + logosMenuItems[5].path = g_strdup(_("/File/_Get operator")); + logosMenuItems[6].path = g_strdup(_("/File/Get _logo")); + logosMenuItems[7].path = g_strdup(_("/File/Se_t logo")); + logosMenuItems[8].path = g_strdup(_("/File/Sep2")); + logosMenuItems[9].path = g_strdup(_("/File/_Close")); + logosMenuItems[10].path = g_strdup(_("/_Edit")); + logosMenuItems[11].path = g_strdup(_("/Edit/_Clear")); + logosMenuItems[12].path = g_strdup(_("/Edit/_Invert")); + logosMenuItems[13].path = g_strdup(_("/Edit/Sep3")); + logosMenuItems[14].path = g_strdup(_("/Edit/_Up logo")); + logosMenuItems[15].path = g_strdup(_("/Edit/_Down logo")); + logosMenuItems[16].path = g_strdup(_("/Edit/_Left logo")); + logosMenuItems[17].path = g_strdup(_("/Edit/_Right logo")); + logosMenuItems[18].path = g_strdup(_("/Edit/Sep4")); + logosMenuItems[19].path = g_strdup(_("/Edit/Flip _horizontal")); + logosMenuItems[20].path = g_strdup(_("/Edit/Flip _vertical")); +} + +void GUI_CreateLogosWindow (void) { + int nMenuItems = sizeof (logosMenuItems) / sizeof (logosMenuItems[0]); + GtkAccelGroup *accelGroup; + GtkItemFactory *itemFactory; + GtkWidget *menuBar; + GtkWidget *toolBar, *vertToolBar; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *drawingBox; + GtkWidget *separator; + GdkBitmap *mask; + + GList *glistNetwork = NULL; + + int i = 0; + + previewPixmapWidth = PREVIEWWIDTH; + previewPixmapHeight = PREVIEWHEIGHT; + + InitLogosMenu(); + + /* realize top level window for logos */ + GUI_LogosWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass(GTK_WINDOW(GUI_LogosWindow), "LogosWindow", "Xgnokii"); + gtk_window_set_policy(GTK_WINDOW(GUI_LogosWindow), 1, 1, 1); + gtk_window_set_title(GTK_WINDOW(GUI_LogosWindow), _("Logos")); + gtk_signal_connect(GTK_OBJECT(GUI_LogosWindow), "delete_event", + GTK_SIGNAL_FUNC(DeleteEvent), NULL); + gtk_widget_realize(GUI_LogosWindow); + + CreateErrorDialog(&errorDialog, GUI_LogosWindow); + CreateInfoDialog(&infoDialog, GUI_LogosWindow); + + accelGroup = gtk_accel_group_new(); + gtk_accel_group_attach(accelGroup, GTK_OBJECT(GUI_LogosWindow)); + + /* create main vbox */ + vbox = gtk_vbox_new(FALSE, 1); + gtk_container_add(GTK_CONTAINER(GUI_LogosWindow), vbox); + gtk_widget_show(vbox); + + itemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "
", accelGroup); + gtk_item_factory_create_items(itemFactory, nMenuItems, logosMenuItems, NULL); + menuBar = gtk_item_factory_get_widget(itemFactory, "
"); + + gtk_box_pack_start(GTK_BOX(vbox), menuBar, FALSE, FALSE, 0); + gtk_widget_show(menuBar); + + /* toolbar */ + toolBar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolBar), GTK_RELIEF_NORMAL); + gtk_toolbar_set_style(GTK_TOOLBAR(toolBar), GTK_TOOLBAR_ICONS); + + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Clear logo"), NULL, + NewPixmap(New_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)ClearLogoEvent, toolBar); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); + + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Get logo"), NULL, + NewPixmap(Read_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)GetLogoEvent, toolBar); + + gtk_toolbar_append_item(GTK_TOOLBAR(toolBar), NULL, _("Set logo"), NULL, + NewPixmap(Send_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)SetLogoEvent, toolBar); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolBar), NULL, _("Import from file"), NULL, + NewPixmap(Open_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) OpenLogo, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolBar), NULL, _("Export to file"), NULL, + NewPixmap(Save_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) SaveLogo, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolBar)); + + buttonStartup = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, NULL, NULL, _("Startup logo"), + "", NewPixmap(Startup_logo_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); + + buttonOperator = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonStartup, NULL, _("Operator logo"), + "", NewPixmap(Operator_logo_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); + + buttonCaller = gtk_toolbar_append_element(GTK_TOOLBAR(toolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, + buttonOperator, + NULL, _("Caller logo"), + "", NewPixmap(Caller_logo_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(LogoTypeEvent), NULL); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolBar)); + + networkCombo = gtk_combo_new(); + gtk_combo_set_use_arrows_always(GTK_COMBO(networkCombo), 1); + while (strcmp(GSM_Networks[i].Name, "unknown")) + glistNetwork = g_list_insert_sorted(glistNetwork, GSM_Networks[i++].Name, + (GCompareFunc)strcmp); + gtk_combo_set_popdown_strings(GTK_COMBO(networkCombo), glistNetwork); + gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(networkCombo)->entry), FALSE); + gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar), networkCombo, "", ""); + gtk_widget_show(networkCombo); + g_list_free(glistNetwork); + + callerCombo = gtk_combo_new(); + gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(callerCombo)->entry), FALSE); + gtk_toolbar_append_widget(GTK_TOOLBAR(toolBar), callerCombo, "", ""); + gtk_widget_show(callerCombo); + + gtk_box_pack_start(GTK_BOX(vbox), toolBar, FALSE, FALSE, 0); + gtk_widget_show(toolBar); + + /* vertical separator */ + separator = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(separator),FALSE,FALSE,0); + + /* create horizontal box for preview and drawing areas */ + hbox = gtk_hbox_new(FALSE,5); + gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); + gtk_widget_show(hbox); + + /* set GSM_Bitmap width,height needed for creating drawinArea + * we are starting, default is startupLogo + */ + bitmap.type = GSM_StartupLogo; + bitmap.height = 48; + bitmap.width = 84; + bitmap.size = bitmap.height * bitmap.width / 8; + drawingAreaWidth = bitmap.width * (POINTSIZE+1)+1; + drawingAreaHeight = bitmap.height * (POINTSIZE+1)+1; + + /* previewArea */ + previewPixmap = GetPreviewPixmap(GUI_LogosWindow); + + if (previewPixmap != NULL) { + previewArea = gtk_drawing_area_new(); + gtk_drawing_area_size(GTK_DRAWING_AREA(previewArea), + previewPixmapWidth,previewPixmapHeight); + + greenPixelPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window, + &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL], + Green_pixel_xpm); + + gtk_signal_connect(GTK_OBJECT(previewArea),"expose_event", + (GtkSignalFunc)PreviewAreaExposeEvent,NULL); + gtk_signal_connect(GTK_OBJECT(previewArea),"configure_event", + (GtkSignalFunc)PreviewAreaConfigureEvent,NULL); + gtk_signal_connect(GTK_OBJECT(previewArea),"button_press_event", + (GtkSignalFunc)PreviewAreaButtonPressEvent,NULL); + + gtk_widget_set_events(previewArea,GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK ); + + gtk_box_pack_start(GTK_BOX(hbox),previewArea,FALSE,FALSE,0); + gtk_widget_show(previewArea); + + /* clear battery, signal, menu & names from preview phone */ + UpdatePreviewPoints (); + + } else previewAvailable = 0; + + /* drawingArea */ + greenPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window, + &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Green_point_xpm); + blackPointPixmap = gdk_pixmap_create_from_xpm_d(GUI_LogosWindow->window, + &mask,&GUI_LogosWindow->style->bg[GTK_STATE_NORMAL],Black_point_xpm); + + drawingBox = gtk_vbox_new(FALSE,3); + gtk_box_pack_start(GTK_BOX(hbox),drawingBox,FALSE,FALSE,0); + gtk_widget_show(drawingBox); + + drawingArea = gtk_drawing_area_new(); + gtk_drawing_area_size(GTK_DRAWING_AREA(drawingArea), + drawingAreaWidth,drawingAreaHeight); + + gtk_signal_connect(GTK_OBJECT(drawingArea),"configure_event", + (GtkSignalFunc)DrawingAreaConfigureEvent,NULL); + gtk_signal_connect(GTK_OBJECT(drawingArea),"expose_event", + (GtkSignalFunc)DrawingAreaExposeEvent,NULL); + gtk_signal_connect(GTK_OBJECT(drawingArea),"button_press_event", + (GtkSignalFunc)DrawingAreaButtonPressEvent,NULL); + gtk_signal_connect(GTK_OBJECT(drawingArea),"button_release_event", + (GtkSignalFunc)DrawingAreaButtonReleaseEvent,NULL); + gtk_signal_connect(GTK_OBJECT(drawingArea),"motion_notify_event", + (GtkSignalFunc)DrawingAreaMotionNotifyEvent,NULL); + + gtk_widget_set_events(drawingArea,GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); + + gtk_box_pack_start(GTK_BOX(drawingBox),drawingArea,FALSE,FALSE,0); + gtk_widget_show(drawingArea); + + /* vertical tool bar */ + vertToolBar = gtk_toolbar_new(GTK_ORIENTATION_VERTICAL,GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief(GTK_TOOLBAR(vertToolBar),GTK_RELIEF_NORMAL); + gtk_toolbar_set_style(GTK_TOOLBAR(vertToolBar),GTK_TOOLBAR_ICONS); + + buttonBrush = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, NULL, NULL, _("Brush tool"), + "", NewPixmap(Tool_brush_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); + + buttonLine = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonBrush, NULL, _("Line tool"), + "", NewPixmap(Tool_line_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); + + buttonRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonLine, NULL, _("Rectangle tool"), + "", NewPixmap(Tool_rectangle_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); + + buttonFilledRectangle = gtk_toolbar_append_element(GTK_TOOLBAR(vertToolBar), + GTK_TOOLBAR_CHILD_RADIOBUTTON, buttonRectangle, NULL, + _("Filled rectangle tool"), + "", NewPixmap(Tool_filled_rectangle_xpm, + GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + GTK_SIGNAL_FUNC(ToolTypeEvent), NULL); + + gtk_toolbar_append_space(GTK_TOOLBAR(vertToolBar)); + + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Invert logo"), NULL, + NewPixmap(Edit_invert_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)InvertLogoEvent, vertToolBar); + + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Horizontal flip"), NULL, + NewPixmap(Edit_flip_horizontal_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)FlipHorizontalLogoEvent, vertToolBar); + + gtk_toolbar_append_item(GTK_TOOLBAR(vertToolBar), NULL, _("Vertical flip"), NULL, + NewPixmap(Edit_flip_vertical_xpm, GUI_LogosWindow->window, + &GUI_LogosWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc)FlipVerticalLogoEvent, vertToolBar); + + + gtk_box_pack_start(GTK_BOX(hbox),vertToolBar,FALSE,FALSE,0); + gtk_widget_show(vertToolBar); + + GUIEventAdd(GUI_EVENT_CALLERS_GROUPS_CHANGED,&GUI_RefreshLogosGroupsCombo); +} + +void GUI_RefreshLogosGroupsCombo (void) { + GList *callerList = NULL; + int i; + + for (i = 0;i < 6;i++) + callerList = g_list_insert(callerList,xgnokiiConfig.callerGroups[i],i); + + gtk_combo_set_popdown_strings(GTK_COMBO(callerCombo),callerList); + g_list_free(callerList); + + if (!callersGroupsInitialized) callersGroupsInitialized = 1; +} + +void GUI_ShowLogosWindow (void) { + /* Set network name taken from the phone */ + GetNetworkInfoEvent(NULL); + /* if phone support caller groups, read callerGroups names */ + if (phoneMonitor.supported & PM_CALLERGROUP) { + if (xgnokiiConfig.callerGroups[0] == NULL) { + GUI_Refresh(); + GUI_InitCallerGroupsInf (); + } + if (!callersGroupsInitialized) GUI_RefreshLogosGroupsCombo (); + gtk_widget_show(buttonCaller); + gtk_widget_show(callerCombo); + } else { + /* if not supported, hide widget for handling callerGroups */ + gtk_widget_hide(buttonCaller); + gtk_widget_hide(callerCombo); + } + + /* Call to reset Startup logo size */ + LogoTypeEvent(GUI_LogosWindow); + + gtk_widget_show(GUI_LogosWindow); + + if (!previewAvailable && showPreviewErrorDialog) { + gchar *buf = g_strdup(_("Load preview pixmap error, feature disabled.")); + gtk_label_set_text(GTK_LABEL(errorDialog.text),buf); + gtk_widget_show(errorDialog.dialog); + g_free(buf); + + showPreviewErrorDialog = 0; + } +} diff --git a/xgnokii/xgnokii_logos.h b/xgnokii/xgnokii_logos.h new file mode 100644 index 0000000..9d7c780 --- /dev/null +++ b/xgnokii/xgnokii_logos.h @@ -0,0 +1,39 @@ +#ifndef XGNOKII_LOGOS_H +#define XGNOKII_LOGOS_H + +/* drawable point size - depends on .xpm file */ +#define POINTSIZE 5 + +/* maximal size for drawing area */ +#define MAXWIDTH 82 +#define MAXHEIGHT 48 + +/* where to draw preview logos in previewPixmap */ +#define PREVIEWSTARTX 28 +#define PREVIEWSTARTY 160 + +#define PREVIEWWIDTH 138 +#define PREVIEWHEIGHT 289 + +/* relative movement caller & operator logo from startuplogo */ +#define PREVIEWJUMPX 6 +#define PREVIEWJUMPY 6 + +#define TOOL_BRUSH 0 +#define TOOL_LINE 1 +#define TOOL_RECTANGLE 2 +#define TOOL_FILLED_RECTANGLE 3 +#define TOOL_CIRCLE 4 +#define TOOL_FILLED_CIRCLE 5 +#define TOOL_ELIPSE 6 +#define TOOL_FILLED_ELIPSE 7 +#define TOOL_TEXT 8 + +extern void GUI_ShowLogosWindow (void); +extern void GUI_CreateLogosWindow (void); + +/* this is called from optionsApplyCallback when some changes + * caller groups names */ +extern void GUI_RefreshLogosGroupsCombo (void); + +#endif diff --git a/xgnokii/xgnokii_lowlevel.c b/xgnokii/xgnokii_lowlevel.c new file mode 100644 index 0000000..af0791f --- /dev/null +++ b/xgnokii/xgnokii_lowlevel.c @@ -0,0 +1,1104 @@ +/* + + $Id$ + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:33 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.19 2001/09/14 13:09:26 pkot + Xgnokii calendar updates + + Revision 1.18 2001/06/20 21:27:36 pkot + IrDA patch (Martin Jancar) + + Revision 1.17 2001/06/10 11:40:06 machek + xgnokii converted to new structure w.r.t. SMS messages. + + Revision 1.16 2001/05/24 20:47:31 chris + More updating of 7110 code and some of xgnokii_lowlevel changed over. + + Revision 1.15 2001/03/23 08:24:57 ja + New preview for 6210 in xgnokii's logos module. + + Revision 1.14 2001/03/21 23:36:09 chris + Added the statemachine + This will break gnokii --identify and --monitor except for 6210/7110 + + Revision 1.13 2001/03/05 10:42:03 ja + Pavel Machek's vcard and finegrained indicators patch. + + Revision 1.12 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + Revision 1.11 2001/01/29 15:22:20 machek + Use integer as bitfield instead of struct of int:1. + + Be able to read phonebook saved in gnokii format from xgnokii. + + Revision 1.10 2001/01/17 02:54:56 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.9 2001/01/15 21:10:20 ja + Better status reporting in xgnokii, fixed phone capabilities detection in xgnokii. + + +*/ + +#include +#include +#include +#include +#include "misc.h" +#include "gsm-common.h" +#include "gsm-api.h" +#include "fbus-6110.h" +#include "fbus-3810.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii.h" +#include "gsm-statemachine.h" +//#include "xgnokii_common.h" + +pthread_t monitor_th; +PhoneMonitor phoneMonitor; +pthread_mutex_t memoryMutex; +pthread_cond_t memoryCond; +pthread_mutex_t calendarMutex; +pthread_cond_t calendarCond; +pthread_mutex_t smsMutex; +pthread_mutex_t sendSMSMutex; +pthread_cond_t sendSMSCond; +pthread_mutex_t callMutex; +pthread_mutex_t netMonMutex; +pthread_mutex_t speedDialMutex; +pthread_cond_t speedDialCond; +pthread_mutex_t callerGroupMutex; +pthread_cond_t callerGroupCond; +pthread_mutex_t smsCenterMutex; +pthread_cond_t smsCenterCond; +pthread_mutex_t alarmMutex; +pthread_cond_t alarmCond; +pthread_mutex_t getBitmapMutex; +pthread_cond_t getBitmapCond; +pthread_mutex_t setBitmapMutex; +pthread_cond_t setBitmapCond; +pthread_mutex_t getNetworkInfoMutex; +pthread_cond_t getNetworkInfoCond; +static pthread_mutex_t eventsMutex; +static GSList *ScheduledEvents = NULL; + +static GSM_Statemachine statemachine; +/* FIXME - don't really know what should own the statemachine in */ +/* the xgnokii scheme of things - Chris */ + + +inline void GUI_InsertEvent (PhoneEvent *event) +{ +# ifdef XDEBUG + g_print ("Inserting Event: %d\n", event->event); +# endif + pthread_mutex_lock (&eventsMutex); + ScheduledEvents = g_slist_prepend (ScheduledEvents, event); + pthread_mutex_unlock (&eventsMutex); +} + + +inline static PhoneEvent *RemoveEvent (void) +{ + GSList *list; + PhoneEvent *event = NULL; + + pthread_mutex_lock (&eventsMutex); + list = g_slist_last (ScheduledEvents); + if (list) + { + event = (PhoneEvent *) list->data; + ScheduledEvents = g_slist_remove_link (ScheduledEvents, list); + g_slist_free_1 (list); + } + pthread_mutex_unlock (&eventsMutex); + + return (event); +} + + +static void InitModelInf (void) +{ + gchar buf[64]; + GSM_Error error; + register gint i = 0; + GSM_Data data; + + GSM_DataClear(&data); + data.Model=buf; + while ((error = SM_Functions(GOP_GetModel,&data,&statemachine)) != GE_NONE && i++ < 15) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.model); + phoneMonitor.phone.version = g_strdup (buf); + phoneMonitor.phone.model = GetModel (buf); + if (phoneMonitor.phone.model == NULL) + phoneMonitor.phone.model = g_strdup (_("unknown")); + + phoneMonitor.supported = GetPhoneModel(buf)->flags; + } + + i = 0; + data.Revision=buf; + while ((error = SM_Functions(GOP_GetRevision,&data,&statemachine)) != GE_NONE && i++ < 5) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.revision); + phoneMonitor.phone.revision = g_strdup (buf); + } + + i = 0; + data.Imei=buf; + while ((error = SM_Functions(GOP_GetImei,&data,&statemachine)) != GE_NONE && i++ < 5) + sleep(1); + + if (error == GE_NONE) + { + g_free (phoneMonitor.phone.imei); + phoneMonitor.phone.imei = g_strdup (buf); + } + + +#ifdef XDEBUG + g_print ("Version: %s\n", phoneMonitor.phone.version); + g_print ("Model: %s\n", phoneMonitor.phone.model); + g_print ("IMEI: %s\n", phoneMonitor.phone.imei); + g_print ("Revision: %s\n", phoneMonitor.phone.revision); +#endif +} + + +static GSM_Error fbusinit(bool enable_monitoring) +{ + int count=0; + static GSM_Error error=GE_NOLINK; + GSM_ConnectionType connection=GCT_Serial; + + if (!strcmp(xgnokiiConfig.connection, "infrared")) + connection = GCT_Infrared; + + if (!strcmp(xgnokiiConfig.connection, "irda")) + connection = GCT_Irda; + + /* Initialise the code for the GSM interface. */ + + if (error == GE_NOLINK) + error = GSM_Initialise (xgnokiiConfig.model, xgnokiiConfig.port, + xgnokiiConfig.initlength, connection, RLP_DisplayF96Frame, &statemachine); + +#ifdef XDEBUG + g_print ("fbusinit: error %d\n", error); +#endif + + if (error != GE_NONE) { + g_print (_("GSM/FBUS init failed! (Unknown model ?). Quitting.\n")); + /* FIXME: should popup some message... */ + return (error); + } + + while (count++ < 40 && *GSM_LinkOK == false) + usleep(50000); +#ifdef XDEBUG + g_print("After usleep. GSM_LinkOK: %d\n", *GSM_LinkOK); +#endif + + if (*GSM_LinkOK == true) + InitModelInf (); + + return *GSM_LinkOK; +} + + +void GUI_InitPhoneMonitor (void) +{ + phoneMonitor.phone.model = g_strdup (_("unknown")); + phoneMonitor.phone.version = phoneMonitor.phone.model; + phoneMonitor.phone.revision = g_strdup (_("unknown")); + phoneMonitor.phone.imei = g_strdup (_("unknown")); + phoneMonitor.supported = 0; + phoneMonitor.rfLevel = phoneMonitor.batteryLevel = -1; + phoneMonitor.powerSource = GPS_BATTERY; + phoneMonitor.working = NULL; + phoneMonitor.alarm = FALSE; + phoneMonitor.sms.unRead = phoneMonitor.sms.number = 0; + phoneMonitor.sms.messages = NULL; + phoneMonitor.call.callInProgress = CS_Idle; + *phoneMonitor.call.callNum = '\0'; + phoneMonitor.netmonitor.number = 0; + *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 = + *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0'; + pthread_mutex_init (&memoryMutex, NULL); + pthread_cond_init (&memoryCond, NULL); + pthread_mutex_init (&calendarMutex, NULL); + pthread_cond_init (&calendarCond, NULL); + pthread_mutex_init (&smsMutex, NULL); + pthread_mutex_init (&sendSMSMutex, NULL); + pthread_cond_init (&sendSMSCond, NULL); + pthread_mutex_init (&callMutex, NULL); + pthread_mutex_init (&eventsMutex, NULL); + pthread_mutex_init (&callMutex, NULL); + pthread_mutex_init (&netMonMutex, NULL); + pthread_mutex_init (&speedDialMutex, NULL); + pthread_cond_init (&speedDialCond, NULL); + pthread_mutex_init (&callerGroupMutex, NULL); + pthread_cond_init (&callerGroupCond, NULL); + pthread_mutex_init (&smsCenterMutex, NULL); + pthread_cond_init (&smsCenterCond, NULL); + pthread_mutex_init (&getBitmapMutex, NULL); + pthread_cond_init (&getBitmapCond, NULL); + pthread_mutex_init (&setBitmapMutex, NULL); + pthread_cond_init (&setBitmapCond, NULL); + pthread_mutex_init (&getNetworkInfoMutex, NULL); + pthread_cond_init (&getNetworkInfoCond, NULL); +} + + +static inline void FreeElement (gpointer data, gpointer userData) +{ + g_free ((GSM_SMSMessage *) data); +} + + +static inline void FreeArray (GSList **array) +{ + if (*array) + { + g_slist_foreach (*array, FreeElement, NULL); + g_slist_free (*array); + *array = NULL; + } +} + + +static void RefreshSMS (const gint number) +{ + GSM_Error error; + GSM_SMSMessage *msg; + register gint i; + +# ifdef XDEBUG + g_print ("RefreshSMS is running...\n"); +# endif + + pthread_mutex_lock (&smsMutex); + FreeArray (&(phoneMonitor.sms.messages)); + phoneMonitor.sms.number = 0; + pthread_mutex_unlock (&smsMutex); + + i = 0; + while (1) + { + GSM_Data gdat; + GSM_DataClear(&gdat); + msg = g_malloc (sizeof (GSM_SMSMessage)); + msg->MemoryType = GMT_SM; + msg->Location = ++i; + gdat.SMSMessage = msg; + + if ((error = SM_Functions(GOP_GetSMS, &gdat, &statemachine)) == GE_NONE) + { + pthread_mutex_lock (&smsMutex); + phoneMonitor.sms.messages = g_slist_append (phoneMonitor.sms.messages, msg); + phoneMonitor.sms.number++; + pthread_mutex_unlock (&smsMutex); + if (phoneMonitor.sms.number == number) + return; + } + else if (error == GE_INVALIDSMSLOCATION) /* All positions are readed */ + { + g_free (msg); + break; + } + else + g_free (msg); + + usleep (750000); + } +} + + +static gint A_GetMemoryStatus (gpointer data) +{ + GSM_Error error; + D_MemoryStatus *ms = (D_MemoryStatus *) data; + GSM_Data gdat; + + error = ms->status = GE_UNKNOWN; + + if (ms) + { + GSM_DataClear(&gdat); + pthread_mutex_lock (&memoryMutex); + gdat.MemoryStatus=&(ms->memoryStatus); + error = ms->status = SM_Functions(GOP_GetMemoryStatus,&gdat,&statemachine); + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + } + + return (error); +} + + +static gint A_GetMemoryLocation (gpointer data) +{ + GSM_Error error; + D_MemoryLocation *ml = (D_MemoryLocation *) data; + GSM_Data gdat; + + error = ml->status = GE_UNKNOWN; + + if (ml) + { + GSM_DataClear(&gdat); + pthread_mutex_lock (&memoryMutex); + gdat.PhonebookEntry=(ml->entry); + error = ml->status = SM_Functions(GOP_ReadPhonebook,&gdat,&statemachine); + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + } + + return (error); +} + + +static gint A_GetMemoryLocationAll (gpointer data) +{ + GSM_PhonebookEntry entry; + GSM_Error error; + D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data; + register gint i; + GSM_Data gdat; + + error = mla->status = GE_NONE; + entry.MemoryType = mla->type; + GSM_DataClear(&gdat); + gdat.PhonebookEntry=&entry; + + pthread_mutex_lock (&memoryMutex); + for (i = mla->min; i <= mla->max; i++) + { + entry.Location = i; + error = SM_Functions(GOP_ReadPhonebook,&gdat,&statemachine); + if (error != GE_NONE && error!=GE_INVALIDPHBOOKLOCATION) + { + gint err_count = 0; + + while (error != GE_NONE) + { + g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"), + __FILE__, __LINE__, i, entry.MemoryType, error); + if (err_count++ > 3) + { + mla->ReadFailed (i); + mla->status = error; + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + return (error); + } + + error = SM_Functions(GOP_ReadPhonebook,&gdat,&statemachine); + sleep (2); + } + } + + /* If the phonebook location was invalid - just fill up the rest */ + /* This works on a 7110 anyway...*/ + + if (error==GE_INVALIDPHBOOKLOCATION) { + entry.Empty=true; + entry.Name[0]=0; + entry.Number[0]=0; + for (i = mla->min; i <= mla->max; i++) { + error = mla->InsertEntry (&entry); + if (error != GE_NONE) break; + } + } + + error = mla->InsertEntry (&entry); + if (error != GE_NONE) + break; + } + mla->status = error; + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + return (error); +} + + +static gint A_WriteMemoryLocation (gpointer data) +{ + GSM_Error error; + D_MemoryLocation *ml = (D_MemoryLocation *) data; + GSM_Data gdat; + + error = ml->status = GE_UNKNOWN; + + GSM_DataClear(&gdat); + gdat.PhonebookEntry=(ml->entry); + + if (ml) + { + pthread_mutex_lock (&memoryMutex); + error = ml->status = SM_Functions(GOP_WritePhonebook,&gdat,&statemachine); + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + } + + return (error); +} + + +static gint A_WriteMemoryLocationAll (gpointer data) +{ +/* GSM_PhonebookEntry entry; */ + GSM_Error error; + D_MemoryLocationAll *mla = (D_MemoryLocationAll *) data; +/* register gint i; +*/ + error = mla->status = GE_NONE; +/* entry.MemoryType = mla->type; + + pthread_mutex_lock (&memoryMutex); + for (i = mla->min; i <= mla->max; i++) + { + entry.Location = i; + error = GSM->GetMemoryLocation (&entry); + if (error != GE_NONE) + { + gint err_count = 0; + + while (error != GE_NONE) + { + g_print (_("%s: line %d: Can't get memory entry number %d from memory %d! %d\n"), + __FILE__, __LINE__, i, entry.MemoryType, error); + if (err_count++ > 3) + { + mla->ReadFailed (i); + mla->status = error; + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); + return (error); + } + + error = GSM->GetMemoryLocation (&entry); + sleep (2); + } + } + error = mla->InsertEntry (&entry); + if (error != GE_NONE) + break; + } + mla->status = error; + pthread_cond_signal (&memoryCond); + pthread_mutex_unlock (&memoryMutex); */ + return (error); +} + + +static gint A_GetCalendarNote (gpointer data) +{ + GSM_Error error; + D_CalendarNote *cn = (D_CalendarNote *) data; + + error = cn->status = GE_UNKNOWN; + + if (cn) + { + pthread_mutex_lock (&calendarMutex); + error = cn->status = GSM->GetCalendarNote (cn->entry); + pthread_cond_signal (&calendarCond); + pthread_mutex_unlock (&calendarMutex); + } + + return (error); +} + + +static gint A_GetCalendarNoteAll (gpointer data) +{ + GSM_CalendarNote entry; + D_CalendarNoteAll *cna = (D_CalendarNoteAll *) data; + GSM_Error e; + register gint i = 1; + + pthread_mutex_lock (&calendarMutex); + while (1) + { + entry.Location = i++; + + if ((e = GSM->GetCalendarNote (&entry)) != GE_NONE) + break; + + if (cna->InsertEntry (&entry) != GE_NONE) + break; + } + + pthread_mutex_unlock (&calendarMutex); + g_free (cna); + if (e == GE_INVALIDCALNOTELOCATION) + return (GE_NONE); + else + return (e); +} + + +static gint A_WriteCalendarNote (gpointer data) +{ + GSM_Error error; + D_CalendarNote *cn = (D_CalendarNote *) data; + + error = cn->status = GE_UNKNOWN; + + if (cn) + { + pthread_mutex_lock (&calendarMutex); + error = cn->status = GSM->WriteCalendarNote (cn->entry); + pthread_cond_signal (&calendarCond); + pthread_mutex_unlock (&calendarMutex); + } + + return (error); +} + + +static gint A_DeleteCalendarNote (gpointer data) +{ + GSM_CalendarNote *note = (GSM_CalendarNote *) data; + GSM_Error error = GE_UNKNOWN; + + if (note) + { + error = GSM->DeleteCalendarNote (note); + g_free (note); + } + + return (error); +} + +static gint A_GetCallerGroup (gpointer data) +{ + GSM_Bitmap bitmap; + GSM_Error error; + D_CallerGroup *cg = (D_CallerGroup *) data; + GSM_Data gdat; + + error = cg->status = GE_UNKNOWN; + + if (cg) + { + bitmap.type = GSM_CallerLogo; + bitmap.number = cg->number; + + pthread_mutex_lock (&callerGroupMutex); + GSM_DataClear(&gdat); + gdat.Bitmap=&bitmap; + error = cg->status = SM_Functions(GOP_GetBitmap,&gdat,&statemachine); + strncpy (cg->text, bitmap.text, 256); + cg->text[255] = '\0'; + pthread_cond_signal (&callerGroupCond); + pthread_mutex_unlock (&callerGroupMutex); + } + + return (error); +} + + +static gint A_SendCallerGroup (gpointer data) +{ + GSM_Bitmap bitmap; + D_CallerGroup *cg = (D_CallerGroup *) data; + GSM_Error error; + + if (!cg) + return (GE_UNKNOWN); + + bitmap.type = GSM_CallerLogo; + bitmap.number = cg->number; + if ((error = GSM->GetBitmap (&bitmap)) != GE_NONE) + { + g_free (cg); + return (error); + } + strncpy (bitmap.text, cg->text, 256); + bitmap.text[255] = '\0'; + g_free (cg); + return (GSM->SetBitmap (&bitmap)); +} + + +static gint A_GetSMSCenter (gpointer data) +{ + D_SMSCenter *c = (D_SMSCenter *) data; + GSM_Error error; + + error = c->status = GE_UNKNOWN; + if (c) + { + pthread_mutex_lock (&smsCenterMutex); + error = c->status = GSM->GetSMSCenter (c->center); + pthread_cond_signal (&smsCenterCond); + pthread_mutex_unlock (&smsCenterMutex); + } + + return (error); +} + + +static gint A_SetSMSCenter (gpointer data) +{ + D_SMSCenter *c = (D_SMSCenter *) data; + GSM_Error error; + + error = c->status = GE_UNKNOWN; + if (c) + { + //pthread_mutex_lock (&smsCenterMutex); + error = c->status = GSM->SetSMSCenter (c->center); + g_free (c); + //pthread_cond_signal (&smsCenterCond); + //pthread_mutex_unlock (&smsCenterMutex); + } + + return (error); +} + + +static gint A_SendSMSMessage (gpointer data) +{ + D_SMSMessage *d = (D_SMSMessage *) data; + GSM_Error error; + + error = d->status = GE_UNKNOWN; + if (d) + { + pthread_mutex_lock (&sendSMSMutex); + error = d->status = GSM->SendSMSMessage (d->sms, 0); + pthread_cond_signal (&sendSMSCond); + pthread_mutex_unlock (&sendSMSMutex); + } + + if (d->status == GE_SMSSENDOK) + return (GE_NONE); + else + return (error); +} + + +static gint A_DeleteSMSMessage (gpointer data) +{ + GSM_SMSMessage *sms = (GSM_SMSMessage *) data; + GSM_Error error = GE_UNKNOWN; + + if (sms) + { + GSM_Data gdat; + GSM_DataClear(&gdat); + gdat.SMSMessage = sms; + error = SM_Functions(GOP_DeleteSMS, &gdat, &statemachine); + g_free (sms); + } + + return (error); +} + + +static gint A_GetSpeedDial (gpointer data) +{ + D_SpeedDial *d = (D_SpeedDial *) data; + GSM_Error error; + + error = d->status = GE_UNKNOWN; + + if (d) + { + pthread_mutex_lock (&speedDialMutex); + error = d->status = GSM->GetSpeedDial (&(d->entry)); + pthread_cond_signal (&speedDialCond); + pthread_mutex_unlock (&speedDialMutex); + } + + return (error); +} + + +static gint A_SendSpeedDial (gpointer data) +{ + D_SpeedDial *d = (D_SpeedDial *) data; + GSM_Error error; + + error = d->status = GE_UNKNOWN; + + if (d) + { + //pthread_mutex_lock (&speedDialMutex); + error = d->status = GSM->SetSpeedDial (&(d->entry)); + g_free (d); + //pthread_cond_signal (&speedDialCond); + //pthread_mutex_unlock (&speedDialMutex); + } + + return (error); +} + + +static gint A_SendDTMF (gpointer data) +{ + gchar *buf = (gchar *) data; + GSM_Error error = GE_UNKNOWN; + + if (buf) + { + error = GSM->SendDTMF (buf); + g_free (buf); + } + + return (error); +} + + +static gint A_NetMonOnOff (gpointer data) +{ + gchar screen[50]; + gint mode = GPOINTER_TO_INT (data); + GSM_Error error = GE_UNKNOWN; + + if (mode) + error = GSM->NetMonitor (0xf3, screen); + else + error = GSM->NetMonitor (0xf1, screen); + + return (error); +} + + +static gint A_NetMonitor (gpointer data) +{ + gint number = GPOINTER_TO_INT (data); + + if (data == 0) + phoneMonitor.netmonitor.number = 0; + else + phoneMonitor.netmonitor.number = number; + + return (0); +} + + +static gint A_DialVoice (gpointer data) +{ + gchar *number = (gchar *) data; + GSM_Error error = GE_UNKNOWN; + + if (number) + { + error = GSM->DialVoice (number); + g_free (number); + } + + return (error); +} + + +static gint A_GetAlarm (gpointer data) +{ + D_Alarm *a = (D_Alarm *) data; + GSM_Error error; + + error = GE_UNKNOWN; + + if (a) + { + a->status = GE_UNKNOWN; + pthread_mutex_lock (&alarmMutex); + error = a->status = GSM->GetAlarm (0, &(a->time)); + pthread_cond_signal (&alarmCond); + pthread_mutex_unlock (&alarmMutex); + } + + return (error); +} + + +static gint A_SetAlarm (gpointer data) +{ + D_Alarm *a = (D_Alarm *) data; + GSM_Error error; + + error = a->status = GE_UNKNOWN; + + if (a) + { + error = a->status = GSM->SetAlarm (0, &(a->time)); + g_free (a); + } + + return (error); +} + + +static gint A_SendKeyStroke (gpointer data) +{ + gchar *buf = (gchar *) data; + + if (buf) + { + FB61_TX_SendMessage(0x07, 0x0c, buf); + g_free (buf); + } + + return (0); +} + +static gint A_GetBitmap(gpointer data) { + GSM_Error error; + D_Bitmap *d = (D_Bitmap *)data; + GSM_Data gdat; + + GSM_DataClear(&gdat); + pthread_mutex_lock(&getBitmapMutex); + gdat.Bitmap=d->bitmap; + error = d->status = SM_Functions(GOP_GetBitmap,&gdat,&statemachine); + pthread_cond_signal(&getBitmapCond); + pthread_mutex_unlock(&getBitmapMutex); + return error; +} + +static gint A_SetBitmap(gpointer data) { + GSM_Error error; + D_Bitmap *d = (D_Bitmap *)data; + GSM_Bitmap bitmap; + GSM_Data gdat; + + GSM_DataClear(&gdat); + pthread_mutex_lock(&setBitmapMutex); + if (d->bitmap->type == GSM_CallerLogo) { + bitmap.type = d->bitmap->type; + bitmap.number = d->bitmap->number; + gdat.Bitmap=&bitmap; + error = d->status = SM_Functions(GOP_GetBitmap,&gdat,&statemachine); + if (error == GE_NONE) { + strncpy(d->bitmap->text,bitmap.text,sizeof(bitmap.text)); + d->bitmap->ringtone = bitmap.ringtone; + gdat.Bitmap=d->bitmap; + error = d->status = SM_Functions(GOP_SetBitmap,&gdat,&statemachine); + } + } else { + gdat.Bitmap=d->bitmap; + error = d->status = SM_Functions(GOP_SetBitmap,&gdat,&statemachine); + } + pthread_cond_signal(&setBitmapCond); + pthread_mutex_unlock(&setBitmapMutex); + return error; +} + +static gint A_GetNetworkInfo(gpointer data) { + GSM_Error error; + D_NetworkInfo *d = (D_NetworkInfo *)data; + GSM_Data gdat; + + GSM_DataClear(&gdat); + + pthread_mutex_lock(&getNetworkInfoMutex); + gdat.NetworkInfo=d->info; + error = d->status = SM_Functions(GOP_GetNetworkInfo,&gdat,&statemachine); + pthread_cond_signal(&getNetworkInfoCond); + pthread_mutex_unlock(&getNetworkInfoMutex); + return error; +} + +static gint A_Exit (gpointer data) +{ + pthread_exit (0); + return (0); /* just to be proper */ +} + + +gint (*DoAction[])(gpointer) = { + A_GetMemoryStatus, + A_GetMemoryLocation, + A_GetMemoryLocationAll, + A_WriteMemoryLocation, + A_WriteMemoryLocationAll, + A_GetCalendarNote, + A_GetCalendarNoteAll, + A_WriteCalendarNote, + A_DeleteCalendarNote, + A_GetCallerGroup, + A_SendCallerGroup, + A_GetSMSCenter, + A_SetSMSCenter, + A_SendSMSMessage, + A_DeleteSMSMessage, + A_GetSpeedDial, + A_SendSpeedDial, + A_SendDTMF, + A_NetMonOnOff, + A_NetMonitor, + A_DialVoice, + A_GetAlarm, + A_SetAlarm, + A_SendKeyStroke, + A_GetBitmap, + A_SetBitmap, + A_GetNetworkInfo, + A_Exit +}; + + +void *GUI_Connect (void *a) +{ + /* Define required unit types for RF and Battery level meters. */ + GSM_RFUnits rf_units = GRF_Percentage; + GSM_BatteryUnits batt_units = GBU_Percentage; + + GSM_DateTime Alarm; + GSM_SMSStatus SMSStatus = {0, 0}; + gchar number[INCALL_NUMBER_LENGTH]; + PhoneEvent *event; + GSM_Error error; + gint status; + GSM_Data data; + + GSM_DataClear(&data); + +# ifdef XDEBUG + g_print ("Initializing connection...\n"); +# endif + + phoneMonitor.working = _("Connecting..."); + while (!fbusinit (true)) + sleep (1); + +# ifdef XDEBUG + g_print ("Phone connected. Starting monitoring...\n"); +# endif + + sleep(1); + + data.RFLevel=&phoneMonitor.rfLevel; + data.RFUnits=&rf_units; + data.PowerSource=&phoneMonitor.powerSource; + data.BatteryUnits=&batt_units; + data.BatteryLevel=&phoneMonitor.batteryLevel; + data.DateTime=&Alarm; + data.SMSStatus=&SMSStatus; + data.IncomingCallNr=number; + + while (1) + { + phoneMonitor.working = NULL; + + /* FIXME - this loop goes mad on my 7110 - so I've put in a usleep */ + usleep(50000); + + if (SM_Functions(GOP_GetRFLevel,&data,&statemachine) != GE_NONE) + phoneMonitor.rfLevel = -1; + + if (rf_units == GRF_Arbitrary) + phoneMonitor.rfLevel *= 25; + + if (SM_Functions(GOP_GetPowersource,&data,&statemachine) == GE_NONE + && phoneMonitor.powerSource == GPS_ACDC) + phoneMonitor.batteryLevel = ((gint) phoneMonitor.batteryLevel + 25) % 125; + else + { + if (SM_Functions(GOP_GetBatteryLevel,&data,&statemachine) != GE_NONE) + phoneMonitor.batteryLevel = -1; + if (batt_units == GBU_Arbitrary) + phoneMonitor.batteryLevel *= 25; + } + + if (SM_Functions(GOP_GetAlarm,&data,&statemachine) == GE_NONE && Alarm.AlarmEnabled != 0) + phoneMonitor.alarm = TRUE; + else + phoneMonitor.alarm = FALSE; + + if (SM_Functions(GOP_GetSMSStatus,&data,&statemachine) == GE_NONE) + { + if (phoneMonitor.sms.unRead != SMSStatus.UnRead || + phoneMonitor.sms.number != SMSStatus.Number) + { + phoneMonitor.working = _("Refreshing SMSes..."); + RefreshSMS (SMSStatus.Number); + phoneMonitor.working = NULL; + } + + phoneMonitor.sms.unRead = SMSStatus.UnRead; + } + + if (SM_Functions(GOP_GetIncomingCallNr,&data,&statemachine) == GE_NONE) + { +# ifdef XDEBUG + g_print ("Call in progress: %s\n", phoneMonitor.call.callNum); +# endif + + GSM->GetDisplayStatus (&status); + if (status & (1<NetMonitor (phoneMonitor.netmonitor.number, + phoneMonitor.netmonitor.screen); + GSM->NetMonitor (3, phoneMonitor.netmonitor.screen3); + GSM->NetMonitor (4, phoneMonitor.netmonitor.screen4); + GSM->NetMonitor (5, phoneMonitor.netmonitor.screen5); + } + else + { + *phoneMonitor.netmonitor.screen = *phoneMonitor.netmonitor.screen3 = + *phoneMonitor.netmonitor.screen4 = *phoneMonitor.netmonitor.screen5 = '\0'; + } + pthread_mutex_unlock (&netMonMutex); + + while ((event = RemoveEvent ()) != NULL) + { +# ifdef XDEBUG + g_print ("Processing Event: %d\n", event->event); +# endif + phoneMonitor.working = _("Working..."); + if (event->event <= Event_Exit) + if ((error = DoAction[event->event] (event->data)) != GE_NONE) + g_print (_("Event %d failed with return code %d!\n"), event->event, error); + g_free (event); + } + } +} diff --git a/xgnokii/xgnokii_lowlevel.h b/xgnokii/xgnokii_lowlevel.h new file mode 100644 index 0000000..8f848dd --- /dev/null +++ b/xgnokii/xgnokii_lowlevel.h @@ -0,0 +1,216 @@ +/* + + $Id$ + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + $Log$ + Revision 1.1.1.1 2001/11/25 21:59:31 short + :pserver:cvs@pserver.samba.org:/cvsroot - gnokii - Sun Nov 25 22:56 CET 2001 + + Revision 1.9 2001/09/14 13:09:26 pkot + Xgnokii calendar updates + + Revision 1.8 2001/02/02 08:09:57 ja + New dialogs for 6210/7110 in xgnokii. Fixed the smsd for new capabilty code. + + Revision 1.7 2001/01/29 15:22:22 machek + Use integer as bitfield instead of struct of int:1. + + Be able to read phonebook saved in gnokii format from xgnokii. + + Revision 1.6 2001/01/17 02:54:57 chris + More 7110 work. Use with care! (eg it is not possible to delete phonebook entries) + I can now edit my phonebook in xgnokii but it is 'work in progress'. + + Revision 1.5 2001/01/15 21:10:20 ja + Better status reporting in xgnokii, fixed phone capabilities detection in xgnokii. + + +*/ + +#ifndef XGNOKII_LOWLEVEL_H +#define XGNOKII_LOWLEVEL_H + +#include +#include +#include "gsm-common.h" + +#define INCALL_NUMBER_LENGTH 20 +#define NETMON_SCREEN_LENGTH 60 + +typedef enum { + CS_Idle, + CS_Waiting, + CS_InProgress +} CallState; + +typedef enum { + Event_GetMemoryStatus, + Event_GetMemoryLocation, + Event_GetMemoryLocationAll, + Event_WriteMemoryLocation, + Event_WriteMemoryLocationAll, + Event_GetCalendarNote, + Event_GetCalendarNoteAll, + Event_WriteCalendarNote, + Event_DeleteCalendarNote, + Event_GetCallerGroup, + Event_SendCallerGroup, + Event_GetSMSCenter, + Event_SetSMSCenter, + Event_SendSMSMessage, + Event_DeleteSMSMessage, + Event_GetSpeedDial, + Event_SendSpeedDial, + Event_SendDTMF, + Event_NetMonitorOnOff, + Event_NetMonitor, + Event_DialVoice, + Event_GetAlarm, + Event_SetAlarm, + Event_SendKeyStroke, + Event_GetBitmap, + Event_SetBitmap, + Event_GetNetworkInfo, + Event_Exit +} PhoneAction; + +typedef struct { + PhoneAction event; + gpointer data; +} PhoneEvent; + +typedef struct { + GSM_SpeedDial entry; + GSM_Error status; +} D_SpeedDial; + +typedef struct { + GSM_SMSMessage *sms; + GSM_Error status; +} D_SMSMessage; + +typedef struct { + GSM_MessageCenter *center; + GSM_Error status; +} D_SMSCenter; + +typedef struct { + guchar number; + gchar text[256]; + gint status; +} D_CallerGroup; + +typedef struct { + GSM_DateTime time; + gint status; +} D_Alarm; + +typedef struct { + GSM_MemoryStatus memoryStatus; + gint status; +} D_MemoryStatus; + +typedef struct { + GSM_PhonebookEntry *entry; + gint status; +} D_MemoryLocation; + +typedef struct { + gint min; + gint max; + GSM_MemoryType type; + gint status; + gint (*InsertEntry)(GSM_PhonebookEntry *); + gint (*ReadFailed)(gint); +} D_MemoryLocationAll; + +typedef struct { + GSM_CalendarNote *entry; + gint status; +} D_CalendarNote; + +typedef struct { + gint status; + gint (*InsertEntry)(GSM_CalendarNote *); + gint (*ReadFailed)(gint); +} D_CalendarNoteAll; + +typedef struct { + GSM_Error status; + GSM_Bitmap *bitmap; +} D_Bitmap; + +typedef struct { + GSM_Error status; + GSM_NetworkInfo *info; +} D_NetworkInfo; + +typedef struct { + gfloat rfLevel; + gfloat batteryLevel; + GSM_PowerSource powerSource; + gchar *working; + bool alarm; + struct { + gchar *model; + gchar *imei; + gchar *revision; + gchar *version; + } phone; + struct { + gint unRead; + gint number; + GSList *messages; + } sms; + struct { + CallState callInProgress; + gchar callNum[INCALL_NUMBER_LENGTH]; + } call; + struct { + gint number; + gchar screen[NETMON_SCREEN_LENGTH]; + gchar screen3[NETMON_SCREEN_LENGTH]; + gchar screen4[NETMON_SCREEN_LENGTH]; + gchar screen5[NETMON_SCREEN_LENGTH]; + } netmonitor; + gint supported; +} PhoneMonitor; + +extern pthread_t monitor_th; +extern PhoneMonitor phoneMonitor; +extern pthread_mutex_t memoryMutex; +extern pthread_cond_t memoryCond; +extern pthread_mutex_t calendarMutex; +extern pthread_cond_t calendarCond; +extern pthread_mutex_t smsMutex; +extern pthread_mutex_t sendSMSMutex; +extern pthread_cond_t sendSMSCond; +extern pthread_mutex_t callMutex; +extern pthread_mutex_t netMonMutex; +extern pthread_mutex_t speedDialMutex; +extern pthread_cond_t speedDialCond; +extern pthread_mutex_t callerGroupMutex; +extern pthread_cond_t callerGroupCond; +extern pthread_mutex_t smsCenterMutex; +extern pthread_cond_t smsCenterCond; +extern pthread_mutex_t alarmMutex; +extern pthread_cond_t alarmCond; +extern pthread_mutex_t getBitmapMutex; +extern pthread_cond_t getBitmapCond; +extern pthread_mutex_t setBitmapMutex; +extern pthread_cond_t setBitmapCond; +extern pthread_mutex_t getNetworkInfoMutex; +extern pthread_cond_t getNetworkInfoCond; +extern void GUI_InitPhoneMonitor (void); +extern void *GUI_Connect (void *a); +extern void GUI_InsertEvent (PhoneEvent *event); + +#endif diff --git a/xgnokii/xgnokii_netmon.c b/xgnokii/xgnokii_netmon.c new file mode 100644 index 0000000..53b846d --- /dev/null +++ b/xgnokii/xgnokii_netmon.c @@ -0,0 +1,585 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Apr 30 2000 + Modified by Jan Derfinak + +*/ + +#ifndef WIN32 +# include +#endif +#include +#include /* for atoi */ +#include +#include +#include "misc.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_netmon.h" +#include "xpm/Display.xpm" + +static GtkWidget *GUI_NetmonWindow; +static DisplayData displayData = {NULL, 0}; +static GtkWidget *tableLabels[4][7]; +static GtkWidget *tableProgress[7]; + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/netmon/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static inline void CloseNetmon (GtkWidget *w, gpointer data) +{ + PhoneEvent *e; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_NetMonitor; + e->data = (gpointer) 0; + GUI_InsertEvent (e); + gtk_widget_hide (GUI_NetmonWindow); +} + + +static inline void NetmonOnOff (GtkWidget *w, gpointer data) +{ + PhoneEvent *e; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_NetMonitorOnOff; + e->data = data; + GUI_InsertEvent (e); +} + + +static inline void RefreshDisplay () +{ + static gchar number[3]; + + if (!GTK_WIDGET_VISIBLE(GUI_NetmonWindow)) + return; + + g_snprintf (number, 3, "%.2d", displayData.curDisp); + if (displayData.number) + gtk_label_set_text (GTK_LABEL (displayData.number), number); + + pthread_mutex_lock (&netMonMutex); + if (phoneMonitor.netmonitor.screen && displayData.label) + gtk_label_set_text (GTK_LABEL (displayData.label), + g_strchomp (phoneMonitor.netmonitor.screen)); + pthread_mutex_unlock (&netMonMutex); +} + + +static void SetDisplay (GtkWidget *widget, gpointer data) +{ + PhoneEvent *e; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_NetMonitor; + e->data = data; + GUI_InsertEvent (e); + displayData.curDisp = GPOINTER_TO_INT (data); + + RefreshDisplay (); +} + +static void ChangedSpinner (GtkWidget *widget, GtkSpinButton *spin) +{ + PhoneEvent *e; + + displayData.curDisp = gtk_spin_button_get_value_as_int (spin); + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_NetMonitor; + e->data = (gpointer) displayData.curDisp; + GUI_InsertEvent (e); + + RefreshDisplay (); +} + + +static void ParseScreen (gchar *screen, gint i) +{ + gchar buf[5]; + gchar *ptr = screen; + + if (ptr == NULL || *ptr == '\0') + return; + + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf); + ptr += 3; + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf); + ptr += 3; + if (*ptr != '-') + { + buf[0] = '-'; + strncpy (buf + 1, ptr, 3); + buf[4] = '\0'; + } + else + { + strncpy (buf, ptr, 3); + buf[3] = '\0'; + } + gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf); + ptr += 3; + gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf)); + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf); + ptr += 4; + + if (i == 6) + return; + + i++; + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf); + ptr += 3; + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf); + ptr += 3; + if (*ptr != '-') + { + buf[0] = '-'; + strncpy (buf + 1, ptr, 3); + buf[4] = '\0'; + } + else + { + strncpy (buf, ptr, 3); + buf[3] = '\0'; + } + gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf); + ptr += 3; + gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf)); + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf); + ptr += 4; + + i++; + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[0][i]), buf); + ptr += 3; + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[2][i]), buf); + ptr += 3; + if (*ptr != '-') + { + buf[0] = '-'; + strncpy (buf + 1, ptr, 3); + buf[4] = '\0'; + } + else + { + strncpy (buf, ptr, 3); + buf[3] = '\0'; + } + gtk_label_set_text (GTK_LABEL (tableLabels[1][i]), buf); + ptr += 3; + gtk_progress_set_value (GTK_PROGRESS (tableProgress[i]), atoi (buf)); + strncpy (buf, ptr, 3); + buf[3] = '\0'; + gtk_label_set_text (GTK_LABEL (tableLabels[3][i]), buf); +} + + +void GUI_RefreshNetmon () +{ + if (!GTK_WIDGET_VISIBLE (GUI_NetmonWindow)) + return; + + pthread_mutex_lock (&netMonMutex); + ParseScreen (phoneMonitor.netmonitor.screen3, 0); + ParseScreen (phoneMonitor.netmonitor.screen4, 3); + ParseScreen (phoneMonitor.netmonitor.screen5, 6); + pthread_mutex_unlock (&netMonMutex); + + RefreshDisplay (); +} + + +void AddToBorder (GtkWidget* table, gchar *text, gint i, gint j, gint k, gint l) +{ + GtkWidget *label = gtk_label_new (text); + GtkWidget *frame = gtk_frame_new (NULL); + + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); + gtk_container_add (GTK_CONTAINER (frame), label); + gtk_table_attach_defaults (GTK_TABLE (table), frame, i, j, k, l); +} + + +inline void GUI_ShowNetmon () +{ + PhoneEvent *e; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_NetMonitor; + e->data = (gpointer) displayData.curDisp;; + GUI_InsertEvent (e); + gtk_widget_show (GUI_NetmonWindow); +} + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseNetmon, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, NetmonOnOff, 1, NULL}, + { NULL, NULL, NetmonOnOff, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Close")); + menu_items[2].path = g_strdup (_("/_Tools")); + menu_items[3].path = g_strdup (_("/Tools/Net monitor o_n")); + menu_items[4].path = g_strdup (_("/Tools/Net monitor o_ff")); + menu_items[5].path = g_strdup (_("/_Help")); + menu_items[6].path = g_strdup (_("/Help/_Help")); + menu_items[7].path = g_strdup (_("/Help/_About")); +} + + +#define DISPLAY_X 12 +#define DISPLAY_Y 15 + +static inline gint ExposeDisplay (GtkWidget *widget, GdkEventExpose *event) +{ + GdkRectangle rec; + GtkRequisition r; + + gtk_widget_size_request (displayData.number, &r); + rec.x = DISPLAY_X; + rec.y = DISPLAY_Y; + rec.width = r.width; + rec.height = r.height; + gtk_widget_draw (displayData.number, &rec); + + gtk_widget_size_request (displayData.label, &r); + rec.x += 3; + rec.y += 12; + rec.width = r.width; + rec.height = r.height; + gtk_widget_draw (displayData.label, &rec); + + return FALSE; +} + + +void GUI_CreateNetmonWindow () +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *hbox, *vbox; + GtkWidget *toolbar; + GtkWidget *table; + GtkWidget *display; + GtkWidget *label; + GtkWidget *frame; + GtkWidget *button; + GtkWidget *pixmap; + GtkAdjustment *adj; + gint i,j; + + + InitMainMenu (); + GUI_NetmonWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_NetmonWindow), "NetmonWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_NetmonWindow), _("Net Monitor")); + //gtk_widget_set_usize (GTK_WIDGET (GUI_NetmonWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (GUI_NetmonWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_NetmonWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_NetmonWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_NetmonWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + frame = gtk_frame_new (NULL); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_widget_show (frame); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (hbox), 3); + gtk_container_add (GTK_CONTAINER (frame), hbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (hbox); + + display = gtk_fixed_new (); + gtk_box_pack_start (GTK_BOX (hbox), display, FALSE, FALSE, 10); + gtk_widget_show (display); + + pixmap = NewPixmap (Display_xpm, GUI_NetmonWindow->window, + &GUI_NetmonWindow->style->bg[GTK_STATE_NORMAL]); + + gtk_signal_connect_after (GTK_OBJECT (pixmap), "expose_event", + (GtkSignalFunc) ExposeDisplay, NULL); + + gtk_fixed_put (GTK_FIXED (display), pixmap, 0 , 0); + gtk_widget_show (pixmap); + + displayData.number = gtk_label_new (""); + gtk_fixed_put (GTK_FIXED (display), displayData.number, DISPLAY_X, DISPLAY_Y); + gtk_widget_show (displayData.number); + displayData.label = gtk_label_new (""); + gtk_fixed_put (GTK_FIXED (display), displayData.label, DISPLAY_X + 3, DISPLAY_Y + 12); + gtk_widget_show (displayData.label); + displayData.curDisp = 0x01; + + vbox = gtk_vbox_new (TRUE, 0); + + /* 1. line */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "1", _("Active cell"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 1); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "2", _("Active cell"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 2); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "3", _("NCELL list I"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 3); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "4", _("NCELL list II"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 4); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "5", _("NCELL list III"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 5); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "6", _("Prefered/Denied networks"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 6); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "7", _("System information bits"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 7); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "10", _("TMSI, Paging, PLU"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 10); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "11", _("Cells info"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 11); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "12", _("DTX, Cipher, Hopping"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 12); + + gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + /* 2. line */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "13", _("Uplink DTX"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 13); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "17", _("BTS TEST"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 17); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "19", _("CELL BARR-Flag"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 19); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "20", _("Accumulator, Charge status"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 20); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "21", _("?Constant voltage charging display"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 21); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "22", _("?Battery full detection"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 22); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "23", _("Accumulator"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 23); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "35", _("SW-Resets"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 35); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "36", _("Reset-Counter"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 36); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "39", _("Cause codes for last connection abortion"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 39); + + gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + /* 3. line */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "40", _("Reset handover counters"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 40); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "41", _("Handover Counter"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 41); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "42", _("Handover Counter (Dual)"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 42); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "43", _("L2-Timeouts"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 43); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "51", _("SIM"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 51); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "54", _("?Block display 1"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 54); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "56", NULL, + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 56); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "57", _("Memory status before reset"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 57); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "60", _("Reset Counters"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 60); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "61", _("Counter for PLMN Search and Cell reselection (Singleband)"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 61); + + gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + /* 4. line */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_TEXT); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "62", _("Neighbourhood measurement"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 62); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "63", _("Calls"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 63); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "70", _("Temporary counters of DSP"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 70); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "83", _("Control of task information displays"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 83); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "84", _("Information about task numbers 0-7"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 84); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "85", _("Information about task numbers 8-15"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 85); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "86", _("Information about task numbers 16-23"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 86); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "87", _("Information about OS_SYSTEM_STACK"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 87); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "88", _("Information about current MCU and DSP software versions"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 88); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), "89", _("Hardware version"), + NULL, NULL, (GtkSignalFunc) SetDisplay, (gpointer) 89); + + gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 10); + gtk_widget_show (vbox); + + table = gtk_table_new (6, 8, FALSE); + + frame = gtk_frame_new (NULL); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_container_border_width (GTK_CONTAINER (table), 3); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + + AddToBorder (table, "", 0, 1, 0, 1); + AddToBorder (table, _("Chan"), 1, 2, 0, 1); + AddToBorder (table, _("RxLv"), 2, 3, 0, 1); + AddToBorder (table, _("C1"), 3, 4, 0, 1); + AddToBorder (table, _("C2"), 4, 5, 0, 1); + AddToBorder (table, _("ACT"), 0, 1, 1, 2); + AddToBorder (table, _("NC2"), 0, 1, 2, 3); + AddToBorder (table, _("NC3"), 0, 1, 3, 4); + AddToBorder (table, _("NC4"), 0, 1, 4, 5); + AddToBorder (table, _("NC5"), 0, 1, 5, 6); + AddToBorder (table, _("NC6"), 0, 1, 6, 7); + AddToBorder (table, _("NC7"), 0, 1, 7, 8); + + for (i = 0; i < 4; i++) + for (j = 0; j < 7; j++) + { + tableLabels[i][j] = gtk_label_new (""); + frame = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_container_add (GTK_CONTAINER (frame), tableLabels[i][j]); + gtk_table_attach_defaults (GTK_TABLE (table), frame, i + 1, i + 2, j + 1, j + 2); + } + + for (i = 0; i < 7; i++) + { + adj = (GtkAdjustment *) gtk_adjustment_new (-114, -114, -40, 0, 0, 0); + tableProgress[i] = gtk_progress_bar_new_with_adjustment (adj); + gtk_table_attach_defaults (GTK_TABLE (table), tableProgress[i], 5, 6, i + 1, i + 2); + } + + hbox = gtk_hbox_new (FALSE, 0); + gtk_table_attach_defaults (GTK_TABLE (table), hbox, 5, 6, 0, 1); + + adj = (GtkAdjustment *) gtk_adjustment_new (1, 1, 89, 1, 10, 0); + button = gtk_spin_button_new (adj, 0, 0); + gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (button), TRUE); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (button), TRUE); + gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (button), GTK_SHADOW_OUT); + gtk_signal_connect (GTK_OBJECT (adj), "value_changed", + GTK_SIGNAL_FUNC (ChangedSpinner), (gpointer) button); + gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0); + + label = gtk_label_new (_("Page:")); + gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 5); + + gtk_table_set_col_spacing (GTK_TABLE (table), 4, 10); + gtk_widget_show_all (table); + GUIEventAdd (GUI_EVENT_NETMON_CHANGED, GUI_RefreshNetmon); +} diff --git a/xgnokii/xgnokii_netmon.h b/xgnokii/xgnokii_netmon.h new file mode 100644 index 0000000..f3c57b9 --- /dev/null +++ b/xgnokii/xgnokii_netmon.h @@ -0,0 +1,33 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tue Nov 16 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_NETMON_H +#define XGNOKII_NETMON_H + +#include + +typedef struct { + GtkWidget *number; + GtkWidget *label; + gint curDisp; +} DisplayData; + +extern void GUI_CreateNetmonWindow (); + +extern void GUI_ShowNetmon (); + +extern void GUI_RefreshNetmon (); + +#endif diff --git a/xgnokii/xgnokii_sms.c b/xgnokii/xgnokii_sms.c new file mode 100644 index 0000000..39c2e40 --- /dev/null +++ b/xgnokii/xgnokii_sms.c @@ -0,0 +1,1730 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Apr 30 2000 + Modified by Jan Derfinak + +*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "misc.h" +#include "gsm-api.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_contacts.h" +#include "xgnokii_sms.h" +#include "xpm/Edit.xpm" +#include "xpm/Delete.xpm" +#include "xpm/Forward.xpm" +#include "xpm/Reply.xpm" +#include "xpm/Send.xpm" +#include "xpm/SendSMS.xpm" +#include "xpm/Check.xpm" +#include "xpm/Names.xpm" +#include "xpm/BCard.xpm" +#include "xpm/quest.xpm" + +typedef struct { + gint count; // Messages count + gint number; // Number of tail in Long SMS; + gint *msgPtr; // Array of MessageNumber; + gint validity; + gint class; + gchar sender[GSM_MAX_SENDER_LENGTH + 1]; +} MessagePointers; + +typedef struct { + gchar *number; + gchar *name; + gint used:1; +} AddressPar; + +typedef struct { + GtkWidget *smsClist; + GtkWidget *smsText; + GSList *messages; + GdkColor colour; + gint row_i; + gint currentBox; +} SMSWidget; + +typedef struct { + GtkWidget *SMSSendWindow; + GtkWidget *smsSendText; + GtkWidget *addr; + GtkWidget *status; + GtkWidget *report; + GtkWidget *longSMS; + GtkWidget *smscOptionMenu; + GtkTooltips *addrTip; + gint center; + GSList *addressLine; +} SendSMSWidget; + +static GtkWidget *GUI_SMSWindow; +static SMSWidget SMS = {NULL, NULL, NULL}; +static SendSMSWidget sendSMS = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL}; +static ErrorDialog errorDialog = {NULL, NULL}; +static InfoDialog infoDialog = {NULL, NULL}; +static QuestMark questMark; + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/sms/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static inline void Help2 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/sms_send.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static inline void CloseSMS (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_SMSWindow); +} + + +static inline void CloseSMSSend (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (sendSMS.SMSSendWindow); +} + + +static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2) +{ + gchar *text1 = NULL; + gchar *text2 = NULL; + + GtkCListRow *row1 = (GtkCListRow *) ptr1; + GtkCListRow *row2 = (GtkCListRow *) ptr2; + + switch (row1->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text; + break; + default: + break; + } + switch (row2->cell[clist->sort_column].type) + { + case GTK_CELL_TEXT: + text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text; + break; + case GTK_CELL_PIXTEXT: + text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text; + break; + default: + break; + } + + if (!text2) + return (text1 != NULL); + + if (!text1) + return -1; + + if (clist->sort_column == 1 && !SMS.currentBox) + { + struct tm bdTime; + time_t time1, time2; + + bdTime.tm_sec = atoi (text1 + 15); + bdTime.tm_min = atoi (text1 + 12); + bdTime.tm_hour = atoi (text1 + 9); + bdTime.tm_mday = atoi (text1); + bdTime.tm_mon = atoi (text1 + 3) - 1; + bdTime.tm_year = atoi (text1 + 6); + if (bdTime.tm_year < 70) + bdTime.tm_year += 100; +#ifdef HAVE_TM_GMTON + if (text1[17] != '\0') + bdTime.tm_gmtoff = atoi (text1 + 18) * 3600; +#endif + bdTime.tm_isdst = -1; + + time1 = mktime (&bdTime); + + bdTime.tm_sec = atoi (text2 + 15); + bdTime.tm_min = atoi (text2 + 12); + bdTime.tm_hour = atoi (text2 + 9); + bdTime.tm_mday = atoi (text2); + bdTime.tm_mon = atoi (text2 + 3) - 1; + bdTime.tm_year = atoi (text2 + 6); + if (bdTime.tm_year < 70) + bdTime.tm_year += 100; +#ifdef HAVE_TM_GMTON + if (text2[17] != '\0') + bdTime.tm_gmtoff = atoi (text2 + 18) * 3600; +#endif + bdTime.tm_isdst = -1; + + time2 = mktime (&bdTime); + + if (time1 < time2) + return (1); + else if (time1 > time2) + return (-1); + else + return 0; + } + + return (g_strcasecmp (text1, text2)); +} + + +static inline void DestroyMsgPtrs (gpointer data) +{ + g_free (((MessagePointers *) data)->msgPtr); + g_free ((MessagePointers *) data); +} + + +static void InsertInboxElement (gpointer d, gpointer userData) +{ + GSM_SMSMessage *data = (GSM_SMSMessage *) d; + MessagePointers *msgPtrs; + GSM_DateTime *dt; + + if (data->Type == GST_MT || data->Type == GST_DR) + { +/* if (data->Type == GST_MT && data->UDHType == GSM_ConcatenatedMessages) + { + //FIX ME + + msgPtrs = (MessagePointers *) g_malloc (sizeof (MessagePointers)); + msgPtrs->count = data->UDH[4]; + msgPtrs->number = data->UDH[5]; + msgPtrs->validity = data->Validity; + msgPtrs->class = data->Class; + strcpy (msgPtrs->sender, data->Sender); + msgPtrs->msgPtr = (gint *) g_malloc (msgPtrs->count * sizeof (gint)); + *(msgPtrs->msgPtr + msgPtrs->number - 1) = data->MessageNumber; + } + else */ + { + gchar *row[4]; + + if (data->Type == GST_DR) + { + row[0] = g_strdup (_("report")); + dt = &(data->SMSCTime); + } + else if (data->Status) + { + row[0] = g_strdup (_("read")); + dt = &(data->Time); + } + else + { + row[0] = g_strdup (_("unread")); + dt = &(data->Time); + } + + if (dt->Timezone) + row[1] = g_strdup_printf ("%02d/%02d/%02d %02d:%02d:%02d %c%02d00", + dt->Day, dt->Month, dt->Year, + dt->Hour, dt->Minute, dt->Second, + dt->Timezone > 0 ? '+' : '-', abs (dt->Timezone)); + else + row[1] = g_strdup_printf ("%02d/%02d/%02d %02d:%02d:%02d", + dt->Day, dt->Month, dt->Year, + dt->Hour, dt->Minute, dt->Second); + + row[2] = GUI_GetName (data->Sender); + if (row[2] == NULL) + row[2] = data->Sender; + row[3] = data->MessageText; + + gtk_clist_append (GTK_CLIST (SMS.smsClist), row); + msgPtrs = (MessagePointers *) g_malloc (sizeof (MessagePointers)); + msgPtrs->count = msgPtrs->number = 1; + msgPtrs->validity = data->Validity; + msgPtrs->class = data->Class; + strcpy (msgPtrs->sender, data->Sender); + msgPtrs->msgPtr = (gint *) g_malloc (sizeof (gint)); + *(msgPtrs->msgPtr) = data->MessageNumber; + gtk_clist_set_row_data_full (GTK_CLIST (SMS.smsClist), SMS.row_i++, + msgPtrs, DestroyMsgPtrs); + g_free (row[0]); + g_free (row[1]); + } + } +} + + +static inline void RefreshInbox (void) +{ + gtk_clist_freeze (GTK_CLIST (SMS.smsClist)); + + gtk_clist_clear (GTK_CLIST (SMS.smsClist)); + + SMS.row_i = 0; + g_slist_foreach (phoneMonitor.sms.messages, InsertInboxElement, (gpointer) NULL); + + gtk_clist_sort (GTK_CLIST (SMS.smsClist)); + gtk_clist_thaw (GTK_CLIST (SMS.smsClist)); +} + + +static void InsertOutboxElement (gpointer d, gpointer userData) +{ + GSM_SMSMessage *data = (GSM_SMSMessage *) d; + MessagePointers *msgPtrs; + + if (data->Type == GST_MO) + { + gchar *row[4]; + + if (data->Status) + row[0] = g_strdup (_("sent")); + else + row[0] = g_strdup (_("unsent")); + + row[1] = row[2] = g_strdup (""); + row[3] = data->MessageText; + + gtk_clist_append( GTK_CLIST (SMS.smsClist), row); + msgPtrs = (MessagePointers *) g_malloc (sizeof (MessagePointers)); + msgPtrs->count = msgPtrs->number = 1; + msgPtrs->validity = data->Validity; + msgPtrs->class = data->Class; + strcpy (msgPtrs->sender, data->Sender); + msgPtrs->msgPtr = (gint *) g_malloc (sizeof (gint)); + *(msgPtrs->msgPtr) = data->MessageNumber; + gtk_clist_set_row_data_full (GTK_CLIST (SMS.smsClist), SMS.row_i++, + msgPtrs, DestroyMsgPtrs); + g_free (row[0]); + g_free (row[1]); + } +} + + +static inline void RefreshOutbox (void) +{ + gtk_clist_freeze (GTK_CLIST (SMS.smsClist)); + gtk_clist_clear (GTK_CLIST (SMS.smsClist)); + + SMS.row_i = 0; + g_slist_foreach (phoneMonitor.sms.messages, InsertOutboxElement, (gpointer) NULL); + + gtk_clist_sort (GTK_CLIST (SMS.smsClist)); + gtk_clist_thaw (GTK_CLIST (SMS.smsClist)); +} + + +inline void GUI_RefreshMessageWindow (void) +{ + if (!GTK_WIDGET_VISIBLE (GUI_SMSWindow)) + return; + + if (SMS.currentBox) + RefreshOutbox (); + else + RefreshInbox (); +} + + +static void SelectTreeItem (GtkWidget *item, gpointer data) +{ + SMS.currentBox = GPOINTER_TO_INT (data); + GUI_RefreshMessageWindow (); +} + + +static void ClickEntry (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + gpointer data ) +{ + gchar *buf; + + /* FIXME - We must mark SMS as readed */ + gtk_text_freeze (GTK_TEXT (SMS.smsText)); + + gtk_text_set_point (GTK_TEXT (SMS.smsText), 0); + gtk_text_forward_delete (GTK_TEXT (SMS.smsText), gtk_text_get_length (GTK_TEXT (SMS.smsText))); + + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL, + _("From: "), -1); + gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf); + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.colour), NULL, + _("Date: "), -1); + gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf); + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL, + buf, -1); + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL, + "\n\n", -1); + + gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf); + gtk_text_insert (GTK_TEXT (SMS.smsText), NULL, &(SMS.smsText->style->black), NULL, + buf, -1); + + gtk_text_thaw (GTK_TEXT (SMS.smsText)); +} + + +inline void GUI_ShowSMS (void) +{ + gtk_widget_show (GUI_SMSWindow); + GUI_RefreshMessageWindow (); +} + + +static void OkDeleteSMSDialog (GtkWidget *widget, gpointer data) +{ + GSM_SMSMessage *message; + PhoneEvent *e; + GList *sel; +// GSM_Error error; + gint row; + gint count; + + + sel = GTK_CLIST (SMS.smsClist)->selection; + + gtk_clist_freeze (GTK_CLIST (SMS.smsClist)); + + while (sel != NULL) + { + row = GPOINTER_TO_INT (sel->data); + sel = sel->next; + for (count = 0; count < ((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->count; count++) + { + message = (GSM_SMSMessage *) g_malloc (sizeof (GSM_SMSMessage)); + message->Location = *(((MessagePointers *) gtk_clist_get_row_data (GTK_CLIST (SMS.smsClist), row))->msgPtr + count); + if (message->Location == -1) + { + g_free (message); + continue; + } + message->MemoryType = GMT_SM; + + e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + e->event = Event_DeleteSMSMessage; + e->data = message; + GUI_InsertEvent (e); + +/* error = GSM->DeleteSMSMessage(&message); + + if (error != GE_NONE) + { + if (error == GE_NOTIMPLEMENTED) + { + gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Function not implemented!")); + gtk_widget_show(errorDialog.dialog); + } + else + { + gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Delete SMS failed!")); + gtk_widget_show(errorDialog.dialog); + } + } +*/ + } + } + + gtk_widget_hide (GTK_WIDGET (data)); + + gtk_clist_thaw (GTK_CLIST (SMS.smsClist)); +} + + +static void DeleteSMS (void) +{ + static GtkWidget *dialog = NULL; + GtkWidget *button, *hbox, *label, *pixmap; + + if (dialog == NULL) + { + dialog = gtk_dialog_new(); + gtk_window_set_title (GTK_WINDOW (dialog), _("Delete SMS")); + gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + gtk_window_set_modal(GTK_WINDOW (dialog), TRUE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); + gtk_signal_connect (GTK_OBJECT (dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + + button = gtk_button_new_with_label (_("Ok")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (OkDeleteSMSDialog), (gpointer) dialog); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_default (button); + gtk_widget_show (button); + button = gtk_button_new_with_label (_("Cancel")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), + button, TRUE, TRUE, 10); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog); + gtk_widget_show (button); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox); + gtk_widget_show (hbox); + + pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask); + gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10); + gtk_widget_show (pixmap); + + label = gtk_label_new (_("Do you want to delete selected SMS?")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10); + gtk_widget_show (label); + } + + gtk_widget_show (GTK_WIDGET (dialog)); +} + + +static void SaveToMailbox (void) +{ + gchar buf[255]; + FILE *f; + gint fd; + GList *sel; + struct tm t, *loctime; + struct flock lock; + time_t caltime; + gint row; + gchar *number, *text, *loc; + + + if ((f = fopen (xgnokiiConfig.mailbox, "a")) == NULL) + { + snprintf (buf, 255, _("Cannot open mailbox %s for appending!"), xgnokiiConfig.mailbox); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + fd = fileno (f); + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + + if (fcntl (fd, F_GETLK, &lock) != -1 && lock.l_type != F_UNLCK) + { + snprintf (buf, 255, _("Cannot save to mailbox %s.\n\ +%s is locked for process %d!"), xgnokiiConfig.mailbox, xgnokiiConfig.mailbox, + lock.l_pid); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + fclose (f); + return; + } + + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + if (fcntl (fd, F_SETLK, &lock) == -1) + { + snprintf (buf, 255, _("Cannot lock mailbox %s!"), xgnokiiConfig.mailbox); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + fclose (f); + return; + } + + sel = GTK_CLIST (SMS.smsClist)->selection; + + while (sel != NULL) + { + row = GPOINTER_TO_INT (sel->data); + sel = sel->next; + gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 1, &text); + t.tm_sec = atoi (text + 15); + t.tm_min = atoi (text + 12); + t.tm_hour = atoi (text + 9); + t.tm_mday = atoi (text); + t.tm_mon = atoi (text + 3) - 1; + t.tm_year = atoi (text + 6); + if (t.tm_year < 70) + t.tm_year += 100; +#ifdef HAVE_TM_GMTON + if (text[17] != '\0') + t.tm_gmtoff = atoi (text + 18) * 3600; +#endif + + caltime = mktime (&t); + loctime = localtime (&caltime); + + gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 2, &number); + gtk_clist_get_text (GTK_CLIST (SMS.smsClist), row, 3, &text); + + fprintf (f, "From %s@xgnokii %s", number, asctime (loctime)); + loc = setlocale (LC_ALL, "C"); + strftime (buf, 255, "Date: %a, %d %b %Y %H:%M:%S %z (%Z)\n", loctime); + setlocale (LC_ALL, loc); + fprintf (f, "%s", buf); + fprintf (f, "From: %s@xgnokii\n", number); + strncpy (buf, text, 20); + buf[20] = '\0'; + fprintf (f, "Subject: %s\n\n", buf); + fprintf (f, "%s\n\n", text); + } + + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + if (fcntl (fd, F_SETLK, &lock) == -1) + { + snprintf (buf, 255, _("Cannot unlock mailbox %s!"), xgnokiiConfig.mailbox); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + } + + fclose (f); +} + + +static inline void RefreshSMSStatus (void) +{ + gchar *buf; + guint l, m; + + l = gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText)); + + if (l <= GSM_MAX_SMS_LENGTH) + buf = g_strdup_printf ("%d/1", l); + else + { + m = l % 153; + buf = g_strdup_printf ("%d/%d", l > 0 && !m ? 153 : m, l == 0 ? 1 : ((l - 1) / 153) + 1); + } + + gtk_frame_set_label (GTK_FRAME (sendSMS.status), buf); + g_free (buf); +} + + +static inline gint RefreshSMSLength (GtkWidget *widget, + GdkEventKey *event, + gpointer callback_data) +{ + RefreshSMSStatus (); + if (GTK_EDITABLE (widget)->editable == FALSE) + return (FALSE); + if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear || + event->keyval == GDK_Insert || event->keyval == GDK_Delete || + event->keyval == GDK_Home || event->keyval == GDK_End || + event->keyval == GDK_Left || event->keyval == GDK_Right || + event->keyval == GDK_Up || event->keyval == GDK_Down || + event->keyval == GDK_Return || + (event->keyval >= 0x20 && event->keyval <= 0xFF)) + return (TRUE); + + return (FALSE); +} + + +static inline void SetActiveCenter (GtkWidget *item, gpointer data) +{ + sendSMS.center = GPOINTER_TO_INT (data); +} + + +void GUI_RefreshSMSCenterMenu (void) +{ + static GtkWidget *smscMenu = NULL; + GtkWidget *item; + register gint i; + + if (!sendSMS.smscOptionMenu) + return; + + if (smscMenu) + { + gtk_option_menu_remove_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu)); + if (GTK_IS_WIDGET (smscMenu)) + gtk_widget_destroy (GTK_WIDGET (smscMenu)); + smscMenu = NULL; + } + + smscMenu = gtk_menu_new(); + + for (i = 0; i < xgnokiiConfig.smsSets; i++) + { + if (*(xgnokiiConfig.smsSetting[i].Name) == '\0') + { + gchar *buf = g_strdup_printf (_("Set %d"), i + 1); + item = gtk_menu_item_new_with_label (buf); + g_free (buf); + } + else + item = gtk_menu_item_new_with_label (xgnokiiConfig.smsSetting[i].Name); + + gtk_signal_connect (GTK_OBJECT (item), "activate", + GTK_SIGNAL_FUNC (SetActiveCenter), + (gpointer) i); + + gtk_widget_show (item); + gtk_menu_append (GTK_MENU (smscMenu), item); + } + gtk_option_menu_set_menu (GTK_OPTION_MENU (sendSMS.smscOptionMenu), smscMenu); +} + + +static inline void InitAddressLine (gpointer d, gpointer userData) +{ + ((AddressPar *) d)->used = 0; +} + + +#ifdef XDEBUG +static inline void PrintAddressLine (gpointer d, gpointer userData) +{ + g_print ("Name: %s\nNumber: %s\nUsed: %d\n", + ((AddressPar *) d)->name, + ((AddressPar *) d)->number, + ((AddressPar *) d)->used); +} +#endif + + +static inline gint CompareAddressLineName (gconstpointer a, gconstpointer b) +{ + return strcmp (((AddressPar *) a)->name, ((AddressPar *) b)->name); +} + + +static inline gint CompareAddressLineUsed (gconstpointer a, gconstpointer b) +{ + return !(((AddressPar *) a)->used == ((AddressPar *) b)->used); +} + + +static gint CheckAddressMain (void) +{ + AddressPar aps; + GSList *r; + register gint i = 0; + gint ret = 0; + gchar *buf; + GString *tooltipBuf; + gchar **strings = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0); + + tooltipBuf = g_string_new (""); + gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), ""); + g_slist_foreach (sendSMS.addressLine, InitAddressLine, (gpointer) NULL); + + while (strings[i]) + { + g_strstrip (strings[i]); + if (*strings[i] == '\0') + { + i++; + continue; + } + if ((buf = GUI_GetName (strings[i])) != NULL) + { + AddressPar *ap = g_malloc (sizeof (AddressPar)); + ap->number = g_strdup (strings[i]); + ap->name = g_strdup (buf); + ap->used = 1; + sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap); + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), buf); + g_string_append (tooltipBuf, ap->number); + } + else + if ((buf = GUI_GetNumber (strings[i])) != NULL) + { + aps.name = strings[i]; + r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName); + if (r) + { + ((AddressPar *) r->data)->used = 1; + g_string_append (tooltipBuf, ((AddressPar *) r->data)->number); + } + else + g_string_append (tooltipBuf, buf); + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]); + } + else + { + gint len = strlen (strings[i]); + gint j; + + for (j = 0; j < len; j++) + if (strings[i][j] != '*' && strings[i][j] != '#' && strings[i][j] != '+' + && (strings[i][j] < '0' || strings[i][j] > '9')) + ret = 1; + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), strings[i]); + g_string_append (tooltipBuf, strings[i]); + } + if (strings[i + 1] != NULL) + { + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", "); + g_string_append (tooltipBuf, ", "); + } + i++; + } + + aps.used = 0; + while ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineUsed))) + sendSMS.addressLine = g_slist_remove (sendSMS.addressLine, r->data); + + if (tooltipBuf->len > 0) + { + gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, tooltipBuf->str, NULL); + gtk_tooltips_enable (sendSMS.addrTip); + } + else + gtk_tooltips_disable (sendSMS.addrTip); + +#ifdef XDEBUG + g_slist_foreach (sendSMS.addressLine, PrintAddressLine, (gpointer) NULL); +#endif + + g_strfreev (strings); + g_string_free (tooltipBuf, TRUE); + + return ret; +} + + +static inline void CheckAddress (void) +{ + if (CheckAddressMain ()) + { + gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!")); + gtk_widget_show(errorDialog.dialog); + } +} + + +static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event, + SelectContactData *data) +{ + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (widget)); +} + + +static void CancelSelectContactDialog (GtkWidget *widget, + SelectContactData *data) +{ + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (data->dialog)); +} + + +static void OkSelectContactDialog (GtkWidget *widget, + SelectContactData *data) +{ + GList *sel; + PhonebookEntry *pbEntry; + + if ((sel = GTK_CLIST (data->clist)->selection) != NULL) + while (sel != NULL) + { + AddressPar *ap = g_malloc (sizeof (AddressPar)); + + pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist), + GPOINTER_TO_INT (sel->data)); + ap->number = g_strdup (pbEntry->entry.Number); + ap->name = g_strdup (pbEntry->entry.Name); + ap->used = 1; + sendSMS.addressLine = g_slist_append (sendSMS.addressLine, ap); + if (strlen (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr))) > 0) + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ", "); + gtk_entry_append_text (GTK_ENTRY (sendSMS.addr), ap->name); + + sel = sel->next; + } + + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (data->dialog)); + + CheckAddressMain (); +} + + +static void ShowSelectContactsDialog (void) +{ + SelectContactData *r; + + if (!GUI_ContactsIsIntialized ()) + GUI_ReadContacts (); + + if ((r = GUI_SelectContactDialog ()) == NULL) + return; + + gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r); + + gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked", + GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r); + gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked", + GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r); +} + + +static gint SendSMSCore (GSM_SMSMessage *sms) +{ + GSM_Error error; + PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent)); + D_SMSMessage *m = (D_SMSMessage *) g_malloc (sizeof (D_SMSMessage)); + + m->sms = sms; + e->event = Event_SendSMSMessage; + e->data = m; + GUI_InsertEvent (e); + pthread_mutex_lock (&sendSMSMutex); + pthread_cond_wait (&sendSMSCond, &sendSMSMutex); + pthread_mutex_unlock (&sendSMSMutex); + +#ifdef XDEBUG + g_print ("Address: %s\nText: %s\nDelivery report: %d\nSMS Center: %d\n", + sms->Destination, + sms->MessageText, + GTK_TOGGLE_BUTTON (sendSMS.report)->active, + sendSMS.center); +#endif + + error = m->status; + g_free (m); + + if (error != GE_SMSSENDOK) + { + gchar *buf = g_strdup_printf (_("SMS send to %s failed\n(error=%d)"), + sms->Destination, error); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + g_free (buf); + } + else + g_print ("Message sent to: %s\n", sms->Destination); + + return (error); +} + + +static void SendSMS (void) +{ + GSM_SMSMessage sms; + AddressPar aps; + char udh[GSM_MAX_USER_DATA_HEADER_LENGTH]; + GSList *r; + gchar *text, *number; + gchar **addresses; + gchar *buf; + gint offset, nr_msg, l; + gint longSMS; + register gint i = 0, j; + + if (CheckAddressMain ()) + { + gtk_label_set_text(GTK_LABEL(errorDialog.text), _("Address line contains illegal address!")); + gtk_widget_show(errorDialog.dialog); + return; + } + + text = gtk_editable_get_chars (GTK_EDITABLE (sendSMS.smsSendText), 0, -1); + l = strlen (text); + + addresses = g_strsplit (gtk_entry_get_text (GTK_ENTRY (sendSMS.addr)), ",", 0); + + longSMS = GTK_TOGGLE_BUTTON (sendSMS.longSMS)->active; + + while (addresses[i]) + { + g_strstrip (addresses[i]); + if ((number = GUI_GetNumber (addresses[i]))) + { + aps.name = addresses[i]; + if ((r = g_slist_find_custom (sendSMS.addressLine, &aps, CompareAddressLineName))) + number = ((AddressPar *) r->data)->number; + } + else + number = addresses[i]; + + sms.MessageCenter = xgnokiiConfig.smsSetting[sendSMS.center]; + sms.MessageCenter.No = 0; + + if (GTK_TOGGLE_BUTTON (sendSMS.report)->active) + sms.Type = GST_DR; + else + sms.Type = GST_MO; + + sms.Class = -1; + sms.Compression = false; + sms.EightBit = false; + sms.Validity = sms.MessageCenter.Validity; + + strncpy (sms.Destination, number, GSM_MAX_DESTINATION_LENGTH + 1); + sms.Destination[GSM_MAX_DESTINATION_LENGTH] = '\0'; + + if (l > GSM_MAX_SMS_LENGTH) + { + if (longSMS) + { + sms.UDHType = GSM_ConcatenatedMessages; + nr_msg = ((l - 1) / 153) + 1; + udh[0] = 0x05; // UDH length + udh[1] = 0x00; // concatenated messages (IEI) + udh[2] = 0x03; // IEI data length + udh[3] = 0x01; // reference number + udh[4] = nr_msg; // number of messages + udh[5] = 0x00; // message reference number + offset = 6; + + for (j = 0; j < nr_msg; j++) + { + udh[5] = j + 1; + + memcpy(sms.UDH,udh,offset); + strncpy (sms.MessageText, text + (j * 153), 153); + sms.MessageText[153] = '\0'; + + buf = g_strdup_printf (_("Sending SMS to %s (%d/%d) ...\n"), + sms.Destination, j + 1, nr_msg); + gtk_label_set_text (GTK_LABEL (infoDialog.text), buf); + gtk_widget_show_now (infoDialog.dialog); + g_free (buf); + GUI_Refresh (); + + if (SendSMSCore (&sms) != GE_SMSSENDOK) + { + gtk_widget_hide (infoDialog.dialog); + GUI_Refresh (); + break; + } + + gtk_widget_hide (infoDialog.dialog); + GUI_Refresh (); + + sleep (1); + } + } + else + { + sms.UDHType = GSM_NoUDH; + nr_msg = ((l - 1) / 153) + 1; + if (nr_msg > 99) // We have place only for 99 messages in header. + nr_msg = 99; + for (j = 0; j < nr_msg; j++) + { + gchar header[8]; + + g_snprintf (header, 8, "%2d/%-2d: ", j + 1, nr_msg); + header[7] = '\0'; + + strcpy (sms.MessageText, header); + strncat (sms.MessageText, text + (j * 153), 153); + sms.MessageText[160] = '\0'; + + buf = g_strdup_printf (_("Sending SMS to %s (%d/%d) ...\n"), + sms.Destination, j + 1, nr_msg); + gtk_label_set_text (GTK_LABEL (infoDialog.text), buf); + gtk_widget_show_now (infoDialog.dialog); + g_free (buf); + GUI_Refresh (); + + if (SendSMSCore (&sms) != GE_SMSSENDOK) + { + gtk_widget_hide (infoDialog.dialog); + GUI_Refresh (); + break; + } + + gtk_widget_hide (infoDialog.dialog); + GUI_Refresh (); + + sleep (1); + } + } + } + else + { + sms.UDHType = GSM_NoUDH; + strncpy (sms.MessageText, text, GSM_MAX_SMS_LENGTH + 1); + sms.MessageText[GSM_MAX_SMS_LENGTH] = '\0'; + + buf = g_strdup_printf (_("Sending SMS to %s ...\n"), sms.Destination); + gtk_label_set_text (GTK_LABEL (infoDialog.text), buf); + gtk_widget_show_now (infoDialog.dialog); + g_free (buf); + GUI_Refresh (); + + (void) SendSMSCore (&sms); + gtk_widget_hide (infoDialog.dialog); + GUI_Refresh (); + } + + i++; + } + + g_strfreev (addresses); + + g_free (text); +} + + +static GtkItemFactoryEntry send_menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "X", SendSMS, 0, NULL}, + { NULL, "S", NULL, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", CheckAddress, 0, NULL}, + { NULL, "C", ShowSelectContactsDialog, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSMSSend, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help2, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitSendMenu (void) +{ + send_menu_items[0].path = g_strdup (_("/_File")); + send_menu_items[1].path = g_strdup (_("/File/Sen_d")); + send_menu_items[2].path = g_strdup (_("/File/_Save")); + send_menu_items[3].path = g_strdup (_("/File/Sep1")); + send_menu_items[4].path = g_strdup (_("/File/Check _Names")); + send_menu_items[5].path = g_strdup (_("/File/C_ontacts")); + send_menu_items[6].path = g_strdup (_("/File/Sep2")); + send_menu_items[7].path = g_strdup (_("/File/_Close")); + send_menu_items[8].path = g_strdup (_("/_Help")); + send_menu_items[9].path = g_strdup (_("/Help/_Help")); + send_menu_items[10].path = g_strdup (_("/Help/_About")); +} + + +static void CreateSMSSendWindow (void) +{ + int nmenu_items = sizeof (send_menu_items) / sizeof (send_menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *hbox, *vbox; + GtkWidget *button; + GtkWidget *pixmap; + GtkWidget *label; + GtkWidget *toolbar; + GtkWidget *scrolledWindow; + GtkTooltips *tooltips; + + if (sendSMS.SMSSendWindow) + return; + + InitSendMenu (); + sendSMS.SMSSendWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW(sendSMS.SMSSendWindow), "SMSSendWindow", "Xgnokii"); + + //gtk_widget_set_usize (GTK_WIDGET (sendSMS.SMSSendWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (sendSMS.SMSSendWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (sendSMS.SMSSendWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, send_menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (sendSMS.SMSSendWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (sendSMS.SMSSendWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + /* Create the toolbar */ + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send message"), NULL, + NewPixmap(SendSMS_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) SendSMS, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save message to outbox"), NULL, + NewPixmap(Send_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NULL, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Check names"), NULL, + NewPixmap(Check_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) CheckAddress, NULL); + + gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + /* Address line */ + hbox = gtk_hbox_new (FALSE, 3); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 3); + gtk_widget_show (hbox); + + label = gtk_label_new (_("To:")); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 3); + gtk_widget_show (label); + + sendSMS.addr = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), sendSMS.addr, TRUE, TRUE, 1); + + sendSMS.addrTip = gtk_tooltips_new (); + gtk_tooltips_set_tip (sendSMS.addrTip, sendSMS.addr, "", NULL); + gtk_tooltips_disable (sendSMS.addrTip); + + gtk_widget_show (sendSMS.addr); + + button = gtk_button_new (); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (ShowSelectContactsDialog), (gpointer) NULL); + + pixmap = NewPixmap(Names_xpm, sendSMS.SMSSendWindow->window, + &sendSMS.SMSSendWindow->style->bg[GTK_STATE_NORMAL]); + gtk_container_add (GTK_CONTAINER (button), pixmap); + gtk_widget_show (pixmap); + gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 5); + + tooltips = gtk_tooltips_new (); + gtk_tooltips_set_tip (tooltips, button, _("Select contacts"), NULL); + + gtk_widget_show (button); + + hbox = gtk_hbox_new (FALSE, 3); + gtk_box_pack_end (GTK_BOX (main_vbox), hbox, TRUE, TRUE, 3); + gtk_widget_show (hbox); + + /* Edit SMS widget */ + vbox = gtk_vbox_new (FALSE, 3); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 3); + gtk_widget_show (vbox); + + sendSMS.status = gtk_frame_new ("0/1"); + gtk_frame_set_label_align (GTK_FRAME (sendSMS.status), 1.0, 0.0); + gtk_frame_set_shadow_type (GTK_FRAME (sendSMS.status), GTK_SHADOW_OUT); + + gtk_box_pack_end (GTK_BOX (vbox), sendSMS.status, TRUE, TRUE, 5); + gtk_widget_show (sendSMS.status); + + sendSMS.smsSendText = gtk_text_new (NULL, NULL); + gtk_widget_set_usize (GTK_WIDGET (sendSMS.smsSendText), 0, 120); + gtk_text_set_editable (GTK_TEXT (sendSMS.smsSendText), TRUE); + gtk_text_set_word_wrap (GTK_TEXT (sendSMS.smsSendText), TRUE); + gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText), + "key_press_event", + GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL); + gtk_signal_connect_after (GTK_OBJECT (sendSMS.smsSendText), + "button_press_event", + GTK_SIGNAL_FUNC(RefreshSMSLength), (gpointer) NULL); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_set_border_width (GTK_CONTAINER (scrolledWindow), 5); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + + gtk_container_add (GTK_CONTAINER (scrolledWindow), sendSMS.smsSendText); + gtk_container_add (GTK_CONTAINER (sendSMS.status), scrolledWindow); + + gtk_widget_show (sendSMS.smsSendText); + gtk_widget_show (scrolledWindow); + + /* Options widget */ + vbox = gtk_vbox_new (FALSE, 3); + gtk_box_pack_end (GTK_BOX (hbox), vbox, FALSE, FALSE, 5); + gtk_widget_show (vbox); + + sendSMS.report = gtk_check_button_new_with_label (_("Delivery report")); + gtk_box_pack_start (GTK_BOX (vbox), sendSMS.report, FALSE, FALSE, 3); + gtk_widget_show (sendSMS.report); + + sendSMS.longSMS = gtk_check_button_new_with_label (_("Send as Long SMS")); + gtk_box_pack_start (GTK_BOX (vbox), sendSMS.longSMS, FALSE, FALSE, 3); + gtk_widget_show (sendSMS.longSMS); + + label = gtk_label_new (_("SMS Center:")); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 1); + gtk_widget_show (label); + + GUI_InitSMSSettings (); + sendSMS.smscOptionMenu = gtk_option_menu_new(); + + GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED); + + gtk_box_pack_start (GTK_BOX (vbox), sendSMS.smscOptionMenu, FALSE, FALSE, 1); + gtk_widget_show (sendSMS.smscOptionMenu); +} + + +static void NewSMS (void) +{ + if (!sendSMS.SMSSendWindow) + CreateSMSSendWindow (); + + gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("New Message")); + + gtk_tooltips_disable (sendSMS.addrTip); + + gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText)); + gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0); + gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText))); + gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText)); + + gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), ""); + + RefreshSMSStatus (); + + gtk_widget_show (sendSMS.SMSSendWindow); +} + + +static void ForwardSMS (void) +{ + gchar *buf; + + if (GTK_CLIST (SMS.smsClist)->selection == NULL) + return; + + if (!sendSMS.SMSSendWindow) + CreateSMSSendWindow (); + + gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Forward Message")); + + gtk_tooltips_disable (sendSMS.addrTip); + + gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText)); + gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0); + gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText))); + gtk_clist_get_text (GTK_CLIST (SMS.smsClist), + GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data), + 3, &buf); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + buf, -1); + + gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText)); + + gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), ""); + + RefreshSMSStatus (); + + gtk_widget_show (sendSMS.SMSSendWindow); +} + + +/* +static inline gint CompareSMSMessageLocation (gconstpointer a, gconstpointer b) +{ + return !(((GSM_SMSMessage *) a)->Location == ((GSM_SMSMessage *) b)->Location); +} +*/ + + +static void ReplySMS (void) +{ + gchar *buf; +// GSList *r; +// GSM_SMSMessage msg; + + if (GTK_CLIST (SMS.smsClist)->selection == NULL) + return; + + if (!sendSMS.SMSSendWindow) + CreateSMSSendWindow (); + + gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Reply Message")); + + gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText)); + gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0); + gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), + gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText))); + gtk_clist_get_text (GTK_CLIST (SMS.smsClist), + GPOINTER_TO_INT(GTK_CLIST (SMS.smsClist)->selection->data), + 3, &buf); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, + &(sendSMS.smsSendText->style->black), NULL, buf, -1); + + gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText)); + + //msg.Location = *(((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist), + // GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->msgPtr); + + //r = g_slist_find_custom (SMS.messages, &msg, CompareSMSMessageLocation); + //if (r) + gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), + ((MessagePointers *) gtk_clist_get_row_data(GTK_CLIST (SMS.smsClist), + GPOINTER_TO_INT (GTK_CLIST (SMS.smsClist)->selection->data)))->sender); + + CheckAddressMain (); + RefreshSMSStatus (); + + gtk_widget_show (sendSMS.SMSSendWindow); +} + + +static void NewBC (void) +{ + if (!sendSMS.SMSSendWindow) + CreateSMSSendWindow (); + + gtk_window_set_title (GTK_WINDOW (sendSMS.SMSSendWindow), _("Bussiness Card")); + + gtk_tooltips_disable (sendSMS.addrTip); + + gtk_text_freeze (GTK_TEXT (sendSMS.smsSendText)); + gtk_text_set_point (GTK_TEXT (sendSMS.smsSendText), 0); + gtk_text_forward_delete (GTK_TEXT (sendSMS.smsSendText), gtk_text_get_length (GTK_TEXT (sendSMS.smsSendText))); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL, + "Business Card\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.name, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + ", ", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.title, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.company, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL, + "tel ", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.telephone, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(SMS.colour), NULL, + "fax ", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.fax, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.email, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n", -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + xgnokiiConfig.user.address, -1); + + gtk_text_insert (GTK_TEXT (sendSMS.smsSendText), NULL, &(sendSMS.smsSendText->style->black), NULL, + "\n", -1); + + gtk_text_thaw (GTK_TEXT (sendSMS.smsSendText)); + + gtk_entry_set_text (GTK_ENTRY (sendSMS.addr), ""); + + RefreshSMSStatus (); + + gtk_widget_show (sendSMS.SMSSendWindow); +} + + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "S", NULL, 0, NULL}, + { NULL, "M", SaveToMailbox, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSMS, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "N", NewSMS, 0, NULL}, + { NULL, "F", ForwardSMS, 0, NULL}, + { NULL, "R", ReplySMS, 0, NULL}, + { NULL, "D", DeleteSMS, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "B", NewBC, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitMainMenu (void) +{ + register gint i = 0; + + menu_items[i++].path = g_strdup (_("/_File")); + menu_items[i++].path = g_strdup (_("/File/_Save")); + menu_items[i++].path = g_strdup (_("/File/Save to mailbo_x")); + menu_items[i++].path = g_strdup (_("/File/Sep1")); + menu_items[i++].path = g_strdup (_("/File/_Close")); + menu_items[i++].path = g_strdup (_("/_Messages")); + menu_items[i++].path = g_strdup (_("/_Messages/_New")); + menu_items[i++].path = g_strdup (_("/_Messages/_Forward")); + menu_items[i++].path = g_strdup (_("/_Messages/_Reply")); + menu_items[i++].path = g_strdup (_("/_Messages/_Delete")); + menu_items[i++].path = g_strdup (_("/Messages/Sep3")); + menu_items[i++].path = g_strdup (_("/_Messages/_Bussiness card")); + menu_items[i++].path = g_strdup (_("/_Help")); + menu_items[i++].path = g_strdup (_("/Help/_Help")); + menu_items[i++].path = g_strdup (_("/Help/_About")); +} + + +void GUI_CreateSMSWindow (void) +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *toolbar; + GtkWidget *scrolledWindow; + GtkWidget *vpaned, *hpaned; + GtkWidget *tree, *treeSMSItem, *treeInboxItem, *treeOutboxItem, *subTree; + SortColumn *sColumn; + GdkColormap *cmap; + register gint i; + gchar *titles[4] = { _("Status"), _("Date / Time"), _("Sender"), _("Message")}; + + + InitMainMenu (); + GUI_SMSWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_SMSWindow), "SMSWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_SMSWindow), _("Short Message Service")); + //gtk_widget_set_usize (GTK_WIDGET (GUI_SMSWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (GUI_SMSWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_SMSWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SMSWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_SMSWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + /* Create the toolbar */ + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("New message"), NULL, + NewPixmap(Edit_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NewSMS, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Forward message"), NULL, + NewPixmap(Forward_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ForwardSMS, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Reply message"), NULL, + NewPixmap(Reply_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ReplySMS, NULL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Bussiness Card"), NULL, + NewPixmap(BCard_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) NewBC, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete message"), NULL, + NewPixmap(Delete_xpm, GUI_SMSWindow->window, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) DeleteSMS, NULL); + + gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + vpaned = gtk_vpaned_new (); + gtk_paned_set_handle_size (GTK_PANED (vpaned), 10); + gtk_paned_set_gutter_size (GTK_PANED (vpaned), 15); + gtk_box_pack_end (GTK_BOX (main_vbox), vpaned, TRUE, TRUE, 0); + gtk_widget_show (vpaned); + + hpaned = gtk_hpaned_new (); + gtk_paned_set_handle_size (GTK_PANED (hpaned), 8); + gtk_paned_set_gutter_size (GTK_PANED (hpaned), 10); + gtk_paned_add1 (GTK_PANED (vpaned), hpaned); + gtk_widget_show (hpaned); + + /* Navigation tree */ + tree = gtk_tree_new (); + gtk_tree_set_selection_mode (GTK_TREE (tree), GTK_SELECTION_SINGLE); + gtk_widget_show (tree); + + treeSMSItem = gtk_tree_item_new_with_label (_("SMS's")); + gtk_tree_append (GTK_TREE (tree), treeSMSItem); + gtk_widget_show (treeSMSItem); + + subTree = gtk_tree_new (); + gtk_tree_set_selection_mode (GTK_TREE (subTree), GTK_SELECTION_SINGLE); + gtk_tree_set_view_mode (GTK_TREE (subTree), GTK_TREE_VIEW_ITEM); + gtk_tree_item_set_subtree (GTK_TREE_ITEM (treeSMSItem), subTree); + + treeInboxItem = gtk_tree_item_new_with_label (_("Inbox")); + gtk_tree_append (GTK_TREE (subTree), treeInboxItem); + gtk_signal_connect (GTK_OBJECT (treeInboxItem), "select", + GTK_SIGNAL_FUNC (SelectTreeItem), GINT_TO_POINTER (0)); + gtk_widget_show (treeInboxItem); + + treeOutboxItem = gtk_tree_item_new_with_label (_("Outbox")); + gtk_tree_append (GTK_TREE (subTree), treeOutboxItem); + gtk_signal_connect (GTK_OBJECT (treeOutboxItem), "select", + GTK_SIGNAL_FUNC (SelectTreeItem), GINT_TO_POINTER (1)); + gtk_widget_show (treeOutboxItem); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_set_usize (scrolledWindow, 75, 80); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow); + + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledWindow), + tree); + gtk_widget_show (scrolledWindow); + + + /* Message viewer */ + SMS.smsText = gtk_text_new (NULL, NULL); + gtk_text_set_editable (GTK_TEXT (SMS.smsText), FALSE); + gtk_text_set_word_wrap (GTK_TEXT (SMS.smsText), TRUE); + //gtk_text_set_line_wrap (GTK_TEXT (SMS.smsText), TRUE); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); + + gtk_paned_add2 (GTK_PANED (hpaned), scrolledWindow); + + gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsText); + gtk_widget_show_all (scrolledWindow); + + /* Messages list */ + SMS.smsClist = gtk_clist_new_with_titles (4, titles); + gtk_clist_set_shadow_type (GTK_CLIST (SMS.smsClist), GTK_SHADOW_OUT); + gtk_clist_set_compare_func (GTK_CLIST (SMS.smsClist), CListCompareFunc); + gtk_clist_set_sort_column (GTK_CLIST (SMS.smsClist), 1); + gtk_clist_set_sort_type (GTK_CLIST (SMS.smsClist), GTK_SORT_ASCENDING); + gtk_clist_set_auto_sort (GTK_CLIST (SMS.smsClist), FALSE); + gtk_clist_set_selection_mode (GTK_CLIST (SMS.smsClist), GTK_SELECTION_EXTENDED); + + gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 0, 40); + gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 1, 142); + gtk_clist_set_column_width (GTK_CLIST (SMS.smsClist), 2, 135); + //gtk_clist_set_column_justification (GTK_CLIST (SMS.smsClist), 2, GTK_JUSTIFY_CENTER); + + for (i = 0; i < 4; i++) + { + if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL) + { + g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + gtk_main_quit (); + } + sColumn->clist = SMS.smsClist; + sColumn->column = i; + gtk_signal_connect (GTK_OBJECT (GTK_CLIST (SMS.smsClist)->column[i].button), "clicked", + GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn); + } + + gtk_signal_connect (GTK_OBJECT (SMS.smsClist), "select_row", + GTK_SIGNAL_FUNC (ClickEntry), NULL); + + scrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_set_usize (scrolledWindow, 550, 100); + gtk_container_add (GTK_CONTAINER (scrolledWindow), SMS.smsClist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + + gtk_paned_add2 (GTK_PANED (vpaned), scrolledWindow); + + gtk_widget_show (SMS.smsClist); + gtk_widget_show (scrolledWindow); + + CreateErrorDialog (&errorDialog, GUI_SMSWindow); + CreateInfoDialog (&infoDialog, GUI_SMSWindow); + + gtk_signal_emit_by_name(GTK_OBJECT (treeSMSItem), "expand"); + + cmap = gdk_colormap_get_system(); + SMS.colour.red = 0xffff; + SMS.colour.green = 0; + SMS.colour.blue = 0; + if (!gdk_color_alloc (cmap, &(SMS.colour))) + g_error (_("couldn't allocate colour")); + + questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SMSWindow->window, + &questMark.mask, + &GUI_SMSWindow->style->bg[GTK_STATE_NORMAL], + quest_xpm); + + GUIEventAdd (GUI_EVENT_SMS_CENTERS_CHANGED, GUI_RefreshSMSCenterMenu); + GUIEventAdd (GUI_EVENT_SMS_NUMBER_CHANGED, GUI_RefreshMessageWindow); +} diff --git a/xgnokii/xgnokii_sms.h b/xgnokii/xgnokii_sms.h new file mode 100644 index 0000000..d40dea1 --- /dev/null +++ b/xgnokii/xgnokii_sms.h @@ -0,0 +1,27 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Tue Nov 27 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_SMS_H +#define XGNOKII_SMS_H + +extern void GUI_CreateSMSWindow (void); + +extern void GUI_ShowSMS (void); + +extern void GUI_RefreshMessageWindow (void); + +extern void GUI_RefreshSMSCenterMenu (void); + +#endif diff --git a/xgnokii/xgnokii_speed.c b/xgnokii/xgnokii_speed.c new file mode 100644 index 0000000..51db1e5 --- /dev/null +++ b/xgnokii/xgnokii_speed.c @@ -0,0 +1,668 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Apr 30 2000 + Modified by Jan Derfinak + +*/ + + +#include +#include +#include +#include +#include "xgnokii_contacts.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_common.h" +#include "xgnokii_speed.h" +#include "xpm/Read.xpm" +#include "xpm/Send.xpm" +#include "xpm/Open.xpm" +#include "xpm/Save.xpm" +#include "xpm/Edit.xpm" +#include "xpm/quest.xpm" + + +static GtkWidget *GUI_SpeedDialWindow; +static ErrorDialog errorDialog = {NULL, NULL}; +static InfoDialog infoDialog = {NULL, NULL}; +static ExportDialogData exportDialogData = {NULL}; +static GtkWidget *clist; +static QuestMark questMark; +static gint selectedKey; +static bool speedDialInitialized; + + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/speeddial/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static void CloseSpeedDial (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_SpeedDialWindow); +} + + +static inline void DestroyCListData (gpointer data) +{ + if (data) + g_free ((D_SpeedDial *) data); +} + + +static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event, + SelectContactData *data) +{ + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (widget)); +} + + +static void CancelSelectContactDialog (GtkWidget *widget, + SelectContactData *data) +{ + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (data->dialog)); +} + + +static void OkSelectContactDialog (GtkWidget *widget, + SelectContactData *data) +{ + GList *sel; + PhonebookEntry *pbEntry; + gchar *key; + + if ((sel = GTK_CLIST (data->clist)->selection) != NULL) + { + D_SpeedDial *d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial)); + + gtk_clist_freeze (GTK_CLIST (clist)); + + pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist), + GPOINTER_TO_INT (sel->data)); + + gtk_clist_get_text (GTK_CLIST (clist), selectedKey, 0, &key); + + gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 1, pbEntry->entry.Name); + gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 2, pbEntry->entry.Number); + + d->entry.Number = *key - '0'; + d->entry.MemoryType = pbEntry->entry.MemoryType + 2; + d->entry.Location = pbEntry->entry.Location; + + gtk_clist_set_row_data_full (GTK_CLIST (clist), selectedKey, + (gpointer) d, DestroyCListData); + + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + } + + gtk_widget_destroy (GTK_WIDGET (data->clist)); + gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow)); + gtk_widget_destroy (GTK_WIDGET (data->dialog)); +} + +static void ShowSelectContactsDialog (void) +{ + SelectContactData *r; + + if (!GUI_ContactsIsIntialized ()) + GUI_ReadContacts (); + + if ((r = GUI_SelectContactDialog ()) == NULL) + return; + + gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r); + + gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked", + GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r); + gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked", + GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r); +} + + +static inline void EditKey (void) +{ + GList *sel; + + if ((sel = GTK_CLIST (clist)->selection) != NULL) + { + selectedKey = GPOINTER_TO_INT (sel->data); + ShowSelectContactsDialog (); + } +} + + +static inline void ClickEntry (GtkWidget *clist, + gint row, + gint column, + GdkEventButton *event, + gpointer data ) +{ + if(event && event->type == GDK_2BUTTON_PRESS) + { + selectedKey = row; + ShowSelectContactsDialog (); + } +} + + +static void ReadSpeedDial (void) +{ + PhonebookEntry *pbEntry; + D_SpeedDial *d; + PhoneEvent *e; + gchar *row[3]; + gchar buf[2] = " "; + gint location; + register gint i, row_i = 0; + + + if (!GUI_ContactsIsIntialized ()) + GUI_ReadContacts (); + + gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading data ...")); + gtk_widget_show_now (infoDialog.dialog); + GUI_Refresh (); + + gtk_clist_freeze (GTK_CLIST (clist)); + gtk_clist_clear (GTK_CLIST (clist)); + + for (i = 1; i < 10; i++) + { + if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL) + { + g_print (_("Cannot allocate memory!")); + return; + } + d->entry.Number = i; + if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL) + { + g_print (_("Cannot allocate memory!")); + g_free (d); + return; + } + e->event = Event_GetSpeedDial; + e->data = d; + GUI_InsertEvent (e); + pthread_mutex_lock (&speedDialMutex); + pthread_cond_wait (&speedDialCond, &speedDialMutex); + pthread_mutex_unlock (&speedDialMutex); + + if (d->status != GE_NONE) + g_print ("Cannot read speed dial key %d!\n", i); + else + { + if (d->entry.Location == 0) + location = i; + else + location = d->entry.Location; + if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL) + { + g_free (d); + continue; + } + *buf = i + '0'; + row[0] = buf; + row[1] = pbEntry->entry.Name; + row[2] = pbEntry->entry.Number; + + gtk_clist_append (GTK_CLIST (clist), row); + gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++, + (gpointer) d, DestroyCListData); + } + //GUI_Refresh (); + gtk_widget_hide (infoDialog.dialog); + } + + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + speedDialInitialized = TRUE; +} + + +static void SaveSpeedDial (void) +{ + //gchar buf[80]; + D_SpeedDial *d; + PhoneEvent *e; + register gint i; + + if (speedDialInitialized) + for(i = 1; i < 10; i++) + { + if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1))) + { + if (d->entry.Location == 0) + continue; + if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL) + { + g_print (_("Cannot allocate memory!")); + return; + } + e->event = Event_SendSpeedDial; + e->data = d; + GUI_InsertEvent (e); +/* pthread_mutex_lock (&speedDialMutex); + pthread_cond_wait (&speedDialCond, &speedDialMutex); + pthread_mutex_unlock (&speedDialMutex); + + if (d->status != GE_NONE) + { + g_snprintf (buf, 80, _("Error writing speed\ndial for key %d!\n"), + d->entry.Number); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + } */ + } +// GUI_Refresh (); + } +} + + +static bool ParseLine (D_SpeedDial *d, gchar *buf) +{ + gchar **strings = g_strsplit (buf, ";", 3); + + d->entry.Number = *strings[0] - '0'; + if (d->entry.Number < 1 || d->entry.Number > 9) + { + g_strfreev (strings); + return FALSE; + } + + d->entry.MemoryType = *strings[1] - '0'; + if (d->entry.MemoryType < 2 || d->entry.MemoryType > 3) + { + g_strfreev (strings); + return FALSE; + } + + d->entry.Location = atoi (strings[2]); + if (d->entry.Location == LONG_MIN || d->entry.Location == LONG_MAX || + d->entry.Location < 0) + { + g_strfreev (strings); + return FALSE; + } + + g_strfreev (strings); + return TRUE; +} + + +static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs) +{ + FILE *f; + D_SpeedDial *d; + PhonebookEntry *pbEntry; + gchar buf[IO_BUF_LEN]; + gchar *row[3]; + gchar *fileName; + gint location; + register gint i, row_i = 0; + + fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (fileName, "r")) == NULL) + { + g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName); + gtk_label_set_text (GTK_LABEL(errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + if (!GUI_ContactsIsIntialized ()) + GUI_ReadContacts (); + + gtk_clist_freeze (GTK_CLIST (clist)); + gtk_clist_clear (GTK_CLIST (clist)); + speedDialInitialized = FALSE; + + i = 0; + while (fgets (buf, IO_BUF_LEN, f) && i++ < 9) + { + if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL) + { + g_print (_("Cannot allocate memory!\n")); + gtk_clist_clear (GTK_CLIST (clist)); + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + return; + } + if (ParseLine (d, buf)) + { + if (d->entry.Number != i) + { + g_free (d); + gtk_clist_clear (GTK_CLIST (clist)); + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!")); + gtk_widget_show (errorDialog.dialog); + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + return; + } + if (d->entry.Location == 0) + location = i; + else + location = d->entry.Location; + if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL) + { + g_free (d); + continue; + } + *buf = i + '0'; + *(buf + 1) = '\0'; + row[0] = buf; + row[1] = pbEntry->entry.Name; + row[2] = pbEntry->entry.Number; + gtk_clist_append (GTK_CLIST (clist), row); + gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++, + (gpointer) d, DestroyCListData); + } + else + { + g_free (d); + gtk_clist_clear (GTK_CLIST (clist)); + gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!")); + gtk_widget_show (errorDialog.dialog); + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + return; + } + } + + gtk_clist_sort (GTK_CLIST (clist)); + gtk_clist_thaw (GTK_CLIST (clist)); + speedDialInitialized = TRUE; +} + + +static void ImportSpeedDial (void) +{ + static GtkWidget *fileDialog = NULL; + + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Import")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); +} + + +static void ExportSpeedDialMain (gchar *name) +{ + FILE *f; + D_SpeedDial *d; + gchar buf[IO_BUF_LEN]; + register gint i; + + if ((f = fopen( name, "w")) == NULL) + { + g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name); + gtk_label_set_text (GTK_LABEL (errorDialog.text), buf); + gtk_widget_show (errorDialog.dialog); + return; + } + + for(i = 1; i < 10; i++) + { + if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1))) + { + sprintf (buf, "%d;%d;%d;", d->entry.Number, d->entry.MemoryType, d->entry.Location); + fprintf (f, "%s\n", buf); + } + } + + fclose(f); +} + + +static void YesExportDialog (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GTK_WIDGET (data)); + ExportSpeedDialMain (exportDialogData.fileName); +} + + +static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs) +{ + static YesNoDialog dialog = { NULL, NULL}; + FILE *f; + gchar err[80]; + + + exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + gtk_widget_hide (GTK_WIDGET (fs)); + + if ((f = fopen (exportDialogData.fileName, "r")) != NULL) + { + fclose (f); + if (dialog.dialog == NULL) + { + CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_SpeedDialWindow); + gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?")); + g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName); + gtk_label_set_text (GTK_LABEL(dialog.text), err); + } + gtk_widget_show (dialog.dialog); + } + else + ExportSpeedDialMain (exportDialogData.fileName); +} + + +static void ExportSpeedDial (void) +{ + static GtkWidget *fileDialog = NULL; + + if (speedDialInitialized) + { + if (fileDialog == NULL) + { + fileDialog = gtk_file_selection_new (_("Export")); + gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog); + } + + gtk_widget_show (fileDialog); + } +} + + +inline void GUI_ShowSpeedDial (void) +{ + ReadSpeedDial (); + gtk_widget_show (GUI_SpeedDialWindow); +} + + +static GtkItemFactoryEntry menu_items[] = { + { NULL, NULL, NULL, 0, ""}, + { NULL, "R", ReadSpeedDial, 0, NULL}, + { NULL, "S", SaveSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "I", ImportSpeedDial, 0, NULL}, + { NULL, "E", ExportSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, "W", CloseSpeedDial, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, EditKey, 0, NULL}, + { NULL, NULL, NULL, 0, ""}, + { NULL, NULL, Help1, 0, NULL}, + { NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Read from phone")); + menu_items[2].path = g_strdup (_("/File/_Save to phone")); + menu_items[3].path = g_strdup (_("/File/Sep1")); + menu_items[4].path = g_strdup (_("/File/_Import from file")); + menu_items[5].path = g_strdup (_("/File/_Export to file")); + menu_items[6].path = g_strdup (_("/File/Sep2")); + menu_items[7].path = g_strdup (_("/File/_Close")); + menu_items[8].path = g_strdup (_("/_Edit")); + menu_items[9].path = g_strdup (_("/Edit/_Edit")); + menu_items[10].path = g_strdup (_("/_Help")); + menu_items[11].path = g_strdup (_("/Help/_Help")); + menu_items[12].path = g_strdup (_("/Help/_About")); +} + + +void GUI_CreateSpeedDialWindow (void) +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + SortColumn *sColumn; + GtkWidget *menubar; + GtkWidget *main_vbox; + GtkWidget *toolbar; + GtkWidget *clistScrolledWindow; + register gint i; + gchar *titles[3] = {_("Key"), _("Name"), _("Number")}; + + + InitMainMenu (); + GUI_SpeedDialWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_SpeedDialWindow), "SpeedDialWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_SpeedDialWindow), _("Speed Dial")); + gtk_widget_set_usize (GTK_WIDGET (GUI_SpeedDialWindow), 332, 220); + //gtk_container_set_border_width (GTK_CONTAINER (GUI_SpeedDialWindow), 10); + gtk_signal_connect (GTK_OBJECT (GUI_SpeedDialWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_SpeedDialWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SpeedDialWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_SpeedDialWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + /* Create the toolbar */ + + toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); + gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL, + NewPixmap(Read_xpm, GUI_SpeedDialWindow->window, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ReadSpeedDial, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL, + NewPixmap(Send_xpm, GUI_SpeedDialWindow->window, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) SaveSpeedDial, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL, + NewPixmap(Open_xpm, GUI_SpeedDialWindow->window, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ImportSpeedDial, NULL); + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL, + NewPixmap(Save_xpm, GUI_SpeedDialWindow->window, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) ExportSpeedDial, NULL); + + gtk_toolbar_append_space (GTK_TOOLBAR (toolbar)); + + gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL, + NewPixmap(Edit_xpm, GUI_SpeedDialWindow->window, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]), + (GtkSignalFunc) EditKey, NULL); + + gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0); + gtk_widget_show (toolbar); + + clist = gtk_clist_new_with_titles (3, titles); + gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT); +// gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc); + gtk_clist_set_sort_column (GTK_CLIST (clist), 0); + gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING); + gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE); + //gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED); + + gtk_clist_set_column_width (GTK_CLIST (clist), 1, 150); + gtk_clist_set_column_width (GTK_CLIST (clist), 2, 115); + gtk_clist_set_column_justification (GTK_CLIST (clist), 0, GTK_JUSTIFY_CENTER); +// gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, xgnokiiConfig.callerGroupsSupported); + + for (i = 0; i < 3; i++) + { + if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL) + { + g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__); + gtk_main_quit (); + } + sColumn->clist = clist; + sColumn->column = i; + gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked", + GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn); + } + + gtk_signal_connect (GTK_OBJECT (clist), "select_row", + GTK_SIGNAL_FUNC (ClickEntry), NULL); + + clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow, + TRUE, TRUE, 0); + + gtk_widget_show (clist); + gtk_widget_show (clistScrolledWindow); + + questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SpeedDialWindow->window, + &questMark.mask, + &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL], + quest_xpm); + + CreateErrorDialog (&errorDialog, GUI_SpeedDialWindow); + CreateInfoDialog (&infoDialog, GUI_SpeedDialWindow); + speedDialInitialized = FALSE; +} diff --git a/xgnokii/xgnokii_speed.h b/xgnokii/xgnokii_speed.h new file mode 100644 index 0000000..7be5249 --- /dev/null +++ b/xgnokii/xgnokii_speed.h @@ -0,0 +1,23 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Dec 26 1999 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_SPEED_H +#define XGNOKII_SPEED_H + +extern void GUI_CreateSpeedDialWindow (void); + +extern void GUI_ShowSpeedDial (void); + +#endif diff --git a/xgnokii/xgnokii_xkeyb.c b/xgnokii/xgnokii_xkeyb.c new file mode 100644 index 0000000..42fc7f8 --- /dev/null +++ b/xgnokii/xgnokii_xkeyb.c @@ -0,0 +1,302 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun May 14 2000 + Modified by Jan Derfinak + +*/ + +#include +#include +#include "misc.h" +#include "fbus-6110.h" +#include "xgnokii_common.h" +#include "xgnokii.h" +#include "xgnokii_lowlevel.h" +#include "xgnokii_xkeyb.h" + +typedef struct { + int top_left_x, top_left_y; + int bottom_right_x, bottom_right_y; + int code; +} ButtonT; + + +static GtkWidget *GUI_XkeybWindow; +static GtkWidget *pixArea; +static GtkWidget *phonePixmap = NULL; +static ErrorDialog errorDialog = {NULL, NULL}; +static ButtonT *button = NULL; + +static ButtonT button_6110[30] = { + { 103, 91, 114, 107, 0x0d }, /* Power */ + { 28, 240, 54, 263, 0x19 }, /* Menu */ + { 84, 240, 110, 263, 0x1a }, /* Names */ + { 58, 245, 82, 258, 0x17 }, /* Up */ + { 55, 263, 85, 276, 0x18 }, /* Down */ + { 22, 271, 50, 289, 0x0e }, /* Green */ + { 91, 271, 115, 289, 0x0f }, /* Red */ + { 18, 294, 44, 310, 0x01 }, /* 1 */ + { 56, 294, 85, 310, 0x02 }, /* 2 */ + { 98, 294, 121, 310, 0x03 }, /* 3 */ + { 18, 317, 44, 333, 0x04 }, /* 4 */ + { 56, 317, 85, 333, 0x05 }, /* 5 */ + { 98, 317, 121, 333, 0x06 }, /* 6 */ + { 18, 342, 44, 356, 0x07 }, /* 7 */ + { 56, 342, 85, 356, 0x08 }, /* 8 */ + { 98, 342, 121, 356, 0x09 }, /* 9 */ + { 18, 365, 44, 380, 0x0c }, /* * */ + { 56, 365, 85, 380, 0x0a }, /* 0 */ + { 98, 365, 121, 380, 0x0b }, /* # */ + { 1, 138, 10, 150, 0x10 } , /* Volume + */ + { 1, 165, 10, 176, 0x11 } , /* Volume - */ + { 0, 0, 0, 0, 0x00 } +}; + +static ButtonT button_6150[30] = { + { 99, 78, 114, 93, 0x0d }, /* Power */ + { 20, 223, 49, 245, 0x19 }, /* Menu */ + { 90, 223, 120, 245, 0x1a }, /* Names */ + { 59, 230, 83, 247, 0x17 }, /* Up */ + { 56, 249, 84, 265, 0x18 }, /* Down */ + { 14, 254, 51, 273, 0x0e }, /* Green */ + { 90, 255, 126, 273, 0x0f }, /* Red */ + { 18, 281, 53, 299, 0x01 }, /* 1 */ + { 55, 280, 86, 299, 0x02 }, /* 2 */ + { 90, 281, 122, 299, 0x03 }, /* 3 */ + { 18, 303, 53, 323, 0x04 }, /* 4 */ + { 55, 303, 87, 323, 0x05 }, /* 5 */ + { 90, 303, 122, 323, 0x06 }, /* 6 */ + { 18, 327, 53, 346, 0x07 }, /* 7 */ + { 53, 327, 87, 346, 0x08 }, /* 8 */ + { 90, 327, 122, 346, 0x09 }, /* 9 */ + { 18, 349, 53, 370, 0x0c }, /* * */ + { 56, 349, 87, 370, 0x0a }, /* 0 */ + { 98, 349, 122, 370, 0x0b }, /* # */ + { 2, 131, 10, 147, 0x10 }, /* Volume + */ + { 2, 155, 10, 173, 0x11 }, /* Volume - */ + { 0, 0, 0, 0, 0x00 } +}; + +static ButtonT button_5110[30] = { + { 100, 85, 114, 99, 0x0d }, /* Power */ + { 50, 240, 85, 265, 0x19 }, /* Menu */ + { 20, 240, 45, 260, 0x1a }, /* Names */ + { 100, 240, 117, 258, 0x17 }, /* Up */ + { 93, 267, 112, 287, 0x18 }, /* Down */ + { 14, 294, 44, 312, 0x01 }, /* 1 */ + { 54, 294, 83, 312, 0x02 }, /* 2 */ + { 94, 294, 122, 312, 0x03 }, /* 3 */ + { 14, 320, 44, 338, 0x04 }, /* 4 */ + { 54, 320, 83, 338, 0x05 }, /* 5 */ + { 94, 320, 122, 338, 0x06 }, /* 6 */ + { 14, 345, 44, 363, 0x07 }, /* 7 */ + { 54, 345, 83, 363, 0x08 }, /* 8 */ + { 94, 345, 122, 363, 0x09 }, /* 9 */ + { 18, 374, 49, 389, 0x0c }, /* * */ + { 53, 371, 82, 387, 0x0a }, /* 0 */ + { 96, 374, 119, 389, 0x0b }, /* # */ + { 0, 0, 0, 0, 0x00 } +}; + +static inline void Help1 (GtkWidget *w, gpointer data) +{ + gchar *indx = g_strdup_printf ("/help/%s/windows/xkeyb/index.html", xgnokiiConfig.locale); + Help (w, indx); + g_free (indx); +} + + +static GtkWidget *GetPixmap (void) +{ + GtkWidget *wpixmap; + GdkPixmap *pixmap; + GdkBitmap *mask; + gchar *file; + + if (!strcmp (phoneMonitor.phone.model, "6110") || + !strcmp (phoneMonitor.phone.model, "6120")) + { + button = button_6110; + file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6110.xpm"); + } + else if (!strcmp (phoneMonitor.phone.model, "6130") || + !strcmp (phoneMonitor.phone.model, "6150") || + !strcmp (phoneMonitor.phone.model, "616x") || + !strcmp (phoneMonitor.phone.model, "6185") || + !strcmp (phoneMonitor.phone.model, "6190")) + { + button = button_6150; + file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/6150.xpm"); + } + else if (!strcmp (phoneMonitor.phone.model, "5110") || + !strcmp (phoneMonitor.phone.model, "5130") || + !strcmp (phoneMonitor.phone.model, "5160") || + !strcmp (phoneMonitor.phone.model, "5190")) + { + button = button_5110; + file = g_strdup_printf ("%s%s", xgnokiiConfig.xgnokiidir, "/xpm/5110.xpm"); + } + else + return NULL; + + pixmap = gdk_pixmap_create_from_xpm (pixArea->window, &mask, + &pixArea->style->bg[GTK_STATE_NORMAL], + file); + g_free (file); + + if (pixmap == NULL) + return NULL; + + wpixmap = gtk_pixmap_new (pixmap, mask); + + return wpixmap; +} + + +static inline void CloseXkeyb (GtkWidget *w, gpointer data) +{ + gtk_widget_hide (GUI_XkeybWindow); +} + + +void GUI_ShowXkeyb (void) +{ + if (phonePixmap == NULL) + { + phonePixmap = GetPixmap (); + if (phonePixmap != NULL) + { + gtk_fixed_put (GTK_FIXED (pixArea), phonePixmap, 0 , 0); + gtk_widget_show (phonePixmap); + } + else + { + gtk_label_set_text (GTK_LABEL (errorDialog.text), + _("Cannot load background pixmap!")); + gtk_widget_show (errorDialog.dialog); + } + } + gtk_widget_show (GUI_XkeybWindow); +} + + +static gint ButtonEvent (GtkWidget *widget, GdkEventButton *event) +{ + unsigned char req[] = {FB61_FRAME_HEADER, 0x42, 0x01, 0x00, 0x01}; + register gint i = 0; + + if (button == NULL) + return TRUE; + + if (event->button != 1) + return TRUE; + + if (event->type == GDK_BUTTON_PRESS) + req[4] = 0x01; + else if (event->type == GDK_BUTTON_RELEASE) + req[4] = 0x02; + else + return TRUE; + +// g_print ("%f %f\n", event->x, event->y); + + while (button[i].top_left_x != 0) { + if (button[i].top_left_x <= event->x && + event->x <= button[i].bottom_right_x && + button[i].top_left_y <= event->y && + event->y <= button[i].bottom_right_y) + { + PhoneEvent *e = g_malloc (sizeof (PhoneEvent)); + + req[5]=button[i].code; + e->event = Event_SendKeyStroke; + e->data = g_memdup (req, sizeof (req)); + GUI_InsertEvent (e); + } + + i++; + } + + return TRUE; +} + + +static GtkItemFactoryEntry menu_items[] = { + {NULL, NULL, NULL, 0, ""}, + {NULL, "W", CloseXkeyb, 0, NULL}, + {NULL, NULL, NULL, 0, ""}, + {NULL, NULL, Help1, 0, NULL}, + {NULL, NULL, GUI_ShowAbout, 0, NULL}, +}; + +static void InitMainMenu (void) +{ + menu_items[0].path = g_strdup (_("/_File")); + menu_items[1].path = g_strdup (_("/File/_Close")); + menu_items[2].path = g_strdup (_("/_Help")); + menu_items[3].path = g_strdup (_("/Help/_Help")); + menu_items[4].path = g_strdup (_("/Help/_About")); +} + + +void GUI_CreateXkeybWindow (void) +{ + int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + GtkItemFactory *item_factory; + GtkAccelGroup *accel_group; + GtkWidget *menubar; + GtkWidget *main_vbox; + + InitMainMenu (); + GUI_XkeybWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_wmclass (GTK_WINDOW (GUI_XkeybWindow), "XkeybWindow", "Xgnokii"); + gtk_window_set_title (GTK_WINDOW (GUI_XkeybWindow), _("XGnokii Keyboard")); + //gtk_widget_set_usize (GTK_WIDGET (GUI_XkeybWindow), 436, 220); + gtk_signal_connect (GTK_OBJECT (GUI_XkeybWindow), "delete_event", + GTK_SIGNAL_FUNC (DeleteEvent), NULL); + gtk_widget_realize (GUI_XkeybWindow); + + accel_group = gtk_accel_group_new (); + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "
", + accel_group); + + gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_XkeybWindow)); + + /* Finally, return the actual menu bar created by the item factory. */ + menubar = gtk_item_factory_get_widget (item_factory, "
"); + + main_vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (main_vbox), 1); + gtk_container_add (GTK_CONTAINER (GUI_XkeybWindow), main_vbox); + gtk_widget_show (main_vbox); + + gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0); + gtk_widget_show (menubar); + + pixArea = gtk_fixed_new (); + gtk_signal_connect (GTK_OBJECT (pixArea), "button_press_event", + (GtkSignalFunc) ButtonEvent, NULL); + gtk_signal_connect (GTK_OBJECT (pixArea), "button_release_event", + (GtkSignalFunc) ButtonEvent, NULL); + gtk_widget_set_events (pixArea, GDK_EXPOSURE_MASK + | GDK_LEAVE_NOTIFY_MASK + | GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK + | GDK_POINTER_MOTION_MASK + | GDK_POINTER_MOTION_HINT_MASK); + + gtk_box_pack_start (GTK_BOX (main_vbox), pixArea, FALSE, FALSE, 3); + gtk_widget_show (pixArea); + + CreateErrorDialog (&errorDialog, GUI_XkeybWindow); +} diff --git a/xgnokii/xgnokii_xkeyb.h b/xgnokii/xgnokii_xkeyb.h new file mode 100644 index 0000000..b2544bd --- /dev/null +++ b/xgnokii/xgnokii_xkeyb.h @@ -0,0 +1,23 @@ +/* + + X G N O K I I + + A Linux/Unix GUI for Nokia mobile phones. + Copyright (C) 1999 Pavel Janík ml., Hugh Blemings + & Ján Derfiòák . + + Released under the terms of the GNU GPL, see file COPYING for more details. + + Last modification: Sun Mar 19 2000 + Modified by Jan Derfinak + +*/ + +#ifndef XGNOKII_XKEYB_H +#define XGNOKII_XKEYB_H + +extern void GUI_CreateXkeybWindow (); + +extern void GUI_ShowXkeyb (); + +#endif diff --git a/xgnokii/xpm/5110.xpm b/xgnokii/xpm/5110.xpm new file mode 100644 index 0000000..b017091 --- /dev/null +++ b/xgnokii/xpm/5110.xpm @@ -0,0 +1,691 @@ +/* XPM */ +static char *Background_5110[] = { +/* columns rows colors chars-per-pixel */ +"135 429 256 2", +" c Gray0", +". c #0d0a58", +"X c #7b7e75", +"o c #1a0c0a", +"O c none", +"+ c #2a3025", +"@ c #606458", +"# c #101038", +"$ c #585050", +"% c #605c70", +"& c #44343c", +"* c #080000", +"= c #000010", +"- c #687058", +"; c #554a58", +": c #140c28", +"> c #40483c", +", c #151538", +"< c #383040", +"1 c #505058", +"2 c #506060", +"3 c #000018", +"4 c #546054", +"5 c #606868", +"6 c #706870", +"7 c #0d0500", +"8 c #2c2c40", +"9 c #726e64", +"0 c #687068", +"q c #141c14", +"w c #485050", +"e c #302038", +"r c #423550", +"t c #606068", +"y c #302030", +"u c #282020", +"i c #060320", +"p c #524444", +"a c #484850", +"s c #100008", +"d c #0d0d08", +"f c #687868", +"g c #505860", +"h c #000808", +"j c #383038", +"k c #483848", +"l c #101040", +"z c #152025", +"x c #080008", +"c c #383840", +"v c #504850", +"b c #180820", +"n c #686678", +"m c #261c14", +"M c #303838", +"N c #282838", +"B c #101018", +"V c #242430", +"C c #605450", +"Z c #303038", +"A c #4a4d5d", +"S c #605868", +"D c #484858", +"F c #100010", +"G c #647464", +"H c #686870", +"J c #000830", +"K c #000800", +"L c #2a1d40", +"P c #000008", +"I c #302222", +"U c #403048", +"Y c #100810", +"T c #687060", +"R c #404850", +"E c #181018", +"W c #707068", +"Q c #586468", +"! c #081010", +"~ c #525268", +"^ c #201828", +"/ c #382840", +"( c #303040", +") c #94939c", +"_ c #404048", +"` c #181820", +"' c Gray3", +"] c #281824", +"[ c #2c2c48", +"{ c #302838", +"} c #747478", +"| c #6c5d55", +" . c #202028", +".. c #5e525c", +"X. c #202828", +"o. c #484050", +"O. c #6c6068", +"+. c #281830", +"@. c #202030", +"#. c #040040", +"$. c #343c44", +"%. c #404050", +"&. c #505858", +"*. c #384048", +"=. c #282028", +"-. c #483c3c", +";. c #201820", +":. c #302830", +">. c #282830", +",. c #606060", +"<. c #283038", +"1. c #686868", +"2. c Gray44", +"3. c #504858", +"4. c #100818", +"5. c #202838", +"6. c #605860", +"7. c #282038", +"8. c #586060", +"9. c #20101c", +"0. c #383848", +"q. c #7c7070", +"w. c #585858", +"e. c #080010", +"r. c #181830", +"t. c #7c8490", +"y. c #484848", +"u. c #000028", +"i. c #403840", +"p. c #687878", +"a. c #484048", +"s. c #382830", +"d. c #707078", +"f. c #141c1c", +"g. c #0a0a32", +"h. c #aeabad", +"j. c #101010", +"k. c #505050", +"l. c #787468", +"z. c #181828", +"x. c #000828", +"c. c #181a44", +"v. c #403838", +"b. c Gray19", +"n. c #484040", +"m. c #403848", +"M. c #282448", +"N. c #181020", +"B. c #484058", +"V. c #445048", +"C. c #342e4e", +"Z. c #180818", +"A. c #4c445c", +"S. c #060645", +"D. c #687070", +"F. c #201810", +"G. c #102018", +"H. c #181818", +"J. c #6a5d60", +"K. c #606860", +"L. c #202020", +"P. c #7a757a", +"I. c #585058", +"U. c Gray25", +"Y. c #867d7e", +"T. c #282840", +"R. c #bebec2", +"E. c #746860", +"W. c #281838", +"Q. c #202038", +"!. c #686860", +"~. c #5a526d", +"^. c #0c0418", +"/. c #585850", +"(. c #929495", +"). c #585868", +"_. c #2b295c", +"`. c #a5a0a5", +"'. c #403038", +"]. c #182030", +"[. c #606870", +"{. c #585248", +"}. c Gray22", +"|. c #0a0822", +" X c #687870", +".X c #504050", +"XX c #1d1d48", +"oX c #505048", +"OX c #18132c", +"+X c #444c44", +"@X c #302828", +"#X c #282828", +"$X c #676e84", +"%X c #201830", +"&X c #707870", +"*X c #181010", +"=X c #585860", +"-X c #586858", +";X c #020238", +":X c #0a052a", +">X c #141440", +",X c #0c0c38", +".:.=.^ 4.F e.i ;XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O :Xx Z.o 9.] @X:.>.N j Z >.=.:.=.^ N.Z.4.|.;XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O :Xx Z.Z.9.] I =.V >.j j :.=.L.;.N.Z.Y F i ;XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O :Xx F F o 9.dXdX^ V >.>.=.;.=.=.^ N.F e.i ;XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O |.x x F o 9.dXdX .>.=.=.=.E =. .^ N.Y e.i g.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O |.e.F Z.9.] @XL.V { >.:.:.;.E B 4.F x e.lX;XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O iX^.x o 9.] s.u V Z b.j j =.;.;.N.Z.Y 4.lXjXO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O u.lXd o m 9.] :.y j :.u :.=.;.;.E F F e.e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ;Xi * 7 o m ] y =.:.nX=.] o E E o F F F ^.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ;Xi * 7 o m ] ;.E ;.u ;.] 9.;.;.9.o F F e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O jXlXs o o 9.] y I #XI I s.wX=.=.] Z.F F e.i O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O jXi s *X3X] ] y j j nXs.I I ;.;.9.o F F e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ,Xi x o 9.wX] ^ =.=.:.nXu ] ] ;.9.o F F e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ;XjXjXjXjXjXu.u.u.u.u.u.u.u.u.u.i i i i i 3 3 i |.u.u.u.u.u.u.u.u.u.u.u.u.u.:Xg.O O O O O O O O O O O O O O O O O O ,Xi x o 9.'./ V :.=.@XnX:.s.=.=.9.o F F e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O jXu.u.u.u.i i i i i i 3 3 lXlXlX3 3 3 3 3 = e.e.e.e.e.6Xe.e.e.e.^.^.lX= = = lXlXlXlX3 = = 3 lXi 3 i i u.u.jX;X#.O O O O O O O O O O |.lXs 9.9.wX/ { i.nX@Xs.u I ] ;.E F x e.e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O jXu.3 lX= = lXlX= = lXP = 6XP e.P Y 4.e.e.4.x P Y Y x d *Xx * o j.4.4.4.4.^.lX= = lXe.= e.e.= = = e.^.^.e.3 i |.u.jX#.O O O O O O O O |.lXY *X9.y +.{ j b.@XnXs.s.] ] 9.Z.F F e.i O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ;XjXiXi i = lX= = ^.6XP 6Xx ' ' Y j.Y j.H.E E 4.B ` E Y H.Y d *X*Xo F.UXdX` ` ` N.E E B 4.4.4.6X4.4.e.e.6X6Xs x x e.4.lX3 i |.jX;X#.O O O O O :Xe.s s s b ^ .#X#XFXu ] =.9.9.E o F 4.4.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O jXi 3 3 = = e.4.B 4.4X4.6XB 4.;.E B .;.E =.^ ^ ^ .>.=.^ >.:.b.j :.=.:.:.L.@X@X#X#XFXu u u L.H.E E E j.B E o Y F Y Y F F ^.lXlXi |.|.i i u.O O |.x * 7 x F ^.e.' j.j.d s Y s s x x x x e.i O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O u.i : 4X4XN.B E z.z.^ . .^ ^ .V { V V { { :.< ( ( ( c 0.0.0.%.0.m._ a._ a.a._ i.i.v.}.}.}.}.v.nX:.#X=.=.L.L.=.] ^ ] ;.Z.e.F E 4.e.x e.e.= = lXi 3 ^.x * s x e.4.4.j.3XdXdX9.;.E E Z.Y F e.e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O g.u.i ^.4XN.` .;. .Z N N ( < < c 0.0.< m.%.m.o.1 D D D D D D 1 ..=XD o.a ; ..3.3.; 3.3.D D D D D 3.o.r 0.0.0.C.C.C.U < / { V ;.N.;.E Y Y Y Y Y 6X4.= = Y * * s x e.N. .#XFX+ v.& { :.=.] 9.E 4.^.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O HXjXi 3 4X6XE ;.:.j y V _ ( c a a D 1 1 a _ 3...o.1 S 1 =X1 ; g 1 g t ).t =X; t % ; D =X=X............~ ; A 3.A A A A ; ..B.m.m.m.m.< Z :.:.=.=.;.E x P = P d * * 7 x e.4.^ L.L.@Xv.& V :.=.] 9.Z.F e.u.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O HXJ i |.4X .L.j i..X; r r a U.y.w.&.1 =Xw.k.1 w.I.1 1 I.1 =X&.&.8.1 &.8.&.w.=X&.8.H t =X1.,.6.=X=X=X=X=X=X,.=X=X=X=X=X=X).=X..3.a 3.1 3.a o._ < V V V %X^ 6Xx * * 7 7 x 4.4.` L.u + v.j V :.#X] ;.N.4.^.iXO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O g.u.i :Xr.@.>.>.j v v o.3.3.~.k.y.w.K.w.k.w.BXy.=Xw.1 ,.=X1 =X8.&.8.,.&.w.8.1 8.5 8.w.t 8.1 w.,.,.8.5X=X=X=X=X1.,.,.,.,.=X=X=X1 8.,.I.v 1 =X=X1 ; 1 B.r C.7.CXN.' 7 * * * e.4.4.H.FXnXj wXy :.=.;.9.E 4.e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O :Xi :X: z.@.( _ _ a 1 1 1 1 1 1 =Xk.k.w.=Xw.w.w.,.=Xw.w.6.=Xw.6.=X8.8.=X8.t ,.w.=X,.5 1.t 8.=X8.t 8.8.t t t 8.,.,.t t ,.t t ,.t =Xt ,.&.1 =X=X1 1 1 ; 1 3.o.m.0.>.` Y ' x x F Z.E ;.:.i.j =.j :.=.] ;.Z.F 6X# O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O #.:Xi 4X@.( %.D 1 a 1 =X=Xw.=X8.=Xw.w.w.w.,.w.w.,.w.w.1 w.,.=X=X,.=X,.8.=X=X,.,.=Xt t t 1.t t t 5 5 Q 8.t t Q t t t t t ,.t t ,.t ,.8.8.=X=X=X=X=Xw.=X=X=X=X1 3.a y.VXH.6X' x x F x 9.;.] j i.j :.:.=.] ;.E F e.iXO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O jX:X4X@.0.D ; ..=X1 1 =Xw.=X8.8.=Xw.w.w.,.8.w.w.,.&.w.w.=Xt ,.=X,.,.t t =X=X,.t t t t ,.t t t 5 H 5 t 8.t t t t t t 1.t t 1.1.t t 5 ,.8.,.t 8.,.t =X=X6.t 6.=X=X=Xa $.Z #X` Y x x x E 9.E y & j :.#X=.] ;.N.F e.:XO O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O HX:XOXN 0.D 3.1 ; ).=X; 1 &.=X=X=X&.w.w.w.=X=Xw.w.=X=X,.=X=Xt ,.=X,.t t t t t t t 1.t t 8.t t t t 5 5 t Q t 5 t t 5 1.1.t t H H t t H 5 5 t t ,.,.,.=X6.t t t t 6.=Xa a a U.>.B x x x s F E =.:.:.:.#X=.] ;.E F e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O ;XiXOXN 0.3...; ; =X=X).=X=X=X=X=X=X=Xw.&.&.w.8.=Xw.&.=X,.=X=X8.8.8.t 8.t t 5 t t t 5 5 t t t 5 t t t 5 t t 5 5 5 t t 5 H t t H H t 5 5 H H t 8.5 t =X,.,.,.,.6.=X=X=X=Xw.1 _ b.;.E B x x x o ] :.wX:.:.=.] 9.Z.F e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O #.:XOXT.m.%.D 1 =Xt =X; =X; 1 =X=X=X=X=X8.w.&.w.8.8.8.w.w.8.=X=X8.t t 5 8.8.t t t t t t H 5 5 H 5 t t 5 5 t t 5 H 5 5 5 5 H t t H H t 1.8.H H t t H 1.=Xt t t t t t =X=Xt =X1 v y.}.=.B x x x x E j i.:.:.I ] 9.Z.4.6X|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O S.g., { c a a 1 1 =Xt =X1 1 1 1 =X=X=X=X=X,.8.8.8.8.8.8.8.=Xt t 8.t t t [.t 8.8.t 5 t t 5 H 5 H H 5 t t H H t t t 5 5 5 H 5 H 5 t H 1.t H ,.5 H 5 5 5 t 8.t t t t t t t ,.=X=X=X,.=Xv j .E Y x x E j k j :.@X] 9.Z.4.4.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O 1X;XtX( a.U.1 =X,.=Xw.=X1 1 =X=X=X=X=X=X=X=X8.8.8.8.=X8.8.8.8.H H t 5 5 t 5 5 t 8.t 5 5 5 H 5 5 5 5 t 8.t H H 5 t t t 5 H D.t H 5 t H 5 t H 5 5 5 D.H t 8.8.t t t 5 1.O.t t =X,.t t =Xk.a.a.:.Y x Y 9.=.i.i.:.@X] 9.Z.Z.4.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O O O ;XvX8 Z k.oX,.=X=X,.t 8.=Xw.1 =X=Xt t =X1 t H =X,.5 =X8.5 t t t t t H H [.8.5 D.,.=XD.H t H H 2.1.,.8.=X,.H t H t 5 H t t d.H 5 5 5 5 5 5 5 5 5 5 t 5 H H t 5 t 1.5 8.,.t 8.t t t t ,.=X1 v a.=.Y x x E s.j j =.;.9.N.F e.iXO O O O O O ", +"O O O O O O O O O O O O O O O O O O #.iX[ _ y./.$ ,.=X=X,.t =X=X=Xt t =X=X=X=X=X1.8.8.8.t 5 ,.=Xt t t t t [.H H t H d.1.t P.d.H d.1 ,.t H 2.H t 5 t t =Xt d.H 8.5 H H 5 5 H H H 5 D.D.H 5 [.H H 5 5 5 1.t ,.,.t ,.H t =X,.t t w.a a Z ;.Y x E y :.s.I ] 9.Z.F e.iXO O O O O O ", +"O O O O O O O O O O O O O O O O O S.jXvX0.a w./.{.,.,.,.,.,.=X=X=Xt ,.=X=Xt 8.=Xt 1 t =X,.2.1.=X1.t t H H H d.d.d.d.} 1.t 6 H t 1.d.d.O.,.t t O.6 1.1.,.,.t t t d.H H H H H D.H [.d.xXH H D.D.D.[.1.H 1.t ,.t t ,.H t ,.t 1.1.=X1 k.U.b.;.s Y 9.;.I I ] 9.Z.F e.|.O O O O O O ", +"O O O O O O O O O O O O O O O O O ;X# 9X_ y.@ /...w.8.,.,.,.8.=X8.,.8.=Xt 5 t ,.t =Xt ,.,.H t ,.5 H H H t t =X1 1 j Z =.` . .;.=.=.c 1 t 6 H t t t 1.H 2.D.5 t t H H D.H D.D.D.H xXD.H H D.d.xXD.5 D.1.t t t t 5 t 1.H H 1.t t ,.=Xa i.:.E x Y ;.] I I 9.Z.^.Y |.O O O O O O ", +"O O O O O O O O O O O O O O O O 0Xg.vXD a k.,.w.1.w.=X,.,.,.,.,.,.1.,.,.8.=X,.1.2.H ,.t t =X,.O.,.H t v _ Z V ` B Y Y x P x 6XY j.Y B B E =.i.I.6 H O.O.H H H 1.t H D.D.D.D.d.xXH xX[.[.[.D.xXD.H 5 D.5 ,.5 5 5 H t 1.H H H 5 t 5 t 1 y.i.=.Y Y =.;.=.I 9.Z.^.4.|.O O O O O O ", +"O O O O O O O O O O O O O O O O HX# 9X1 1 w.w.I.=X=X8.,.,.t t t ,.1.t 1.5 8.,.1.1.1.6.1.H =Xt H 6.a j .B 6Xe.P P P P x x x x x x x Y x x Y Y ;.>.v w.1.H ,.,.D.d.H H D.H D.d.d.D.D.[.[.H H [.5 5 5 D.1.,.1.1.5 D.H 1.t 1.H D.H t t w.v a j Z.s ;.9.] ] 9.Z.^.4.|.O O O O O O ", +"O O O O O O O O O O O O O O O 0XHXXXIX1 w.=XI.1 I.,.t t t t 1.5 ,.1.,.1.0 5 1.1.,.,.O.6 H ,.I.v i.` Y e.x e.6XY 4.Y Y Y Y Y Y Y s Y Y Y Y E Y s 6XB #X1 1.t t H 5 5 H H 5 H d.} D.H [.D.xXD.[.5 H 5 } H t D.1.,.H H 1.t 1.H D.H t 8.,.I.v i.;.F o 9.;.] 9.Z.^.Y |.O O O O O O ", +"O O O O O O O O O O O O O O O #.# C.; a w.1.=Xt % t 5 t t 1.1.1.,.2.,.,.K.,.1.2.1.t } d.t 6.i.E e.e.e.e.4.4.Y Y 4.Y x x x x x Y Y E E F s E E Y Y B P 6X>._ t d.t t H H 5 H } } xX5 [.D.xXD.[.[.D.5 } D.t D.1.8.1.t H H H 5 5 5 H ,.H O.I.a.:.Z.F ;.;.9.9.Z.F e.:XO O O O O O ", +"O O O O O O O O O O O O O O #.JXM.%.k.w.,.t t t t t 1.5 ,.1.,.8.1.1.K.1.H t 1.H t t H t _ ` e.6X6X4.4.e.4.N.N.4.E N.E E 4.x Y ^ N.;.^ ;.E Y 4.` B 6XY 6XB < ..H d.H H xX[.[.D.D.} } D.D.H H D.D.d.d.H H H D.1.t H d.H 5 D.D.1.5 H ,.6.w.6.a.E 4.E y F 9.9.x |.:XO O O O O O ", +"O O O O O O O O O O O O O O ;XJX9X; =X,.1.5 t % % t H 5 t 1.,.5X1.0 1.2.2.1.t H t $X).( 4X= 6XB N.4.B 4.N.^ ^ N.;.E N.N.N.E E ^ :.;.^ ^ =.^ N.N.^ ` 6X4.B 6X4.V a LXd.H 5 D.p.D.D.D.1.1.D.D.D.H xX5 xXd.H 8.=X8.,.1 8.t 5 2.2.1.,.2.1.6 t 6.a ` Y o =.Z.Z.9.F |.:XO O O O O O ", +"O O O O O O O O O O O O O O ;X, fX=X,.5 1.t t t t 8.t ,.,.1.5 K.2.1.,.1.1.t t LX% ; c ` 4.4X` 4X4.4XN.N.^ V V ^ =.V >.>.V V V V V .V V { V V ^ . .B ` ` 4.e.4.>.a n H t } p.5 XG 1.1.D.D.D.D.H D.d.D.H 1.1.1.H H H 5 t H 2.2.2.,.,.2.1.6.=X< N.Y ;.] Z.o o i :XO O O O O O ", +"O O O O O O O O O O O O O S.g.vX; t ,.,.,.t t t t t t ,.t 5 5 1.2.0 1.1.1.H d.d.t N ` 6X^.4XN.` ^ N.z.^ V { V =.V V N { V { c c Z { { Z ( { >.V V . .` 4.4.B e.e. .3.% H d.D.5 p.5 &X} 1.H d.d.5 d.d.D.D.D.1.,.w.t H H H D.H t t 2.O.H O.6.=X_ ;.Y 9.y Z.F Z.lX:XO O O O O O ", +"O O O O O O O O O O O O O #.>X9XQ t t t t t t t H D.5 5 5 5 ,.K.5 t 1.O.t H d.=Xc 4.6X6XB N.N.` .^ @.V N Z { V >.{ ( { >.{ m.m.( ( c 0.< Z { { ( N >.V N.` z.6Xe.4.@.a H d.D.D.D.D.2.} D.H D.D.D.H 2.2.,.y.b.L.L.` @.>.c a =XH P.} O.6.O.O.O.I.Z Y o V Z.s Z.lX;XO O O O O O ", +"O O O O O O O O O O O O O ;XXXfXt 1.1.t t t 5 1.1.D.5 5 1.5 5 1.t =XH H t O.=X:.6X^.^.B z. . . . .>.{ { < m.< { ( m.m.c { Z c 0.( < 0._ 0.( ( 0.m.Z Z Z >.{ @.B V 4X^.>.=XD.} xX5 } 1.D.} } 5 H } d.,._ >.H.' P P P B >.v 6 6 1.6.H n H t a.E Y OX9.Y 4.lX,XO O O O O O ", +"O O O O O O O O O O O O S.,XpX~ t 5 t t t t 5 5 5 H 8.t H 5 H 2.H 1.P.} H t _ ` 6X .^ ` ` ^ >.( < Z < c 0.%.m.c m.0.0.0.( c _ %.%.0.%.%.0.0.0._ _ Z Z Z >.( V N.V z.B N.( =XD.D.H } D.H d.} H H H 1 Z j.P x x x x 6Xe.P x P e.E 1 d.n d.6 t I.i.:.Y b ] E F lX,XO O O O O O ", +"O O O O O O O O O O O O #., fX[.5 5 t t t 1.H 1.H H 8.5 D.5 H 2.1.5 2.6 t a .6XE 6Xz.N { { Z Z { ( c 0._ o.%.m.o.D D %._ 0.0._ %.%.%.%._ _ %.%.0._ a 0.>.0.m.^ N.z.@.4X` a t 5 } d.} d.H D.P.H 1 j.P x * * ' P e.e.x x P P B N...H H 6 O.t 1 i.E 4.V 9.x lXg.O O O O O O ", +"O O O O O O O O O O O S.g.M.; t ,.1.6 H H 2.1.8.1.H D.H 5 5 D.d.d.2.t d.I. .B B .^ >.^ Z c m.N < a m.a _ c a a 0.%.D *.%.; a 0.D D D %.a D *.0.A =X$.1 o.c { { ^ V ^ N.B ._ t D.t X } 5 d.d.a.` ' P ' * d Y e.P e.Y e.e.6X` v H 2.6 =X=Xi.H.e.] =.e.3 S.O O O O O O ", +"O O O O O O O O O O O 1Xg.DX=X,.1.1.H H H d.1.,.1.D.1.5 H H 5 H 2.H d.H Z ` ` E .^ >.V Z < c Z %.a 0.a a %.1 1 D *.%.%.R A D %.D %.; ; _ %.D D D 1 c 1 a _ c 0.{ { V z.N.z.Z ; xX} d.X H 1.w.B P x E ' * *Xd d o Y x Y Y x 4. Y >.=X} H t =Xy.=.e.9.=.4.3 g.O O O O O O ", +"O O O O O O O O O O _.l tXD ,.5XW 1.H LXLXH H ,.1.D.5 t D.H t t d.H P.1 ` .>.H.>.>.( ( c Z < c 3.; a 1 1 a A a a a %.a a D 1 D _ %.=X=X%.%.1 ; D a c 1 v o.m.m.m.8 V @. .z. ._ H d.5 D.d.t Z x 6Xj.Y Y d @Xv.n.; -.i.=.E F E P Y 6X_ d.6 H t w.Z 4.4.:.;.3 ;XO O O O O O ", +"O O O O O O O O O O 1Xg.cX=XK.@ 0 H H LXn H H 5 1.1.5 5 H H 5 H H $Xt ( N.=.>.` Z Z c m._ c c _ ; a _ a D A 1 A g 1 D 1 0. .Z a a 1 ; ; 1 D D 1 =Xa $.1 a o._ o.m.{ V V { @.` Z 1 d.P.5 P.1 6X6XY B P Y I n.$ $ | PXPXJ.; v.I x x 4.4.P ;.=Xd.H 1.,.U.B e.:.=.3 jXO O O O O O ", +"O O O O O O O O O O HX# IX5 K.K.!.H H n n % H 1.1.K.1.H 1.H xXd.H n 0.^ ` . . .Z Z j _ a a._ 1 =Xa _ a a A A R 1 1 I.=XZ 6X_ =XI.v 1 =X1 a 1 =Xa U.a _ a o.o.o./ 7.N ( >.z.>.a H X H H j B N.6Xx I $ 9 J.C | J.| | $ $ $ I s E B B 6XU.P.t H t a ^ x =.:.i jXO O O O O O ", +"O O O O O O O O O O jX, ~ 1.!.T 1.H H $Xn % [.D.1.K.D.D.5 H d.d.H ).>. . . .Z }.Z _ c a v 1 a 1 a =X1 1 a 1 A *.R =Xw.=X_ ` #Xa 1 1 v 1 1 1 =X6.w.w.a 1 _ D a o.r U / { 8 N @.N 0.=XH d.y.B 6XB ^ 6X=.v ..| 9 9 X Y.Y.E.| | J.p ] Y B =.6XZ P.5 H t k.{ e.;.Z |.;XO O O O O O ", +"O O O O O O O O O O jXvX).2.!.!.2.1.LX$X$X% % D.1.1.D.D.H H D.n H 1 >.>.{ >.c U.c a _ 1 1 1 a 1 a w A A a g Q A 1 =X1 =Xw.v 1 =Xk.1 k.I.1 1 ,.t k.w.1 =Xa 1 3.o.o.m.m.m.< { N { ( =X5 P.c P ` B 4.P j 6 O.J.q.q.l.| E.E.X 9 | ..s.F E >.B >.H 2.2.t I.%.B E Z : g.O O O O O O ", +"O O O O O O O O O 0XJXC.Q } !.@ 2.5 % $X$XQ t D.1.2.D.D.D.H H H H a >.>.Z Z c c a _ c 1 1 1 a =X1 1 g 1 a =Xt A w &.1 w.1 y.a =Xt =Xk.1 =XI.=X=Xa y.a =Xa ....3.3.m.o.D m.< ( { >.R t t Z Y .Z E j.i.9 O.J.q.9 | Y.l.| 9 E...9 p s E ;.B .=Xd.d.t =X1 ` 4.{ z.g.O O O O O O ", +"O O O O O O O O O ;XQ.D [.H 1.0 0 5 H H H H H D.d.5 5 H D.d.H t t Z V >.>.Z _ _ a _ _ a &.w.1 w 1 =X&.&.=X=X=X1 1 1 =X1 k.v v I.I.I.6.1 =X=X1 6.I.1 a 1 t )...; D ; a o.0.%.m. .>.D t t >.` .>.P Y v J.6.q.q.| E.l.l.| | q.| | $ Y j.E :. .k.d.D.H =Xv >.e.z.T.g.O O O O O O ", +"O O O O O O O O O iX5.A [.[.H D.1.0 0 0 D.D.H H H H H 5 5 D.d.5 1 2X<.Z Z c a %.a a a 1 =X=X&.&.&.&.&.&.=X=X=X&.1 a 1 a a =X=Xa a I.=X1 =X=X1 6.w.1 1 =X=X; ).=Xo.1 1 3.m.o.o.{ N c t H >.H. . .j.E k.J.6.q.X J.C E.| {.| q.| | v d E .>.L.1 d.H H t =XZ 4.^ T.,XO O O O O O ", +"O O O O O O O O O iX( ).[.[.H H 5 0 1.1.1.D.D.[.5 t D.5 8.t d.5 +Xc M c c _ 1 a 1 1 1 1 &.&.1 1 &.1 &.=X=X=X=X&.1 &.t w.a =Xw.a I.1 w.1 I.I.I.6.=X=Xw.w.1 1 =X=Xa 1 =X..o.a 3.c Z Z t H Z B >.` B ' i.I.$ | 9 J.PXY.| | | E.C C n.x E b. . .=XH H 5 5 t m.4Xz.N l O O O O O O ", +"O O O O O O O O 0X# %.% [.[.H 5 5 1.5 5 5 H H [.5 8.D.D.8.8.H t a c c _ _ a 1 1 1 g &.1 1 1 w 1 1 &.&.=X=X=X=X=X=X=X=Xw.k.1 =Xk.k.1 1 1 I.w.I.=X=Xt &.1 =X=X1 1 =X=X=X..3.3.3._ c c =XH c 6XZ .Y x :.$ $ ; | 9 J.PXp | | | PXp nXx ` c . .t t [.t 5 H _ N.4XQ.c.O O O O O O ", +"O O O O O O O O 0XJXA n [.[.H 5 5 5 5 5 5 5 5 [.H t H D.t t t =Xa c c a _ a 1 1 1 g &.&.1 1 &.=X=X=X=X=X=X=X=X8.8.8.a =X,.=XH ,.a 1 1 =X=X=X=XI.I.=Xw.w.8.=X1 1 =X6.w.1 I.1 a o.a._ a H a 6X>.:.Y x dXi.p n.p ..J.9 J.9 C PXp -.;.x ;.c ^ Z H [.[.t 5 H a ^ |.%XMXO O O O O O ", +"O O O O O O O O S.M.~ n [.H H t 5 5 1.1.5 t 8.t 5 H 5 t t H H =Xa $.*.a a a =X1 1 1 &.&.&.&.=X8.8.=X=X=X=X=X=X8.t 8.1 H =XU.a w.,.=Xw.6.=X=X6.I.w.k.,.,.w.=X=Xw.w.,.w.1 6.I.a.a a _ a 6 t E ` j ;.x x 9.s.'.'.-.p PX& n.I s.j :.E B .Z ^ a H [.[.5 5 H ..{ 4Xr._.O O O O O O ", +"O O O O O O O O 1XpXQ n % H [.t 1.5 5 5 5 5 t Q Q H 5 t t H H =Xa _ _ 1 a a =X=X=X1 &.=X=X=X=X=X=X=X=X8.8.=X=X8.8.=X=X=X>.B L.b.t ,.=Xt =X=X,.I.=Xk.,.w.&.,.t w.w.,.=Xw.t w.y.1 y.m.I.H H j Y Z :.9.Y s E I s.s.nXVX@Xv.@XwX] F P ^ V @. .).n H 5 5 8.t S C.4X: _.O O O O O O ", +"O O O O O O O O l _.% H t H 5 8.D.8.8.t 5 H [.t 8.8.[.H t t t =Xw +Xa 1 a 1 t =X=X=X8.t 8.=X=X=X1 =X8.t t 8.=X=X=Xt 8._ ! ` >. .=Xt =Xt =Xw.t =Xt =Xw.w &.1.,.&.=Xw.,.,.1.w.k.=X_ a.t t H 1 Y =.>.I 9.x d 9.9.;.] dXI o E x x =.>.N ` @.H n H t t &.=Xt m.4.^.MXO O O O O O ", +"O O O O O O O S.XXA.% d.[.5 5 8.D.5 5 Q t 5 t t [.t Q Q 5 t Q =X=Xa a k.w.=X=X=X=X=X8.8.=Xt t 8.t 1 t H t =Xt t =X8.t 1 +Xa +X_ 1 t =Xw.,.=X,.O.1 =Xk.BX,.,.5Xw.w.,.t ,.w.1 w.1 y.a.1 H O.6.}.E j i.=.E o s x s x s * x x s 4.^ { { ^.4X%.t H [.t 8.5 t ..3.%X= MXO O O O O O ", +"O O O O O O O HXXXA Q [.Q 5 [.8.D.H H t t 5 8.=XQ t Q Q t t t =X1 w 1 =X=X8.,.,.8.t 5 t 8.8.=X&.=X=X=X=Xt t t 8.=X&.t t =X8.=X=Xt t w.I.=Xw.6.H t 5 &.BXw.w.w.,.t ,.t ,.w.I.w.1 a _ =Xt 6.t k. .E i.s.I ;.Y x s Y Y Y s x E >.{ V 4Xz.0.t t t % Q t 5 t =X; 7.lXXXO O O O O O ", +"O O O O O O O g.M.).Q 5 Q t 5 8.t &.=X&.=Xt t Q [.t t Q 8.t [.Q 1 a 1 =X,.t 1.H 1.t 5 t 8.8.=X=X=X=X=X=Xt H H 5 H t [.t &.1 w 1 8.,.=X,.,.w.w.=X=X1.,.8.8.8.&.&.w.1.t t ,.=X&.k.a _ ,.=X=XH t a.=.E E >.j >. .] ;.;.=.=.=.:.Z V 4Xe.Z t n t t H t =X8.t =X..( |.c.O O O O O O ", +"O O O O O O O # $.% Q 5 Q Q 5 =X8.8.t 8.8.t Q =X8.Q t Q =XQ [.t 1 _ 1 =X8.t H H 1.5 H t 8.t t 8.t 1 8.t 8.8.t H 5 t t Q =X&.=Xt H ,.8.1.t =X=X=X=Xw.5X5X8.,.,.,.5 H 1.t t ,.w.k.a a 6.1 t H =X6.I.E Y E ;.=.:.Z >.=.>.:.{ V B 4.N.Z D % t Q 5 5 8.&.=X=X=X~ C.|.,XO O O O O O ", +"O O O O O O O JXgXt =X5 t 8.5 Q t t [.t Q t t =X8.g t t =X=Xt t =Xa &.=X=X,.t t ,.H D.H t t t 8.t 5 t 8.t 5 H 5 H 8.8.5 H 5 5 t 8.=X=Xt =X=Xt =Xt 8.5 8.&.=X8.t D.D.H H 1.t w.k.a 1 8.w.O.t k.=Xt 1 Z N.x P B ;.;.;.E E B 6X6X .0.t t ).=X=X8.=X&.8.8.t =X~ r |.jXO O O O O O ", +"O O O O O O S.vXIXt =X5 5 8.Q Q t =XQ =X=XQ t Q Q g Q Q =X=XQ t Q 1 1 =X8.t t t t H D.H 5 H 5 t H H c >.1 d.H t D.5 Q t 5 Q 8.=X1 =X=X1.t t =XZ VX1 5 5 8.8.=X&.8.H H H 1.t =X1 a w =X,.t ,.=X=X1 t 1 _ Z ` E E Y 6Xj.B B ^ c ; t H t =X&.=X&.&.8.=X=Xt S S 3.%XiXO O O O O O ", +"O O O O O O #.M.1 [.=X5 5 8.8.=X=Xt 5 8.&.g g A A =X=Xg g =XQ t t 1 w k.=X5 1.1.H t H 5 5 H H H D.&.B c H t &.t 5 8.t 5 8.[.d.d.t =XH t H w.q P Z &.t t D.5 =Xt t 5 H t =X=X1 a 1 =Xt =Xw.t =X1 a 1 t t 1 _ c >.>.Z c a.1 t LXt ).=X1 &.t =X&.5 &.&.t S % ..T.# O O O O O O ", +"O O O O O O ;XC.; t 1 8.t 8.t Q 8.=XQ =X1 =X8.=X=XQ g 1 g =XQ t 5 =Xw k.8.1.t t 1.H D.H 5 H 1.t 5 =Xz 6Xc 5 5 =X8.t 8.H H 8.t H 5 H =X8.1 5 t .` a H D.5 H t &.8.=Xt t =X=X=X1 a t =Xt 1 +X&.1 g 1 g t t =Xt t =Xt =XO.d.H I.a 1 ).=X1 &.5 =Xk.8.&.&.Q =X).A 7.iXO O O O O O ", +"O O O O O O HX9X).=X&.=Xt 8.g =X[.g Q Q g g g &.A g =X8.8.=X=X8.t 5 1 k.8.=X,.2.2.D.1.2.5 1.} H H =X=X=Xw.t 1.H 5 H ,.t 5 t 5 5 =X8.H t 8.1.t =X=X8.t t 5 1.t 8.t ,.H H H 1 =X..=Xt 5 8.&.g w a g 1 &.1 &.&.=X&.1 1 ,.w.1 =X=X1 &.8.1 A =XQ &.1 &.8.&.&.g =X; ( u.0XO O O O O ", +"O O O O O O S.C.).Q 8.=X8.Q 8.).t g g g g ; &.1 A &.&.&.=X=X=X8.5 t =X1 ,.t t H H H 1.d.D.2.d.,.5 t ,.,.,.,.,.t t 1.,.t 1.t 5 5 8.&.5 t 8.5 t ,.1.,.H H 5 5 5 ,.8.=X1.=X6.=X=Xa =X5 Q &.g =X1 w &.w 1 1 1 1 1 1 1 1 1 k.k.w.=X&.1 &.w a 1 &.1 1 &.&.BXg =Xt ).r tXS.O O O O O ", +"O O O O O O l DX).t 8.=X=X8.Q Q ).).=X=X).).=X=X8.=X1 1 g &.1 &.t 5 8.k.1 ,.t ,.1.1.D.} D.D.2.1.2.D.1.1.1.5 8.8.5 t ,.t 1.t t 5 8.5 D.D.t ,.=X=X,.w.1.1.,.5 D.1.t d.2.1 =XH 1 c I.H &.1 =X=X1 A w 1 =X8.g 1 &.&.g w.&.w.w.&.w.&.w 1 1 1 1 1 &.g =X&.&.g =Xt ).%.OXHXO O O O O ", +"O O O O O O c.yX).t 8.g &.g =X).g ).; ; g g A A 1 8.1 1 =X=Xa w =Xt t 1 a ,.w.}.$.a 1.} D.D.2.D.} d.H 1.D.H ,.,.1.t t 1.1.t ,.t t =Xt 5 t t 1.H 2.w.5 5 t H D.H H +X .B U.6.v _ t H A w 8.g 1 1 w 8.t t 8.g g =X=X&.1 ,.,.1 1 &.1 1 g =X1 1 =XQ 8.&.&.g =X).).%.tX;XO O O O O ", +"O O O O O S.XXA.).8.8.=X&.1 g g g Q g g g 1 a a w g A 1 8.=Xw a 1 =X5 ,.w.H k.6X z w.} 2.d.2.H 5 2.5 5 D.D.1.5 1.1.H 1.t t ,.t 5 d.D.D.1.t t t =X5 5 5 1.2.1.5 2.a ' P U.=Xa 1 O.t A 1 8.&.A 1 A =X=X=Xg &.g =X&.w y.1 =X1 &.=X1 A g =X1 A ; g 1 k.k.&.g ).t D vX;XO O O O O ", +"O O O O O #.XX~ =X=X8.=X=Xg g g g =Xg g ).=Xg g =X1 w 1 =X=X1 A 1 &.t t 1 ,.a ' L.,.2.1.2.D.H 1.D.5 t H 2.D.1.1.H 2.H 5 5 t t H 5 t 5 1.1.2.d.1.1.5 5 D.d.1.5 d.U. P }.k.a t H =X1 1 =X&.A A A A 1 1 1 1 &.g &.w.a a &.=X8.&.a 1 =X=X&.A 1 A w w w 1 1 ; t D T.g.O O O O O ", +"O O O O O #.XX~ =X8.&.&.=X).g ; ; D A A 1 1 g g ; A A 1 g =Xg 1 1 g 8.t a 1 1 b.}.y.2.5 ,.2.H 2.P.2.2.2.2.2.2.D.H 1.2.H 1.D.H 5 H D.D.d.2.5 1.H ,.1.1.1.1.2.1.5 2.1.U.U.y.1 k.t =X1 =Xg &.=X&.A 1 a 1 g 1 1 1 &.g =Xw.1 &.,.=XA A g =X=Xg ; 1 ; 1 w 1 1 D 1 =XD T.g.sXO O O O ", +"O O O O O #.XX; w.8.1 w =XQ g A A g ).).g ; ; A a 1 1 ; g g g g 1 1 8.H k.1 ,.a ,.=Xd.8.t P.H H P.} P.P.} d.2.2.H t 2.H H } 2.5 D.5 5 d.d.5 H d.1.1.2.0 5 5 ,.=X,.w.w.1 c w 1 t ,.1 Q g 1 =X=X1 1 a g 8.=X1 A 1 1 a w.w.&.=Xw a =X1 1 1 1 ; g g =X1 &.; A 1 t 1 ( ,XsXO O O O ", +"O O O O O KXC.S w.&.&.&.A A A D R R A ; ; ; ; 1 A ; D D g =X1 1 ).; =Xt d.=Xa t k.w.1.H H d.H H X d.P.P.2.H H H H H 1.H 2.D.H H H D.H H H 1.5 H 2.,.1.1.0 1.5 ,.,.w.y._ _ 1 5 8.=X1 =Xa 1 1 a =X1 =X1 a a D 1 1 1 w a 1 1 a a &.A 1 A A A A A A A g g ; 1 =X,.a ( |.0XO O O O ", +"O O O O O 1X_.S w.+XR a a 1 g g g A A ; g ; A D A 1 1 ; ; D %.a g =X).=XH t a _ _ =Xt t ,.H 2.1.1.d.H H d.d.1.H } d.2.2.2.D.H 5 H 5 H D.} P.2.1.O.2.2.1.,.,.,.8.=X1 c _ w.t =Xa &.=X=Xa a a a 1 1 1 1 1 D a a 1 1 1 k.1 =Xa a &.1 A a a 1 ; ; g =X1 1 1 1 1 1 y.< :X0XO O O O ", +"O O O O O l yX=Xw.&.1 A w A ; ; A ; g g ; ; ; A D D A A A D A ; ).1 ).1 =XH 1 _ _ a w.=Xw.t 2.H t 6 1.1.d.d.H H } H H H 2.D.D.D.D.D.D.D.d.d.d.H H H 1.t t t =X1 a +Xc a t H &._ a %.a 1 =X=X=Xa %.a 1 1 1 a a D ; =X1 1 =X1 1 g g ; D D ; ; A A ; 1 1 ; ; 1 v y.%.g.S.O O O O ", +"O O O O 0X>XfXI.oX1 1 1 A A g g g A ).g D D g g %.).g ; D A ; 1 R a ).=X1 t H ; _ i.a w.w.=Xt O.1.1.6 2.1.1.2.2.1.1.1.1.H D.D.D.d.} D.1.1.H H 6 2.t ,.t t 6.1 y._ c a t t =X=Xa R 1 %.1 D 1 =XD =X%.D 1 1 a a 1 1 =X1 a 1 1 1 1 g =XA D ; A R %.D ; A 1 ; 1 a y.a OXHXO O O O ", +"O O O O #.MXfX=XoX&.g g 1 A A ; ; A ; A D D A D %.g ; A R D ; A %.1 ; t =X; H % 1 _ _ a I.I.1 =Xt O.6 6 1.H 2.2.1.H H H H H H H H 5 5 H D.H 1.t 1.O.t 6.I.a _ _ _ a =XxXg R 1 A a =Xa 1 a a 1 a ; a D 1 1 1 1 1 1 1 a a a 1 1 D 1 ; D a A A a R A 1 D a D k.v y.a SXHXO O O O ", +"O O O O #._.B.,./.&.=X=X1 a R IXIX).D D ; ; R %.D %.D A D D 1 g g ; %.; ).1 =X% t 1 c c a k.1 w.=Xt t t H H H H H 1.H H 1.1.H H H 8.t H D.1.t ,.t t 6.=X1 _ c c _ t t % 1 R R R 1 D %.D 1 1 1 a a a 1 1 1 1 1 1 D 1 1 a a ; ; 1 1 A D D D A A A A A D a a k.k.y._ vX;XO O O O ", +"O O O O S._.A w./.a w D a A ; ; A g ; ; g ; D R A D ; g ; D R a D A %.D 1 D ; ; H =Xa.U._ _ a 1 a =XI.w.t t t t t 6.t t t 5 H H 5 t 8.8.8.=X=X=X,.I.1 a a %._ o.1 H ; ; 1 D a %.A 1 D _ a D a 1 ; a 1 1 D D ; ; D 1 =X=X1 =X=X1 1 A A D D D A A D D D D a v k.oX_ T.;XO O O O ", +"O O O O HXZXA k.w.&.1 A a A ; D %.%.; ~ IXR ; ; %.R R IXD D a R R D ; ; _ a ; %.=XH 8.1 y.Z }._ U.a 1 =X1 1 t t 1 =Xt t ,.8.t 8.=X=X&.&.=X=X=X1 1 1 _ c c c a =Xd.).a a a 1 ; R %.a 1 a ).).a D _ %.1 ; D D 1 1 D a ).=Xa 1 ; D a R D D R R A A a %.a a a a k.a m.T.jXsXO O O ", +"O O O O # DX3.=X1 A A A R R R D IXA A IXD ~ D g %.gXA R IXA A ).A R A A 1 ; ; A ; 1 Q t 1 *.2Xc $._ +Xa R a 1 =X=X1 t =X=Xt =X1 =X1 1 1 a v 1 a c c Z Z c 1 H H g a R 1 1 =Xa D a D ; D o.1 D _ a 0.o.o.D =X1 %.D ; 1 D D a a D 1 1 1 D D D D D D %.a a y.1 a m.; N , 1XO O O ", +"O O O O # 0.1 ).; g A R A A R R A A ; A IXg D ; gXR g IXIXR R A *.A ; 1 A ; A D A R g Q Q Q A 2Xz >.Z 2X*.R A A a a g a _ a 1 1 1 o.o.o.o.a o.m.Z >.<.*.g t g a _ 1 a a _ a R 1 1 o.3.a _ a _ m.o._ D 3.1 =X3.a 1 a a a a D D D a a a a a D 1 ; ..m.a.y.NXa =XfXfXT., l O O O ", +"O O O S.# 0.1 =X; g A IXA A R R A A A A IXA A g %.*.R R R D A ; D 1 g ; 1 ; ; 1 g R A ; ~ Q Q A 0.R %.0.2Xc 0.0.( c %._ c _ a o.0._ c Z Z Z < < c _ a =XH t 1 a 1 a a 1 a 1 1 1 a i.a a a a a a I...1 o._ _ _ m.a.a a._ a.a a %._ 3.a a _ m.c c c 0.i.}.b.y.).A.%.( , l O O O ", +"O O O HX# 0.1 ..; A A A D D A A R R A A %.A A ~ IXA A D R D D A R *.%.%._ R R a A R IXIXR A ~ % [.A R 0.2X2Xc c 2X@.Z Z N Z c Z V Z >.>.Z c m.a 1 =Xt t 1 _ _ a a =X1 1 c _ _ a _ _ a.a a._ _ _ y.Z >.>.c a y.c j >.#X . . . . . .N.E B B B B B B B x ' j.:.a D ~ $., l O O O ", +"O O O #., %.1 ..; a A D a D A D R R D ; %.D A ; D g A A D D A D D D A D D ; ; ; ).D A A a a A =XQ % % t ).1 _ ( Z Z >.>.>.>.>.Z Z >.Z m.1 =X=Xt H a 1 1 a a.a a a a y.a.j U._ a _ j Z b.>.#X .` E .H.B B B 6XP x x x P 6X6X6X6XY 6XY Y 6XP ' * j.{ r A DX, l O O O ", +"O O O ;XJXfX; ..; 1 R %.A A R %.D D R ; %.D IXIXIXD R IX%.D ; D A %.D IX%.D %.%.R A D a a D A D a R D ; ).t t t % =Xa 1 =X1 a 1 1 I.=XO.H t =X..=X_ c c _ a _ U._ c }.c >.#XB 6X E 6X6XY 6Xj.j.P 6X6XP P j.H.=.#X:.#XL.H.E H.=.=. .;.` E E B ^ .FX7 P >.r %.%.OXHXO O O ", +"O O O ;XvXD =X..; ; R %.A A %.*.R A %.; IXD %.gXR g D A IXIXD 0.0.%.D D D ; D D D R %.%.R D D D %.%._ _ %.a D 1 ..=Xw.t H ,.=X=XI.=X6.=Xa c Z :.b.}.>.L.L.` B 6XY P x 6XB E x x ' ' E H.j.j.H.b.i.:.L.H.j.E H.dXH.j.d x x x x x x x x x x x Y *X P Z D B.%.OXg.O O O ", +"O O O ;XvXA =X..; ; ; A R R a R 0.D *.; D D %.0.IXD %.D D D D 0.0.( 0.%.D ; 3.D 3.2X*.R D D D %.%.D %.%.a D o._ 0._ U.a a.}.i.y.U.` =.>.L.E Y Y Y P P ' ' P 6X6X` L.=.B H.` }.=.;.H.j.E H.j.' ' ' * * * x x e. d d j.( B.B.%.OXg._.O O ", +"O O O ;XvXfXa D 3.D =X%.D ; R D ; %.%.%.%.%.%.%.IXIXD IX%.%.R %.*.0.%.0.0.D r ....%.0.=X1 %.; D _ _ o._ _ a o.c Z c j #X` H.H.j.' P P P x x x Y Y H.:.#XH.E L.L.H.j.j.B j.' * * * * * * * * * * * * * P x 7 Y ^ %.D m.M.l _.O O ", +"O O O g.cXIXa o.o.%.A *.%.D _ %.D D D R %.%.%.IXD IXD IX*.0.*.R D %.D D %.D < %.0._ 2Xa _ 0.D D a _ _ ( >.V .4X4.6X6X' P P 6XY E ;.=.#X=.;.j.6Xj.` H.x ' P P P * * * * * * * * * * * P P d Y ^ %.D 0.T.# _.O O ", +"O O O ;XM.D 1 o.a _ a _ %.D _ %.R ; D D IXIXIXR %.D D D a %.%.m.c _ a %.m.D 0.D a _ c a a c Z .` 4.B 6XP x x x x ' j.E E H.H.;.b.#XL.;.H.*Xx Y * ' ' * * * * * P * d j.^ %.D m.T.g.. O O ", +"O O O g.M.D ; D D %.%.%.a D %.%.%.D R R IXD IX%.0.A R %.a ; 1 %.Z _ %.o.c %.< 0.c .` ` q 6Xx P P P 6Xx P Y E ` .L. .=.L.E Y ' ' ' * x ' d d d * ' ' ' ' x * * d Y ;.%.D %.9X# sXO O ", +"O O O S.M.%.1 o.D %.*.%.a R %._ _ %.%.%.%.D D %._ 1 R 0.*.a 1 a c c c m.>.{ ` 6XP 6X6XP P P x Y ;. .;.E E E E H. x x P x x x x x x x * j.' * * x * * * * * P 7 d ;.m.D %.( # . O O ", +"O O O l 9X%.D o.1 o.0.a D %.%.*.*.D a %.%.IXD D D A a _ $.Z >. . .B B B P B 6XP ' j.6XH. .L.>.:.j.E Y x x Y ' * x * * ' Y d x * * * * * * * * * * * P * ' N.m.o.m.T.# 1XO O ", +"O O O l C.gX1 a ..D _ 1 1 %.a %._ D D D %.%.0.0.0.Z VXVXX.` ' P ' j.B E .b.}.;.' ' * * * * * * ' ' * * * * * * * * * * * * * x x * x E < %.c T.# 1XO O ", +"O O O c.DXDXD %.3.1 0.1 1 %.a _ _ _ %.%.m.( >.z.N.6XP P ' ;.` :.L.>.L.6X6X j. ' x * ' * * * * * x ' x * * * * * ' ' * 7 ' E < m.c ( # KXO O ", +"O O S.XXC.%.a ; c o.%._ _ _ 0.c c >. .` E Y P x x j.H. .=.=. .H.B Y ' x * * * ' Y * * * H. * d x * * ' j. x ' x ' d ' ' j. * x x x d Y r U c < r.HXO O ", +"O O bXZXDXC.< 3.o.c c c c Z .B P x Y *XE L.;.;.H.j.d x x * * x x * * * Y ' j. ' Y * x d d * x d ' * ' x j.' x B x * x *X * * * * * x P x x F r r i.< r.HXO O ", +"O O ;XXXC.%.o.o.< Z @.B P P P ' Y Y E #X:.#XY ' x x x x x * * Y ' * j.' * * ' ' x ' ' j.* * Y * x x * * * x P P x x m.B.m.< r.g.O O ", +"O O ;X# C.D 3.:.4.P P P Y ` L.>.=.;.j.Y d x * * * d ' j. ' * ' * * Y *X*Xu H.H.dXH.* j.' * ' ' dXj. j.#X*X ' j.' H.:.*X Y ' * * * * P P s F C.B.m.( r.g.O O ", +"O O ;XJXDXr ( e.P x Y ` ` ` H.H.H.' x * * * ' x x * * b.O.w.I.H. x ' b.J.dXdX2.(.Y.zX.r.g.O O ", +"O O ;XZX9Xo.j Y *Xd * * * * x ' ' x * w.h.k. Y y.rX) ) ) L.k.h.O.1.O.1.2.zXrXU.j h.w. ;.1.) P.b. k.AXy.#X(..].g.O O ", +"O O jXvX8 _ :.x d d * * * * x Y Y x * Y #Xd ' ' j.' L. ' ' ' ' ' H.j.' j.' * j. x * ' x x * x * * * * * x x *XE V o.i.>.].g.O O ", +"O O jXvX8 o.j d d s * * * * * * * * x * ' ' ' ' ' ' ' ' ' ' ' * ' d ' j. * x x x * * * x d Y ^ m.a c N g.O O ", +"O O jXc.8 o.j d d x * * * * * * ' ' ' ' ' ' j. ' j. ' x ' x x * ' * * * ' d Y 9.m.a.Z 5.g.O O ", +"O O jXvX8 _ :.x d s * * * x * P P * * d ' ' ' * ' ' ' ' ' j. j.' * ' ' P Y x x x * * * d *X*X^ o.j >.@.J O O ", +"O O ;XM.( _ :.x d x * * * x P * ' ' x * ' x j. ' ' ' ' ' Y * x * * * ' j.j.9.o.< { Q.g.O O ", +"O O ;XZXDX< :.s Y x * * * * * * P P P P P P P * * * * * * * * * * * P P x 6XN.m.< { ].iXO O ", +"O O jXXX0.( #X* d P * * * P P P P P P P * * * * * * * * * * * * * * * P P x Y ` m.< { ].iXO O ", +"O O ;XM.%.m.:.x j. * * x * * * * * * * * * * * * * * * P P x Y ^ r 0.( ].iXO O ", +"O O jXJXDXm.=. Y * x x ' ' * * * * * * * * * * * * * * * P P x Y ^ %.m.( @.iXO O ", +"O O ;XJX0.m. . d * ' Y d x * * P = x Y ^ r %.C.@.iXO O ", +"O O 0XXXDX%.=.x Y x d Y ' * * * * = = x Y ` m._ < @.iXO O ", +"O O 1XJX( 0. .* x * x ' ' x * * * * * = = x 6XN.C.c 8 ].iXO O ", +"O O KXXX9Xm.=.x ' ' j.j.' * * * * * e.= x 6XN.< ( N z.iXO O ", +"O O 0XXXDXa ;.x d ' x ' x P P P K K * * ' P x P x P x ' K 7 e.= x Y ` m.< m.z.iXO O ", +"O O 1XZXDXa .x x x P ' x * x x x P P P P P P P P P P K ' * * d x ' x P x ' e.= x B ^ r m.%.r.x.O O ", +"O O HXZXC.%.;.x x * ' * K K * d x ' ' ' ' ' ' ' ' ' K K K P P x j.^ m.o.%.].u.O O ", +"O O HXZX( 0.L.x x x x x * ' * j.d d ' d d d d d d d ! j.B B j.j.j.B B B j.j.B q B q H.3Xj.j.q 3X3Xj.j.q H.H.H.f.H.H.3XG.z f.3X' H.dX*X' Y ' j.L.;.H.#X#XH. H.L.j. L.#X#XL.#XFXhXhXhXm H.3X P P Y ^ m.o.m.@.u.O O ", +"O O HXZX8 0.=.x d ' H.L.L.#Xu * * j.NXNXNXU.> > > > > > > > +X+X+X+X+X+X+Xy.+X+X+Xy.y.y.y.V.y.+X> V.V.y.> y.V.V.V.V.k.k.V.&.w V.> b.j.' n.p b.E dX;.b.a.@X#XV.k.qX' 3XU.oXU.NXU.3XFXy.,.5Xw.4 BXBXk.y.NXqX e.= x Y ^ o.%.0.N iXO O ", +"O O HXZX7.< =.x s E b.U.y.k.NXd d 7 u @ ,.@ !.1.0 0 0 0 0 0 K.5 1.1.1.5 5 1.1.1.5 1.1.0 0 0 0 0 1.1.0 0 0 1.K.0 0 1.0 0 0 0 &XK.G K.k.m j.w.2.y.L.L.=.a.6.#Xb.@ !.aX3Xm ,.W GX1.,.3XFX@ P.K.T T K.K.K.5XoXU. e.= x Y .B.0.C.9X# O O ", +"O O #.ZX%XZ #X* x * * x x ;.U.a k.w.p o d 7 FX!.!.!.K.!.K.K.K.K.K.K.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 K.K.0 0 0 G 8.D.D.,.+ j.w.q.U.;.b.#Xj =XU.NXK.1./.m m ,.2./.qXNX3XqX!.&X@ K.K.@ 5X5X5XoXU.7 * x P = P x Y ^ m.0.0.%.JXO O ", +"O O HXZX%XZ :.x x * H.U.y.k.w.aX7 d 7 FXW W !.W 0 W 0 0 0 0 0 T 0 0 0 0 0 0 0 0 T T 0 0 0 T kXT 0 0 0 0 0 0 0 0 0 0 kXkX0 0 0 &XK. X0 ,.qXH.w.1.#X;.p b.H.I.J./.W W ,.#XH.w.1.U.j.}.U.!.!.!.0 0 kX@ 5X@ 5XBXaX7 * x x e.= e.j.` < m.0.D XXO O ", +"O O 1Xc.%XZ >. ' dXNXV.k.@ p d *Xd FXK.!.1.0 0 0 0 0 0 0 0 0 &X0 K.T 0 l.T l.&XK.0 X T K.T l.@ kX0 kX0 kX0 &X&XkXkXf T f f f kXf 0 kXhXf.5XK.}.L.b.}.qXJ.b.FX!.W /.hXm @ @ 3X+ oX{./.T !.K.K.0 5XK.5XBX4 > K ' P = E B ^ o.c %.%XiXO O ", +"O O S.c.7.m.b.P h m U.oXBX@ n.7 d d + GX&X1.0 0 0 0 0 0 W 0 !.W 0 0 0 0 l.0 5X0 T K.T K.T l.kX-XT l.0 0 0 0 G f 0 l.X l.G T T kXf T 0 qX+ BX1.BXqXFXnXU.,.NXqXK.W 5XqXqX@ @ hXUXFXhXqX@ W &X5XkXK.K.5X4 @ aXK P P 7 P = 4.Y ^ o.m.%.@.iXO O ", +"O O S.c.< o.Z P P * L.> oXBX@ p *Xd * FXK.!.5X0 0 0 0 0 0 0 0 0 W l.W T 0 W W 0 X X T T &X0 W &X0 0 0 !.K.0 0 0 0 0 0 0 T T T l.f f K.&X5XBX&X&XW @ oX,.1.1.@ /.!.l.!.BX4 !.K.5XBX/.BX@ 0 @ 5XK.f 0 K.@ 5X5X> 7 P P ' = = Y Y N.0.m._ @.iXO O ", +"O O ,XL C.o.b. P L.> oXBX@ oXFX@XFXU.!.GXX 0 0 0 0 0 T 0 W &XW l.0 0 T T G f f T T 0 !.2.W W l.T T G f f T T 0 !.2.W W l.X T 0 0 @ &XGX!.W 0 !.2.W 2.q.1.2.&X0 &X0 0 &X0 0 GXl.&XW T T K.0 l.-X5X4 @ 5X4 > 7 P P 7 = = e.Y ^ < m.0.V iXO O ", +"O O ,XM.C.c =. P L.> oXBX@ 1.n.k.k.1.K.@ K.0 0 0 T T T T l.l.T T T l.T T T f f T T &X0 2.0 0 0 T T T f f T T &X0 2.0 0 0 T T G f f T T 0 !.T T G f f T T 0 !.2.W W l.X K.W T K.0 !.@ K.!.X K.qX+ qX5X5X/.aX' P P P P = e.Y V m.< ( N iXO O ", +"O O g.M.< { . P * x L.aXk.BX@ n.*XL.}.2.1.!.0 0 0 0 G T T 9 l.l.T l.T W 0 0 0 T T 0 l.0 0 0 0 0 0 0 0 0 T T 0 l.0 0 0 0 0 0 T T T f f T T &X0 T T T f f T T &X0 2.0 0 0 l.@ W 0 T l.l.&Xl.!.T @ q d UX4 5X/.+X' P P P e.e.x Y V 0.< N N iXO O ", +"O O ;XL 8 { =.x * * m U.oXBX@ k.*Xj.FX1.1.0 0 0 0 f f T T 9 l.9 T X | 9 0 0 0 T T W l.T 0 0 0 0 0 0 0 0 T T W l.T 0 0 0 0 0 0 0 0 T T 0 l.0 0 0 0 0 T T 0 l.0 0 0 0 0 0 l.K.W l.T 0 !.T &XW l.K.3Xd f./.@ /.V.d P P P 7 e.lXx Y V < < N N tXO O ", +"O O ;XL 8 { >.6X m NXoXBX@ p H.j.FXW 0 W T T T f f T T 9 9 - - l.@ T 0 0 0 T T T l.0 0 f f 0 0 0 0 0 T T T l.0 0 f f 0 0 0 0 0 T T W l.T 0 0 0 0 T T W l.T 0 0 0 0 0 0 K.0 T T l.T !.0 !.!.@ q 3Xq /.@ @ oXd P P P e.e.x Y e 0.m.N ( # O O ", +"O O KXC.{ < Z ' P * * * * L.aXoX/.5Xp H.' #X1.&XK.K.T T T T 9 9 G T - G l.T 9 0 0 0 T T T f 0 0 0 0 0 0 0 0 0 T T T f 0 0 0 0 0 0 0 0 0 T T T l.0 0 0 0 0 T T T l.0 0 f f 0 0 0 l.l.T 0 0 0 0 0 0 0 @ f.7 m @ !.oXoXd P P 7 P = e.x { < 0.0.@.# O O ", +"O O S.M.7.< b.6X' * * L.aXoX/.@ U.H.j.FXK.&X0 T 0 T T T 9 G T T T T l.T l.0 f 0 0 0 0 f T T T T G G 0 f 0 0 0 0 f T T T T G G 0 0 0 T T T f 0 0 0 0 0 T T T f 0 0 0 0 0 0 0 0 l.0 0 0 0 0 T T T @ m 3XhX/.@ oX/.d P P = = e.6X/ m.0.c V tXO O ", +"O O l M.8 < Z 6Xh ' * * * * m > oX/.@ k.dXj.+ ,.0 K.K.0 G f f G T T T l.T W !.W 0 f f 0 0 0 f T T T T T G 0 f f 0 0 0 f T T T T T G 0 f 0 0 0 0 f T T 0 f 0 0 0 0 f T T T T G G 0 0 T 0 0 T T T T T !.!.FX3XFX/.@ /.oXd P P e.e.e.Y < m.m.( N tXO O ", +"O O l [ C.m.Z 6X' x * m U.V./.@ p 7 + !.0 T f T G f f T T T T l.W l.!.9 0 f f 0 0 0 0 G T T T f f 0 f f 0 0 0 0 G T T T f f 0 f f 0 0 0 f T T 0 f f 0 0 0 f T T T T T G 0 T T 0 0 0 T T T T !./.m 3XFX/.!.@ oXd P P e.e.e.Y < m.m.Z ( # O O ", +"O O ;XL 8 c }.B ' ' 7 * * x * m U.V./.@ oX3Xf.qX!.T T T kXT f f T T T l.W 0 l.T T 0 f f f 0 0 0 f G T T f f 0 f f f 0 0 0 f G T T f f 0 f f 0 0 0 0 G T 0 f f 0 0 0 0 G T T T f f f T T f f f f T T T T !.oXNXaX/./.@ oXd P P e.= Y E < < 0.Z ( # O O ", +"O O g.M.8 < c H. ' d ' x * x x m U.V./.@ @ aXoX/.@ T 0 -XkXT G f G G G l.T !.l.W W X0 f l.K.T f f T l.T kXf X0 f l.K.T f f T l.T kXf 0 f f f 0 0 0 f G 0 f f f 0 0 0 f G T T f f T T T T T T f f T T T GX!.oXaX!.@ /.aXd P P P = Y E < < < { { # O O ", +"O O l [ 8 Z i.` ' ' ' * * x m U.V./.@ oX+ oX@ T 0 &Xf T T T G f f T T 0 !.2.W W l.T W &Xl.l.0 T 0 0 0 X !.GXW W T W 9 T T l.T l.T &X X0 f l.K.T f f T X0 f l.K.T f f T l.T kXf T T T T T T T T T T T @ /.FXm @ !.@ aXd P P = = Y E < < { Z N # O O ", +"O O S.M.T.{ _ . x * m U.V./.@ aXd FX/.W @ @ kXf T T T f f T T &X0 2.0 0 0 !.W 0 K.0 l.l.T kX&Xl.!.&XW GXW W l.X l.9 T X T l.0 &XT l.K.l.l.&X0 K.X &XT &X&X&XT f G 0 T T T 0 f 0 T 0 T T T T T W W + m /.@ /.oXd P P e.= 6XY < < N ( Q., O O ", +"O O 1Xc.7.0._ .P 3Xy.oXBX5XoXd I !.!.!.l.0 0 0 0 0 T T 0 l.0 0 0 0 0 0 0 0 l.0 0 0 0 0 l.l.W W W W W W W W W T T 0 l.l.l.l.0 0 T T T 0 l.l.l.l.T T l.l.l.0 0 0 0 f f f 0 T 0 0 0 f 0 0 0 0 !.@ + f.w.@ /.k.' * * P = P ;._ 0.%.N r.iXO O ", +"O O l XXT.0._ =.' * * * 3Xy.oXBX@ oXd FX!.!.!.0 T 0 0 0 0 T T W l.T 0 0 0 0 0 0 l.l.0 0 0 0 0 l.l.9 9 9 9 W W W W 0 0 T T f f G G l.l.0 T 0 0 l.l.l.l.T T 0 l.l.T f f 0 0 0 f f f 0 0 0 0 0 0 0 0 W 5XFX3X/.@ /.y.' * * P = P ` m.( 0.T.].g.O O ", +"O O S.XX8 < _ =.' * * * j.aXk./.@ $ d FX!.W !.0 0 0 0 0 0 T T T l.0 0 f f 0 0 f f f 0 0 0 0 0 f l.9 9 9 9 W W W 0 0 0 T T G f G G l.l.l.l.l.l.l.l.l.l.0 0 T 0 0 f &Xf 0 G 0 0 f f 0 0 0 0 0 0 0 0 T @ + FX@ K./.y.' * * P = x .m.( ( 8 5.g.O O ", +"O O 1XZX9X< m.V 6X* * * j.> oX/.@ oXd FXK.W T T 0 T 0 0 0 T T T f 0 0 0 0 0 0 f f 0 0 0 0 0 0 f f 9 9 9 9 W 0 0 0 l.0 f f f f G G l.l.l.l.l.l.l.l.0 l.l.l.T T 0 f &Xf f 0 0 0 f f 0 0 0 0 0 0 0 0 T 4 + FX@ K.w.aX' * * P e.6X .m.T.N 8 T.,XO O ", +"O O 1XZXC.< _ :.Y x * * d U.oX/.5XaXd FX@ 0 K.K.0 0 0 f 0 0 0 0 f T T T T G G G G T T T T T G G f G G G G 0 0 0 0 0 f f f f f G G l.l.l.f f f f f f f f f f T T f &Xf f f f f 0 0 0 0 0 0 0 0 0 0 l.BXhXq BX,.w.U.' * * P e.6X=.m.T.N 8 T.,XO O ", +"O O g.XX9X{ m.{ Y x * d U.oX/.5XV.m b.5X0 kXK.f 0 0 f f 0 0 0 f T T T T T G G T T T T T G G G G G G G 0 0 0 0 0 0 0 f f G T G G f f f f f f f f f f f f f f T 0 f f f f f f 0 0 0 0 0 0 0 0 0 0 !.@ > qX5Xw.w.aX' * P = 6X .m.8 8 N 5.,XO O ", +"O O ;XXXT.N c :.x x * * ' NXoX/.5X/.qX> K.0 0 kXf G 0 f f 0 0 0 0 G T T T f f G T T T T T G G T T G G f f f f 0 0 0 0 f f T T T G T f f f f f f f f f 0 f f f f T 0 0 0 0 f f 0 0 0 0 0 0 0 0 0 0 @ K./.V.@ /.w.y.' * P = 6X .m.( ( N ].g.O O ", +"O O S.M.9XN c :.x x * * ' NXoX4 5X@ NXV.K.0 G K.G G 0 f f f 0 0 0 f G T T f f f G T T T T G G T T G G f f f f 0 0 0 f l.f f T G f 0 0 f f f f f f f f 0 f l.l.f T 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 &X5XqX+ /.@ @ U.7 * = e.6X .%.9X0.5.r.g.O O ", +"O O 1X_.T.( _ j Y * * * * d NXV.5X@ BX3X+ K.K.G f Q 0 X0 f l.K.T f f T l.T kXf f f T l.@ T l.T T f X T @ 0 0 0 &X&X0 &X0 0 l.0 G l.l.l.l.0 X T &XT 0 0 0 l.&X0 T l.l.l.&XK.&XT T X T 0 l.l.0 T T 0 l.5XFXFX/./.@ NX 7 e.P E c < N ( T.Q.g.O O ", +"O O 1XC.T.( m.j j.* * * * ' NXV.4 5Xk.d + 0 f 0 f f 0 f 0 f 0 K.0 l.K.T &XkXT X l.kX@ T T kX0 X &XT T l.l.&Xl.T 0 K.!.W !.!.l.l.T !.T 0 l.0 &XK.W l.GXT 0 K.@ T l.l.K.0 l.K.X &Xl.0 T 0 0 0 0 0 0 0 K.K.+ m /.!.!.NX e.P N.< ( C.C.8 5.# O O ", +"O O 1XXXT.< < c E * * * K }.oX/.4 > ' hXK.K.K.G G 0 0 f 0 T T T G f f T T 0 !.2.W W l.GXl.0 l.0 @ T l.GXl.W W 0 2.K.&XGXl.W W W GXGXW GX0 X W T l.T K.X T T G f f T T 0 !.2.W W l.0 0 0 0 0 0 0 T @ K.+ 3XBXK.5XqX e.= N.:.{ C.9X8 Q.# O O ", +"O O 1XJXT.0.Z i.E * * * qXoXBX5XV.H.b.5XK.0 X0 0 kXl.0 0 T T T f f T T &X0 2.0 0 0 T T G f f T T 0 !.2.W W l.T T G f f T T 0 !.2.W W T T G f f T T 0 T T T f f T T &X0 2.0 0 0 0 0 0 0 0 0 0 kX0 @ + m 5X@ /.U. e.= N.{ { 9X9X8 Q.# O O ", +"O O 1XJX9Xm.Z i.` * * P b.k.BX5XoXH.+ 5X0 0 0 0 0 !.&X0 0 0 0 0 T T 0 l.0 0 0 0 0 0 T T T f f T T &X0 2.0 0 0 T T T f f T T &X0 2.0 0 T T T f f T T &X0 0 0 T T 0 l.0 0 0 0 0 0 0 0 0 0 0 0 0 T 0 4 + m /.@ /.aX * e.= ^ m.C.9XC.( T.l O O ", +"O O S.XX9X0.Z c ;.* * P h + BXBX5Xy.j.hX,.2.K.K.&X0 0 &X0 W 0 0 0 T T W l.T 0 0 0 0 0 0 0 0 T T 0 l.0 0 0 0 0 0 0 0 0 T T 0 l.0 0 0 0 0 0 0 0 T T 0 l.0 0 0 0 T T W l.T 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5XNXFXoX@ /.}. * e.= ;.< 8 7.( T.Q.# O O ", +"O O S.ZXT.( < j =.* * * P ' #Xk.{.@ /.+ NXK.0 0 0 &X0 0 &X!.W 0 0 0 T T T l.0 0 f f 0 0 0 0 0 T T W l.T 0 0 0 0 0 0 0 0 T T W l.T 0 0 0 0 0 0 0 T T W l.T 0 0 0 T T T l.0 0 f f 0 0 0 0 0 0 0 0 0 0 &X5XBX+XK.1.w.}. * * e.e.^ { V %X8 N Q.,XO O ", +"O O HXZXQ.N < Z =.* * * P ' #XoXk.,.@ y.k.BXBXK.0 0 0 W &X@ W 0 0 0 T T T f 0 0 0 0 0 0 0 0 0 T T T l.0 0 f f 0 0 0 0 0 T T T l.0 0 f f 0 0 0 0 T T T l.0 0 0 0 T T T f 0 0 0 0 0 0 0 0 W 0 0 T 0 l.K.NXaX/.0 @ k.NX e.|.V Z 7.( 8 T.Q.# O O ", +"O O 1Xc.( N >.i.:.d 7 7 * 7 #Xk./.K.oX3XFXf.H.+ 2.K.0 l.0 !.0 0 f 0 0 0 0 f T T T T G G 0 0 0 T T T f 0 0 0 0 0 0 0 0 0 T T T f 0 0 0 0 0 0 0 0 T T T f 0 0 f 0 0 0 0 f T T T T G G T W W T 0 T T !.+ m m FX,.@ oXnX * * e.= >.b.{ N < 8 Q.# O O ", +"O O HXJX$.( >.c i.d * * * 7 FXoXk.@ aX#Xb.+ FXNX0 T l.T T W !.0 f f 0 0 0 f T T T T T G 0 f 0 0 0 0 f T T T T G G 0 f 0 0 0 0 f T T T T G 0 f 0 0 0 0 f T 0 f f 0 0 0 f T T T T T G 9 W W 9 9 9 T !.FXqXqXI /./.oXnX P e.b.Z ( ( Z N @.,XO O ", +"O O g.JX9X( Z Z U.Y * * * * * L.y.k.@ w.aXFXhXqX@ T 0 T K.W GXW 0 f f 0 0 0 0 G T T T f f 0 f f 0 0 0 f T T T T T G 0 f f 0 0 0 f T T T T T 0 f f 0 0 0 f T 0 f f 0 0 0 0 G T T T f f W W 0 0 0 W T @ FXoX@ + oXw./.nX e.^.Z Z Z ( { N @.,XO O ", +"O O l M.N { c Z i.E * * * * * m y.k.5X!.@ + f.oXW 0 0 T !.l.W 9 0 f f f 0 0 0 f G T T f f 0 f f 0 0 0 0 G T T T f f 0 f f 0 0 0 0 G T T T f 0 f f 0 0 0 0 G 0 f f f 0 0 0 f G T T f f l.W 0 T W W T @ FX@ !.+ oX@ /.@X * * e.4.Z VXN N ( N Q.,XO O ", +"O O 1XM.T.< _ c a.;.* * * * H.y.BX5X/.!.k.+ !.T T l.&XT 0 @ !. X0 f l.K.T f f T l.T kXf 0 f f f 0 0 0 f G T T f f 0 f f f 0 0 0 f G T T f 0 f f f 0 0 0 f X0 f l.K.T f f T l.T kXf l.W T T 0 W T @ FXV.oXFXoX@ k.m * * e.4Xc Z { ( ( N @.,XO O ", +"O O HXJX9Xr < Z a u * * * * H.> w.5Xw.K./.qX0 K.T 0 l.K.W W W T W 9 l.l.9 @ 9 T W GXW W X0 f l.K.T f f T l.T kXf X0 f l.K.T f f T l.T kX X0 f l.K.T f f T l.T kXf W W l.&Xl.T !.T W W 0 T 0 W T @ FX+ qXm k.,./.m * * * e.4X( >.>.( { 7.%XiXO O ", +"O O l g.T.0.>.>.i.=.x * * * * * j.U.BXw.!.,.oXNXK.0 0 kXK.kXl.l.X !.l.l.!.T T !.X l.T 5X@ W X K.T 0 l.T kXf f T K.kXl.l.T T K.K.T T 0 T l.l.&X0 T l.l.T l.l.T @ K.0 l.T !.W T T W W 0 !.T 0 0 T T 0 T @ > NXaXqXw.,.w.m * * * e.4XZ V @.( 8 N @.,XO O ", +"O O KX# Q.< V >.>.=.x * * x * * j.U.BXBX5XK.@ 5XK.0 0 0 T l.l.@ W !.l.T l.W W T GX4 T l.&X0 &X@ W 0 W T l.f T f 0 T f kXK.l.l.0 T T 0 T W !.W 0 T 0 T K.l.0 kXf f K.T 0 0 l.T T 0 T T W T 0 W 0 T T T K.l.@ W /.@ 5Xk.3X * * * e.CX0.<.( %.< 8 7.# O O ", +"O O HXvX9X0.c ( m.Z 6X x * * * ' NXw.5X@ ,.K.!.T 0 0 f 0 0 f 0 0 0 9 9 T T T T T T 0 0 K.l.T K.l.&Xl.T f 0 0 &X0 0 &XK.&X0 0 K.0 X 0 0 !.l.!.T &X0 K.0 0 0 0 f f 0 0 0 l.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 K.0 K./.K.oXd * * x = @.( V ( 0.N N %XiXO O ", +"O O ;XJXM.C.< Z c j Y x x * * * 7 K }.&.5X@ ,.K.!.kXkX0 0 T 0 f f 0 0 9 T T T T T T T 0 0 0 l.T 0 l.K.K.&XX 0 K.0 0 f &XkXK.0 T T T !.W l.W GX0 K.W l.T 0 0 0 f f f 0 0 0 l.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 K.0 K.w.K.oXd * * * ' 4.N 0.N ( C.8 8 @.iXO O ", +"O O HXJXM.( c ( c j E P x x * * qXBXBX@ ,.K.K.K.kXkXkXkX0 0 f 0 0 T W 0 f f f f f 0 0 0 0 1.W 1.V.V.0 &X&X0 BXBXK.&X0 &XX T l.&X!.W T !.W GXW GXX 0 0 0 0 0 0 f 0 0 0 l.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 K.T K.5X,.aX' * * * * x |.8 0.N T.T.( 8 Q.iXO O ", +"O O HXc.T.( ( ( c j H.x x x x * * * K VXBXBX5XK.K.K.kXkXkXG kXT 0 f 0 0 W l.f f f f f f 0 0 0 0 0 0 !.NX+ V.@ 0 5X+ > l.X 0 K.0 0 W W W W GXW !.0 W W 0 !.l.0 0 0 0 f 0 0 0 0 0 0 0 0 l.0 0 0 0 0 0 0 0 0 0 0 T T K.5X@ U.7 * * * * * x CX8 < Z 8 T.C.8 @.iXO O ", +"O O HXXXT.N N { < Z ` x x x * * * * K X.k.BX5X@ K.K.kXkX0 0 kXT 0 f 0 0 0 l.f f f f 0 0 0 0 2.W 2.W W > 3XFX,.BXqXd oX&XK.> > oXGX@ NXaXp J.GX@ oX/.k.> 5X&X0 0 0 0 f 0 0 0 0 0 0 0 f f 0 0 0 0 0 0 0 0 0 0 0 kXK.@ 5X5X}. * * * * x %X[ ( 2XC.9X( N %XiXO O ", +"O O S.XXM.N N { < < .x x x * x x * K z V.BX5X@ K.K.kXG 0 f kX0 0 f 0 0 T 0 0 0 0 0 0 0 0 0 W 0 2.0 2.aX7 j.NXFX3X7 oXBX+ + b.+ !.U.3XnX@XqX@ aX@XV.NXhX/.&XW 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 kXK.-XK.5XqX * * * P %XT.N 2XC.( 8 7.z.iXO O ", +"O O S.XXM.8 ( ( < c >.6X x x * x x * q V.4 5X@ K.K.kXkXG G kXf f f 0 0 T 0 0 0 0 0 0 0 0 W W 1.2.1.2.y.' m 3X*Xm 7 aXNXL.qXFX3XaXqX3Xn.p @Xn.NXm k.U.3X5X0 W 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 kXK.5XK.5Xb. * * * %XT.@.( ( T.8 7.CXiXO O ", +"O O HXJXvX8 c ( Z 0.>.Y x x x * * j.+X4 5X@ K.K.K.kXkXkX0 f f f 0 0 0 0 0 0 0 0 0 0 0 W 2.0 W 1.2.aXj.}.aXp y.*XaXNXH.L.qX+ k.n.F.v.{.dXp oXFX/.NXd K.0 W W 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 0 0 0 0 0 0 0 T kX@ 5XK.5Xb. * * x 7.8 @.( ( N ( 7.z.iXO O ", +"O O #.c.Q.N ( c N N 0.B P 6X * * * * j.+XV.,.-XK.K.0 0 0 G 0 0 0 0 0 f f l.0 0 0 0 0 0 0 0 0 0 &XW 0 NX7 qX,.1.aX3X}.> 3XqX/.oX!.aX3XNXoXd }.BX+ NXNXf.oXGXW W W W 0 0 0 0 0 0 0 0 0 0 0 f Xf 0 0 0 0 0 0 T T T @ 5XK.m 7 * Y 7.Q.2XZ N N V V %XiXO O ", +"O O HXvXQ.N ( < >.>.c B 6X * * * * j.y.w.5X5XK.K.kXG G G K.kX0 0 0 0 0 0 0 0 0 0 0 0 0 0 !.K.0 !.K.> 3XNXK.1.> 3X> !.qX+ FXFXy.NXm aXoXf.U.5XqXhXhXhXBX!.0 0 0 0 0 0 0 0 &X X0 0 G K.K.K.0 0 0 0 0 0 0 0 K.@ K.@ K.!.hX7 Y T.Q.( <.N ( { N ^ iXO O ", +"O O ;XJX, 8 < c N >.Z B ' * * ' c w.5X5XK.K.K.K.K.0 0 0 0 &X&X&XW 0 W W 2.2.W W W W 2.!.&XW 0 5X> w.1.&X!.NX5XX 5XBX/.k.!...y.,.!.oX5XGX@ V.oX/.!.W W W W W W W W W !.!.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @ K.K.K.4 3X B 8 T.<.>.N ( ( N z.iXO O ", +"O O ;X# r.N ( c { >.<.z.P x * x ' Z w.5X@ !.0 1.!.0 0 !.0 0 0 0 0 1.!.0 0 0 0 0 0 0 0 2.K.0 0 0 0 K.0 0 0 &X1.1.0 !.GXW !.W 1.!.2.2.q.W &X&X&XGX&X0 GXW W W W W W W W !.0 0 0 0 &X&X&X&X&X&X&X2.0 0 0 &XT K.@ @ +X3X * * H.( T.N >.@.( N V z.iXO O ", +"O O ;XJXQ.N N Z N >.N >.P x * Y >.k.5X,.1.0 1.0 0 2.W 2.&X&XGX&X&X2.GXGXGXGXGXGX&X&XP.W &X&XW GXP.GXX !.0 P.X &XW GXW W GXGXP.GX9 GXP.1.1.W &XW !.GXGXGXGXGX2.2.2.W 2.2.0 K.,.5Xw.BXw.w.w./.BXk.oXV.> NXNXqXqXFXd 7 * * x H.T.T.N <.@.( V V @.# O O ", +"O O ;XJXQ.N N Z Z Z N Z P x P * ' j.b.b.qX}.NXNXNXNXU.y.V.oXk./.BX/.BX/././././././.BXw.k.k.k.oXBX/.k.w.y.y.k.BXBXk.y.w./.w.k.k.oXNXy.> NXNX}.}.U.NXNXqXqXb.b.+ + + + #XFXL.H.3Xd d ' 7 7 7 7 7 K K K K d * * ' E Q.Q.V Z >.( N N 7., O O ", +"O O ;X# Q.8 N Z Z ( Z c P x x * ' * * ' 7 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 7 ' d ' ' ' ' ' * d K * ' ` @.Q.@.<.@.( N N V # O O ", +"O O ;X# Q.8 N >.V c Z _ 6Xx x * d 6X' * ' ' ' K 7 Y .Q.Q.z >.^ 8 N V ^ iXO O ", +"O O ;X, Q.N V { N ( ( c ` P P * x * * * x x x * * * * * x j.>.T.T.V V 0.8 N N %X:XO O ", +"O O ;XJXQ.( { ( Z N @._ .P 6X x * x x P P * * * * * * x x x x ` m.9XvX<.<.< ( N 7.r.:XO O ", +"O O ;X# Q.( Z Z N ( @.a >.P 6X P * P x * x x P P P * * * * * * * x x x x x x x * x d x L._ T.r.8 Z ( 0.N 7.r.:XO O ", +"O O ;X# Q.( Z { >.N f.0.Z 6X6Xx Y x x x x P P P P P * x * * * x x x Y Y d x x b.< 7., 5.>.N ( N 7.%X:XO O ", +"O O ;X# Q.( < c ( N .N _ .P x x x ' x x x x x x * * * * * P x x x P x P x ' x P P 6Xy.{ 8 9X5.V N N N N %X:XO O ", +"O O ;X, Q.C.c m.m.( ( { a c E E Y Y j.j.Y 6X' x P 6Xx ' * x ' * x ' x * * x x ' x P ' ' x x Y j.Y Y E ;.=.c k.a V 9X_.N <.C.( N N %X:XO O ", +"O O ;X, Q.( ( m.0.@.8 N c a o._ i.i.a._ i.}.j b.>.=.` j.x P P P P P P P x x x P P P P ' ' x x x x x ' x x x x x P P ' Y B :.Z i.a.v v 1 6.k.k.w.,.6.v a.a.c V C.DX( 0.C.( { N %X:XO O ", +"O O #.JX7.( Z c c ( 0.( @._ =Xa a a 3.1 1 3.3.a _ v a y._ i.b.L.B P P P P P P P P x x x x ` L. .>.Z c _ a.a _ a.v _ a.v a.j j :.=.E Y x ' P P P P P x 6XB .Z _ v 6.=X6.6.1 a.i.a.i.j j }.c }.i._ j c fX9X( *.N N { { @.iXO O ", +"O O #.JX( Z V 0.( 8 T.N N ( 8 N >.{ Z { Z ( { ( m.c m._ o.o.a v 1 a. .Y x ' P 6Xe.x 6XN. .c D D 1 =X=X; 1 a a 3._ a 3.3.a a a a =X=X6.t 6.v i.Z ` B Y ' x * * * P x 6Xe.4.` { ..S 3..._ j _ _ c Z j { =.c c :.>.j Z :.j j { 8 C.( 9XDXQ.>.>.z.,XO O ", +"O O #., N Z =.( N T.N N N ( ( 8 N C.0.C.{ ( ( ( ( { { ( c m._ _ _ a k.=Xa H. P ' ' x 6Xx ' B 6Xe.V < 1 ).1 3.D %.0.c Z >.N >.@.>.Z Z Z Z Z Z Z j j Z Z Z c _ 3...I.1 y.c >.H.7 x Y Y ' x Y B E o...3.c V { m.@.Z < c Z :.Z Z { i.i.b.:.j j >.:.j { { ( ( 9XDXT.>.>.z.,XO O ", +"O O #.tX7.Z >.( Q.8 T.T.T.( ( 8 { ( 0.( V N ( { V { >.>.:.Z Z { >.j :.c v k.U.;. P P E c a.o.a _ _ c Z Z c Z c Z >.>.Z c Z j c j Z Z j j }.j Z Z Z Z Z >.>.>._ _ a.a.a.U.i.}.j.Y x 6XV a S v a.m.o.m.{ c c c c Z =.` B E E ` ` E ;.:.Z j i.m.< < ( N T.[ Q.N >.z.,XO O ", +"O O #.tX@.Z :.( T.N ( ( ( N N N ( 0.0.{ ^ z.` B 6X` ` ` ` .=.>.>.Z =.=.Z _ a a a. .=.Z Z _ I.v a.m.{ V . .>.{ >.>.>. . .>.>. . .#X=. . .=.=.=.#Xj }.}.Z :.>.>.>.:.>.>.:.j U.v k.=Xi.V { a ..o.{ :.j :.^ =.c m.>. .;.` E Y e.x x x P x E =.j j { < { N ( 9X9XN >.z.,XO O ", +"O O ;X, @.>.>.( ( 7.8 ( ( N @.N ( N >.` B Y x P x P P 6XB ;.=.Z c _ c >.>.i.=X1 a a o._ c >.V :.:.j Z >.=.>.>.` ` B 6XY x x x x * x x j.H.;. .=.>.Z < Z { >.=.=.:.Z }.c v S S o.Z >.>.:.i.i.>.V j >.N.Y x P P P P P P e.P P P x 4.=.j j { < N N ( M.C.N >.z.,XO O ", +"O O ;XJX@.>.>.{ ( @.N ( ( N @.N Z N.B x P P P j.' ' ' P P ' B ` .Z i.c >.>._ Z { >.V >.>.c i.Z >. .B Y 6X6XP ' P ' x d d ' * * x x ' ' 6X6XY ` ;. .V >.:.b.:. .=.>.{ { { < i.;. .{ :.;.6X x P x 6XY Y x x 4.;.{ { < V N ( L 9X>.>.z.,XO O ", +"O O ;Xc.@.>.Z ( C.7.N N N N V @.@.N.B x x Y *XdXb.b.:.>.L.E Y x x Y 6XE { j < m.{ { < Z < c { Z { ;.E E Y 6XP x x Y H.L.=.:.@X:.nXnXb.@X@X@X#XL.j.x x x 6X6XY E ;.=.>.>.>.{ { < < :.V >.j :.c Z x ' x 6X` L.>.Z j j j j c :.Y x 4.N.;.^ N ^ N DXM.r V >.N.g.O O ", +"O O ;Xc.7.:.c < DX8 N N N N V ^ N.P 6XP P ;.v.y.p a.y.v k.k.a.j >.Y B 6Xe.N.;.=.< m.m.c >.V { V ^ B x ' ;.#XnXi.U.p w.6...,.,.,.,.J.J.J.J...I.$ v a.i.#XE x e.x x e.4.;.=.>.{ V V { { { :.:.=.E Y Y Y d L.c v 1 1 1 v a._ m.a.< 4.x E ^ :.V ( ^ N ( OXT.V .N.iXO O ", +"O O #., @.Z >.{ 8 ( 7.( ( >.N ^ 4.6X x #Xi.n.i.j }.U.y.}.i.y.U.v j :.E e.4.E < V { >.{ V { ` P x P E j a.v =XI.I.$ $ $ $ $ k.p p p p p p k.$ ..I.$ w.w.k.y.a.Z H.P x P Y { V { < { V { < Z :.Y x Y #Xv.I.b.a c Z b.j b.:.>.V < E P ^ E ] { V ^ N N SX%X{ .CXu.O O ", +"O O #., @.Z >.( ( N @.N V .N ^ 4.6XP E b.j b.b.nXa.@X#X}.i.}.j i.j b.b.N.P P e.N.^ < { { { { 6XP ^ i.k.w.1 a.i.i.i.}.j j j b.:.#X@X:.:.:.:.b.b.b.j }.i.n.y.v v v k.m. .P P =.N.V N V V < j N. ' x dXj NX}.=.>.;.#XZ >.#Xj V ^ ;.V Y x { :.;.{ 8 V N @.Q.8 { ;.N.jXO O ", +"O O #., @.Z Z ( 9X( 8 C.N V ( >.` 6Xx H.:.:.=.#X:.b.=.@X}.:.L.:.:.=.i.U.:.b.` 6X6XZ { Z i.{ x P 4.< v m.< }.j j :.:.>.=.=.=.;.;.` ` L.L.L.L.L.L. .=.=.L.L.=.:.:.:.i.i. . P V V Z c c < Z ^ e. x Y L.j i.nXu ` =.b.a =.;.;.=.V .` ^ e.x { { =.{ 7.@.N N L T.{ ` 4X:XO O ", +"O O #., @.:.:.( ( 8 N ( N V ( N V B x Y =.:.:.=.=.;.nX:.#X=.j y.i.:.:.:.:.U.:.x ' P ;.V < _ j 4.P 6XV Z =.^ =. .;.^ ^ ^ ^ ^ ;.;.` ` ` ` ;.;.` ;.L.;.` ;.;.` H.;.=.#X=.=.;.6XY V j V j < { ^ e. x E :.v.nXL.dX#X#X#X} t.#XE =.;.V =.^ ;.e.e.V ^ =.V %X^ N N SXQ.N ` 4XiXO O ", +"O O #., %X>.>.( T.N .V N Z < Z _ ` x x ;.V V =.;.=.=.;.j 6 eX(.eX6 ;.u j u :.j ;.x x ;.j i.j =.P P E ^ ^ =.^ ;.;.^ ^ ^ ^ . .^ ^ ` ` ` ` ` ` . . .;.;.=.=.;.;.=.:.L.H.j.Y E ^ V =.V V .` 6X ' =.j b.u E ;.b.L.k.zXt.6.L.;.L.` ;.` E e.4.V V N.V 7.@.@.z.OXQ.>.` N.g.O O ", +"O O #., z.>.>.N N { @.V { ( Z { o.V Y e.N.^ ^ ^ ^ :.` Z 6 rX(.uXeX9 =.=.nXL.@X}.b.E Y =.:.{ :.x e.4.N.^ ^ ;.^ { ^ ^ ^ ^ ^ ^ ^ z.` ` 4XB B 4Xz. .^ N.;.=.=.;.;.L.dXdXE x ;.=.=.Z j >.` Y P x x =.#XdXL.u ;.;.b.(.w.v (.c Y E E E N.6Xe.N.:.:.^ V V @.N r.tX%XV ` z.g.O O ", +"O O #., z.>.>.{ N { V V @.V .z.Z Z N.e.4.N.N.^ ^ V =.6 zX6.j E :.#Xu ;.dX@Xu E #X=.x x E =.:.:.E P x 4.^ V ^ N.^ ^ ^ z.z.z.z.z.` z.` 4X4X4X4Xz. .4XN.;.N.` ;.u u L.;.H. ' =.;.;.>.:.L.6X x E E E =.;.H.=.2..>.( N { ( { @.V V ^ { m.N.P 6XN.` ^ ;.E >.(.uX;.;.;.;.;.;.=.u =.@X;.;.:.j.x x :.:.:.=.e.e.x 4.^ V ^ ^ ( ( 8 8 8 ( ( 8 9X( 8 8 8 ( $.0.( _ m.^ B ` ;.E ;.' j. .E ;.E E 6Xx E ;.B x x E ;.6X;.6.rX#Xj.' Z ) I.B e.B N.x e.^ V V V { 7.@.V r.r.T.z.` z.:XO O ", +"O O S.,XSX8 ( V N >.{ Z ( Z @.@.Z ( < = P N.` ` .E ` rXd.x .=.N.;.;.;.;.=.V V =.;.=.Y ;.{ >.Z e.e.P e.^ ^ z.%X$Xt.) $X$Xt.t.t.$Xt.t.t.t.t.t.t.t.eXt.Z B Y ` ` ;.Y P ;.;.V >. .B x Z c .6XP P 6XY 6X:.,.b.B 6X6X` I.6.;.E 6XB 6XB .^ . .N.CX7.N %XSXL ^ ` 4XiXO O ", +"O O S.,X, T.{ @.V @.>.N @.V N @.@.%.D N.P 6XB B B ;.;.zXt.>.E ;.` N.` ;.;.^ ^ ^ ^ ` ^ Y E V V :.Y e.P 6XN.^ N.z.~.$X$X$X$X$X$X$X$X$X$X$X$X$X$X$Xn [.% N ` 4.E ` E x P ;.^ V >.` P P x Z < @. .4.e. P x x Y L.` Y j.Y ' L.=.P 6X6Xx B >. .N .7.Q.z.^ 7.L OX^ ` 4X:XO O ", +"O O #.,X, N N . . .@.Z @.@.N %X{ m...( ^.e.P x 6XY ` t AXt.1.6 6.B ` ;.;.N.N.N.N.N.E 6XP Y L.>.V E x x Y B N.N.|.z.Q.Q.].Q.Q.].SXr.].].].OXz ].].V z. .B B Y B ;.Y x x x ^ .>.>.N.P 6XN.Z V ^ N 4X4.P P P ' x Y j.6X6Xj.6XP B 6XP =.Z ^ >.N ( N z.CX7.L %X^ ` 4XjXO O ", +"O O ;XiX, 7.N V V < N ( >.>.V 4XN @.D 3.Z 4XP 6Xj.P B ,.) `.eXa Y E N.E E E E 4.B 6Xx x x ;.:.V N.x x 4.Y 4.N.4.4X4X|.|.CX4X|.4X^.4.4X4.^.^.B 4Xf.^.B B B 4.6XY Y x e.e.=.V V V B x ` .( V ^ >.N.z.B 6Xx P P 6Xx x ' j.B 6Xx 6XP x P ` .^ >.( 7.%X@.V %XL L @.` 4X:XO O ", +"O O ;XiXQ.@.N >.V N V V z.7.( @.@.z.m...1 c E ' j.j.L.Z b.;.Y Y j.j.E E 4.Y Y P x x E >.=.H.P P Y Y Y B e.Z.4.e.F Z.4.e.4.4.4.B B B B B B B 4.4XB 4.E Y Y x x x x =.=. .` e.x .>.< Z N >.@.N V ` Y 6XP 6Xx x ' P Y :.{ >.>.@.N z.: @.7.^ OX7.V .z.iXO O ", +"O O ;Xg.Q.@.N >.=.` < ( ^ z.7.N 7.N ( D ....c 6X 6X P j.P 6XY Y Y Y E E E Y d x P E =.L.E x P 6XY Y Y Y E Z.F F Z.Z.F Y F Y Y o Z.o o Y P e.6XY x E Y Y x x x x V V ^ B P 6X{ Z c c ( V >.{ >. .` 6X x P 6XE =.>.;.Z I._ Z < ^ >.z.CXr.%X%XSXSXN .z.iXO O ", +"O O ;XtXQ.@.{ Z >.Z D 0.Z @.4X@.@.( N c %.=X=XZ L.' P ' ' P L.6Xj.Y Y Y j.Y Y x * Y ;.#X=.B x ' E Y x Y o Z.F F o o F Y s s s s F Y F F E B E E x Y * s s x x F :.{ V 4.e.4.Z < < ( ( @.V { >.;. .;.j.P P P 6XH. .Z c c >.^ V ` ^ Z >.>.@.z.r.%X7.L SX>. .z.iXO O ", +"O O jXg.Q.V Z c { Z N 6XN m.@.( ( N @.N { a H =Xa Z H. ' ' P ' d x x x x x x E =.b.Z j.6X x E Y * Y F o F x F Y F s o Y Y Y o o o o Y x e.E x Y * Y x * * x :.{ =.4.e.6XZ c < { ( N V < Z ^ .:.=.E 6XP B :.j #XB 6XP 6X` .Z @.>.z.: r.V V L L V ^ 4X:XO O ", +"O O ;X, r.@.>.Z :.Z N ( ( @.N C.8 N ( >.( 0._ t H 1.y.L.' P ' ' P P * * x j.=.j :.;.;.x P Y ' d j.' e.F e.e.e.x F F F s x x s s Y Y Y F x x Y Y x x x 6X4.=.< V e.B V c Z V Z < V { 0.< >.>.#Xb.y.>.Z a Z E 6X B 6XP P P 4.^ V N N @.%X@.V %XSX7.V ` 4XjXO O ", +"O O ;XtXr.N Z j >.@. .N { 7.N C.( @.N @.Z 0.%.S t =X5 O.k.>.j. x x L.j i.Z :.{ .x x x * ' ' e.e.e.e.e.e.e.e.e.e.x x x F Y Y s x x x x x x x Y Y N.;.N.N.V .>.Z ( ( { N V ( N .>.:.Z _ Z i.c E P 6X6XP 6Xe.P P = 6X4X^ N @.%X@.%XCXOX%XV .4XiXO O ", +"O O ;XJXQ.V V Z Z < N 8 ( 7.%X@.@.7.N @.N N { c c H 5 ,.w.k.+Xc Z ` B Y 6X' 6Xj.H.j i.k.=Xa. .` :.V e. x x * e.e.e.e.e.e.e.e.e.e.x x x x e.6XY Y Y s x x ' 6XY P E V ^ N.N.Z { { < 0.0.< ( V Z { .>.Z Z Z =.:.` P P N. .B 6X6XB 4.6Xe.4.^ N N N N 7.%XSXL @.^ 4XiXO O ", +"O O ;XJXQ.7.@.{ < ( V V { 8 N T.( 7.7.V N Z ( c c a k.=Xt 1.t =Xw.1 v v k.w.,.1.6 ,.6.6.S a >.V Z V 6X x 6X* P = = P P = e.x x P x x x x x x x x x * ' B >.{ ^ e.^ { ( >.N ( ( { V { { V { c Z .=.>.B B E N. .B B N.` ^ ` B N.^ 7.Q.7.7.%X^ OX%Xz.` 4XiXO O ", +"O O ;XiXtX8 N >.>.{ @.z.7.( ( C.r N 7.7.>.N Z Z < >.Z _ 1 t H H t ,.6.,.t 1.1.O.1.O.t 6.I.o.( N { V 4.P ' x x P P P P P P P P P P P P x x x x * * * * x x ' h P P B V { .4.N.{ Z N 8 ( { { @.N { { Z c Z ` N. .` =.>. .{ . . .@.V V .` 4XV @.@.@.%XCXOXOXN.N.4XiXO O ", +"O O #.g.tX8 >.@.>.< { @.@.N N 7.8 8 7.N @.@.>.@.>.( >.>.Z _ =Xt t 6 H H 6 H O.6.=X2.6 6.a.{ V V %X%XN.e. P P P d s x x * B >.{ V @.V V { N < o.0.{ < 8 Z ( Z { Z >.B P ` .>.Z _ a c ( ( < < m.0.V 4X%X%X%X@.V 7.L 7.z.` 4XiXO O ", +"O O HXJX, 8 . .( V N 7.%XQ.@.@.8 7.@.{ N N < ( _ Z c _ c N >.c _ =X1 =Xt H H H H 6.I._ { V { { 7.V 8 V N.Y x * * B ` >.Z >. .z. . .>.V { m.( V ( C.{ { V ` N.E x 6XB >.Z _ 1 a a o.; ..1 ; ; 0.^ z.CXCXz.%X7.L SXz.N.4XiXO O ", +"O O 0Xl , C.N @.Z %X( 8 @.%Xz.r.N N @.( N 7.Z >.< Z N >.N Z ( ( Z c j j i.a.a a a i.{ =.>.< 0.{ ^ { 3..._ :.E x ' x * x j.` X.1 =X1 c >.N N ^ N.< < { < Z N < { ^ ;.E P P x 6X ` i.=Xt ..H S n $XLXS ..m.^ ( N @.%XV V SXOXN.B ^.jXO O ", +"O O . JX5.Q.@.Z { { 8 z.@.@.7.CX7.z.8 7.7.7.V ( { ( >.{ >.( V { { V >.>.>.Z Z >.>.{ < { >.Z >.@.Z >.0.t d.S v m.:.Z X.q 6XP P P P P x P ' j.* Y j.=.#X>.c a t H H 1 >. .{ { V Z { { { :.:.>.^ E x x x E =.=.:.;. ' a.=X,.P.6 P.n n H n 3.0.N @.8 |.^ < CXL OXN.N.i g.O O ", +"O O O iX@.L T.< >.{ 8 @.N N N @.( 8 ( %X@.8 N N @.{ @.>.@.{ >.( < z.^ ^ @.{ { N { j { . .{ Z Z *. .>._ =XLXH t 1 1 a _ c Z ( c c V =.Z j :.b.U.n.a.y.1 1 I.,.t H H a Z ( ( .^ < V j >.` ` j.x x E :.s.i.v n.i.U.L. H.a 6.6.t H O.d.H t c N V 7.8 %X%Xj OX7.SXCXN.i g.O O ", +"O O O iXz.L T.{ =.( < N 8 N 7.@.8 8 { ^ @.( 8 8 N ( >.>.@.>.V { { ( Z N { ( N V N { { { Z ( N .@.N N N _ t n LXt t Q =X; D a D 3.1 a v 1 a.U.p 1 I.I.t ,.t d.t t a c V >.( N N ( =.< ;.P ' x x ;.:.i.a.i.i.i.j v.b.b.*X ;.y.I.O.t H H 1 _ N N V @.@.V ^ V OX%XW.^ N.i g.O O ", +"O O O # r.L 7.{ >.8 8 7.7.7.@.%XV N 7.@.7.8 { 8 < < { N V V V >.>.@.^ ^ >.( { { 0.V >.N >.V @.N ( N <.>.N 0.m.m.o.=Xt % t ).).S t % =X..6.t O.1.1.t t t I.1 =Xa 0.Z ( N ^ 7.( 8 N .V B 6X` =.j :.:.j j '.s.=.:.b.@X}.H. H.>.c a 1 a { >.( ( @.^ CX7.N.^ ^ OXSX^ z.|.g.O O ", +"O O O ,Xz.T.7.{ :.7.%X%X%X@.@.V @.( 8 7.N 8 N @.{ N N >.N >.{ { { ( { V N { @.^ >.{ N N N 7.V N ( V <.N >.N V V c Z 0.%.o.a D ; ..A 1 D a 1 =X=XI.v a 1 m.c _ < Z < { N { ( @.%XN V B 6X6XY =.Z =.L.;.=.=.=.:.s.:.nXdX:.b.;.Y Y ;.>.>.@.@.( Z @.V CX7.CX^ V OX%Xz.` i g.O O ", +"O O O u.4X[ [ { :.{ %X@.%XV @.N %XC.N 7.@.8 ( %X@.V N >.{ N Z N N @.@.@.>.Z { { 0.< 7.N ( ( N @.OXN N N N { N 7.( ^ @.N N N N N V 7.C.< >.V >.>.{ >.>.( >.>.( < m.Z N 7.( ( @.%X( Z 6XP 6Xx ;.>.E =.=.i.#XY =.nXu u nX@X=.U.b.x Y ` ` z.>.@.@. .{ N z.{ ^ =.V %XCXCXN.i g.O O ", +"O O O x.4X[ 8 { :.{ @.N @.@.@.{ @.N V 7.@.N < @.@.N ( N Z V Z V @.V N V @.>.V @.V ( %Xz.@.@.N 9X( N @.@.N 7.%XV V 0.0.< 8 8 ( N z.r.N { N { { Z _ ( ( 0.Z N { { 0.@.N N 7.T.8 T.N c B P 6X;.` Y ;.,.O.:.;.@XdXI.1.}.dXj j E x .V ^ N ^ @.^ N 7.z.7.^ ^ ^ W.: ^ ` i g.O O ", +"O O O # : L SXV { V ^ N @.@.%X( N @.7.( @.V { ^ 7.N Z >.{ @.{ @.@.@.N N N Z ( Z ( 7.V 8 ( @.@.( ( T.@.N ( 7.@.{ { 8 { N 7.8 C.8 @.7.T.7.N ( >.@.Z { N ( Z N N N ( N 8 N 7.T.8 7.@.Z ` P P ' P x E ;.;.} eXj x u nX`.1.;.;.:.;.H.x 4. .@.>.@.c N z.@.z.7.@.=.+.8 OX^ z.: HXO O ", +"O O O iX@.7.L V :.{ @.( { N { @.{ N V N N V N V ( N V N >.N N @.N z.( >.N Z N c < V < N 8 N Q.( N N N ( T.( 7.7.@.7.( @.N N T.%X9X8 @.7.( >.>.Z { _ N N ( m.N 7.N N C.N N @.Q.C.7.m.Z B 6XP Y Y .E L.(.} Y =.uXY.:.;.;.;.;.P e.^ { .^ < ( @.@.N @.^ 4X^ { %XOX4X@.: g.O O ", +"O O O J @.L T.V :.^ %XN N N N N < ( N { N 7.N @.{ Z { Z >.N { @.>. .( { ( Z >.Z ( %X7.Q.( 8 @.( 9X9XN N %X7.%X7.V V 8 @.8 8 8 %XT.7.r.@.N V V { { < ( ( N < { 8 @.N ( N N N T.0.N { _ B 6X 6XY B E a.`.a.v (.:.d E ;.;.=.Y x ` >.@.^ 8 { @.7.N N 7.z.;.^ OXSXz.V : g.O O ", +"O O O x.].L 8 { :.{ { { { >.^ V V { V { N N { N { ( ( ( @.N ( N N @.( ( ( ( @.N { N { N 8 N z.@.N N @.7.@.8 N { V %X7.V 8 9X9XQ.7.7.@.N ( N N ( ( { ( 0.{ C.< C.N ( ( { { 7.@.N z. .a >.6X6X ' P 6Xx H.1.rX(.6.dXY ;.H.Y E P ` >.V V N 7.@.N 8 N N @.^ ^ OXL @.@.: ;XO O ", +"O O O iX].7.8 { Z V N @.{ { V ( { { V N N { ( N Z N N N @.{ 0.( ( N ( N { N @.@.{ %XV V 7.N N ( 8 5.@.N @.( 8 8 7.7.7.N ( C.( 7.@.N N ( 0.< ( c 0.( { < ( 0.N ( ( 8 8 ( < ( ( C.Z .j _ >.P x P x 6XE x rXzXj.9.d E E Y x P E ^ { V V V @.%X@.( @.@.@.>.V %XT.^ ^ i g.O O ", +"O O O iX].Q.T.{ j V N ^ { ( N < { { >.{ V N { V >.N N N @.{ 0.( N { N N N N N N ( N %X@.{ ( ( N ( ( N N z.V @.{ 7.8 { 8 8 8 8 N %X7.T.( ( < ( 2X0.0.8 ( N { %X>.N Z { c < N N ( 0.>.>._ j B P P H.6X j :.d s x Y o E 6Xx 4.=.V V ^ @.@.%X^ N r.%X@.>.V r.T.N.N.|.HXO O ", +"O O O iXr.Q.8 { j { { >.Z ( N { N N V N V V { V N ( ( ( V N ( @.@.( ( N @.N < { ( o.V V 0.0.V z.( N N ( @.N V { V { V N 7.T.8 C.T.7.8 { { ( Z ( 0.Z ( ( %XV N ( { c Z 0.( @. .@.Z ( c Z >.Z . x 6XP j.x Y x Y Y x x e.x e.V V V @.V 7.7.%X@.r.@.@. .^ CX7.4X4X: l O O ", +"O O O iXz.Q.[ { { ^ ^ { Z ( ( { < V @.N @.V { N Z ( ( ( N { N ^ @.( ( ( @.N 0.N ( Z ^ V Z ( N @.2X@.V ( N < ( { @.V ^ 7.%X7.N DX9X@.8 N V N <.Z 0.{ N { @.{ { 0.0.Z >.c c N { Z %.c Z :.>.c _ ` Y ' P P Y ' x * Y x x x 4.^ { V V V 7.{ { V @.@.@.@.V .CX%Xz.4X: l O O ", +"O O O u.z.7.C.Z >.V V 0.( N N .{ N N 8 V @.N N { { N ( { ( N %XN N ( 0.@.V < N N @.N < @.z.N .@.N N N .{ { { ^ ( V { %X%X%X9XN r.7.@.z.V >.>.c 0.V >.N c @.N c N ^ { { @.@.@.Z c .Z N >.a c E x 6X x ' d x x 6XY P V { V 7.V %XV 7.%XN @.@. .{ { r.OX^ 4X:X1XO O ", +"O O O iXi N < < ^ { ` { < >.@.@.( ^ N @.N ( C.7.( N ( { N ( N @.N z.N { N { { N Z ^ Z { >.Z N @.Q.z.N @.@.( ( { ( ( N N 8 T.7.Q.Q.Q.0.%XN N @._ Z N { { { ( { N ( >.V ^ .N Z N .@.( Z @.>.>.Z o. . x * d * * x x P x B .V V V ^ ( @.@.7.Q.r.V V V 7.SXT.r.: ,X0XO O ", +"O O O ,X: N Z m.( @.^ Z >. .Z ( ( 7.( N 8 8 9XN ( V 8 N N ( 8 N ( ( < { V @.@.@.>.z.V >.N < { @.@.%X7.@.@.8 N @.N N @.%X@.Q.Q.Q.7.Q.( @.V N V < >.< c ( N N { ( m.< { N N N N N V N ( N N ( { { m.6.:.E x x x * ' P N.{ V N N @.8 @.@.8 8 7.N V %X%X: OXr.tXS.. O O ", +"O O O g.: @.V < Z c ( 0.N .N N V N ( N N T.8 N ( N { { { ( Z { ( V { { N ( ( { Z V N { < m.< N ( ( 9X( ( C.N 7.( 0.( N N 8 T.T.T.7.T.7.7.N { { V .Z < < c < { { < { N { N V 7.N N @.^ V Z V @.Z a.a I.j Y x * * x ' P x ` V >.N 8 V 8 %X7.8 T.7.{ .%X7.%XSXr.tXS.. O O ", +"O O O J 4XN >.{ >.m.{ Z < Z >.N 0.8 8 N N N ( 8 ( ( ( ( Z Z { { { >.Z { { < ( N >.>.V >.Z ( N T.C.( 8 8 ( 8 @.@.N ( ( 8 ( ( T.7.@.7.7.( V >.< >.>.V Z { >.Z < < ( < N N { N @.@.N ( N @.N 8 { Z c V j v v a.i.dX P P B Z m.( { { ( N 8 @.7.N SX@.>. .V C.8 L r.tXl . O O ", +"O O O J OXZ { < { c N N c ( .V 0.0.( 8 8 ( C.C.( < < < ( { { { N N { V @.V N N { N >.N ( N 7.T.0.T.7.N T.N @.@.V N >.N N ( ( 8 N @.@.< V V ( >.Z { < { N < 0.< ( 0.8 { ( < N 7.N N N N N N ( < < { >.{ i.I.6.a.b.=.B P =._ m.@.( N ( { ( V 7.Q.SX%XV ^ V C.8 L %XtXl . O O ", +"O O O ,Xz.N >.Z { < m.( ( ( V N ( 0.( < ( ( ( < N ( { < < Z Z ( N @.N V V N { { Z ( { c 0.( N ( C.9XT.8 ( 8 8 ( N N N N N N ( ( ( @.V < N V < Z c { { { ( 0.< N V ( N 7.( C.C.8 8 @.7.8 8 N N { V V >.{ :.wXi.a.O.O.v a.1 I.o.( { ( V ( { 8 7.N %XQ.Q.V .V C.8 7.%XOXl . O O ", +"O O O ,X4X@.V { V N m.>.V < 0.%.m.< N 0.( Z >.( N ( { < c Z Z < { { < < < Z { V .{ >.{ Z 7.N 8 N ( T.8 T.7.8 ( @.N N N @.^ @.@.V .V Z { :.< < < < { V V 7.V N < { 7.7.{ < C.< 8 8 N ( 0.( ( < { V >.V ^ :.j j a i.i.a 1 a.:.V < { V { { { V 8 7.7.@.V .N C.8 L 7.OXl . O O ", +"O O O J ^.>.< c V < _ @. .< c m.< { N m.c ( V < Z Z { < m.Z Z < V >.< Z >.{ { { < c { N N V 8 C.8 C.8 8 T.7.( C.^ >.N N @.^ ^ .^ ` .V V >.{ { :.{ N V { ( 7.7.0.< < 8 { 8 8 8 7.( @.N C.( { < ( V Z < { i.i.:.j j < j =.=.{ < Z { ^ { N V %X< 8 7.%X . .V 8 7.SX7.r.l . O O ", +"O O O i 4X( ( { m.m.Z { < ( V V Z { { < { < >.{ >.=.` ` V V ^ ^ V =.>.{ Z Z Z Z j { { Z ( { N 8 8 C.8 8 7.8 C.N V V V ` 4X@. .B 4.B B E ` ;.^ ^ ^ ^ >.>. .V < < V { 0.( 8 < N.V { ( N N < < N { < >.=. .^ N.` ;.;.x Y E ;.E 4.N.V ` .{ { { V V N 7.N { >.V 7.7.7.@.OXg.. O O ", +"O O O u.4XZ ( { < 0.0.( N N Z ( { ( V .` .N.B 6Xe.e.6XY 6Xe.e.e.e.Y B N.;.^ V >. .>.Z { V @.7.{ %Xz.7.@.N < 8 { B 4X6XP P P P 6X P x x x P P B 4.N.^ ^ ^ V { ( < N V < V N { V N 8 ( N ^ ^ ^ 4.4.Y x P x x x x e.x P P x E B B N.^ ^ V 7.8 T.>.V V 7.7.W.@.OXg.. O O ", +"O O O u.4XN ( { Z c m.< { :.j j >.B Y B Y E x e.e.P Y B Y x x x P P P P P x 6XB E B ;.V V .V 7.7.8 { 8 V ^ z.4.^.P 6X6XP x P P Y B E B Y x x x P P Y 4.6X4.^ >.V { ^ < < { { { { V ` 4.Y Y 6Xe. 6X4.Y E L.` E j.Y Y j.6XP P P e.Y Y 4.N.z.7.T.:.#XV 7.L L 7.r.g.. O O ", +"O O O u.4XV ( < < c < < < { .;.;.4.P P x x N. .:.j i.< j Z :.:. .;.E 6XP P P x 6XY B N.=.Z { V { V 7.^ 4X4.P P P P P x B ;. .#XZ j c }.j :.:.:.` j.x P x e.x B N.Z .{ < { >.Z =.4.x P P P P Y 4.N.=.Z j c U.I.v a.}.j j #XH.j.Y 6Xe.x P x 4.CXQ.{ :.V 8 8XC.7.r.,X. O O ", +"O O O u.4X@.( < < < < j { ^ 4.x 6Xx x B ;.j }.i.c a.i.a.a.a._ i.i.i.j :.=.` Y x x x x Y ;.{ { V N.4.N.4.6XY P x 6X4.` =.Z U.y.y.i.U.a.a.a.a.a.v a.j =.E x x x x x e.V N.=.{ V ^ ;.4.x x x P P x ;.i.i.j i.a _ j j j }.v.a.I.I.v i.:.B x x x x x lX4X .=.{ C.C.C.7.r.,X. O O ", +"O O O u.: @.Z c < < < { ;.Y e.x P P E j i.a.i.i.:.j Z :.j j j :.:.j j j j Z =.E ' x ' Y B ` ^ V N.4.4.x P P x .V Z i.i.U.U.}.U.U.n.U.i.i.i._ a.i.U.i.:.Y x x P Y e.N.=.=.E Y x x x x x E >.:.}.j }.i.Z >.}.j j j j j j j b.a.i.j =.Y e.= lX6XE { r r L 7.r.,X. O O ", +"O O O jXr.>.{ < Z < { ^ N.4.6Xe.e.#XZ c =.:.:.j :.j j j Z :.:.:.:.>.:.:.j j Z =.=.' x ' Y Y 6XY N.4.e.e.P P x Y ;.c Z c y.1 =Xk.}.U.NXv.j j j j j b.j U.y.U.=.j.x ' P x x Y Y ;.x Y 6Xx P x E >.c :.v.a O.1.U.=.}.j nXnXj }.j j }.@Xj U.i.=.Y x x lXlXP 6X .C.C.7.7.r.,XsXO O ", +"O O O jXQ.N N { { ( ` B ^ .6Xe.E Z :.:.j O..j j =. .#X:.=.:.>.=.>.:.Z j j E x Y E Y x e.B 6X4.x P Y H.b.V >.I.(.R.R.(.v nXb.:.:.b.j j j j j :.@Xj a.j E x x Y E Y ` x j.Y x x E :.Z #X:.P.h.R.R.(.a =.#X=.=.:.:.@X@Xb.:.#X#XnX}.:.*X ^.4.6X' N.{ C.8 7.r.,XsXO O ", +"O O O jXr.T.( < < V .` ` 6X j.:.>.>.}.b.H R.mXw.j =.:.a._ :.=. . .j =X>.:.>.` }.:.Y x x ` 4.B 4.V N.6X P :.H.:.:.j ) R.zXzXmXt.;.a.=.E j :.i.H.:.;.>.=.#X=.j =.6XP B ;.x P ` Y * *X* *X=.#Xb.*Xk.7XrXO.t.R.P.>.=. .` 1 b.:.=.;.:.O.nX=.=.j *XY e.` B ' B V 8 8 V %X>X_.O O ", +"O O O jX: N < < >.>. .` ` Y x B :.>.>.=.H.Z (.`.b.L.#Xt uXP.H i. .c 6 6 } _ .Y >.#XY x x N.B z.V V ` 4.x Y >.9.=.;.a.(.6 L.a.`.eX}.Y #Xa.=.v t.b.:.;.i.:. .=.;.:.4.x Y ` 6XN.>.B j.d * dX@XL.L.;.:.i.v i.t.mX,. . .=Xt d.Z v a.b.P.uXu L.=.;.dXx ^.N.E j.;.V e 8 @.r.>XsXO O ", +"O O O jX: 7.0.c >.Z Z >. .Y x B =.:.>.;.L.j h.rXL.=.i.6 j #X2.I.;.=X=X:.6.6 L.:.=.;.Y x x ` E V c >. .6Xe.Y ;.E ;.:.Y i.j =.zXmX6 j.j P.eXI.6.Y.uXy.w.uX} i.E s ;.E x Y ` B .Z .E * x H.L.H.j.;.=.#Xt AXR.(.>.>.=XH Y.t.P.eXuX,.) 6.E H.;.j.*X ^. .#XL.=.V 7.7.%XOX,XsXO O ", +"O O O jX: N 0._ c _ _ c >.B P j. .` ` B ;.i.R.} H.=.a.uX .E uXI.Y 6.i.x 1 uXE ;.x j.' x x .=.Z 0.c >.6XP Y E E E =.;.B ;.eXR.uX=.;.O.O.w.2.6 i.6 .E ] Y Y P E . .{ ( Z E d ' j.;.j.u E :.=X(.7Xt.>. .Y.=Xd.6.(.) eX6.zXL.dXY j.Y * ' ^.N U.}.>.@.7.T.@.OX,XsXO O ", +"O O O jXr.8 < m.a _ a.a.j E x Y =.=.=.=.;.I.R.a.@XL.=.6 9 q.rX6 k.t.eX..Y.I.E j.H.x x :.c _ _ v c E ' Y E E ;.;._ Y.R.} .;.H.6.zXP.1.q.,.t.y.Y.} 6 >. x x Y ;.c _ %._ a =. ' d ;.E j 6 >.H.=.rX7X:.L.. x Y Y H.:.t.mX7XP.6.L.' E I.6.i.I.w.U.' b.y.Z E Y P E Y x :.v t H 1 =Xi.x d *XY }.mX(.d.P.7XY.` H.>.y.v L.L._ U.L.j d ' d j. * 2XD k.y.a B.DX9XT.r.l _.O O ", +"O O O jXr.T.( m.a.I.I.S S i.Y x E Y E E Y.`.@XE dXu *X*XdXY d d Y *X] x dXE dX * j.1 6.=Xt =Xw.k.Y x =.(.AX(.AX7XrX=.E Y E d * ' Y B 6XE 6XE Y N.v t n P.t t 6.L.x x ' P ;.1.h.R.AXY.>.;.' j. ' ' ' ' ' ' j. ' ' ).Q 8.&.1 o.DXDX8 r.g._.O O ", +"O O O ;Xr.T.c _ m.I.I.O.n 1 ` x E ;.x v v Y * * =.s d E x *Xd Y Y x *X* d x * ' #X1.t =X1.,.1.d. .' ' x j.j >.j j ;.c j.x ' ' H.' x Y P ' ' Y x Y x :.d.d.H d.t H } _ E x j.=.I.a.L.P Y j.6Xj. ' ' * ' * ' ' j $X$XD.5 g < 9XA.T.r.g.sXO O ", +"O O O g.: ( o.< < o.=XH H t a ;. x x x x Y Y Y ' *Xj.Y d ' ' ' d d x * d * ' :.w.H 5 t H Q d.d.w.L. ' P ' x Y x x 6Xx Y Y x ' Y x x ' 6XP x x x x V O.P.Y.t H d.H 1.t c Y P ' x P P x 6X6X6X' x x x x ' ' ' b.2.xX[.[.,.*.0.A.fXN OXjX. O O ", +"O O O jX: 8 _ < c c v t d.} O._ ;. x x x Y d d ' x * * x ' x * j. #Xw.2.H =XA w t P.H H =X` x Y ' x ' x d ' ' j.Y E t Y.P.P.=Xg Q t H d.,.j B 6X' x P P 6XY P ' * P x ' #X1 Y.t.n 8.w 2X9XC.7.N r.;XsXO O ", +"O O O jX: T.0.c _ Z c v t P.P.t a L.' x x * * * x x x x * * ' j =X} d.,.1 A a R [.t t 2.a ` ' ' P x ' x P P x Y Z O.n n 6.t 1 a 1 ).t H H t c Y P P P P P x P P 6XM ,.2.d.$XA $.M Z 0.DXT.N , g._.O O ", +"O O O ;X: 8 c m.a c c c a t 2.H t v :.Y P x x x x P x j.=.}.t 1.t a _ R R *.R a g t H d.,.Z j.P P P 6Xj. x ' ' ' x ' x ;.a.O..a t H H =Xa %.( 2X$.$.( ( C.DXQ., g.O O O ", +"O O O g.: 8 < o._ 1 R *.*.$.$.y.1 1.d.2.=Xy.c >.` 6X6X6X' x x ' 6X` .U.w.,.t t w.a _ _ _ _ 0.2X$.gXA R 2Xa D _ =Xt 6.6.k.U.Z ` B j.B Y j.H.L.#X}.a k.w.t H =Xv I.a a 1 _ a A A D *.A A R D ; =X=XO.6.k.i.:.L.E B E H.;.#XZ i.a w.H H H t g _ Z ( 8 ( c $.m.0.C.C.7., g.O O O ", +"O O O l : T.< o.c a _ *.*.$.c c _ U.y.1 =Xt H ,.1 a a a a a a a w =X&.,.t &.1 1 a _ _ %.%.*.2X*.IXgX).g ( 0.D 0.a a a =X=X=X6.w.,.w.k._ y.6.6.6.2.1.,.k._ c Z i.=X..a 1 c _ _ *.*.( %.R *._ %._ _ a k.w.,.1.H 6 6 O.t ,.6.6.=X=Xt 1 1 _ 0.%.%._ %.fX%.$.c 0.C.[ T.T.Q.S.O O O ", +"O O O 1XtX8 C.a < a *.*.%.+X*.*._ _ _ y.a +X_ y.k.w.=Xw.w.I.w.=X=Xk.a 1 &._ _ a y._ %.a %.*.*.gXR %.2XD %.( *.0._ a.i._ i.a.k.v 1 6.k.U.y.6.k.a.k.U.1 1 _ _ a.v 1 1 _ v c a a R a D %.2XZ _ a _ c a a._ _ _ a.y.a I.1 1 1 3.a a a c a D _ c ( c %.0.0.2XZ 0.DXDX_.9XvXS.O O O ", +"O O O S.# Q.0.0.%.( *.%.%.%._ _ < 0.0.0.0.0.m._ _ k.a a._ a._ _ U.U.a i._ _ _ v _ c c 1 =X%.2XgXR IXR 2Xa %.c 3.c c c _ _ _ _ i.a.a j j b.j U.j i.1 1 a _ _ _ _ 1 a 1 a c A a c 1 %._ a a o._ c 0._ v i.o.I.o.o.a _ a a a _ _ _ a c 0.c _ a _ c D IX*.2X%.0.fX9X( ( r.S.O O O ", +"O O O . c.T.gX%.D gX%.%.*.%.%.0.c o.m.c c m._ 0.Z c c j Z Z Z j }.j a v 1 a }.i.c a.c _ a %.%.D A 0.; A A 0.c a Z m.m.%.m.m._ < j V E E j.;.j i.a a._ < Z a =X3.c a a a *.A A c a a %._ _ m.c 0._ 1 1 Z :.{ =.V { . .>.>.>.>.>.Z _ _ 0.0.%.0.c D %.0.( %.DXfX0.< <.: HXO O O ", +"O O O . l T.DX%.a R R D 0.%.a < o.a m.< Z Z >. .` ;.;.;.` E H.;. .B .>.c c b.i.a I.a._ %.*.0.*.0.0.a *._ 0.m.v j Z { { . .V ` E Y x 6XY E ;.E H. .>. . .Z a a a a _ D _ %.D ( 0.D a a a _ c Z Z ^ .E E N.Y Y Y P P x 6X6XB B ` B ` >.< _ c { ( _ 0.c %.fXfX0.0.>.: g.O O O ", +"O O O . S.cX0.%.o.%.%.1 m.o.D { o.c < { ^ 4.e.P P P P P P x P x B H.E .:.Z < _ a %.*.*.%.%.0.Z _ _ j < :.;.4.6XP P P x Y x x x x x 6XB ` ;.Z a a < 1 _ 0.D c 0.D %.c c Z .B 6X6X6XP P P P x 6XP P P P e.= 6XN.V { ( 0._ %._ %.fX_.C.$.>.: HXO O O ", +"O O O . l M.0.D a o.%.=X%.m.m.^ { ^ ;.E e.P P P 6X6XY B E H.E Y 6X6XP P ' 6XP P Y B =.< o.a _ _ %.%.o.%.%.< N.4.B 6X P P x ' 6X;.#X=.;.;.;.dXH.E Y x x Y Y 4.;.< >.3.D _ 1 o.%.1 c .` B 6XP P P x 4.B E ;.=.=.:.>.=. .;.E Y P 6XP P P Y ` ^ @.< m._ m.fXDX9X2X<.OXHXO O O ", +"O O O _.g.M.0.D o.1 o.; m.>.^ Y 4.e.x P x 4.` ^ .Z Z j i._ i.j b.>. . .E 6XP Y Y E ^ :.c m.0.m.a a < ^ B e. x B L.>.:.:.U.U.y.a.v v a.U.nXj :.E * x x P P E ;.c %.m.D o.0.c =.B 6Xx P P P 6XB Z c i.o.a.m.a.a.y.y.a._ c j E 6Xe.e.P e.e.P ^ { Z { fXDX9X< <.OXl O O O ", +"O O O _.g.M.$.o.%.; 0.c { N.4.4.e.x e.Y N.V Z j j i.i.U._ a._ i.i.v a.a.:.;.E x ' x x 4.:.c 0.%._ < N.P P e.x 6XE H.>.Z U.y.a.y.}.i.nX}.i.a.I.k.p p v.] o x x Y x B ` >.{ < m.>.4.6XP P P P 6XB m.c a _ c _ _ a.i.i.a.a.a a o.o.a.j V E P x 4.E 4.` ^ ^ B.fX0.( <.OXS.O O O ", +"O O O O g.M.9XD %.D { .^ 6XY ] 4.e.E =.wXj j < i.a.a.a._ i.i.i._ c j a._ a.a.;.j.x Y e.e.` .V < V ^ N.4.4.x x ;.:.b.i.}.U.k.y.i.j U.j }.v.j U.nXn.n.n.p i.;.x Y e.N.e.B ^ @.< ^ 4.6X6Xx x 4.=.c _ i.=X1 _ a _ i.a.a.a.a.a.a.o.o.v a.a.j 4.P e.e.e.4.B N.D yXr ( <.OXS.O O O ", +"O O O O g.C.N m.%.%.Z B 4.` 4.x F 9.{ :.& i.j j Y.`._ a Z Z y.j j :.j _ _ c Z v j o x x E Y ^ N.@.` 4XE 4.P x ] j }.}.;.U.AX7X7Xh.k.:.j j }.:.b.b.j v.@Xv.j n.j E P Y 4.4.N.^ 4.N.` B ' ' Z i.b.Z t mX(.i.Z j _ a.i.i.:.i.i.:.a.'.i.v 3.j Y x E ^ Y e.^ 9XC.r ( >.r.S.O O O ", +"O O O O g.C.( D %.< { ` N.N.6Xe.;.=.p ] :.j c } mX7XI.:.i.v >.=.j :.a.=.:.j v i.Z ;.s x Y 4. .N.^ N.N.E Y x E =.:.@XZ }.uXR.(.eXeXb.:.}.b.j v.i.j @Xs.p nXnXi.:.=.x Y N.N.N.^ N.` E 6X E j c j v h.AX=X:.j j :.=.j :.j s.:.a.:.i.j =.j o.< E e.N.B 4.@.8 9Xr ( >.r.S.O O O ", +"O O O O g.T.9X; _ Z Z =. .` 6X4.:.:.=.i.j j eXR.mXR.a.=.Z >.:.y.:._ zXa c c I.=.j j 9.6XB ;.{ V >.` ` E 6XB =.:.=.:.L.Z rXmX1.a.=.j :.:. .a.v I.v j n.Y.@XdXu :.a.Y Y ^ =.^ . . . .Y x Y >.b.#Xi.`.mXrX1 .Z }.#Xi.:.=.a.=.:.a.:.>.j i.{ :.j :.Y N.^ ^ V 8 8 0.( >.OXHXO O O ", +"O O O O g.Q.0.; 0._ Z >.>. .4.E :.c j j ` 2.7XeXh.rXZ j :.i.zXrXP.I.rXY.I.1 a.L.:.:.E x x ;.Z >.{ >.V B x E :.:.;.#X}.a ) mX7X`.v :. .b.b.6 =X} } P.O.X E 9.L.E E E x =.j V { < :.E P x H.b.>.b.d.mXR.mX7Xd.Z ` =XuXzXuXO.j eXuXI.:.zXY.:.;.:.^ e.N.{ Z Z ( ( 0.( V OXHXO O O ", +"O O O O g.vX0.; _ R c c }. .6XB =.j #X#X6 mX7X(.h.7XO.j ;.I.} 6.O.O.6 uXO.uXj . .L.Y .< Z c m.Z B P E =.=.=.;. .>.a 6.H h.(.:.;.Z V } ..) `.i.I.w.dXE ;.=.=.B =.m.< m._ < ;. x E L.L.U.h.`.6.1.`.R.U.` (.} (.X Y.1 (.6 P.uXO.H I.;.E ;.P E c _ 0.0.0.0.( >.OXHXO O O ", +"O O O O g.M.%.; D R _ a +X .P 6X=.=.x 6.7XmXh.7XR.R.uX:.=.O.uXt.} } i.6 6 zX .;.;.E Y x x j a a 1 3._ ` P Y ` ;.=.b.>.>.L.Y :.(.h.Z ;. .^ 6 ..eXzX6.J.j H.;.E j. 6X >.v a v 1 a.Z x x Y B ;.I.mXP.` ` zXR._ k.zXU.I.j (.H v }.Y.Y.I.t 6.E P ` P ` _ a a A.fX%.c N r.HXO O O ", +"O O O O g.[ DXD g &.w &.&.>.P ' ` . .w.I.,.1.. x H.E *Xd dXp $ ;.;.E E ;.;.E E E E E Y Y Y Y Y ' Z ,.6 H d.t zXt j. ' *XB ` m.=X=XU.H.Y Y E B Y Z.E o ' x j.' x 6Xx ' P }.,.2.d.H 1.P.H U.' P x j.;.i.n.i.=.E *X*Xj.j.j.*XH.E Y ' x x 6X Y x x =.5 [.xX$Xn ; _ c Q.,XO O O O ", +"O O O O jXM.*.%.a =XP.H ,.P.a ' ' * Y ' Y d d *Xx E E Y Y B E E Y Y Y Y E Y Y x H.k.d.1.t d.d.w.6 1 ' ' B 4.N.B Y 6X P ' Y ' x Y Y Y ' P ' P ' .1 d.d.d.d.D.} H 6.>.6X Y * *X;.E Y Y d ' d ' * * x x ' Y Y E Y x ;.O.5 } $Xn ; %._ *.vX# O O O O ", +"O O O O ;XcX*.a %.1 t 5 H 2.,.Z ' x x x * * *XY Y Y Y Y Y Y Y Y Y ' P P x 6X H.U.H P.H ,.H d.,.d.2._ H. 6Xx x Y 6X6XP P x x x x ' 6X' P 6Xa 2.P.D.H D.xXH H d.v ;. P 6X ' Y ' x x * * ' Y Y x P x x 6XB i.P.H } xX~ %._ _ %.T.l O O O O ", +"O O O O g.vX*.D %.1 a t d.2.} t b.' ' * x x x ' ' x x P P x P x x P P ` _ t 2.d.H =X=Xt d.H ,.P.1 Y ' 6X6X6XP P x P P x P P x * * ' ' ' L.a 1.d.d.t =X8.Q Q 1.d.H a .6Xx x ' ' * ' Y Y ` _ t d.1.5 ).D %.a a _ T.l O O O O ", +"O O O O g.vX0.D a _ w w =Xd.} 1.t }.B x * x x x x P P P P P P P 6X` +Xt D.5 t =X1 a ).1 =Xt 2.2.y.#Xj. P P x h B VX1 d.D.5 t =XA w A &.t 1.d.D.w.Z j.P ' P 6X' P P ' 6XH._ H 6 t =X&.A D D a %.%.T.l O O O O ", +"O O O O g.T.0.a D _ $._ A =X8.t 1.2.y.>.j. x P ' P 6X` i.=XH 5 8.=Xg a %.A =Xc 1 t t H t &.Z ` 6X6X6X' P P P P x P P ' 6X 6Xb.w 5 D.t H &.1 g A R A 1 1 1 =X,.1.5 a.:.6XP P ' P P Y ` c =XH O.w.w a a 1 ; D %.0.%.T.l O O O O ", +"O O O O g.T.( 0.A g _ A g a 1 t 8.H ,.t a b.L.' P 6X' P P P x x 6Xj. .}._ v =XH 5 g w A 1 R %.A D a 1 g ).=X1 H Y.8._ .B 6X P P ' j. .M =X1.8.8.t 8.=Xa A g A A &.1 a R w a =XH t =X1 _ b.L.j. P ' B .Z _ t t H H ,.1 a a +Xa A A.D %._ 0.T.l O O O O ", +"O O O O ;XM.N ( 1 a g a _ A a _ 1 =Xw t ,.,.1.k._ _ c >.#X#X>.:.b.a.a.k.,.t 6.=X=X1 A R *.D 1 A D D D ; D D D a 1 g 1 =X=X=X=Xa _ _ U.U._ a.a w.,.1.t 5 ,.1 =X8.w a +XA &.A &.g A a a 8.&.k.k.y.=X8.,.t 1.=Xk.k.=X1 k.k.w.=X,.5 H t ,.=X1 1 w.=X+Xa w IX%.fXD o.( L l O O O O ", +"O O O O jXSX( _ _ %.; _ a =X_ *.R 1 k.a k.1 1 &.&.=X=Xw.w.,.,.=X6.,.t =X1 a v k.a A A A A g ; D D D ; g ; D %.%.a =Xa _ _ k.w.1 k.w.&.t k.t w.,.k.w.=X=Xa a 1 a &.1 A +Xa g 1 R 1 =X&.1 1 1 a a y._ w I.w.w.=X,.t ,.t d.t t k.w.w.a a a a 1 1 a a +XR IXD D D o.%.L l O O O O ", +"O O O O jXQ.$.%.%.D =Xa 1 Q a R w a a a a a a y.+Xa k.a y.a y._ a i.y.v a a 1 =X,.A A R R ; g ~ ).).A %.%.a D a _ _ A 1 a _ _ k.=XU.X.>.#Xk.a 1 y._ y.1 a k.1 a =X1 g 1 w D *.*.1 A R _ a a a a w _ _ _ a.a k.v a 1 a k.a =X1 1 a Z U.a 1 1 a _ _ a a D A.D B.m.0.L >XO O O O ", +"O O O O ;XvX0.o.%.1 ).D 1 =Xa a D _ _ a a a a a a y.v a _ _ U.U.y._ a I.1 a y.a a a A D %.D D %.gX%.%.%.%.a D 3.D _ a a _ _ a v a _ L.` =.k.y.1 1 _ y.1 1 1 a c a a 1 ; ; 1 %._ 1 ).1 a 1 1 a a a =Xw.1 v a y.a.U.U.j }.}.a a a _ a a 1 1 a a 3.1 +XR D A.A.B.m.0.T.1XO O O O ", +"O O O O ;XvX0.o.%.D ; D D 3.%._ a a a a a _ _ _ _ b.j Z >.:.:.>.Z #Xj _ a a a v 1 _ A D D ; ; D %.D D 3.D %._ _ %.a c Z Z c c >.;. .6X6XB #X;.#Xb.:.b.i._ v a _ 1 a.a a A 1 D a D a a a a 1 v a a >.Z :.=.` H.;.;.` H.L.` >.=.:.>.j c i.a 1 1 a _ _ R D A.A D %.m.M.c.O O O O ", +"O O O O ;XvX$.%.%.D D 3.D a %.m.%.o.m.( >.^ ` ` ` x 6XP x x P x x 6XE .:.j a.a a A a _ D ; 1 1 ; D %._ %._ _ i.c .` ` B P P x x Y x ' x B 6XE ^ { j Z a a o.a a o.a D D 3.1 1 o._ _ j V ` ` E 6XP P x x x P E B ;.>.i.o.o._ a a D A.A.B.m.0.L 1XO O O O ", +"O O O O ;XvX( %.a 3.D ; D o.%.0.m.>. .B 6XP P P P Y Y x x Y 6Xx x ' x P x Y H. .c _ 0._ a a %.%.m.%.o.%.m.Z :.>.B P P x P 6X` Y B E B E E Y x P P Y E E =.Z c 3...D a D D ).=X1 c >. .B P x x x Y Y x ;.E E 6Xj.x P 6X6Xe.Y E .j _ a a D A.B.r < ( L 1XO O O O ", +"O O O O g.Q.( %.3.3.o.; o.< < V V 4.6XP e.6XB ` ` :.j :.:.j j :.Z =.;.E Y x P x Y E ` .c D D D ; m.o.o.c =.4.x P P P e.B =.j i.i.a.y.y.a.p v a.i.;.N.E x x 6X6X` E ^ m.1 3.3.3.o.m.{ .N.4.e.x x P Y ;.=.j k a.a.a a.a.i.i.:.V ;.Y Y e.e.e.e.Y 4.Z 2XDXfXB.%.0.C.L >XO O O O ", +"O O O O HXvX( %.; 3.o.3.c V ^ 4.6X6Xe.e.B .Z < j i.a.a.a.v a.a.v a.a.a.i.=.Y x x x x 6X;.Z < c a %.( ^ B Y Y x P 6X .j c _ 1 k.a.a.v v v v v I.6.I.3.o.=.Y x x 4.Y ^ Z c o.D m.< ` e.6Xe. P E =.i.I.I.v a.v I.v I.6.I.6.v v v i.V 4.x x e.4.Y B z.N DXB.D B.fXvXl O O O O ", +"O O O O . XX< %.o._ a < N.E Z.F Y x E =.b.i.j b.i.a.j i.a.v a.i.y.a.y.v k.k.i.H.' ' x Y Y E V 3.>.m. .4.B Y x x x #X_ 1 y.Z }.a i.U.i.i.a a.j w.a.6.i.I...:.:.x P x 4.4.N.{ i.< V 4.4.P e.e.x .j U.k.$ k.}.v U.v n.v a.a.I.k.v v 6.a.i.^ x e.Y 6Xj.P %X8 c 3.o.DXM.l O O O O ", +"O O O O sXXX( 0.m.< < =.4.Y Y s Y ;.j j U.I.I.k.k.y.y.a :.:.U._ i.a.a.}.i.U.a v :.Y x x Y B N.c { .6XP x x x ;.:.i._ b._ t 1.t v b._ :.:.i._ a.v i.6..Xi.; a.E x Y N.E Y B ;.^ N.E E x E :.U.a.a.O.1.J.y.U.}.k.k.nXi.v i.i.v a.i.v I.a.V e.x E E 6X%X7.b._ 0.8 T.l O O O O ", +"O O O O sXXX( 0.0.c < V ^ ;.Z.o ;.I i.$ (.7Xh.AXAXAX6.j j i.j b.U.b.i.j i.v y.k.i.=.o x x N.4. .@.@. .` Y x E :.i.Z }.v `.mXR.7X) i.U.a.b.a.}.Z j j a.j i.a.a.v E x E ;.;.^ >.:.V =.E x x :.a.j U.eX7X7X7X) k.}.}.U.v.a.v a.i.j j i.a.a.v o.=.x x ;.B %X@.>.j ( T.Q.l O O O O ", +"O O O O sXXX( m.m.< :.V V N.F Y =.i.j a.zXeX.'.j >.=.6 7XP.t R.mXU.;.a.v b.j i.y.:.j j y i.j i._ N.4.;.:.j < :.>.=. x E i.i.>.2.R.`.t.) 7Xw.}.#X#Xv.i.=.:.j :.j i.=.=.:.m.a.;.x ;. .N N :.}.0.C.SXS.O O O O ", +"O O O O sXXX< _ _ >. .>.{ N.x E :.'.s.v.n.@Xv rXh.k.:.y.I.v >.:.}.a.:.1 i._ U.:.i.j =.Y x >.:.>.Z >.Z ` P E b.:.=.i.=.P.mXY.1.h.) y.b.O.(.v a.=.y.i.s.6.}.:.=.;.i.=.6X;.j c c < a.b. x dXj #Xb.h.`._ ;.6.mXw._ _ U.}.i.i.a.U.v b.I.a.6.c V _ =.E ` Z C.C.j c %.fXSXS.O O O O ", +"O O O O sXXX( _ %.m.< m._ =.e.E j :.j i.#X}.(.h.1.;.b.(.(.uXv P.rXeXI.rXuX} ) 6 #X;.;.E P ;.>.{ c ; m.N.6X;.=.;.=.=. .d.mXmXmX7X,.L.;.2.zXeX=Xy.O.6 I..E 6XH.c r r i.}.0.DXQ.l O O O O ", +"O O O O sXc.( _ o.3._ a o. .x Y ;.s.:.=.;.O.h.P.#X}.a.t.w.O.6.} i.rX6.uXy.O.rX6 Y j.' j.x =.c m.%.1 _ E 6XH.;.#X#X1 AX`.P.h.mXt.:.;.O.a.uXI.1.I.6 rX6.;.;.;.E L.Y :.1 3.a c i.;. ' j.L.#X#X,.7X7XmX7XY.>.1 AX) `.I.6.) a.O.(.v uXd.>.4.E 6XP L.a.D D a i.0.9XvXl O O O O ", +"O O O O sXJX( %.3.).a 3.a V Y E ;.;.9.=.n.rXrX}.#XL.i.h.Y.} i..v 6.d.6.I.a.H.' ' j.dXj.L.a `.mX(.:. ._ P.I.uXI.d.eXb.1.zX6.`.O.;.N.Y e.x b.=X).% t k.%.9XT.l O O O O ", +"O O O O sXJX0.D ..; t =X3.c Y E L.=.dX(.7Xy.#XH.;.=XH k.c =.a.) 6 i.=.:.v I.:.E Y P 6Xa.H H t d.H c 6X x j.L. .a AXR.AXmXAX_ j. .:.:.j U.i.:.=.#X;.E H.E ' x P a 6 H P.6 H y.H. j. j.H.=.,.7X(.j ` =.:.;.;.=.j #XL.I.1.Z j a.i.E Y e. B _ H n n 1.1 D 9XQ.g.O O O O ", +"O O O O sX# ( m.%.% t ).t 1 ` Y Y =.L.1.} =.H.H.H.j j =.L.E =.k.}.;.E B ;.;.Y ' X.=XH [.P.[.P.t >.x ' ' B H.w.Y..>.' P ' ' ' Y =.1 H H d.O.=X_ D A.y.+X2X9XvXS.O O O O ", +"O O O O O JX( 0.0.A A g g A =XO.H uXO.I.i.;.' x P B ;.j v I.t w.8.=Xa +X&.=Xw 1 &.&.8.D.1.5 d.H a >.B B ' x P x x x *XE b.n.$ 1.2.1.1.t 1 ,.w w =Xy.1 A a =X=XH 2.d.1 U.>.L.j.' ' ' 6X6X6XE L.o.1 =XH % ....c w _ ; A a k.*.9XT.l O O O O ", +"O O O O O JXN _ m.*.a _ a g a _ =XS .E ` B 6X . .Z c a =Xt t =X1 w 1 a a &.1 a g Q a a a &.,.8.H t d.d.t =X_ Z Z >. .>.:.=.b._ a.O.9 q.2.1.,.=X&.1 =Xg w R a 1 1 Q a a 1 1 =Xt =X8.t t k.i.}.Z :.>.VX#Xc _ a t d.H t ).g ; A R *._ ).D ( a 1 0.( vX1XO O O O ", +"O O O O O JXN 0.0.1 =X1 a 1 _ c a _ ).1 ..H t t t ).t ; ..1 3.S S 1 ; =X=X; 1 1 1 A 1 w w g &.1 =XA a 1 a a =X1 =X1 ; 1 1 t t =Xt t =Xt t ,.1.2.6 O.J.6.w.w.w.t 5 1 g g w R a D a =Xa a a a a 1 a a 1 =X=X=Xt O.t t 5 Q H H 1 =X1 1 D D A A A A IX%.1 D D 1 a Z ( vX1XO O O O ", +"O O O O O # N 0.0._ w a a 1 A a ; a ; %._ a a a 1 1 ..1 1 D a 1 3.D 1 1 3.a a 3.=Xg g A A &.1 A &._ a =X1 1 =X=X=X=X=X=X1 =X=X=X,.t 6.,.t ,.t O.,.,.,.,.,.,.=Xw.&.1 g g 1 A 1 1 A =XA a A a w 1 a a 1 1 1 1 1 1 a &.1 a 1 1 a ; ..D ; =X; D %.IXA D D D D %._ c 0.XXS.O O O O ", +"O O O O O # N _ a _ w w a A D a D 1 1 o.%.a i.i.a _ a _ _ 0.c m.c m._ a a a a 1 =X&.&.A A 1 1 1 &.w g t =X=Xt t t =XH H H H t t 2.H 1.1.1.1.1.H 1.2.9 1.1.1.1.H D.8.Q Q Q Q t t Q g 1 a a a a a a a a v a a a a _ y.a w &.1 1 3.3.%.a 3.; A A g ).D D 3.%.c _ a 0.vXS.O O O O ", +"O O O O O # <._ D a 1 1 a a a a a D a a D v a _ a a a a a._ a a a a a 1 v a a v 1 A A 1 &.=Xt [.5 H t H H H d.H d.H d.d.D.H t ,.1.w.=X=Xw.w.=X,.1.2.9 6 2.} 2.2.2.H D.D.H H xXxXH 5 5 8.=X&.1 k.w y.a 1 1 k.1 1 1 k.1 &.1 1 a a 1 t ; a a A A %.2Xa %.D D %.a a T.JXS.O O O O ", +"O O O O O # N 0.D _ a a A A A 1 ; D %.a D a a c U._ _ a _ _ v a a 1 1 1 1 1 1 =X=X=Xg 8.t t H d.H d.H d.d.d.d.d.d.2.t w c M >.` E 6XB j.Y j.j.H.u nXv.y.6.O.t t t 2.d.d.d.xXn H H xX} d.H H 5 t t 1 w.w.1 k.a v k.k.a a _ _ a 3.S o.a a a R D A ; =X%.%.3.a _ 0.8 JXS.O O O O ", +"O O O O O iXN c D 1 a 1 1 A R a D 1 %.3.a a I.a a a a 1 a a =X1 1 a v 1 1 I.=XO.6 H t H H 5 H d.t H H H t 6.t 1 a }.>.B x 6X' x P ' x ' x * ' H.#X}.1 1.8.t H d.xXH H H t d.H 5 H 1.t H 6.=X=X=Xw.I.I.w.w.1 6.=X=X,.1 1 3...).1 %.0.R ; ).%.0.D o.0.c 9XJXS.O O O O ", +"O O O O O # N 0.D a _ a 1 A R D 1 =Xa a _ _ 1 y.y.a a 1 a a I.a a 1 =Xt t 6.=Xt H H t H H t H d.t H H H 1 c c .Y x h 6XH.L.#X#XZ b.b.v.nXu #XY ' x ' ' ' H.#Xy.1 t H xXH H D.H P.d.H H H t H 1.,.=XI.I.1 k.v I.y.v a 1 =Xa a 1 3.a a D A ; ; a a o.D D a c T.JXS.O O O O ", +"O O O O O JX( < a _ 1 w _ a R a ; D 1 < a a 1 1 y._ k._ j b.i. .>. .i.i.i.k.=X6.=Xt d.=XQ H =Xt H H t v Z ` Y x P E Y b.U.y.v w.w.w.$ w.w.....k.a.n.H.Y *X' Y j.H.Z c =XH t [.xXH H 1.1.1.1.,.1 v _ :.L.` E B H. .E :.a.a.w.m.v 6.=X_ _ ).1 *.A a %.%.%.%.%.*.DXc.. O O O O ", +"O O O O O # ( < a a 1 w R a R _ D _ a _ 1 a a _ i. . .Y 6Xx 6X P Y B Y j.` _ 6 1 [.t t H H H H =Xc ` ` ` 6XP x B a.w.w.=Xk.=Xw.I.w.....w.w...w.,.,.y.i.#X x E B ` B >.; [.xX[.H H H 1.=Xa c b.H. P ' ' ' ' P 6XP ' Y ;.V 3.3.=X3.%.D D o.A 1 D D D %.0.2X9Xc.. O O O O ", +"O O O O O # 8 < %.1 w a a 1 A a 1 1 ; ..a Z >.j.' 6X 6XY Y ' ' x 6Xx x Y ;.Z 1 t H t =Xt =X1 Z .N.4.6XP B :.=X1.w._ w.$ ,.p $ $ ,...$ /.....w.,.6.O.6.b.j. ` >. . .2XA t Q ,.1.1.=Xa.Z ;.6X6X' j.H.j.Y E H.' E j.j.x x Y ;.j _ 3.1 1 D D 1 D D D D %._ 0.pXc.. O O O O ", +"O O O O O # N < %.a _ _ a 1 A 1 =XD %.o.>.B B P E ;.=.:.j i.b.:. .E P P Y B E :.c t t t H =X1 ` j Z 6XP B j 1 1 y.v 2.`.h.h.) ,.k...w./.$ ../.$ w.v v 6.6.i.E E .>.>.2X1 [.=XH t _ :. .B 6XH.#XU.I.1 v _ b.j :.Y Y Y N.E j =X).3.D ; a D D D D a %.DXc.. O O O O ", +"O O O O O iXN c %.a _ +Xa A a 1 ; =X_ Z 4.P P 6Xj j }.i.a.v I.v U.i.y.j H.' x ` c c t H t =X_ Z >._ >. 6XZ a 1 a.U.2.7XR.h.`.mXY.$ $ p $ oX$ $ p k.k.a.a.I.v i.x ' ` Z c c a Q H 1.w.c L.B ' P H.U.I.w.,.I.a.k...v k.n.i.}.] E E 4.m.3.1 ).t =X; ; A 3.D gX9Xc.. O O O O ", +"O O O O O iXN 0.%.a a A 1 1 1 ; 1 Z 4X6XP 6X` Z a w.U.k.v v a._ a.1._ v I._ L. ' .Z 1 t t =Xa _ i._ ` N.c _ a k.k.(.h.2.k.y.`.h.$ aXn.oXp p p n.i.v y.i.i.i.U.=.j.V _ a *.*.1 d.w._ i. .P P L.I._ a.6 (.(.O._ a.w.I.k.6 I.i.a.=.Y x 4.V a % % =X=X; ; ; ; %.M.c.. O O O O ", +"O O O O O iXN m.%.1 w g =X1 g ; 0. .^.e.4.>.Z t P.v v uX6.U.i.i.v (.a.#X=.j i.E ' ;._ 1 =X=X1 a._ v a .P ` { j a.}.a.h.) k.aXU.rXh.NXv.v.$ aX-.NXy.nXU.i.:.:.:.j E .a 1 a R =X5 k.y._ =. ' b.y._ 6 zX6 X t.,.U.v v.I.O.v 6 ..i.V 4.P 6XN 3.).=X=X).; ; ; IXC.c.. O O O O ", +"O O O O O iXT._ %.=X1 =X1 D D _ z.= P 6X>.1 =X) 7Xw.P.R.H Z a.=XP.h.2.I.:.=.i.;. 6Xa 1 1 =X=X=X=X=Xw. . H.b.:.b.j k.mXP.@Xv.n.) rX@X@XU.,.aXv.nX@XnXw.v b.:.;.E E .1 H [.g Q =X,.6.y.L.' j.#X>.k.h.) :.v `.eXn.j i.eXuX6.h.p v < ^ 4.6XB Z 3.=X).).).; ; fXC.c.. O O O O ", +"O O O O O l L D 1 1 ; =Xt 1 _ :.` 6X .1 y._ 1 R.rXh.rXVXVXZ U.2.AXI.v.@XL.L.* P B a t =XO.H t 1.6.6. .' j.E #Xj j k.mXY.E j P.R.} j ;.i.} } 6 J...2.. .=Xt.#Xk.P.:.j 6 t.7XY.`.h.I.:.i.Z ;.6XB Z Z a =X=X; )...0.[ ,X. O O O O ", +"O O O O O 1XvXo.a 1 1 1 ; 1 v j E x E Z _ w.P.2.(.R.7X(.t.1.#XL.#XuXb.;.dXH.E 6X .1 H =Xt H 2.P.P.P.}. ' ;.;.;.j `.7X(.(.`.(.=.] I :.a.; J.6.$ oXw.U.dXj.' ' 6X' y.H d.Y.n H t H =X=XZ P Y j.B _ d.Z =X2.L.#Xd.rXAXeXh.(.} ;.:.=.^ Y B Z c y.=X; 1 =X; *.9X# . O O O O ", +"O O O O O 0XvX%._ ).=X=X1 a o.b.6X ;.>.:.w.rXh.mXmXmXAX7X) j ` ` :.j.;.=.H.Y P #X=X2.t t H 6 d.t P.v Y Y ` E ;.L.I.(.h.(.zXv ;.=.s.=.I =.:.=.;.*XL.dX' j. H.H P.d.P.t P.H =Xt t _ 6X j.P B v (.P.Y.2.b.c U.AX1.6 rXa.;.;.;.;.L.j.6X>.c a 1 1 D 1 1 %.9Xl . O O O O ", +"O O O O O 0XvX%.a D g Q D v v _ ` Y E L.L.#Xb.U..b.` B ;.H.E ;.j.P P 6Xc t D.t t H H H ,.P.1.b.6XP x ' j.Y B :.i.#X#XY =.;.] =.:.;.;.H.dX*X*X' * ' 6Xc P.P.d.xX=Xd.t =XD.d.1 . 6XP B y._ a.}.>.t.AXR.(.mX`.uXE E Y B ` 6Xx >.1 1 =X; D D 1 %.9Xl sXO O O O ", +"O O O O O 0XXXB.D A 1 ).a 1 =Xa ` x E ;.L.` k.h.P.) AX>. E E E H.E Y x P ' ` ,.H 1.w.w.t H H d.d.O.a. .P x Y j.H.Y E Y E ;.E Y ;.L.=.j.dX#XL.Y x d j. P Z ,.H 2.P.d.[.t t g xXxXt _ 6X B ' P Y Y E E u k.AX.h Y x x Y x }.) L.1.P. d x ' x =.k.d.t t ).; D D %.[ l sXO O O O ", +"O O O O O 0XXXfXD A R A *.t H H U.x P Y x ' d #X#XH. j Y Y E x x ' B U.2.5 w.8.5 1.t t t d.t d.d.t a ` P 6X ' ' ' x x x ' x ' Y x x 6XY 6X' L.w.,.d.D.5 t 8.t t D.Q Q Q D.D.1 c 6X x Y s * y.y.H.k.b.* x * ' Y y.t D.t =X).; D D R T.l _.O O O O ", +"O O O O O 0XXX_.%.A A Q R Q t } =X . ' d Y ' Y E x s Y .k.t ,.D.w.8.1.1.t H d.=X6.d.H % H 3.c j.' P P x x ' x ` c k.d.} D.D.8.Q H 8.8.Q Q Q Q Q 5 H H }. x * x x d Y ;.1.P.D.=X; ).; D 3.IXT.l O O O O O ", +"O O O O O sXXXDXo.=X8.g g &.8.H d.k.B j.' x P P * x x x P Y b.1 t 8.&.w.8.=X=X5 t =Xt t t =X=Xn P.n H a b.H.' P ' B #Xy.,.H d.P.5 H t t [.g xX[.2 Q 8.g 8.5 5 5 1.a H.' x x ' >.,.1.H ,.=X=X=X..; D 0.M.g.O O O O O ", +"O O O O O sXXXC.%.w A &.&.&.=XH d.t U.j. 6X' x P x x P x >.v 6.,.=X8.=Xk.=Xw.&.8.8.=X5 1 t LXS t t % d.} H =Xw _ c Z >.j.j.E ;.#Xj a.a a w.t H 2.2.5 =Xt t t =XQ 1 t Q 8.Q g g 8.8.&.1 k.1.O.I.:.x ' ' P B ;.y.2.H t =X1 1 ; ; ; 3.gX[ g.O O O O O ", +"O O O O O sXKXC.o.a A &.&.1 &.t H d.P.1 .H.Y P j.=.j I.t 1.=Xk.1 =X8.=X5 t &.1 1 A 1 t t =X=Xt t =Xt t 1.H 1.H d.2.t 2.H 1.t t ,.t t d.} H =X=Xt t =Xt 8.H =X=X&.=X8.Q Q Q t H 5 &.1 ,.O.t 1.t v i.#XH.! P x j.E :.a.1 1.d.t &.w 1 1 ; ; ; 3.%.9Xg.O O O O O ", +"O O O O O _.MX_.D 1 &.=Xg 1 1 &.=X8.D.H 8.1 c >.Z .#X:.}._ v =XO.=X=Xw.w.8.5 8.&.+X1 g 1 &.=X8.=XH =Xa ; H H S =Xg =X8.8.,.t t t 6.,.t O.1.1.1.1.w.=X,.=X,.t t =Xt &.5 &.8.8.=X=Xg g &.8.5 8.&.=X8.=X1 =Xt 1.,.w.,.=Xw y.y.k.=Xt t H H H t 1 1 1 =X=X; ; 3.D 0.[ g.O O O O O ", +"O O O O O _.KXC.B.I.&.&.&.&.1 A A Q 1 g H H H H t t Q =X=Xt t t 6.a a 1 t t 8.g g g =XQ =X; g 1 R Q &.1 =Xt =Xt t 5 t Q 8.=X1 1 =X=X=X=X=X=XI.1 1 =X=XQ [.H t =X=X=XA 8.w 8.t =X=Xg g g =X8.&.&.t =X=X=X&.&.=Xw.w.=X=X8.t O.O.t S t t t =X1 1 =Xt ; =X).; D %.$.M.g.O O O O O ", +"O O O O O _.KXC.D 1 k.v k.&.&.&.&.5 &.=X8.1 =X1.w.H Q 1 a A 1 1 v t =X1 g &.A A Q a R 1 =X=XQ t =Xg 1 =X=X=X=Xt t =Xg =Xt t 8.t H t =X6.t t t H H H 8.=Xt t =X=Xt =X1 =X1 8.t t =Xt 5 t 8.=X&.=X5 1.8.=X1 w.t &.w +Xa 1 =X=X=X1 3.=X; S =X1 =X).).D ; ; ; D %.9XM.;XO O O O O ", +"O O O O O _.MX_.A 3.v v k.&.=Xg g w &.8.g w w &.1 R R w &.=X=X1 _ 1 a a &.=X=X=XQ Q ; ).t g ; g ; =X1 w.=X1 =Xt =X8.).Q Q t Q ).).).=X=X=X=X=X=X).1 1 g t t =Xg &.=XQ 8.&.8.=X1.=X=Xt Q &.1 1 1 =Xw.=X5 &.1 8.=Xt w A 1 1 ; =X..1 S ; % ).; Q g A 1 1 ; ; ; D $.vX;XO O O O O ", +"O O O O O _.KXC.D 1 1 1 1 &.&.=X8.g 8.A &.t =X1 8.g &.A w w w a a a &.g 1 R a &.).Q A g % g 1 Q t =X=Xt =X1 =Xt &.t [.t 8.=Xt Q g =X=X=X=Xt t t t [.t 8.g g =Xt t g t 8.&.=Xw t 1 &.t t =X8.8.=X=Xk.1 8.1 1 8.k.1 w 1 g =Xt =X=X1 ..a =X=XA Q ).=X; ; ; =X).; 0.vX;XO O O O O ", +"O O O O O O 1XDX1 a w k.w &.=X=X1 =X=X=X&.1 w w 1 &.A g g A _ a Q 1 A ; 1 a g t =XQ =X; 1 1 1 &.&.g 1 g =X=X1 &.t &.1 =X=Xg =Xg =XQ w g 5 Q =Xt 5 [.=Xt t =X=XQ =Xg Q =X1 1 =XQ =X1 =X,.&.k.1 8.t 1 w.8.1 k.w.1 8.8.=X&.&.&.&.g &.1 =X=Xw a 1 g ; g ).A a g 1 0.M.HXO O O O O ", +"O O O O O O 1XDXA 1 1 1 &.=X=X&.1 =X=X&.&.&.&.&.&.A A g g A A g Q ; a 1 =XA A g =X=Xg 1 1 1 1 1 1 g =X=X1 1 =X8.g 1 &.t t t t 1 &.t &.=Xt &.1 &.w 8.g =X=X1 1 =X1 8.=X=X1 1 1 1 1 1 1 1 w.=X,.=X1 k.w.,.1 w.=X1 8.=X&.1 1 1 &.&.&.1 &.8.8.&.w w 1 ; g w w &.a 8 JXHXO O O O O ", +"O O O O O O 1XpXa 1 1 1 &.&.1 1 1 =X&.1 1 =X=X=X&.A g g A A g g A A D ; g A A ; g 1 1 1 &.&.1 1 1 =X=X&.1 &.Q Q 1 =X&.=X&.&.=X&.=X1 &.8.8.8.5 H 8.Q t t t g =Xt =X=Xg 1 g g 1 1 =X=X=X=X=Xw.1 w.=Xa k.w.1 w.=X1 =X1 1 1 1 1 &.=X=X1 w &.8.=Xa 1 t ).=X1 &.8.D 8 XXS.O O O O O ", +"O O O O O O 1X9XR a 1 1 1 1 1 &.&.1 1 1 1 &.&.&.&.A =X=XA a ; ; a R g ).A a =X).1 1 1 &.g g g &.g Q 1 A g 8.=X1 g =X1 1 w 1 =X=Xt &.=X=X=X&.=X=X&.g =XQ =Xg =XQ =X=Xg &.&.&.&.g =X,.=X=Xw.1 k.1 ,.a k.1 k.w.=Xk.w.&.&.&.&.&.&.=X=X1 a 1 =X=X1 &.5 g D +Xw k._ T.XXS.O O O O O ", +"O O O O O O 1X9X_ R 1 =X1 1 =X8.=X1 1 &.1 1 A 1 1 a 1 g 1 A 1 1 1 R =Xg a a =X).1 1 &.g g g g =X=X=X1 1 =X=X1 1 1 =X1 =Xg =Xt =X=Xt 8.=X=Xg 1 A 1 1 =X=Xg =X8.=X=X&.=X=XA w 1 1 a &.a a &.8.=X1 k.1 1 w.1 w.=Xk.=X=X=X=Xg &.1 1 &.A 1 g 8.Q =X1 D ; a R w w 0.T.JX0XO O O O O ", +"O O O O O O 1X[ *.a 1 g A w &.=X&.1 g =Xg 1 A A 1 A A g g 1 A A 1 A A a a 1 1 1 =X1 1 g g &.&.g =Xa g =X1 1 =Xg A Q 1 g 1 g 8.1 1 =X=X1 g Q =X=X[.&.=Xg g t Q =X=X1 =X=XA A g g w =X1 1 1 1 1 k.k.1 1 w.1 &.&.a =Xg g g &.1 1 1 1 1 &.1 1 g =Xg a ; A 1 =X1 %.[ l 0XO O O O O ", +"O O O O O O 1XM.*.A a w 1 A a A &.1 1 &.&.1 1 1 1 1 g g 1 1 A a R A A %.a =X1 a ; a A 1 g 1 1 1 1 A g =X1 1 =X=X1 t 1 1 a 1 =X1 1 1 =X1 w &.1 1 g 1 1 a A 8.g a 1 1 &.g 1 1 =X=X=X=Xt t 1 a y.1 =X1 1 =X1 &.1 a w.1 1 1 1 1 A 1 1 1 1 A R a =X=X; D R 1 1 a gXM.g.0XO O O O O ", +"O O O O O O 1XM.*.; R a g g a a 8.1 1 A 1 &.g 1 1 a A A D A g 1 _ D ; a a =X).1 D +Xa 1 &.1 A w A =X1 A g =X1 1 =X=X1 g g 8.t 1 A a 8.=XA =Xt =X=XQ g a &.5 =Xa 1 g 1 1 &.&.1 1 1 a 1 &.1 1 w.w.k.k.1 =X=X=X&.a =Xa A 1 1 1 1 1 1 A 1 1 1 1 1 1 D A a 1 1 R %.C.l . O O O O O ", +"O O O O O O S.C.0.A A 1 g g 1 1 =X1 g g 1 1 1 A a a =X1 %.A 1 a a a ; 1 D =X..D 1 1 1 1 1 1 1 &.g R w g a 1 &.a t 1 1 a g 1 1 t a 1 1 1 ; =X).Q Q [.1 =X&.a g &.A g =XA g 1 =Xa A 1 a a =X=X1 1 t =X1 1 1 =X1 1 1 Q =X1 1 1 g g g A =XQ ; A 1 ; 1 R A a a D fX_.c.sXO O O O O ", +"O O O O O O S.[ 0.%.a A 1 A a a 1 1 1 1 1 1 ; 1 D a =X1 R A ; A a 1 ; D a ....3.1 =Xg g &.1 1 1 1 A w a w t t a a 1 1 A g 1 ; t A A A 1 1 ; g g g =Xa &.&.1 Q 8.=X=XQ A A a 1 a g =X1 1 =X=X1 1 =X1 =X=X1 1 1 1 1 1 A a A g =X=X; D g =X1 A 1 1 A a a a R %.gXXXHXsXO O O O O ", +"O O O O O O S.M.0.R A g g 1 a A ; 1 1 A A 1 ; 1 a A =X; a A 1 1 D 1 1 a a 1 =X1 1 =Xg &.1 1 1 1 1 1 g a w =Xg 1 1 ; 1 A 1 1 g Q 1 1 ; =X).).).).).=Xw g g &.8.=Xg &.=X&.&.1 1 a g =X=X=X=X=X1 a 1 a 1 =X1 a 1 =X1 g 1 A 1 g g ; 1 a 1 g 1 A 1 A a A a 1 R %.fXJXHXO O O O O O ", +"O O O O O O S.XX0.%.R D D a R a A 1 1 1 1 1 1 A R A ; 1 A A 1 1 D 1 1 3.a 1 1 1 a 1 A 1 1 1 1 &.&.1 =Xa 1 1 w =Xg g 1 A A 1 g =X1 A A 1 ; =X=X=Xg Q 1 =Xg &.=X1 1 1 =Xg =X=X&.1 =X=X=X=X=X=X1 1 1 a a 1 =X1 1 1 t Q =X1 A D A 1 1 a 1 1 1 1 1 A a 1 R &.R %.fXJX0XO O O O O O ", +"O O O O O O 1XvX$.R R R R a A 1 1 1 1 1 1 ; g A R A A 1 A a D 1 D 1 ..=X; 3.a a _ 1 A 1 1 1 1 1 1 w 1 a =Xt =X=XR g g 1 A 1 =X; 1 g 1 A 1 g =X=X; =X1 g 1 g g A =XQ =X1 w 1 1 1 8.1 1 =X=X; 1 1 1 1 a D ; ; 1 1 =XA 1 A a R a A g a A A 1 1 1 A R A _ 1 R %.fXJX1XO O O O O O ", +"O O O O O O 1XJX8 D a a a A g =Xg D A 1 1 1 g 1 A A a 1 1 a a 1 D 3.1 =X=X3.a D %.1 1 1 1 1 w a a a w 1 =X1 1 =X1 g g g A g =XA 1 t =Xg g =X).=X; =X1 &.1 g &.a =X=Xg 1 w g a a 1 1 1 1 ; 1 1 D 1 1 ; ; D D 1 1 a a A 1 1 A D A 1 a a a D A A a a w _ a R %.fXXX1XO O O O O O ", +"O O O O O O _.# N %.%.R R a A 1 A D A A D D 1 ; ; 1 a 1 g D a 1 1 3.a ..=X3.1 ..a 1 1 1 1 1 A w a A a g 1 _ a g Q 1 ; g D g ).%.D ; ; ; ; ; ; 1 1 &.1 1 1 =X1 a =XA A g 1 8.a R a ; 1 1 =X1 a a 1 a ; =XD a D 1 a A 1 ; ; ; 1 A D D D D D D D D A w R +XR %.DXMX1XO O O O O O ", +"O O O O O O _.# Q.%.D 1 A A 1 1 1 A ; A a %.a 1 =Xg D g ).1 D ; ; =X1 ..=Xa 1 1 _ a A 1 1 &.&.&.1 &._ 1 A a g 1 A A 1 ; a ; g *.%.1 ; ).).=Xg g =Xa a 1 1 =Xg a Q A w &.w g _ A =X=XD 1 =X; a a ; a a 1 ; D %.a g 1 D a a A 1 1 D A D D D D D A ; D a 0._ DXM.c.S.O O O O O O ", +"O O O O O O O c.vXDX0.A R R A +Xw g A ).; 1 1 a w.=XD R D A D A 1 _ *.%.=Xa =X=X1 1 A D 1 =X).g 1 1 1 A a A g g 1 1 1 ; R =X1 ; A 1 1 g =Xg g ).t =Xa =X1 a t =X1 =Xa =X1 =X=X1 =Xa 1 g w R a a a A a +Xa 1 g g 1 1 a &._ g A _ A a 1 %.0.; ; D %.A B.3.0.fX9Xc.0XO O O O O O ", +"O O O O O O O 1XMXDXDXA D a A R w _ A g a a I.1 1 a a R R a A 1 1 1 R _ A %.g =Xg 1 1 A 1 1 1 1 1 1 1 1 ; 1 A a D A 1 g a g 1 1 A R 1 1 a D g =X1 1 a 1 1 1 1 =X1 1 a 1 =X=X=X1 =X=X=X=X&.1 1 1 A 1 A w w A 1 1 1 a +Xa *.&.w R A a a %.D ; D %.; B.B.A 0.DXvXl . O O O O O O ", +"O O O O O O O 1XZX9X0.D R R w R R ; Q ).; D D 1 a a A A R a 1 1 A 1 a R 1 D g 1 a A A 1 A D D 1 g ; 1 1 =Xg A A g A 1 g D g A A A g g 1 1 g Q Q ; 1 1 1 =X1 a 1 1 a 1 1 =Xt =X=X1 1 A a a a R _ _ a w A w a R a A A w R +Xg R D D A D a D ; %.%.3.D o.D 0.DXc.S.sXO O O O O O ", +"O O O O O O O 0X_.M.C.%.%.%.R R D IXA.fX; 3._ 1 1 D 1 1 A a A A A a a a A A 1 A a a D A A A A 1 =Xg 1 A A 1 1 ; =Xa 1 1 A 1 A D 1 =Xa R g ).1 A g 1 1 a =X=Xa 1 1 1 =Xa =X=X1 1 a 1 a a w a +X_ +XR a w a R R a w A A R a g R ; D =X=X1 %.D 3.o.0.; _ _ 0.DXMXHXO O O O O O O ", +"O O O O O O O 1XMX[ r %.o.%.%.D D D A.fX~ A _ 3.1 1 A A 1 D R R a A A a R a a 1 g a D A 1 1 ; ; ; g g A R a 1 1 R a 1 A 1 1 A D ; ; R R g =XA a g ; 1 _ =X).a 1 1 ; =Xa 1 ; a 1 %.1 D D 1 A R R D D A A A A D A A a a %.D ; %.=XD ; ; 1 a %.D a c v U.U.0.9XXXHXO O O O O O O ", +"O O O O O O O sXKX[ m.r %.m.0.%.%.~ ~.~.~ A D D _ 1 D D 1 A R R A a A 1 a 1 a 1 g 1 A A 1 g g 1 A 1 g 1 a 1 Q g _ a A a 1 A 1 a g A g g ; ; =X=X; =X1 %.1 =XD a 1 ; =X1 1 D a 1 a a a a a a R R a 1 A a a D A D D A D A A 1 %.1 a a _ a 1 %.0.%.a U.U.U.c Q.# #.O O O O O O O ", +"O O O O O O O O HXSX< C._ m.< %.DXfXfXB.fXD ; a a.1 D D D D D D D %.D ; D ).1 D 1 ; 1 D 1 1 1 1 D 1 ; ; ; =Xt ).D D 1 %.1 D ; D ; %.1 ; D D ; ; D ; 1 D a ; 1 o...; ; =X3.a 1 3.1 1 1 1 D D 1 1 D D a a a a D D D ; R ).; D %.D a %.0.a 1 %.0.%.a NXaXU.Z : g.S.O O O O O O O ", +"O O O O O O O O #.tX8 < o.%.0.B.%.; DXB.A.; 1 U.a a D D %.%.D D %.D D D _ =XD D 1 1 D D D D D 1 1 ; ; 1 1 ; ; 1 1 1 ; %.1 D ; a ; D D D 1 ; ; 1 1 1 3.1 a 1 1 _ =X..1 t 1 a 1 a 1 1 1 D a D 1 1 %.a a a a D 1 ; ; %.( g D R %.D D a o.3.D _ o.a Z aXaXc 5.:X1X0XO O O O O O O ", +"O O O O O O O O . , r.8 m.m.D ; %.D D o.o.1 I.k.k.a a %.a 1 1 a _ %.a D D 1 1 ; ; 1 ; =X1 D a a D =X; D D 1 1 a D ; =X; D D ; ; 1 %.=X; _ D 1 %.).1 1 D D D D 3.3.t 3.D D D a _ D %.D 1 D %.%.a 1 %.D 1 D a D ; ; %.; A %.D D %.3.3.m.1 D _ 1 D a U.}.Z r.u.S.sXO O O O O O O ", +"O O O O O O O O O jXi SXC.m.%.3.D 3.; 3.a a a U.y._ %.a a %.%.%.a D D D D D D 1 ; ; ; ; 1 D a a a D 1 a %.D D a a 1 1 1 1 1 ; ; 1 0.D D _ D ; a ; ; D o.o.D 1 D a 0._ ; ..; 3.%.o.D a %.o.D D a %.1 D D D a o.o.a %.D D %.%.%.%.o.D _ o._ c %.o.m.Z V r.x.;XsXO O O O O O O O ", +"O O O O O O O O O O jX|., Q.N 0.o.o.3.3.a y._ U.a 1 D a a D 1 3.D 3.3.D a o.a D D D a o.a 3.3.D o.; ; D o.D a %.%.a o.o.D D D a a 0._ a _ %.D %.%.m.%.o._ 0.c m.o.a o.o.< < %.o.3.%.r 0.m.o.D %.m.D r 0.%.o.%.%.%.o.%.%.%.0.%.%.0.%.%.%.B.%.m.0.N %X: u.jX1XO O O O O O O O O ", +"O O O O O O O O O O S.jXu.:Xz.@.>.Z c c c c c }._ %.0.( ( c 0.< Z 0.0.0.< ( ( ( < < ( ( < m._ 0.c c c Z N { N V >.( { N ( ( N N { { @.Z { N ( Z >.@.{ ( { @.^ >.( m.{ { V { < N >.N { ( ( ( ( ( < ( N N ( 0.0.C.0.0.Z ( ( { ( C.N 7.( N ( ( @.@.lXg.u.u.S._.O O O O O O O O O ", +"O O O O O O O O O O O O g.iX:X^.4.` .^ ` ^ ^ z. .V N N N @. .@.V z.z.^ ^ z.` ` ` z.z.z.^ ^ z.` N.4X4XB 4.4X4XB 4Xz.4X4.4X4X4.4.4XB = B 4X4.z.^ N.N.4X4.B N.N.N.B ` 6X4.N.^ ^ 4.4.4Xz.@.%Xz.N.z.@.@.z.z.@.@.z.z.@.@.` ` .` z.@.CXz.@.|.|.4X^.|.3 i ;XS.. O O O O O O O O O O ", +"O O O O O O O O O O O O S.jXi = ^.6X4.6Xe.4.4.^.^.= e.6X^.6Xe.e.e.6X^.^.4.^.^.6Xe.6X^.^.^.6Xe.e.6X6X^.6Xe.^.^.6X^.6X= P = = = e.6X6XP = = P ^.4.6Xe.e.= e.e.6Xe.e.B P = e.= P P N.^.^.^.^.^.^.e.e.^.^.^.4X4.^.^.|.B 6X6X^.^.^.|.^.^.4XlX= lXlXlXi jX. O O O O O O O O O O O O ", +"O O O O O O O O O O O O O HXu.3 ^.P e.= = lXlX3 lX^.= P = ^.4.6X= = = e.e.e.= = = P = = = = = e.6X= e.= P P P P P = = = P = e.6X= ^.P e.= P = = = P = e.e.P P = 6Xe.P ^.6X= P P e.^.lX= = = = = = = = = = = = = e.6X6XP = 6Xe.= ^.= = lX= lXlX= |.1XO O O O O O O O O O O O O ", +"O O O O O O O O O O O O O O 1XjXu.i i i i u.u.u.u.i i u.i i i i i i i i i i i i i u.i i i i i i i i u.i i i i i u.i i i i i i i i i i i i i i i i i i i i i i i i i 3 i 3 i |.i i i u.u.u.i i u.u.i u.u.u.u.u.u.i i i i 3 u.i i u.u.u.iXi u.,X:XO O O O O O O O O O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O ", +"O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O " +}; diff --git a/xgnokii/xpm/6110.xpm b/xgnokii/xpm/6110.xpm new file mode 100644 index 0000000..8ede0bc --- /dev/null +++ b/xgnokii/xpm/6110.xpm @@ -0,0 +1,682 @@ +/* XPM */ +static char *Background_6110[] = { +/* width height num_colors chars_per_pixel */ +" 138 420 255 2", +/* colors */ +".. c None s None", +".# c #080808", +".a c #181818", +".b c #212121", +".c c #292929", +".d c #393939", +".e c #424242", +".f c #cecece", +".g c #dedede", +".h c #efe7e7", +".i c #f7efef", +".j c #d6cece", +".k c #e7dede", +".l c #ada5a5", +".m c #c6bdbd", +".n c #5a5252", +".o c #ad9c9c", +".p c #4a4242", +".q c #948484", +".r c #8c7b7b", +".s c #847373", +".t c #7b6b6b", +".u c #b59c9c", +".v c #ad9494", +".w c #6b5a5a", +".x c #312929", +".y c #524242", +".z c #211818", +".A c #392929", +".B c #181010", +".C c #633939", +".D c #ad6363", +".E c #844a4a", +".F c #ce7373", +".G c #7b4242", +".H c #e77b7b", +".I c #ad5a5a", +".J c #ce6b6b", +".K c #100808", +".L c #844242", +".M c #733939", +".N c #211010", +".O c #ad5252", +".P c #f77b73", +".Q c #d6524a", +".R c #c6635a", +".S c #ce635a", +".T c #d6635a", +".U c #a54a42", +".V c #7b3931", +".W c #ff6b5a", +".X c #8c524a", +".Y c #ff8473", +".Z c #bd5a4a", +".0 c #ff7b63", +".1 c #ff6b52", +".2 c #9c4231", +".3 c #ff8c6b", +".4 c #7b635a", +".5 c #423129", +".6 c #c6bdb5", +".7 c #211810", +".8 c #312921", +".9 c #313129", +"#. c #212118", +"## c #393929", +"#a c #313121", +"#b c #181810", +"#c c #292918", +"#d c #4a4a29", +"#e c #101008", +"#f c #080800", +"#g c #6b734a", +"#h c #636b42", +"#i c #4a5229", +"#j c #5a6339", +"#k c #6b7352", +"#l c #525a39", +"#m c #4a5231", +"#n c #424a29", +"#o c #b5ce7b", +"#p c #8c9c6b", +"#q c #424a31", +"#r c #6b7b4a", +"#s c #637342", +"#t c #9cb56b", +"#u c #5a634a", +"#v c #b5ce8c", +"#w c #deffa5", +"#x c #9cb573", +"#y c #94ad6b", +"#z c #8ca563", +"#A c #bdde8c", +"#B c #b5d684", +"#C c #adce7b", +"#D c #a5c673", +"#E c #d6ff9c", +"#F c #cef794", +"#G c #bdde94", +"#H c #b5d68c", +"#I c #8ca56b", +"#J c #a5c67b", +"#K c #c6ef94", +"#L c #7b945a", +"#M c #9cbd73", +"#N c #738c52", +"#O c #6b844a", +"#P c #d6ffa5", +"#Q c #bde78c", +"#R c #b5de84", +"#S c #ceff94", +"#T c #ceff9c", +"#U c #c6f794", +"#V c #293121", +"#W c #7b9463", +"#X c #b5de8c", +"#Y c #6b8452", +"#Z c #add684", +"#0 c #84a563", +"#1 c #adde84", +"#2 c #182110", +"#3 c #182118", +"#4 c #efffff", +"#5 c #9cadad", +"#6 c #bdd6d6", +"#7 c #d6f7f7", +"#8 c #d6ffff", +"#9 c #101818", +"a. c #bdd6de", +"a# c #c6efff", +"aa c #102131", +"ab c #bddeff", +"ac c #212931", +"ad c #84a5ce", +"ae c #5a7394", +"af c #94bdff", +"ag c #a5c6ff", +"ah c #6b8cc6", +"ai c #7b9cde", +"aj c #6b7ba5", +"ak c #9cb5f7", +"al c #94adf7", +"am c #424a73", +"an c #393942", +"ao c #292931", +"ap c #4a4a6b", +"aq c #101018", +"ar c #7373b5", +"as c #5a526b", +"at c #4a425a", +"au c #39314a", +"av c #5a5263", +"aw c #9484a5", +"ax c #d6cede", +"ay c #ada5b5", +"az c #948c9c", +"aA c #524a5a", +"aB c #292131", +"aC c #42394a", +"aD c #c6add6", +"aE c #bdadc6", +"aF c #5a4a63", +"aG c #c6b5ce", +"aH c #94849c", +"aI c #8c7b94", +"aJ c #84738c", +"aK c #73637b", +"aL c #dec6e7", +"aM c #e7ceef", +"aN c #c6adce", +"aO c #efe7ef", +"aP c #f7eff7", +"aQ c #fff7ff", +"aR c #cec6ce", +"aS c #ded6de", +"aT c #7b737b", +"aU c #ffefff", +"aV c #847b84", +"aW c #bdadbd", +"aX c #c6b5c6", +"aY c #b5a5b5", +"aZ c #524a52", +"a0 c #f7def7", +"a1 c #9c8c9c", +"a2 c #a594a5", +"a3 c #efd6ef", +"a4 c #4a424a", +"a5 c #948494", +"a6 c #dec6de", +"a7 c #e7cee7", +"a8 c #d6bdd6", +"a9 c #8c7b8c", +"b. c #847384", +"b# c #c6adc6", +"ba c #7b6b7b", +"bb c #423942", +"bc c #393139", +"bd c #736373", +"be c #b59cb5", +"bf c #ad94ad", +"bg c #a58ca5", +"bh c #9c849c", +"bi c #6b5a6b", +"bj c #312931", +"bk c #635263", +"bl c #947b94", +"bm c #bd9cbd", +"bn c #5a4a5a", +"bo c #8c738c", +"bp c #846b84", +"bq c #7b637b", +"br c #735a73", +"bs c #6b526b", +"bt c #423142", +"bu c #392939", +"bv c #312131", +"bw c #8c6b84", +"bx c #ceb5c6", +"by c #b59cad", +"bz c #ad94a5", +"bA c #8c7384", +"bB c #9c8494", +"bC c #7b6373", +"bD c #392131", +"bE c #e7cede", +"bF c #846b7b", +"bG c #8c7b84", +"bH c #6b5a63", +"bI c #4a3942", +"bJ c #291821", +"bK c #deced6", +"bL c #bdadb5", +"bM c #b5a5ad", +"bN c #7b6b73", +"bO c #5a4a52", +"bP c #84737b", +"bQ c #efcede", +"bR c #63525a", +"bS c #ad8c9c", +"bT c #b59ca5", +"bU c #7b636b", +"bV c #8c737b", +"bW c #846b73", +"bX c #634a52", +"bY c #210810", +"bZ c #bd9ca5", +"b0 c #8c6b73", +"b1 c #84636b", +"b2 c #290810", +"b3 c #210008", +"b4 c #633942", +"b5 c #ce6b7b", +"b6 c #e7949c", +"b7 c #bd5a63", +"b8 c #000000", +/* pixels */ +"....................................................................................................................................................................................................................................................................................", +"....................................................................................................................................................................................................................................................................................", +"......................................................................................................................................................................................................................................aP.kaRbfaH.qbB.qaWaO..........................", +"..................................................................................................................................................................................................................................aQa7aDbgblaJaKbrbkaAa4btbHbM......................", +"..............................................................................................................................................................................................................................a0aUaUaxbma1aJavbkavaZaCaZanbc.a.NbB..................", +"............................................................................................................................................................................................................................bSbHaFaFa4.xbjbjbcbjbjbjbjbc.dbbauacb8bH................", +"...........................................................................................................................................................................................................................hbHbnbjbcbcaobjbcaZa4bI.paCa4a4aZa4a4bj#f................", +"...........................................................................................................................................................................................................................mbqbda4bta4aZbsasbHbsaAaZa4aCa4aCa4a4a4.a.j..............", +"..........................................................................................................................................................................................................................bMbpbibbbta4bnbkbqbdbHbkaZbOa4a4bIaCa4aZ.bbz..............", +"..........................................................................................................................................................................................................................bTbqbkbbbtbIbkbkbibqbsaZbOa4a4aCa4bbbIaZ.zbB..............", +"..........................................................................................................................................................................................................................bBbCbHbbbubI.wasbibdbsbOa4a4bI.daCbb.d.pbJba..............", +"...........................................................................................................................................................................................................................qbqbRbcanbtaZbdbdbdbsbna4bIbcbI.dbbbb.y.x.w..............", +"..........................................................................................................................................................................................................................bwbCbObcbtbIbnbrbibabsaZa4a4a4anbIbcbca4bja4..............", +"........................................................................................................................................................................................................................aQbWbNaAbcbbbtbnbibCbFbkaZa4a4bbbcbbbbbbbbbcbI..............", +".........................................................................................................................................................................................................................ibUbobn.5bta4bnbdbibibsbOa4a4bbbcbb.dbcbbbbbD..............", +".........................................................................................................................................................................................................................ibsbqaZbbbcbtaZbdbibrbsbOa4.pbI.dbbbbbcbIbbbJ..............", +"........................................................................................................................................................................................................................bKbWbFa4anbtbtbHbabibrbkbObO.ebta4.dbbbbbba4bJ.i............", +"........................................................................................................................................................................................................................bKbFbsa4a4bcaCbkbpbqbkbRbRa4bbbbbbaCbc.dbba4.BaS............", +"........................................................................................................................................................................................................................bxbUbia4bcbtbIbnbpbqaKbsbnbIaC.dbcbbbbbcbta4.aa8............", +"........................................................................................................................................................................................................................bxbsbFa4bcbba4bkbdbdbdbsbkaZbIbbbbbbbc.dbcbb.z.m............", +".........................................................................................................................................................................................................................mbsbra4btanbIbRbdbibrbRbOa4.daCbb.dbcbbbbbb.bbM............", +"........................................................................................................................................................................................................................bybUbHbbbta4aZbkbibibdbsbka4bbbbbcbIbbbcbca4.abz............", +"........................................................................................................................................................................................................................bzbsbibtbta4a4bkbibrbibRbna4aCbbbtbbbt.dbbbI.bbB............", +"........................................................................................................................................................................................................................bTbUbiaZbua4aZbnbrbabdbsaZbba4.dbt.d.dbcbca4.abV............", +"........................................................................................................................................................................................................................bSbibrbcbua4a4bkbdbabibra4a4bbbt.dbIbbbcbt.pbJbi............", +"........................................................................................................................................................................................................................bBbibka4bua4bOasbibib.bka4a4bbbbbbbb.dbbana4.cbH............", +"........................................................................................................................................................................................................................bBbFbka4bua4bRbnbUbibrbiaZa4bbbbbcbtbbbcbcbIbjbR............", +"........................................................................................................................................................................................................................bBbFbrbcbbbtaZbsbdbaaKbia4aZbcbbbbbbbb.dbcbb.cbO............", +"........................................................................................................................................................................................................................a9bibibcbcbtaZbibsbabpbHa4aCbbbbbbanbcbbbca4.xa4............", +"........................................................................................................................................................................................................................bBbCbkbcbca4aZbibUaKbrbsa4a4a4bc.d.d.dbbbbbb.xa4............", +".........................................................................................................................................................................................................................qbrbHbtbtbubObkbrb.aKbRbna4bI.dbtbcbcbcbbbIbjbI............", +"........................................................................................................................................................................................................................bobFbsbcbba4aZbraKbdbpbkaZbb.dbbbcbbbcbc.dbbbcbt............", +"........................................................................................................................................................................................................................bVbdbHbc.dbtbnbibibFbAbHaZ.dbIbbbcbbbcbcan.ebjbc............", +"........................................................................................................................................................................................................................bCbsbHanbtbbaZbkbCb.bdbUaAa4.dbbbcaCbcbcbcbbbbbD............", +"........................................................................................................................................................................................................................bUbrbObcbuanbnbibpb.bqaJbnbcbb.dbc.d.dbcbcbb.dbv............", +"........................................................................................................................................................................................................................bUbiavbcbua4a4bibqbababrbna4bbbtbcbcbc.dbc.pbD.x............", +"........................................................................................................................................................................................................................bsbCbRbuanbtbnbkbrbobGbsbnbtbc.dbtbcbcbcbcbbbcbD............", +"........................................................................................................................................................................................................................bUbibRbcbuanbObibda9aJbNbna4.dbcbc.dbcbc.9bbbcbv............", +"......................................................................................................................................................................................................................aQbibrbnanbcbubObHbib.bAbibnbbbcbIbcbcbc.dbca4bc.x............", +"........................................................................................................................................................................................................................bsbsbk.dbjbua4biaJbabCbda4bIbcbc.dbcananbc.dbcbv............", +"........................................................................................................................................................................................................................bRbD.c.xbcbDbcbtaZbAaIbsaAbb.dbbbb.danbj.xbc.c.NaQ..........", +"........................................................................................................................................................................................................................bJbJbb.dbjbcbba4aZbIa4biaFbIbbbbbcbjaobc.5.ebcbJ............", +".........................................................................................................................................................................................................................tbibnbjbjbuaZbRbqbFa4bbbRbIbcbjbjbcbcbcanbb.xbO............", +"........................................................................................................................................................................................................................bobsaZbububua4bsbia9bhbi#..cbjbj.dbDbjbjbcbbbjbu............", +"......................................................................................................................................................................................................................aPbsa4.pbcbubca4bkbRbc.cbJana4.pbcbt.dbjbjbc.dbc.a.h..........", +".......................................................................................................................................................................................................................ibXbkbj.b.x.cbJ.b.ca4bkbkbna4aCa4a4a4.d.9bjbD.8.B.i..........", +".......................................................................................................................................................................................................................kbRbqa4.c.baobubkbrboblbka4bIaCa4bbaC.dbbbb.danbJbE..........", +".......................................................................................................................................................................................................................kbnbra4bcaobcbcbkbdbibqbkaCbbbbaCa4bbbbbcbbbbbb.z.g..........", +"......................................................................................................................................................................................................................bEbObra4bjbDaobDbnbaaKbqbnbbbIbc.pbbbbbbbcbbbbbb.N.k..........", +".......................................................................................................................................................................................................................kbnbHaZao.c.xbjbRbabqbqbRa4.dbbbbbbbtbbbt.d.dbt.baS..........", +"......................................................................................................................................................................................................................a3bRbibt.caobjbvbOasbdbdbnbIbcanbbbbbbbbbbbbbcan.zbK..........", +"......................................................................................................................................................................................................................bK.wbdbIao.cbubuaAbiaKbqaZbIbcanbta4aCbcbc.dbIanbJaS..........", +"......................................................................................................................................................................................................................bEbsaKbbbu.xaobvaZbrbdbiaZaCbtbcbbbbbb.dbtbbaCbI.abK..........", +".......................................................................................................................................................................................................................kbubHbb.c#VbubuaZbRbibsbRbnbbbta4aCa4a4.p.d.pbjbJaP..........", +".........................................................................................................................................................................................................................y.8bj.bbJbJ.c.b.Abcbjbjbjbc.xbcbcbcbjbjbj.x#.bR............", +"................................................................................................................aQaMbEaxaRaWbLbfa1az.qbGaJa9a9a9aHaza2bMaWaXa8aSa7a3aU..................................................bFaKbpaC.caobcaAaKbqbka4bcbcbcbj.x.c.c.9bj.dbjbI............", +"............................................................................................aPbKbMbBbPbX.p.9#3#e#eb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8.B#3.bbj#qbRb.a2by.mbEaU............................bibCbabcbjbjbtbra9b.brbka4bbbtaCbcbcbjaobjbIbcbb............", +".....................................................................................jbBbR.Ab8b8b8b8b8b8#f.##2#b#2#9.b#3#3#3#3.b.b.c.b.b.b#V.b.b.b.b#V.b#V#3#3.b.b.b#2#2#9#2.#b8b8b8b8b8#e.NbI.qbxaQ....................bUbrbkanbj.cbtbHbababsaZaCbbananbu.dbjbjbcbIbjbI............", +"...............................................................................jaVb4a4boaE..bjb8#b#2#b.b#3#b#3#3.b#3.b.b#.#.#2.b#3#2#..b#.#3#.#.#3#3.b.7#3.b.b.b.b#V.b.b.c#V#V.c.b#V.b#3#2.##2.#.K.NbHaW..............a6bRbabbbuaobvbcasbabpaKaAa4bcbcbbbcan.dbjbjbbbja4............", +"...........................................................................vbFbobeaO........a0ba.z.a#b#f#f#e#e#e#e#e#e#e#b#e#b.B#b#b#b#b.a.a#b#b#3.z#.#3.z#.#..z#3#3.a#.#2#9#..7#.#3.a#3.c.daobc.c#3.B.#bJbF.j.......ja4bsbibc.z#.bvbubibobabsa4aCanbcanbjbcbjbjbjbc.cbI............", +"......................................................................aWb4bg..........aUaQa3a3aUaLa7bxbfbmawaHblbqbrbkbrbibkbia4a4a4anbtanbcbcanbubcbjbubcaobjbcbcbcbcbcbbbj.cbjbjbjbua4aCaCanbj.caoao.c.bb8#fbIbAbkbRbabaa4.b#b.a.canbibpbabqbnbbbtbcanbcanbj.9bcbbbjbI............", +"..................................................................aObXbs............aQ..aQaUaMaNa8bfbfa9bibFbkaZasaZbRa4bbbc.dbD.c.8bc.cbJ.b.c.c.b.c.x.c.c.8.cao.9.cbcbj.d.dbjbjbcbjbjbcbjbcbjaobu.x.c.caoao.b#baq.caAasbObj#b.a.z.aaCaFbabFbraA.dbcbc.dbcaobjbj.x.dbDa4............", +".................................................................lbibx....aQ..........aUa8bfbhbsaAanbjbj.b.b.b.z.a.B.a#b.a#b#b.N.z.b.z.z#3bJ.z.b.b#.bJ.z.b.c.bbJ#..bbJbJ.b.b.b#V.c.c.c.c.c.cbjaB.c.c.c.c.x.b.c.c.b.b.b#.#e#b#..a#b#b.aaAaJbhbiaAaCbcbtbcbjbjbjbjbjbb.xbI............", +"..............................................................bUblaU..aUaU........a0bGbtbu.cbJ#.#e.B#b.B.a.B.b.b#b#..z.b#..b#..c.cbJ.c.b.cbJ.bbJ.b.bbJ.c.c.c.c.bbJ.b.b.cbj.bbJ#.bJbJbJ.cbJ.b.c.c.x.c.c.b.cbJ.b.cbJ.b.cbJ#.#3.z#..b#.#e.abrbgbsa4anbuan.dbjaobcbjbjbbbjbI............", +"............................................................bRbgaMa3aU........bebR.x#f#2.a.7aq.a.z.c.b#V.8.c.c.c.xbjbcbvbjbcbj.xbcbDbjbcbcbD.x.caB.x.8bDbvbjbj.xbjao.cbJbjbj.xbJ.cbj.c.xbj.c.b.baoao.x.x.c.c.xbJ.cbJ.b.b.b.c.a.z.caB#.#e.ababqa4bbbcbubcbjbc.9.cbjanbDa4............", +"..........................................................bCa9aDa8aMaQaUaUbea4b8#e#9.a.z.b.b.c.c.cbcbDbcbcbDbcbcbjbbbtbcbbbtbcbubcbcbcbubjbcanbcbcbcbcbcbcbcbc.dbDbcbjbjbjbubj.xbjaobDbj.c.xbv.cbjbj.xbjanbjbJ.c.c.c.bbJ.bbJ.b.b.za4an.B#e#eanbkaCbjbc.daobcbjbjbc.dbjbI............", +"........................................................bRbsaEaNaEaLa6bhbI.Kb8#2.b.b.cbjbcbcbDbbbjbbbIanbubcbbbcbcbcbj.x.c.xbjbj.x.cbu.x.c.xbubjbj.xbJbvbcaB.cbcbcbjbuanbcbjbcan.xbjbubjbcbubjbc.cbcbcbjbba4aCbD.xao.x.b.b.b.bbJ.baBbnaA.b.B#bbjanbubcbcbjaobjbjbDbbbj.y............", +"......................................................a4aCb.bfbfaybebs.x#f#9.bbJ.bbcbcbDbca4bbbIa4bbbcbjbjbJbj.c.c.b.a#..a.a.b.a.b.b.z.b.z.a#..z.b.b.b.b.a#..bbJbJbJ.c.x.cbj.xbcbjbbbcbjbubcbcbubcanbcbuanaZbkaAa4bv.cbJ#VbJ.b.b.b.banbqa4#3#b#b.bbc.dbj.cbjbj.9bj.pbja4............", +"....................................................bC.casaKbrboaHbc.aaq#.#V.xbcbcbua4bcbc.5bc.xaobj.b.a#.#3#b.z.z.z.7.b#..z#.#.#..z#b.b.b.b.b.z.b.z.b.b.b.b.b#V.b.b.bbJ.bbJ#V.bbu.cbububcanbubcanbubcbubbbjbubObrbra4bv.bbJ.b.b.b.b.baCbsbj#b#3.z.c.cbjbjaobjbjbjbcbDa4............", +"..................................................bzbYaAavbnbibd.a#e.b.b.xbuanaCaCbcbj.c#V.b.z.b.a#b.b.z#.#..z.b#.#..b.b.b#..b.b.z.b.b.b.b.b.b.b.b.b.b.bbJ.b.cbJbJ.b.bbJ.b.c.b.b.b.b.x.b.cbcbcbjbubcbuanbcbcbjaoa4bqa9bp.c.z.x.b.b.b.zaca4a4.c#..z.b#V.9bjbjbjao.9bcbja4............", +"................................................bE.aaAbOa4bpbk.c#b.abJbja4aZa4bcbJ.8.7#..a#..a#..b.b.b.b.b.b.c.b.z#..b.b.b.cbJbJ.b.cbJ.bbJ.b.c.b#VbJ.cbJ.b.b.8.c.bbJ.cbJaB.cbJbv.c.x.x#V.x.x.cbjbcbbbubcbDbubcbubjbDbqbhbiaBbJ.b.b.b.z.bbvanbb.b#3.z.b.c.cbjbj.9bj.dbDbO............", +".................................................xbua4aZasaA.z#b.a.bbcbua4a4bu#.#.#..z.b.b.b.cbJbJ.x.cbJ.cbJ.b.bbJ.x.b.bbJao.b.b.b.c.c.b.c.b.c.c.b.b.c.cbJ.c.bbJ.x.c.b.cao.c.baB.caB.xbjbjbcbubcbubcaCanbcanbjbcbubca4bnbgbAbu.a.b.b.a.b#.bjaCbu.b.z#V.cbj.9aobjbjbbbja4............", +"...............................................w.ba4a4bn.d.a.a.z.c.ebta4bubj.a.7.b.b.b.bbJ.c.b#VbJbJ.c.b.b.cbJ.b.c.c.c.cbJ.x.bbJ.cbJ.c.xaBbJ.b.b.c.b.c.b.c.c.cbJ.c.b.b.c.c.bbJ.c.bbjbcbDbcbcbcbua4a4a4bHbna4bubtbcbcbjbtblbfbq.z#b.b.b.b#..bbcbc.c.b#.bJ.c.c.x.x.9bb.xa4............", +".............................................k.KanbtaCbb.b.z#2.aanbtbIa4.b.b.b.b.c.xbJ.x.9bjbj.bbjaoaoaB.c.xbJbj.c.caB.c.c.cao.x.c.xbjbv.c.8.c.c.cao.c.b.cbv.8.c.caB.cbjbJ.b.x.xaB.xbjbjbcanbcanbtaZa4asbsbHbabcbjanbu.canbpbfbd.a.bbJ.b#..a.cbjbc.c#.#V#Vao.cbjbj.d.xa4............", +".............................................y.bbbbbbc.b#..a.xbDbbbIa4.c.bbJ.c.x.c.c.xbj.xbjbcbjbjbu#cbj.xao.x.xbjbv.cbv.c.c.cbj.xbJ.xbcbvbjbu.x.cbDbc.cbjbjao.c.x.cao#Vaoaobj.c.xaobjbjbcbu.dbcbcbta4aZa4bibqbUaZbvbbbj.bbObfbBbc.B#..b.z#..bbjbcbD.b.bbJ#a.cao.9bt.xaZ............", +"...........................................o.KanbtanbcbJ#..bbcbIbIbb.cbJbJ.c#VbJ.xbvbcbcbjbcbjbDbjbcbcbjbjbjbj.xbj.cbj.x.c.cbcbDbjbjbcbjbjbcbj.xbcbjbDbjbjbcaobjbDaobubjbjbj.cbDaobj.x.x.9bjbDbjbjbjbjbOa4bnbRbpaKbt.cbcbj.bbnbfb..b.B.b.b#.#..bbjbc.c.b#V.8.cao.xbb.cbO............", +"........................................aQ.KbcbbbbbcbJ.z.baobba4aAa4.cbj.cbJ.9.xbubcbcbjbcbjbcbjbcbcbcbjbcbjbjbcbc.xbcbbbjbjbDbcbjbjbubcanbububcbjbcbjbcbjbuaobcbcbjbjbcbubcbjbcbjbjbcbcaobjbjbvbcbcbubta4anaAbdbrbqaCbcbcbv.cbibgbs.b.a.b.b.b.zbjbcbj#VbJ.c.cbj.xbc.cbR............", +".........................................nbubIbcan.c#..a.cbjbtbHbc.bbJbjbj.xbjbcbtbbbDbcanbubcbbbD.dbDbcbb.dbDbcaCbcbDbcbjbcbcbcbcbcbbbubtan##btaCbcbcbcbjbuanbcbjbcbcbubjbj.dbDbjbj.xbcbcbjbcanbububcbcbua4bnbnbkbibpbDbubc.cbjbabhaC.z.b.b.b.a.cbcbj.c.c#V.c.c.9bc.cbO............", +".......................................h.NbbbcbbaC.b.z.bbva4a4bU.x.z.c.xbjbtbubcaCa4bIbcbIbbbtbt.dbbbcbcbI.dbubbbD.pbubcbu.d.dbtbcbcbcbbbcaCbDbbbcbjbbbubc.pbtbcbcbcbubcbcbcbD.dbcbDbjbjbjbjaBbcbcbcbcbcbcbua4bkbHbnbiaZbcbjbcaobObobn.a.b.b.b#.#.bjbc.cbJ#V.c.c.xbcbJbn............", +"......................................bU.bbcbtbbbD.b.z.xaCbRbdbI#3bj.xbcbcbcbta4aZa4a4a4aZbIbIa4.dbtbIbbbtbI.dbcbbbIaZbua4bbbubtbcbIbcbcbtbtbbbcbcbIbua4bcbcanbc.5bcbcbcbtbjbjbjbjbcbjbDaoaoanbjanbuanbcbcbbbtbnbRbnaFbibubububububpb.bj.a#..b#..b.cbcbj.c.cbJ#V.xan.cbR............", +".....................................hbYbbbca4bb.x#3bJbca4bRbi.e.bbjbcbu.ybtaCbI.ybOa4bXa4a4aZa4bbaCa4.dbbaZbcbcbIbtbbbta4bc.ya4a4bIbc.daCbIbtbbbI.dbI.dbca4bubbbcbcbcbtbbbcbubcbubcbubjbcbcbcbcbcbubcbua4btbtaCa4bObObkbIbuanbu.caAbhbn.bbJ.b#.bJ#2bc.dbJ.8.c.c#VbcbJbk............", +"....................................bObJaZbbbnbc.z#b.8a4bsbna4bJbJbcaZbva4a4a4bOa4bnaZa4bObOaZa4bIaZa4bIbtaZa4bIa4aZa4btbta4a4bta4bbbIbtbtbIa4bIbbbIa4btbta4anbcbubcanbta4bcbbbubcbcbcbcbjbcbubcbubcbubububcbuaZbOaZbka4bubbanbcbvanblbabt.b.b#..b#..xbbbj#V.c.x.c#q.bbH............", +"...................................j.zaAbIaZaZ.b.bbJa4aZbnbO.b.cbc.dbDa4bnbOaZbnbkbkbXbObObIaZbObObna4a4a4.ybIaCbOa4aCbta4btaCa4bta4a4bIa4a4a4aCa4bbbta4btbIa4btbtbIbIbtbtbtbcbcbcbubcbcbjbcbubcbcbubcbjananbcbua4aZbc.cbtanbcanbubuaZaKbn.c.b.b#..b#.bjbu.b.x.c.cbcbJbC............", +"..................................bca4a4a4bnbb.b.a.cbHbkbObObjbjbcbcbtbObRbnbObHbnbObnbnbka4bnbnbna4a4a4bObOaZbObOa4a4bOa4btbOa4a4aZaZbIaZa4a4aZa4a4a4a4a4a4bubtbbbcbtbbbcbbbbbtanbjbcbcbubcbubjbcbcbcbubcbDanbcbua4.zbjaCbuaCbcbcbjbIbCbabu.bbJ#VbJ#..cbbbj.c.x.cbc.zbN............", +"................................bKbJaZa4a4bn.d.z.za4bnbibkbj.bbbbvbta4aZbnaZbrbkbHbsbRbkbObObnbObRbObObna4bOaZa4bnbIaZbRaZa4a4a4aZaZa4aZbOaZbOaZa4a4a4btaCa4a4a4a4aZa4bca4bcanbtbtbcbtbcbcanbcbcbcbubjanbjbcbDbta4.b.banbjbuanaCbcbubca4bqaC.b.b.b.b#V#..d.dbJ.cao.5.bbN............", +".................................sbub4a4aFaZbJ.bbjbObrbRaZ.cbjbDbua4a4bRbObkbRbRbsbRbRbnbkbkbRbnbRa4bnbOa4aZbObOa4bOa4bRa4aZbOaZa4a4bOaZbnaZa4a4a4aZa4bOaZa4a4a4bIaCa4aCanbtbbbcbtbcbuanbububcbDbjbcanbcbuanbjbtbc.abjbbbtbtbcbuanbcbuanbsavbJ.b.b.cbJ#.bja4.c#V#abj.bbP............", +"................................bua4a4bnbi.d#2.bbbbRbHbibj.bbcbu.ybObRa4bkbibrbibkbnbibHbkbkbkbRbHbObkbkbRaZa4bkbHbnbnbnbOa4bnaZbRaZbObOaZbRbnbIa4aZa4bOa4a4a4a4aZa4a4bcbtanbcbtanbcbcanbc.dbcbcbcbubcbcbbbjaobt.b.abcbcbjanbcbcbbbcbjbuatbkbj.bbJ.b#V#VbJa4bj.cbjbc.Ba9............", +"..............................bfbvbObkbibdbJ.abJbjbibCbibj.caCbuaZbkbnbnbHbibdbi.wbsbkbkbibHbkbibRbsbHaAbnbRbnbObRbOaZaZbnbOaFbObnbnbnaZaZa4bOaZaAa4a4a4aZbRa4btaZa4a4a4btaCbbbubIbbbcbbbububcbuanbcbjanbjbjbjbj.a.bbcaZbkbuaCbcbcbtan.xanbnbt.c.bbJbJ#V#.bcbb.c#Vbc.a.q............", +"..............................a4btbRbkbqbR#..b.ca4brbibn.xbubIaZbnbObnbkbibkbUbibdbkbibHbkbHbUbibnbRbFbHbkbRbsbObkbObkbnbOa4bkaZaAaAbOaZaZbnbObnaZaZbOaZaZbOaZa4aZaZa4aZa4bbaCbIa4bIaCbbanaCbcbjbDbbbjbcbj.cbj.b.7.z.a.9bdaKbuanbtbtanbvanbnaZ.x.bbJ.c.c#..cbb.c.8bc.zbB............", +"............................aRbJbRbnbkbNbc#b.cbnbUbkbkbt.cbjbubIa4aAbibkbNbibdbqbCbdbkbibabkbCbdbdbkbRbibkbnbkbnbObnbnbObkbsbnaZbRbObHbObRa4bHa4bkbOaZbOa4aZaZbOa4a4a4bta4aZa4aCbta4bIbtbbbIanbbbcbcbcbcbDbj#.#.#.#b.a#eb8.xbha4.caCbtaobja4bObj.c.c#c.c#V.b.dbj#Vbc.aa1............", +"............................bUbtbRbRbdbr.c#bbJaAbCbHavbbbDbua4aZbnbRbHbNbCbUbibHbibFbdbibUbCbdbibUbrbibRbUbnbRbsbRbnaZbObkbObRbnbnbkbnbkaZbRbkbObObnbkaZbRbnbnaZbnbna4aZbnbtaZa4a4a4a4aZbtbbaCbcbcbbbjbubjbj.b#..a#b.zauaCb8bJaH.cbuanbububbbbbcbj.c#VbJbJ#cbjbu#Vbc.Bbz............", +"...........................ibDbnbkbdbabk#.#bbcbibRbobHbJbca4bIbObnbibibibUbibpbabdbrbabdbCbdbibkbrbibdbibkbibnbnbnbObkbkbnbnbkbHaZbObnaFbnbnbnbnbOaZbsbRbnbkbObHbnbRaZaZaZa4a4bna4aCa4a4bbbtaCbcaCanbcbc.c.c.b.7.B#b.cbva4a4b8bObp.xbbbtbcbua4a4bc.x.c.c#V#V.cbb.cbc.K.l............", +"...........................obtbibdbibqa4.a.za4bCaJbiaZbcbtbubRa4bkbibdbabqa9b.bCb.bPbdbaaJbdbpaKbdbdbUbCbHbHbObRbdbkbRbkbkbRbnbnbnbRbObObRaZa4a4aF.wbRbnbOaZbka4a4bkbRbOaZa4bObOaCa4bIa4a4bIa4bubtanbcbjbu.b.a#b#b.b.c.c.caZbub8bgbtbuanbjbca4a4bcbv.c#V.c.cbJ.d.Abc.KbL............", +"..........................biaAbRbibob.bj#b.cbRbabFbd.dbbbua4bObibHbUbdbdbAbabqbCbabAbNbAbabdbababCbrbdbkbkbHbkbibsbnbRbkbkbRbkbkbnaFbnbkbnbsbHaZbkbRbnbRbkbsbOaFbXbOa4a4bnaAa4bRaZbRbnaCaAbIbuaZaCbtbcbcao#.#.#b.Nac.bbJbcbuanb8.paw.bbubjanbIaCbbbc.c.c.c.c#Vbcbcbc.KaW............", +"..........................buaZbkbaa9bd.b.abnbpbFa9br.zbcbubObnbkbnbdbFb.babAb.bqbPbqbFb.bpbqaTbdbrbdbCbibdbibnbnbObHbsbHasbXbnbRbsbObkbHa4bRasbObObnbkbRaZbnbkbObsaZbnbnbnaZaZbOaZaZbRaCbOaAaZbta4a4bcbD.b.b.7#b.b#9.M.I.I.DbX#9b8bea4anbcbubua4a4bj.x.c.cbJ.c#Vbc.9.abx............", +"........................bMbubRbabpbhbO.7bcbHbabaa9aZbcbu.daZbkbRbrbibPaJbC.qbAb.bpbabFbFa9bibCbqb.bUbdbdbHbibrbHbHbnbnbnbHbkbkbRbsbHbibibnbrbRbkbkbRbnbRbkbRbsbnbkbOaZaAaZbRbObkbObkbRaZaAbtaZa4buaZbcbj.x.b#b#e#9.Ib7.8bDbcb5.Cb8aZbdbDanbjaobubbbcao.c.c#V.8.cbcbD.KbK............", +"........................bCaZbHbabl.qao.a.AbCbabAbda4bcbcbtaZbRbkbibdaTa9bAa9a9bGb.bFa9b.bCb.aKbWbabaaVbdbCbRbRbibrbUbibObkbRbiasbnbRbibRbsaZbnbnbObkbRaFbkbnbnbnbObOaZbRbka4a4bnbnaZaZbRaZa4aZaZaCa4bbbj.b.b#b#ebu.F#9.5.I#9b4b1b8buboanbcbubcbbaCbcbcbj.c.x.c#V.9bc.B.g............", +"........................a4bRbCbpa1bd.z.abObHbib.bdbcbDbcaZbRbkbNbdbpbFbGboa9bBb.babobdbabFboaJbNaTbrbaaKbkbdbibibnbRbibkbkbnbkbdbRbkbnbnbkbOa4bkbsa4bnbrbHbHbnbnaFbHbnbnbHaAa4bnbOa4aZbnaFaFa4bOaFbIaCbcbJ.b#2.#a4b7#9bc.O.b.5.X#b#bbFaCbtanbcbjbca4bcbj.c.c.cbJ#Vbc.BbE............", +".......................jbtbiaKbCbzbH#b.abRbaa9bdbnbcbcbIa4bnbkbabibGbpbpa9bFb.bFbPbob.bFblbAbCb.bqbrbUbUbqbHbUbibkbibnbHbrbsbRbdbkbibUbsbkbHbHasbRbRbkbRbibkaZbkbObObkbibkbRbnaZbHbnbnaZbOaZa4bnbIbbbjbj#VbJ#bb8aA.Haq.5.R#9bc.E.B#eaAaZaCbcbububbbtbc.9bj.x.c.c#Vbj.B.h............", +"......................bAbObdbCbBbmbc#9.dbibabdbBbnbjbcbIaAbkbNbabNbp.qb.bFa9bh.qbAbAbobAbabPb.brbdbdbdbHbdbRbibHbibHbkbibkbRbnbdbsbHbibsbkbkbibkavbnbqbkbnbRbkbibnbkbkbiaAbkbsaZbsaZbnbkbObHbnaZbnaAanbcbJ.c#2#faub6.D#9.a.5.Jbc#b.Bbnbnavbbbcbtanbcbcbj.9.c.c.c.cbD.zaP............", +"......................bHasbNbabBa2bj.zbjbUa5a5b.bbbja4a4bHbUbsbUb.boa1bGblbBa9a9a5bFb.bAbqa5b.brbNbabFbdbdbHbdbibHbibHbibHbibibkb.bnbnbdbrbibibibRbCaZbHbkbdbRbRbsbRbnbRbHbkbrbnaZbrbObkbnaFaZbkava4bbbbbJbJ#2#faobpb5.T.U.T.C#9#3#eaFbnbnbbbc.xbjbcbc.dbj.8.c.c.c.c.zaQ............", +"....................bEbObibaaJbea9#b.baZbdbAbobi.cbDbObnbRbdbUbia9bla9bBbzbBa9bAa5blbFaIbpbobqbpbabababrbHbsbHbibkbibibkbibibibibrbHbdbdbObibkbHbsbkbibdbnbibnbRbHbsbRaFbkbRbibibRbibnbiaFbnbHbnaZa4bnbtbcbc#b#e#baKau.5b4bJ#9.c.7#bbsaZaZa4bcanbDbcbjbcbcbj#V.c.8.b.z..............", +"....................a2aZbdbPbhbfbd#ebJbk.qbPa5bnbca4bnbk.wbablbFbGbablbBa9bzbobAa9bobAbAa9bdbabFbabqbHbabdbdbdbsbHbababUbibdbdbibUbCbibHbrbibkbdasbObHbkbkbnbkbkbnbkbkbHbHbHbkbkbsbnbnbkbnbkasa4aZaFa4aZbuas#V#e#fbjaHac#9.bbJbJ#b.abia4aFbnbbbcbcbcbDbcbc.c.x.9.c.b.8..............", +"....................bBbObibFbfbxaZ#b.cbr.qbCa5aZbDa4a4.nbsbab.bpaHaHbha5bB.qa5a5blbBa9a9bAbababqbqbGbNbibdbNbabHbibibdbCbdbkbibibkbRbdbdbibkbObsbsbrbRaZbCbibRbkbHbRbibibnbobRbnbkbsbrbkbRbkavaFaFaZbtaZbua4bN#b#f#fbIbpbcbJ#VbJ#f.xaKa4bna4bbanbcbjbjbcbcbj.c.x.x#3bJ..............", +"....................bUbnbibAbybm.d.BbcbqbBbfa5bcbjbObnaZbkbibabWbha1bAbSa9bhbla9a9bla9bdbob.bPbdbabFbqbdbCbUbibrbibibibkbrbdbibibibkbNbiaKbdbdbNbdbkaAavbUbibibiasbHbRbnbdbabkbibnbkbibRbkaKbnbnbnaZbna4aF.cbpbd#e#f#f#V.p.c#.#2b8bkaKa4aZbna4btaobcbjbcbcbjbj.c.c#b.A..............", +"....................a4bibda9bebl.8.bbObGbBbobAbcbvbObkbHbkbFaIbBa9bza1a1a1bhbBaIbPaIa9a9a9bCbAbAbobabHbab.babdbPbibrbabibdbHbHbabkbibibdbiaJbqbibdbCbdbrbsb.bHasbqbkbHbibHbkasbnbsaZasbrbRavbsbsa4bnaAaZbObcbJbpaK#e#e#f#e#e#b.#bJaKbnbkbnaFaAanbj.9bcbj.d.dbj.x.9.abD..............", +"..................bKa4bdbda5bmaV#.bubHbBbza1bg.ca4bnbHaZbCaJblbBa1bobgbBbgbgbga2bla9bpbAb.b.b.bdbdbdb.bibNbdbibdbibdbsbdbibibdbdbibHbdbNbRbabdb.aKbdbNbdb.bAaKbibrbdbibkbibibHbCbkbFbRbnbkbHbnbRbsa4aZa4a4aZbcbjavbFbD#e#e#b#ebJbqasbnasaFaZaZ.dbububc.cbcbcbj.c.c#bbI..............", +"..................bLa4bpbAbBaYbk.BbcbiaJ.qa9bAbbaCbObHbibka9bSa1a1aYbBbhbB.qbhbobha1babFa5babaa9bWbabCbib.bUbdbrbUbHbibqbkbrbHbkbibibkbFaJbAbabdbpblbAbdb.b.baaHbabUbibFaKbibdbibibiaAavbRbsbra4bsaFa4aZbHa4anbc.zbrbqaZbjbcanbjbkbkaZaZbsaAbnbbbc.dbc.8bcbbbj.c.x.a.5..............", +"...................qbObabpbebma4#ebIbdbBa9bhbkbDbRbsbkbHbkblbya1bybzbha2b.bga9a1a1bAa9bNbqbob.bCbPbFbCa9babibdbHbkbkbRbkbkaZbkbkbFbibrbFaKbHbpbda1a9bFbBbqaHa9bFa9aHbNbFb.bkbibkaFbHbdbsbkbkbHavaFbnbkbsbRbnaAaCaC.bbtbnbnbbbtaCbJbvaZbsaFaZbnaZbbbjbcaobc.dbj.x#V.c.BaQ............", +"..................bHbObabAbea1bJ.bbObzbgboa5.dbubibHbObUbNaIbhbBbgbfbybfa2bBbha9bfa1b.b.bpbFaTbraKbpbHa9bibibrbkaZaZaZbkbkaZbUbibdbabdbibdbpbdb.bAa9a9bAbaa5boa1bobqbhbBbFaVbibRbdbdbdbRbibkbkbsbnbnbnbnaZaZa4bDbbbuaB.x.xbnbkanbcaC.xbbaKaZbnbnbcbcbjbjbjbbbj.c.x.xb8.j............", +"................aPa4bnbC.qaNbh.a.cbHbf.qa9bBbOaZbOaFbib.bBbBa9bybobmbybBbgbzbha9a9awbPbFbAb.bAbGbabCbibabHbibRbnaZa4bnbnbkbibRbsbibUbdbdbpa5bdbabdbNbGbda9bob.bpa1blbfa5aHaKbpbCbkbHbkasbHbibkbnbObnaZbnaFaZa4aZbtbcanbj.b.bbubkbkaCa4bjbubnbka4bbbcbcbjbJbIbc.9.9.9#fbB............", +"................bK.ybibAa9aGbd.BbubUaYbpa2bBbJbibkbib.bibpbybBbBbfa2aHbfa2bo.qbhbwbVb.bpbPbAbqbabUb.bFbibrbRbnaZa4a4bna4aZbnbRbRbdbHaKbibdbrbabababpaIbBbpb.boaHbpa9a9bobga1b.bFbibRbibkbnbRbibibkavbnbnaFaFbta4bcbtbcbjbj.c.b.bbua4a4biaCbcaAbnaCbcbcbj.can.d.x.c.x#ebH............", +"................bLbtbNbpbhbfaZ.Bbtbla2a5awa9bjaZbrbRbdbNaIbBa1bMbzbebGbea5bza9boaIa5b.aTbqbNb.babdbdbibabHbnbObca4aZbbbnbka4a4bnbibibdbpbdaJaJaKaJblbabdbab.a5azbpbpa2a2aYbzbfbCbibHbabrbiavbnbsbHbkavbrbnaZa4a4bbbca4bc.caB.c.c.b.b.caBaZbc.cbiaZbjan.x.cbDa4##.c.c#.bD............", +"................bBa4baa9byaWbc#.a4bobhb.a9aT.xaZbUbibAbFbAbBa1bhbBbgbBa2bga2bla1a5aIbNbdbPbpbabCbNa5bdbkbka4bna4anaZaZa4bnaFbibka4bdbUb.bqbHbAbgblbPbdaKboaHbfaIbFa5bga9b.aYbfbobBbibdbdbHbqbkbnbsbkbRbOaZa4a4aZaCbvbcbc.cbDbj.b.cao.c.b.b.cbJaCbnanbcbj#Vbja4bj.x.c.b.zaQ..........", +"................bUaZbabpb#aY#bbJbibBbhbFbLbk.xbibdbibFb.a1a2bzbgbybybh.qbAaIb.boa1bhaJa1b.babdbdb.babCbnbnbna4bba4aZa4aCa4.x.dbCbsaZbHbk.cb8#fbCawbib.aHbk#qavbgbpbFb.aJbla1aEbgaJbnbdbsbkbsbdbnbnbRaFaAaZaFbnbtaCbcbIbcbD.cbj.c.caB.c.caoaobjbcbkbjbcao.cbjaCbD.c.9.b.KbE..........", +"................bRbkbFbaa6a2.#a4bVbfbza5aHa4bIbNbkbabAb.bBbhbza1bfbyaIbfbfblbob.a5bpb.aJbrbPbabCb.bNbraZaZaZbbbbbtbta4aC.9#eb8#baJbnbsan#e#2#f.ca9bUa1aCb8b8b8bkbfbha5a2bpa9bLbAaHbCbObNbaaZbkbibibnbsaFaZaZaAbRbbbta4bcaobjaobj.b.c.cao.c.c.cbcbkaCbcbj.c.cbbbb.c#V.c#fbL..........", +"..............aQ.yaKbFboa6ba.BaCbFbyaHbBbqbjbcbibibabBaJbzbfa1aWbfbhbya5.qbebpblbGbabUbdb.b.bpbibCbAbra4a4bIaCaCbtbcbtbn.c#e#2.Kbiavbnan#..7#e#Va9aKb..c#e#3b8avb#a1boa1bhaEa1b.bga5bibibabdbUbRbibdaZbkbHa4asa4bbaCbj.paobcbjbcaB.c.cbj.cao.cbDasaZbc##bj.cbD.dbj.c.x#fbB..........", +"...............kbuaKba.qaN.n#9bubBbZa5a5a9bjbHbRbdbrbBbhbhbhboaGb#bga1bzaJa9aIbPboaJa9bdbFbaaKbdb.bibObta4.pbbbIbcbcbOanac#.#2#fbdbsaZbb.b#e.K.xblbrbdbJ#b#2.Kbdbfb.babpaIbgbBbha1bpasbRaKbrbkbsbiaZbsbOa4bna4a4.dbtanbjbDbcaobjbJaB.c.caB.c.c.caAaAaubj.xaobcbb.cbj.c#fbU..........", +"...............mbIbkbabfaDa4.KaZbzbBa9bzav.xaZbkbibAa1bPa1bzbybla1a2bhbBblbAbla9b..qaJbpbCb.bFbibdbkbnaZa4bcbtbbbcana4bcbubj#e#faFbsa4a4.c.9b8anbAbkbi.b.B#e#bbra1b.aJbBb.bra5bea1bdbpbibHbkbqbibnbnaZa4asaFaZaZa4bta4bcaobbbcaoao.c.cbjaoaobJbjbkbnbb.9ao.xbja4.c#V#V.B.p..........", +"...............obubHbNbzbybj.zbHbhbBblaY.ebDbnbibibAboa9bBbgbLbha1bfbza9bBb.bBbob.b.bUbPbibabrbabdbibnanbcbcbba4bbbt.dbbbu.dbcaobkbra4a4.a.ebibDbqbia4.b.c#3.Bb.bpaKbgbaaIboaJb.bab.bdbFbrbiasbRbkbqbkbnbnaAaZa4bta4bubbbcanbcbuaobj.cao.cao.cbvaAasbtbjbc.x.ca4bj#.#V#ebD..........", +"..............a2bnbrbCbebf.B.cbFaGbLa9bgbRbObnbHbWbBbdbBaJaYbha1bBbBbgbhbla9bpa9a9bpbqbNbdbdbUbibibibHbubIbIbbbbbuaCbta4bu.cbjbibIbdbIbt.bbjbHbIasaZan.Ba4a4.xbobdbabdbdbfb.bGaIbobdbibHbkasbRbibHbkbqbRaZbObnaZa4a4btbcbtbcbubj.cbcbJ.cbj.c.cbJa4brbbbcbcao.c.pbc#V.c#bbJ..........", +"..............bAaZbabNbmbB.Ba4bNbfbhbhbo.pbIbibHa9a9bBa2bmbBa9bzbzaHbha1a5.qbla9bAbdbdbAbdbibabNbrasbHbOaCbjbbbtbta4bubta4.c.cbibbbibta4bJbcbRbcbHbOaZ.BaZbcbRbabNbsbdbab.a9b.a9bdbibibibibibibsbkbnbsbkbka4bnaZa4bta4bbbcbjbcbcbjao.c.bbJ.c.c.baCbia4bcbjbj.c.dbIbJ#V#.#faQ........", +"..............bkbnbUbpaGa9.aaZaIbybAbga9bjbHbkbdbAa9a9bhbBbebgbfa5bha5bgblbBbhb.bGb.bUbabdbPbpb.bibkbkaZbta4bca4a4bcanbta4.c#bbra4bkbcaC.bbcbIbjbsbiaC#ebn#VaCbrbibkbiaKbkbda2b.babsbHbiasbNaFbHbkbkasbsbObRaZaZa4bta4buanbcbjbvaobj.c.cao.c.c.cbjaAa4bbbc.x#Vbcbb.x#V.bb8aO........", +"..............bXbkbiboa8bkbjbXbBbfbVbBaJbca4bnbAbabBbgbBa1bgbfbTa1bhbfa1a5bzbhbBaIb.bAbFbab.bibibqbraAbHaAbta4a4btbta4bvaCbj#eav.5bkbua4.zbca4bcbdbkbc#bbs.abdb.bCbdbrbabdaIa9a9bqaZbRbHbHbHbdbibrbHbsbkbRaAa4aZa4bba4a4btbcbjbcbj.cacbuao.cbJao.xasbn.dbjbu.cbj.d.x#V.bb8a6........", +"..............a4bnbda1a8bb.bbnaGbga5a2bpbcaCbHbFbFbBa1bobzblbza9a9bha1bh.qboa9boa9.rbabab.bdbabdbNbibibiaZa4aZa4a4anaCbnaCbc.Bbna4a4aZan.abtbbbcbCaC.z.cbk#.aKbkbdbqbabibabobRbdbObraZbibrbdbsbnbUbnaZbkbnaZaAbHaZbtaZbbbcbububu.xbc.x.bbjao.x.c.baZbna4aobc.x.cbI.c#V.cb8.m........", +".............ia4bibHa2aGbj.abXbLbfblbza9.cbUbobda1blbybma1bga1aHbBbhbBa9a5bBb.a9brbdbpbFbdbabPbibibibrbkbsaZa4a4bObtbcaZa4bc.B.d.bbHbObb.b#b#ea4bda4.b.7bcbJaKbHbFbibibFbababibibibkbibrbkbdbravbkaFbRaAbHbOa4aZaZaCa4bbbtaoanbbaobcbj.cbJ.caB.b.caZbka4aobcao.ca4##.bbjb8bB........", +"............bQa4bibkaYbf.bbJbBbxbga9by.dbDbHbia9bla2a5bfbga9a2bybfbBbha9blbgbhaVbpbPbibFbabFbibUbqasbHbnbCbsbRaZaZa4a4bOaAbc#b#fb8bRbibc.a#b#fbtb.bI.7#bb8bcbCbRb.bibraKbrb.bdbUbsbibNbRbibibsbsaKbHbHbkbkbnaZbRa4a4a4bbbbbjbcbcbjao.cbjbj.c.cbj.cbIasa4bcao.8.cbtbc#c.9b8.r........", +"............aRa4bUbdbmbGaq.xa9bea2blbhbnanbnbNa5bqbga5bzbmbzbSa1bGa9bza1bFboblbaa9baaKbPbqasb.bibdbibpbRbRbqbRbtbOa4a4bta4bc.a.7#fbcbd.c.7#b#ebjbdbc#b#2#ebcaIbnbibAbHasbkbnbnbrbnbRbrbibkbdbibRbRbRasbrbObnbOa4aZaCbta4bjbubuao.caobj.cbj.c.caobJbcaFaAbjbj.c.8.dbc.c.9b8bH........", +"............bTbnbdbiaYbibJbca2bfbla5bgaZbbbFbia1bCa2bfbgbBa1a5bTbha2boa5a1bqbBb.babAbaa9aKbCbNbibkbrbHasbdbkbibCbOaZa4bka4bb.b#e#f.8bqa4.b#e#ebcbibj#b#b#fbcbibqbkbnbkbNbkbibibabibkbRbkbnbkbCbkbpbsaZbkbka4a4aAbkbIa4btbbanbcbcan.xaobjao.c.cao.cbcaZaZbcbj.c#V.5an.x.9.#.y........", +".............vaZbibiaNb..K.cbBa1bobhbfa4aZbdbFbVa5bqbTbfa9a9bga1blboa1bhblbGbCaKbpb.bHbCbqbHbkbUbdbibibqbqbibkbkbsbsaAbna4bia4.ab8bjbkbnbb#bb8a4bdaAbJ#f#fa9bCbibRbabdbnbkbibibObkbsbkbHbdbdbibHbibibkbkbkbnaAa4bOaZbIa4bubuaobcbc.c.xaoaobJ.c.b.caobnaAbcbjao.cbcan.c.9#b.x........", +"............a9aZbibNbyav.Ba4bzbgb.a1bf.cbHbkbibNbBaJa9a1a1b#bgbSaHbBa9a1a9b.a5bpbabGbUbdbibUbiaJbibHbibibnbHbibkbCbkbUbkbkbObRbj.cbibkbIa4aCa4bCbbaAbb.abtbCbibnbnbdbibkbibibRbHbibnbkbdbHbsbRbsaZaZbHbHaZbnaAbObnaZaCa4btbjbcbjbvaobcbDao.c.cbJaobja4bna4bj.x.cbjbt#V.x.a.N........", +"............bAaZbnaHa1bj#2brbebea9bzbq.cbkbdbdaJaJ.qbgbobhbza1a1a9blbhbla9bAb.babFbabNbkb.bibdbabkbibHbibabUbUbibkbdbabCbkaKbrbnbibna4bkbnbHbiaAbna4bnavbsbkaAbRbkbnbObnbpbabnasbkbHbkbHbibibkbsbkbibkbnbnaAbObnaFa4a4btaZbcanbc.canbjbjbj.c.b.c.c.caZbnbcbc.x.c.9.d.x.c#..K........", +"............bHbObka9by.c#bbkbLbla9bzbnbua4bdbCbNbGbAboaHbgbebga9a1bBblbA.qa9bPbAbGbrbababibdbrbUbibkbdbibkbibibCaKbdbibiasbibkaKbHbkbibkbqbnbkbkbibibHbibHbibAbHaAbRbdbibRbHbkbRbnbsbkbnavbkbibkbkbibrbkbnbnbnbnbOaAa4a4btbcbubjbjao#Vaobj.c.c.cbJ.bbkasbbbcbj.x.c.dbc.x#..#aP......", +"............bRbnbibgay#b.BbHa1bha9bgaZ.xbHbibib.bfbla1a9.qbhbhbAbga1bBa9bpbFb.bdbkbdbrbpbUbdbabdbrbkbnbUbpbibrbdbqbHbkbdbibibUbUbibHbPbibibdbibCbdbibqbRbRbHbqbHbkbnbqbibnbkbibHbHaZbObkbkbHbsbRbkbibiaAbsbRaAbnaAaZbtbIaCbcbcbcaobvao.cbj.cao.c.cbJ.eavaZan.x.c#V.pbj#V.bb8.k......", +"............b4a4bdbgbo.b.baJbea5a9bo.panbCbWbdbNb.a9a9bla5bha9bza9bpbBboa9b.b.babPbdbdbFasbibNbsbHbNbkbibibibsbabHbdbabibdbdbdaFbCbdbnbUbibabdbnbnbRaZbnbnbkbkbibkbibnbRbibkbObkbnbsbrbkbHbrasbRaZbsavbUbsaZbnbna4a4aAaZanbbbubcbjbj.caobcbJ.c.c.c.bbcbra4btbj.c#V.ebD.c#Vb8bx......", +"............bca4bRbfb..b.zbdbfa5b.bpbcbcbdb.bdbaa9bla1aIbfbBa1bBbha5a9b.bobobpbdbobPbdbdbqbdbibsbiasbUbkbiaTbFbibibHbibdbHbdbibsbdbibdbkbkbkbRbdbsbibOaAbrbObkbnbHbibHaZbkbsbkbnbnbkbsbkaZbibHbnbqbibkbnbkbkbHa4bRaZa4aZbcbbanbu.c.x.caobubj.cbjbj.cbcbibnaCbjbJ#Vbcbc.c#Vb8bL......", +"..........aObvaCbUbfbd.B.cblblbgb.a9aCaZbObdbqa9blbBbobBa9a2bhboboblblaIbpbpa5bCbdbibNaKbCbdbCbpbHbdbiasbdbFbibibrbCbdbsbabdbRbHbibkbabRbkbRbra4bkbkbdbsbRbkbibCbkbRbqbkbkbnbsbObHbiaFbsbibUbkbibibRbRbrbkbkbsbka4a4aZbubcanbcbuanaobj.c.c.cao.cao.bbcbdaFaZbj.c.bbcbc#V.xb8.o......", +"..........bBbJaZbka2as#ebcbhbfa9a9bd.cbnbrbdbNb.bAa1aJbBa2blbBbBa2bha9.qaIb.bpbpbababUbpbabibiaKbHbHbHbkbabkbibdbdbabRbibrbibabibkbibibkbkbdbibibdbkbkbibibnbnbibHbRbnbObnbHbibkbkbHbObkbibnbsbdbkbiaZbkaFaZbOaAbnbta4bnbbbuanbcbcbuaoao.caB.c.c.c.bbjavbra4bc.c#cbcbc#V.cb8bB......", +"........aOaB.AaZbdbfa4.BbIblaybgbAbibtbHbkbHbdbUaIbBbpblbla9bzboa2aHaIb.babNbrb.bpbdbkbabdbibrbibHasbkbHbsbHbHbdbNbrbObibibibabkbkbUbkbsbdbRbUbabHbnbdbRbObkbkbkbiaFbsbRbRbkbkaKbnbkbdbrbkbraZbrbRbsbHbkbsbsa4bRbka4aAaAbbbuanbj.cbj.c.caobjbj.c.c.cbjbkbiaAan.c.8bcbc.c.cb8bG......", +"........a5bjbcbObdbga4.7a4bfb.bBa1bRbIbnbUbibibab.bWa2bBa1bhbBa1a9bBbobobpaJbabCaKbdbGbibdbdbkbabdbCbibdbCbNbibkbdbibibrbHbibRbibnbObibObkbrbHbCbkbObsbRbkbHbObkbibkbibibibkbnbUbHbdbkbkbibHbnbibpbibnbkbRbkbRbkaCbnbRa4aCbDbcbcaobubcbjbu.xaB.cbj.c.bavbnbnbc.c#V.x.d#V.cb8bU......", +"........bd.dbcbIa9bgbj#baZbgbh.qboa4a4bibibiaJbPb.bBbgbBbGbha9bAb.b.bAa9blb.babFbNbdbdbrbdbHbkbRbibHbibkbkbkbdbrbHbdbibibibibdbsbibdbsbHbkbibkbnbnbnaZavbRbRbRbOaAbsbNbRbkbibkbObkbnaFbkbRavbFbUbibRbsbnbnaZbkaZbOaAbna4a4a4bcanbubjbjbjbjbjao.b.c#V.bbnbnaAbb.c#V.xbc#V.c.#bR......", +"......a8babcbcbkaHa9.b.aaZbgbybhbBaZbXa4bibCaKaJa5baa2a1a9a2a9blbga9bp.qa9bobdbrbabPbibNbkbibkbHbHbCbnbHbibrbUbCbkbibibaavbUbabpbdbkbHbnbkbHbHbkbkbHbsbRbnasbObnaZbkbkbibnbibRbkbi.nbsbnbkbibkbkbnbRbRbqbnavbnbna4bta4a4bbaCbcbuanbb.cbcbj.c.c.caobJ.caAbiavbt#V.c.x.d.c.c#e.y......", +"......aEbabDbbbRbAa5.cbJbka2a1bobgaZaAbkbibabPbdbFa2bzbCbhbybh.qa1a1bob.bpbaaTbrbdbUbpbdbCbabibRbibkbkbibibdbsavbkbUbibUbibdbibkbibkbkbdbibRbkbabrbibnbibFbnbibUbrbkbkbRbibka4bkbkbabiaZbnbRbHbrbiavbnbiaZbnaZbsaZaCa4bba4btbcbubcbcbc.caobj.c.cao.c.ba4bdava4.c.c.xbc.c.c#b.d......", +"......bgbH.daZaZbaba.c.zbibfbza9bla4bkaZbsbdbdbGa1bhbBaWaHbpblbFbGbfboboa9bGbrbqbib.bUbFbdbkbibsasaKbqbabFbqbabCbCbqbpblblboa9bCbpbabqbrb.bdbqaJaKbCbabpbrbra9aKbqb.aJaKb.brbibsbibkbibibRbkaFaZbnbibRbnaFaZbnaZaZaZaZaCbtbcbuanbububcaobjaobjaobJao.abbbibka4bj.c.c.dbj#V#bbD......", +"....a0bFa4bcbcaZbobU#9.abVbzaKa5a9a4bCbHbabdbobAa5b.b.a2bf.qbBbab.aIb.bib.b.b.bab.b.aJblb.a9asbAaTbpbdbdaTbibRbOaZa4bOaZ.p.d.d.ebc.d.p#V.ebc######.A.d.ebc##.e.dbbbbaZ.nbnavaVbNbkbibpbdboawaIbpbpbrbiataZaZaAa4a4a4a4a4bbaCbubcbcbcbcbjao.xaobjaoaB.bbcbiaFa4bj.c#VanbjbJ#3.x......", +".....ibkaCa4bba4aIbd.B.xbaaH.qa1bpbDa4bnbibabka5a1bAb.a9braIblblaIbBbeaJbaaIbNbdbNaAbO#q.c.A#..7#b#e#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#e#f#f#f#f#f#f.##f#f#f#f#e#f#e#f#f#f#f.##f#e#e#b#b#.#b.xbc.9.nbkaZaZbibqasbqaKbrbnaCaZbcbjanacaobcbuaobjbj.c.c.cbj.banavbsa4bj.c.b.daB#V#3bJ......", +"....aPbIbbbbbcbRa1bn.a#.bpbf.vaIbd.pbnbibob.a5bababpb.a9aKb.baaTaZbc##bj#b#f#f#f#fb8b8#f#f.##e#e#e#b#b#b#b#2#b#b#2#2.a#b#3#2#b#2#b#b#2#b#2#2#b#b#b#2#b#b#2#b#2.a#2#2#2#b.a#2#e#b#b#e#e#b#e#f.##fb8#f#e#e#e#b#Vbj##aCbIbbaAbna4aCananananbj.caobjao.c.baCbdbnaCbc.c#Vbjbc#V#.bJ......", +"......bDbcbb.dbkbgbb.zbcbBa5babBb.bnbbbOa4.p.y.p#V.b#.#2#eb8b8b8b8b8b8#f#f#b#b#b#b#2#b#.#2#2#b#b#2#b.a#b#2#b#b#b#b#b#b.a#b#b#2#b.a.a#b#b#b#b#b#b#b.a#2#b#b#b#b#b#b#b#b#b.a#b#b#b#b#2#b#b#2#b#2#b#2#2#b#b#e#e.##f#f#f.##e#b#..a.b.b.bbJ.cao.b.cbjbjbj.bbcbnbkaCbj.x.c.9bj#V#3.N......", +".......w#b.dbcbka1a4#ea4b.aJb.a9a5.p.##e#f#f#fb8b8#f#e#e#e#b#b#2.z#3#2#3#2#b.a#b#2#b#2#b#b#b#b#2#b#b#b#2#b#b#b#2#b#b#2#b#2#b#b#b#2#b#2#b#b#2#b.7#2#b#b#b#b#2#b#b#b#2#b#2.a.a#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b#2#b#2#b#b#b#b#b#f.B#b#e#e#e#e#b#b.a#2#b.ban.bbkavaCbc.c#V.cbjbJ.b.N......", +".......jb8bca4aZa5bn.aa4bla9bAbhba#f#b#b#2#2#b#3#b#2#3#3#2.a.a#b.a#b#b#b#b#b#b#b#b#b.7#b#b#b#b#b#b#b.a#b#b#b.7#b#b#b.a#b#b#b#b.a#b#b#b#b#b.a#b#b#b#b#b#3#b#b#b#b#b#b#b#b.z#b#b#2#b#b#b#2#b#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#2.a#2#b#b#2#b#b#b#b#b#2#ebjbIasataCbcao#Vbjbj.c.b.KaP....", +".........y.ba4bHb.bc.aaZbAa9b.a1bRb8#b#b#b#b#b#b#b#b#b#b#b.a#b#b#b#b.z#b#b#b.a#b.7#b#b.7.a.7#b#b#b#b#b.7#b.7#b#b#b.B#b.a.7#b#b#e.B#b#b.7#b#e#b#b#b#b#e#e#b.B#e#b#2#b#b#e.B.a#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.B#b#b#b#b#b#b#b#b#b#2#b#b#b#b#2#e#bblbOaZaZbt.x#V.9bc.c.b.KaP....", +".........j.Ka4bib.bc.aaZbBa9a9a9a4#e#2#b#b#2#b#b#3#b.7#b#2#b#b.7.a#2#b.7#b#b#b#b#b#b#b#b#b#b#2#b#b.zb8b8b8b8.7#b#bb8b8#eb8b8b8b8b8b8b8#f#fb8#f.a#bb8b8b8#eb8b8#e#3#bb8b8b8b8.7#b#b.z#e#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b.B#b#2#b#b#b#b#2#b.B.a#b#2#b#b#b.Bbha4asbn.d.c.b.cbc.x#V#faO....", +".........j.#a4bia9bj.abOaIa9b.bhbn#f#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.7.a.7#b.7.a#b#b#b#b.z#b#fbfaYaWbdb8#b.Kaxayb8aIaxaMa0aMaMaxb8bU..bHb8b8aIaQaM.ba8a0.x#fb8bRa0aM.nb8#.#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#3#b#b#b#3#e.BaHaZbnbkbcbj.c.cbc#V.b#f.h....", +"........aS.Ka4biaTbJbJbia1a9bCaIa4#f#2#b#b#b#b#b#b#b#b#b#b#b#b.B#b#b.B#b.a#b#b#b#b#b#b.7#b#b#b#b#bb8a3.......pb8#e..aLbO..aUaDa6aDa8..bfbi..bRb8bf..aQ.b#faQ...9b8#faU..aQaUb8#f#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#3#b#b#b#2#b#b#b#2#faKbiava4.d.x.c.cbj.c.b#f.k....", +"........ax.zbcbibo#3.bbUbobGb.bo.9#e#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.7#b#b#b.7#b#b#b.7#.#b#bb8aLa8bP..aQb8b8aQaEbH...pb8b8b8b8aUb#bO..bHbm..bfb8b8bYaUaU#ab8bm...5bP..bdb8#3#b.B#b#b#b#b#b#b#b#b#b#b#b#b#b.B#b#b#b#b#b#b#2#b#b#b#b#b.a.a#b.a.7#fbaasbraZa4.c.c#Vbj.9.b#fbE....", +"........aX.abIbabd.b.bbla5b.boa9.e#f#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#2#b#bb8aMaUb8bm..aLb8a0aWaZ..a4b8#bb8b8aUaYbO..aE..aQ#eb8#e.BaUaQ#f#f..aMb8b8aUaU#f#f#3#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.a#b#b#b#b#b#b#b#b#2#b#2#b.7#b#3#ebdasaFaZaC.x#V.xbj.c.b#f.j....", +"........bM.KaZbiba.a.bbFa1b.aIb.bj.##2#b#b#b#b#b#b#b#2#b#b#b#b#b#b#b#b#b#b#2#b#b#2#b#b#b#b#b#b#2#bb8aLaUb8b8a0..aIaLaEbR..aZb8#fb8b8aUbxbO..aZbI....bIb8#faUaUb8bfaQaU..aUaU...qb8.z#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.a#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#fbnaKaZbnbbbj#V.cbj.9bJ#faR....", +"........bB.BaZbdbn.B.cbla9ba.qb..c#e#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.a#2#b#b#b#2#b.a.a#b#bb8aU..#eb8#V......a0.5......aQ......a1bH..a9b8#c....aE.z..aQbC..aU##.p.pbc....a4b8#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#2#b#2#b#2#3#fbkbibnas.e.c.c#V.9.x#V#faR....", +"........bGaqa4baav.Bbcbaa1aIaJbA.b#e#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#2#b#2b8a9aE#b#bb8a4.lazaIb8bja2bfaybMa1aTb8bc#5aZ#fb8#ca5aY.ybibHaZb.#qb8b8b8b8#qaVaZ#f#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#e#b#b#b#b#b#b#2#b#b#b.a.a#b#b#2.7b8biaJbkbna4bjbJ.cbjbjbJb8aX....", +".........q.#bbb.av#2bjbpaHa9a1bh.z#e#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#2#b#b#2#b#b#b#b#2b8b8#b#3.bb8b8b8b8#bb8b8b8b8b8b8b8#e#fb8b8#.#3b8b8b8#fb8b8b8b8b8#3.z.b#3b8b8b8.7#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.a#b#b.a#b#b#b#b#2#faZbobnataCbc#V.9ao.c.cb8.m....", +".........q.aa4b.bn#bbjbFboa9boaI.c#e#b#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b#b#b#b.a#b#b#b#2#b#b#b#b#b#b#b#9#b.7#2#b#2#b#2#b#.#3#2#b#b#b#b#2#3#2#b#2#b#b.a#2#b#b#2.a#3#b#b#b#b.a.a#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.B#b#b#b#b#2#b#b.a.a#2#b.a#b#2#b#b#.b8bOboaZbka4bu#VbJbj.x.8b8.m....", +"........a5.aa4aKbi#bbbbFa9a9a9bl#3#e#2#b#b#e#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#b#b#2#b#2#b#b#b#2#b.a.a#b#b#2#b.a#b#b#b#b#2#b#b#b#b#2#b#b#3#b#b.a#2#b#b#2#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.a#b#b#b#b.a#b.a#b#2#.b8a4aIa4bkaZ.9.c#Vbj.c#Vb8bL....", +"........a2.aaZbdaZ#9bba9bBaIbgbd#2#e#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#b#2#b#b#b#b#b#2#b#b#b#b#b#b#b#2#b#b#b.a#b#b#b#b#b#b#b#2#b#b#b#2#b#b#b#b#b#b#b#b#b#b#9#b#b#b#b#b#b#b#b#b#e#b#b#b.z#b#2#b#b#b#b#2#2#b.a#b#2#b#2#2#fbbaJbObkaCbj.c.c.9bjbJ#fbL....", +"........bO.aavbabb.za4bobBaIa5ba.z#e#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#2#b#2#b#b#2#b#b#b#b#b#b#b#b#b.B#b#b#b#b#b#b#b#b.B.B#b.B#b#b.B.B#b.B#e#b.B#b#b#e.B#b.B#e.B#b#b#b#b#b#b.B#b#b.B#b#b#b#b#b#2#b#2#b#b#b#2#b#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b.7#b#2#ebjboavbnaZbj.x.cbjbc.cb8bL....", +"......aPbJ.cbnbkbj.zbn.qbpaIbfba#b#e#3#b#b#b.7#b#b#b#b#2#b#b#b#e.B.B#b#e.B.B.B#e.B#e#b.B#b#e#b#b#b#b#b#b#2#b#b#b#.#b.a#.#2.7#3.7#..7#.#.#.#.#.#..7#.#.#2#2.7#3.a#b#b#2#b#3#b#b#b.B#b.B#b#b.B#b#e.B.B#b#e.B#e.B#e#e.B#b.B#b#b#b#b.a.7#b#b#b#b#b#2#b#2#ebca9aAava4bc#V.c.x.9.8b8bz....", +"......a1bubjbkbd.b#bbObpaJa9blbn#e#b#b#2#b#b#b#2#b.7#b#e.B.B#b#e#b#b.z#b#3#.#c#.#c#V#c#V#V#V.9#a###a###a#########n###n#q###q#n#n#q#m#q#q#m#m#q#m#q#q#m#q#n#n#n#n###n###n###a#######a.9#a#V#a#a#c#V#V#c#.#.#c#.#.#.#b#b#b.B#e#b#e#e#e.a#2#b#2#b#b#b#.#fbcbgbnbnaCbc#VbJ.9.c.cb8.o....", +"....aQbpanbjbnbp.c#baZbhaIa9.qbn#b#b#3#b#b#2#b#b#b#e#3#c#a.9#####q#n###m#n#n#q#n###n#q#i#m#m#m#i#m#q#m#n#q#i#i#q#n#m#q#i#m#m#m#m#m#m#i#m#m#i#m#m#q#m#m#m#m#q#m#m#m#i#m#m#m#l#m#n#n#m#m#n#q#q#q#n#m#q#q#q#q#m#q#q#n#q#q#q#n#n#####a#V.B#2#b#b#b#b#b#.#f##aHbnbnaCbc.x.c.c#V.c#fa2....", +"....bxbobbbuaZbr.c.bbnblbPaIaJbi#e#b.7.z#2#b#b.a#2.7#q#n#q#m#m#m#q#l#m#i#m#q#l#i#l#l#m#m#m#l#m#l#q#l#m#m#l#m#l#l#l#l#l#m#l#l#l#m#l#m#l#l#l#m#l#l#l#l#l#l#l#l#m#l#l#l#m#q#l#l#m#l#l#l#m#l#m#l#l#l#l#l#l#m#m#l#l#i#l#m#l#l#m#m#l#l#m#u#n.##b#3#b.7#b#3#ebJbgasbkbnbc.c.c.cbj.cb8.o....", +"....bfaIbbaobRaKaB.zaZa9b.bl.qbn#e#2.a#2#b#b#3#b#b#.#q#l#m#m#l#m#l#l#l#l#l#l#l#l#h#l#l#l#j#l#h#j#h#h#h#j#h#s#s#s#s#s#r#r#g#O#s#r#r#O#r#g#r#r#r#g#O#s#s#h#s#s#r#s#s#s#h#h#r#s#s#h#h#h#s#s#s#h#s#j#s#g#s#s#h#s#j#g#s#s#h#h#j#s#s#l#h#h#g.z.B#2#b#b#b#.#e.zaJasaFaZbc.c.x.c.9.cb8bB....", +"....bhbq.d.cbkbi.b#ebUa5aHa5aIbn#f#b#b#.#3#b#b#2.B#a#l#l#l#h#j#s#u#r#s#s#r#r#O#O#r#Y#O#r#N#L#N#N#N#N#L#N#0#L#L#L#L#z#I#0#z#z#0#y#y#z#z#I#0#z#z#0#0#z#L#0#0#z#I#L#z#L#0#z#0#L#L#L#0#0#z#L#z#L#L#0#0#L#L#L#L#L#L#W#L#L#L#N#L#L#L#L#N#W#y#m.##b#b#.#b#.#e.aaIbkbnaZbb#V.cbj.9.cb8bB....", +"....bpbRbbbcbkbd.b.zbiblbGbgaVaC#e#b.a#2#b.7#b#b.B#q#s#g#N#L#z#x#J#J#C#Z#M#y#x#x#t#x#J#M#y#J#x#D#D#C#J#J#C#D#J#J#C#C#J#D#J#B#C#C#Z#C#C#C#B#D#J#C#C#Z#C#D#C#C#D#J#J#J#C#C#D#C#Z#C#D#D#C#J#J#o#J#J#C#J#C#C#D#J#C#J#D#B#Q#G#K#A#Z#C#J#J#Q#Nb8#3#b.a#2#3#e#baHbkavaZ.dbj.c.c.c.9#fbB....", +"....bobua4anbibk.a.bbHbhbha5aIaZ#e#b#.#b#b#2#2#b.B#m#g#0#y#J#B#L#a#l#m###M#A#J#B#C#C#D#o#C#J#B#J#C#C#o#D#B#B#C#C#C#C#B#C#J#J#Z#C#B#B#C#Z#B#B#C#B#C#D#Z#o#C#o#R#o#C#C#C#B#Z#C#C#B#C#Z#R#Z#C#B#B#C#B#B#C#C#B#B#C#B#Q#y#g#N#N#s#x#R#C#C#K#x.##b#2#2.z#2#b#eblbiaZaZbb.cbJ.c.9.9b8bB....", +"....bzbJbcbubibk#b.cbia9bg.qa9aZ#f#2#b#3#.#b#2#b#b#m#N#0#D#A#X#n#e#.#b.K#C#R#C#C#C#Z#C#C#C#C#D#C#Z#J#C#Z#C#J#C#C#C#C#C#J#Z#C#C#Z#C#J#C#J#D#C#C#C#D#C#C#C#C#C#D#C#Z#C#C#C#C#J#Z#D#Z#B#C#C#B#C#Z#C#C#C#C#Z#C#Z#Z#o#R#m#f#b#fb8#p#K#D#B#K#M.##b.7#3#b#2#b#ebBbsaZaZ.d.c#V#Vbj.c#fbB....", +"....aS.bbjbcbra4.b.bbpa9a9bgaH.d#e#3#2#.#b#b#2#b#2.y#O#y#B#B#Q#j.b##.9#c#C#R#C#B#B#B#C#C#J#o#B#X#C#C#J#C#Z#R#B#C#C#Z#B#1#C#C#C#C#C#o#Z#Z#C#C#o#Z#X#B#C#C#J#B#C#B#R#C#C#C#B#R#C#Z#C#B#C#R#J#C#C#C#B#X#X#C#C#C#C#B#K#m.b.9.9.b#y#K#Z#C#Q#Z.B.B#3.7#2#b#b#ebPbsbnaZ.d.x.x.c.9bj#f.q....", +".......z.ba4bkbs.b.abFa5a5a2blbc#e.7.a.7#3#b#2#b#2#l#Y#I#J#1#R#l#.#a.9.z#D#X#Z#C#Z#C#J#J#Z#Z#1#C#J#Z#C#J#Z#Z#C#J#o#Z#J#1#C#J#C#C#Z#R#1#J#C#Z#C#B#B#J#D#Z#C#B#B#1#C#J#Z#C#R#C#D#J#C#B#Z#R#J#C#Z#C#C#1#C#C#Z#J#Z#R#U#l#..9#V.N#x#R#C#C#Q#A#e.B#2#b#b#3#2#faIaKbnaAbb.cbJ.9bj.cb8.q....", +"......bBb8aCbibi.b.cbNa9aHa1a9.d#e#2.7#3.7#2.7.a#b#l#Y#y#D#R#X#l#.#a.9#.#C#Q#C#Z#Z#Z#C#1#J#C#C#C#R#C#1#J#J#Z#C#B#C#J#Z#C#C#Z#C#o#J#Z#J#C#B#C#C#C#C#Z#Z#C#C#C#C#C#Z#C#J#Z#Z#Z#C#1#o#Z#o#J#1#C#o#Z#B#Z#Z#R#C#1#C#R#X#l.b.9#a.a#y#Q#B#Z#R#X#b.B.z#2#.#2#b#eazaKbnbnbcbj#V#Vbj.9b8.q....", +".........8.xbdaZ.bbjbka1a2bfbgbc#e.7#2#b#2#.#b#b#2#j#N#z#t#X#R#l#e#c.b.K#D#Q#J#C#D#J#1#D#Z#R#J#J#Z#C#J#Z#Z#D#Z#J#C#R#Z#D#Z#X#C#C#1#M#J#o#Z#J#R#J#J#C#R#J#Z#R#D#C#Z#C#Z#Z#J#C#Z#J#Z#R#J#C#o#C#C#R#C#C#J#Z#Z#Z#Z#R#R#l.z#a.8.B#I#U#J#C#R#Q#3.B#2#b.a#b#b#fa5bqaAbnanbj.c.cbjbjb8.q....", +"........a9aqbiaZ.z#.bibBaHa5bl.9#e#3#b#.#2#b#2#b#.#h#r#y#Z#1#B#m#V##.8#a#X#X#J#C#Z#1#J#1#C#J#Z#C#C#1#C#Z#Z#1#1#C#J#Z#1#C#J#R#X#J#R#R#C#Z#Z#1#C#C#Z#Z#Q#Z#Z#R#R#J#C#Z#1#1#R#J#R#C#B#C#B#Z#C#R#B#J#1#Z#C#A#Z#C#B#B#Q#n.K.z#b.K#I#Q#Z#B#H#F#..K#2.a#b#2#2#faIbpaZaAbbbj.9bJ.9.9b8bG....", +".........maqbiaZ#3.bbOboaHbgaJbc#e#2.a#b#b#2.7#2#.#l#O#y#J#R#J#C#K#Q#A#K#C#C#Z#1#J#C#C#J#C#J#1#D#1#J#1#J#R#R#X#X#C#R#K#Z#1#X#X#U#X#K#X#R#R#K#1#R#Q#X#X#R#Q#R#Z#1#U#Q#Q#Q#K#C#Z#Z#C#C#C#C#B#C#R#C#R#C#C#R#C#1#J#B#C#y#y#J#y#B#A#Z#Z#C#C#F#a.##.#2#b.z#2#faIbpa4aAbIbj.c#V.9.c#fbG....", +".........k.zbiatbJ.xbnb..qa1a1bc#e#b#.#3#3#2#3#b#c#l#Y#z#C#Z#X#K#Z#1#Z#B#Z#R#C#C#J#1#1#J#Z#1#J#Z#Z#J#C#B#Mb8#h#U#Q#Ob8#0#P#m#.#q#n#.#q#T#y#e#r#w#L#c.7#z#Y#b#B#U#n#n#q#c#h#P#C#C#1#1#J#J#B#C#J#Z#Z#Z#Z#J#C#Z#Z#C#B#K#T#T#T#U#R#C#C#1#H#K#V.K#3#b.a.a#3#fbdboaAaZ.ebj.c.xaobjb8bG....", +"........ax.bbRa4.b.bbibAbla1a1#V#e#b#2#2.7#b#2#2#.#l#k#I#B#1#R#j#e#V.##0#Q#J#Z#C#Q#C#J#C#J#C#B#A#C#1#D#Q#Y#b#b#s#S#nb8#I#O.#.K#fb8#e#2#l#Lb8#N#M#eb8#s#Q.7.K#Z#lb8#f#fb8.b#l#U#1#J#C#R#X#C#1#o#C#1#A#1#R#1#J#Z#Z#X#A#N#..9#.#I#Q#Z#J#B#U##.##2.a#2#2#3b8bda9bnaAa4bj.x#Vao.9#f.r....", +"........bKbJaZ.p#..caAb.a9bAa1.e.##2.z#2#3#b#.#b#.#h#N#y#M#R#1#q#.#V#e#z#Q#M#1#R#J#1#J#C#Z#1#J#J#D#M#Z#Q#L#3.B#g#w#l.K#L#l.B#O#0#0#L#3#q#0#.#q#ab8#h#U#1.9#V#z#a#V#L#L#r#9###U#J#C#1#Z#C#C#C#B#Z#C#J#Z#C#J#Z#Z#1#R#Z#q#b#..B#y#Q#J#C#R#T##.##.#2.7#3.7b8bibpaFaZbbbj.c.c.cbj#fbG....", +"........bK.BaA.e.baobnbFaTa9a5a4#f#.#3.7.7#2#2#b#V#l#O#y#M#R#X#l#V.c#b#y#K#C#C#J#J#C#1#C#C#B#C#J#Z#1#C#R#L#.#V#q#W#r.K#L#l.B#C#T#T#z#b#l#0#.#a#e#a#B#U#D#nbJ#0#a.9#S#E#N.B#l#S#Z#o#B#C#C#B#Z#C#B#1#D#R#1#C#C#R#D#B#R#l.b.9#b#I#U#C#Z#X#U#a.##b#3.a#2#3#fbibpaAaA.dbj.c#Vbjbjb8bP....", +"........bK.zbkbb.bbcbnbPa5bga9bj#e#b#2#2#2#b#2#e#V#l#r#y#Z#R#R#l#..9#b#I#Q#C#C#Z#Z#C#J#X#J#J#B#C#C#C#o#R#L#.#ab8#j#W.##0#l.K#D#R#Q#I#b#q#IbJ#.#q#G#Q#o#R#a#.#y#a#c#Q#Q#r#b#m#K#R#J#C#R#1#C#Z#B#C#B#X#J#1#Z#Z#C#X#R#C#l#..9.z#y#Q#C#B#C#F##.#.7#2.7#2#3#faKaJaAaZ.dbj#V.c.cbj#fbP....", +"........bK.abkaC.c.xavbAbza1bP.x#e#.#3.7.a#2.7#b#V#l#Y#I#D#R#R#lbJ.9.z#y#R#J#Z#C#D#R#J#J#Z#C#D#J#C#J#C#R#L#b#m#j#l#q#b#W#l.K#y#Q#R#0#.#m#0#..z#N#w#D#R#1.9#c#y#a.8#Q#Q#r.B#l#U#M#1#C#D#J#C#J#Z#C#C#D#C#J#C#Z#Z#Z#1#R#lbJ#a#.#y#K#M#C#B#U##.##3.z#2#3.7b8aKbpaZbna4bj.c.cbjbjb8bP....", +"........aRaqbnaC#.bjbnaIbGa9a1bc#e#..7.a#.#2#2#b#V#l#Y#I#Z#R#Q#q#e#c#f#z#K#B#C#Z#B#C#1#J#Z#1#C#R#1#J#J#Q#L.K#Y#N.K#V.b#0#l.K#D#X#Q#z.a#q#L#c#V#l#A#Q#R#D###V#z##.8#S#E#N.B#m#S#Z#o#Z#o#Z#1#o#J#Z#R#R#1#X#Z#J#R#C#B#X#m.K#.#f#p#F#C#B#B#K##.##..a#2.7#3#fbiaHbnaZa4.x.c.c.9bj#fbP....", +".........fbJbkbc.bbjbdbBa9bAa1.e#f.7#2#2#2#b.7#b#c#l#O#y#C#R#Z#s#j#l#h#D#Z#J#C#C#B#1#D#J#C#J#Z#1#M#C#C#R#W.B#u#L#q#c#b#I#l.##x#R#Q#z#3#q#0.b#V.B###B#U#D###c#y.9.9#I#I#h.a#l#Q#C#C#B#B#1#C#C#C#J#Z#X#1#J#Z#C#C#X#Q#Z#l#n###m#J#1#J#J#B#E##.#.7#3.a#2#2#ebkboasbna4.x.c#V.c.9.#bW....", +"........aR.8bdan.c.xbaa9b.a5bB.d#f#.#3.7.7#b#3#b#c#j#r#y#J#Z#C#Q#P#P#T#B#C#Z#Z#D#1#J#J#Z#J#Z#C#C#1#J#Z#Q#N#f#l#P#r#e#.#L#l.K#J#U#Q#I#b#q#I.7###q#f#j#K#1.9#.#y###V#e#e.7.b#l#K#B#C#C#C#Z#C#C#B#C#C#R#J#B#Z#1#J#Z#Z#Z#H#R#Q#T#Q#J#Z#Z#B#K###f#3#2.z#2.7#fbibpbnbk.dbjbj#a.c.cb8.s....", +".........jbJbkaC.banbnb.a5a5aI.d#e.7#3.7#3#b#2#2#.#h#Y#I#D#1#R#B#z#L#D#R#Z#J#1#C#D#J#1#Z#1#X#M#D#Z#1#C#Q#L.##g#S#l#V.7#L#l.B#t#Q#R#0.a#n#z#e#k#Y.a#f#z#U###c#z#q#.#c#c#a.b#m#T#C#C#B#C#D#R#C#C#X#C#J#C#Z#Z#B#Z#o#J#X#G#K#A#Z#C#R#J#C#R#K.9.##.#b#3#3#2#fbkbqaZaZbbbc.c.c.cbj#f.s....", +".........jbJbian.b.xbibCaJbhbg.p#f#3#..a#2.7#3#b#V#l#O#y#C#Z#Q#mb8b8#z#X#C#1#C#C#Z#Z#C#J#o#J#Z#Z#o#Z#Z#Q#Lb8#l#Q#B#hb8#N#l#c.7.a#e#b.B#s#0b8#h#Q#h#..B#O#m.a#z#a#.#R#G#N#e#n#S#C#B#C#C#B#C#1#C#C#1#X#J#R#B#C#1#Z#1#J#A#l#f#f#I#K#Z#Z#C#U#a.#.a#2.7.z#3#fbnaJbkaZaZ.x.x#Vaobjb8bW....", +"........a8bDavbc.bbubda9a5a9a1.e#f#3#.#2.z#2.7#2#.#l#O#I#J#X#1#m#..z#I#K#C#Z#o#Z#J#1#C#C#1#J#Z#D#R#C#C#R#kb8#h#F#Q#n#f#L#Z.9#e.7#..B#a#w#ub8#s#P#J#n#e.7#b#V#y.7.8#U#F#h.##m#U#J#C#Z#C#J#C#C#Z#C#C#C#C#1#C#Z#C#B#Z#R#C#q#b.7#y#Q#C#Z#Z#E#a.##2#b#2#b#2#fbibpbkbna4bc.c.x.c.9.#.s....", +".........jbDaAbc#c.dbRbaa9.qbh.e#e.7#3.7#2#b#3#b#.#l#N#z#C#X#R#m.7#b#y#Q#C#o#B#J#Z#Z#C#C#Z#Z#Z#o#C#J#1#Z#t#M#R#Z#C#y#J#Q#C#y#M#t#M#y#R#R#y#t#R#C#B#y#y#M#I#B#M#I#B#R#J#z#z#G#1#C#1#B#D#C#Z#C#o#1#J#o#1#J#C#o#C#C#Z#R#1#l.z.a#y#K#D#B#X#Q#c#e#b#..a#3#2#fbpb.avaZ.pbc.c.c#V.9b8bF....", +".........fbJbiaC.b.cbkbabla9a1bc#f#3.7#b#2#2#b#b#c#l#O#I#B#R#1#l#..z#M#Q#C#J#C#C#X#C#Z#J#J#C#1#X#J#C#J#C#A#Q#X#J#C#A#A#R#Z#Q#A#X#X#K#R#C#R#R#1#Z#A#R#Q#A#R#X#R#K#B#D#B#A#K#R#J#Z#C#C#1#X#C#Z#C#C#1#G#C#1#J#C#Z#B#X#1#R#l.7#.#x#Q#C#Z#o#K#V.##.#b#2#b#.#fbibqbnaZ.dbcao.c.cbj#f.s....", +"........aR.bbibb.b.cbna9a9bobh.d#e#.#2#.#2.7#3#2.7#l#O#I#M#R#1#l.7.B#y#X#D#C#C#R#J#Z#J#C#X#Z#D#D#1#J#C#B#R#J#C#C#C#Z#Z#C#C#J#D#C#1#C#J#C#C#C#B#J#J#C#D#C#C#B#C#C#C#C#C#R#C#C#J#C#C#R#C#J#Z#D#B#1#C#C#C#C#C#Z#C#H#C#Z#Z#l#3.z#x#Q#J#J#R#K#V.K#2#3#b#b#2#fbiaKaAaAbtbc.c.c.c.9.#bW....", +"........aR.zbian.b.cbRbo.qa5a1aZ#f#2.z#2#.#3.7#2.7#l#Y#z#M#Q#B#n.##f#y#K#C#C#B#Z#J#Z#1#Z#C#B#D#1#C#1#C#Z#C#J#C#C#J#R#C#D#Z#B#C#1#Z#C#J#B#Z#C#R#D#C#Z#o#C#Z#B#D#C#Z#C#Z#Z#J#Z#R#C#B#H#C#C#1#Z#C#X#C#D#Z#Z#C#Z#Z#C#C#R#Z#q#fb8#I#F#C#Z#A#Q#.#e.7#3.7#3#b#ebibraFaZbcbcbj#V.xbj#fbP....", +"........bx.zbnbc.b.cbRb.a5b.bAbn#f#..z#.#b#2#.#b#2#l#s#I#J#1#J#z#I#J#R#J#Z#Z#J#R#1#C#J#R#Z#C#R#J#Z#C#1#J#R#1#B#C#D#B#Z#1#D#C#1#J#C#1#C#1#C#Z#J#B#B#Z#C#Z#J#Z#R#1#J#B#C#B#B#C#C#X#C#J#Z#1#C#o#B#C#R#B#C#Z#B#C#Z#Z#Z#C#C#h#h#L#v#C#R#J#B#Q#..B#3.7#3#b#2.#bdbraAa4a4bc.cao.cbj#f.r....", +"........aR.xbkbc#.bjbibpa5bPa1bn#f#b#.#.#2#2.7#b#b#l#r#L#D#C#R#F#T#X#D#C#C#J#B#C#J#1#J#1#B#Z#J#C#C#J#C#C#Z#D#J#1#C#C#1#J#J#Z#D#Z#C#J#C#J#J#C#C#J#D#J#C#C#C#Z#C#D#Z#C#C#R#J#J#1#D#C#Z#C#C#Z#C#C#C#C#J#Z#C#C#1#C#C#C#1#C#K#P#w#H#Z#J#C#X#Q#b.B#2#2#b#.#3#fbdbiaAaZ.pbj.x.c.x.9b8bP....", +"........bKbDaZbj#VbcbaboaVa9bBaZ#e#2.7#3.z#b#3#2.a#m#r#L#J#B#Q#N#c#t#F#J#B#1#B#C#X#Z#R#0#s#Q#Z#R#1#Z#C#1#C#R#C#1#C#C#Z#B#1#Z#1#C#Z#C#1#1#C#Z#Z#Z#X#C#1#J#C#B#1#Z#1#Z#C#Z#R#1#C#Z#B#B#C#X#B#C#C#Z#1#R#1#R#C#C#Z#J#B#R#B#Q#L#l#M#Q#Z#J#A#X#b.B#.#b#3#b#2#baKbkaZbnbbbc#V.xaobj#fbP....", +"........aRbJavbj.bbcbsb.b.bla1bn#e#2#3.7#2#b#.#2#b#q#r#z#D#1#B#nb8#I#F#J#C#C#C#Z#R#C#C#y#y#B#Z#R#J#Z#C#J#Z#R#1#C#J#C#1#X#C#J#D#Z#B#R#C#J#J#C#C#Z#1#C#B#o#C#B#R#X#C#J#1#o#B#Z#C#C#C#B#B#1#C#C#C#Z#Z#H#1#C#1#J#R#1#B#Z#Z#R#cb8#x#Q#D#Z#Q#X.B#e.7#3.7#2#b#ebdbraAaZbb.d.c#Vao###fbP....", +"........aRbJaA.d.bbjbibabgbGbGav#e#2.7#3.7#b#2.7#b#q#s#0#D#R#R#m.##y#K#C#J#C#C#R#J#1#J#R#R#D#Z#C#1#C#1#J#C#Z#C#Z#C#J#Z#o#J#C#Z#C#C#C#1#C#Z#1#C#Z#C#C#Z#1#C#J#1#J#C#R#J#Z#C#Z#C#Z#C#C#B#J#C#C#Z#C#R#C#J#B#C#1#J#B#Z#C#R#1#a#e#M#Q#Z#C#R#C.B#b.7#3#b.a#2#baKbkbnaZa4bD.c.9.9bj#fbP....", +".........j.zaZbj.b.db.bPaJbhaIb.#e#b#..7#2#2#.#2#e#q#r#L#y#X#R#l.K#z#Q#C#1#J#B#C#J#C#R#J#B#B#C#C#C#C#Z#B#1#D#1#C#B#R#C#J#Z#1#D#1#Z#D#J#R#J#Z#R#J#C#Z#R#J#Z#R#J#Z#R#Z#C#1#J#C#R#J#B#R#D#J#Z#B#Z#X#C#D#C#1#C#Z#Z#C#C#1#R#R##.K#x#K#Z#J#Q#D.##b#2.a#b#2#b#2b.aAaAbn.dbj.c.x.cbjb8bP....", +"........aR.KaZbc.b.Abda9bPbaa2bi.B#b#b#2.z#2#b#b#b###r#L#M#R#R#m#b#y#K#J#1#Z#D#B#1#Z#C#1#C#C#B#1#Z#1#R#Z#B#C#J#1#J#Z#1#J#C#X#Z#C#Z#1#J#C#Z#Z#C#C#1#J#X#1#Z#B#J#C#1#D#1#B#B#J#1#R#C#Z#C#1#C#Z#C#C#B#Z#Z#R#Z#Z#X#J#Z#C#R#R##.K#x#Q#Z#C#K#M.##b#.#2#b#3#e.8blavbnaAbtbc.9.c.cbj#f.r....", +"........aR.za4.9.c.dbkb.babla5bU#b#2.a#.#2.7#2#2#b#a#r#N#x#X#1#db8#I#K#Z#C#C#Z#C#C#1#J#C#Z#J#Z#D#X#J#C#C#C#1#C#C#1#C#1#C#Z#C#Z#J#C#B#C#Z#C#C#C#R#J#1#o#C#o#D#B#Z#C#Z#C#C#Z#C#1#J#1#Z#Z#C#C#C#B#C#C#Z#Z#R#C#Z#J#C#C#C#1#R##.##x#Q#J#C#K#yb8#2#b#3#2#.#fbcawaFavaZaC.d.c#V.x.9#fbG....", +"........bKbJbRaobJbcaZbCbPb.bAb.#b#b#.#3.7#2#b#2#b#c#r#N#x#R#Z#d#c#t#Q#C#J#R#B#D#C#Z#1#J#C#1#J#1#C#J#Z#Z#C#C#1#J#1#J#C#C#C#C#1#C#Z#C#C#B#C#Z#o#C#C#B#C#C#Z#Z#C#B#C#Z#1#J#C#B#1#C#B#Z#D#J#R#C#Z#R#C#C#1#J#o#R#C#C#B#C#X#B.7#f#x#U#J#H#F#W#f#b#b.7#3.7#f.da2aFaFa4#qbcbj.8.c.9#fbG....", +"........a8.zbnbj.cbcbdbdbGa9b.a9.8#e#2.7#2#b#.#3#b#.#r#N#D#1#J#J#K#U#A#C#Z#C#Z#Z#K#C#C#C#Z#B#A#G#C#1#J#J#1#A#1#C#C#B#1#X#C#C#1#C#J#X#B#Z#1#J#B#H#Q#C#1#C#C#Z#1#R#Z#o#C#Z#A#R#J#Z#B#C#1#Q#C#Z#C#Z#X#Q#1#C#B#C#B#B#Q#C#o#C#y#B#K#C#1#J#F#Lb8#2#b#3#b#2#e.dbpaFbnaZanbjao.c.cbu.#bG....", +".........j.zaAbc#VbcbdbqaTa9b.blbj#e#.#3.7#2.7.7#b.7#h#N#y#C#C#Q#K#C#C#B#C#C#C#R#J#1#J#Z#C#1#J#J#Z#J#C#Z#R#J#o#J#Z#Z#1#C#C#J#D#Z#R#C#C#C#C#C#R#C#C#J#J#Z#C#B#C#Z#C#Z#Z#o#Z#B#C#D#B#B#B#1#J#C#B#R#J#J#B#C#J#Z#C#B#B#C#Z#Q#w#K#B#J#J#C#T#r.##2#2.7#3#2#faZbdavbnaZa4bj.9.x.cbj.#.q....", +"........bK.bbIbj.b.dbHbabpa9a5bh.d#e#b#.#3#2#2#.#2.a#g#N#z#C#o#R#B.7#z#U#B#C#R#C#J#B#R#1#C#R#J#C#Z#1#Z#B#o#J#Z#C#C#R#C#J#Z#R#C#1#R#C#J#B#Z#Z#B#C#C#Z#R#C#B#B#D#B#C#J#1#B#C#B#1#C#B#B#C#J#X#B#C#X#1#D#Z#Z#B#C#R#J#C#X#U#r#f#C#Q#Z#C#Z#T#j.##3.7.a#2.7b8bibdavaZaZbcbjbj.x.9.9.#.q....", +"........bK.baZ.x.cbcbkbdb.a9aIbl.d#e#2.7#2.7#b#2#2.a#l#O#y#Z#Q#n#g#n#y###M#Q#J#R#R#o#C#X#J#J#X#o#C#C#1#C#R#R#1#C#C#Z#1#C#C#B#B#C#J#R#C#Z#R#o#C#R#B#B#B#1#J#B#X#R#C#B#C#H#R#J#Z#1#C#B#o#B#B#R#Z#J#1#R#C#1#B#C#Z#o#B#Q#Nb8#f###t#Q#B#Z#T#l#f#3#b#b#3#2#fbpbrasbka4.dbj.x.cbj.c#f.q....", +"........aSbJa4bj.c.pbHbda9aI.qbBbR#f#.#..7#3#..7#3#e#m#N#L#Z#J#0#n#c#f#N#Q#J#Z#C#J#1#J#C#Z#1#J#J#1#J#C#B#B#J#C#o#Z#C#Z#C#Z#C#D#Z#1#J#Z#J#J#Z#Z#Z#M#C#B#Z#C#R#J#Z#o#C#Z#R#C#1#C#J#C#Z#B#J#Z#C#R#C#B#J#C#C#C#Z#Z#C#B#B#a#n#W.K#z#K#M#C#F#n.##.#2#2#.#e#baJbibkbna4.ebj.x.x.c.9#fbB....", +"........aSbJaZ.c.xbjaZbFbra5bPaHbk#e#2#3#.#b#.#2#2.B#n#r#z#J#G#A#0.7#L#F#R#Z#o#Z#R#1#C#Z#C#1#B#A#1#C#Z#C#C#R#B#X#C#1#C#B#Z#R#B#Z#C#1#B#1#Z#C#Z#1#X#B#C#C#Z#C#Z#B#X#C#Z#Z#B#Z#Z#R#Z#R#C#B#B#C#C#Z#B#R#Z#C#Z#B#C#C#Q#R.9#L#P#.#y#U#J#X#F#a.##2.a.7#2#e#.bpasbRaAa4.pbj.c.c.c.9#fbB....", +"........bKbJaZ.c.cbjaZboaJbNaJbfbN#e#2#..7#b#2#.#2#b#a#r#0#D#o#R#ZbJ#C#Q#C#J#Z#o#R#Z#J#C#Z#C#Z#B#C#C#C#Z#B#R#1#J#C#Z#R#R#C#J#o#Z#B#B#1#C#C#C#C#Z#R#C#Z#Z#C#B#R#R#Z#C#C#B#A#B#C#C#o#X#o#X#Z#C#Z#C#1#R#1#C#1#J#B#B#Q#1.9#p#U#c#x#K#J#R#K#V.##.#2.a#2#ebjaJaFbnaZa4a4bjbjbj.9bjb8.v....", +"........bEbvaA.c#Vbjbka5a9bFbGa9bd#e#b#b#.#2#b#b#.#e#.#r#N#M#R#Q#x#f#z#R#B#1#C#C#1#J#C#1#C#Z#1#J#C#Z#R#C#C#o#C#R#J#C#R#Z#C#1#C#1#J#Z#Z#J#Z#Z#Z#Z#Z#Z#Z#Z#C#Z#1#Z#C#B#C#R#Z#J#C#1#C#B#R#Z#Z#o#Z#B#Z#Z#C#Z#B#C#Z#B#R#o.9#j#Lb8#y#Q#J#X#Q#b#e#b#3#2#2b8bIb.bnbnaAaZa4bj.c.9bj.9b8bB....", +".........kbJa4bj.cbjbibNb.bGb.b.bp#c#b#2#.#.#2#.#2#b#b#u#N#J#J#Q#y#s#C#X#Z#J#B#Z#C#Z#R#C#1#B#J#J#R#C#C#C#1#J#R#C#C#Z#J#C#1#R#J#o#Z#J#C#R#Z#B#X#C#J#Z#X#C#Z#R#J#C#R#C#B#1#J#Z#X#C#B#B#C#J#Z#B#Z#X#Z#J#Z#1#C#B#Z#C#B#J#l#a#c#m#C#X#C#A#R.K.B#.#b#3.7#fbnb.aZbnaZat.pbj.cbj.xbjb8.v....", +".........k.xa4.cbJ#VbibpbNbAb.b.bo.x#e#.#2.7#b#2#..7#e#m#N#y#Z#o#B#K#B#C#B#o#Z#1#C#B#C#Z#Z#C#B#C#B#1#X#B#C#1#C#Z#Z#1#B#C#C#X#1#Z#o#1#C#Z#C#Z#1#Z#R#Z#X#Z#Z#R#J#C#Z#Z#1#C#B#C#R#B#B#B#1#Z#Z#Z#o#1#Z#X#C#X#Z#Z#R#Z#B#C#R#Q#G#K#B#Z#Z#K#D.##b#b#.#b#2#ebibpa4avbnaAa4bc.9.cao.9#fa2....", +".........kbJ.ebj.c.cbnbCaJbla9a9blaZ#e#.#2#.#b.7#b#..##q#N#y#C#B#1#Z#o#Z#C#1#C#o#B#C#J#1#C#C#Z#C#X#Z#C#C#R#C#Z#o#1#C#X#C#Z#Z#C#C#1#R#J#Z#1#B#C#B#Z#Z#B#Z#B#Z#X#J#1#Z#C#B#A#1#C#Z#Z#o#X#C#Z#B#A#C#Z#1#C#H#B#Z#J#R#Z#B#X#B#R#B#C#Z#B#K#tb8#b#3#b#3#b#ebAbHbnbnaAbnbb.d.c.x.xbj#fbz....", +".........h.xaCbJ.cbjaZb.bPaVaJaIa9bH#f#2#b#.#2#b#2#3.B#.#N#I#Z#Q#C#C#Z#Z#R#G#B#D#C#1#C#C#B#1#C#Z#Z#J#Z#Z#Z#C#X#B#1#C#J#C#1#C#Z#R#Z#J#Z#Z#C#C#1#C#Z#Z#Z#B#Z#Z#C#X#K#R#J#X#F#U#Z#C#B#B#C#C#R#J#Z#B#C#Z#H#C#B#X#J#J#B#B#C#Z#C#C#B#B#D#T#zb8#b.7#3.7#f.xawbnbnbRaAa4bb##.x#Vao.9#fbz....", +".........k.xa4.c.cbjbkbob.bPbaboa9bi.a#b#.#.#2#b#.#b#b#e#h#y#C#O#g#P#C#B#F#a#0#Q#X#Z#1#J#J#H#A#X#C#Z#C#C#Z#R#B#Z#Z#1#R#X#Z#Z#1#C#Z#X#R#1#Z#C#B#B#A#Z#1#Z#C#B#A#F#a#H#U#Z.5#n#Q#Z#B#Z#1#X#C#Z#C#B#1#X#Z#1#C#C#Z#B#R#Z#Z#Z#H#R#H#C#C#T#Nb8#3#3#b#3#fbOa2bnbnbnaFaA.p.cbjbjbj.c#fbz....", +".........h.zbb.x.c.xbkb.bNaVbpa5bab..b#e.7#2.7#b.z#2#2.##q#y#Z#j.B#0#P#F#lb8#x#U#U#K#X#Z#Q#U#Q#U#X#D#K#T#R#U#Q#Z#C#B#Z#B#Z#C#J#Z#B#1#C#C#J#Z#R#1#C#Z#D#Z#B#Z#K#J#.#n#F#I.##a#Q#R#K#T#Q#Z#K#Q#F#U#K#K#Q#J#C#X#K#U#K#J#J#A#T#K#R#C#C#K#kb8#.#b#2#2b8bdaIbOaZbnbna4aCbcbj.cbjbj#fbM....", +".........h.ba4.c.cbja4bdbpbAbBa5b.a1bc#e.7#3#2#3#2#2.7.B#.#I#C#u.B#a#Z#I#e.B#Z#S#j#q#r#w#D#h#l#q#C#T#L#l#H#s#g#R#Z#R#C#C#Z#1#o#Z#B#D#Z#B#1#C#X#J#J#Z#X#C#B#B#1#J#a.##L#Z#3###T#M#h#g#D#T#0#N#Y#L#L#h#L#P#Q#B#N#g#I#U#K#D#r#j#t#G#J#F#jb8#.#3.z#2#fbaaKbRbnaAbkbnbbbc.xbj.c.x#fbM....", +"........a3.xbcbj.caoa4bdbpb.aVaJbhb.aZ#f#2#b.7#b#b#.#2#b#e#L#1#r.b.B###2#3#c#Z#m#e#s#.#L#Yb8###n###I#ab8#I#b.B#A#R#Z#B#B#J#X#B#C#1#X#o#1#B#1#J#X#R#C#B#1#C#C#Q#Z#a.c.7#l#V#q#Q#N#l#..A#J#ab8#n#2.##n#.#L#T#V#b#n#c#H#M#f#V#u#C#1#Z#F#qb8#2.a.a#e.zaIbkaZbnasaAaZaCbj.cbj.xbj.#aY....", +".........h.xa4.9bJ#VbsbdaKa9a9baa9aHbp#b#e.7.a#2#b#.#b#2#f#r#Z#u#2#u#c###m.7#I.7.9#lb8#a#0.a#Y#Nb8#L#l.b#y#V#c#Q#R#Z#Z#Z#R#J#D#B#B#C#Z#J#J#B#B#C#Z#C#Z#Z#Z#B#R#D#V#V#l#.bJ###T#Q#I#l.##O#l.a#Mbj###M#a#a#0#e#u#hb8#Y#nb8#0#Z#C#X#J#K#a#f#3.7#2#fbcbBbkbRbkbnbia4.p.x.c.x.cbj#fbL....", +"........aObJbbbj#V.caZbNbab.bPb.bPa9aI.x#e#2#2#b#2.a#2.7.##q#R#s.B#L#L#x#q.z#y#3#.#g#u#x#L.K#N#N.B#0#n#b#J#a#a#Q#X#Z#Z#Z#R#R#Z#Z#Z#B#R#B#J#o#R#Z#X#C#1#C#Z#C#A#Z.8#V#y#m#e#q#T#l#e#q.B#W#l#b#x###V#x#V#n#L#b#V#q#q#I#h#q#cb8#I#F#Z#K#..##3#2#3#fa4bpaFbn.nbkaAaC.ebj.x.c.9bj#fbL....", +"........aObJbbbj.baBa4bibda9babpa1bCbh.p#f#2.7.7#2.a#2#b#e.a#J#hb8#k#w#R.z#f#0#j#V#N#W#I#N#f#h#Nb8#N#O.8#h#b#.#X#R#Z#R#R#C#C#Z#1#H#R#1#Z#C#B#C#R#X#C#J#o#Z#Z#K#Z#..K#B#M###a#N#2.y#k#f#W#m.##z.9#c#y#c#a#0#c.y#v#x#G#B#x.7.9#B#X#C#X.K.B#.#b#2#fbpaFaAbkbRavaAaZanbc.c.cbjbj#faW....", +"........aPbJbcbj.bbcbkbCazbdb.bAb.bFa5aZ#e#3.7#b#3.7#b#2#bb8#Y#r#a#t#T#M#####A#y#a#c#b#h#N#c#0#l#a#D#R###2#c#j#Q#o#Z#1#C#Z#Z#C#1#J#H#C#Z#B#C#Z#R#B#C#Z#R#Z#B#Q#J.7#a#Z#K#L#n#Q#Y.7.7#c#L#n.7#0#.#d#0.7#m#F#O#e#b#f#L#mb8#b#X#Q#J#U#xb8#2#2#.#f.zbhaZbHavaFbkaZaC.d.c.cbjao.x.#.m....", +"........aP.xbu.x.c.caZbabAbPaJaIa5a9bgaV#e#b#3.z#2#b#.#2.7.##e#v#w#K#R#B#R#F#Q#Z#Z#Q#Q#K#Z#G#R#J#K#Q#Z#Z#G#C#Q#Z#C#Z#J#J#Z#Z#Z#Z#C#J#D#Z#B#C#X#J#M#Z#Z#J#Z#C#J#J#J#A#R#R#x#K#X#M#J#C#Z#H#M#F#Z#J#K#M#M#K#R#J#Z#M#C#G#x#J#K#Q#R#U#w#n.##..a#2b8bkboa4bHavbkaFaZa4bb.9.9.c.9bj#faX....", +"........aPbJbj.x.c.ca4bFb.a9.qbpa9a9aKa5bj#f.7#b.a#b#b#2#2.7#f#c#p#Z#H#G#T#K#A#F#P#T#T#K#E#T#E#E#P#U#T#P#E#T#K#T#U#U#U#K#K#U#U#K#U#U#K#U#K#K#K#U#U#K#T#K#U#U#U#U#P#T#K#U#P#K#T#P#w#P#P#U#w#P#T#w#P#T#E#P#P#P#w#E#P#U#T#w#T#Q#G#v#l#f#2.z#2#2b8blbqbObRbkbiasaAaCbcbj.x#Vbj.9#f.m....", +"........aQbJbc.x#VaoaCbabdbAb.a9bpbPbdbgbn#f#.#b#.#2#2#b#b#b#.b8b8.##b#c#c#c#V###n.5#m#l#l#l#u#j#u#N#k#k#N#W#L#W#L#0#I#y#I#I#x#y#t#M#x#M#x#J#x#J#x#x#x#J#y#y#y#I#p#p#z#p#p#L#W#L#N#k#N#k#h#g#g#j#u#j#j#l#m#m#d#m#d##.5#a.8#c#cb8b8#b#3#2#.#f.zawbRbkbnbHbRbiaZbk.dbj.c.c.cbj#faX....", +"........aQ.8bcbj.bbjbkbRbibaaHa5aIa9aJaIaV#e#b#2#2#b.7#2#b#b#2#b#b.##f#f#f.##fb8b8b8b8b8b8#fb8b8b8b8b8b8b8b8#fb8b8b8b8.##fb8#f.#b8#fb8#f.#.##f#f#f#fb8b8b8b8b8#fb8b8b8b8b8b8b8b8b8#fb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8#f#fb8.#.#.B#3.a#b.7#2b8bnbha4aFbkbHbiavaZaZbc.c.x.x.c.9#fbx....", +"..........bDbcbj.b#VbcbiaJbpa5aJa9blaKbGaIa4#f#b#b#.#2#b#2#b#2#b#b#2#3#3#3#2#2#b#2#.#2#2#2#b#2#2#2#b#2.a#b.a#2#2#2#b#2#b#b#b#b#2#b#b#b#2#e#b#b#b#b#b#b#b#b#b#2#2#b#b#b#b#2#b#2#3#b#b#2.a#2#b#2.a#2#3#2#b#b#2#b#3.7#2.7#2#3#2#2.a.7#2#b#3#b#faIbraZbibibnbibkaAaZbc.xao.c.xao#f.j....", +"..........bDan.x.b.cbIbib.aTbFbla9bob.bkbAb.#f#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.7#b#b#2#b#2#b#.#2#b.7#2#b#b#3#b#3#2#2.7#2#b#2.7#2#b#b#.#3#b#2#3#b#b#b#b.7#3#2#2#.#b#b.7#b#b#b#.#b#2.z#3#2#b#2#b#2#b.a#b#b#b#b.z#b.a#2#b#3.7#3#2#f.cblbObHbnbkbkbkbkaAaZ.d.c.xbj.9.c#faR....", +"...........5bb.x.b.ca4biaKb.b.boa9a9bpbpbabo#c#f#3#b#b#b#b#2.7#b#b#2#b#b#b#2.a#b#2#b#b#b#3#b#b#b#b#b#b#b#b#2#b#b#b#b#b#2#b#b#b#2#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#2#b#b#b#2#b#b#b#2#b#b#b#2#b#b#2#b#b#2#b#b#b#b#b#b#b#b#3#3.7.7#.#3#b#3.7#3#faAbaaZbnbnbdbkbkbkbnbt.dbj.c.x.9bj#faR....", +"..........bubcbc.b.ca4bdbrbdbqbab.a5aHa9bdaIbRb8#2#b#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b#2#b#b#b#2#b#b.a#b#2#b#b#b#b.7#b#b#b#b#b#b#b#b#b#b#b.a#3#b#b#b#b#b#2#b#2#b#b#b#b#2#b#b#b#2#b#b#b#b#b#b#b#b#b#b#2#b#b#b#2#b#b#b.z#b#2#b#b#b#b#2#b#b#2.#bdbnbnbnbiasbRavavbnbb#qao.x.c.cbj#f.j....", +"..........a4bj.x#..9aCbnaKbab.baa9aJa9babobpbP#f#f#3#2#b#b#b#b#b#b.a#b#b#b#b.a#b#b#b#b#b#b#b#b#b#b.a#b#b#b#b#b#b#b#2#b.a#b#b#2#b#b#2#b#2#b#b#2#b#b#2#b#b#b#b#b#b#b#2#b#b#2#b#b#b#b#2#b#2#b#b#2#b.a#b#b#2#b#b#2#b#b#b#b#b#b#b#b#2#b.7#2#fbcbpaZbkbHbHasbkbHbkaA.ebc.c.c.x.cbj.#.j....", +"..........bubj.c.c.ba4bObFa5bobdbobAaJbob.bHaJbd#e#e#e#e#e#e#b.7#2#b#2#b#b#b#2.a#2#b#b#2#b#b.a#b#b#b#b#b#b#b#b#b#b#b#b.7#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b#3#b#b#b#b#b#b#2#b.7#b#b#b#b#f#e.B#e.KbdbnbnbRbRaZavbibibRbnbIao.x.c.9.cbj#f.j....", +"..........bcbcbjbJaobbasb.baaKbpaIbpb.aIbabCa9aKbj.dbJ.b#.#b#e#f#fb8b8#e#e#e#b#b#3#b#b#b#b#b#b#b#b#2#b#b#b#b#2#b.7#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#e#b#b#b#b.7#2#e#b#b.a#b#b#2#b.7#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#e#b.z#3bcbcaCbc.ca4aAaFbsasaFavbibkbsbka4anbj#V.c.x.x#fbK....", +"..........bc.cbj.cbJbbaZbHaIbab.a9b.b.bpa1bNblbN.z.xaCa4bnasbibnasbNa4.c#e#f#f#f#f#e#b#b#b#b#2#b#b#b#b#b#2#b#e#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#2#b.a#b#b#b.7#b.7#b#b#b.7#b#2#b#b#b#e#e#b.a.z#b.cao.cbc.cbjbjaobJ.aaAbkbibkbnbiavbkbibrbnbc.dbj.c.9.8ao.KaS....", +"..........bI.cbj.b#VaCbkbdblbabFaHbab.aIb.bqaVblao.zbcbtanbIbObsbibpbfaJblbgbH.x#..K#fb8#e#b#b#b#b#3#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.B#b#b#b#b#b#b#b#b#b#b#b#b#b#2.B#b#b#b#b#b#b.7#2#b#e#b#e#e#e.a.abjbcbcbcbcbubjaB.b.c.a.a.b.bbJaAbkavbibkbiaFbkbibkbOaZaobj.c.c.c.c#fbK....", +"..........a4.cbj.b.baZbdbiaJa5bobdb.aIbBbabdbBawaZ#.bDanbcbuaZaAbOa4bsbdbob.awbgbgbfbnbb.Bb8#f#f#e#b#e#b#b#b#b#b#b.a.a#b#b#b#b#b#b#b#b#b#2#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b.7#b#b#b#e#e#e.#.K.cbcbvaAa4aZa4bubjanbu.c.c.c.c.c.c.b.aaZbsaAaFbdbsbibrasaAbibnaCbj.cao.cbj.x#fa3....", +"..........a4aC.cbJ.caZbsasbRaJbdbab.a5aJbabGa9blbi.z.cbcbcaCaZaZbnbka4bibabHbibpa5bdbgbfbgbabdbc.b.B#e#f#e#b#b#b#2.a.a#2#b#b#b#2#b#b#b#b.B#b#e#b#2#b#b.7#b#b#b.7#b#2#b#b.a#b#e#e#f#e#e.abjbbbRaZaFaAaAbnbnaCa4a4aZbubu.x.c.cbv.c.c.b.ca4bkasbkbkasbRbsbibkavavbc.9bj.x.c.cbj.#.k....", +"..........a4.cbjbJ.baZasbHbpbobaa5blaHb.bPblbaaJbo#V.##2.7.b.xbcbubkbibkbrbraIaJb.a5babpbabgbza9aIbrbObc.B#f#f#e#e.B#b.7#b.a#b#b#b#b#b#b#b.z#b#b#b.a#b#b.7.a#b#2#b.B#e#e#f#f#e.ba4a4braKbrbpboavbkaFaZaZaZa4aFaAaZ.dao.b.c.b.b.a.b#fa4bqbdbsasasbUbrbdbnbdbnbnbb.9.c.cbj.9ao.#.h....", +"..........a4bJbj.c.ca4aAbraJbNbia9b.aIb.aJaIbUbaaI#e#e#b#b#e#e#e#e.a.z#Vbba4bNbibgaya2aJaHbaaJa9a5a2aIbhbobH.p#.#b#f#f#f#f#b#b#e#b#b#b.B#b#b.7#b#b.7#b#2#b#e#e#f#f#f#e.abcbHbibpbdaKbrbaasbnaAaFbibkaZaZa4bc.c#V.z.b#b.7#b#b#f#b#b#fa4bea4bkbkbdbsasbdbkavbiaZanbc.c.c.cbjbj.K.k....", +"..........bObj.x.c.banbUbabib.aIbAbNbga5a9a5bibBa5#V.#.7#b#2#b#b#b#e#e#e#e#e#b#.bcbIbobAaWb#aJa9bAboa9aIa1bfaIbpbdbraZ.dbD.B#b#f#f#f#e#e#e#e#e#f#e#f#f#f#f#b.bbjaZa4b.aJaJb.bdbqbsbqbkbabrbrbpaTaZbj.x.x#b#e#e#e#b#e#b#b#e#e.c#V#eb8bUbpasbrbkaKbibRbiaKbibkbna4aobj.x.c.xao.K.h....", +"..........bn.caobJ.cbbbHbCbrbaaJb.bNbNa9boaIbAbpb.bab8#b#3.7.a#b#e#b#b#e#b#2#e#e#f#fb8#e#.bkbgaEbga9aKa5a9a9a9aJbgbhaHbFa5aKbkbd.pa4#..x.z.b.c.c.c##bbatbrbobabobpaJaJb.bqbpbdaKbibpaKa1bq.p.dbJ#e#e#e#e#b#b#b#b#b#b.a.baCbibrbJ#e.aa5bnbkbkbdbrbqbdaKbkbkbdbkaZbj.c.cbj.c.x.KaO....", +"..........a4.bbj.c.ba4a4bib.bda9b.blbaaTaHbabab.aIbh#e#e#3.b.cbj.x.z#b#e#e#e#b#b#b#2#b#e#eb8.#.Ab.bfbfaJb.b.a5boa9a9bFbdbgbhbqbpbpbobfbha9aJaHaybmaHa9bpbaaHa9brb.babkaJb.babibgbob.ba.d.c#2#f#e#b#2#e#e#b#b#b.a.b.baobjbc.c#b#bb8aZaIavbkbnbsbdbrbdbibibdbraZa4bc.xbj.c.x.c.K.i....", +"..........bO.bbj.b.cbtaAbdbUbPbpbda9aIbpaHbAa9a9boa9bb#f#2.a#..caZbna4anbj.b.a#e#b#e#b#b#b#2#eb8#f.bbRb#bfaKbda9a9aIbpaIa5aHb.babfbibNbcbbbDbIa4a4brawb.bHb.aKbdb.bUbdbpbra9bFawbobc#b#f#e#b#b#b#e#b.B.a.z.b.caobj.cao#.#b.B.a#e#fbfaKbkaKbdasbrasbibdbrbiasbkaZbj.c.x.cbj.c.B.i....", +"..........bO.bbj#VbvaZbObdbdaKbPbibha5a9bAaIa9boa9bgaH#e#e#b#3.z.BbbbkbsbsbkbObcbj.c#.#2#b.a#b#b#b#e#f.abUbebibNaKa9bBaJbpbUbdbl.8#b#e#e#b.##e.#.B.a.dbdbfbRbdbpa9aIbpb.bqaKbB.n.##e#e#b#2#b#e.B#.aBanbcbuaobcbjao.B#ebJ.a#3#3b8bkaJbibrbibsbibibiaKbibrasbHava4.dbj.c.cbj.x.K.i....", +"..........bObJbj.caBa4bkbda5bFa9aJa9bfa5b.a9a9bab.babfaZb8.a.a#baC.bbcbnbkbkbHaFaZa4buaobJ.z.a#b.a#b#b#3#fbibfaJbaaJa9aKaJbga9#..#.a#b#2#b#2#2#e#2#e#e#bbbbgaJbUbdbdb.bFaKaIbcb8#b#2#b#b#e#baBbtaZa4bbbtbbbcbjao.Banas#e#b.z#f.zaEbkaAbkaJbrbdbibCbibsbibiaKavbc.dbj.cbj.cbJ.BaQ....", +"..........bk.a.x.c.cbcasbibaboaIb.aIbdboa1aJb.aJboa1aJbo#e#e.zb8abadb8bta4bObRbHaFaAaZbIan.x.b.b.a.a#b#b.bb8bPblbabpa1aIb.aI.b.##2#b#3.a.a#b#b#b#b#b#b#b#fa4bBbdaKbib.aIbobb#f#3.7#b#e#ebvaAaAaAa4bbbcbtanbjbj.xb8afakb8#.#bb8bkbAbibnbkbibkbibabpbdbibdbHbkaA.ebcao.c.xao.c.BaP....", +"...........w.bbj.c.AbcbnbiaJb.bibNa1bpa5bAboa9a9b.a9babgbnb8.7#fap#4.a.zbcaCa4asbsbRbna4a4btbc.c#.#3.7#e#.#3bJbybobAbha5bab8#f#2#b#b.B#b#b.z#b.z#3#b#b#b#bb8.dbgaJbpbdbfbib8.b.7#b#e.batbsbna4a4a4bbbcbcbcaobj#f.aa#.b#f#.#e#fbpbibkbkbdbrbibsaKbdbkbrbdbkbibra4bc.c.c.cbj.c.BaQ....", +"..........bi.zbj.c.cbcaZbPbpa5bFaIb.aHb.a9a2b.b.blb.b.a5bf.a#f#bb8abadb8bcbcaCa4bObnaZaZaZa4bcbc.c.z#.#b#b.z.bbablb.b.bf.d#f#3.a#b#e.b.bbj.xbv.c.c.c#b#b#b#b#faAbAbiaKbgbj.a#.#b#e.cbsbsbnaZa4a4aCaZbtbjbcbj.8b8ahaib8.b#2#faAbgbnaFbkbibkbkaKbibibrbdbCbdbnbnaC.9.9.c.c.x.b.B......", +"..........bU.a.cbJbjaCbRbaaKbaa9a9babFa5baaIbNbab.blaK.qa2aZb8.7b8ap#4.a.BbDanbba4a4bObOa4a4btbcbcao.a#b#b.a.caKa5aIbhbd#f#b#3#b#ebjbna4btananbbbDaobj.b#e#b#e#ea5bAaKaJ.x.b#2#e.BbnaKaZbnaFa4a4bbbbbbbc.c.c#f#ba#bc#f#.#e.KbLbpbnbpbibpbrbdbibCasbibibraKbibRbnao.cbj.c.x.c.B......", +"..........bF.a.x.c.cbtaZbkbaaJbpboaIa9a1babgbabaawa5bhbabla2.z#f#bb8akafb8.bbjbcbtbIa4a4a4a4aZbbanbc#.#b#b#b.bb.bga5bd.##e#3#e#ea4bsbkbna4bObta4aCbD.c.c.z#b#2#fbcbgbNbabjbJ#2#e.bbnbkbOaZaZaCa4bb.dbu.c.b.zb8afalb8.a.7b8aJbhaAbsbibkbdbibrbqasbUbRasasbRaKbk.ebj.c.c.xao#..7......", +"..........bW.a.x.b.xbjaAbdbdb.aJa5a1aIbFa2a5a9b.b.bAaKb.bGbfa5b8.z#f#f#8bc#fao.xbcbubbbta4bbbIa4bbbu.b#b#b#bbDbFa9a9###f#.#b.BbtbsbkbObRaAbvbta4a4bcbcbJ.b.a#2#eb8bobabpaF.z#b#b.bbnbOaAa4a4bIbb.dbcaobJ.b#fama##b#f.bb8.paEbnbdbdasbsbibibkbdavbkbibibibraKbkbc.dbj.xao.x.bbJ......", +"..........bd.z.x.x.bbcaZbiaKbBb.b.b.bBa9bGb.bpazbFa5a2b.bra5bea4b8#cb8aja#b8.BbjbjbD.dbbaCbb.dbcbcbj#b.7#e.Bb.bfa9aI#2#e.z#e.cbnbnbnbkbD.zbBb4.Kbtbtan.c.b.b#2#b#e.ba2bqbi.c#e#e#bbtaFaZbIaCaCbcbcao.c.c#f#fa#aeb8#..K#fbgbabnbkbsbiaKbrbabrbkbrbnbdbibHasbibn.ebcao.c.xao#VbJ......", +"..........bP.B.cao.canaZbiblaJa9blbBaIa9a9a1aJbi.qbBbPbpaJb.bfaY#f#f#bb8a#aib8.b.caoaobDbu.5bcbubj.b#b#e.#a4bgbyaGbOb8#2#b#.btaCbbbI.B.AaO....bNb8.bbc.c.b.7#.#b#b#fbObdaIa4#b.B#b.7bcaCbcbcbcbjao.c.b#.b8aiafb8.7#3b8avaJa4bsbkbibdaZbraFbibpbRbkaKbqbHbiasaZaCbc.c.c.cbj.bbJ......", +"..........bGbJbjbJ.ca4bnbUb.bpboa1a9a5babgbaa1a2aJaIbFbaaTbpaJa1bp#e#b#f.K#4ae#fao.x.x.x.caobcbj#b#2#e.#bkbha9aHbg#c#f.a.aaobcbDbj.BbP....bB.j....bc.b.c.cbJ.a.7#2#fbcbgbkbra4#b#e#b#b.cbjbj.x.bbJ.c.b#faeab#f#f.bb8a4bmbkasasbrbkbdbdbkaKbHbHasbkbkbHbibiaKaA.ebD#V.c.x.c.b.z......", +"..........aT.z.9.c.banbkbRbPa9b.a9b.aIa1baa9bGaJa9aIa5aHbPbgbabBbgaZb8#bb8apag#f#.bJ.c.c.c.c#.#b#b#fb8asbfbaa1a1bO#f#b#b.bbjaB.c.abcbxbXb3#f#f.zbBbG.BbJ.b.b.a.7#b#f#cbgbrbibdbt#b#b#e#b.b.b.cbJ.b.b#.#earatb8.b#f.BbgbHbrbnbdaKbRbdbsbiaKbsbibrbrbibibkbrbdbnaZ.e.x.c#V.9.b.z......", +"..........bA.b.c.cbJbcbkbdaJa2aJa9a9aIbBbBaJa9aHa9bUbaa9aJaJbpa9aHaEbjb8#.#f#f#.#3#.#..z.b#b#b#e.###bka9babdbCaYbj#f#b.a.bbJ.b.b.c.bb8.##3.b.b#bb8.##..b.z#.#..b#2#bb8aZbpbkbdbibbbJ.a#e#b.z#.#..b#3.z.b#f#f#.#f#fazblaZbkaKbqbNasbkasbibrbibrbibibibkbibdbRaZbIbb.c.c.c.c#.bJ......", +"...........q.b.c.c.cbcaZbRbpaIbpboa5a5aIbla9a5bobPaHbFbib.aJbhbPbqa9bfbjb8#.#b#..z#..z#2#2#e.##bbnaJblbibrb.a9a9#f#b.7.b.c.c.b#..b.b.b#..b.b#.#..b#..b.b.b#..b#.#b#b#fbJaJbRbkaAbnanbv.b#b#b#b#b#b.z#3.z.a#2#2b8a9awbkbdbibabdbrbkbiaKbrbRbibdbHbibnbibiasaKbkaCbj.c.c.c.x.b.x......", +"..........a5.zbjbJ.cbtavbibCa9azbfbha9a9a9b.aHa5babga9bFbNbpa9b.a5bCbgaY#f#f#.#b.a#b#b#e.#.za4brbsbRbkbibabNa1bI#f#3.abjbjbJ.b.z.b.b.b.b.b.b#..b#..b.b.b.b#..b.b#.#b#b#faJbRa4bOaZbbbcanao.z#e#b.7#2#b.z#3#bb8bIblbqbNbiaKbiaFbnbsbdbrbkbRbrasbibHbibUaFbnbiaZaZ.d.x.cbj.9.a.x......", +"..........bB.B.c.c.c.datbibAbBaJa5aJa5aHbla1a9b.aHb.b.a5a9bobFa1b.b.b.bgbab8b8#f#b#b.a.bbuaZaZa4aZbkbnbrbpa9a9#.#e.abJbcbjbj.cao.c#..bbJ.bbJ.bbJ.bbJbJ.b.c.b.b.cbJ.a#b#fa4bkbcaAaCbcbcbjbj.c.c#..a.a#b#b#e#fa4bwasbiasbiaFbabrbHasbCbibkasbkbRbibkbqbdbrbdbdavaC.d.cbj.c.c.b.A......", +"...........l.Kbj.c.cbtbRbNbaaJbFb.aIbgaIbPbBaTboaHbpaJa9babdbaaHbpb.bhbaa2aKanaZ.B#VbjbcbcbuaZaZa4bnbRbib.a5bNb8#b.aaCbIbubcbc.xbjbj.xao.cbj.cao.c.cbj.c.xbjbcbDbj#b#b#b.zaFaCbbbubcanbc.xaoaobJ.c.bbJ.b#fbiblaKbqbdbrbrbUbabrbdasbibibHbrbdbsbkbkbkasbibCbHbna4an.c.c#V.x#3bD......", +"...........l.K.c.c#Vbta4bibaboa1a5b.bNbpa2bBa9.qbGbibdb.bPbla9baaJa1a5a9b.bgbmblbt.bbjbjbjbDanbcana4bRbnbka1aZb8.B#cbnaAaCbbbcbuanbcbubjbcbDbcbjbj.xbjbcbubcbcbcbc#V#b#b.#aZa4.pbcbubcbc.b#V.c.b.c#..b.BanaKbabibravbabibibkbrbkbkbdbibkbkbibibnbibrbiasbHbqaZaZbj.c.c.9ao.abc......", +"..........bM.BbJ.c.cbca4bra5aHaJa9bGb.a9bPbga9aIbabAa9boa9a9bpb.a9bpbpazbabdb.bga1.c#.bjbjbDbj.xa4a4a4bnbk.q.x#e#ebDaFa4a4a4bta4bba4btbta4btbcanbbbcbcbtbc.dbtbbaCbu#b#b.Bbta4bcbcbj.x.cbJ.c.b#c.b.b.BbjbpbFaJbibkbraKasbabsbkbsbRbrbkbibsaKbdbkbrbibibibUbiaA.dbj#V.cbj.c.a.5......", +"..........bL.a.c.c.c.dbnbib.bpa5a1bBblb.bGbgbGbAbCbPaIb.b.aJb.bGbaaIbhboa5a9bAbpaJaJbJ.bbjbjbcbjbcbtbIaCaZbO#3#e.Ba4aFa4a4a4a4a4aCbIa4a4aCa4a4a4a4a4a4a4bbbbaCbtbIan.z#e#b.zbbbc.cbDbj.b.b.b.c.b.b#bbcbdbababibdbrb.bHaKbpbdaKbqbkbkbdbrbdbkbrbrbHbdbUbdbibsavaCbc#V.c.cbj.abI......", +"..........aY.K.x.bbJbcbObRa9boaIa5bFbAa9bPaIa9aIaHbla5bPaJbabqbabBbab.a9blbpa9bfa5bfbibcbJbj.xbubjbcbIbua4.d#e#b.zbkbna4a4aZa4aCaZa4aZaZa4a4bOa4a4a4a4a4a4a4a4a4a4bt.c#b.a#3bIbjbj.x.c.b.cbJ.b.z.abtaJbqa9bpbaaKbkbibdbqbibkbdbiasbibibiaAbHaKbdbibdbibCavbkav.ebc.x#V.c.c.B.y......", +"...........6.B.c.c#Vbca4aFa9a9a9b.a9baaVbabAbPb.a9b.bqbGa9bda1aJaIa5babPaIaKa2a2bpbpa1aK.xbJbj.cbcbu.dbvaZ.d#e#ebJbkaZa4a4aZbIa4a4aZbOaZaAbna4a4a4a4a4a4aCaCbIa4bIbt.c#b.a#bbbbu.c.b.b.c.b.b.B#ba4a9brbpa5bPbdb.bpbkbrbHasbpbibibsbdbkbkbrbkbibRbCavbrbibibHbkaAbcbv.c.x.c.Ba4......", +"..........aX.B.c#VbJbIa4brbFa9bab.a1b.bAboa9aza9bpb.bfb.biboaJb.bdaJbga9a9bAaw.qbpaH.qaIblbj.BbjbvbjbDbja4.x#e#bbjbna4aCaZa4a4aZaAa4a4a4a4bOaZa4a4btbbbtbta4bbaCbtanbj#b.7#b.cbc.c.b#c.cbJ.zbjasaKbababab.bqbdbdbdbibkbibdbibrbkbkaKbibRbkbrbnbkbsasbibibRbrbk.pbj.x#V.c.c.BbO......", +"...........fbY.9bJ.caoaCbHa9brbob.bAaJbGa2babpa9b.bNbobaa9aHa9aIbGbdbBblaHbab.baa5a9a9awbhb.bn.b.c.cbjbjbj.z#b.BbtaFaZbOa4aZaZaZbna4a4aZa4aZaZa4aZa4a4a4a4bIbtbIbbbtbj.z#b#e.bbD.bbJ.x.a.Bbcb.blbpblbdbobdbpaKaKbdbkbdbkbHbibiasbHasbnbkbiasbrbdaAbHbrbibkaKaZbcbj.c.x.c.9#ebR......", +"..........a8.a.c.c#Vbja4bOb.aJa9bGaJboaHbGaJbla5bobaaKaJbabAaIa9bfaHa5bpa5b.aJaJbAa5aKbPaHblbhbi.b.b.xbj.d#b#e.7bcaZaZaZaZa4a4aZa4bnbDbJaCa4a4bDbJbta4a4a4bta4.dbcaCbj#b.z#b#..c.b.c.z.zaAbibsaIbdbibab.aKbpb.bdbqasbpbFbsaKbabsbHbHasbiaFbUbsbrbkbRbdbrbnaAbkaCao.xbj.cbj.#bH......", +"..........bK.BaB#VbJbjbnbibdbFa9bCa9b.a5aIaIbNbpb.aTb.aIbmbga2bdbibC.taKa1a5aHbob.a5a5baaTbBblbpbd.dbJbJbJ.7#b#bbua4a4a4a4aZa4a4bta4aG.la4bJbvbi.kblbua4btbba4a4bcbDbj#3.a#b.z#V.a.z#cbib.a5babibqaJbnbrbpbabrbkbkbdbHbHbkbpbabiasbsbnbnbibrbkbibsbHasbrbibHaZa4bcbj.c.c.c#ebH......", +"..........aS.b.c#Vaobja4bibibabNbda1a5baa1bda1aJbkbGbfbMbn#.#e#fb8b8b8#f#e.8br.qaIbgbhb.blbdb.b.boa9avaB.b#b#b.a.cbubIbta4a4a4a4a4bubc....bE....bmbvbbbIbbbtbbbtbc.c.b.7.a#b#b.a.abuasaJaKbqbab.aKbkbpa9bkbb.x#.#e#e#f#f#f.7bcbdaKbrbkaFbkaFbdbibrbkbibkbCbiava4bc.c.x.c.9.#bN......", +"..........a6.b.c.c#VbcbIbRbibaaKb.bGbBbpbqa9.qbpbfbfbR#eb8#f.B#e#2#e.7#b#e#fb8#ebcbabfaHa5b.baaHaJbNbFbNan#e.7.z.b.cbcbcbua4a4a4a4aZbD.BbT....bH.aaC.pbIbbbtbcbjbj.b#.#3#.#b#2bIaZbnbqbHb.aIbpbNbdbra9bn#e#e#f#e#b#b.a.b.7#fb8#f.xaIbdaAbnbsbnbkbrbibqbnbiavbka4bc.c#V.x.x.#bP......", +"..........aS.N.c.cbJbcaCbpbPbdbga9bpa9bBa5.qaKbpbxbib8#f#e#b.B.a#b.b.a#e#b#b#b#e#fb8a4blaHbAaJaJaIb.blbpbD#f#2#3.7.z#VbjbubtbbbbbtbIa4aubYbVb4.baCbIbcanbcbj.c.c#..z#2.z#.#fb8bpbrb.aIb.brbrbsa5bdaZ#eb8#e#e#b#.bJ.c.cbua4asav.ab8.abCasbkbHasbibsbHasbibkaZbnbIbcbj.c.c.9#fbV......", +"..........aObY.cbJ.cbca4bkbCa9bNa9aKaJbGa9aJbNbfaZb8#2.a#bbubIbIa4a4a4bIbj.b#b#b#2#eb8#ebRawblbda5aIbaboaJ.z#f#e#b.z.z#3.bbJ#VbDbcbt.dbbaC.cbj.ebtbcbubc.x.bbJ.a#..7.7#eb8#bbkbobpbabkbrb.a9a5bk#b#f#e.K#.bjbtbtaCbtbubj.cbva4bqaCb8#ebdbibsbibObsbHbkbibnbHaAbban#V.c.8.xb8.q......", +"...........h.b.c.x.baoa4bkbUa5boa9a5a5bab.b.aIbGb8#b#bbJaCbna9azbqbRbubtaZaZbu.c.z#b.7#eb8.pbgb.a1aJb.bpaybfbO#eb8#e#b.z#3#.#..b.c.cbjbDbjbj.cbjbjbJ#V.b.z#3.z.z#3#e#f#f.pbra2babdaKbpaJbrbr.e#f#f#b.zbtaZaZaZa4bbaCanbcbjbj.a.bbkbjb8bjbhbRasbkbHbibibnbHbsaZa4bc.c.x.c.x#f.q......", +"..........a3.b.c.c.c.cbObdbpa9a5bobabCbPaIbpbfbc#f#2.aa4bObk#4#4#8#4#6bd.Abua4a4bjbJ.N#2#bb8bbbfaHb.a9a9b.bha9aIbR.b#f#f#e#b.z.a.a.z.7#b.b#3#..b#..7#2.z#b.a#e#f#f.#bnaJbhawbiaJb.aJb.babo#cb8#e#bbjbnbkaAaCananaobcbcbububDbjbJ.bbc#b#fbqbkbOaKbsbkbsbHbRasa4.d.Abj.c.cbjb8bB......", +"...........i.z.bbJ.cbja4bibpboaHbdbaaIbGbibabf#b#e.7bja4buay..#8#8a.#4#4a#aJ.AbDaZaC.c.7#2#bb8.5awa9b.bobabaaIaHa2bpbsaF.cb8#e#e.7#3#e#b#e#e#e#e#f#f#f#e#f#f#cbbb.aIblbqbabdbabdasbqaIbk.7#f#e.bbnbHaZaubcbIbcb4bX.C.CbDac.caobj.b.b#.b8bnbpbObibnbRbnasbnaAaF.p.d.c.x.c.cb8.v......", +"..........aP.z.b.c.cbuaZbObda1a9baaHbpb.bPbobA#b#e#bbca4btaA#5#4#5b3bO#5#4..a.bu.AaCa4bj#..a#bb8a4bfaJa5boa5bpb.aIb.bpbgblbdaA.z.a#..b.z.c.A.9bvaZ.pbR.xbnbqawbgbpb.babpbpb.babdbpbpa9.c#f#e.cbibsbbbI.O.T.0.0.3.Y.0.3.W.Z.L.x.c.b#.#.#fa4bla4bkbHbkbRbRbRasa4bbao.9.c.x.9b8bz......", +"..........aQbJ.b.cbJbbbnbnaKaKbpbdblbabNa9aJaE#.#e#bbca4a4bc.zbcbtaZbubJ.pa...#7bR.za4aubD#.#b#bb8bibga9bpaHaIaIbaa9a9b.aJ.qbgba.K.ca4btbqaJbobgaYbfbda4bgaIaIbPaKbab.baaKbia9b.bqaJbI#f#e.cbrbiau.E.W.Y.Y.0.S.X.U.O.Q.W.W.1.S.c.b.b.7#fa4aHaZbOaZbRbiaZaAbRaAbbbj#V.x#Vbjb8bM......", +".............c.b#V.cbca4bnbabkbababaaJb.baaKa2.A#f#bbJbbbIa4a4bcbba4aZa4.x#.aJ#4#4aT.xbIbbbj.b.7#e#ebgblb.a5.qbabaaJb.a9b.boaHa9.x.a.xaZbRbqaIbabrbNbtbpblbdbdbabqaIb.babpbpbFbiaJbH#e#e.cbkbsaZan.I.Y.Y.Pbc.x.G.LbIaa.2.W.W.Sac.a#.#bb8bAbsbnbna4asbnbkbkaZaAbb.c.x#V.x.cb8bL......", +"............bJ.c.c.cbcbbbnbkbpb.babPbobAbCbabgav#f#b.7bjbbaCbIbIbbaCaZaCaZ.bbi#8#7#8bcbcaCbb.c.a#b#fbUaHbab.bablbdb.a9bFb.aJbFblbi.B.7bca4aKbrb.a5a4btaIbaaKbabpbabpb.bdaTbpbabab.bR#f#eaCbrbnaZau.L.Y.P.Iac.U.3.Y.Raa.5.U.Q.E#9#..zb8bcawa4bnaAaZaFaZbnbkbnaZbc.x.x#V.c.9b8bL......", +"............bJ.b.c.cbcanbnbsa9b.bCb.babPbdb.aIbg#.#f#b#cbca4bbbta4a4.pa4a4.9aI#4#4#8bDbt.pbbbu#3#.b8bnaHa9aIaHa9b.a9bdaIa1b.a9babo#V#ebDa4bdbabsbsbcaZb.bHbga9biaJbaaKb.bab.aKbpaI.A#f#eaCbsbRbOa4a4b4anbcan.V.T.T.4bDaoaa.b.b.b.z#bb8bgaKbnaZbnaFaZbkbkaAbdaAbbbc.x.x.9.cb8.m......", +"............bv.bbJ.b.daZbnbdbqa9a9b.bab.b.bda5bgba#f#e#b.bbta4bba4btbb.pbIa4.xaT#8bkbDaZa4bbao.7#e#fbpblbga5a9bUaJbpbFbAb.aJbqbCaJa4.B.ca4bCblboaA.cbabpaKbpa9bpbdbCbabpbpaHb.babobc#e#b.cbkbnaFa4a4anbb.ebbbjaoac.xbcbcbjac.b#.#bb8a4awbkasasbOaZbnaAaZbnbnaZaC.x.c.x.c.xb8aX......", +".............5.b#V.cbvaZbkbPbAasb.b.aJbaa9aJbdbpaya5b8#f#b.7bcbbbtbbbIbbbIa4bb.AbcbcaZaZbt.c#.#bb8bHaYbpbdaJbqaIaHa1aIbFbaaIbabaa9a4.B.cbbbib.a9bt.cbCb.baaKbpbdbpbqa5bab.bFa9aJaIbO#e#e#e.bbtbObOa4a4a4btbcanbcbcbjbubj#VbJ.7#eb8bIbhaZa4bnbnbkaAaZbkavbnaZbnbbbj.c.c.c.c#f.j......", +"............bc.c.cbJbca4bnbkbabhbabdbpa9a9a5bAbabpbgbp#.b8#e#bbJ.9bDanbta4a4bbaCbc##bj.8#.#b#fb8bIbga9b.a5bob.aVbpa9bPbpa9bqbgbPb.ba.a.bbcbpaIbk.baCa9bdaHbdb.bdaKa9bobaaJbaa9bob.bBbcaq#e#e#b#.bjbcbcbtbcbcbcbc.x.x.c#..7#2.#b8bnbhbkbnaFaAaAaZaZbRbnaZbnbnaAa4bj#V.x.c.c#f.j......", +".............5.bbJ.caoa4aKbibaa9aJa9a9brbab.aJbabaa9ayaJa4#eb8#f#e#b.z#V#.bJ.cbJ.b#.#b#fb8b8#.bkbgbda9aJblbab.aJbPbaaJbobob.a1a9bCb..c.bbjbsaJbFbtbtaHaIbabdbpb.b.bpbda5b.bpbabab.aIbdaZ#b#f#e#e#e#b.z.7.z#c#..7.z#b#b#e#f#f.bbrbsaAbkaZasaZbkaAaAbkbnbnbnbnaF.e.9.x.c#V#V#fa6......", +"............bD.b.c.cbcaZbkbAbCaVbobNbgbFbdbPbababab.bhbpbgb.bk.c#e#f#f#f#f#f#f#f#f#f#f#bbbbdbhbhaKbabda9b.aJblboaHbdb.baaIaIaKb.bBbAbv.z.ca4a5bd.cbn.qbqbrboaKbab.b.b.aJb.bpb.aKbpbWaKbpbrbI.a.B#e#e#e#e#e#e#e#e#e#e#e.z.dbkbsbsaZbnbna4a4a4aZaFaAbRbkaZavava4aCbj.x.c.8.c#f.k......", +"............bI.abj#cbcbXbiavbabrbpaJaJbFbaaIbUbpa5babab.bGaHaHbBbibka4.dbj.9bj.xa4avbkaIbga9bibabNaJb.bdb.bGaJbobabhaJa5bgbobAaKa9bpbc.zbubRbhbr.BbnbabiaKbabpbpbabpbdbobpboaKbaaKaVbdaJbrbdbsaZbnan#..x.z.a.a.b#.auaCbkbqbsaZa4bnaAataAa4aAa4aFaZaZbnaAa4bkbka4bjao.x.c.c#faO......", +".............d.z.c.cbjbcbsbNa5b.bpbPbib.b.aKbpb.aKaJbrbaaIbpa5blbhbhbeaIaIblbebfbfbgaIaIb.a9baaKbaa9b.bpbpbiaTb.babpa9aIbFa9aIb.bpbp.c.bbjbiawaZbJbibgbabaaJbaaKbdbibdb.bpbibqaJbpbUbFbpbaaIaIbqaJaKbraKbdasavbrbqbiasbkaZbnbkbsbnbnbnaZaAaAbnaCaZbOaZaZbnaFa4btbj.8.c.x.b#f.i......", +".............y.c.c.b.xa4bdbdbpbaaIbababob.aKbFbHbobab.bqbaaJbababla9babpaJboaJa5b.bababpbpaJbpbabpaIbdb.bpbFbaa1aJb.b.bda9a5bpbaaJaK.z.cbubiaHbdaBbIaya5bdaJbFaIb.babdbrbibraJbababNbqbdbabqbrbabdbabqbibqaKbCaKbibdbsbsbRbkbsbnaAaFbnaAbnaAaFa4aZbna4a4aZaFa4anbc.c.c.x.b.KaP......", +"............a4.b.c.cbDbObnb.bpasbabab.bqbaaIbdbia1aJbPbPb.bhaIb.aIbpbabpb.babdbabFbdb.aIaTbdbabab.bpbpbUa5a5bpbAaJb.b.a5bpa9bobCaKa9.b.bbjbiblbpbj.bboa5bpbGb.aKbFaKaHbUbpbabaaKbrbpasaJbpb.bibCbdbkbpasaKbpbkbkbnbrbqbNbsasaZasaAbkbnaFaZa4a4aZaAa4aZaZa4aAa4bb.9.c.c.c.b.KaQ......", +"............aZ.bbj.bbca4bdbdbAa1babpbabdbibCbdbdbqb.blawbaaHbfbBb.bfbdbNboa5aJbobNaIaJbabCbpb.bpa5bda5aJb.bdbpaKbaa9bqa9b.a9bdaJaw.5#bbjbbbqaHbhaZ.BbdaHbrbdaKbabdaJaKb.boblbabdbrbiaTbpbabdbqbiaKaKbHbibdbrbibrbdaFaKbrbrbRbkaKaAbnasbnbnaAa4a4aZa4aCaZa4aCa4bb.9.c.x.x#V.KaQ......", +"............aZ.abjbJbca4bdbFavbpbpbdbobabFb.bkbpa1bFbdbPbNbRbRbHbdbfbgaIa9a5bAbqbga9b.bdb.b.babqbdbaa9bobabdb.bibpaJb.baaJbAbhbgbR.B#.bcbRbsbdb.bOaobjbpbBasbp.qbrbdbpbibiaKbHbdbdbqbababdbibrbpbabCasbrbdbdaKbabrbrbUbraAa4aZbnbkasbsasaAa4a4a4a4a4a4aZaZaAaZbb.cao.c.x.b.K........", +"............bX.a.9.bbca4bRaJaKaKb.bNbdbaaTbdbgbh.e#b#e#e#f#f#f#f#e.7.dbCbBb.b.a2a9biaIaKbobabPaKaHa9babdbaa9babCaKbab.bsbibfbf#qb8#b#b#b#b#e#fb8.B#.#b#fbibhaHaKbiaKbdaKbdaKbqbrbNbkbibqbkbdbkbdbrbababkbdbrblbaaA.c.b#b#e.B#e#e#b.a.5asaKataZa4aCaCaZaZa4bna4bbbj.x.c.c.b.a........", +"............bH.a.c.cbcbIavbkbpbdaKbGb.bHaJay.nb8#f#e#e#e#e#b#b#e#b#e#f#f#e.daHbgbfa9b.b.b.aHb.bFaJbaa5baaHbpaKb.bpbpblazb..p#.b8#2.7.7#e#b#b#b#b#b#b#b#e#f.7babebgbdbrbpbraHaTbpbdbFbibibdaKbdbibHbibrbdbrbk.p.7#f#e.B#e#b#b#b.B#b.B#f#fbDaFbnbbaAaAbnaZaCaAaCbb.cao.9.x#..B........", +"............bU.B.cbJ.xbnavbibiaKb.bFaKbaa2bIb8#b#b#2#e#b.a#..z.B#b#2#b#b#e#f#ebia2blb.bpbpbqboaJb.bab.bpbCb.bCb.biaJbh.y#fb8#e.B#e#b.B.z.a#..b.b.bbJ.b.b#.#eb8#ebibgaIbdbdbRb.b.bdbrbGaKbsbdbrbUasbiboaKbc#e#f#e#b#b.a#3.7.b.baB.cbc.c.7b8.KaKbibubta4aZbnaZbban.c.xbj.9#..z........", +"............bU.a.x.cbjaZbnbdbGa9brb.aJbl.Nb8#2#b.B.ba4aAbnbnbnaZbcbj.b.a#..7#fb8.Bbpbgblb.bdb.bUbNaKbpbNbkaIbpa5bfbcb8b8#e#b.a.cbuaCa4a4a4a4btaCanbcbvanbcaCa4#fb8#ebUblaIbabHbibdbnbHbabrasbqbpbqbq.d#e#f#b#b.B.bbjbububcaoao.xbJaobDaCbj.#b8bnbraAa4a4a4a4a4btbc.caoao.abJ........", +"............bU.a.x.bbuaZbHaKb.bibdbqaybRb8#2#bbJbcbtbObkbHbkbkbkbnbnaAbcbJ#V.b#eb8#f##aJbhbhaIbGbgaHb.bpaJa1bfbo.8b8#b.B.abca4bOaZa4a4bObnaZa4a4aZa4aCbcbjbvanbdbcb8b8bkbFaHaKbabqbdbrbdaKbrbabda4bJ#e#e.B.a.bbububuaCbcbuanbubjbv.c.b.bbcbj#e#ebkbnbna4aZa4aZ.d.c.c.8.c.a.x........", +"............bW.zbj.c.xaZbibdb.bdbabqbf#e.##b#ca4bkbBbCa4aZbnbIa4aZaZbRa4a4buaoao#.#e#f.K.cbHasbablbabdbrbCbn.p#b#e#2#eaBbnbkasbIbIbia4.AbOa4a4aCbta4a4a4btan.cbJbiaZ.#b8.z.nbibrbdaIaJbgaKbUa4#.#b#e#b.B#ba4a4bDbabk.xbtbcbu.bbubjbJ.abJ.z#V.b.#bcbqbta4aAaCa4bb.c.x.c.9.abD........", +"............a9.b.x.bbca4bkavbiaKbCbeaTb8#3.zbcbtbH.....wbubvbO.AbubO.xa4bDbcbb.xan.c#e.bbc.7.z.B#b#.bJ.a#e.K.B#b#b#bbDbsbRbObtbC......bibua4bva4bIbDa4.cbca4aCbj.za4bc#e.B.b.B.B#..7.B#..B.#.#bJ#2#e.BbvbkbnbI......aWbvbj.Na4.z.#.caZ.b.b.b.b#b.abda4a4a4bIaCbc.x.c.c.c.Bbu........", +"............a1.a#V.b.xa4bibCb.b.babh.9#f.7bJ.daCaBbX..bkb2aX..aUa4.abB....bXbIaC.cbc#b#fbabfbpbkbdavbHbkbibdbb#e#e#.bkbkaZaZbJ.j..b2..aU.abIbt.yaUbtbJ.wa4bcbban.x.b.9.7b8aJaIaAaZaZbbaAanbbbCaZ#f#b.casbHa4a4bZ#fbx..bJ.Ba9a8bI.ebFa0b8.c#.#..7#ebpaCa4a4aCa4bc.c.c.xao#ea4........", +"............a1.a.x.cbua4bHbob.aJbdblaZb8#..cbca4bjbO..bnbi.ib2bFbxa4..bDbia0bta4bc.a.7b8babmaJbgawbfboawawbmbH#f#ebvbkbOa4aZa4a4b3bD..bB.KbA..a9..bEbB..b.bvbtbcbjao.b#b#fbobfaIboboaIbqbqaJawbn#f#ea4brbnbna4b8b...bAb8aYa0.kbm..bfbLb8.c.b.b#2#baFaZaZa4a4aZan.x.c.c.9.Ka4........", +"............a2.b.x.cbja4bkbabpbqbNa9bkb8#bbJbubIbvbR..aZ.ta8b8bDbLbXa3b8.5aQaZa4bb#.#f.7bgaKbka4aZaZbca4a4bdaZ#e#e.cbRa4a4a4a4bv.N...ib3bva5..aPaWbx..bBa4bca4bcbcbj.a.B.zbqbna4bca4bcbuaZa4aZbb#e#bbubkbna4aCaqbDaP.h#faGbBa0a8bKblbMb8bJ.b.b#ebJbqa4aCa4a4bbbc.c.x.c.9.#bO........", +"............bz.Kao.cbcaAbHbkbab.b.a9a9.B#e#..c.dbvbH..bH.abxa0....a8..aQ..bBbuaZ.x#b#ebIbk.K.K#f#e.B.z.B#f#e.a.7#b.aa4bna4a4aC.baO..a4bbbJbSaPb1bEbxb4..bFbva4bcbj#V#3.B#.bD.z.B.b.B.zaB.z.b#..c#.#b#bbIbkbubw..bDbL..bvbDbKbNa4bAbv.p.a.c.b#.b8bHbsa4aCaZaAaCbb.c.xbjbj.#bR........", +"............aY#f#VbJbcbna4baaKbpbabaa2bib8#2bJbcbv.w..bObv.xbUb0bibP.wbGbHbja4.x#b#e#f.zbjaZbdbrbda9asasaZbc.a#b#e#e.ba4aZa4bva9......a7bJbDbJ.c.8.xaB.xbDa4btbc.c.7.B#f.bbcaCaZaAbkaFa4a4bnbj#e#e#b#e#bbtbnbu.i....bCbv.x.B.a.b.a.b.a.c.b.z#f.baHbDana4bba4a4bcbj.x.cbj#fbR........", +"............bL.abj.cbjaAbnaKbabdbdbdbqbh.pb8#2bJbjbt.xbcbIbbbcbjbDbcbcbu.5bbbJ.B#f#ebkaJaIboaIaKboa9bobpb.blbPat.B#e#b#.bcb4a4bXa4bIbObIbt.ebubbbbbbbbanbbbtbj.c.z#eb8bIbqaJbqaJaJb.bpbqaKb.braZaC#3#e#b#e.xbtbvbI.x.c.dbcbcbcaobjbjbJ.b#.#e.#b.bnbcbtaAa4a4a4bc.c.c.9bj#f.w........", +"............bx.Bbj.cbjbnbCasbpbibGbdbNbaa2bjb8#e.7.cbubIa4a4aZaZaAa4aC.dbJ#2#fb8.7bhaHaHboa5bpbpbaa9aJ.qaIaIbobhas.B#f#b#e.bbc.dbc.dbjbba4bba4a4a4a4bcbbbu#V#.#b#fb8aZaEaIaJbNb.bkaJb.bibFbdbrbqbqbk.c#e#e#e#b.cbjbcbbbtbcbubcbj.c.b.z.7.#.Kbkasbua4a4a4aCbbaAaC.c.x.c.9b8bU........", +"............bx.abj#VbjbtbibpbqbibabCaKbdbabfbs#fb8#e#3.c.xbj.AbcbjbJ#c#eb8b8#eaKbfb.bpbGaIbab.a9aJa9a9bpaHa1bibpbgaK.z#f#f#b#b#..xbjbcanbIbcbcbcbcbj#V#c#b.N#fb8#ea1bfa9bdbpa1brbdbCbaaKbdaKbabpbdaKbdan.7#e#e#e.a.a.c.x.c#V.b#..z#3#b.#.baFaZbDa4a4a4a4a4aCa4bt#V.c.c.9b8bP........", +"............aR.Bbj.caoaZbnbiaKbpbpbAa9bpazbla9b.bn#e#fb8#f#f#e#f#fb8b8#e.dbHbybgb.brbgbabibqa9b.bpbab.a9bab.aHbia9bhaKaZ.8#f#e#b#e#b#e.B#b.7#b#b#e#e#b#e#f#e.zaZbfbgbdbraKbdbabpaJbpbabibibabiaKbqbibrbrbibj#.#e#e#e#e#e#e.B#e#b#e.B#bbubna4aCbta4aCa4a4aZa4bbbj#V.c.c.9b8.r........", +"............bK.zbcbJbja4braKbiaJbibabobobab.aTb.bfbfbabkbt#VbJ.x#cbHbAbgaEbhbpbabda9bda9aJb.bobobqa9boaIbaaJbdbPaJbpa2blbobibj#e#b.7#b.z#e#e.K#e.7.z#3#fbjbsblawbabnbabpaJbpbaa5bHboaKbraKbdaKbdbqasbibabrbrbkbObjbJ#..a#b.7#bbJbja4aAbnaCbba4bnaCaCa4bta4aZbbbcbj#V.c.9b8bG........", +"............a6.B.x#Vbja4bibdbpbab.bqb.aKbababobdbpbAa1bgbgbfbfbmbgaNbga9baa9a9bab.bpbab.bdaIb.baaJb.aJb.a9bob.bp.qa9bpbdblbhblas#b#b.8ana4bibraKaHbk.#bsaybFaHb.bFbPaKbrbab.bdb.aKbrbabpb.b.bibibpbpbibibiaKaKbsbiaFaFana4aAaZaCbnasa4a4aZbta4bIbtbIaCa4a4aZbbbc.c#V.x.9b8.q........", +".............k.K.c.cbua4a4b.bqbab.bpa9bra9aJa9b.aJbUbNbrbPa5aHbha5aJa9aIbpbobabpb.aKbpbaa5baaIa9b.aJbpbaaIbGa5aIbpaIbpa5bob.babhas.7.a.ca4bqa9b.bo.8a4bhbrbda9bdbFaHbpbibabdaKbGaKaKbrbibdbpbpbdbibrbibnbrbnbUasbnbrbkbkbrbsaZaAaAbnaAbtaZbta4bbaCa4aAbbaCaZa4bc.c.c.c.9b8a1........", +"............bE.Bbc.b.xaZbRasbdbab.babqbdbabdbab.aKb.b.a1bNaKbpa5boa5aKb.bab.aKa9boa5babqaHa9a5bAaIaJbUa9aJbpa1b.bibdbaa9aIbib.a9b.av#ebJbJbkbAaKbbbcbfbdaIaJbpaJbpbdbdbpa9aJbibpbdbdbpbpbdbibsbdb.bsasbibiaKbRaKbnbnbRaKbRbnaFaAa4aZa4aCbta4a4a4bubta4bba4aCa4bc.x#V.c.cb8.o........", +".............h.B.c.x.ca4bibFbiboboaIa9aKaJbGbNbrbpaIbdbra5bdboa9a5bFbob.bobda1a9b.b.aKbqaKbpa9bdaJbpa9a5baaJa9bpbab.bobababpb.bablba.a.abjbRblaI.za4bfbkbAbibdbpbdbabpbibabpaIbibpbdbrbaaKbiaKbFbibibabqbibdbsbnbsaZaKbkbna4aZaZaZaZaZa4a4bbbtbbbtaCa4bba4a4a4bc.x.c.9.cb8bM........", +".............i.a.c.c.cbjbiaKbib.a9a9bpa5bCbdbpbabdbdbpaIa2bob.a9a9baazbdblaJbpb.blaJaJbab.b.aJbpbNb.boa5boaJbaa9a9aIb.aHa9aHbHbra5bk.B.zanbka9bqbj.BbzbhbnbdbpbibaaKaIaKbqb.bPasbdbdbkaKbibabibHbibabibkbiaFbkbnbsbnaAbrbnaZaAaAasaCa4a4bIaZaCaCbtaZa4bbbta4a4bj.c.c.c#ab8bL........", +"............aQ.bbjbJbja4aAbdbFaJaKbdbpbqbGaIbabpbdbpblbgayaHblbAaJaJaIa1b.a5b.aKb.a5a9bda9aKbpaHb.b.bdbaaJbdboaTbFbAbdbpbqbaa9aHbi#e.ba4bpblaHaIbl.cbca1bobibnbrbqbabdaJbrbabdbpbabab.brbabrbibibibdbrasbqaKbkbsaZatbraKbkbrbraZaFbsa4aCbIaCbta4bIbtaCbnbcbtbbbc.c.c.c.cb8.m........", +"..............bJ.c.c.xa4bnavb.a9bdbpbraKbaaKbqbBaHa4###..B.7.9.8.dbia9bmaHb.aIbabqb.aJbAbpa9bla9a9bpb.babFaJb.bra9aIb.bdbraHbfbk.#.a.x#V.9.A#.#c.d.e.##ba5bgbpbrbdbabdbGaTbpbpaIb.aKbabibdbibibsbdbdbrbkbkaZbdbrbiaZaA.A.9.z#.#..7aAaZbsaFanaCbba4aCa4btanbca4bc.c.9.c.cb8.m........", +"...............bbJ.caBaZbkbibrb.baaJbpaJbRa1a2.n#.b8#f#e#e#e#e#f#eb8#f.AbOa5bgaIbpbNaIbAaJb.boaJa5bdaJbpbaaIbdbaaIb.brbeaHba.pb8#b.z#e#b.##f.K#e#f#e#.#f#ebibgbfaJbibrbrbabdbrb.babrbpbqbaaKbnb.bkbiavbrbnbdbnbj.x#e#e#f#e#e#e#e#bb8#f.ca4brbbbcaCaCaCa4a4a4bIbc.c#V.x.cb8.j........", +"..............bJ.c.c.cbIbkbraKb.bAaJbaaKbfbB#2b8.##2#2#e#e#b#b#2#b#2#eb8b8#ebIblbgbgbAbdbaa5aJb.baaIb.b.boa9bqaKbpaIa1bH.d#fb8#b#b#b#b#b.a#b#2.a.7#b.7#2#fb8#e.wbhaHbababibib.bdbrb.baaKbkbrbabibraFaKaKa4.a#e#e#e#b#e#b#3.z.z.a#3.z#b#f#e.cbqa4ana4aCbIa4bbanbj.c.c.x#Vb8a7........", +"..............bv.c#VbJaZbRbkboaJbpa9aKbgbUb8.#.7.a#b.z.cbcbcbjbv.bbJ#c.b#b#eb8#ebRaNaHbob.blbPbpbgaIaJb.aKbAa9b.aIblbcb8#f#b.a#b#b.a.B.b.b.cbJ.z.b.b.b#..b#b#eb8#fa4awbpbqaKbab.asbpbdbdbdasb.biaJbpaFbc#e#e#b#b#b.z.b.b.c.b.b.b.c.b.bbJ.a#f.NaJbnbcanaCaCa4bc.c.x.c.c.cb8.h........", +"..............bJbj.caBbtaAbCbaaVbdbdaJaz#f#e#2.B.bbcbtaZbRbkbsbOaZa4bcbjbjbj.bb8b8.AbqbhaHaHa9boa9bPbabpboaHblaHba#eb8.7#3#e.a.bbubca4a4a4bbbta4anbjbu.cbjbubc.b#eb8#caHbgaJb.aJbdbiaKbpbpbrbrbpbrbi#e.#.7#b.B.baobububcbubjaoaB.caB.b.bao.bb8.AaKbuaCa4a4a4bbbjbj.c.c.cb8.h........", +"...............x.c.bbua4bnaKbabpbabpaEbXb8.7.BbvaZa4bqbra4aZbOa4aZbna4bIbuana4.9.#b8#ebIbibqbfaHaHaHbgblbfbob.bI#e#e#..B.abDa4aFbn.xbJbJbua4a4a4a4aCa4anbc.cbjbbbu#bb8#cbCbPbraJaHaJbob.braKbdbI.z#e#e.a#e.abua4bJaBanbcbcbububj.c.cbJ.b.b.c.bb8bRaKbua4aCa4anbc.x.c.c.cb8aO........", +"...............xbJ.c.xa4bRaKbpbHaKb.b.#e#e#3.ca4a4bX..aU.xa4bubIaZbuaZbnaZbbbvaAbn#b#e#b.z.K.x.ya4a4.ybI#c.7#3#f#b#b.BbvbObnbRa4bIaYaS.kbrbDbIbubua4bDbba4.dbD.cbjbc.z#f.#.z#e.8.dbU.waZbJ#b.B#3#b#b#2#ebubnaAbYbLax.xbtbcbcbubv.c.c.c.z.a.b.b#ebjaIbbanaCbbbcbj.c.c.c.b#faO........", +"..............bvbJbj.cbbbkbpbrbqbGa1a4#f#3.zbuan.xaQ...hbJbIbsbua0aZ.5a2bDaZa4bJbbaC#e#ebrbkbc.b.K.b.b.c.daAbj#e#b.BbvbRbkaZaZbDbs...i..bF.bbRbHbRbJbdbIbubIbcbcbJao.8#b#ba4bnbb.x.a#b#.bJbbaAbD#b#b.BbtbrbRbJbO..bXbJaC.b.B.K.a.B.b#f.b.B.z.b#b.zbobtaCaZa4bc.c.x.c.x#V#faP........", +"...............x.c.x.bbubObobdasbabgaZ#f.z.cbcb3bxaQ.ja0#fa1..bK.k..bBbfbJa4aZa4.x.9#b#fbpbeaHawaHaHbfbgblbh.p#f#b.zaFbka4a4aZ.bb#..bXb3.xbDbWaGbEa4aUbcbjbcbtbcbjbJ.b#b#fbpawaHaIblaJaJbhblaIa4#e#bbjbrbka4bJ....b4bJ.bbob#bLbibma3aZaMbM#e#.#b#basaZaZbbaCaC.9.c.xao.b.KaP........", +"..............bc.bbJbja4bkbiaKbababAav#f#b.b.abM...q.j..bJaNbBbKbKbxbQa7.zaCaCa4a4.z#b#faHawbgbgaIaIaKaHbpaJaZ#f#b.xbka4a4a4a4.x.jaP....bO.Kbzbx..bAbKbtbcbIbcbbbc.x#..B#eaKbrbra4bkbnbrb.brbq.d#e#eaCbsaA.bbB..aR..bK.Ka7a3.ia8aUa5..b4aUao#e#b.zbpa4btbbbbbcbj.c.c.c.b.K..........", +"...............y.cao.ca4bsbdbpbqbabrbh.z#e.b.aaYaOaQ....bwbu....a1a1aYaYbJa4a4aZbb#.#fbcbga4bc.a#b.B.K#..c.d.c#b#bbJaZaZa4aCa4a4bJb8.z..bmb8.uaG..bya3bIbubtbtbcbD.c#..B#caAbc.b.a.a.a#b.a.bbjbj#b#b.bbnbn.aa8..b8bz..bvaWbg.ma1a8bnazbKaY.#.b#fa4aIbta4aZan.dbj.x.c.x.b.z..........", +"..............a4bjbu#VbcaAbCbqaKaJbiaHbnb8.zbjbJ.a#fbK...KbRa0aW.Kbj.xbua4a4aZa4bJ#b#f.xbJ#f#.bjbba4aCao.a.K#e#b#e#bbubna4btbbbubz.raY..bBb8bxaXbXbNa9btbtbbbtbcbc.c.7#faq.z#b.z.cbD.cbc.b#b#b#3.7#b#b.cbnbubC..a7..a0bJ#qbcbc.cbJ.b.K#b.##.#b#faKaZaCa4aCa4bjbj#V.c.x#..N..........", +"..............bO.a.x.canbnbkbraKaIbab.aJ#.#f.zaobcbua4btbDbuaZ.xbtbbbta4a4a4bb#.#eb8.banbkaIaHbfbgbgbhaJaJaKaA.c#e#b.7anaZaZa4bDb#....bl.cbDb.a4.a.cbJbbbIbtbcbc.c#.#e#bbib.aFbrbabiasbrbibra4ao.b#b#e#b.za4bubda6bBbvbcbvbvaBao.b.c.b.a.b#b#fbdasbua4a4a4bbbjbjbj.c.c#..z..........", +"..............aZ.abc.ba4bibibqbaa9b.b.bhaJ.z#f.a.bbcbu.c.pbtbjana4a4a4a4bc.x.z#fb8avbgbfbfblaHbAaJa9aIbgbgbgawaJbj#f#b#bbva4a4a4.c.A.AbJbca4.xbua4bbbb.dbtbtbu#V#b#f.#aKbgbqbdbobpbqaKbpbibpbdasatan.b#e.B.a.9bJ.bbJ.dbtanbcanbj.c.c.c#.#b#faCaKbIaCaCbnanaCbb.cbj#V.9.abJ..........", +"..............bR.a.x.cbDbHbiaKaKbdbibrbpa5aIaob8#e.zbjbcbtbba4bIbIbIbc.A#e#fb8.baKbeaIaJaJa1blaIa9aHaIaIaIa9bFawaIbcb8#f#b#3.AbcbbbtbbaCa4bb.pbIbbbbbIbcbD#V.7#fb8.baJaIbdbaaIbdaKbdbababababdbrasaKa4.b#e#e#e#2#Vbjbcbcbjbubj.c.b.b#..B#ebcava4bbbta4a4a4a4bjbj.c.cbj.z.c..........", +"..............bH.baobj.caFbdaKbdboa9bpaKbabhbhaC#b#f#f#e#b#3bJ.7#b.#b8#f#f.xbnb.aIbFaKa1a5boaIbgaJa9bla9aHb.bha5aHaIbdbJ#f#f#e#b#..caobcbcbcbcbcbD.8#V.b#b#f#f.7a4bhbhbNaIbobdbpbdbrbCbrb.aKbdbabqasbqbkan.b.N#e#f#e.a.7.z#3.z#b#b#e#e.aaCa4aCaZbbaCaCa4bna4an.c.c#V.9#b.x..........", +"..............bd.BbjbJbubnbrbrbdaJb.bab.baasbpaYaIbi.d.B#e#e#f#e#ebc.nbka9aHa9a5aJbFaHboa9blaHa5a1a9a9bha9a5a5bpa9aHbfbgbkbc#e#e.B#b#e#e#e#e#fb8b8#f#e#e.#.5asaIaHb.a9aKaJaJblbaaKaIaKbaaKbCasbkbrbHbiaAbrbka4aB.b#b#e#e#e#e#e.B.a.xbua4aZa4btaZaZaCbtaZa4aAbu#V.c.cao#ebD..........", +"..............bP.B.c.cbcbOasbdbdaKb.bpbaboblaKbGbhbgaIbgawblbibhawbgbhbgaJbabpa9a9aIbhbGbAblbpb.aHa5blawa5blaIb.a9bobablaIbpba.z#e#..c#..xbcbcbkbdbk.d#fbrbgbga5bAaIbdbpbabdbabpbPbCaJbpbqbdbabdbrbpaZbrbsbpaFbFasaZa4bcbjbtaAaCaZaZaFaFbnaCbta4a4bnaZanaCbnbc#V.x.c.9#bbc..........", +"..............bPaqbu.xbcbibsbababab.aJbpaJa5aKaIaJbpbdbobhbga5blaIaHbFb.b.a5boblbaa9bga9aIaJboa2a9a9bha5a5a5aJaIaJbp.qblbqblbeaJbj#fbJbbaZboaIaIbfbHbcaHaIa5b.babdaKb.brbdbCaJb.brbpa5bpbdbNbdaKbdbibpbibnbRbRbkasbnasasaAbnaAbkaAaFaZaAaFaZaCa4aZbtaCa4a4bbbb.c.c.cao.abc..........", +"..............bG.#.c.xbca4aFbpbabpb.b.bdbabra9bpb.aVbpbabPaKaJbla9aIa1a9aJaIbababob.bla1aJbhaIa9a9bla5aJa5aIb.a9a5a9aJbhaHbpa4bzbl.9#e.xbtbibobqbnbJbFaIbCbsbabpaJbdb.b.bpbpaKbkbpbdaKbdbdbibrbrbrbdbrbiaKbrbrbnbkbka4bOaFaZbnaFa4aAaFaZaCaZaZaZbubbbOaCa4aAbj.cao.x.9#ebI..........", +"...............q.Kbj#VbjaZbkaKasbabab.a9babpaKbabPb.bqb.aHb.bdbaa1b.a5a9aIbobdaHb.bAaJa9bla5a9a1b.aJblaIbpa9b.aIblaJa9a5a5aZ.Bbcbfb..##.bDbnaJbkana4boaJbn.cbDa9blb.bpboaJaKbibrbaa9bqbabpaKbdbibqbdbibrbibrbkbkbibsbdbkbnbnbnasaFa4a4aZaZa4btaZaCbcaAa4aCbIbj.c.x.c.9#e.y..........", +"..............a9#bbjbJaobtbkbibrbsb.bobdbqaJb.b.b.aIbdbqb.boaKb.a5blbab.b.a5bpb.b.bla9b.a5boblaHbla1a9aJb.aJbabpaJaJbPa9aJb.bUaZbobd#..abcbraIbH.abbbfbabsa4bcbfbUbpaJbdbNbpb.a9bqaKbibabibdbdbrbdasbiaKaKbnbObkbsaFbnbsa4aFa4a4aFaFaZa4a4btaCa4btaZaAa4aCa4bcao#V.cbj.BbO..........", +"...............v.#bj.cbua4asbdbibpbrbaaJbkbabra9boaJaHbfboaHaHbfblbfaIaJb.bCa5a9bhbpaHa5bpa9bpa5blaIbob.bGa9a5a9b.b.bpbpaHaTbHbgb.bj.BbjbrbmaHbfaA.KbUbfbpbra1aHbibabdaIaIbqbaaJbrbabqb.brbdbpbibibkbibpbibsasbkbnasbdbkbraFaKaKbnbkaAa4a4a4a4aZbbanbbbta4.dbj.c.x.cao.KbR..........", +"..............a2#fbj.cbua4asb.braKbqb.bqb.aJbab.bga9bCbRa4a4bObnbHbaaIbfboawa9aIa5azb.bobAa9boaJa9bab.boaHbpa5aHaJbaa5aIbla9bhbLbj#fbj.daZbnbObnbObc#2bkbga9aJbrbdbpbab.bHaKaKbpaKbdbiaKbibdaKbibibsbkbibrbibdbrbsasbdbbbIbbbIaZbIaAbnaAa4bba4a4btbcaCa4aCbcbcbj#V.c.c.B.w..........", +"...............l.K.x.c.caZbRbibibdbpbab.aJbpa5bebO.7#f#f#e#f#e#f#f#e.7.dbhbga1b.bqbab.b.aJaIa9baa9a9boaIaTaIb.baa9babpb.bebfbp.A#f#..7#b#e#f#e#f#e#.#bb8a4bmbgaKbpbabibWb.bab.bab.bib.aKbUbibibrbrbdbibObkbFbsaAa4#..7#e#e#e#e#e#e#e#.aZbibtbvbta4a4a4bcaZbbbj.x.x.cbj.#bF..........", +"..............bL.#bc.bbcbtaAbiaKaKbibraKbha9.t#fb8#b#b#b#b#b#b#b#b#2#eb8.K.pbNbhaHaJb.aHaJbaa5blaHbpaTawbobpbaa9bdbpbfa9bR.c#f#f#2#b#b.7#b#b#b#b#b#e#2#b#f#c.nbfbha5aJaKbrasaKbpbrbaaJbdaKaJbrbHasbkbnaKbibb#c#e#e#e#b#b#b#b.a.7#b#b.B#f#.aZbiaubua4bIa4bubcbj.c.c#V.x#faV..........", +"..............aX.Kbc.c.cbubRbkbdbpbdbkaJaY.cb8#e#3.7#b.B.b.b.b.b#3#.#.#.#fb8b8.dbqbfa1b.b.bla1bAaHa9boaJaVbqaKbUaKbfbO#eb8#f#b#2#b#b#b#b#b#b#b#b.7.z.z#..a#fb8#f.5aHbgbdbRbsaKbPb.bdaJbpaKbpbwbkbkaKbraA.b#f#e#b#2.a.z#b.z.b.b.a#..b#..a#e#faZbaaCa4bbaZaC.dbj.c.c.9bj#f.q..........", +"..............bx.Kbj.xbDbbaZaKbibibabrbgbc#f#2#b.abJbua4a4a4a4a4bubjbv.c.c#c#e#f.#bRbfbla1bob.aKbFbab.bpbPbpa9bfbBbjb8.##.#b.B#b#..xaBbjbcbubjbjao.c.b.bbJ.b.b#e#f#ebnbha9aIbdaKbsbrbaa9babCasb.brasa4#e#e.7#b.a#.bJbvbj.xbv.c.c.b.b.b.cbJ#b#faZbibtbbbcaZbb.c.x.x#Vbj.KbB..........", +"..............bK.a.x.c.xa4aKbsb.bpaKbgbd#f#b#b.b.bbJbubIa4bnbnbRbnaZa4bubjbcbc#.#f#f.dbibpboaHblblbaa1aHbhbgaJa9bD#f.7#b.B.bbjbta4aCbta4aCa4bbbtaCbtbcbj.c.bao.b#.#eb8bHbob.aHbrbpbdbqbabqbqaKbiav#b#e#b.B#b.b.abJbubtbcbubjaobv.c.b.b.b.b.c#b#favaZanbbbcbtbj.c.c.x.c.#bB..........", +"..............bE.b.xbJ.xa4bnbibibqa9a1#..##2.zbvaXbKaYa1blbtbObnaZbnbRbOa4bcbva4bj#e#f.#.BbbbibCblbobqbHbka4#3b8#e#.#e.abtbnbnaZ.xbDbDbJbbbta4a4btbcbtbIbcbu.cbJ.x.b#bb8.abcbIbdaKbrbAbobkbcbD#b#e#b#b.B#bbbbubka9bDbubIbuanbcbv.xao.cbJ.bbJ.c#ebcbrbta4bbbtan#V#V.c.x#fbT..........", +"...............k.b.x.c.ca4asbrb.aKbCaK#e#b.z.xbuaG..aQ....bY.xbDbt.xbvbububt.c.cbbbj#e.aa4#c#f#b.B#e.B#e#e.N.c#2#b.NaqbIbkbOa4bvbW....bi.x.pbDbtbbbbbcbbbcanbcbj.b.b#c#b.abj.b.B.K.b#3#b.K#e#Vbj.z#b.B.aaZbta1....aQbvbubj.xbv.c.bbJ.a#bb8.#.b#b#.bda4aCbcbcbjbj.x.9.c#fbM..........", +"..............aMbY.x.c.caZaZbibqaJbFbk#f#b.bbca4.x#fbW..bi.xaYa1.8a2.tbUbNa1a9bj.xbj#b#faJbmaJbpaKbpaKbibra5bO#f.7.Ba4bna4a4btbu..bL.v..bIbva4bj.xbDbJ.xbDbcbtbcbj#..b#2#fbpaHbCaFa4bnbkavbdaIbt#e#b.abna4bI..bTb3..bz.zbubJbcbj.AaC.z.dbdbk.B#..Bbna4a4bbanbj.8.c.c.c.KbL..........", +"..............aO.zbj.cbja4bnbkbibiaHbd.##b.bbDbtbDbJ..aOb8b.aUaGaQ.ka3a0bBaUaWbDa4.b#b#faIbfbhbfbfbgbgbfbfaw.p#f#bbJbnbna4bIa4.z.jaQ.gbQ.xbJ..bmbRbHa5.ybdbcbcbubjaB#.#e.BbpbqbiaIaKbobpbpbqblbb#e#bbDbsa4bD..aPbR..bgbO....bebKa7aIaU.yb#.qb8.7.zaZa4a4aZa4bj.c.9.c.c.#.m..........", +"..............aQbJ.c.c.ca4bnbkbpbrbrbr#b#b.baobI.bbd..bnbYbW.h.jaUbx.jbK.xbm..bca4bJ#ebJblaKas.dbJbu.cbnaKboaC#e#bbJbOa4bIaCa4bJbK....bx.bbJa7bL.mbBa7a0bhbJ.dbtbc.x#c#bbJaKa4bubc.xbJbjbjanbRbn.B#bbjbkbRbuaZ.k..aQ.xa4....byaW..bJ..bO...p.##ebjaHanaZa4bcbj.x.x.c.c.#aR..........", +".................z.c.c.xbcavbibpbababgbbb8.z.xbv.x...h.Kbvbi..a1.xbKaQ.wbc.obyaCbc#2#ebu.d#e.K.B#.#f.B.##f.B.b.7#b.aaCaZa4a4bJbU..bcb3..bCb8.kbzaQa0bX..bO.cbcbcbcbj.7#e.b.c#e.K#e#e#e#b#e.K#e.9bJ#b#bbbbnbn.abY..a1.abIbSa1bCbd.vbD.jbc.raZ.B#fbRbnbtaZaCbcbj.c#V.9.x.KbK..........", +"................bJ.xao.cbbasbkbqbdbaawaK#e#e#..caZ.ibI.cbtbObdbJbv.8bobvbbbubcbD#b#f.Kbua4bkbPaHaJaIa5bdasbO.x#e#e#b.ba4aZa4bDbc........btbJbdbRbAbG.Abdbcbcbtbtbj#.#b#ebcbubkbdavasbkbnbka4bc.a#2#b#b.abva4bua3aP.bbtbc.a.z.c.ab8aZbib8b8#e#ebjbpbcbbaCbbbbbc.x.x.c.c.KbE..........", +".................x.x.c.bbUbrbkbdaJa9baaHaJ#f#e.b.x.KbjbIa4bu.xa4a4a4aBa4aZ.p.c#eb8.aaJbhaHaHa5boa5bfaIa1bfbgboas.B#e#bbJbca4a4bubDbMbxbubva4.cbj.b.bbc.cbIbtan.x.b#bb8a4bmbpblbhbla9bababqblaJavbc.c.B#e.a.cbbaZbubba4btanbuanbuan.b.B.c.b#f.cbpbbaZaZa4bcbu.d.c.c.9.c.K.k..........", +".................A.z.c.cbuavbpbiaKbAbqbabfbi#eb8.7aobcbbbtbtaCbIbIa4a4bc.x.B#fb8aAaHbgaJa5bhaIa9babhbqaJa2aJa2bga9.B#f#e.z.xbbaZ.dbJbJ.xbbbcbIbbbbbIbca4bbbD.x.7#fb8bnawbaaJbdaJa5bsaKaJaKbrbHbkbrbdbc.B#e#e#b#.buanbtanbtanbcbc.x.b.b.7.#.bbraFa4aCaCa4bban.c.x.c.x.c.K.h..........", +"................bc.b.c.caZbibabdbqbaaJaKbpbgbpbj#f#f#b#cbJ.x.xbjaobJ.7#eb8#ebub.bhblb.b.aJbgbqa5aHa1bpboaHbaa5boawbfa4#f#f#e#b#VbjbcbcbbbbbtaCbtbcbcbc.c.b.7#f#fbIaJbhaHbdbiaIbAbibdb.bdbqbdbibrbobabraZ.c#e#e#e#b.b.bbJ.c.b.b.b.7.a#b.KbjbkbkaZbnaZaCbbanbcao.c.x.c.c.BaO..........", +"................bI.B.x.bbcbibkbrbobaaKbpbabdaHbfaKbc#e#f#fb8#f#f#f#f#e.BbabgaHbgbgbaazbpbpaHaJa5bFaIa9aHboa5aJbaa9bgaYbpbc#eb8#e#b#b#e#b.7.a.7.7#b#e#e#b#e.K.baKbgawbpaIa5aIbaaJbpbpasa9aKbsbaa9aKbdbiaKasbb.d.a#e#e#e#b#e#b.B.B.B.a.baCaAaAaZa4aZa4bua4bcbbbj.x.cbj.b.NaP..........", +"................bI.b.A.xbuasbrbpbCbibabpaJbaaIblawbeawaZbObHaZbIbObrbfaIbeaIbpb.a9bpblaIa9boa5boaIa9bpaJbBaHaJa9a5bpboaHbhbla4#f#b.b.c#.#b.B#e#f#e#c.A#f.abqaIbgaIbCbabpaJbqaKb.babkbdaKb.babrbabrbibsbqbdbqaKbkaZbjbJ.a.z.b.b.cbca4aAbka4aZbna4a4a4a4a4bbbcbj.x#Vbj.b.zaQ..........", +"................a4.b.xbjbtaZbqaTbqb.bdaKbpb.bhbdbCaHaHbhawaHbfbgaIbhbpa5bibab.bab.aHbabpa9bgbabha5aJaIaIa9bpbaa5aJbpbgblaIaHaEbs#e.7bcbnbkbqaIaIaHbhbcaZawbhb.aKbdbaaJbobdbdb.bpbibNbpbkbpbiaKbabababdbqbababsbCbkbrasbnasaFbnaAaAaAbnaZbnbnataZa4a4aAa4.dbbbj.c.c.x.b.z............", +"................bO.z.9.banbHbPasbpbpbdbpbhbabdaJb.b.a5a5bpbdbrb.a9bhboaKaIbpbqa9aJblb.bla9aJbpbBa1bablaIbgbaa5aHbfazblbaaHbFa9aYav#f.BanbRboaHa9bobcaZbgaJbdbab.b.bqaKaTbpb.a9babablaJb.bdbibaaKbrbpbdbqaJaJbibibiaFbdbrbsbsbnaZaZasa4aZa4a4aFaZaZa4a4a4bbanbj.x#Vbj.bbJ............", +"................bX.KbjbJbbbrbrbib.baaKbpb.aIbabraIbpbpbiaIa9a9blaIaKa2bgb.aJaHaTa5aJboaJaHaJaHb.boblazaIaJa1a5bhaIbhaJbgbgbpa5babhbn#fbDbtbHbhbdbb.bbga9bpbabqb.baaJbabob.bobibrbraJbpbkbkb.b.bdbnbdbdbibdbsbHasbsbiasbRbnbsaFbHbnaZbObOasaZaZaAa4bObtaCbuanbc.x.c.c.b.x............", +"................bU.K.c.cbubnbibrbpbNaJbpb.bdaJbdb.bAa9a9bia5b.baa5bib.bFbCa2bhaJblaIa9b.aIblaIa9b.aIbga9aIaIa9a9boa9bfa2bablaIb.blaJ#b.bbcbraybibua4byaJbdaIaKbdbla5bdaJaJbabrbabdbdbrbdbqaKbibrbdbrbrbkaKbibibsbibdbdbsbnbkaFaAbOa4bsbOaFbka4aZa4aZaC.pbbbcbj#V.x.9.b.A............", +"................bd.a.cbJbcbkbsaVaKb.bpb.aJbdbpbdaKbhawb.aIboaHbobra9a9boboaJb.aJaJb.a9blaHa9a9a1a9aJa9b.aHa5aIaJa9aIa9aJboa9bAaHaIbr#b.xbtb.aIaJbDanbgbgb.bibpb.bdb.babdbaaKbobibrbqbdaJbababpbdbaaKbqbabibrasbibdbsasbrbrbnbHbHaAaFbnbkbkbsbka4a4a4a4a4bbbD.c.c.c.c#.bD............", +".................t#ebj.bbcbkaJbdboboa9bda9babdbqa5bhaYaJbhblaJawbgaEbga5awa5a9bpb.aJbqa9bob.bpa9a9b.a9bpboa1aVbha9bhb.blaIa9aJblbi.z#3.xaZbhbfaJbi.abbbhaIbdbdbFbaaKbrbraKbpbFasbpbdb.babrbsbdaKbpbibqbdbrbkbraKaAaJasaAbibkaZasasasaZbkaZa4bnbna4ata4bbaCbj.c.x.c.x#..d............", +"................bP.Kbj.bbcbObdbdb.aKbibob.aJbrbga5a4.AbJ#3#e.7#bbc.pbnbwaybgbfa5a9aIa9a9aHb.a9blaIawb.aJaIbNbpaHboaHa5baaHaEawbA#e#e.z#.#.#e.7#.bJ.b#ebJbaa8aJaKbibabibabrb.bqb.bdbpbibkbababibdbkbibibiasbdbpbpava4bD#.#..B.7#..b.xa4asbsaZaCatbnbbbbbb.ebcbj#V.c.x#bbI............", +".................q.Bbj#VbcbnbdbibrbBb.aJbiawa5.8b8b8#f#e#e#e#e#e#fb8#f#e.8bkbobgaJb.aHb.babqbla9b.baa9bBa1aJa9b.aIa9a9bgbobH#V#f#e#..7#b#b#e#e#e#e#b#b#e.Ka4bga2bgbdbdbdaKbpb.b.aKbdaKbdaKbabaaKaKbsbdbqbCbibI#..z#f#e#b#e#e.B.B#e#e#e#.bIbdaZaCbna4aZanbjbjbj.c.c.9#ba4............", +"................a2.B.cbJbcaFbrbrb.aKbdbibhazb8#f#b#3.a#b#2#b.a#b.7.a#b#b#f#f#ebraNbgbdbFawaJbaboa1b.bhaIaIbla5aJa9aIbfbO#f#f.##b#..a#b#b#b.7.a#b#2#b#b#2#eb8b8.8bfbfa9bpaKbabpbibababqa9bdbqbdbkbqbaasaKbO.b#f#e#b#b#..a#3.z.b.a.b.z.a#e#f#.bCaZaAaZa4btbc.d.c.c.c.c.BbO............", +"................bS.a.c.cbcbnbiaKbdbobabebU#f#e#.#b#b.bbvbcbIbtbc.cbJ.b#..7#3#eb8bcaHbgaJboa5bob.boawb.a9a2babpa5boba#.#f#2.7#b#e#b.B.z.a.b.bbJ.b#..z#..a#2#2.a#fb8bbbgbhaKbdbpbibibdbdbnasbkbraKbpbobn#V#e#e#2#b.B.z.bbJ.xbJ.c.c.b.b.b.c.b.##bbraAbIaCa4anbjbj.c.c.c.BbH............", +"................aY.K.cbJbjbkbnbibrblb.a5#e#e#3.B.cbtbObkbkasbHbRbnaZbtbj.cao.b#bb8#e.pbaaIbBaHbibobAaHbga2bhaHaI.n#eb8.a#b#e#b.cbta4a4a4a4a4btaCbtbcbuao.bbJ#.#.#bb8.7b.aybrbpb.aKbqbrbkbCbpb.aJbi.5.z#f#b#b.abJbcanbcbcbubcbuaB.c.c.bbJ.c#V.#.bbFa4bbaZ.dbjbj.x.9ao.BbU............", +".................m.K.c.cbIbnaFbrbaaJbl.e.#.z#b.ca4aAaZa4bnbObna4aZbnbRaZbcbjaobj#.#e#f#b.AaAbfbgaIa2bmawbhbdbRbJ#f#b#3.B.za4aZaFbOaCa4aAa4a4a4a4a4a4a4btbcbj.x.b.b#.#f#faZa4babhbgb.bqb.blas.p.x#b#e#e.7#e.baCaZaAbubDbDbvbubcaoao.c.c.b.b.cbJ#fa4aFbta4a4bc.x.c.c.9#ebN............", +"................bx.K.b#VbcaZaZbrbdbpb..B#b#b.cbta4bJbObRbDa4aZa4aZa4bua4a4bbbubJbj#.#e.bbu#f#e.A.Abc.5.a#e#e.##b.z#b.BbJbkbkbka4bDa4b4bJa4a4btbIaCbtbta4btbuan.x.b.c#.#e.B.b#e.xaZbc.pbc#b#e.B.z#..a#b#ebjbkbnaZ.#bVaGbUby.bbcbubJ.aaq.b.c.z.c#bbJaKa4bbbbbcao.c.xbj.#.q............", +".................j.B.cbJbcbnbkbiaKbha9#f#b#.bDbcaZbsbybEbJbsa4bOa4bubRbua4a4a4bcbJ.c#2#fbpbhbrbO.d.xbjbta4bHa4#e#b.B.cbkbkaZbObvbA....bo.xaZa4aCbIbba4bbbtbbbtbcbj.b.b#b.abkbOa4.x.cbDbta4bkbqa4#e#2.BbtbsbOa4bta4aU.ibKa0bvbc.K.ba9bUb8.K.c.b.a#.bda4bbbbbc.c.c.9bj.#bB............", +"................bK.B.c.cbva4bnaKa9blbi#f#b.bbcbDbua0..aQ..a9bDbObtbJaUa4bva4btaZaC.8.ab8blaLbfbgbea2awbmawbmbi#f#b.baFbkaZaZbt.y..aWbV..bCbDa4a4bIa4a4btbbbtbtbtbu.c.b#b.aaIboaJblbhaJbFaIaIbgbO#f#bbcbsbna4aZbJbz...j..bEa4.bbsa7bUbHa8av.B.b#..bbsaZa4a4bc.9.x.c.9#fbz............", +"................a7bY.c.cbca4bObdbabobfbJ#e.bbjbbbJ.q....aPbJa4bIbtaU....bs.xa4a4a4.c#e.BbfaHbHaFbkbrbHaKbqaKa4#e.B.bbRbOaZbObDba..a4b2..aYbJbubtbububu.cbbbbbcbcbjbcbJ#e.bbrbkbnbkbIbtbtbubObi.d#e#bbcasbOa4aCaCbB...u..bGbJ.ba0a5b8b8a3bC.a.b#bbJaKa4a4a4bc.c.c#Vbj#fbT............", +"................aO.bbJ.cbcaCbObkb.b.bgbc#f#.bjbva4a0.ja0a3bf.x.ybIbuaUbWbua4a4a4bI.b#f.xbk.b.B#e#e.K.##b.a.cbc.7#b.za4aZa4aZbvbP..a4.B..bzbYb#aZa4a4bna6bIbubtbcbcbj#.#bbJ.b#e.B#e#e.a.a.7#3bJbcbJ#e.zaZbkaZbcb4........bebu.bbIbLaIbza1#f.b.bb8brbHa4a4bbbc.x.c.x.c#fbL............", +".................i.z.bbj.8aCbdbpaKa5a9aK#f#e#cbcbcb8.saW#fa4a4aZa4bu.5bvbIa4aZa4#.#b#f.z.a.xasbdbpaIb.aCbj.c.B#b#b.BbvaZbXa4btbD...mb...bHaqbEa7bKa8a0a6bvbcbIbcbc.x.7#e.a.BbcbbbbaZaCa4an.c#b.##..a#e#.bbbna4.Bbm.raWbxb8a4btbv.xan.A.a.b#V#f.cbabta4aZbcbDbj.x.9.9#f.m............", +"................aP.x.b.cbJaZbnbraIbAbibfbk#f#e#cbj.dbDbjbtbua4bOa4a4bcbIbIa4bt#V#fb8aZbpboawawbgawbfbmawaHa9aJbc.K#e#b.xa4a4aZbJbB....bebJa4bDbIbt.5.5.xbta4.pbu#V#b#fbJbHb.awbgaJaJbpbpaKbqaKa4bj#b#b#b#3buaZa4bXbcbOa4anbcananaoaB.b.b.b#e.BblbOaCbc.eaCbjbj.c.c.9.#bx............", +"................aQbJ.b.x#Vbcbibrbdbdbpb.awaZ#f#e#.bjbcbbbbbta4a4a4a4a4a4bt.x.Bb8#ebobfaIaHbhaKb.aJaJaHbgbgaIbgblaZ#e#f#b.cbca4bI.cbXbs.Aa4aZbIbtbtaC.daCaCbtbD.c#eb8bja2blaIaJb.a9b.bpbsbabaaHbaasan.z#e#e#bbJbcanaC.danbtbcbcaCanbc.c.z#b.BbobsbtaAaAa4.ebjbj.c.x.9#fa8............", +"................aQ.x.c.cbvanbkbraKbpbdbaa5bgaI#eb8#e.b.xbjbDbIbbbcbD.x#c#f#f.Ka4aHbBa1boa9bobfb.bobma5bPaHaHaHbgbeaK.B#f#e#bbJbcbtbcbD.da4aCaCa4aCbtaC##bDbJ#e#f.zaKbeb.b.bqbpaJbaaKb.b.bNbrbkbabqbqasa4.a#e#e#b.a.cbjbjbDbjbj.x#c#3.B#e.bbiasbua4a4a4a4.e.dbjbj.xbj.#bK............", +"...................x.b.xbDa4avbibqb.b.bqbabhaHaIaZ#b#f#f#e#e#b#b#e#f#fb8bDbsbobhbobpbpa5bpaIbgb.aJaJbpbpboa1aHa1bgbfbhaC.B#e#f#e.z.b#Vbjbj.x.A.x.xbJ#.#b#e#f.KanbfaYaJbqaIa5aKb.bFbda9aKbabsbibqbCasbdbpaAbI#b.B#b#e#b#b#2#b#b.B#e#ebJbtasaZbna4aCa4aAa4aCbj.c.c.c.c.#bE............", +"..................bD.b#VbJa4aAbRbabUaJaJbaaIb.aHbhblbdbI.9.A.N.7bJbIaZboaHa5bla9bFboaIaJaHbpblaHa9a9a9a5aHa5bgbhbha1bhbobr.n#..B#f#e#f#e#e#e#f#e#f#f#f#f.8aZaJblbpa9bgawaIbdaKbqaKaKbiaKbkbiaKaTaKbrbrbrbsbiaCbb.x.a#b.B#b.a.B.b.caZbnasa4bnaAaCbtaZa4a4bcbjbj.c.9.c#f.h............", +"..................bc.b.x#VbtbObibdb.aJb.bhbAaIaKb.bgbgbgawa9b.awa1awbgblbpa9a9a9aIb.b.aIbAblbob.bgblaJb.bhb.a5aJbobgaIa5blaHbfbrbObIbc.xbj.x.9aobbbOaZaJbgbobgbobdaIa5bha9baa9b.bobaaKbdbrbdbabrbdb.asbkbdbrbabdaAbnaZa4a4aCaZaFbnasaFaCaZaAa4btaZa4a4aZ.ebjao.x.x.c.B.h............", +"..................a4.z.c.xbbbkavbrbqb.bobib.bpa2bpbla9aJbFa9boawblbobAbAbhbhbab.a9bqbpa2aJa9a2aJbpa9boa5aJa9a9aJa9a9bfaYbhbfa5bhbfaIbpaHbpaJblblaHaIbmblawa1a5blb.bla5bNaHa5boa9b.bla9baaJbpbqaKbrbFbdbdbiaFb.bsbraFbsbsbnbHbsbkbnbsbkaFbnaZaAa4a4aZa4aZ.eao.xbj#V.c.KaP............", +"...................w.a.xbDa4bObrbdaIb.b.a5babaaJa9babpb.babhbla9bPbAbgbaa9aJboaTbpbobpbpa9a5bobaa9bpa2bpbAaHaIa9bpblbhbgaJbgbpbfbCaJbPaIa9bobqbobqaIbfbNblb.aIboaJb.a9bdboa9bdbabpbaaJbabAaKbkbabrbrbababqbdbibk.wbkasbabsbnbObRbRa4aAbsbOaAbnaZa4bnaCaZanbc.9.c.x#V.B..............", +"...................w.B.cbjaCbnbHbiaJbpaJbla9aJb.blaIaHb.a9blbla9aHa5bpb.b.bpboaJbabpa9bobhaIa9a5bhbha5aHa9a9aIa9a9blboblbea1b.a9b.a9b.b.bga9bqbabdbpbGa9aHbqa9a9bhboaKa5babdaIb.bqbabqaIbAasb.bdbiaKbqbibrasbibrbkbkbibrbsaFbkbsasbOaZa4bnaZaZaZaZa4a4bIbcbj.c.c.9bJ.a..............", +"..................bH.z.x.9btaFbHaKaTbpblbobobla9blbl.qblaJbBa5bhbobhbpaJaHa9a9a9bpbpbPbabobob.blblblbhbhbpa9bobAaJa5aybla1aIa9a9a9bobCb.bpa9.tbla9bqbCaIa9a5boaJaJaWa9bgblb.bpa9aIbsa9aJbrbdbpbdbdbqaKbkbdbqbRbrasaFbHbHbkasbRbnbnbsbkbna4bnaAa4aZaAa4a4bjbc.xbj.9.b.z..............", +"..................bN.a.x.cbcbnbkbrbFbWa5boaIbBa5bqbAa5b.blaHbAbGblbGa9bobNbpaIa9bqaJbpaJbFbCbpbhaJb.boa9aJa5a5bFa9b.a5blbFa9awbqa5a5bpbAbdbdaJbfbdbqboaKaJbabpbAbpbgblb.bfbAaJa9bdbrbNb.bdbkbdbabkbqbdbCasbsbHaKbabrbkbibnbsasaAbnbsata4aZaFaAaAaZbba4aC.dbjbj.x.9#.bJ..............", +"..................bG.B.x.canbnbRaKb.bpa9bhbpaI.qaIbpbla9b.blaIa5a5bAaJbobhbaa5b.bpbpa5b.bpb.blbpbhbga9b.a1a5aHb.bla9aJaIboa1b.aIb.aHa9aJbrbabpbaaJbdbGb.bda5a9bababib.aJa1aJaJbUaJbpbabiaKbrbrbiaKaKbdbdbdbsasbibibdbkbkasbsbHbkbObnaAaZaZbnaAbIaZaZaZbbbcbjao.x.9.a.8..............", +"...................q.B.x.xbcbObibib.bqbpblbBbqb.a9bga9boa5awbGaIbpboa5a9bqboaIa9boaKbFbhaIbpblbha9boa2aIbgbhbpbobhboa9blboaIbhbFboa5bfa5bla9a9biaKaHaVbobpboboa9bfa9bdbdbpb.b.bpa9bdbpaFbabpbibibabpbdbibHbibCasbiaFbibsbRbkaFbsbsaFaZaAa4a4a4aZbnaAa4bc.dbjaobj.9#.bD..............", +"..................a1.K.x.cbvbObsbdb.b.a9baaHa9a9b.bGbhboa9bAa5bAa9bhaJa9bobaboa1bFa9boboa9a9blbBa9aHa9boa1bCbla9a9aHbhbpa9bAaIa1aJboa1bAbpaIbr.qbhaIbUawaHbGbdb.blboaHb.baaIbab.bdbdbCbabHbCbdbiasbdbiasbrbHbkbsbrbibrbkbkbraFbObObsbna4aFbRa4btaCaZaCbt.dbj.c.x.9#bbc..............", +"..................bM.B.x.xbja4bkaKbdbpboa9aJblblbhbpaHa9bpbobgbAa9blbqbobgblb.bhblbpbybabwaHa5aHbPboblbgbhaIa9bgbobGblbgblbpboazboa9blbhb.bqbpbpa9boaTbpbdblboa9bsb.aHbBaJbqb.b.aJb.blbaaKaKbpaKbqbabCbrbdbkbHbkbdbkbsbkasbkbHasbRaFaAaAbnasa4a4aZa4bb.pbcbc.9.9.9.BbX..............", +"..................aX.K.x.xbtaZbHbNbdbdbpaHbaa9a9aIa9aHbFbpa9bpboa1boboa9a5a9bFbpaHa9bFaJaJbdbBbhbhbla9bha9a9bgbgbAa5bpbBbgaIa9blbAblb.a9bgbFbobaa9aIb.bdboa9aJaJa9bdbpbdb.b.bdbpaKbNaKbib.brbababaaKasbdbdbrasaKbibkbsasbkbkbkbnbnbObRbRaZa4a4a4aZa4aZbbbjbj.c.cbj#fbU..............", +"..................aR.K.c.xbubtbnbrboaKb.b.blbpa9boa9a9bob.bdbpa1bgbhbpbAb.aJbga9bhaYbAaHblbaaJbpboaHaJa5bfbpa5boblbgaya9bBa9a9bhboblaJbGaIbhaHbpblbGbpaIbpbpbobdbpbgbdbdblaJbpaKbUbpbpbaaKb.aKbFbibrb.bibpbibkbibibkaFbRbObRaFbkbsaFbkbnaFaZbtbnaZaZbbbbanbj.9.c.9#fbP..............", +"...................k.B.x.xbcbtbnbsaKb.b.bpa5bhb.aIa9bgbpb.bla9boa9bpbAbFaIbBa9blbNaHbobAa9a9blaIbpbAa9a9bgaJblblbhawaHbhbabGblbfa9a9bpbpa5blaIaJbpbabha9biaJbFaJaHaTbab.blb.b.baaJbpbqa5babpbdbqbdbdbpbsb.bFasbRbrbkbkbkbsbHaZbnbnbHaFaAaAaAa4aZa4a4a4a4bcbjbj.cbjb8.q..............", +"...................i.B.c.cbca4bRasbNaJbpb.bobla9bpaJblbAa9boa9bqbpa5boa5boa9b.a2bla5aIbFa1bla9b.bfa5a9a9b.bga1bpa5boblblbhbgboa9blbha1a5aIblb.bga5bFaIbabqbfbpb.babqbaaIbpbpb.a9a9bpbrbiaKbpaTbpbNbpbdbabdbibraKbnbnaFbrbsaAaAbsbnaZbnaAaZa4aZa4a4aZbba4.daobj.x.9b8bz..............", +"....................bJbJ.c.5aZaFbdbqb.b.bdbga5bqbAbhb.b.bpbpbaboa5bhaJbobhawbfbCbpbobhblaHbla5a9bobfbgaHa1bhblbhbha1bzaIaHa5aJbpbBbpa1bfblaJbabobpbia9a5bpbhaJb.bpaIbrb.bpbpaJbdbabqbaaKbdaKaJbNbaaJbrbibabaasbibsbdbkaZbkaFbsaFbsaAaZa4bnaZaAa4a4aZa4an.dbjbj.c.9b8.m..............", +".....................xbJ.cbububObibrbdbpbdb.bgbpbFbAbhaIbGb.babBaIbpbpbFbhbaaIb.aHb.bhblbpa5blbga5bpbfa9b.a9bgbha1a2bobla1bhaIa9aJbqa9boaIbgboboboblbaa9bobNa5bPbobiblbaaKa9babdbAa9bdbgbdbdaIbdbraTbrbrbdaKbpbiaKbrbkbkbsbibkbHbnbnbna4bkbka4a4a4bbaC.pbcbjbj.c.xb8bK..............", +"....................bc.z.xaobIbRbHaKbdaJbpb.b.b.blaKbpblbBblboaJblb.bpblblb.a2bobfbzbla9boa9bhb.blaIa9aIbBa5bga5bla5a9bgboa5blaHb.bga5bla9a1a5baaHbobGbpbpb.a9aKbpb.bCa9b.aKbdbpaJb.aKbPbiaKbrbabibibabrbdbdbkbrbrbibkbibkbsbkbsasbkbnaFbnaAaZaAa4bbbbaCbbaobj.x#Vb8aP..............", +"....................a4.a.x.xa4a4asbdbqa5aVbqbpb.bqaIa9aHbpb.bqblboa1bFbdbgbfa5bCbhb.a9bobgblbAbpa5bla9awbfbhboa5blbfbgbhbhaHa1a5bgbpa5bhbobBbhbgb.blbqbaboaYblbqaJb.bpaHbpaK.qbsbdbaaJaJbibobAbibrbpasbibCasbrbibRaFbkbsaFbsbsasbnbsbnbnasaZa4aAa4a4a4bcbcbjao.x.b.K................", +"....................bU.b.x.xa4aAbkbsb.bpbab.bobababVblblb.boa5a9blaJbpbgbfbCa9bgbgboaHa9a5a9bgb.aIbhbga9aVbBbfbha9a5blbla9bBawa9bdboaIa1a9bgbaa9bpbBbobpbqa1bpbdbNbpa5bibdaJbdbpbqbdbFaIbabqa9bHbraKbib.bsbibaasbkbkbibkbnbHbnbnaZbkbkbnbnaZaZaAa4a4aZbbbcbc.xao#..z................", +"....................bN.B.x.xbcbnbkbqbababqb.bFbobFa9babAblaJbobFa9bda1bfa5bobBawa5bhblbhbfbpa1a5blbhbga5blb.blbhaHbha9bgbeaHaJbobfbFb.bBa5aJbgbababpbla1b.bpblbCaIaJbpa9awbabobpa9biaKbpbdbpbCaJb.babpbpbabrbibibrbibkbnbRasbnbsaZbOaFbnaZbnaZbna4a4a4bcbjbjbjbj#b.8................", +".....................q.Kbjbjbcbnasbrbpblb.bUbqa5b.blb.bPbpb.bCbFaJboa5boblaHblbhbgaIbgb.babgbma1a9aHa1bha1bga5blbBa9aHawblboa5bAbla2bgaHbobab.babhaJa5bFblaIa9bpbla5bAbpbFaHbpbobibdaKbiaJbdbibabrbFbibsbibHasbibibkbkbnbnbnbnbnaAaFaZasaFaAbnbta4a4a4anbcbj.cbj.B.y................", +"....................bM.K.9bjbcbbbdaKbra9bqboa9boboa9bpaJa9babAaJboblb.a9bhb.boa5bgbBaIa9bga1a9aJa1bla5boa5aIbgboblbhbg.qbhaybhaIa1blaIbpblaybpbgbFbqbobhbsboaJbBaKbfbAbabAaHa9b.b.aJbababpbabdbCbibibdbCasbrbrbdasaFbkbsbkaAbsbRaAaFbnaAbnbkaZa4aZaFa4btbcbjbjbj.#bR................", +"....................bK.Kao.x.daAaFbrbdbdbFaIbhbqa5b.bhblblb.a9bBbobBbpb.bqa1bhb.bgblaJa2bha1a9bpblbgbla9aI.qaIbNbhaIb.aHblbgbGaHbybhazbgboaHbab.aJa5biboa9bdbza9biboa5aKblbpa9a9a5bpbdbabnaKbsbkaKasbrbkbqbdbkbdbsbnasbkbkbkaAasbkbnbRbnbnbkbkaZaCbnaAbcao.9.xao.KbG................", +".......................NbJ.xbDaZbnbUbibra9boa9blbla5babGaIaKbGboa9boa5blbha1a5aIbhaHbFbgbhblaIbha5blbaaJ.qbobobBbpaIa9blaHbAaJbzbrbha1bAb.bpb.aKbFblaHbpbqbla1bdb.b.a9bpb.aKbaaKbdbpb.bsbibdbGbibkbsbib.bkbkbrbkbHbkbnbnasbraZbnbHasaAaFasa4a4a4aZa4a4anbu.cbj.x#f.m................", +".......................y.Bbjbjbtbsbibdbdb.bqa5a5a9blb.b.aKaJaJbNboblbla5bobpa9a5a1boa9aJbhbGaHbfbqbabfaJbgbpb.a2a5babpbhbhb.aHa9aIa9bqb.a5boa5baboa9aVbpaKbAb.brbpbpbdbrbqbababUbraKbsbibqbdbkbiasbdbibrbkbkbiasbsaFbkbHbkbkbnaZaFbnaZaZbna4a4aAa4btbbbbbj.9bj.b.NaQ................", +"......................bBb8bc#Va4bsaZbHbdbaaKa9b.bNblbpaIbabpb.bNbaa9bablblbpbla9awblbAaHaIbaaJa9aJa9a9b.aJa9aIbpbpbhbha5blaIbab.baa9aJa5b.b.bdaJbBb.aJbaa1bAb.bqbob.bdaJbpaKbdaKaKbrbabdb.bkbrbkbpbdbibsbrbqbHa9bibkbsbOaZaFa4bnaAaZbtaZataZaZa4a4aC.ebcbcbjbj.Ba4..................", +"........................#f.bbjbuaZbsbrbdbdaKbdbCbaaJbCbib.b.babwbabhbobablb.bobAbBaHbGbFbAaIa9a9blbob.b.a9aIaJbpb.a9aJbaaJaJbobdbpbabpbpaIa5brbpbpbdaJbabibaaHaKbababdbabAasbqb.aKbpbpbraTbkbabnbkbrbHasaAbkbkbsaFaFbHbRbka4aZbka4aFaAaZa4a4a4bbbIbIbtbcbjbjbj#fbT..................", +"........................bH#f.xbcbObsbibkbUbkbdbabaaJb.babqb.bib.bdbdaJbpbdaJb.aIaIbFblbPbqbabababpbPaJbpbpbaa9a5b.bpboa9a9bhaJb.bpa5aJbaa9a9babpb.aTbrbabGbpbUaKbqaKb.bsbpb.bdbOaKbsbibdaKbpbrbibsasbabsbnbHaFbnbkbkasbObnaZbnaFa4a4bHaFaAa4aZa4aCbbanbcbj.9.cbY....................", +".........................i#f.c.9bbavbibkbpbobHaKbUbCaJbpb.b.b.bUaIa9bib.a9bobab.a9bqb.aJa9bobaaJaVbpbaaJb.a5a9aJa9aIaJbAaIbdbab.b.bpbdbGbabpa5brbabibdbCb.bra2aKbdbibUbdaKbdbdbNasbUasbqbibdbHbkbqbnbkbsbraZbnbsbrbkaFbkaZbnaZbnbnaZbta4aAaFaCbcbcbtbcbc.dbjb8a1....................", +"...........................w#fbjbjbObrbHbkbdbdbibdbpbpbpbdbabpbpbibab.aKbpbabrb.aKbpbNbpb.b.babpb.bpaIaHaJa9a9aKbpbpbaaIa9b.b.bpbdbpbdbibababkbdbpbabnbkasbrbsbRbCbibibibkbkb.aKbkbqbibkbdbibibsbibCbsbnaZaFbkbkbnbkbkbkbnbOasaCaZaAaAa4aZbta4aCa4bbbcbcbc.Bb3......................", +".............................7#fbjbDa4aZbHbibNb.bdbabdbHaKbibabdaKbCaTaKbdbpbqavbUbdaIb.bqaJaKbdb.bpaIb.bdbabpbdb.brbdbdbrbdaKbibabpbdbdaKbibrbrbibrbqbkbkbibkbnbiasbdbsbnbsbnbravbqbrbiaZbnbrbrasasavavbsbsaAaAaZaFaAaFbtbnaZaAa4aZata4aAbbbba4bbbc.xbc.a#faQ......................", +"..............................b3#fbjbjbbavavbqbibibibCbdbdbHbibibibdbdaKbqbibdb.bpaKbab.b.bdbdbFbibaa5bpbabdaJbaaKb.aKbabdbdbrbnbpbabrbibqavbabibRaAbkbFbnbkbHbibkbObsbHbrbibRbnbiaFaZbkasaFaZbkbnaZa4aAbsbsaZbqa4a4aZaCaZaAa4aFaFbnaCa4a4a4aCbbbjbDbc.B#fbE........................", +"................................#cb8.zbcbcbIbna4bnbibkbibibibdbsbsbdbpbsbpbdaKbrbdbqasbpbHbsasbpbiaKbkbraTbkbiaKbabqbibibRbdaKbraZaAbObrbkbObkbpaAbsbOasbibOasbkbCbsbna4asaZaAbnaZbkaZasbsbnaFa4aCaFbna4a4bbaCbkaZaCa4a4a4btaCa4bcbtbtbtananbubcbc.bb8b2.i..........................", +"..................................bB#fb8bJbDbc.dbcbcbIbcbtbbbt.ya4aZbka4aZa4aZbnaZbOaZbkbObsaZa4bCbsaFaZaZaFbkbnbkaFbkbsbka4bnbna4aZaZaZaFbna4a4a4bnbnaZa4a4a4a4bna4bRaAa4a4bIaCbnbtbbaCbta4a4aCa4bta4aAaCanbubuaCbubcbbbtbtbubububcbubjbubcbu.xb8b3.v..............................", +"......................................b0#f#f.Kb2.z.zbJ.cbJ.bbJbJbv.AbJbvbJbD.xbubDbvbDbububI.AbDbubcbcbDbDbIbubcbDbDbDbua4btbcbDbubcbubcbDbubtbcbDbjbububcbcbvbcbjbvbIa4bcbubbbububcbubDbububDbcbubcbDbv.xbv.x.c.xbJbJbJbJaBbJ.bbJbJbJ#3.N#f#f#fbH..................................", +"..........................................bZb1.5bD.8.z.7.z.Nb2#f#fb3#f#fb3#fb3#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#f#fb3#f#fb8#f#f#f#f#f#f#f#f.K#f#f#f#f#f#f#f#f#f#fb3#f#fb3#f.B.NbY.z.z.z.8#c.A.A.CbXa9bK......................................", +"...............................................................i.i.i.h.h.k.kbK.j.j.m.m.m.6.6.6bZ.6.6bZbZ.ubZ.u.u.u.u.o.o.o.v.v.v.v.v.v.v.v.u.v.v.u.v.v.v.v.v.v.u.ubT.u.ubZbZbZbZbL.6.6.m.m.m.m.j.j.j.j.k.g.h.h.h.iaP................................................................", +"....................................................................................................................................................................................................................................................................................", +"...................................................................................................................................................................................................................................................................................." +}; diff --git a/xgnokii/xpm/6110mini.xpm b/xgnokii/xpm/6110mini.xpm new file mode 100644 index 0000000..4eee2e6 --- /dev/null +++ b/xgnokii/xpm/6110mini.xpm @@ -0,0 +1,68 @@ +/* XPM */ +static char *icon6110mini_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 18 45 16 1", +/* colors */ +". c #ffffff", +"# c #e0e6f3", +"a c #bfcce5", +"b c #bfc0bc", +"c c #90a6d3", +"d c #899c77", +"e c #8b8eba", +"f c #6571a2", +"g c #4066b3", +"h c #48607d", +"i c #5a5c44", +"j c #3f5266", +"k c #2c304e", +"l c #003399", +"m c #2a2a22", +"n c #081116", +/* pixels */ +"..................", +".............#b...", +".............mna..", +".............mna..", +".............nnb..", +".............mnb..", +"......bbbbb#.nnb..", +"....bnkfeeeb#bmb..", +"....nnhfffeea#bb..", +"...dnkhffffeiiab..", +"...mnkhhhkjffjcb..", +"..#nkjhchknheaca..", +"..bnkjhefjhhfbcb..", +"..bnkhfhffffeacb..", +"..enmmmnnnmmkheb..", +"..hnnnniiiinnnna..", +"..hnnnnmmmmmmnna..", +"..eni#bbbdbbbdnb..", +"..hndbdimidnmdnc..", +"..fni#dniiiiddnc..", +"..enibimiiiiidnc..", +"..enidddddidddnc..", +"..enmddddddddinc..", +"..eknmmmmmmmmnje..", +"..ekknkknnnkhhhe..", +"..emmmmjjihnkkhe..", +"..enknnmnnjknhhf..", +"..enkkknmmmhhhhf..", +"..enmiknnnmkiijf..", +"..eknnmkhjhmmmhe..", +"..ekmmkjjjjhjffe..", +"..enmikkmikjmije..", +"..eknnjjknjfjkfe..", +"..ckiikkiijjidhe..", +"..bkmmkkmnkhmmhe..", +"..bkmkjjjkhhhffe..", +"..aniikmiikjmijc..", +"..aknnjjknjfkkhb..", +"..akmkkkiijjjdhb..", +"..annnkkmnkhmmjb..", +"..akkkjjjjhhhhhb..", +"..#kkkkjjjjjhhhb..", +"..#nmkkkkkjjjhkb..", +"...jnnnnnnnnnnj...", +"....#........#...." +}; diff --git a/xgnokii/xpm/6150.xpm b/xgnokii/xpm/6150.xpm new file mode 100644 index 0000000..01d01a8 --- /dev/null +++ b/xgnokii/xpm/6150.xpm @@ -0,0 +1,663 @@ +/* XPM */ +static char * Background_6150[] = { +"138 407 253 2", +" c None", +". c #E7EEEE", +"+ c #C9CACC", +"@ c #A6A7A9", +"# c #8F9A9C", +"$ c #9D9C9F", +"% c #98A6A9", +"& c #B1B2B4", +"* c #C9D4D3", +"= c #E5E5E7", +"- c #A1B0A0", +"; c #697075", +"> c #464C51", +", c #27353C", +"' c #262C30", +") c #30373D", +"! c #3B444A", +"~ c #79797D", +"{ c #D8E2E3", +"] c #405259", +"^ c #19262B", +"/ c #36454B", +"( c #383C42", +"_ c #364C53", +": c #32454C", +"< c #5A5E63", +"[ c #949195", +"} c #24262D", +"| c #121F24", +"1 c #1D2E3C", +"2 c #273A42", +"3 c #44585F", +"4 c #4C5C64", +"5 c #4C5559", +"6 c #182022", +"7 c #121A1F", +"8 c #1B1A1A", +"9 c #20333B", +"0 c #50636A", +"a c #59656B", +"b c #465E60", +"c c #3E4D53", +"d c #5D6C74", +"e c #10161A", +"f c #18222C", +"g c #314B51", +"h c #395259", +"i c #BFC2C3", +"j c #3D575C", +"k c #3A4D53", +"l c #1A1615", +"m c #1B2A30", +"n c #7C8288", +"o c #A8B7BC", +"p c #162234", +"q c #2D444C", +"r c #253E45", +"s c #8B8E91", +"t c #0D1217", +"u c #2C3E45", +"v c #546B72", +"w c #58555B", +"x c #D9DBDC", +"y c #686268", +"z c #48444B", +"A c #090E12", +"B c #697976", +"C c #D3D0D3", +"D c #5D5A5F", +"E c #BACAC2", +"F c #222D33", +"G c #0F0E12", +"H c #B9B8BC", +"I c #060A0C", +"J c #05060C", +"K c #E7F4F5", +"L c #B4C3C0", +"M c #BECECC", +"N c #0B0A0D", +"O c #37353C", +"P c #2A2A32", +"Q c #241F27", +"R c #554A50", +"S c #16120F", +"T c #160E0D", +"U c #0E0507", +"V c #14090B", +"W c #1A0C0D", +"X c #201617", +"Y c #2E2A34", +"Z c #697985", +"` c #0A0607", +" . c #463A40", +".. c #607279", +"+. c #6E808A", +"@. c #070205", +"#. c #1A1210", +"$. c #201213", +"%. c #281315", +"&. c #2C1E23", +"*. c #71889A", +"=. c #2E1418", +"-. c #32161B", +";. c #39161B", +">. c #381218", +",. c #371B20", +"'. c #401A20", +"). c #401E24", +"!. c #461920", +"~. c #35242E", +"{. c #352C35", +"]. c #020204", +"^. c #412329", +"/. c #461E24", +"(. c #4C1E26", +"_. c #4B232B", +":. c #55212B", +"<. c #572B34", +"[. c #57262E", +"}. c #602C35", +"|. c #55323B", +"1. c #040604", +"2. c #3F161C", +"3. c #4B1922", +"4. c #612530", +"5. c #63323B", +"6. c #6C323C", +"7. c #6C2E3B", +"8. c #703641", +"9. c #793543", +"0. c #783A45", +"a. c #793E48", +"b. c #7E3C49", +"c. c #703A44", +"d. c #653841", +"e. c #200E0F", +"f. c #662C37", +"g. c #72313D", +"h. c #843E4C", +"i. c #7B424C", +"j. c #84434E", +"k. c #8A3D4C", +"l. c #8C4250", +"m. c #934253", +"n. c #6F4048", +"o. c #6A3740", +"p. c #442E37", +"q. c #843947", +"r. c #8F3D4D", +"s. c #963D50", +"t. c #944655", +"u. c #9D4C5B", +"v. c #8D4653", +"w. c #5A3740", +"x. c #4E2C33", +"y. c #60777C", +"z. c #290E12", +"A. c #782D3E", +"B. c #9D4556", +"C. c #8C354B", +"D. c #9C3D54", +"E. c #944A56", +"F. c #A64C5B", +"G. c #AA4F60", +"H. c #A45664", +"I. c #6B2937", +"J. c #B25467", +"K. c #8C4A56", +"L. c #401218", +"M. c #7B4751", +"N. c #553E45", +"O. c #808D92", +"P. c #92505B", +"Q. c #B95C6D", +"R. c #A1525E", +"S. c #64424A", +"T. c #BE6375", +"U. c #854A56", +"V. c #C26479", +"W. c #B05C69", +"X. c #321116", +"Y. c #2C4343", +"Z. c #B36470", +"`. c #A6616B", +" + c #1A060B", +".+ c #1F0A0D", +"++ c #654A52", +"@+ c #68535B", +"#+ c #8A6167", +"$+ c #966069", +"%+ c #7B5A63", +"&+ c #7A565E", +"*+ c #8B5A63", +"=+ c #7E6260", +"-+ c #835359", +";+ c #A65A64", +">+ c #877E84", +",+ c #CBDDDF", +"'+ c #1C2E33", +")+ c #DAE9EA", +"!+ c #F3F2F4", +"~+ c #A1B1B4", +"{+ c #ABC0C5", +"]+ c #EEF6F4", +"^+ c #6F8774", +"/+ c #BED2D6", +"(+ c #84979C", +"_+ c #75888C", +":+ c #F9F9FA", +"<+ c #91AE91", +"[+ c #50645C", +"}+ c #AE495A", +"|+ c #364C3B", +"1+ c #445B4C", +"2+ c #4C6451", +"3+ c #4B5D50", +"4+ c #3E5543", +"5+ c #516A56", +"6+ c #5A6E61", +"7+ c #6A8270", +"8+ c #607967", +"9+ c #748F7A", +"0+ c #7C8F7E", +"a+ c #809A83", +"b+ c #88A58A", +"c+ c #8FA98E", +"d+ c #95B393", +"e+ c #A5C29D", +"f+ c #9BB694", +"g+ c #9DBA94", +"h+ c #96BA97", +"i+ c #9EBE99", +"j+ c #9EBA9C", +"k+ c #A2BE9C", +"l+ c #ACCBA5", +"m+ c #A8C6A1", +"n+ c #B6D0B2", +"o+ c #759BAC", +"p+ c #624E54", +"q+ c #58879A", +"r+ c #5AA69C", +"s+ c #6EB2B8", +"t+ c #82B8D0", +"u+ c #7AA5B7", +"v+ c #537D90", +"w+ c #488E84", +"x+ c #529A8C", +"y+ c #52A898", +"z+ c #54B4A1", +"A+ c #4A9A8C", +"B+ c #61C5B1", +"C+ c #30625C", +"D+ c #805E62", +" ", +" . + @ # $ % & * = ", +" = - ; > , , , ' , ) ! > ~ & { ", +" - ] ' ' ^ ^ ' ) / ( _ _ _ : / < + ", +" [ ) } | ^ ' 1 2 : 3 4 < 4 4 5 _ _ 5 + ", +" & , 6 7 8 6 ^ 9 , : ] 4 0 a a b c / ( d ", +" a 6 e | 7 | f 1 9 g c 4 4 a 0 4 h g , ! i ", +" = ( 7 e e 6 f ^ 1 2 : j 3 a a a 4 k : 2 ) @ ", +" + ' l 7 e 7 | ^ m 2 : 3 0 0 d d 0 ] : 9 ) n ", +" o m e e e e | p m , _ ] 3 0 0 4 0 ] q r ) ~ ", +" $ f e e e 7 | p m 9 q 3 4 0 0 4 4 5 g r 2 ; ", +" s f t e 7 7 7 p m , : h 0 4 0 a 0 3 _ u ) < ", +" n 6 t t 7 7 | | m 9 r k 3 4 v a 0 5 h u 2 w . ", +" ; | e e 7 7 | p 1 9 g 3 4 0 4 0 4 4 c u , ] x ", +" y | t e 7 7 7 p 1 9 : j 3 0 0 0 4 3 h q 2 c x ", +" w 7 t e 7 | | m 1 9 q h 4 0 0 a 4 3 k g 2 / * ", +" . > 7 t e e 7 7 p 1 2 q j 4 0 0 0 4 4 ] _ u c + ", +" z e t e 7 7 | p 1 9 q h 3 0 0 0 v 4 h q , / i ", +" . ( e A t e 7 | p m 9 q _ 3 0 0 0 0 4 h : 2 u & ", +" = q e t t e 7 | p p 2 q h 3 0 a v 4 3 c _ 2 u $ ", +" = ) e t e e 7 | ^ 1 1 q g 3 0 a v 0 4 k : , 2 n ", +" x , e t t e 7 | p 1 9 q _ 3 0 0 v 4 4 j q u ) n ", +" x 1 t A e e 7 7 p } 9 u _ j 0 0 v 0 3 j : u 2 B ", +" = 1 e t t e 7 | p 1 1 q g 4 3 d d 0 4 3 q 2 2 y ", +" x m e A t e 7 7 p 1 9 q _ j 4 0 0 0 4 j g 2 2 a ", +" C 1 t t e e 7 7 p p 9 q g 3 4 0 0 4 4 3 g u , D ", +" C m t t e 7 7 | p 1 9 r g j 4 v 0 0 4 j _ q , D . ", +" + } t A t e 7 | p p 9 r g ] 4 0 0 0 4 3 _ : 2 ] = ", +" E } t A t e 7 | p p 9 r _ h 4 4 0 0 4 3 _ u , > = ", +" i p t A t e e 7 p 1 1 r _ j 4 0 0 0 4 3 / : 2 ! x ", +" + ^ t A t e 7 | | p 1 2 g h 0 4 4 0 b 3 / : 2 ! x ", +" + 1 A A A e 7 7 p p 9 r q ] 3 v 0 4 4 3 _ u F / C ", +" i m A A t e e 7 p m 9 q g 3 4 0 4 4 4 3 _ u , ( i ", +" + p t A A e 7 | p 1 9 r h ] 4 0 0 0 4 ] / u 2 u i ", +" i m G A A e e 7 | p 1 r h j 4 4 4 b b j _ u , u H ", +" + 1 A t t e 7 7 p 1 1 r h j 4 v 0 0 3 3 _ q , ) @ ", +" i m G t t 7 7 7 p p 1 q g j 3 b j j ] ] c : , 2 @ ", +" + 1 I J J A e 7 p p 1 r q _ 3 4 4 4 3 ] _ / 2 ) # ", +" i m A I J I I A 7 p 1 2 q 3 4 0 0 4 4 j : u u ( @ ", +" + 1 A I A t t e e p 9 r g 3 4 4 0 0 4 ] g , , : i ", +" = 2 t A A A t e p p 2 q h j 0 0 0 4 4 j g , , c x ", +" 4 t A I t t e p p 1 r h 3 3 4 4 4 4 h q 2 , z C ", +" 3 G A A t e e p p 1 2 q h ] 4 v 4 4 h / q 2 u # ", +" i p A A A t t 7 7 p 1 2 q h 4 0 0 0 3 c k 2 9 u [ ", +" & p I J A t t 7 p p 1 2 q ] 3 0 4 4 4 j _ u , u # ", +" & p A A A t e e p p 1 2 q h 4 4 4 4 0 ] c q r ) [ ", +" H ^ I A J A t 7 p p 1 r g h 4 4 0 4 b j _ : 2 u s ", +" i 1 A J A A e e p 1 1 r g h 3 0 4 0 4 3 _ : , u # ", +" K . x x * C + + i H H o H L i i + M C * = = C m N J A A t e 7 p p r q h 3 4 0 4 0 3 / q 2 u # ", +" x C i & [ n ; a 5 z ( O , P ' f f 6 | | 7 8 | 8 6 | Q f Q } P ) / > < B n $ i C = x 1 A J A A e e p p 1 1 r q _ h 4 b 4 3 h g u u [ ", +" x H # ; R ( } Q Q 8 8 S T G S A G N U N G T V V G V G V N V V G t t S t W T S t X 8 Q Q } Y ( > y s & x { 1 A J p p p p p p 9 q h 3 0 Z Z v 0 4 : u , 2 s ", +" x $ ; z } 8 X t N V G A J N N ` I ` J ` J ` N N ` N N G V G G t G t G V V G T S l t S T S X X l 8 8 8 8 Q Q } Y .; [ C = ( A A e p 9 p 9 2 q ] 3 d ..Z +.+.Z d 0 3 _ / n ", +" . $ z Q l G G N ` ` J I J @.N J J J N A N A V V T W #.l X #.8 $.$.$.%.X X X X X X $.#.$.$.l $.l l $.$.X X Q l 8 8 Q Q &.} Y O D @ . . / e t 7 2 1 p 1 9 r ] 4 0 Z *.*.Z ....0 3 h k ; ", +" = n P e t N J ` @.J J J ` ` ` N U T G #.$.$.%.X =.-.-.;.>.>.,.'.'.).'.'.'.!.'.'.).'.).).).'.,.,.,.;.;.-.&.=.-.X =.X X =.X X &.&.&.~.{.z [ x c 7 p p p p p 1 1 q h 3 0 ..+.*.+.Z ..0 3 k q a ", +" = n O e I J ].@.].J J J U V T $.%.=.%.;.;.;.,.,.).^./.(.(._._.:.<.<.<.<.[.<.<.<.}.<.}.[.[.<.|.[.}.<._.[.<._._.^._._._.^.).~.).&.&.&.&.~.Q } {.( ~ H > p | p 7 p p 1 9 q _ 4 0 d *.*.+.Z ..0 3 _ : < . ", +" i z 6 A 1.].@.@.J A G X %.X =.-.;.2.!.3.!.(.:.:.:.:.4.}.5.5.6.7.8.6.8.9.8.0.a.b.b.0.9.0.0.0.0.9.b.8.8.c.c.8.8.5.d.5.5.}.|.<.[._._.^.^.~.~.~.~.&.~.Y {.} p | p p p p 1 1 q h 3 0 ..~ *.*.Z d 4 3 _ _ 4 ", +" s Y t 1.].1.1.N G e.=.-.;.'.).3.3.(.:.[.}.}.f.6.6.g.g.9.b.b.9.h.b.b.h.i.h.h.h.j.h.k.l.h.l.k.h.m.k.j.j.k.k.l.l.l.h.h.i.i.a.b.c.n.o.c.d.5.<._.^.p.~.~.Y } P } p 1 9 1 1 1 9 q h 0 d ..+.*.+.+...a 3 _ g < . ", +" a 6 A @.].@.` G e.X '.).(.<.[.4.}.f.7.6.9.9.9.0.q.q.q.q.q.q.q.h.h.q.k.l.r.l.j.l.r.s.l.k.m.m.m.t.m.t.t.t.m.u.m.t.t.t.v.m.t.t.m.m.m.h.j.j.a.n.n.w.|.x.~.~.~.Y P Y 9 r q r 2 9 g ] ] 0 Z ~ *.Z Z y.0 4 h ! 4 ", +" x w 8 N ].].I G z.-.2.!.:.<.4.f.f.g.A.9.9.9.b.q.q.q.k.k.h.k.r.r.r.r.l.l.k.l.l.r.l.l.v.l.l.t.l.m.m.m.s.m.t.t.t.t.t.B.B.B.t.t.m.t.u.u.B.B.t.t.t.t.v.j.i.n.|.p.~.~.} Y 1 q 3 4 h r q _ 3 4 a +.*.+...Z 0 3 k _ D . ", +" x 5 7 N @.1.A e.%.;.!.(.:.}.7.6.g.9.9.b.9.q.q.q.q.k.C.r.k.r.r.r.l.s.r.r.l.l.k.l.l.m.l.m.l.t.l.m.t.m.t.m.B.m.D.B.m.B.t.t.E.t.B.B.B.B.m.B.F.F.B.F.u.B.u.t.v.j.n.|.p.~.~.Y ) 3 ..v 4 ] 3 3 4 a +.+.Z Z ..0 3 g / < ", +" = 5 7 1.J ` V %.>.!.(.4.}.f.g.9.9.q.C.9.q.h.C.k.k.k.h.q.k.q.k.r.s.r.l.l.k.l.v.l.l.l.s.m.l.l.l.l.t.s.m.t.m.m.t.t.t.t.t.u.B.t.u.u.u.E.u.u.u.B.F.u.F.G.F.H.G.G.u.E.j.d.|.{.~.{.1 0 +...0 0 0 0 d +.+.Z Z ..a 3 k g < ", +" d 7 ].].` $.%.;.3.3.4.I.A.9.8.9.C.9.k.k.h.h.h.q.C.C.r.r.r.r.r.r.C.k.l.r.l.r.r.s.r.l.l.l.m.k.r.r.r.l.m.m.m.m.B.m.m.t.t.m.m.B.B.u.t.B.u.t.B.u.B.F.u.F.F.G.H.J.J.G.B.K.i.w.p.{.~.O d *.+...0 a ..n +.Z Z d v 4 k / a . ", +" n Q I @.J V z.L.(.:.4.I.g.9.q.0.b.q.q.k.q.k.q.k.h.h.k.r.q.r.C.k.r.r.r.l.r.r.r.l.r.s.l.l.l.l.m.l.k.r.r.m.v.t.r.m.E.B.s.m.m.m.t.E.B.E.t.u.E.t.t.B.u.B.u.F.G.J.G.J.J.J.G.K.M.N. .~.1 z +.O.*.a 0 Z +.*.*.Z d v 3 _ / a ", +" $ Q 1.` N $.-.L.3.4.g.A.9.q.9.9.b.q.9.9.q.q.q.q.C.q.k.k.q.k.k.r.q.r.k.r.r.r.r.k.r.l.l.k.r.m.l.m.k.m.l.m.k.m.l.m.t.m.m.t.E.t.t.t.B.E.E.u.P.u.t.u.u.u.u.u.u.u.G.H.J.J.Q.J.J.u.K.d.p.~.Y > *.*.Z a Z n O.+.+.v 0 4 _ : a ", +" x ! t 1.U e.%.'.:.:.f.g.9.9.q.b.q.9.C.q.k.q.q.k.q.q.q.k.q.l.q.r.r.q.k.k.r.r.r.r.r.r.r.r.l.l.r.k.m.k.m.m.m.k.t.v.m.r.K.v.m.E.t.v.P.t.t.E.t.E.u.u.u.u.E.u.u.u.u.F.u.H.J.Q.Q.Q.J.R.M.S.p.Y , < *.*.Z ..+.Z Z Z d 0 5 _ / a ", +" ~ e ` ` $.%.;.3.[.I.g.9.9.q.q.q.h.q.h.q.q.b.b.q.q.q.C.q.k.q.r.r.q.k.k.k.k.C.r.r.l.l.l.l.k.l.j.v.l.v.j.l.m.v.m.r.s.t.m.m.B.m.v.t.t.v.E.t.B.t.u.v.t.t.u.u.t.B.u.B.u.F.H.J.J.Q.T.Q.u.U.N.p.~.( Z s *.Z +.+.*.Z 0 a 3 k / a . ", +" @ Q I U V %.;.(.4.I.g.9.9.9.9.9.q.h.9.q.b.b.q.b.b.q.h.q.q.h.q.q.r.r.k.k.l.l.r.k.r.h.j.k.l.l.l.h.l.m.l.l.l.l.m.v.l.m.t.m.v.t.t.l.v.t.E.t.t.t.m.t.v.t.u.t.u.u.t.u.u.u.B.G.H.J.J.Q.V.J.R.M.w.{.Y ] *.O.+.*.+.+...d 0 3 k ! a ", +" { ( t ` V $.,.3.4.4.7.g.0.9.9.9.h.b.9.b.0.q.q.b.q.q.9.h.q.q.h.h.q.q.r.q.h.q.k.h.h.l.h.q.k.r.h.m.m.j.m.h.l.k.l.v.l.k.t.t.m.v.v.v.v.m.v.m.K.t.t.t.B.t.E.t.E.t.B.u.B.B.u.u.u.G.G.W.J.V.V.J.u.i. .~.{.y *.+.~ *.Z Z d 0 4 _ / d ", +" ~ 8 I G e.=./.:.f.6.9.9.9.9.b.9.9.q.9.9.b.b.b.b.q.h.q.h.q.q.q.h.l.h.q.r.k.q.q.j.h.r.k.h.h.l.j.h.k.k.l.h.v.h.k.v.l.l.l.l.m.l.v.v.m.v.v.t.K.t.t.E.v.t.E.t.u.t.B.u.B.B.u.B.u.H.u.J.J.Q.T.V.J.P.w.p.Y ( ; O.*.*.+.Z ..4 3 k / d ", +" + ' A N W %.,.(.}.6.g.8.9.9.9.9.b.b.0.b.h.q.q.9.9.9.q.b.q.h.q.h.q.q.h.k.q.h.j.l.h.q.j.h.l.j.j.h.h.h.k.k.l.j.l.l.l.l.l.l.v.l.v.v.m.v.l.m.v.t.t.t.t.t.t.v.E.t.t.t.t.u.u.u.t.u.u.R.G.H.H.Q.V.V.J.U.N.~.1 R Z n *.n Z d 0 ] _ / d ", +" < 7 I G $.;./.[.f.8.8.0.8.9.9.q.g.9.9.9.0.0.b.b.b.0.0.b.b.9.h.h.q.q.b.h.q.q.q.q.h.q.h.h.k.h.j.h.h.h.h.j.h.l.U.h.j.l.l.j.m.j.m.v.v.U.m.v.m.v.t.v.v.v.m.t.E.u.E.t.u.t.t.u.u.t.u.u.R.G.J.Q.V.V.Q.u.S.|.Y , d n *.~ Z ..4 3 _ / ; ", +" & ^ ` G $.X.'.(.[.f.8.g.8.9.0.0.g.q.9.9.9.b.9.0.9.b.9.q.b.9.q.q.0.b.q.b.h.q.h.h.h.h.h.h.h.j.j.h.j.h.h.h.j.l.h.h.l.h.U.j.k.U.m.j.h.v.v.l.l.v.v.v.v.t.m.t.v.K.v.t.t.t.u.t.B.t.u.u.P.u.H.H.J.Q.V.V.J.K.d.~.Q > ~ *.~ +...4 3 ! Y.; ", +" ! e N T -.;.(.[.}.6.9.9.8.9.9.9.9.0.0.b.g.b.b.b.0.h.b.b.b.0.b.h.a.a.q.h.b.b.b.b.h.h.h.b.h.h.h.h.i.j.h.h.j.h.l.h.j.h.l.l.k.h.h.v.l.j.l.l.l.l.v.v.v.v.m.l.t.v.v.K.K.E.E.t.t.B.t.t.u.t.t.u.J.W.V.V.V.H.i.p.~.1 a n +.Z ..a 3 / / B ", +" $ } N V T &.'._.4.7.6.6.9.g.9.9.9.0.g.a.b.0.9.9.a.9.9.9.b.9.b.0.0.0.h.q.b.b.h.b.a.a.i.b.b.j.j.h.i.h.h.k.h.h.h.l.l.h.l.j.j.U.l.j.h.l.h.l.U.v.v.v.v.v.t.v.v.v.v.v.t.t.E.K.K.t.u.t.u.u.t.u.H.u.H.Z.V.Q.Q.U.w.Y Q z Z n Z d 4 3 _ ! ; ", +" > t ` S z.;./.[.}.6.8.c.0.9.8.0.9.0.0.9.9.0.9.9.9.9.0.9.b.b.9.b.a.0.a.b.b.0.b.b.b.h.a.a.a.h.a.h.h.a.i.h.h.j.h.j.j.h.k.k.k.j.m.j.j.v.l.l.k.k.l.v.m.l.v.v.t.t.l.v.K.K.l.t.K.K.P.K.K.P.t.P.t.H.G.J.V.V.Q.u.i.p.p Y 4 +.+.d 4 ] _ _ ~ ", +" & 6 N N #.-.,.x.<.6.6.c.8.6.8.9.9.0.g.9.8.8.9.0.0.c.9.b.0.9.9.0.0.0.9.b.0.a.b.a.i.a.a.b.0.b.i.h.0.h.j.h.i.i.h.h.h.h.j.j.v.l.h.h.m.k.m.l.l.l.v.l.l.v.l.v.m.v.v.v.K.l.K.U.t.K.K.K.K.P.P.P.P.U.u.H.`.Q.V.V.J.t.d.&.Q ( ..Z d 4 3 _ ! +. ", +" 5 e ` T $.;.!.[.}.6.6.8.8.8.c.c.8.9.9.9.9.8.g.0.9.9.9.9.0.0.c.0.0.i.9.a.a.a.b.a.a.a.a.b.a.a.a.i.a.a.a.h.a.i.a.h.h.j.j.j.j.l.j.j.j.k.j.h.j.j.h.l.l.h.k.l.m.l.m.l.v.U.U.U.U.U.i.M.U.M.U.K.u.u.P.P.J.J.T.V.Z.H.i.{.Q Q 0 Z ..4 ] _ / n ", +" H ' I N $.-.2.(.<.f.6.c.c.8.g.g.o.8.8.9.8.8.0.0.g.0.c.c.0.0.0.9.0.9.9.a.9.0.a.0.b.b.0.a.i.b.0.0.0.h.a.b.a.a.b.a.a.a.h.h.h.h.h.h.h.q.j.k.h.k.h.h.k.h.l.U.l.l.m.m.l.j.U.i.S.w._.~.Q Q ~.p.S.U.U.K.P.H.H.Q.V.V.J.K.w.~.p ! ; a 0 c : / O. ", +" a e N V X ;.!.:.}.}.6.6.8.c.0.0.8.8.8.8.9.c.8.0.c.9.8.8.c.8.0.9.0.0.9.c.c.c.o.c.c.8.c.d.d.d.5.w.5.5.|.<.5.|.5.|.5.w.5.5.d.d.d.c.S.c.c.a.n.a.h.a.h.h.h.h.h.l.m.v.U.M.S.d.|.^.X. +J J J J G ~.M.U.t.P.H.Q.V.V.Q.H.S.~.Q p y d 0 3 / / n ", +" * ) N N #.=.;.(.:.}.8.c.8.c.8.o.8.8.8.8.8.8.8.8.c.0.8.8.c.8.8.8.o.8.d.5.w.<.x.x.p.p.^.).,.~.&.&.-.-.&.z.%.%.%.$.-.z.%.X X -.X -.X -.-.,.&.^.~.p.<.|.d.o.n.n.i.j.m.M.M.n.w._.=.J e p 1 O p A J Q S.U.P.H.J.Q.V.V.J.j.|.Q X ! a 4 ] _ / O. ", +" [ 8 N T e.=.)._.<.}.6.8.6.0.c.8.c.8.8.8.c.8.8.9.8.8.o.5.5.5.<._.^.'.).=.X %.%.z.e.#.#.$.e.e.e.e.$.e.e.e.G e.$.$.X $..+e.e.e e.e.V G V W V W V W W W W $.X &.~.<.U.U.n.S.x.$.J 1 c 4 < a a 4 p +-.++K.u.H.Q.V.V.V.P.N.Y Q } 0 0 ] _ / s ", +" 4 t ` T $.;.'._.}.5.5.6.6.8.6.c.c.9.8.8.8.9.8.o.d.|.x.^.,.;.=.=.%.%.$.$.%.%.$.=.$.%.%.X Q X -.X -.%.%.%.=.&.-.-.,.-.&.X =.-.X =.X %.$.X =.X $.$.W G N V U U V -.c.c.w.|.X.J Q h @+#+`.$+%+d d 1 J p.U.K.R.J.V.V.V.J.i.p.p 7 > 0 ] ! / s ", +" C , N V $.-.;./.[.}.o.5.8.o.8.6.8.8.g.c.8.n.o.5.x._.,.,.$.%.%.&.=.=.-.=.&.X.X.=.-.,.&.;.,.-.,.,.,.;.,.-.-.-.,.;.-.,.-.;.~.-.,.~.;.-.-.,.&.-.-.%.X -.%.$.e.W G V -.d.w.<.&. +7 : @+$+%+%+; V.#+d a 7 e.M.K.H.H.Z.V.V.W.U.N.~.p {.4 c / / # ", +" O.6 N t =.-.'._.<.5.6.o.8.8.8.c.8.8.9.g.d.w.x._.).).,.,.,.-.;.;.,.,.,.,.;.,.,.^.).,.).,.,.).).).).2.).)._.).).)./.)._.)./.).'.^.^.~.^.,.,.,.,.~.).,.,.;.-.=.%.z.~.d.w.x.z.J p > %+D < $+y d `.; d O J N.U.u.H.`.Z.V.Q.u.n.Y X } 4 3 ! : [ ", +" > t N #.%.X.'._.}.f.6.o.8.o.8.8.8.8.c.8.d.|.x._./.(.'.).).,.).,.,.).,./.'.).).^.).^.^.^.^.^.p._._._._._._._.x._.x.(._.x._._./._._._._.p._._.p._./.3.)./.~.,.,.,.).c.c.x.$.J 1 R %+4 w $+d < $+#+d _ J p.U.U.H.J.V.V.V.H.M.p.p p z ] / / $ ", +" + P N G e.=.;.).:.<.}.5.6.o.o.8.8.8.n.n.w.<.5.<.<.x._._._.)._.^.^._._._._.<.^.p._.x._.x.x.x.x.|.|.|. .|.w.|.|.|.|.|.w.|.|.w.|.w.|.w.w.w.|.N.w.w.|.|.|._.x._.x.~.^.~.d.n.w.%.J 1 > &+3 w $+y < ~ #+d ] J p.U.U.K.H.T.V.V.T.K.|.&.X 1 3 : / $ ", +" n 8 N T e.-.2._.<.d.5.5.6.o.6.6.8.c.c.o.S.S.w.N.5.|.<.x.<._.<.[.x.x.x.|.<.|.<.|.<.w.|.|.|.d.w.w.w.d.w.d.d.d.d.d.d.n.c.n.d.n.n.n.n.n.n.c.c.d.d.c.d.c.c.d.w.d.w.<.|.|.N.M.n.,.J p .%+w 5 *+a < $+; y ( J x.U.U.P.H.J.Q.T.V.H.d.{.Q Q ] / / % ", +" > t U $.%.;.!.(.<.<.6.o.o.o.o.o.n.n.M.i.i.c.S.d.w.d.|.|.w.w.w.|.5.d.w.w.c.c.d.d.n.c.n.c.n.c.n.n.c.a.n.n.n.i.a.i.0.a.i.a.i.M.a.M.i.i.i.M.j.i.a.j.i.j.M.i.i.n.n.n.n.d.c.i.i.x.J 7 , ++&+w %+@+#+`.d d p +|.U.U.K.R.J.Q.T.V.Q.M.{.-.7 ( _ ! @ ", +" + ' A V e.=.;./.[.5.5.}.5.6.o.n.n.M.M.M.n.n.n.d.o.d.d.c.d.o.o.o.d.S.n.n.n.d.i.c.n.n.n.n.n.a.a.h.a.i.i.i.n.M.h.h.i.i.j.j.j.i.U.i.l.h.v.m.l.m.v.m.l.U.m.U.j.U.h.j.M.M.M.n.i.M.d.W J p ( ++%+*+#+=+0 4 ] A =.S.v.K.K.u.H.J.V.T.J.P.p.~.X } _ _ @ ", +" $ | ` T $.X.)._.<.<.5.5.6.o.8.a.U.K.U.i.M.a.n.n.S.n.c.c.c.c.c.c.8.0.8.0.n.a.0.a.b.0.0.h.h.a.h.i.h.h.i.i.i.i.i.j.j.U.h.v.h.i.l.U.l.v.m.m.m.m.m.D.D.m.t.m.t.t.m.t.t.t.t.l.j.j.h.(.J G p q c ] 3 3 4 c p J ~.i.U.K.K.t.R.J.T.T.Q.H.d.~.7 Q ! ! & ", +" d e ` W %.X.'.:.}.5.5.d.5.o.a.K.P.P.K.j.M.n.n.a.c.n.n.n.c.c.a.0.0.a.a.b.9.a.a.c.i.a.0.a.a.h.h.i.i.i.j.h.n.j.j.l.j.j.h.v.l.M.i.i.h.m.m.r.m.m.m.m.D.m.K.t.t.B.t.u.t.t.u.K.K.U.l.c.X.J V p Y ( ! : , e J +Q c.U.v.P.t.u.J.T.T.T.H.n.p.p p ( / & ", +" = ( G G $.X ;.!._.}.|.5.5.8.c.U.P.R.v.j.M.i.i.i.n.a.n.0.a.a.a.0.a.0.0.a.0.a.a.a.d.x.|.n.a.h.i.i.i.i.j.n.~.-.w.i.h.j.h.U.j.j.K.~.z._.i.l.m.m.m.m.m.t.c.^.x.M.t.t.B.u.t.t.K.t.v.U.9.o.).N J A e 7 t J J J J G ~.n.h.v.K.u.F.J.T.V.J.K.|.Q Q F ! H ", +" i 6 N N e.%.,./.:.}.}.d.5.a.P.R.P.P.K.j.M.M.i.i.a.0.n.9.0.c.o.8.n.9.0.a.0.a.0.K.-.@.V |.a.a.i.i.j.a.-+~.J J =.n.j.j.j.j.j.j.c.J J W 5.l.l.m.m.m.t.P.=.J U <.m.K.t.B.t.K.K.K.i.n.M.j.c.}.).=.z.z.>.-..+G J J G w.M.v.K.u.H.J.V.T.Q.P.w.} X } ! i ", +" O.l 1.T $.=.2./.<.}.d.f.c.j.P.;+R.E.E.j.j.i.a.0.0.n.c.9.M.p.z.^.d.c.0.0.n.i.0.M.@.].@./.n.i.a.h.i.h.K.X.J J =.n.i.h.j.U.M.v.o.J J +7.K.l.m.t.K.t.H. +J J :.m.m.t.m.u.K.u.b.$.W p.U.v.M.i.b.b.7.x.'.=..+J +J -.S.j.U.t.u.J.Q.T.V.H.c.~.8 f ! i ", +" D e N e.%.-.)._.<.}.d.6.b.H.;+R.R.K.E.j.i.a.b.c.9.9.c.0.i.U 1. +<.n.8.0.a.a.0.P.z.@.V |.i.i.n.i.i.j.j.i.X.z.}.M.i.i.h.l.U.j.u.^.X.:.i.l.l.l.l.t.t.H.:. +z.c.K.t.t.m.t.m.H.!.J J -.l.K.U.U.U.U.M.d.|.~.-.G +J G p.i.K.m.E.H.J.T.Q.J.i.{.Q Q ( + ", +" = , N N #.%.-.'._.[.<.5.8.E.`.H.R.P.v.v.i.b.0.c.9.c.8.c.h.8.` I U :.c.a.0.0.c.i.l.j.4.5.9.0.a.i.n.a.i.0.l.M.h.i.h.i.i.j.j.U.i.k.m.l.K.K.j.l.l.j.m.m.D.B.r.l.U.t.K.t.t.t.B.J.<.U J ~.K.t.t.u.u.P.K.l.c.<.~.=. +J +=.d.U.E.E.u.J.T.V.Q.U.|.} Q ( i ", +" i 6 V V $.%.>.!.:.4.}.d.i.H.`.H.F.E.j.j.j.0.9.6.8.o.8.8.9.E.2. +;.6.8.8.n.0.0.a.a.a.b.a.0.c.i.h.c.i.b.i.h.i.i.i.i.h.i.j.h.j.j.U.l.l.l.m.l.j.l.l.l.m.m.m.m.m.t.t.m.u.m.t.B.F.H.I.4.h.E.u.K.u.u.P.u.u.M.d._.~.z.G G +^.M.t.E.u.J.Q.Q.Q.P.|.Y Q ( + ", +" s 7 J T $.-.,./.[.}.5.8.P.;+;+R.R.v.j.h.a.c.6.g.8.8.6.0.c.a.b.5.d.c.n.c.0.n.i.c.0.a.0.0.n.i.n.a.i.i.0.0.h.b.h.h.h.h.b.j.i.j.j.h.j.j.j.l.j.l.K.h.K.t.m.m.m.m.m.m.v.m.t.t.m.B.D.B.B.t.U.u.t.K.t.P.t.t.U.h.7.^.,.$.G G &.S.U.t.t.H.Q.Q.Q.R.d.~.Q O + ", +" y e N e.$.=.,.(.:.}.6.j.H.W.H.u.E.l.a.a.8.8.8.g.g.6.8.c.8.8.c.0.8.8.c.c.c.n.n.n.a.n.a.c.a.0.a.a.8.b.i.i.b.i.b.M.i.b.i.h.i.b.j.h.K.h.h.h.l.h.l.l.h.m.m.l.m.m.v.m.m.m.m.m.m.t.B.t.K.t.K.P.t.t.t.P.u.u.u.K.M.|.).X. +V G x.h.t.u.G.J.Q.Q.H.n.p.} O H ", +" ( t G W %.=.2./.[.}.o.t.W.W.H.H.m.j.b.9.8.8.6.c.c.6.o.8.8.c.c.8.0.c.8.c.8.0.n.n.8.0.i.c.i.a.n.a.i.c.0.a.b.c.i.i.b.i.b.M.h.i.h.b.j.j.j.U.j.h.h.h.m.v.r.m.K.l.m.m.m.m.m.m.v.m.t.t.u.P.t.t.P.u.u.t.t.u.t.B.t.c.<.,.$.V W ~.M.l.m.H.J.Q.T.J.U.p.&.Y $ ", +" x ' N G e.%.=.'.(.[.}.8.H.W.W.R.F.l.j.a.g.g.6.8.8.c.8.o.o.8.8.c.8.c.c.8.c.c.c.c.c.n.c.c.c.n.c.a.c.b.a.0.a.i.c.b.i.b.i.h.i.i.h.j.i.h.h.j.M.h.l.m.h.l.l.r.v.l.m.h.v.v.v.m.m.t.t.K.t.K.K.m.K.t.v.K.B.u.t.u.m.t.U.5._.X G $.z.d.U.t.R.H.Q.T.J.-+|.} Y ~ ", +" i 7 I T $.z.>.'.:.}.6.h.;+;+W.F.t.h.0.6.6.o.6.6.o.6.o.6.d.c.c.c.8.8.d.c.c.c.c.c.c.n.0.c.8.n.b.n.a.a.n.0.n.b.i.b.b.i.b.q.b.i.i.b.i.j.h.k.l.U.k.l.l.h.v.h.l.k.m.k.m.m.m.v.m.t.B.m.t.v.v.t.t.t.t.t.B.u.m.u.t.B.v.a.[.2.$.G X |.U.v.u.J.W.T.Q.E.w.&.Q D ", +" @ 7 ` T $.%.;._._.}.6.m.`.W.;+u.v.0.0.f.o.}.o.f.8.6.o.6.o.o.c.d.6.c.c.c.d.c.8.c.0.c.0.8.0.n.0.c.a.0.a.0.n.c.i.b.b.b.b.b.b.b.h.i.h.h.h.k.k.h.h.m.h.h.l.l.l.k.l.l.k.l.k.m.m.m.m.m.m.K.K.t.m.D.t.u.t.B.t.u.m.B.m.M.d.(.=.G $.^.j.U.t.H.J.Q.Q.u.d.~.Q ! = ", +" n e N W $.-.;.(.:.<.8.R.W.W.G.u.l.0.8.o.6.o.6.6.o.o.8.o.5.o.8.o.d.c.5.o.c.n.c.8.n.n.n.c.c.0.c.0.0.n.a.i.9.i.c.b.i.i.b.b.b.n.b.i.i.h.h.h.h.j.h.h.l.h.l.C.v.k.m.l.l.m.m.r.m.m.D.m.v.t.v.v.t.K.K.t.K.m.u.m.t.m.m.v.c.<.-.$.G -.8.l.E.G.W.T.V.H.n.p.} O C ", +" w t N e.$.=.'.(.<.}.0.;+W.W.R.m.h.9.o.f.7.6.o.d.5.o.c.8.5.o.6.6.o.c.o.o.8.c.c.d.8.n.c.c.c.8.c.c.c.n.c.i.c.i.0.n.c.i.9.i.i.i.i.b.i.h.i.i.i.i.h.i.b.h.l.r.l.h.l.h.l.h.l.m.v.m.m.m.m.m.t.t.t.t.t.t.t.u.t.m.B.t.t.v.M.<.).z.W =.w.l.v.G.J.Q.T.J.M.p.8 P & ", +" ( A V $.X =.2.^.[.7.l.W.W.H.F.j.a.c.6.5.6.5.d.6.6.8.5.o.o.6.6.o.5.8.6.8.d.n.c.8.o.c.8.c.8.0.c.c.c.n.0.c.0.0.c.b.b.b.0.9.9.c.n.b.9.c.b.b.b.b.h.k.h.h.h.l.h.h.l.h.l.h.l.l.m.m.m.m.m.m.t.t.m.v.K.m.K.u.m.u.t.m.m.t.j.8._.-.$..+<.i.U.u.W.Q.T.J.U.p.} F [ ", +" { } G G e.=.-.'._.x.g.R.W.W.R.E.a.c.6.6.o.5.f.o.8.d.8.o.o.5.5.6.8.5.d.5.6.6.d.d.6.c.c.c.n.d.o.o.6.8.5.5.<.x._.^.^.,.-.,.-.-.-.Q -.,.-.,.^.:.x.<.5.d.8.b.b.b.h.h.l.h.h.l.l.r.v.h.m.m.m.m.m.t.K.t.t.K.m.B.m.u.t.t.K.v.i.|.-.$.$.,.i.U.t.H.Q.Q.J.K.|.~.O >+ ", +" + ^ A T $.%.-.2._.<.g.H.W.W.F.v.0.6.5.f.f.5.o.f.5.7.5.8.8.6.8.8.o.o.6.8.d.d.o.6.o.5.5.|.[._.,.=.%.W V J J J J J J J J J A A A A 7 t p p p 7 p p t A G G %.-.).x.f.8.a.b.h.h.m.h.m.m.D.m.t.m.t.m.m.B.m.v.m.m.t.m.B.v.h.}.~.$.G -.c.l.u.J.J.Q.W.u.|.~. .y ", +" @ 6 I T e.%.;.3.[.<.9.W.W.J.u.j.9.g.}.f.f.f.o.6.5.6.6.6.5.o.5.8.6.5.d.5.f.5.<._.).-.$.G J J J J J J J J J J J J J J J J J J J J J J J J J G t 7 p 1 Y , ) 1 1 p e X z.-.^.<.S.c.i.h.h.l.m.D.m.m.v.m.m.t.u.K.t.K.m.v.v.c.<.=.$.z.5.U.m.R.Q.T.Q.F.w.,.N.@+. ", +" O.8 N T $.X.;./.[.6.v.W.W.R.v.0.8.f.5.5.7.o.}.5.f.6.5.5.f.o.f.d.5.5.:.).=.W J J J J J ].].].].].].].].].].J J J J J J J J J J J J J J J J J J J J J J J J J J e p 1 u 2 O p X %.Q _.|.c.h.h.v.m.m.m.m.K.m.v.m.K.t.v.l.0.<.;.e.$._.j.t.F.J.Q.Q.R.n.~.p.S.x ", +" ; S N W $.X.;._.[.f.u.W.;+F.j.8.6.f.5.5.5.5.f.5.5.f.5.o.}.5.<./.&.T U J J J ].J ].].].].].].].].].].].].].].].].].].].J ].J ].J ].J J J J J J J J J J J J J J J J J J J t p O ! ( 1 p %.Q _.d.C.m.m.m.m.v.t.K.t.v.t.K.j.5.).=.$.,.n.v.R.W.Q.Q.J.S.{.p.S.i ", +" > e T e.$.%.2./.[.6.;+W.H.B.j.8.6.}.}.}.6.6.5.f.5.o.5.<.).%.U J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J J J J J J +p 1 ( O Y p -.x.c.m.m.m.v.m.t.j.t.t.j.c._.-.$.=.c.l.u.J.Z.T.J.M.^.O n.@ ", +" ) A G e.%.=.'./.[.a.`.W.R.l.a.8.6.}.}.}.}.5.f.7.5.x.=.N ].1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J ].J J J J J J J J J J J J J J J t 1 ! ] , X p.9.l.m.m.t.P.t.m.U.i.:.,.$.%.|.j.B.G.Q.T.J.j.p.~.n.[ ", +" = ' A V e.%.=.'.:.[.l.W.W.R.j.c.5.f.}.6.5.f.7.d.|.,.W ].1.].].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J J J e z 4 O X x.i.j.K.t.K.m.t.i.5.,.%.e._.j.u.J.W.Q.J.K.x.Y n.>+ ", +" C ^ A V e.%.X.)._.}.E.;+;+E.a.6.5.f.}.5.5.}.o.p.$.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J J J e ! 4 Y &.8.l.l.t.l.E.v.8./.=.W ,.a.u.G.Q.V.W.E.|.Q w.; ", +" L 6 U #.$.%.-.!._.6.R.Z.G.v.a.6.}.f.}.}.5.o.^.N @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J J J J p 3 ! Q w.h.m.v.v.m.b._.,.X -.8.v.R.W.T.Q.R.|.~.~.@+ ", +" @ 6 ` T $.%.;./._.8.G.W.R.j.c.5.}.}.5.}.d.~.1.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J J J ( 0 %.<.h.m.v.v.U.}.).$.=.d.t.u.J.T.Q.R.N.~.Q > ", +" n 7 ` T e.%.-./.[.q.;+;+P.j.8.}.5.5.5.S.-.1.].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J J J 9 d Q :.h.j.m.m.5./.z.z.x.v.u.J.Q.Q.F.d.Y } z { ", +" ; e ` S $.%.;./.[.v.Z.;+E.a.6.[.<.5.n.%.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J J J 1 ..Q <.h.m.t.n._.-.e.).j.u.J.Q.W.R.c.Y Q ( x ", +" 5 t N W e.%.;._.}.E.W.G.v.0.f.}.5.d.-.1.].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J J U p d X 5.k.v.h.<.-.%.'.i.u.H.Q.Q.G.n.~.Q O i ", +" ! t N W z.%.;./.4.R.W.R.l.c.5.f.c.^.1.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J } 3 =.6.v.j.}.;.=.-.c.B.G.Q.T.J.i.p.Q , & ", +" ) A N #.$.-.;.:.7.;+W.u.b.5.}.8.w.N ].].].].].].].].].].].].].].].].].].].].].].].].].J I I J ].@.@.J I I A t e t t A A A A N I I I I I I I I N J J I t t A I ].].].].].].].].].].].].].].].].].].].].].].].J J J J A ! ( ).a.l.c.).%.=.8.t.G.Q.Q.W.M.^.Q {.@ ", +" . Y I N $.%.X.,._.g.W.J.E.0.5.5.n.$.].].].].].].].].].].].].].].].].].].].].].].].].1.7 ( : ) ^ t t f ) F ^ ) ! ] 4 ] > 2 m ( ! f 7 f Y.> , 9 ! ) t A 7 / 3 ] ^ N ].].].].].].].].].].].].].].].].].].].].].].].].].].J N < m |.v.h._.=.=.5.t.G.Q.Q.W.U.p.} {.[ ", +" = F N N $.z.;.'._.q.`.;+K.o.}.a.^.1.].].].].].].].].].].].].].].].].].].].].].].].].A ) x { ,+O.'+| d { # n ,+= )+K . )+* a M = 5 9 B x x y.y.. H F | ! x . )+0 p A ].].].].].].].].].].].].].].].].].].].].].].].].J J J 7 5 Q b.h.<.>.%.[.v.F.Q.Q.Q.v.p.Q ' n ", +" x ^ N V X %.;.!._.l.Z.H.j.5.6.c.N 1.].].].].].].].].].].].].].].].].].].].].].].].].t c K )+!+)+; , B K ~+M K ~+s O.O.{+]+# ,+]+a n K . ~ , B K E , , # ]++ ]+i 2 e 1.@.].].].].].].].].].J J J J ].].].].].].].].].].@.J N ) , [.i.5.2.=._.v.u.Q.Q.Q.K.w.} {.~ ", +" C 6 I G $.z.X.'.:.E.W.G.i.5.b.&.@.@.].].].].].].].].].].].].].].].].].].].].].].].].A z . M - !+,+0 ^+K ~+M ]+3 '+m 9 n ]+# ,+K @ K )+y.9 ^ ; ]+/+u 5 )+)+0 * K +.f N ].].].].].].].].1.1.].].].].J J J J J ].].].].].J J J t 5 &.9.6./.X ).q.u.J.Q.Q.E.|.~.' y ", +" i 7 ` T $.%.-./.[.F.W.u.i.g.n.N ].@.].].].].].].].].].].].].].].].].].].].].].].].].A _ K L _ i ]+* (+K % M ]+3 ^ f '+_+]+# ,+K # K = +.'+^ y.]+M ! H ]+* % i ]+* u A J ].].].].].].].].].].].].].].].].].1.J ].].].].].].].J ( , |.9.(.%.-.9.B.J.Q.Q.E.N.~.' < ", +" & 8 I T X X ,.!.}.R.;+E.a.b.p.].].].].].].].].].].].].].].].].].].].].].].].].].].].I : . i F ] { K ,+K % E K # B +.n ~+]+s * K a Z . . # ) ..]+M B K ]+K K K ]+]+s | ].].].].].].].].].].].].].].].].].].].].J J ].].].].].J e > ,.8._.-.-.6.F.J.Q.Q.F.w.} {.R ", +" % l 1.V %.$.;.3.f.G.J.u.c.j.V ].].].].].].].].].].].].].].].].].].].].].].].].].].].J ) K L | | a )+K ]+# O.)+]+:+]+:+]+{ d * K 4 ^ a { K ~+Z K E H ]+<+: u Y.B . M Y 1.].].].].].].].1.1.1.1.].].].].].].].].].].].].].].].].J ! &.7.[.;.=.f.B.G.Q.Q.F.w.~.P > = ", +" [ e 1.#.e.%.;.3.o.W.G.m.h.o.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].@.7 / {.A N | q k _ '+f ) _ b [+j _ 9 f , u 7 N S , ) , F u , 2 u f A A A | F '+t ].].].].].].].].].].].].1.1.1.1.1.].].].].J J ].].].].J U p } [.<.;.%.<.B.G.T.Q.R.S.~.} z x ", +" ~ t @. +$.%.;.(.0.W.R.j.t.).].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J ].].@.J I I J J I N A t A I J J 1.I J ].].J J J ` J ` U U @.].].@.].@.].].].].].].].].].].].].].].].].].].1.1.].].].].].].].].].@.J e ) ).}.,.z._.m.}+Q.Q.F.d.~.} ( x ", +" > N ` V $.%.;.!.q.W.F.j.P.e.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.].].].].J J ].].].J ) &.}.'.%./.m.}+Q.Q.H.n.{.Y O + ", +" & 6 1.@..+#.%.,._.v.W.F.q.M.U ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J ].].].@.F &.}._.%.,.h.}+Q.Q.H.n.~.P O H ", +" . z N 1.` W e.%.;.(.K.W.E.h.a.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.1.].].].].].].].].].].].].].J ].7 Q [.:.-.>.b.}+Q.Q.G.a.{.} O H ", +" s e ].].1.W e.%.2.(.E.J.m.h.5.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.].].].].1.J ].].].J J ].].J e } _.[.,.X.g.}+J.V.J.a.p.} {.& ", +" x ' N ].].@.#.$.%.,.4.R.;+t.v.[.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.1.].].].].1.].].].].@.].t P 2.[.;.=.6.G.J.Q.J.i.{.} {.@ ", +" & 7 @.].].@.W e.%.;.4.R.R.l.P.).].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.].1.].].].1.].@.I , ;.[.2.-.f.B.J.Q.J.j.p.} ' % ", +" +.A ].].].` W e.%.'.f.J.R.k.u.%.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.1.1.1.].].].].].1.].].].].].].].1.].].@.@.9 -.<.!.-.:.}+}+Q.J.U.p.} Y $ ", +" a N ].].].` V e.%.;.6.J.R.h.E.N ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].].].].].].].].].].1.1.].].].].1.1.].].].].].].].].].].@.1 X <.!.-.(.B.J.Q.J.v.p.~.P [ ", +" D A @.].].@.e.e.X.'.8.J.E.b.P.` @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.1.].].].].].].].].].].].].].].p Q :.(.-.(.B.J.Q.J.U.p.~.' >+ ", +" ; A ].].].` e.e.X.'.q.W.E.h.a.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.I I I A A e e 7 | 7 6 | f f ^ m m ^ ^ ^ ^ ^ ^ | | | 7 7 e t t A A N N 1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].7 } /.(.-.!.B.G.Q.Q.v.p.} {.~ ", +" s S 1.].1.` #.$.=.!.l.J.E.k.d.].].].].].].].].].].].].].].].].].].].].].].].].].1.I t e 7 | ^ m 9 2 2 2 u Y.Y.Y.Y.g : g Y.q q g Y./ : g g g g _ _ _ : q g q q q g q Y.q u r 2 9 m ^ | e t N I I 1.].1.].].].1.1.1.1.].].1.].].].].].].@.].N } ).:.-.2.D.}+J.Q.P.|.} {.; ", +" E ^ J ].].` W $.%.2.t.J.v.r.x.].].].].].].].].].].].].].].].@.].@.I A t 7 | m '+9 2 r Y.q q Y.Y.g q q g q g : g g _ g _ _ _ g _ g _ _ g _ _ g _ _ _ _ _ _ _ _ _ h h _ _ _ _ _ h _ _ _ g q q Y.r 9 m | 7 A I 1.].].].].].1.].].].].].].].@.J } ,.[.;.;.r.}+Q.J.K.|.p Y y ", +" w G ].].U #.$.%.3.t.H.j.t.).].@.].].].].].].].].@.1.A t 7 f m 9 2 r Y.q : q q g q g g g g h g g g g g g g _ _ g g _ g g g _ g : _ : _ _ _ _ _ h _ g _ h _ h _ g _ h h _ _ h h j h h c h h h _ h _ h _ q Y.r 9 ^ | e A J ].].].].].].].J J p ,.[.L.-.k.}+Q.Q.E.p.Y P D ", +" - 6 1.1.N e.$.X./.u.J.b.E.$.].@.].].].].].].t | m 9 2 r Y.Y.q q : q g q g g q g g q g g g g g g g q : / g g : : : : g g : _ _ q g q g g _ g q _ k _ g h g _ _ _ g _ _ h _ k k h k _ h h _ h k h h h h _ h j h h _ _ q , 7 J ].].].].].].@.p -.[.3.=.b.}+J.T.u.x.Y P w ", +" . ( I ].N $.z.%.(.u.J.q.t.#.].].].].].@.e , 2 Y.Y.Y.q g g g q g |+g q g g g g g q g Y.g Y.g g g g q g g q : : g : g : : g q q _ : g q q q : g g g g g : g _ : g : g _ _ : g _ g _ _ h g h h h h h j h j ] k j ] j j j _ : 9 I ].].].].].J p X 4.3.X.9.G.J.Q.u.w.~.' > ", +" > N @.` e.%.=.4.R.J.q.m.T ].].].].1., 1+k g g q g q q q g Y.q q q Y.Y.q q g g Y.q q q Y.Y.q Y.q q q q q q q g q q q q g : Y.g : : q q g q q q q : q q q q g g q g _ g g g _ _ _ g _ _ _ _ g _ _ h k _ h h j h h h ] h ] _ 9 A ].].J ].].e l :.(.X.A.G.J.Q.u.|.Y P z ", +" > t ].N W %.%.4.G.F.q.j.U ].].].@., y.j h _ g g q g q g Y.g g q q q Y.g g q q Y.Y.q q q r g q Y.u Y.q Y.Y.q q q q q q Y.Y.q Y.Y.q q q Y.q q : Y.q q q Y.q q q q q q g : : g q _ _ g _ _ _ _ _ h g h h _ c k h h ] j k _ h _ , J ].].].J t 7 _.3.-.I.G.J.Q.R.w.Y F z ", +" ! A ].N W %.=.4.G.u.h.0.U ].].].t ..y.3 ] k _ g Y.q Y.Y.Y.q q q q q q q Y.q q q Y.Y.Y.Y.Y.Y.Y.r r q q Y.u r Y.Y.Y.q u Y.u u q q g Y.Y.Y.Y.q q Y.Y.Y.q Y.q u Y.Y.q / g q q g q : q g _ g g _ g _ g g _ _ _ _ k _ _ _ _ g g g _ | ].].].@.N l /._.>.4.F.J.Q.G.|.&.P ( ", +" / N 1.T e.z.;.f.W.B.r.d.].].].].) O.3 ] 3 h _ _ : g q Y.: : : q Y.Y.q q Y.g q r Y.Y.Y.q u u Y.q Y.Y.q Y.Y.q u u u r q q Y.Y.Y.Y.Y.q Y.q q q q Y.q q Y.q Y.Y.Y.Y.q g q g : Y.q q : : : u q q : : : q g g _ g g g g g q q g g j 2 J ].].J J 7 ).:.>.:.}+J.Q.H.w.~.} ( = ", +" . ! N ].G #.%.X.I.J.t.r.<.].].].].5 +.h 3 3 3 h k Y.Y.Y.Y.q Y.Y.Y.Y.q r q Y.q q Y.q r r q q q q q q Y.Y.q q q Y.Y.: Y.q q Y.q Y.Y.g Y.g g g : : q q g q q g q Y.Y.Y.Y.: q q q q q Y.q q q g q q q g q q q q g g : q q r r q g ] / I J ].@.J e ,.x.>.:.}+G.Q.R.w.Y } O x ", +" . u N 1.N e.e.-.f.W.m.t._.@.].].1.< a h 3 [+0 1+j / Y.Y.u u u Y.Y.Y.Y.Y.q Y.Y.q q g _ _ _ h h h ] ] 3 j b 1+b b 3 1+b 2+2+b 2+2+2+[+2+2+3+2+[+2+[+[+[+[+2+0 [+0 b 4 1+3 1+3 3 4+h _ _ h g g g q g g : _ q q q : q q u 2 9 2 : h 3 t ].].J J e ;.:.-.:.B.J.Q.H.w.~.} O x ", +" = ) N 1.N $.%.;.7.W.t.P.^.].].].J d 4 j 0 a d a 3 _ / |+g g : : : |+h 4+j 3+2+2+[+5+5+5+5+5+5+[+5+v 5+5+5+[+[+6+[+5+[+5+6+5+v 6+a 5+d 6+d 5+6+6+6+v 6+6+v 5+d 6+5+6+v 6+5+a 5+d 5+6+6+v 5+a v v a 0 b 4 b ] h k : u 2 , 9 2 : k j 7 J ].@.@.A -._.>.3.B.J.Q.J.w.~.} O x ", +" . u N @.T e.e.2.g.J.l.m.=.].].].A ; 3 ] 4 d +.7+4 > |+] 4+5 2+[+5+6+d 6+6+v 5+6+d 6+6+6+6+6+6+6+6+6+..d 6+6+6+6+6+6+..8+6+..8+6+......8+..B B 8+8+B 8+B 8+B 8+B 8+; 8+....8+8+8+B 8+8+8+8+8+8+..8+8+B 8+..8+....d 0 g 1 1 9 u h 3 ^ @.].J J A z.(.;.).D.J.Q.J.w.&.} {.C ", +" = ) N @.T $.z.,.g.J.j.v.$.].].@.t ; j 3 0 Z % ~+7+..B 7+B 8+B B ..; 6+B 8+8+8+8+8+8+B 8+7+7+7+7+7+7+^+7+^+^+^+^+7+^+^+^+^+^+9+9+9+0+9+9+9+9+0+0+a+0+0+0+a+0+9+9+0+9+0+9+^+0+9+9+^+9+9+9+^+^+9+^+^+_+9+9+^+^+^+8+8+..6+Y.m 9 2 _ 3 9 ].].].].A .+/.;.'.s.G.Q.H.d.~.} O + ", +" = ) N ].T W %.2.0.J.l.l.$.].].].8 Z j 3 a +.H {+a+a+9+9+^+_+^+^+^+9+0+^+9+9+9+9+9+9+a+9+a+9+a+a+a+a+a+a+a+a+a+a+a+b+a+b+b+b+b+b+c+c+c+c+c+<+d+<+c+d+c+<+c+<+c+c+<+b+c+b+c+c+b+c+c+b+b+b+c+c+c+c+c+c+b+b+b+b+b+9+7+8+6+3 1 9 2 g b , J ].].J I W ).'.2.r.J.Q.J.S.~.f O i ", +" = 9 ` ].T W z.2.0.J.j.j.G ].].].} B _ 4 a O.C E e+f+c+c+b+b+b+b+b+b+b+b+c+c+c+c+<+c+<+<+<+d+c+<+d+<+d+<+d+d+d+<+d+d+d+d+d+d+g+h+i+h+h+h+h+i+i+i+i+i+i+i+i+e+e+i+e+i+i+i+i+i+i+i+h+i+j+i+i+k+e+i+i+e+e+i+i+i+h+<+9+7+8+b 9 9 , g j 2 J ].].].J G '.3.;.k.G.T.G.S.~.} O i ", +" i Q 1.].V $.z.2.q.J.q.h.U ].].].' y._ b d (+x E l+l+l+e+e+e+k+i+i+f+h+j+e+i+i+i+h+i+i+i+i+i+i+i+i+i+i+i+h+i+i+i+i+i+i+i+i+i+i+i+e+i+e+e+i+i+e+m+i+e+e+m+m+e+e+m+e+e+e+e+e+m+e+m+m+m+e+m+m+m+m+m+m+m+l+l+l+l+l+h+b+7+..0 2 1 2 q j : I ].].J A +).!.;.C.G.Q.J.n.~.f {.i ", +" ; l ].].V $.%.'.q.J.k.b.` ].].1.( d ] 4 d $ { n+n+n+n+n+l+l+l+m+l+m+l+e+m+m+m+m+m+e+i+i+i+i+e+i+e+i+i+i+i+i+h+i+i+h+i+i+i+i+i+i+i+i+i+i+j+i+e+e+i+i+i+i+i+e+i+e+e+i+j+k+k+i+i+m+i+m+m+m+m+e+m+m+m+m+m+i+o+7+8+8+a+9+8+v Y.1 9 q h _ A ].].].J G 2.3.,.C.G.T.J.S.~.} {.i ", +" x ' I ].].V W z.2.k.G.l.8.` ].].].! [+j 3 ..- x n+n+n+n+d+b+c+<+e+m+m+i+m+e+i+e+i+m+i+m+i+m+i+i+i+i+h+i+i+i+h+j+j+h+i+j+j+j+j+i+j+i+j+j+j+i+i+j+j+i+i+i+i+h+i+i+i+k+i+i+e+{+i+m+m+m+e+m+m+e+m+e+m+m+e+m+h+8+4+4+b b+9+8+6+q 9 9 : h / N J ].J J V ;.L.L.A.J.Q.Q.n.~.Q , H ", +" s t ].].1.T e.%.2.l.J.q.8.1.].].1.5 0 3 a Z H ,+n+n+n+n+5+2+2+7+i+e+m+i+e+e+m+m+e+m+i+m+h+i+i+i+e+e+i+k+h+j+j+i+j+f+k+i+j+i+j+i+f+i+h+i+j+k+j+i+i+j+j+i+k+i+e+i+e+i+k+k+i+i+e+{+i+m+m+m+e+e+m+e+m+l+m+m+d+6+g |+4+b+0+7+6+|+9 9 q k k t ].].].J G ;.3.;.C.}+Q.J.S.~.} O H ", +" . ! N ].].].T e.e.'.r.G.r.}.@.].].@.0 0 ] 0 B L ,+n+n+n+n+5+4+1+8+h+e+e+m+m+e+e+e+m+i+i+i+i+e+i+i+e+i+k+i+k+i+i+j+k+h+k+j+i+j+f+j+j+f+j+j+j+j+j+j+j+j+j+k+i+i+i+i+{+i+{+i+m+i+i+m+m+m+m+m+m+m+m+m+m+e+m+e+h+8+|+|+b c+a+7+6+j 1 1 2 _ h t @.].J J A ,.2.=.9.G.Q.Q.n.{.Q O & ", +" x 9 1.].].@.V e.e.2.m.F.t.5.].].].` a 0 ] a Z i /+n+n+n+l+5+4+1+8+f+e+m+e+m+e+e+e+e+e+e+i+m+i+k+j+k+i+i+i+i+j+i+j+i+j+i+j+j+j+h+j+j+f+j+f+k+j+k+j+k+k+i+i+i+i+i+j+i+i+i+i+i+m+i+m+i+i+m+e+m+m+e+e+m+e+m+e+h+8+|+|+1+<+a+7+..1+'+1 u _ h | @.].].].A X.3.-.A.}+Q.J.n.~.} O & ", +" i f 1.].].].W e.%.'.B.G.m.<.1.].].A ; 3 ] 0 ~ M n+n+l+n+l+5+4+1+8+f+e+e+e+e+{+e+e+e+e+e+e+i+i+i+i+i+i+j+i+k+i+j+j+j+j+f+f+j+j+j+j+h+j+f+h+f+j+j+j+j+i+k+j+j+j+i+h+i+i+j+i+i+e+e+k+m+m+{+e+e+L m+m+m+m+m+e+h+8+4+4+b c+b+7+6+b 9 9 2 : j p J ].].J I z.!.-.A.F.Q.Q.M.~.} ) & ", +" i } 1.].].1.T e.z.2.t.R.m.^.1.].].A B 3 5 0 n M n+n+n+n+l+2+c 4+8+f+k+e+e+e+k+k+e+k+k+e+k+i+i+e+k+j+k+k+j+k+k+j+j+j+i+i+h+f+f+j+j+f+f+f+h+j+j+j+i+j+j+j+j+j+j+j+j+j+e+i+e+k+i+e+i+e+m+e+m+l+m+m+m+m+m+l+m+h+8+|+4+2+b+b+^+8+4 9 1 r g j m ].].].].A z.3.-.A.}+Q.J.n.{.} O & ", +" + ' J @.].].T e.%.!.t.F.D.p.].].].t Z j 3 0 s * n+n+n+n+l+2+4+4+6+d+e+e+k+e+e+e+e+k+k+k+e+e+k+i+i+e+e+o k+j+j+i+j+j+h+j+f+j+j+j+f+h+f+f+d+j+f+h+j+f+j+j+j+i+i+j+h+f+j+h+k+i+e+i+e+e+k+m+m+e+e+e+m+m+m+m+m+i+7+1+1+5+d+b+9+..[+, 1 , : h m J ].].J A %.2.;.I.F.Q.Q.i.~.} O @ ", +" = ( J ].].@.W e.%.3.B.F.m.,.].].@.7 Z h 3 d s M n+l+l+n+l+5+4+2+8+j+e+e+k+e+e+k+e+e+k+k+{+e+i+e+j+j+i+i+i+j+k+j+h+j+f+h+f+f+j+f+j+j+h+f+f+h+j+f+f+h+j+g+j+h+i+i+j+j+f+j+i+i+i+i+k+e+k+e+e+e+e+e+m+m+m+m+m+i+h+f+<+d+e+<+9+8+5+2 1 , : j 9 @.].].].J =.'.;.I.}+J.J.i.{.} O @ ", +" d A @.].].#.e.z.!.E.F.u.~.1.].].6 +.k 3 0 % C l+n+n+n+l+k+g+f+h+i+e+e+e+e+k+e+k+e+m+e+e+k+e+i+e+e+j+i+o i+d+j+f+d+c+d+f+b+b+a+a+d+c+9+b+d+a+9+<+9+9+d+<+7+7+a+f+j+j+j+i+i+e+k+e+m+e+m+e+e+l+m+e+m+m+e+m+m+i+^+5+[+<+b+a+B v 2 9 2 q ] u J ].].J A e.(.-.f.}+W.J.i.~.} O @ ", +" & 6 1.].].W e.X.2.B.F.E.-.].].@.6 +.k 3+a O.* E l+n+l+l+^+8+7+i+k+e+e+e+m+e+L e+e+m+e+e+k+e+i+i+k+j+e+i+c+y.d+h+7+h a+b+0 2+2+[+a+9+g 8+b+5+8+a+2+5+b+8+2+[+8+b+f+k+j+j+j+e+e+e+e+e+e+e+e+e+e+e+m+l+m+m+e+d+7+4+1+d+<+9+8+6+r 1 , q ] u J ].].].I G (.X.I.B.Q.J.M.~.} ) $ ", +" . > t 1.@.W e.X.!.B.F.B.Q 1.].].f B k 3 0 s n+n+l+n+n+l+6+4+5+f+e+e+k+e+e+e+k+e+e+e+i+e+e+i+i+j+e+k+e+i+c+2+8+c+8+|+0+2+1+b+b+1+5+9+|+5+2+5+b+<+2+2+9+4+6+7+3 a+f+j+k+e+k+e+e+e+m+m+e+e+e+m+e+e+m+m+e+m+m+h+8+|+4+<+d+a+7+6+Y.1 2 q h u I ].].J J G /.X.I.}+J.W.i.p.} O @ ", +" @ f 1.].W e.X./.F.F.t.X ].@.].P y.c 4 6+# E n+l+n+n+l+6+1+5+f+e+e+e+m+e+e+k+e+e+m+e+e+i+k+e+j+e+e+e+e+<+2+4+8+8+g 9+2+1+b+b+h 2+7+g Y.2+a+d+c+2+5+a+1+6+7+4+a+d+k+k+e+k+k+e+e+e+m+e+i+e+m+e+m+e+m+m+m+e+h+7+4+4+<+d+a+8+v : m 9 q ] : J ].].].I G 3.-.4.G.J.Q.i.~.P O $ ", +" = ( N ].T e.X.!.B.F.E.%.@.].@., B ] b ..% M n+n+l+n+l+6+1+5+d+i+e+e+e+k+k+e+e+k+i+i+k+e+e+i+h+e+i+h+j+c+2+k 4+|+Y.9+5+4+b+b+1+2+^+Y.r ^+<+d+d+1+2+9+|+2+7+h 0+f+k+j+k+k+e+e+e+e+e+m+m+e+e+m+m+e+i+e+l+m+i+8+4+b <+d+a+^+6+g 9 9 r h u I ].].J J G !.>.4.}+Q.J.i.p.} O $ ", +" ! G @.W e.%.!.t.}+E.$.].].@., ; k 4 d % n+l+l+l+n+l+6+1+5+<+k+k+e+e+e+k+m+e+k+e+i+k+i+g+e+g+i+k+e+j+<+1+5+9+|+Y.7+5+4+b+b+1+1+^+Y.u 4+9+f+<+2+2+9+4+|+4+4+a+- g+j+j+k+e+e+i+m+m+e+m+e+e+e+m+m+m+m+m+e+i+^+4+1+<+h+a+7+6+|+1 9 q ] _ I ].].].N G !.L.4.F.J.Q.i.{.F O $ ", +" z t @.T W X./.B.F.m.%.].].].) B k 3+d @ M n+n+l+l+l+6+3+3+d+i+e+k+e+k+k+k+e+k+k+k+k+k+k+i+i+e+e+g+g+<+2+5+c+^+4+^+5+4+b+b+1+2+7+|+5+8+4+9+<+2+3+a+|+5+^+4+9+g+j+k+e+k+e+e+i+e+e+m+e+m+m+e+m+m+e+m+m+m+i+7+1+1+c+f+a+7+6+_ 1 9 2 _ : I ].].J A l !.>.f.}+Q.J.i.p.Y ( $ ", +" ! A @.W e.%.2.B.F.m.$.].@.@.( y.k 4 d # * l+l+n+n+l+5+|+1+<+g+i+k+m+e+i+k+e+k+k+k+k+k+k+i+i+i+k+k+g+<+5+8+c+c+8+9+b+6+2+2+5+b+a+1+8+<+8+2+a+5+5+a+2+8+9+2+a+g+k+e+i+k+i+e+e+m+e+e+e+m+m+e+m+m+e+m+m+m+i+b+7+7+j+i+a+^+6+h 1 , u ] _ A ].J J t 7 !.L.7.B.Q.J.M.p.P O $ ", +" ! t @.T e.X.2.t.}+t.$.@.].]./ .._ 4 6+% n+l+n+l+n+l+^+8+8+<+i+i+e+i+e+e+m+i+k+j+k+k+k+g+i+g+k+g+j+g+f+c+b+g+h+<+d+d+d+c+c+<+g+d+d+d+f+g+d+d+f+d+f+i+g+f+i+k+g+k+k+e+i+i+i+i+m+e+e+e+m+e+m+e+m+e+m+i+m+e+i+d+b+h+j+b+7+6+] 1 9 u h / I J ].J t } 2.L.I.}+J.Q.M.p.P O $ ", +" ! t @.T e.z.!.m.F.l.#.].].@.! d c 4 d $ n+n+l+l+l+l+e+g+k+k+e+i+e+i+i+i+i+g+e+g+k+k+g+j+j+g+k+k+k+i+k+k+i+g+i+i+g+g+i+i+g+g+g+f+g+i+k+g+g+g+g+i+i+g+g+i+k+k+k+k+k+i+k+e+e+k+e+m+m+i+m+e+m+m+m+m+m+e+m+m+h+8+4+b+h+b+^+6+] '+9 2 _ _ I J ].].G p 2.L.g.F.Q.J.i.{.Y O $ ", +" z A @.W e.%.3.m.G.m.#.].].].z ..] [+d $ n+l+n+l+l+n+7+6+d+e+i+i+i+e+e+e+i+g+i+k+g+k+k+k+k+g+k+k+g+i+j+k+i+g+i+i+f+g+g+g+g+g+g+i+i+k+j+k+j+g+i+g+i+i+e+i+g+k+k+k+e+e+i+e+i+e+e+e+e+e+e+e+e+e+m+m+e+e+e+i+d+8+1+b+h+a+7+8+] 1 9 u _ h A ].].J G } 2.>.A.}+Q.J.M.^.P O $ ", +" > t @.W z.z.2.s.G.t.X ].].].! a c 3+..~+* l+n+l+l+l+8+5+c+k+k+k+i+e+i+e+i+i+e+i+i+k+k+k+k+g+e+g+i+k+g+j+i+i+g+i+g+k+j+j+i+g+f+g+g+i+k+i+f+j+e+g+g+g+i+e+i+k+e+e+e+m+i+i+i+e+i+e+e+m+m+e+m+m+m+m+k+e+e+e+h+8+4+b+i+b+^+6+3 1 9 q g _ N J ].].G } 3.>.A.}+Q.J.M.p.P O $ ", +" > A 1.T e.z.L.r.G.m.S @.].].! ..k 3+d % n+l+n+l+l+m+7+2+<+k+e+k+e+e+e+e+i+i+e+g+g+k+k+g+k+g+k+k+g+g+k+k+j+e+i+g+j+f+k+k+j+i+j+k+j+j+i+j+j+j+g+i+i+i+k+i+i+e+i+i+i+i+e+e+i+i+e+m+e+e+e+e+i+e+e+e+m+e+e+e+h+8+1+a+h+b+^+..] 1 1 u g h A J ].J t 1 '.>.9.}+Q.J.i.p.P O $ ", +" > G @.T $.z.L.C.J.m.W ].].@.|+..] 4 ; % * l+n+l+l+l+7+2+c+k+e+i+i+e+i+i+k+i+e+i+g+k+g+k+g+j+g+j+k+j+k+k+k+k+k+j+j+j+g+j+g+g+k+j+j+j+j+k+g+j+f+k+k+g+j+k+k+i+e+e+i+e+i+e+i+i+e+m+e+e+m+e+e+e+m+m+e+e+m+m+h+8+1+a+g+b+^+6+] 9 1 u _ / I J J J G P L.>.A.}+Q.J.i.p.P O $ ", +" > t 1.V .+z.2.C.J.u.S ].].].! 6+c 3+6+& n+l+l+n+l+m+7+5+c+g+g+e+e+i+e+i+k+k+i+k+k+k+k+k+g+k+k+e+k+k+k+e+k+j+j+j+j+j+j+j+j+j+j+j+j+f+j+k+g+k+j+k+k+k+k+g+i+e+e+i+i+i+e+i+e+i+i+e+e+e+i+e+m+m+e+e+e+e+e+e+h+7+4+a+h+b+^+6+j 1 1 2 h g A J J N G 1 >.;.A.}+Q.J.j.p.} O $ ", +" 5 S 1.T e.z.>.A.G.s.W ].].J ! y.c 4 ; % i l+l+l+n+l+7+2+c+k+e+i+i+g+k+i+i+k+e+g+g+g+k+g+k+k+g+k+j+k+k+k+k+k+k+g+j+g+k+j+k+j+j+k+k+j+j+j+j+k+k+g+k+k+k+k+k+e+i+g+i+i+i+i+i+e+i+i+e+e+i+e+i+e+e+e+m+e+e+k+f+8+|+a+f+b+^+6+4+9 9 2 _ / A J J J t Y L.>.A.G.Q.Q.M.p.} ( $ ", +" 5 A 1.T e.X.2.9.J.E.#.].].]./ 6+] 3+6+# n+m+l+l+l+e+7+5+b+k+i+k+i+i+i+k+k+k+k+k+k+k+k+k+f+k+g+g+g+k+j+j+k+g+g+g+j+g+k+k+j+j+j+f+k+f+g+g+j+k+g+g+g+g+g+f+i+i+k+i+k+k+i+k+i+e+e+i+i+m+i+e+e+i+e+e+e+e+e+e+i+d+d+g+h+b+^+8+] 1 1 r g h A J J J G 1 >.>.C.}+Q.J.j.p.Y O @ ", +" 4 G 1.T .+z.L.A.J.F.W 1.].].( d k 3+; $ n+l+m+l+l+m+f+<+g+e+g+k+k+k+g+i+i+k+g+k+k+f+k+k+k+g+j+k+g+k+g+g+k+f+k+k+k+f+k+f+g+g+j+f+j+g+j+g+k+g+k+k+g+k+g+g+k+i+k+g+k+k+i+k+g+k+e+k+g+e+e+i+e+k+e+e+e+e+k+e+i+a+5+b+f+a+7+..4+9 1 u _ : A J J J t Y ;.2.q.F.T.J.M.p.Y O @ ", +" D G @.V e.X.>.A.J.u.$.].].].! B ] 4 6+@ E m+l+l+l+l+b+a+f+g+k+k+i+k+k+e+i+e+k+k+f+k+k+k+k+g+k+g+f+g+g+k+f+k+g+f+k+k+g+f+k+g+j+g+k+k+k+k+f+f+k+g+k+i+g+k+k+g+e+k+k+k+k+e+k+k+k+k+e+g+i+e+e+e+k+e+e+m+m+m+h+9+4+a+f+b+7+8+k 1 9 2 h / I J J J e ' ;.!.C.G.Q.Q.i.p.} O @ ", +" 3+S 1.T W X.>.A.J.F.$.@.@.].) d _ 3+d % n+m+m+l+l+m+7+2+b+g+k+k+e+e+g+i+g+k+g+g+k+k+f+k+k+f+g+g+g+g+f+k+g+k+f+f+f+f+k+f+k+k+k+k+f+k+f+k+g+k+k+f+k+k+e+i+i+g+e+k+g+k+e+k+i+k+e+e+e+e+e+e+k+k+e+e+e+e+k+k+i+7+|+9+d+b+7+6+h 1 9 u h ( A J ].J e Y >.!.s.G.Q.J.U.p.} O @ ", +" < t 1.T $.z.>.I.J.F.%.].].].) 8+_ 5 6+[ + l+l+l+l+l+^+2+a+g+k+k+i+g+k+k+e+e+k+k+f+k+k+f+k+g+k+k+g+k+k+k+f+k+f+k+k+f+g+g+f+j+k+f+f+k+k+k+k+f+k+g+g+k+g+k+k+k+g+k+e+k+g+g+k+i+e+i+g+e+e+e+m+e+e+e+e+e+e+e+h+^+4+a+d+a+7+8+k 9 9 u h q I J J J l } 2.!.C.}+Q.J.M.p.Y O @ ", +" < t ].V $.%.;.I.W.F.$.].].@., ; k 4 d # E m+l+l+m+m+^+2+c+g+k+i+i+i+e+i+g+k+g+k+k+k+k+k+f+k+g+k+g+f+k+k+f+k+f+- f+k+f+g+f+k+k+f+- f+f+k+k+k+g+f+g+k+g+k+g+k+k+k+k+e+k+k+k+i+e+e+i+e+e+e+e+e+m+e+e+k+e+e+f+7+4+9+h+a+7+6+_ m 1 u _ : I J ].J 7 } L.3.D.}+Q.J.M.p.P O & ", +" 3+e 1.T .+z.X.4.J.R.=.].].].P ..|+5 6+# C l+l+m+m+m+0+2+b+g+i+i+i+e+g+g+i+k+k+k+k+k+k+f+f+f+f+k+f+k+k+f+k+f+f+k+g+g+k+j+f+f+j+f+k+f+k+k+f+f+g+k+k+f+k+k+k+g+g+i+k+k+k+k+k+e+i+i+i+i+e+e+m+e+k+e+e+m+k+k+h+^+4+a+f+a+7+6+_ 9 9 u c u I J @.J X } L.3.D.}+Q.J.M.p.Q ( @ ", +" < e 1.N e.z.>.:.}+G.=.].].].' ; k 4 6+# n+m+l+l+l+m+9+2+b+g+i+g+k+e+g+g+k+k+g+g+k+& k+g+g+g+k+k+f+f+k+k+k+f+f+g+k+f+g+g+j+- g+f+k+f+f+k+f+k+k+g+k+g+k+g+g+i+k+k+k+k+k+g+k+e+k+m+i+e+e+k+m+m+e+e+e+k+k+k+i+9+6+a+h+a+7+6+/ F 9 q k u I ].].].Q Q L.3.D.}+Q.J.M.p.} O & ", +" 3+t 1.V e.z.L.:.J.J.=.].].@.f y.|+4 6+s C l+l+l+l+l+0+5+a+g+g+i+k+i+g+k+g+k+k+g+i+i+k+k+f+k+f+k+f+k+k+k+f+f+f+g+f+g+f+f+f+g+j+f+k+k+k+f+k+g+k+k+g+k+g+k+k+g+i+i+k+e+i+i+e+e+i+i+i+i+i+e+e+e+e+k+k+e+k+g+f+d+f+i+f+a+7+d : 9 1 q _ u J ].J ].} &.L.:.D.J.J.J.M.p.Y ( @ ", +" a S I G e..+X.3.B.W.,.].].@.6 B ! 5 a 0+E e+l+l+l+m+m+e+f+g+g+g+k+g+g+k+i+k+k+k+g+k+g+k+k+k+k+k+& g+f+k+k+g+k+k+f+k+g+g+g+j+g+f+k+f+k+k+f+g+k+g+k+k+g+e+i+i+k+i+i+k+g+i+k+e+i+i+i+e+e+e+k+e+e+e+e+m+e+i+9+1+^+i+h+a+^+6+Y.1 1 q g , J ].I N 1 Q ;.4.D.G.Q.J.M.O ~.O & ", +" a e 1.N e.X.>.3.G.J.,.1.].].8 Z k 1+a ^+i m+m+l+m+l+0+3+4+4+3+c+g+g+i+i+i+g+k+g+g+g+g+k+g+- k+f+g+f+g+g+k+k+f+f+k+k+k+g+f+k+f+k+f+k+g+k+f+g+k+g+g+g+k+k+k+k+k+k+i+k+e+i+e+e+k+i+i+i+i+m+m+e+e+m+e+k+e+b+4+|+4+^+f+a+7+..u 1 , q _ 9 J @.I I P Q ;.[.B.J.J.J.M.p.P ) & ", +" a S 1.T e.z.X.3.F.Q.).].].].e B c 3 d n L m+l+l+m+m+0+0+8+a+6+b+g+g+k+k+g+g+g+g+g+g+g+f+g+g+g+g+f+k+f+f+k+k+k+f+k+- g+g+f+f+f+k+f+k+& k+k+g+k+k+k+k+i+k+g+e+g+e+e+e+g+i+i+e+k+k+e+i+e+e+e+e+e+e+e+k+k+b+6+d+^+^+f+a+7+..u '+9 q h 9 ].@.J ].F X L.I.D.G.Q.J.n.{.Y O & ", +" d t 1.N .+z.X.L.D.Q.^.1.].].G ; c 4+< ^+i m+m+m+m+m+m+0+4+4+a+f+g+k+g+g+g+k+i+k+g+g+g+f+g+k+k+k+k+g+& k+f+k+f+g+g+g+k+f+k+f+k+k+g+k+k+g+g+f+k+k+g+g+k+k+e+e+g+k+i+i+e+k+k+g+i+k+k+i+e+e+e+e+e+e+e+e+k+b+8+f+9+9+f+a+7+6+r 1 , : _ 1 @.].].]., =.L.A.D.J.Q.J.M.p.} O & ", +" ; S 1.N e.z.X.3.s.Q.x.@.].].A ..c ] [+~ H m+m+l+m+m+e+g+8+a+f+f+g+g+g+g+g+g+g+i+g+g+g+k+f+k+f+g+f+g+f+f+g+k+- f+f+f+k+f+k+f+k+k+k+g+k+k+g+g+k+k+k+g+g+g+e+e+g+g+e+i+i+e+e+i+e+e+i+e+e+e+k+e+e+e+k+e+e+c+8+g+9+9+d+a+7+6+, 1 , q _ p ].].J @.1 -.;.A.D.J.Q.J.i.p.P O H ", +" ; e 1.G .+e.z.L.C.J.<.@.].].I a 3 ] [+B e+m+l+l+m+m+e+k+8+a+f+f+k+g+k+f+g+g+g+g+g+g+g+f+g+g+k+f+g+g+g+f+f+g+g+g+- k+k+j+k+f+f+k+k+g+k+k+g+g+k+g+g+k+k+g+g+g+g+e+i+k+i+i+i+e+e+e+k+k+e+e+m+e+e+m+m+e+e+<+5+8+5+9+h+a+B a , 1 , : h p ].J @.]., =.L.C.D.J.Q.W.M.p.Y O H ", +" ; S 1.G e.e.X.2.q.Q.5.@.].@.1.< 3 c < ~ H n+m+l+m+m+m+e+8+a+f+g+g+g+k+g+g+g+g+g+f+g+g+f+- g+k+g+f+f+f+f+f+f+k+g+f+f+f+- f+k+k+f+f+k+k+f+g+- g+k+k+f+k+k+k+e+g+i+k+k+e+k+i+i+i+e+i+e+k+k+e+k+k+e+e+e+i+f+b+b+c+f+d+a+7+5+9 1 2 : g | ].J @.].) =.L.C.D.J.Q.J.M.{.} O i ", +" ; e 1.N e.e.%.L.A.J.d.@.].].J 3+4 k 3+; @ l+m+m+m+l+m+k+b+c+f+k+k+f+k+g+k+k+g+g+g+g+g+g+k+f+f+f+f+f+g+f+g+f+- f+f+f+g+k+f+f+f+k+- g+g+k+f+k+g+f+f+g+g+g+g+k+i+g+k+k+g+e+k+k+k+k+k+e+k+k+e+e+e+k+e+k+e+e+e+e+e+i+d+a+B [+9 9 , q g e ].].J J , X.3.C.}+J.Q.W.i.p.Y O i ", +" ; S 1.` W .+X.L.I.Q.n.@.].@.@.> 0 g 3+; @ E m+m+m+m+e+g+e+f+g+f+g+f+k+g+f+f+k+f+f+f+f+f+f+g+f+f+f+f+g+f+k+g+g+g+f+f+f+f+g+f+f+g+f+k+g+g+- f+k+g+g+f+g+k+g+k+g+k+i+k+g+g+g+g+k+k+k+k+g+k+k+k+e+k+e+k+e+k+m+m+m+i+<+9+B 3+'+1 9 g g e ].].@.J Y -.3.C.D.J.Q.H.i.p.Y O i ", +" ; e 1.N W e.z.L.I.J.i.N ].].].u [+_ 3+; @ m+l+e+m+m+e+e+e+g+g+f+k+k+f+k+g+f+f+f+f+f+g+g+f+f+f+f+f+f+f+f+f+j+f+f+f+f+f+- - f+k+f+g+f+- f+f+f+g+- k+f+g+g+k+f+f+k+g+k+g+k+g+g+k+g+k+k+g+k+k+k+k+k+e+e+e+e+e+e+e+h+<+9+8+1+'+9 2 q q A @.].].J ) >.3.C.D.J.Q.J.n.p.} O i ", +" ~ e 1.N W e.%.L.4.}+K.N ].].1.O a / ] a $ i m+m+m+m+g+<+f+f+g+g+# f+f+f+k+g+f+f+g+f+f+g+f+f+f+f+f+- f+f+f+f+j+j+f+f+f+f+f+f+f+f+g+g+g+f+f+f+g+f+f+8+a+f+- 3+2+f+f+k+g+k+k+g+g+k+g+k+g+k+k+k+k+k+k+k+k+e+k+k+g+d+b+^+B ] '+9 r g q I @.].].J O >.:.D.}+}+Q.J.M.p.P O i ", +" ~ e 1.U e..+z.>.:.G.E.T ].].].} d |+5 5+$ l+m+l+m+e+b+B c+f+f+a+5+c+g+f+f+f+i+f+f+f+f+f+d+f+d+d+d+g+- f+- f+f+- g+f+g+- f+g+f+- f+k+k+f+f+k+g+f+f+6+|+b+b+1+5+f+k+g+k+g+g+g+f+g+f+f+f+f+i+g+f+d+<+g+i+i+c+b+<+d+b+^+..|+'+9 q _ u I J @.].t {.>.4.C.}+J.Q.;+M.p.P .i ", +" n 7 1.N W .+.+>.3.B.u.W ].].@.Q ; / ] a [ i m+m+m+e+b+4+^+c+d+2+4+b+f+b+c+c+f+c+a+a+a+d+f+9+a+c+^+a+<+d+d+<+d+f+g+g+g+f+f+f+g+f+f+g+k+f+f+k+g+f+f+6+|+4+a+4+3+d+9+4+4+a+<+6+4+4+|+|+4+6+g+f+8+1+4+b+d+b+2+2+^+<+b+7+..: m F q _ , J ].].J e Y >.4.D.}+J.Q.J.++p.P ( + ", +" n 7 1.U W e.z.X.!.m.;+$.].].].e d |+> 5+^++ m+l+m+m+a+4+|+^+2+|+|+a+b+4+4+6+# 8+|+1+3+0+b+1+2+9+1+8+c+f+f+f+f+f+d+d+- f+f+f+f+f+g+f+f+f+- f+g+f+<+5+|+4+4+4+2+<+d+<+^+4+^+6+|+0+|+4+0+|+6+8+Y.^+5+|+b+|+5+h+h+<+a+7+6+Y.'+, q _ 9 J ].@.@.p } 2.I.D.}+J.T.H.M.p.Y ( C ", +" O.7 I N W e.z.X.2.q.J.&.].].].t d _ c y ~ n+i m+e+m+c+4+4+|+4+|+|+0+|+4+^+4+6+5+4+9+6+4+a+4+4+^+4+8+c+d+f+f+<+f+d+f+<+f+f+f+d+- f+- f+g+f+f+g+f+d+6+Y.7+4+|+4+<+a+1+4+|+7+2+|+a+|+4+0+|+8+8+|+|+4+1+a+1+2+4+5+c+9+B 6+2 m , : _ ^ J ].].@.f &.2.A.C.}+J.Q.H.M.p.Y ( C ", +" s | 1.U W W e.>.L.A.W.&.].].].` d c c 5+B i l+m+e+e+b+4+7+6+^+3+|+9+Y.|+|+1+8+5+|+^+2+|+9+4+3+^+|+6+b+d+d+- d+f+<+d+f+<+d+<+d+g+f+f+f+f+f+f+f+f+d+6+|+a+0+4+1+a+5+5+6+|+7+6+4+a+4+4+0+|+8+7+Y.a+d+h+f+h+a+|+5+c+9+B [+, F , : _ ^ ].J @.@.} X L.A.D.}+J.J.H.++O Y .x ", +" O.8 1.V W .+z.X.L.I.J.^.].].].@.< ] ! 3+; @ m+l+m+e+c+3+^+c+<+5+4+a+4+4+b+<+<+6+|+7+2+|+9+3+4+^+|+6+c+<+f+<+f+<+<+f+d+f+f+f+d+d+f+d+f+f+g+g+f+d+<+6+|+a+b+^+1+b+7+2+2+|+7+6+1+a+4+2+a+4+8+c+8+2+5+5+b+5+6+8+d+b+9+8+2+, 1 2 / _ | ].].].].} X 3.A.D.}+Q.Q.J.M.p.{.( x ", +" O.| 1.U V $.e.>.L.4.J.<.1.].].].5 4 |+5 6+s - m+m+e+c+1+^+<+f+5+4+a+b+4+4+1+8+8+4+^+8+1+b+b+2+3+1+7+c+d+d+d+f+f+<+<+- <+- <+f+d+<+<+f+<+f+f+d+f+d+9+7+c+f+c+9+d+b+a+9+a+b+b+a+b+b+b+c+b+d+d+<+c+c+d+d+d+d+f+d+b+9+7+] 9 , q : k 7 J ].J @.p X.3.A.D.}+J.Q.R.++O {.( C ", +" s 7 1.U V e..+X.L.4.G.o.@.].].].! a q ] < n f+l+e+m+e+c+d+f+g+<+c+<+d+<+c+c+<+<+d+c+<+<+<+<+<+<+c+d+d+d+d+d+d+f+<+d+d+d+d+d+<+d+f+f+d+f+<+f+d+d+f+f+f+d+d+g+d+g+d+g+d+f+d+f+f+d+g+i+i+i+e+i+e+i+i+e+e+i+m+m+i+d+9+5+q 2 , q : _ t ].].].@.} X.:.C.D.}+J.Q.H.M. .Y ( x ", +" [ | I N W W e.z.L.3.u.i.U ].].].Q v q |+3+; @ L m+k+m+e+e+e+g+i+i+g+g+g+g+g+g+g+g+g+g+h+d+g+g+f+f+f+f+f+g+f+f+g+f+d+f+f+f+f+f+d+f+d+f+f+d+f+f+f+g+g+d+g+g+d+h+f+h+d+f+f+f+h+f+g+i+i+i+m+m+m+l+m+i+f+d+c+c+a+9+8+0 ] / u u : g u J @.].].J P -.3.C.D.}+J.Q.u.M.p.{. .x ", +" # 6 1.U W e.e.X.L.3.s.P.U ].].].N b _ _ 3+[+7+b+b+0+^+0+a+a+b+c+<+d+d+d+d+g+g+g+g+g+g+g+i+g+g+i+g+f+g+d+g+g+f+i+f+f+f+f+f+f+g+g+d+f+f+f+f+f+f+f+f+g+g+g+i+g+g+g+g+g+i+i+i+g+f+f+d+c+b+a+a+9+^+7+B B y...y.y.....d 3 ] _ : : _ , ].].].].J {.;.4.C.C.}+J.Q.H.++p., z = ", +" @ 6 1.N V W .+z.>.(.C.H.$.].].@.1.c 0 q k 5 < a a < < 5+y 6+; ; ; ; ; 6+8+8+B 8+7+7+^+^+^+0+a+a+a+a+a+b+b+b+c+c+<+c+c+<+c+<+c+c+<+c+c+c+c+b+b+b+b+a+b+a+a+a+0+0+^+^+7+7+8+B B 8+8+..6+....; ; Z ..Z d Z ; Z d a d 0 3 c h _ : N ].].].].N Y L.4.C.B.}+Q.Q.R.M.p.{.( = ", +" @ 6 1.N T W e.X.>.3.A.J.X ].@.].].l B 3 : k ] ] 1+3 5 4+3 3+3+2+3+5+a a y 6+; 6+; 6+; d ; 6+; ; ; 8+6+; ....6+6+6+; 6+..6+; ..6+6+6+d ; ; 8+6+; 7+6+B 8+; 8+6+8+6+; ; B ; ; 6+; ; ; d ; d ..d a 0 a 0 0 0 0 0 0 4 3 3 c c / 7 ].].].].@.e } L.A.C.D.}+J.Q.R.++ .{. . ", +" @ 6 1.U W $.e.z.>.L.I.Q.^.1.@.].].].) _+b : ! _ / / _ c c _ k c 5 ] ] 1+3 3 3+5 b 3+3+4 0 4 a 5+a a a 5+d d ; d d ..d 6+; ..d ; d d d 6+; d 6+6+; 8+; 6+6+d ; ; 6+d d a d 0 0 0 4 0 a 4 0 b 4 4 4 4 5 5 3 ] 3 3 3 3 j h c | ].].].].].].p -.3.A.C.D.F.J.Q.G.++p., z ", +" @ f 1.` V e.e.z.L.L.4.J.<.@.].].].@.J ( +.d / u u u Y.Y.u / : : |+/ |+c c k k c k c ] ] 4+] 3 ] 3 j 3 4 3 3 4 4 3+4 4 4 3+4 3+4 3+< 3+4 3+4 4 0 5 b 4 4 5 b 4 4 4 3 3+3 4 3 5 3 ] 3 c ] 3 ] ] ] k h j c ] ] h k k ] _ 9 A ].@.].].].].J F X 3.A.D.D.}+J.Q.G.++p.) ( ", +" - 6 I ` V W e.z.>.!.:.}+a.@.].].J @.].J } ] 0 k 2 , , , 2 u ) r u Y.u Y.Y.Y.: : : _ : : _ g g _ _ k k / c c _ k c h c c c 3 ] 3 ] ] c > ] ] 3 c ] c ] c 3 ] c c ] c c c _ c k c c k ] k k h _ c _ _ q q Y.r 2 2 '+f A J ].U ].].].].].@., X.4.A.C.D.G.Q.Q.H.M. .{.z ", +" H f N ` T .+e.z.X.L.3.r.u.` @.].].].].].@.].t e A 1.1.A t e e | | m 9 F , u Y.) 2 Y.Y.u u Y.Y.Y.Y.: : Y.: : g g / : g q q g : / g _ _ / ! / _ / k _ _ _ _ _ _ _ / _ k _ _ _ / : Y.Y.u 2 , 2 9 ^ f f f | ^ | e A J ].].].].].].].].].].` {.X.I.C.C.D.}+J.Q.H.++ .{.z ", +" H ^ I 1.V V .+z.X.!.3.q.;+W ].].].].].].].].1.].].].].].].].].@.].1.J I A A t t e 6 6 f m '+'+9 9 2 2 r u u u ) u Y.) Y.u u u Y.u u u Y.u Y.u Y.u ) u ) , , 2 9 2 , 9 m m ^ m ^ 7 e e t G G I I 1.J 1.].].].].1.1.].].].].].].].].].].t } >.4.C.s.D.}+J.W.H.M.O O > ", +" i ^ N 1.W W e.z.X.L.!.I.Q.,.1.].].].].].].].].].].].].].].].].@.].].].].].@.].@.@.].].].@.].].1.].].].J N N A A A t A G A t t t t t A A I A A A A A A I I I I I I ].1.@.1.].].].].].].].].].].].].].].].].].1.1.].].].].].].].].].].].Q &.!.I.A.C.B.}+J.Q.R.++|., R ", +" i } I 1.V $.e.z.X.>.L.4.G.5.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].} -.:.A.C.C.D.G.Q.Q.H.S. .{.w ", +" i } ` 1.U W e.z.X.L.L.3.D.E.V @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].N Q ;.I.9.A.C.D.}+J.Q.H.++ .{.w ", +" + ^ N ` +V W z.>.>.L.3.A.W.~.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].J $.'.I.9.C.C.D.}+J.Q.u.++p.{.w ", +" + ' 1.I V T W z.X.>.L.3.:.J.9.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].1.].1.1.J J J ].` X.3.A.9.C.C.D.}+J.Q.R.++ .{.w ", +" C ' G 1. +W W z.X.L.L.L.3.k.R.e.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].A | ^ , u / c ] ] 4 0 0 u G @._.4.A.g.C.C.D.J.J.Q.H.++p.) D ", +" C ' N 1.U T W z.z.L.L.L.L.4.t.U ].J e ^ F 9 , , u Y.2 2 , ' | I ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.e m u _ ] ] ] ] ] j 3 3 3 0 ..5 t @.;.7.9.A.q.C.B.}+J.J.H.++|.{.D ", +" C P A U V V W z.X.X.L.L.3.3.l.e.@.G A f m '+'+9 , 2 Y.g j b 0 [+3 ) t 1.].].].].].].].].].].].].].].].].].].].].].].].].].@.].].].].@.@.@.].].].].].].].].].].].].].].].].].].].].].].].].].J t '+2 r r q r r q q r u g g k 5 d / J J _.7.9.g.C.r.D.}+Q.Q.R.S. .O < ", +" x P A N V T T z.X.X.L.L.L.2.q.[.].N J A e 7 7 | p p ^ m 1 2 q g 4 ..d c | 1.].].].].].].].].].].].].].].].].].].].].].@.@.U &.N.N.p+N.-.W 1.].].].].].].].].].].].].].].].].].].].].].].].A ^ m 9 1 1 9 9 9 , , 2 , 2 u : g 4 < e ` z.f.A.A.9.9.C.D.}+W.W.H.++p.O D ", +" x ' A ` V W W .+X.X.L.L.L.'.3.v.e.@.].J I A t t e 7 7 | | p ^ m 9 Y.j d ; / t I ].].].].].].].].].].].].].].].].].].1.W ;.x.x._.3.3.:.8.v.0.,.@.].].].@.].].].].].].].].].].].].].].].].G 7 ^ m ^ m ^ 1 1 9 9 9 9 9 2 u g ] 4 F J V 3.A.9.9.A.9.C.B.}+J.J.u.++ .O a ", +" = ) t I V W .+z.X.X.L.L.L.L.L.A.}.U 1.].J I A t A e 7 7 | | | p ^ '+, : 4 Z c I ].].].].].].].].].].].].].].].].].U &./.!.;.z. + + +V V z.[.K.0.$.].].].].].].].].].].].].].@.].A t ].A | p '+m m 1 1 9 1 9 , 9 2 , u q c 4 ) J @.-.4.g.9.9.9.9.k.s.}+J.W.R.++p.O y ", +" = O A ` N W .+e.X.X.2.2.L.L.3.3.h.).@.].].I I A t e e 7 | | | ^ p | m , u 4 ; 2 ].].].].].].].].].].].].].].].].U &.(.'.%.` 1.A t e S A N N e.6.j.,.1.1.@.].].].].].].].].].].].7 I N e p m 1 9 9 9 2 r q q r r 9 2 u g 3 ! I @.z.4.I.8.9.9.A.q.C.D.G.J.W.R.++ .O ; ", +" = ) t ` U V .+z.X.X.L.L.L.L.L.2.:.l.%.@.].1.J A t 7 7 | p ^ ^ m '+'+1 1 9 q 0 0 7 ].].].].].].].].].].].].].].N &.:.,.U J I 7 9 g 3 4 < ! l J U '.l.).1.].].].].].].].].].].].7 e I A p j q+o+o+r+s+s+s+t+t+t+u+g q : h / t J W (.I.7.8.9.9.A.9.C.s.G.J.W.R.S. .O ; ", +" . ( t 1.V W W z.X.X.L.L.L.L.L.L.!.4.k.T ].].J J t j v v+v+v+q+w+q+q+o+x+v+9 k d u A ].].].].].].].].].].].].N %.<.).` J A | ^ 9 , q _ 0 ..d F J U 2.U.$.].].].].].].].].].].1.) J A A p h v+v+q+q+q+v+v+v+v+v+v q q c / e ]. +/.f.7.A.A.g.7.8.9.C.D.}+Q.W.R.++ .O ~ ", +" ( G @.U T T e.X.>.L.L.L.2.L.L.L.L.9.7. +1.J J A b v+v+v+v+q+q+q+q+q+q+0 m 2 0 0 e ].].].].].].].].@.].].I $.<.x.U ].N e | | ^ m 9 1 q ] d d ' ` U [.8.@.].].].].].].].].].A F ` A t | m m m 1 1 9 1 9 9 r r r r g u e ].W L.4.7.7.A.g.9.A.7.9.q.s.}+J.W.R.++p.O ~ ", +" ( t 1. +U W .+X.X.L.!.L.L.3.L.L.L.3.9.f.N ].J J I e 7 | | 7 p p p p m m ^ '+h d ^ @.].].].].].].].@.@.J G ).d..+J N t l 7 | p m p 1 9 u _ 0 d f @.N b.).].].].].].].].].].f e J I e | p p p p m m m 1 1 9 2 u q , A ]..+2.4.4.I.g.8.A.g.g.g.A.C.D.}+Q.W.R.++ .) ~ ", +" ! S 1.V V W +X.X.L.L.L.L.L.3.L.L.3.3.A.g.U J ].J J J A A t t e 7 7 7 p ^ m q d u @.].].].].].].].].].N .+c.{.1.V N t 7 7 | ^ 9 , m 1 9 2 _ d 5 V A ,.a.@.].].].].].].].@., A ` J e | | p p m p m m 9 1 9 2 2 ^ I @.z.(.f.I.I.7.A.6.g.6.g.9.9.A.s.}+J.Q.R.++ .) n ", +" ! G ` N W W e.z.X.L.L.L.!.L.L.L.L.L.L.3.g.8. +@.].].J J I I A A t e 7 7 | ^ 2 0 5 I ].].].].].].].@.J G ,.n.V @.N A e 7 | m 2 +.~+u 9 1 9 2 3 v , ]. +9.X ].@.].].].].].1., @.A I 7 | p p m p m p 1 9 9 2 1 7 J @.z.3.:.f.6.7.7.g.7.A.7.A.6.A.q.s.}+Q.W.R.S. .O >+ ", +" > t ` N V V .+z.X.>.L.L.L.2.L.L.L.L.L.L.!.I.C.=.I @.@.J J J I A A A t 7 7 | 9 j d t ].].].].].].].].e T 5.|.J I I A t e | ^ 0 { )+O.9 9 1 , : 0 [+A 1.!.|.@.].].].].].].I , @.I A 7 | | p ^ p m m m m 1 7 I ].V >.:.I.I.I.I.7.7.A.7.7.6.I.7.A.q.s.}+J.W.P.S. .( [ ", +" > S ` V T W e.%.X.L.>.L.L.L.L.L.L.L.L.L.L.2.:.v.(.U @.].].J J J A G t t 7 | f _ 6+6 ].].].].].].].].e =.M.$.I J I A e 7 | 2 {+K )+)+0 m F 9 u ] d f ]. +b.U ].1.].].].].e f ].J A | | | | p m m m ^ | I J @..+L.:.I.I.7.A.I.I.I.g.I.I.7.g.I.g.q.s.}+W.J.H.++ .O s ", +" 5 S 1.N T V .+z.X.L.>.L.L.L.L.L.L.L.L.L.L.L.L.3.9.9.-.@.].].].].J N I A e | | u d ' ].].].].].].].I t (.n.U I @.I A t e | / O.(+0+O.v m m 1 9 Y.0 z I @.A.&.@.].].].].@.6 7 J J A | p f p p ^ p e I J @. +2.:.I.I.}.}.f.I.I.6.7.g.A.7.I.7.7.9.9.m.B.J.H.P.++p.( [ ", +" 5 e N V V W $.z.X.L.L.L.L.3.L.L.L.L.!.L.;.2.>.L.L.:.h.f.e.@.J J ].].J I A e | , d u ].].].].].].].e #.i.c.` A @.J A t e 7 | p ^ 1 m p ^ ^ m m ) ] 0 N @.'.5.1.].].].].]., 7 U ].t e 6 7 e t t J @.@.V ;.:.I.4.I.I.I.I.I.7.f.I.I.7.7.A.6.6.7.g.q.s.}+J.;+H.S. .( [ ", +" 3+S 1.N T V e.z.X.L.>.L.L.L.L.L.L.L.L.L.L.L.X.>.L.L.2.I.9.}.z.V @.].].].].@.N f ] , ].].].].].].@.7 %.M.c.J I ].I A t t 7 7 | 7 | | | | | | p ^ u / I @..+j.N @.].].@.].f A ].@.J I I I J ].].@..+'.:.4.4.I.4.I.I.I.7.7.I.I.7.7.7.7.I.I.I.A.I.q.s.}+J.H.P.++p.( # ", +" < e N N U W W e.X.X.L.L.L.L.L.L.L.L.L.L.L.L.>.>.>.>.>.>.2.[.A.f._.e.U @.].].].I e G ].].].].].].].J /.-+K.z.].@.].J I I I A G G A A A A A A I A t I @.` .+g.z.@.].].@.@.U U ].].].1.].@.U .+,.<.5.6.I.I.f.I.f.f.7.7.I.I.f.7.I.I.I.7.7.7.7.6.g.9.s.B.J.H.P.++ .O $ ", +" a S N T V V W .+z.>.>.L.L.L.L.L.L.L.L.L.L.L.>.>.>.>.>.>.L.L.2.3.I.9.7.4.;..+U @.1.@.V =.W U @.].@.U 5.K.v.b.%.@.J ].].].].].].].].].].1.].].@.@.@.U V W W }.4.U U +.+X.3.}. +U U e.;.:.7.6.g.I.}.I.4.I.I.I.I.I.I.I.f.I.f.I.f.I.I.I.I.7.9.I.A.9.B.}+J.W.P.++ .O $ ", +" a 7 I ` T V W z.z.X.>.X.L.L.L.L.L.L.L.L.L.L.L.L.X.>.L.>.>.>.>.>.X.L.3.4.I.9.9.7.(.(.5.h.q.8.6.4.}.).j.l.n.b.b.w.).%.e.V U U @.@.@.@.@.@.U U .+.+z.z.z.e.W 2.t.8.g.A.C.C.C.B.k.6.6.g.9.7.6.f.f.I.4.f.I.f.I.f.I.I.f.f.I.I.I.7.I.7.7.7.A.I.I.g.g.q.r.}+J.H.P.S.O O % ", +" ; 7 N N V U V z.z.>.>.X.X.L.L.L.L.3.L.L.L.L.>.L.L.X.L.>.L.L.>.L.2.X.;.>.2.2.!.(.[.}.f.9.9.q.b.h.h.9.H.j.a.c.8.6.7.}.[._._.3.3.2.>.>.;.X.X.X.>.>.X.X.z.z.z.e.}.C.C.C.C.9.9.A.A.I.f.4.f.4.4.f.I.I.4.I.I.f.I.I.I.I.I.7.7.7.g.A.I.I.7.7.I.I.A.I.A.q.k.}+J.W.H.++p.O @ ", +" ; 7 I V T V W z.z.X.L.>.L.L.L.L.L.L.L.L.>.L.L.X.>.L.>.L.>.>.L.2.>.L.>.L.L.L.L.2.L.2.2.2._.(.:.[.5.K.H.i.a.5.5.d.|.[.<.x.^.!.'.!.'.;.;.;.X.X.X.X.z.X.X.z.z.V L.I.f.4.4.4.4.[.4.4.4.7.f.f.I.f.f.I.4.I.4.I.I.7.I.f.7.I.7.I.I.I.7.7.7.7.g.A.I.9.A.9.s.B.J.;+P.++O O @ ", +" B 8 I ` V V T z.z.X.>.X.L.L.L.L.L.L.L.L.>.>.L.L.>.L.>.2.;.;.>.L.>.2.L.L.>.>.>.L.2.>.2.L.'.L.2.L.3.q.P.M.n.d.}.5.4.:.:.:./.!.)./.'.>.X.;.X.X.>.X.>.X.z..+z.W z.:.[.4.4.4.4.4.4.4.I.4.4.4.4.4.f.I.I.g.7.7.7.6.I.7.6.I.7.I.7.I.g.I.g.g.7.g.7.g.g.9.m.}+J.W.P.++p.O @ ", +" ~ 7 I N N T V z.X.>.X.>.>.L.L.L.L.L.L.>.L.>.>.>.L.>.;.;.2.L.>.>.2.L.>.L.2.2.L.2.L.L.,.>.2.2.>.L.3.h.*+i.a.d.|.x.^.,.%..+W + +U @.` N U N U U .+.+.+X.=.e.W e.3.4.:.4.4.4.4.4.4.f.4.f.f.4.f.I.4.I.I.I.I.f.6.7.7.7.6.7.I.g.7.7.7.I.7.g.7.g.6.9.9.s.G.J.W.H.++ .O @ ", +" n 7 I N V V V e.X.>.>.>.L.>.L.L.L.L.L.>.L.L.>.X.L.>.>.2.>.L.L.L.;.>.>.;.L.>.;.'.;.2.'.2.;.2.;.;.3.v.K.i.d.,..+U 1.I A t e | | m m ' ' ' m m f 6 e A U +W W e.3.:.4.4.4.:.4.I.4.4.I.4.I.I.4.I.I.I.I.7.I.7.7.I.7.g.7.6.I.I.7.7.g.7.g.g.7.g.g.g.9.r.G.J.H.P.S.O ( & ", +" O.6 N V V V T .+z.>.>.>.>.L.X.>.L.2.L.L.>.>.>.>.;.>.;.;.>.;.2.>.>.2.2.L.;.L.2.;.2.2.;.L.2.'.>.2.3.E.t.d.X @.G | m '+, r Y.g _ _ c j ] 1+4 4 0 0 a 4 3 6 @.T .+3.:.4.4.4.4.I.4.4.I.4.f.4.f.I.4.f.I.I.I.I.I.7.7.g.7.7.I.f.g.I.g.7.g.7.6.g.9.A.A.9.r.F.J.`.H.++p.O @ ", +" s 7 A N T +V e.X.>.>.>.X.>.X.>.>.;.>.>.>.>.;.>.;.>.;.;.>.;.2.2.>.>.2.>.,.;.2.;.,.2.'.2.!.2.;.'.!.P.E.,.1.t | 6 m '+'+'+'+2 2 r , r r Y.q q _ j 1+4 d [+J N .+3.4.4.4.4.4.4.4.4.7.4.I.I.7.I.f.f.f.I.I.I.I.I.f.7.7.6.7.I.g.7.9.I.A.A.9.g.A.9.g.9.s.}+J.;+P.++ .( & ", +" s 6 A N N V W z.z.X.>.X.X.X.>.>.X.>.;.L.>.>.>.>.X.>.>.>.L.L.;.;.;.;.>.2.2.>.2.2.2.;.'.2.2.2.2.'.3.P.F.%.1.I t 7 | | | | m m 9 9 2 2 , 9 , 2 2 Y.: ] 0 ..t U .+3.:.4.:.4.4.I.I.4.4.I.4.4.f.I.4.}.7.7.I.7.7.[.4.4.4.:.4.}.4.4.}.6.7.g.g.g.g.9.9.9.s.G.J.Q.*+S. .O & ", +" # 6 N N T V W z.z.z.>.>.>.X.X.X.z.z.z.e.e.V + +V W .+.+.+z.z.>.>.L.X.'.2.2.'.2.;.;.2.2.2.'.'.;.3.P.E.%.].1.I t 7 | | | ^ m _ 3 4 0 4 : 9 , 9 2 q : 4 d G U e.:.4.4.4.4.:.4.I.I.4.4.4.4.}.4.I.4.4.[.(.'.>.z.z.%..+W +.+%.z.z.;.'._.[.}.6.g.g.9.s.F.J.W.;+S. .O & ", +" % 8 G N U V V e.z.X.X.X.z..+ +U U @.].].].1.].].].].].].@.@.` U +e.%.=.;.;.2.,.2.;.'.;.2.2.2.2.3.v.R.X.1.` J N t 7 e 7 | m 9+{ )+)+* c 9 9 9 , Y._ 1+..I U +:.:.4.4.4.4.4.4.I.I.4.4.4.}.}./.;.%. +U ` N e 6 f F F F ' F p Q t G V V %.;.5.9.9.m.G.J.W.*+++ .( H ", +" @ 6 N T V W W %.z.X.X.z.U ].].].].1.1.I N e 7 | 7 e e e A ` @.].@.].1.U e.X.>.;.;.;.2.2.2.,.2.;.'.h.;+^.].1.J N G e e 7 p ^ _ L K K *., 1 1 9 9 , g 3 a ` N z.3.4.4.4.4.4.4.I.4.4.4.4.:.>.e.` @.N | F u ! 3 4 4 a a d a ....d d a 5 ( 6 ` $.[.9.D.G.J.;+R.++ .( H ", +" @ ^ A N T V W .+X.X.X.U ].1.I A e 7 ^ m '+9 r Y.q q g h j ] Y., f G 1.1.@.U U z.;.2.2.2.2.>.2.L.!.0.;+_.J ` J I t A 7 7 | ^ 9 0 * o ) 1 9 9 1 1 , q 0 4 ].` z.:.4.4.4.4.4.4.4.I.4.(.z. +U N 6 '+u _ k ] j ] 3 3 4 4 4 4 < a a a ....Z ; ! N e.f.r.G.W.W.P.++ .O H ", +" - 6 A N T N W e.X.,.U ].].I t t 7 7 | ^ m p '+'+9 9 , r q _ j 4 0 a ] , e 1.1.@. +z.;.2.2.'.'.2.!.5.;+6.@.J J J A t t e 7 | ^ 1 4 q F ^ m 1 1 9 , : 0 u @. +X.4.4.4.4.4.4.4.4._.z.U @.t | , u u : g _ / _ / k _ h 3 ] ] 5 5 4 4 < 4 a ..d ' A 2.m.G.W.Z.H.++ .( H ", +" H m A T V V V .+>.;.@.1.J ].I A t e | '+'+9 '+'+m m m 9 '+1 , q _ j 0 ..d ] 6 1.].1.T X.2.2.'.2.2.}.H.P.W 1.].J A A t e 7 | | f f m m ^ ^ m m m , Y.5 e ` .+L.4.:.:.4.4.4.:.-.` 1.t | m '+1 , , , , 2 ( u : ! / z ] > ] ] ] 5 5 3 a a d Z 5 N z.j.R.Q.W.*+++ . .i ", +" H ^ A G G T T %.[.8 ].N ].].].J I t m w+y+z+A+v+Y.9 '+| '+m '+'+'+r q _ 4 d y.4 , N @.U %.2.'.'.2.(.F.W._.J @.@.J I I A t 7 7 7 7 7 | | ^ ^ f ^ m m e @..+X.3.4.:.4.I.4.I.z.@.I e | ^ m ^ m 1 F F , O . .w.S.S.n.++++N.> 5 ] 5 3 4 < a y.< N .+h.G.W.W.R.++O .i ", +" i ^ G N V V V e.5.$.].N ].].].].].J g z+B+B+B+B+B+A+C+9 m ^ ^ m m m 1 , q _ 3 v Z 4 e ].W 2.'.'.'.!.0.Q.R.=.J J J ].@.J ` A A t t e e 7 l l e A N 1.U +z.L.:.4.4.4.4.g.<.1.A A 7 6 7 | p p ^ 9 O N.a.t.}+G.H.G.H.H.H.R.U.++> 5 5 4 4 a Z c I $.h.H.W.W.*+++ .! + ", +" + ^ G G T T V .+7.=.].I ].].].].1.A g y+z+z+C+w+z+B+B+w+r 9 ^ m m m '+'+9 r : c 4 y.( I ` >.2.'.!.2.(.t.Q.F.(..+` ].].I J J J N ` J ` J J J @.@. +z.L.2.2.:.:.4.[.[.4.l.,.1.N A t 7 7 | f f ^ {.j.F.}+F.R.E.P.R.;+;+`.W.W.G.S.5 4 4 a d ; P J -.l.H.Z.W.H.++ . .+ ", +" + m t N N V W e.:.x.].@.].].].1.].].| r C+C+'+'+q w+z+B+y+C+'+m m p ^ 1 9 9 , g g v 4 1.U ;.2.!.2.!.'.[.v.W.Q.m.9.[.=. +U U @.@.@.@.J ` + +>.3.:.:.:.3.:.:.4.[.4.[.4.E.;.@.U J A t e e 7 6 } O E.}+F.k. .R d.S.N.R -+Z.Q.W.M.> 4 0 a d 5 N ` _.B.J.Q.W.*+++ .! C ", +" C ^ G V V V T $.L.6.U ].].].].].].].1.A t t e e | '+g y+B+z+C+m ^ m m m 9 1 , r q 3 ) 1.U 2.'.!.2.L.!.'.(.g.E.F.J.G.B.s.A.A.4.[.:.4.4.4.A.A.A.I.I.4.4.4.:.:.4.[.}.}.4.v._.@.1.1.I N t t e e ^ {.K.B.B.a.O U.R.F.m. .&+;+W.;+++5 w 4 a a ' ` e.f.t.R.Q.W.H.++ .z * ", +" * '+t G T T V .+X.8.,.].].].1.].].].].].1.A A A 7 | '+h z+B+y+r m ^ ^ m m m , r g F J 1.e.2.!././.!./.3.(._.(.[.8.q.m.B.B.D.D.D.D.C.C.A.A.A.I.4.:.:.4.:.:.[.}.[.4.[.I.9.l.W 1.].].J ` G e 8 6 } w.w.|.{.) -+R.R.E. .|+w @+@+5 5 4 0 d / N U /.a.B.H.W.W.*+++O z x ", +" * F t V V T T e.%.(.n.V ].].].].].].].].].1.A A A e p C+B+B+B+C+^ | | ^ m 1 9 9 6 1.@. +;.!.'.'.'.2.!.3.!.'.(.(./.(.[.4.4.f.f.g.I.I.4.4.:.:.3.4.:.3.4.:.4.[.4.[.4.[.4.I.l.8. +@.].].].@.N t e 6 ^ ^ Q ^ m .w.N.N.( |+|+> > ] 5 5 4 ! e U >.5.j.t.H.W.W.$+++ .z x ", +" x F t A S T T #.%.X.f.}.` ].@.].].].].].].].1.I A A | r w+B+y+r | | f f p ^ | t 1.1..+>.2.2.!.!.(.3.2.!.!.3.!.3.(.(.(.2._.3.3.3.(.3.:.:.3.:.:.:.:.:.:.:.[.4.[.4.4.}.}.}.7.B.i..+].].1.].1.1.t S 8 8 8 6 ^ '+'+F , 2 ) ! / h ] ] 3 ( t @.=.[.b.h.E.G.Q.;+H.++ .z = ", +" x ' S N T V T S $.X.2.j.,.1.].].].].].].].].].1.J I A 7 '+C+g '+| | | f 7 t 1.@.U z.,.).2.2.2.!.2.3.!.!.3.!._.!.(.(.(.3._.3.:.:.:.3.:.3.:.:.:.:.:.:.4.:.:.:.[.}.4.4.}.}.5.I.t.P.>.U 1.].@.@.].N A t e 6 6 ^ ^ m ' ' 9 u Y.|+k / , t 1..+_.9.h.r.u.G.Q.W.*+++ . .= ", +" { , t N V W V V z.X.2.2.h.2.@.].].].].].].].].].J J I I A | 7 e e e t A 1.@.@. +X.>.!.2./.3.3.2.3./.!.3.'.(.3.3.3.(.(.(.(.:.(.3.:.:.:.4.:.:.:.4.:.:.:.[.4.4.4.4.}.<.4.}.}.f.I.q.R.9..+1.1.].@.@.N N A S l 6 8 6 m '+9 , , , , 7 I U z.[.9.q.k.l.B.H.Q.W.H.S. .z = ", +" { , e G V V V V $.z.X.>.!.j.'.@.@.].].].].].].].].].I A I I A I I J ].].@.U z.L.2.'.3.!./.'.3.!.!.(.(.3.(.3.3.!.(.(._.(.(.(.:.(.:.:.:.:.:.:.:.:.:.4.:.4.[.4.4.4.}.}.4.}.}.f.f.}.g.u.u.3. +` ].].1.1.1.I I t e 7 6 8 ^ ^ 6 S I ].U >.}.8.0.h.k.l.u.G.W.W.*+++ .z = ", +" = ) S G T W T e.z.=.X.X.L.3.b.[.U ].].].].].].].].1.].].J 1.].].].1.@.U .+>.L.>.;.!.2.!.!.3.!.!.3.!.(./.(.(.(.(.3.(.!.:.(.:.:.(.:.:.:.:.:.4.4.:.4.:.}.}.}.[.[.}.4.}.}.}.4.}.}.7.}.7.C.G.B.3..+U @.].].1.1.1.I N G G A N @.].@.z.!.f.0.b.h.q.h.k.B.J.Q.`.;+++ .> . ", +" )+u e G S W W e.%.X.X.X.>.X.;.f.c./. +].].].].].].].].].].].1.1.@. +z.L.!.L.!.2.!.!.!.2.'.(.!./.!.'./.(.!.!.(.3.3._.3.(.(.(.(.(.:.:.:.:.:.:.4.:.[.:.4.4.[.4.4.4.4.}.}.}.}.}.}.7.}.6.o.6.q.u.u.9.3.z.V @.@.].1.1.1.@.@.1. +>.(.g.q.9.a.b.h.k.k.l.u.G.Q.W.*+++ .R ", +" . ) e N T #.#.e.e.X.;.>.X.;.;.;.3.7.}.)..+` @.@.].].].1.@. + +X.L.L.L.2.2.!.!.L.!.3.!.!.3.!./.!.(.3.3.(.(.(.(.(.:.(.(._._.:.3.:.[.:.:.:.4.:.[.:.4.[.<.<.4.[.}.}.[.4.f.}.}.5.7.7.5.5.6.5.6.g.q.r.u.u.r.g.:.!.X.z.z.X.2.4.g.C.q.0.a.b.0.b.q.h.k.l.E.J.W.`.;+++z w ", +" . ) 8 N T T #.%.%.X.X.;.X.X.X.X.-.>.!.4.}.:.).;.%.X.>.2.>.!.L.L.L.2.;.'.'.!.2.!.'.!.!.'.!.(.(././.(./.(.(.(.(.(.(._.(.(._.[.(.:._.:.:.[.[.4.[.:.4.:.4.[.4.4.4.4.}.}.f.4.}.}.f.6.f.7.g.I.I.7.6.5.8.b.h.s.B.m.B.B.m.s.r.r.h.0.b.9.a.h.h.h.q.h.q.r.t.J.Q.`.*+S.z w ", +" u e T T W e.e.X.X.;.>.;.>.;.X.>.X.=.;.>.L.!.'.!.'.!.!.L.L.2.L.2.2.2.'.3.2.!.!.!.!.2.3.!.!.2.3.(.(.3./.(.(._.(.(.(.(.(.(.(.:.:.(._._.:.[.[.:.<.[.4.:.}.}.[.4.}.}.}.4.}.4.f.7.7.f.I.I.8.6.7.8.g.g.6.g.8.8.9.0.9.9.9.b.0.j.b.b.b.h.q.q.q.h.h.r.r.B.J.Q.W.$+++ .w ", +" ( e G S T W e.%.>.;.>.;.>.>.>.;.;.>.>.;.>.>.>.>.>.>.2.>.>.;.L.L.'.2.'.!.'.!.!.2.3.!.!.3.(.!.!.!./.(.(.(.(.(._.[.:.:.(.:.(.:.:.[.[._.[.:.:.:.<.<.<.[.}.4.}.}.[.}.}.}.f.}.}.f.I.6.6.7.8.6.6.6.8.g.8.9.9.8.9.0.b.b.9.b.9.b.q.b.b.b.b.h.h.k.k.r.r.B.G.Q.W.*+++ .D ", +" Y.7 V T W $.$.z.X.;.>.>.>.L.;.>.>.>.;.>.>.;.;.X.>.L.>.2.2.>.;.>.L.2.2.3.2.!.2.!.!.!.!.!.(.!.!.3.3.(.!.(.(.!.3._.(._.!.(.(._.:.:._._._._.[.[.[.[.<.4.:.:.}.4.f.[.}.f.}.}.f.f.}.f.f.7.7.7.9.g.9.9.g.8.8.g.0.0.9.9.b.b.0.q.h.q.q.h.h.q.q.q.k.r.r.F.J.W.W.*+++ .D ", +" ! 7 T T V e.$.%.X.;.;.2.;.2.;.2.;.;.;.>.>.>.>.;.;.>.L.L.2.2.2.2.L.2.'.!.!.2.3.2.!.2.!.!.!.!.!.!.3.(./.(.!.(.!.(.(.(.(.(.(._.!.:._.(.:.(._.(.[.[.[.[.<.[.}.[.}.4.}.}.}.}.f.f.}.f.6.6.7.6.o.6.8.0.9.9.8.9.9.0.9.9.9.q.b.b.q.b.q.q.b.h.h.q.q.r.r.F.J.W.W.P.R .< ", +" ! 7 T S #.$.e.=.X.X.2.;.2.;.;.;.>.;.;.2.;.2.-.>.>.>.>.2.2.>.!.!.2.!.2.'.'.2.L.'.;.2.2.2.'.,.,.-.-.z.X.z.%.%.z.z.z.z.%.e.z.e.%.$.z.%.$.$.e.z.z.%.z.X.>.-.;.;.L.'.2.'.!._._._.:._.[.<.<.<.}.6.7.7.7.g.6.c.0.b.0.b.0.0.b.0.b.q.q.h.q.q.k.k.r.r.r.u.J.Q.Z.*+++ .y ", +" > | V T T $.e.=.;.,.2.>.2.>.2.;.;.2.;.L.2.>.;.;.2.;.=.z.X.%.z.z.z..+W V W W +.+V V W W +.+ +W .+z..+.+e.W +U N ` ` ].@.@.@.@.@.@.@.` ` ` U V W #.%.X.-.=.X.X.X.-.X.z.X.X.%.%.z.X.X.X.X.X.X.;.,.'.!.!._.[.<.o.8.9.b.q.h.q.q.h.q.q.k.h.q.q.r.F.H.W.W.*+++ .< ", +" > 7 S T W e.e.z.X.>.>.2.2.2.>.;.2.;.;.;.-.X.%..+ + +U U ` U ` @.U U +W W z.z.z.z.X.z.z.>.z.>.X.>.z.z. +@.].].J @.J A t 7 7 7 | f 6 f f | 8 e t A 1.]. +>.2.!.3.L.3.3.2.2.3.L.L.3.L.X..+.+e.V W .+.+$.W .+e.%.z.;.'.[.5.9.a.a.q.j.k.k.q.r.k.t.F.J.Q.Z.P.++ .y ", +" 5 7 T S T e.$.%.X.;.>.;.2.,.2.;.'.>.=..+W +U ` 1.1.1.].].].].].@.1.].@.@.U .+%.%.X.X.X.>.X.z.X.=.$.1.].J e p '+, u q _ g k ] j 3 3 3 b 0 0 4 0 0 4 c f @.%./.3.3.3._.!.!.3.3.>..+U ` A t | 7 | | 7 7 t t I N V W #.X %.;.:.o.0.b.h.k.q.k.k.t.u.J.Q.Z.*+++ .; ", +" 5 | t T W W z.z.>.>.>.2.;.L.,.X.z..+V V @.@.].].].@.` A t e | ^ m '+9 , 9 6 ` U W %.X.>.X.X.X.z.z.U ].J e ^ '+9 2 , r r r r Y.Y.q q g g g k j ] 4 0 d d ' U 2.3.3./.3.!.!./.z.U @.e F Y.] 3 3 b 0 0 0 a 4 4 > ( ' 6 G V V W $.'.<.0.q.r.j.r.m.F.J.W.Z.P.++ .; ", +" 3+6 G G T W e.%.X.;.>.2.>.X.%. +W U @.@.].@.I t | 6 ^ '+'+, 9 r r Y.g 1+b d 5 f 1.W X.X.>.X.>.X.e.@.1.A e | p ^ 9 9 , 9 9 9 9 , 2 2 2 u r q q q _ 3 3 d 0 G %._.(._.3.3.3.%.@.I 7 9 u g _ _ c ] 3 3 b 4 4 d v ......v > ' l I W .+,.<.h.k.r.r.F.J.W.Z.*+++N.; ", +" < 6 G S T W z.z.X.X.2.L.L.z. +U @.].1.I A | 6 m ^ ^ ^ m '+^ m m 9 1 , 2 : k v d ' ` e.-.-.X.X.X.W ].J A t 7 ^ 1 : 4 b : 9 1 1 9 , 2 2 2 2 2 q q g _ ] [+d 6 V /.:.3.3.3.>.@.1.e ^ F ) : q q q / _ c ] 3 3 3 4 4 < 0 d ..Z d c 6 N V z.[.r.r.m.F.H.Q.`.P.++ .~ ", +" 6+6 G S T W z.z.>.>.2.8.}.$.].1.1.I t e 7 ^ 2 |+Y.^ f f m ^ m m '+'+, 9 r r _ 0 [+6 @.X.-.;.>.;.U ].J I A 7 ^ 0 L * ,+{+3 9 9 9 , 2 ../ u u q u q g c 4 ; ' U /.[.:.(./.V 1.A | '+: n % % Z : 2 : : _ j ] ] ] 3 4 4 4 4 0 d ; d ) ` $.'.h.r.m.F.J.W.W.*+++ .; ", +" 6+| S S S W $.%.>.>.!.R.0.T ].J A A t e | m ~+M ~+'+| ^ _ *.y.2 '+h (+O.] 9 2 g a c I e.;.>.X.).V ].` I t e ^ (+M Z % )++.9 , 0 (+a ~+# +.4 % _+q g c ] B , +/.[.[.(.,.].1.e ^ F d )+E ,+)+0 2 u k 3 (+d b b a H a ] 4 5 D v B > @.%.!.b.r.m.F.J.J.W.*+++N.~ ", +" B 6 T T S $.%.%.>.>.2.;+E.T 1.` I J I A 7 ' y.E {+, f ) (+b y.O.r ~+v ..~+q 1 q 3 d 6 +,.;.;.^.W ].J J I e | 2 _ 4 * ,+4 9 2 O.% ~+& Z E @ # _+k g _ 4 ..m +:.[.:._.z.].` e ^ 1 _ a d i ,+b u : ; i M s o o O./+0 ] 3 4 4 0 d ' 1.%.[.q.r.m.F.;+W.W.*+++N.~ ", +" ~ ^ S S W W e.z.X.>.2.h.W.;.1.J J J J J G 7 , L L 2 f 4 +.'+2 % h % 2 q # ] 1 9 q v Y.@.X.;.L./.&.].@.].N t 7 F ] i ,+Z u 1 r o % & ~+% {+(+o % ] q c 1+a e .+<.}.[._.N J N 7 f ' ) / ; * ,+; r _ # (+- @ {+$ +.& 3 ] c 5 5 [+u G .+'.8.h.r.r.F.J.Q.Q.*+S.z n ", +" ~ ^ S e W W e.z.>.;.;.:.;+b.` ].].].@.J A t 9 L {+, | u (+3 +.% 4 o ..v+b+, m 9 2 4 4 I z.'.2.'.~.].].J I t 7 _ E . ,+E d ^ 1 4 0 3 5 4 3 ] v 3 : : k 0 ] 1.;.}.f.}.x.` ` N 7 p 9 +.E Z s K # u g a L o +.~+% a (+j ] ] 4 > , N .+2.7.h.h.r.t.R.W.W.W.*+++z s ", +" 0+^ S S S W z.X.>.>.2.(.g.;+_.@.1.@.].].J I 1 {+o F | | / +.O.*.9+O.O.Z u m m m , ] a A z././.3.x.` J ].J A 7 d (+(+(+(+] ^ ^ 1 1 F 1 9 , 2 : : : g h a ^ +[.f.d.<.<.@.I G 7 ^ '+a ,+. . * 0 u , : c k c ] ] ] c c c g 2 f ` +2.}.a.h.k.l.m.F.J.Q.Z.*+S.N.s ", +" s ^ T S #.W e.X.>.>.>.;.2.g.R./.U ].1.].].J | +...| t e 7 p ^ p m p ^ p ^ p m m , h v t X._.(.(.[.,.].@.].I A e p ^ ^ ^ ^ | | p p ^ ^ m 1 9 2 2 u _ 3 9 @.>.6.6.o.7.5.1.I N e f m , _ 0 4 : , , , , 2 u Y.Y.: / u , ^ t 1.V =.:.g.h.k.h.k.l.m.F.W.W.W.*+++ .s ", +" # m S S T e.z.X.>.>.L.2.'.'.7.u.f..+@.].].@.1.A A N J I I t t 7 t 7 8 | | f f '+9 ] 5 U ;.[.:._._.<.T ].].].J A e e e | | 8 | | f f ^ ^ 1 F , , u ( 9 N .+<.c.c.c.0.b..+1.J G 7 f ^ ' 9 , m 9 , F 9 , , , F '+^ e N ` +X.(.7.q.j.h.k.r.l.l.t.u.J.Q.Z.P.S.z [ ", +" $ m e T S T e.z.X.>.>.L.L.>.L.:.a.a._..+@.].].].1.1.J J J J J I A t e l 7 7 f m 9 c '+ +^.<.<.[.[.f.x.N ].J J @.I A t e 7 7 7 | f f ^ ^ m ^ 1 P m 8 ` .+:.9.9.0.0.0.v.(.@.J N e 7 f f f ^ ^ f m ^ ^ f 7 6 S A 1.@.U X.:.A.q.k.q.l.k.r.q.r.l.t.F.J.W.Z.*+S.z [ ", +" % '+e S W #.W %.X.>.L.>.;.L.L.L.3.:.7.j.}.-. +@.@.].].].].].J ].@.@.` N N A t S 8 e ` ,.}.5.}.}.<.4.f.|.T ].].@.].@.@.J A A t G t l e e l e t A I @.z.}.b.9.a.h.q.q.q.j.z.` @.@.` U G G t G G V N ` ` ` @.` +X.(.6.9.C.q.h.h.h.h.m.r.m.r.k.m.F.W.Z.W.*+++z $ ", +" & m e S W #.e.%.;.;.2.L.>.L.2.;.2.!.L.(.4.9.A.:.>. +U @.1.1.1.].].].].J 1.1.J 1.@.U >.}.7.6.6.f.d.5.5.o.c.%.U ].].J ].].@.].J ].].J ` I J J 1.@..+!.6.b.k.q.k.q.r.r.r.m.9.>.N 1.1.].J @.J @.J J J ` V z.L.:.A.9.r.q.q.q.h.h.l.l.k.r.r.r.r.k.t.F.J.W.W.*+++z $ ", +" & ' e S #.W W X.X.>.L.>.>.>.2.2.'.L.2.2.;.!._.}.6.6.}.(.,.z. +W U ` ` @.@.U U W X._.f.g.9.8.c.8.6.8.6.8.o.0.5.,.e.V @.@.].].].].].@.].].U +X.3.7.q.h.r.q.r.s.s.s.s.D.D.D.t.I.L.X.z.e.z.z.>.2.3.4.4.9.q.C.r.q.q.0.j.b.h.r.k.h.k.k.r.q.r.r.l.t.F.J.Z.Q.*+R .@ ", +" H F e S #.S W %.X.>.2.2.L.2.2.2.2.L.2.;.;.2.'.!.!.3.(.4.I.f.}.7.7.4.4.}.:.4.f.7.b.b.b.b.h.q.q.q.q.q.C.9.a.0.0.b.0.8.[.3.-.z.%.%.z.;.!.:.g.9.r.r.s.D.s.B.D.D.D.D.D.D.m.B.r.D.D.s.C.C.q.k.k.r.r.k.h.q.q.9.b.b.0.b.9.b.q.b.h.q.h.k.r.l.l.r.r.l.t.F.W.Z.W.*+++z $ ", +" L '+l S W W #.e.X.;.;.2.;.2.2.2.2.2.>.2.2.2.L.2.L.L.!.!.'.'.(.'.)./._.:.<.<.[.}.}.5.f.6.f.g.8.9.6.g.0.0.0.9.9.8.0.c.c.8.g.9.9.9.8.9.b.9.b.q.q.h.q.q.C.C.q.q.q.r.q.9.C.9.9.9.9.8.9.c.8.8.0.8.9.9.0.9.9.b.9.9.b.9.b.q.q.q.k.h.h.h.h.k.r.l.r.l.B.R.W.W.W.*+++z @ ", +" i F 8 l #.W $.%.X.>.>.2.2.2.>.2.'.2.2.'.2.2.>.2.2.2.2.!.!.2.(.!.'.!.!.3.3.'.'.3.(././.(._.:.[.[.[.:.:.:._._.[._.:.<.[._._.<.<.[.[.[.<.<.<.}.}.5.}.5.6.f.6.6.5.6.6.6.7.6.g.6.8.6.6.8.8.8.9.0.c.8.8.9.9.b.b.0.b.9.h.h.q.q.r.q.q.r.k.h.k.k.r.l.B.F.W.W.W.*+++z @ ", +" + '+e S #.#.W %.-.>.>.;.'.2.2.2.>.2.;.L.'.2.L.L.2.L.!.2.2.;.;.2.3.2.2.!.!.!.3.!.!.(.(.(._._./.(.(.3.3._.:._.!.:.!.(._.x.[._._.[._.[.<.<.[.[.}.<.}.f.}.f.}.5.f.f.f.f.7.7.6.7.6.d.o.c.8.6.8.9.g.g.9.9.0.0.9.9.b.h.h.q.h.q.l.r.r.k.h.l.l.r.l.h.B.G.Q.Z.;+-+++N.& ", +" C ' 7 S #.#.W $.-.;.;.;.;.'.2.2.;.2.;.2.2.'.,.>.2.>.L.L.2.2.2.2.2.2.2.'.!.'.!.(.3.(.'.3.'.!.!././.!._./.(./.).^.'.'.).'.'.).'.'.)._.)././._.:./.:.:.:.:.:.[.<.[.4.}.}.}.5.f.f.6.7.7.6.7.6.8.0.c.0.g.9.0.0.9.0.b.b.0.h.q.q.q.k.r.r.q.l.r.r.k.B.G.Q.Z.`.*+R z & ", +" C , 7 S e.W $.%.X.z.2.;.;.;.'.2.2.2.;.2.'.2.L.2.2.'.;.'.2.'.;.;.2.-.-.X.X.X.%.z.%.z..+z..+e.e.W .+W W .+ + +V +N ` U U U U V U J U @.` ` +V V W e.z.e.=.%.%.z.z.z.z.-.X.-.-.;.,.,.).^.^.<._.:.<.}.}.f.6.c.9.9.0.q.q.a.j.h.h.q.q.r.k.k.r.l.B.R.J.Q.W.*+++z & ", +" x , 8 e #.W e.$.X.X.2.;.2.;.2.2.2.L.L.>.;.,.;.-.%.%..+W V V ` ` N U U U V +W .+.+z.e.z.z.z.z.=.=.=.z.e.N N J J @.@.].].@.].J @.].J ].].].@.` ` ` U W z.L.!.!.2.!.!.2.'.2.2.'.L.2.2.>.>.z.z.$.e.%.%.%.X.X.;.,._.<.f.7.q.q.b.l.k.h.h.k.r.m.r.B.G.Q.Z.`.*+S. .H ", +" x , | S $.#.$.e.%.;.>.'.;.2.2.2.;.>.2.X.z.z..+U U U U 1.1.1.@.@.@.@.@.` U V e.z.%.z.X.z.=.-.X.z.z..+V @.@.@.].J A t e | p p m m '+9 9 9 F m f 6 e S N @.W ;.2.!.2.!.3.!.2.2.3.2.2.z. +U ` ` ` @.` ` U ` U V V e.z.%.,./.<.8.a.h.k.r.q.l.r.l.t.G.Q.Z.`.*+R > H ", +" = O 8 t W T $.z.=.,.>.2.2.,.;.;.-.z.%.W ` 1.` 1.@.1.@.@.].1.1.1.I I I I ` @.@. +z.z.X.z.X.-.-.X.-.W ].].J e p 1 , 2 u q g : _ _ c ] ] 3 3 3 b 0 0 0 a u A +3.3./.!.3.(.3.!.'..+U J A 8 ^ , ) ) ) ) ) , ' ^ 6 t N U N T e.X.^.}.c.j.q.r.l.r.t.G.Q.Q.`.*+S.> i ", +" , | l #.T e.$.-.>.,.>.,.;.>.=..+V ` @.].].].@.1.N t 7 p m 1 , , u / _ k ) 7 ` N %.>.>.=.=.X.=.=.U ].].e p ^ m 9 9 9 9 9 2 2 2 r r q q q : _ h j 3 0 ; c N z.(.(._.:.(.3.'.W @.J 7 , _ c 3 3 0 0 0 0 d 6+d v 4 c u ' e A I T #.-.<.b.k.l.m.B.R.Q.Z.Z.-+++z i ", +" ) 6 e W T e.%.-.>.;.2.;.%.e. +J ].1.].@.I t | ^ ^ m '+'+9 9 9 2 2 u g j 0 v / N U -.>.X.X.X.z.e.@.J J t | p p p 1 1 1 1 9 1 9 9 , r r r q q q _ h 3 0 d f W (.(.(.:.:.'..+].I | 9 , g q g g _ h j k 3 4 4 [+0 d 6+d a ] , l N V $.,.8.l.r.B.G.J.Q.Z.-+R z i ", +" ( 6 S #.T #.e.=.;.'._.:.X.` ].@.1.1.A 7 f m 9 9 '+m ^ ^ ^ p m m 1 9 9 r g 3 d ] A V -.>.>.X.>.e.].I J t 7 | ^ 9 _ j j g 1 1 1 1 9 , 2 2 2 r Y.q g h 5 B ) ` ).:.:.(.(.z.@.I l ^ 9 q 3 # _+g q q g _ k c ] 5 4 3 4 0 v ; ; a > 6 N W ).k.m.m.G.W.Z.Z.-+++R + ", +" ! 6 l #.#.$.%.z.>.3.U.a.=.].].J t e 7 7 f , O.d+y.m | | ^ ^ ^ 9 '+9 9 2 , r ] v : @.%.X.>.>.;.W ].I J A e | m h M ,+,+o 2 m 1 , 0 3 0 q ] 0 q q : k 3 ; / ` '.:.:.:.).U ].A 6 m , k ~+K O._ q / k ] j 3 3 3 4 3 4 0 4 b 0 d ..] A e.'.b.m.u.H.Q.Z.`.&+R z + ", +" ! | l W #.W e.%.;.).;+K.e.].I I t t t | m Z ,+,+u+m p ^ m r 9 (+] q 4 0 9 2 q 3 a e W ;.>.>.2.#.].J ].I e e m 0 )+o (+v 9 1 1 u *.*.~+..+.~+q u q g 3 d c U /.[.:.[.,.@.` e | m q O.)+)+~+Z : c % o o L +.H L n % o % 4 4 [+; 5 N z._.j.r.B.G.W.Q.Z.%+S.R C ", +" > | l W l $.%.%.;.2.K.`.;.].J J J I t | 0 * +./+~+'+| '+o+a+(+~+O.~++.*.9 9 2 q v u @.;.,.;./.X ].J @.` t 7 m Z {+o )+{+q m m u % s ,+L Z ~+q q : _ ] ; ) W :.}.[.<.%.].N e p '+c * { ~+,+{ 0 h L _+H % % & +.% i a M 5 4 0 0 &.T >.f.k.r.B.G.W.Z.`.%+R z x ", +" 4+6 l l T e.e.=.;.;.f.W.d.N @.J J J t 9 L /+# ,+L h | 2 ~+j % % b % Z O.1 1 9 u 3 0 N =.2.2.'.~.].J ].I A e | : q k ~+)+3 m m 2 % (+M L _+o : r g k ] d ^ e.[.}.[.<.V J J e ^ 1 ] * E v L K .._ @ ; % _+O.% d _+# i O.3 5 < , N =.:.j.l.l.t.H.Q.Q.`.-+S.R x ", +" D ^ l #.T W %.=.X.;./.j.;+-.@.].].J A 9 % ~+{+,+M j | m +.b+u+*.g Z 0 v ^ ^ 1 2 _ d t z.!./.!.x.` 1.@.J N t } O.~+~+{ /+g m m 2 ~+Z 4 0 0 0 u u q k 4 5 V ).5.6.6.5.U I N 7 ^ m u # )+)+. o : Y.: q / _ _ k _ h 3 3 ] 3 / Q G %.(.9.l.l.m.B.G.W.Z.`.%+R z x ", +" [+6 l T S #.$.=.;.L.).(.m.j.%.1.].].].I 7 p 9 ~+*.f e p ..O.d p p m m p p p m 9 / ..| z./.(./._.%.J ].@.I A p 3 (+% (+j m ^ m 9 d 2 9 , , , 2 2 : ] 4 '+W 4.6.7.7.o.U J I e p ^ 9 q 3 0 3 q 2 9 , 2 2 u : q _ _ : Y.2 f G W ;.[.0.j.j.r.m.B.W.Q.Z.`.-+R R x ", +" 6+^ 8 #.#.$.$.-.,.>.;.'.(.v.j.,.` ].].J J I e p | G A e | p | | e 7 | p | f ^ m q d 6 >.(.(._.(._.@.J ].` N e p ^ ^ m ^ p p p ^ ^ m ^ ^ 1 9 2 u : 3 , V /.g.c.8.g.i.V @.U t 6 p ^ m , , F 1 F , 9 9 2 2 u ) 2 , ' | G +z.3.I.q.q.k.v.r.m.B.H.Q.Q.`.&+R R x ", +" d ^ l #.T T e.%.-.;.L.2.'._.0.j.<.%.@.].].].].J J I J J I A A t e e e 7 | p p m : 3 G '.[.[.:.:.|.).J @.@.J A A e 7 | 7 | | | | p p m m m 1 9 2 q F G '.7.0.9.9.9.j.,.J J G 7 f p ^ m m '+1 '+1 1 F m F ' ^ 7 t I V %.:.A.q.h.h.l.j.h.l.l.u.J.Z.Z.`.-+N.R = ", +" ; ^ l #.#.#.$.=.,.;.;.;.;.'.!.:.g.l.6.;.V J J 1.].].].].@.J J I I A A t t 7 | ^ 2 | e.<.<.}.<.}.[.d.~.J ].].@.I I I t t t 7 7 | | | | p ^ ^ } 6 t +2.7.0.b.b.b.9.k.9..+I J A e 8 8 f | 6 | 7 6 6 7 7 t N N +z.'.4.9.q.h.h.h.q.k.l.l.r.m.E.H.W.Z.`.&+R w = ", +" ~ ^ l l W W %.X -.>.>.;.2.>.L.2.'._.6.b.9.:.z.U @.].].].].].].].@.].J J I I A t t +_.}.5.}.}.}.}.}.5.^.V ].].].].J I I A A t t t t e e e G I U .+(.g.h.q.k.k.k.k.C.D.[.U @.J I ` N N N U A A J @.` U V z.2.4.A.C.q.h.a.i.j.h.h.l.k.r.m.m.B.J.Z.Q.`.-+R w = ", +" n ^ l l S T $.%.-.;.2.;.;.;.2.>.2.!.'.(.4.g.0.f.(.;.z.U U @.@.].@.].].].].].@.U e.:.6.6.c.o.o.5.5.6.}.9.5.>. +J @.@.].].].].@.J @.@.J @.@.U .+2.I.h.q.k.C.C.r.r.r.s.s.F.A.>.W U U U U U V +.+z.>.3.f.g.9.h.h.i.0.0.b.h.j.h.h.h.h.h.h.k.m.E.R.Z.W.`.&+N.w . ", +" 0+m l S T $.$.%.X.;.>.L.L.>.;.2.L.L.L.L.2.!.!.:.}.6.5.8.}.[.(./.X.>.X.X.=.L.(.}.6.c.9.c.0.0.9.0.9.c.0.c.9.8.c.}.).z. +U U ` ` U U +.+X.:.7.b.q.k.k.r.r.s.D.D.D.D.B.D.D.B.s.C.A.7.I.A.g.9.9.C.s.s.j.h.q.q.0.b.b.b.h.b.j.b.h.h.q.l.k.k.j.l.u.J.W.Z.Z.-+z @+= ", +" [ m l S T T $.$.z.;.;.;.2.;.2.2.;.>.;.>.2.L.;.L.;.!.3.3.[.[.[.}.4.}.f.7.6.g.g.9.9.9.9.q.q.q.q.q.q.b.b.h.h.9.k.C.9.9.A.I.4.:.:.4.4.I.C.C.k.s.s.s.s.C.D.D.s.D.D.D.D.s.s.C.s.r.r.r.r.q.h.0.q.a.9.c.0.0.0.a.b.i.a.a.0.j.q.b.b.b.j.h.l.j.k.j.l.E.J.Q.Z.$+&+R D ", +" # m 8 #.S S $.X >.;.>.>.>.2.2.2.L.2.L.2.;.;.2.2.2.).;.;.;.'.L.L.'.2./.)./.:.3.(.:.:.[.[.<.<.}.[.:.}.}.}.7.f.5.5.5.f.}.d.6.7.0.9.d.d.c.o.6.o.7.7.g.g.g.6.7.A.g.7.7.8.6.8.5.5.o.6.6.8.6.c.c.c.8.9.9.0.0.0.a.0.b.b.h.b.b.h.b.h.q.h.l.k.l.l.v.B.;+Z.W.`.&+R D ", +" % } 8 S T T W X =.>.;.2.>.2.2.2.L.;.L.L.>.>.'.;.2.!.'.2.L.L.2.2.!.'.3./.'.(.2.2.(.!.!.(.!._._.:.(.(.(._.(.:.(./._.[._.3.(.>.c.P.:._.[.<.[.<.<.[.}.}.}.f.}.f.7.f.5.f.}.6.6.f.7.6.8.5.8.8.8.c.c.8.8.c.0.a.0.b.0.0.b.h.h.h.h.h.h.q.j.h.h.j.K.B.H.Z.W.;+&+N.< ", +" @ m 8 #.#.#.$.%.=.;.>.;.>.;.2.2.'.2.,.;.2.;.2.L.!.2.2.;.2.2.L.2.;.'.).2.'.2.!./.!.'./.!.3.!._.(.3.!.(.(./._._.(.(.(.3.:.^.=.=.d.(.(._._.:.:.[.<.[.:.<.[.}.<.}.}.f.5.7.7.}.6.6.8.6.6.c.6.c.8.8.9.b.c.9.9.a.0.b.j.a.0.a.a.a.b.q.j.k.l.j.j.l.P.;+Q.T.$+&+R y ", +" - ' 8 S #.W $.%.-.=.>.2.;.;.2.L.2.2.;.;.2.>.2.L.>.2.;.;.2.2.L.2.!.L.2.2.).;.;.,.,.X.X.-.-.-.-.-.%.=.=.X %.%.e.X $.X $.%.e.e.$.%.e.=.%.e.%.%.%.-.-.-.,.>.;.,.'.).'.)./.(._._.:._.<.<.}.5.f.o.5.6.c.c.c.0.a.n.c.b.a.j.a.b.i.j.h.h.h.h.l.h.l.B.;+W.T.`.&+R @+ ", +" H m 8 l S #.e.$.-.;.-.;.;.>.;.;.2.>.2.;.>.;.;.;.>.X.>.X.%.e.z. +W V +W U +U U +U V V U U U V + +V V U U N @.@.@.].].J @.@.].@.].].@.@.@.U N G W $.=.X.z.%.=.%.z.%.%.z.z.z.z.z.z.%.%.X =.;.,.,.).3._.<.}.8.c.0.n.a.a.b.a.b.i.i.j.j.v.v.u.;+Z.Z.$+&+z y ", +" H F 8 S S W e.%.%.;.;.;.;.>.L.>.;.>.>.;.;.z.e.W V ` ` @.@.].` J U ` U V W $.z.e.z.z.z.%.=.X.z.%.$.e.V J ].@.].].].J J ` N I A e e t t G G N ` J J @.U %.'.2.L.3.2.!.!.2.L.2.2.2.X.z.e.e.W V V V V G .+W $.e.%.;._.|.d.n.a.i.a.b.i.j.h.l.v.E.W.Z.W.$+&+R y ", +" i F 8 l W S e.e.%.-.;.;.;.;.;.;.;.=.e.W N 1.@.@.@.1.1.].@.].].].].].1.J ` W e.e.z.z.%.%.z.z.z.z.e.` ].].I t 7 ^ m F , u q q q _ _ _ h ] ] c c c / ( Q J .+2.'.'.!.!.!./.2.2.;.e.U J J I t e 7 e 7 e t G N N U N U V e.;.^.w.o.i.i.i.j.j.j.u.R.Z.Z.$+&+R ; ", +" E 9 8 l #.#.$.z.%.>.>.;.X.-.%.e.W U U @.@.].].].].].1.I A t e 7 | | 6 6 t I @.V %.z.z.X.=.=.z.%. +].].N 7 m 9 , 2 2 r r q Y.r q q q q g h h h 3 0 v d ) J -./._.!./.3.!.3.=. +@.I | 1 : k 3 3 4 4 0 4 3 > / ( ^ 7 t ` V W $.,.x.0.b.i.l.j.u.G.Z.Z.$+&+N.; ", +" C ' 6 l #.W W %.%.X.>.>.-.e..+U @.1.].].].1.I e 7 | ^ m '+9 2 2 q _ h 3 4 ! | 1.V =.X.=.=.=.=.%.@.].].A 7 | p ^ m m 1 1 1 1 1 9 2 9 r r u : q _ g k v a Q V !.!._.(./.3.-.@.].A | , : g _ h ] 3 3 3 0 0 v d d d a 5 : F e G N W =.x.a.j.U.P.;+Z.Q.`.@+R ; ", +" * , 8 l l W e.%.-.;.'.2.X.V U @.].1.1.A e | f m '+m ^ p m m ^ m '+, 2 q _ 0 d , J V z.X.;.X.>.%.].J J t 7 | | p 9 u : u 9 m 1 m 9 9 9 9 2 2 r q q _ j d ! J '.(.(.(.(.;.U ].I | 1 2 / _ : q q q g _ ] ] 3 3 4 0 0 a d d a c ' e A #.^.j.v.E.;+Z.Z.$+&+N.; ", +" x , 7 X #.S #.z.%.>.<.d.).@.].].].I t | m ! k k k q m ^ | | | p p m m 9 r q 3 v m @.%.z.=.=.>.$.].J J A t | p 1 v L ,+L 0 9 1 9 r 2 2 2 2 2 u u q g ] a 4 U ,._._.3._.e.@.J e ^ 2 +.{+M ~+4 : : : g g k k h ] ] 3 4 a 0 a ..y.|+T #.,.a.j.E.J.W.Z.`.@+R ~ ", +" = ) 6 X #.W $.z.-.2.U.K.&.].1.I I A A 7 : * ,+,+,+~+2 p ^ p m m m m 1 9 9 2 Y.4 4 G U =.>.X.>.$.].@.].I t | ^ u {+* *.{ o r 9 u % 3 _ / ] ] / ] q g j a 0 N '.<.[.(._.@.@.N | F a { ,+o )+{+] k k k h 3 3 b 4 4 4 a d a b 0 ; d S S ;.i.j.P.W.W.Z.`.@+N.~ ", +" . ) 8 l #.#.e.%.=.2.v.H.).@.I ].].J I t m 3 0 % ,+y.'+b ^+v _ (+*.v o+d (+O.r g d u N =.;.>.2.=.].].@.N A e | , (+,+/+,+*.2 9 q {++.% Z (+o *.O.u g h a 3 ` ,.<.[.<.,.J J G 6 1 Z . o d ,+,++.(+/+(+O.# M Z o O.% +.C O.5 0 d > G X _.a.K.u.H.Z.Z.;+&+R >+ ", +" . ( 6 #.$.#.e.z.=.,.g.Z.5.` J J @.].J N e p 3 /+o 9 9 O.v <+(+0 o (+(+..~+(+: , 3 4 I %.,.'.'.&.@.].].I A t f u {+,+u+,+o q 1 u ~+..{+*.# u+/+0 q g h d / V _.<.<.<.=.].J G p m c L K . K % 4 i % M ..O.,+d O.* _+(+o a 3 4 3+f W ,.d.j.j.u.W.Z.Z.$+@+z >+ ", +" ! 6 l #.T #.$.X.=.3.P.H.%.@.].].].J J t m u+,+v p m o+v+% 9+*.o O.+.b O.o 3 9 h v e z.'.,.'.p.U ].@.].I t p _ ,+{++./+,+/ 1 9 +.Z (+# ..4 (+g q q ] a f z.[.<.<.5.#.J N e | ^ , ] +.,+* 4 _ % y.% 3 # _+n a E a # % _+] ] f W ,.[.a.U.K.E.;+Z.Z.*+&+> n ", +" ! 6 l $.W $.z.X.-.;.[.R.d.W ].].].].].t 3 /+u+'+| ^ +.0 q 2 b u+0 r 9 h _ 9 1 q ..^ .+'.'.!.x.e.].].].I A 7 , n E M L Z 1 m m m 1 9 9 , 2 2 2 q : 4 c V ).5.5.<.o.V ].N t | ^ 1 _ o E 0 r r u q r q : g _ ..+.] ] 3 / ' l e.;.<.a.b.M.K.u.;+W.Z.$+&+R s ", +" c 6 8 l #.#.$.X.>.;.2.}.H.f. +].].].].N b Z q 7 t e 2 ^ | 7 f Y.1 | ^ p p ^ m 2 d F .+_.(.(._.^.].].].J I t 7 m r r 2 m p | p p p m p 1 1 2 r q c c p %.<.d.5.5.n.W J J t | ^ ^ , : : 2 1 1 9 , , , u u : / : u , f S V z.(.}.a.i.i.M.j.u.W.Z.Z.$+@+z [ ", +" 5 6 l S W $.$.X.;.;.,.2.<.v.9.X.@.].].@.A t I I I I A A t e e | | 7 | | p ^ ^ , v f z._._.(._.<.=.J ].].J I A e 7 | | p | | ^ ^ p ^ p ^ 1 9 2 q q ^ +(.o.8.6.6.i.-.J J N e p ^ ^ m m 1 1 1 9 , 9 9 , , , m ^ 8 t V z./.}.c.a.j.j.j.j.j.u.W.Z.Z.$+&+> [ ", +" 5 6 l S l S $.%.=.>.>.;.'.(.f.h.7.;.U 1.].].].].].].].J J J N A t t 7 7 | | f 2 _ T ).[.<._.<.<.w.%.].].].@.I N t t e e e 7 | | p p ^ ^ 1 p 9 F e W ).d.c.c.c.c.b.}. +J J t 7 | p ^ } ^ ^ ^ ^ m ^ f f | t V U V >._.f.c.a.a.i.i.i.b.j.v.u.J.W.Z.$+@+N.$ ", +" D ^ 8 S #.W e.=.-.;.>.>.;.,.'.:.6.b.o.).e.` J J J J J ].@.].@.J I I t t t e | f t =.<.<.}.<.<.<.[.c.#.@.J ].@.].].I A t t t e 7 7 | | | 7 7 e N .+:.g.8.0.9.0.a.b.j.;.N @.@.N t t e e e e e e t G N ` U V %.(.}.g.a.a.n.i.a.i.j.M.j.j.v.u.W.W.Z.#+@+z $ ", +" a 6 8 l $.X $.X.>.;.L.X.2.;.;.>.;.(.4.9.g.}.'.%.U ].].].].].].].].].].].@.I ` U z.[.f.5.}.f.}.5.5.}.f.'. +J ].].].].J J J J I N I N I ` J J +;.f.0.a.b.0.i.0.b.h.j.b.!. +` ].].J J J N ` ` U V W =.>.:.7.g.a.b.a.a.a.a.a.i.j.a.j.b.j.v.u.;+Z.`.;+@+R $ ", +" ; ^ 8 l #.$.$.=.X.;.L.>.;.>.;.>.>.;.,./.!.}.f.8.6.[./.-..+ +U @.` @.U ` U +z.(.}.5.7.o.5.8.5.6.d.5.5.5.5._.z. +` @.].].1.].].J ].@.` +z.3.5.9.k.q.q.q.q.k.q.k.h.j.r.B.9.:.;.X.z.=.X.>.2.(.[.I.9.q.h.a.a.0.c.a.c.i.n.i.a.a.j.b.j.b.j.v.u.W.Z.Z.$+p+R @ ", +" B 6 8 $.#.$.$.=.X.>.>.>.>.>.>.;.>.;.X.>.;.2.2.2.3._.}.I.7.f.}.4.:.4.:.4.I.A.A.9.9.q.q.q.k.q.q.b.9.b.0.0.0.0.b.8.[._.,.=.z..+e.z.,.:.}.8.q.j.l.k.C.D.B.D.D.D.D.D.D.D.D.D.D.C.s.r.k.q.l.m.l.j.k.q.b.c.c.n.a.c.c.a.c.a.0.a.a.j.i.j.b.j.j.v.P.W.Z.Z.;+@+z @ ", +" >+^ 8 #.#.#.e.z.X.X.X.>.>.X.X.>.>.>.>.;.X.;.>.;.;.'.L.;.>.2.2.!._._._._.<.<.}.}.7.}.7.6.6.8.9.g.8.g.c.6.8.8.c.c.n.8.6.8.8.8.c.8.0.q.0.n.a.b.b.h.q.C.h.h.q.0.b.h.b.0.8.6.c.8.g.6.6.5.c.S.8.o.o.n.c.c.c.c.a.c.n.0.c.i.a.b.b.j.h.j.j.b.j.v.P.W.Z.Z.#+@+R @ ", +" 0+m 8 l #.W $.=.>.>.;.>.>.X.>.;.>.;.>.>.2.X.>.>.;.;.>.2.2.;.;.,.;.;.).'.2.L.!.!.!.'._.(._./._._./._./._._._.^._._._._.<.<._.[.x._.[.[.<.[.[.[.}.<.}.5.<.|.5.}.}.5.}.5.5.d.f.5.5.d.o.d.o.d.c.c.c.c.c.0.n.c.c.0.a.a.a.i.i.i.b.b.b.j.j.j.v.R.;+Z.Z.;+@+R @ ", +" n m 8 l l T e.z.>.>.;.>.>.>.>.>.>.;.;.>.X.>.X.>.L.>.;.;.>.;.;.;.;.'.'.2.2.'.2.'.!.2./.'.!.(.).).).'.'.'.)./././.(._._._.^./._._._._._.[.[.[.<.<.<.}.5.<.<.<.<.<.5.}.}.}.5.5.5.5.d.5.o.d.c.d.c.n.c.n.c.0.a.n.c.a.c.0.i.b.i.j.b.b.M.i.j.v.u.W.Z.Z.#+p+R H ", +" s ' 6 l T #.$.X.X.;.2.;.>.>.2.;.>.X.>.X.>.;.>.;.;.;.;.>.>.;.;.;.2.>.;.2.2.2.2.2.2.'.'.!.'.'.'.'.2.'.;.;.,.;.;.,.,.;.,.).,.).,.).;.'.).).^.^.^.^./.^._.x.<._.<.<.<.[.x.|.}.}.<.|.}.5.d.d.c.d.d.d.c.c.n.c.c.0.0.a.a.a.b.b.b.b.h.j.h.i.l.v.R.Z.Z.Z.*+p+R H ", +" $ m 8 8 T #.$.z.>.>.L.>.;.X.>.>.;.-.X.;.;.-.;.>.>.>.;.>.X.X.X.%.z.%.z.%.%.z.z.e..+.+T T V T V V V V J U J ` ` J J ` J ` ` ` J J J J J ` U + +W .+W W .+e..+.+.+e.z.e.%.=.-.=.-.-.,.,.^._._.x.<.|.}.5.5.d.c.c.0.a.0.i.a.i.a.b.i.j.i.j.K.u.W.Z.Z.$+p+p+i ", +" % ^ 6 l #.W $.=.>.>.>.>.-.;.>.;.-.X.;.-.-.=.z.e.W V U U U U @.@.@.U N U V U V V W T W V W W .+e.e.V N N @.].].@.].].].@.].].].@.@.].@.].J ].J J V e.%.X.>.;.X.;.;.>.;.X.X.=.X.=.%.%.e.e.W W V e.e.e.%.=.,.).<.5.d.n.c.i.a.b.M.b.i.i.j.j.R.`.Z.Z.*+p+z i ", +" - } 8 8 #.V e.=.X.>.X.>.;.;.;.;.;.%.e.W U U 1.1.].1.].].].].].].].@.@.U V V .+e.z.e.%.$.%.$.e.e.V @.@.].].J I A t 7 | p ^ m 1 9 , 9 9 F m f 6 e t ` U z.L.'.2.;.2.L.;.'.;.>.X.e. +J @.` J ` J ` N J N J I U V $.X ,._.d.n.c.n.a.b.i.j.K.H.;+Z.Z.$+@+R + ", +" & m 6 X #.W $.z.=.;.>.>.>.>.X..+.+U N 1.].].@.@.].].].].].1.I I J I J @.@.N G e.%.e.$.%.z.%..+V @.].J A | m 1 9 2 q r g q g g g _ h j 3 b b 0 0 v ] | @.,.'.'.'.2.2.!.L.2..+` ].J t p 1 , ( 2 ( 2 , ' ^ | e A N ` V V $.,.x.c.a.i.b.M.K.u.Z.Z.`.$+p+R + ", +" H m 8 8 #.#.$.z.=.;.;.>.=.e.W U U @.].@.].].].J I e 7 f m F 9 u u / _ / f N J G %.z.%.%.%.$.%.U ].].` e | ^ m m m 9 1 9 9 9 , 9 , 2 q q u : g _ b v 0 e .+!.!././.!.3.,.e.@.@.A ^ : / ] 3 3 b 4 0 0 d v v 0 3 / ' 7 N N ` V =.^.d.i.i.K.R.Z.Z.Z.#+p+R C ", +" L F 6 l #.#.$.=.z.=.;.X.e.@.].].].].].A A e 7 f ^ ^ ^ m '+9 m 9 9 , : 3 d 4 6 @.W %.X.=.z.z.%.@.].@.A t e 7 | ^ m m m m m 1 9 '+1 9 9 2 r 2 q : _ 3 ..> J 2.3././.!.).e.].].G | 1 , u q g _ g h h ] j 3 b 4 0 a d d [+: ^ t N W %.x.i.v.H.W.Z.Z.$+@+R x ", +" i F 6 8 W S W %.>.'._.;.N ].].].1.I t 7 7 | | | ^ p ^ | | f | ^ m m '+2 q 0 0 6 @.%.%.%.%.=.&.J ].J N A e 7 p 1 q 3 ] , 1 m 1 m 1 '+1 9 , 2 q q : k a a N ,.3.(.(.).,.@.].I 7 ^ 1 1 2 k +.0 +.0 : _ _ h 3 ] 3 3 0 0 d ..y.4 , N W -.n.l.R.Z.Z.Z.*+@+R x ", +" + F 6 l l T #.=.;.S.U.^.@.1.1.` G A t e t 7 9 ..2 0 0 ^ | | | m p m p m , q 0 4 t V =.=.=.>.X ].].].I N A 7 p 3 E )+)+# r m m m m m 1 1 9 2 r : q _ 0 d G =.:._.(.). +].J A p ^ m , : *.{ n )+..: / c c 0 +.] h ] 3 b 0 [+; a 6 S %.c.K.R.W.Z.Z.D+@+R x ", +" + , 8 8 l S #.%.-.j.*+_.].J I J N J I A I 7 9 b+*.m+y.m f | f '+v 2 ^ p m 9 q v u ` X.=.=.;.&.J ].].J I A 7 9 (+)+v+% ,+0 1 m 1 1 1 1 9 2 2 2 q q _ 4 v N -.:._.(.^.U ].N t p ^ 1 ] L )+)+{ )+E _ : 3 O.~+(+o d ] c 3 ] 4 d 6+6 e.,.n.v.u.Z.Z.Z.*+w w x ", +" C , 6 l $.#.W %.=.6.Z.w.1.J J ].J J I A t 9 3 +.,+M v 3 m p '+] o 0 r p ^ 1 9 3 0 N e.X.X.-.).].@.].].I A e 9 o /+3 *.)+v+1 1 r 0 9 9 2 4 v r u q h 4 4 G ).[._.[.,.].@.I 7 f m 2 4 (+)+# ,+% 0 q 3 ~+M [+b O.{ _+k k 5 1+0 ! W %.[.i.K.R.W.Z.Z.#+p+w = ", +" C 2 6 X S S W %.-.3.u.P.e.1.1.].1.].J I A 3 L /+,+,+M o 2 | 2 <+* ~+b p p ^ 1 q ..p W >.>.-.^.J ].].].J I e 1 % /+0 *.)+y.'+'+j o y.Z Z # % u u q h 0 _ +_.<.<.|.-.].` I e p ^ u % )+{ )+)+E 4 q c ..% O.0+o 0+0 j h ] 3 / 8 %.'.o.j.K.H.Z.Z.`.D+p+w = ", +" x ) 6 8 #.S #.%.=.>.}.W.}.N 1.].].].].].I ^ : o+o l+v 9 | | ^ 9 b+r m | | p ^ 9 v , +,.2.;._.W @.].].].I e p v ,+{+/+L q p ^ q +.*.*.*.*.v 2 2 q h 4 p =.<.}.}.5.$.J ` N 7 f ^ , 4 /+9+{+# / 2 2 u c 4 d d v j g _ _ : m S $.).5.a.j.P.R.Z.Z.Z.*+p+w = ", +" x ) 6 8 #.T T %.%.>.L.6.R._.U ].].].].].J t , % j *.O.p e t 7 p r ^ | | | | ^ , 0 : +;.'.'./.~.].].].].J t 7 9 ..u+a+3 m p p m m 9 , 2 , 9 9 2 q j ( T (.5.5.4.o.e.].` A e | ^ 1 _ ..] y.k 2 9 9 2 u q q : / : u F f e V >.(.5.n.i.M.P.F.Z.Z.`.*+p+D . ", +" = u 6 X l S W $.=.;.;.'.6.t.[.G ].].].J ].J e F | m 1 e A A t 7 7 7 7 7 7 | p 1 b / W './.'./.<.e.J ].].J J A e f 1 '+^ | | p | ^ ^ p p 1 1 , 2 : u 7 -.}.7.5.6.c.;.J I U e | f ^ F F 9 1 9 1 1 F 9 9 , 2 , , m | e V z./.}.g.n.a.a.j.v.H.W.Z.Z.D+p+@+= ", +" = u 6 8 l S W $.%.X.>.;.,.<.9.9.!.V ].1.].].J J J I I I I I A A t t t e 7 | f m c 6 z./._.(._.:.x. +].].].].I A e e e 7 7 7 | | | ^ ^ ^ p 1 1 , 1 V =.<.c.8.o.8.0.}.U J @.G 7 6 6 p ^ m ^ m F m ^ ^ m ^ f 7 W V V X.:.f.c.a.0.a.i.i.j.t.H.Z.V.Z.D+w < ", +" = Y.^ 8 l #.W $.z.=.X.>.>.'.!.}.b.0.[.W ` ].].].].].J J ].].].J I A A N G e 7 ^ m +'.:.:._._.[.[.<. +].].@.].J J I A A t e e e e | p p p 7 p t W ;.}.g.c.c.9.8.c.M.z.` J ` G t e | | | | 8 7 8 7 e A N ` +e.;.4.9.9.a.i.a.i.i.a.h.l.K.R.Z.Z.`.*+++y = ", +" ! 6 l S S W $.z.=.=.>.X.>.>.;.!.<.o.0.}.'.e.N 1.].].].].].].].].J J J ].J N A N '.[.<.[.[.<.<.[.}.|.$.J ].].].].].` I I A G A G A G G G U J V ;.7.a.8.9.b.9.q.q.h.b.z.` ` N N N V N N A N N N ` V W %.2.}.9.q.b.a.n.i.a.i.i.a.b.b.v.K.H.Z.Z.`.*+R y ", +" |+6 8 l W W e.%.-.>.>.X.=.-.X.;.>.;.!.:.6.9.A.(.>..+U @.J @.].].].].].].J J e.3.[.}.}.6.5.7.5.}.}.5.d._..+U @.].J ].].J @.].J ].` ` @.U .+!.I.9.b.q.h.q.k.k.q.q.r.r.l.:..+U V +U U V +.+X.2.(.I.A.C.q.0.a.c.a.c.0.0.a.a.0.j.i.M.j.E.R.Z.V.`.*+p+y ", +" > ^ 8 l S W $.%.X.>.>.>.X.X.>.;.>.>.X.;.,.,.3.}.6.6.6.}._.!.'.>.X.>.;.2.:.4.8.a.6.9.8.9.6.g.8.8.8.6.7.g.I.|._.;..+ + +` U U U +e.>.:.}.0.j.k.h.k.r.s.r.s.s.B.B.B.D.B.}+D.C.A.A.C.9.q.C.k.k.r.q.q.8.c.n.8.a.a.0.a.0.a.a.b.b.j.b.j.l.E.H.Z.Z.Z.D+p+; ", +" 4+^ 8 S S S $.=.=.X.>.;.>.;.X.>.X.>.>.>.L.>.,.-.2.!.2._._.[.:.}.f.}.5.f.I.g.9.a.c.h.9.q.q.b.b.b.0.h.b.h.9.q.b.b.9.A.I.I.4.I.A.g.q.q.r.s.D.s.m.s.s.s.D.D.k.s.s.r.k.q.C.k.q.b.q.9.0.9.8.0.6.c.o.8.o.c.8.c.c.n.0.a.0.0.0.0.b.i.q.i.j.j.E.H.Z.Z.`.&+p+; ", +" 5 } 8 l S T $.%.;.>.X.;.'.'.>.X.>.>.>.X.L.>.>.>.>.>.>.>.>.2.2.2.'.2.'.'.!.2.!.!.3.(._.(.(.(.:.:._.:.[.<.[.[.[.[.4.}.}.f.4.<.f.<.7.7.5.5.5.5.5.7.f.5.7.7.7.}.}.f.7.f.}.6.7.f.8.g.8.8.o.8.6.8.8.g.c.n.c.c.9.a.c.a.b.h.b.a.b.j.h.i.j.l.E.R.Z.Z.Z.D+R ~ ", +" 5 m 8 l S #.e.%.-.;.;.-.;.>.>.>.>.;.>.>.>.>.>.;.>.;.2.>.2.2.>.2.L.2.2.'.'.2.2.2.2.'.2.2.3.3./.(.3.3.(.!.!.3.(.(.(.(.(._._.:.:.:.:.:.:.<.}.[.}.<.}.}.}.4.}.<.f.f.}.}.6.5.}.d.5.o.6.o.6.6.8.6.o.c.6.8.c.9.c.0.a.0.0.a.i.b.b.a.a.b.b.j.t.R.Z.Z.`.&+++~ ", +" D m 8 X S W e.%.-.X.>.X.>.>.>.>.>.;.;.>.>.>.>.>.>.>.L.2.;.>.>.>.L.L.2.2.2.2.2.2.L.2.!.2.'.!.'.3./.2.!.!./.3.3.!.3.3.(.(.(.(._.:.:.:.:.[.<.[.4.[.4.4.<.[.I.}.}.f.f.}.I.5.6.7.7.o.6.o.c.8.c.8.8.8.c.8.c.0.c.9.0.a.a.b.a.i.b.b.i.i.j.j.E.H.Z.Z.Z.&+R >+ ", +" < ^ 8 l S #.%.X -.-.X.;.;.>.>.;.2.>.;.>.L.2.X.;.L.2.;.>.L.2.L.2.;.L.L.2.2.L.L.2.2.!.L.!.!.'.!.!.!.!.L.!.3.!.'.!.!.(.3.(.:.!.:._.[.[.[.:.:.:.[.4.}.4.}.4.4.f.f.}.f.7.7.7.7.6.6.6.6.6.6.6.8.9.c.8.0.c.9.8.9.0.0.0.0.0.b.b.b.i.b.j.i.l.E.G.Z.Z.`.%+p+>+ ", +" ; m 8 l l #.%.%.-.-.X.X.;.>.>.>.>.>.;.;.>.2.>.;.>.L.>.;.2.;.L.2.>.>.L.2.2.!.!.2.L.!.!.!.!.!.2.2.3.!.!.!.'.'.2.'.2.;.;.;.,.>.'.;.'.!.(.(.[._.[.:.[.4.}.}.}.}.}.5.f.f.f.f.6.6.6.6.6.6.o.6.8.9.8.g.9.c.9.0.0.0.c.0.0.0.0.0.b.j.a.b.j.l.K.R.Z.Z.`.%+R s ", +" ; ' 8 l S W $.%.=.>.;.>.>.>.>.>.2.X.;.>.;.>.2.>.>.2.2.L.>.L.;.L.2.2.2.!.2.2.L.!.!.!.!.2.2.2.3.!.2.>.z..+ + +V U U J @.@.U @.J U J N V V W e.z.-.'._.:.:.4.}.}.}.}.}.f.f.f.7.8.8.8.o.8.8.9.8.g.8.0.0.a.8.0.0.0.0.0.a.b.b.b.0.b.i.b.v.t.R.T.Z.`.&+++s ", +" B ' 6 X l W #.%.-.=.;.X.;.>.;.;.;.>.>.>.>.>.2.;.;.>.>.2.2.L.>.2.L.2.2.!.!.2.2.2.!.!.(.!.!.2.X.e. +` @.].].].J ].].].].].].].].].@.].J J N A G N N V z.=.).:.}.}.7.f.6.f.f.6.8.6.6.6.6.8.9.8.8.8.9.8.0.9.c.0.0.a.0.a.a.a.j.h.b.i.j.l.t.R.Z.Z.`.&+R s ", +" n m 8 8 l S $.e.=.>.;.;.;.;.>.>.>.;.>.>.;.2.X.>.>.2.2.L.;.>.2.2.2.'.2.2.L.!.L.!.2.2.2.;..+U ` ].J ].].@.].].].].@.].].].].].].].].].].].].].].].I t e e T $.;.(.<.f.5.6.6.6.7.6.8.8.6.6.8.9.0.9.8.9.8.0.9.0.0.b.0.a.b.0.a.a.b.j.h.l.E.H.W.Z.$+&+++[ ", +" s '+8 l #.T $.%.-.X.>.;.;.;.;.;.>.2.;.;.;.L.>.;.>.>.>.L.'.2.2.2.L.2.2.'.2.2.L.3.'.e.U @.J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J I e } 8 $.'.:.I.I.7.6.7.8.8.6.8.8.8.a.0.8.9.c.0.9.0.0.a.0.a.b.0.b.i.b.i.j.v.t.R.Q.Z.`.@+p+$ ", +" # F 8 l l T e.%.=.,.>.>.>.;.;.>.X.>.>.>.>.;.;.>.2.L.L.>.L.2.2.L.2.!.!.!.!.3.>.z.U @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J G f Q %.,.:.f.7.c.6.8.8.9.8.c.c.8.9.c.9.0.0.0.0.b.0.a.a.9.a.b.i.i.j.l.E.H.Z.Z.`.%+R $ ", +" % '+8 l l T $.%.=.;.>.X.>.>.2.>.>.>.;.>.>.>.>.;.;.;.2.L.2.2.2.!.!.L.L.L.L.z.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.].@.G P f e./.4.7.6.8.g.9.g.9.9.8.9.c.9.0.0.0.a.a.0.0.a.a.i.b.a.a.i.v.t.H.Z.Z.$+@+R @ ", +" @ ' 6 l l S e.=.=.X.>.;.;.;.;.>.>.>.>.>.>.>.;.L.L.L.>.2.2.L.!.L.!.2.,.=.U @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.J J ].N ^ Q z._.}.7.6.c.c.c.c.0.0.0.c.0.8.0.0.a.a.0.a.0.a.n.a.a.i.j.E.R.Z.Z.$+%+R @ ", +" k+, 8 8 l S W %.=.>.>.X.;.;.;.>.;.>.>.>.>.;.,.;.2.2.2.L.L.L.2.L.L.L.V ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.].@.@.e ^ X ,.4.f.8.8.8.8.9.9.0.0.0.9.0.a.a.a.c.a.0.a.a.a.a.i.j.E.R.Z.Z.$+@+R & ", +" i , ^ 8 l S X e.=.>.X.-.;.;.;.;.;.;.>.;.>.>.2.2.>.>.L.L.2.L.L.2.;. +].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].].A f X -.<.f.8.8.8.a.a.0.0.a.a.a.0.0.n.a.a.n.a.a.a.i.b.v.E.R.Z.Z.$+@+p+i ", +" * ) 6 8 l T $.$.=.>.>.;.;.>.;.;.>.>.;.,.>.>.>.2.L.L.2.L.2.2.2.=.J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.].e | e._.7.8.c.9.9.0.0.a.0.a.a.0.a.n.0.a.a.i.a.i.i.j.E.R.Z.Z.$+@+w + ", +" { ( ^ 8 l T T %.%.;.;.;.;.;.>.>.;.L.2.2.>.>.;.;.>.2.2.2.!.!.=.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].N l .+^.6.o.c.c.c.0.0.a.a.0.a.a.0.c.n.a.n.a.a.i.K.u.G.`.Z.#+p+w x ", +" = |+^ 8 l S #.X -.-.>.>.2.2.;.L.;.2.>.;.>.;.2.'.>.2.2.3.!.%.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J S %.[.7.8.a.n.0.0.0.i.i.a.i.a.0.c.a.i.i.i.i.U.P.H.Z.`.D+p+w x ", +" 5 ^ 8 l S #.X =.>.;.;.;.>.>.;.;.;.;.>.;.>.;.;.2.L.!.(.-.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].I Q .[.g.9.0.a.0.b.h.0.b.a.a.i.0.0.0.i.i.j.v.E.R.Z.Z.*+w %+. ", +" d } 8 7 S W $.=.-.;.>.;.;.'.>.>.2.;.>.>.>.2.2.2.L.!.&.J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].@.A ( %.x.8.0.n.a.0.b.i.b.b.b.b.a.a.a.i.i.M.v.u.;+`.`.%+w ; ", +" B ' 6 l l S #.=.-.,.;.;.;.;.;.>.,.>.;.>.,.2.2.2.(.^.U J @.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.].S ! %.<.6.0.0.a.i.b.i.i.i.i.a.i.a.i.i.j.U.P.;+Z.`.%+p+>+ ", +" # ' 6 8 e T X $.=.;.>.;.2.'.2.2.2.>.;.L.2.'.2.3./.N ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].8 .,.}.0.0.0.0.a.a.a.a.a.a.i.b.a.i.j.v.E.;+Z.`.&+R [ ", +" & ' 6 8 #.S $.X ;.;.,.;.;.2.;.>.'.'.2.;.2.;.!.[.&.@.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.( 6 ^.6.n.a.a.a.a.a.i.i.a.a.i.i.j.j.K.P.;+`.$+%+w @ ", +" C , 6 8 8 S $.X -.X.;.;.;.>.;.>.;.2.'.2.'.2.3.p.` ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].t ! X }.n.0.a.a.i.n.a.i.a.a.i.i.j.j.E.R.;+`.$+@+D + ", +" = |+^ 6 l t S X -.-.-.,.;.;.>.;.;.;.2.2.'.3.x.$.J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.' {.,.6.n.a.a.a.a.a.i.i.i.a.i.j.v.E.P.;+`.#+&+< = ", +" < m 8 X e T X =.=.-.;.;.2.;.;.;.;.;.2.2.:.p.` ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.].].A |+&.}.9.n.a.a.a.a.i.n.M.a.a.M.j.P.P.;+$+D+@+; ", +" a+' 6 8 l l X X z.=.;.>.;.;.;.;.,.2.2.!.[.~.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.) Y _.8.c.i.a.a.j.i.i.b.M.i.j.K.K.R.;+$+%+@+$ ", +" H 9 6 8 e t #.X =.-.&.-.,.;.;.L.;.2.'./.|.T ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.U 7 ( ,.o.n.i.a.a.a.i.n.j.M.M.j.K.P.P.$+#+%+w x ", +" = > } 6 e S e $.$.-.-.-.-.;.;.;.2.2.2.(.w.` 1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].` @.A ( &.<.c.a.i.a.a.a.M.i.M.j.U.U.P.*+*+%+@+~ ", +" # ' 6 8 #.#.#.X %.=.=.-.-.;.;.,.'.'.:.|.@.1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.J J J J J ) Q <.c.n.n.a.a.a.i.i.M.M.U.M.U.-+@+@+w i ", +" = 4+' l t l e l l X X -.,.-.,.;.-.'.x.p.J ].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].J J J J J J J I I ` I F Q _.o.0.a.c.a.a.n.n.n.M.M.U.++p+++R n ", +" & ) 6 e e e S l l X X Q =.=.,.&.;.x.~.I 1.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].].1.1.].1.1.1.].].1.1.1.J J J I I J J J J J J I J N A N A ^ 8 ).5.5.d.w.5.d.n.n.S.S.++p+S.p+> y = ", +" # ) ^ 7 t t t t S #.$.X X %.%.%.p.Q I I 1.1.1.1.1.@.1.1.1.].].@.].].].].].].].].1.1.1.1.1.1.1.1.].1.1.1.1.1.J 1.1.I I I J J I I I J J I J J I I I I I I I I I I A A A A A A G A t t t S A 7 6 =./._.^.x.x.x.x.|.|.w. .N. .z D = ", +" s ) ' 6 7 l t t l S l l S l $.~.Q N G A A I I I I I I I I I I I I I I N I I J I I I I I I I A I I N I N N N A I I I A A A A A I A A A A N A A A A A A A t t A t t t t t e t t t e 7 e 7 8 6 X &.^.&.^.~.).^.{.p.p.O O z ; x ", +" - ! ' ^ 7 7 e l e t 7 l S l &.&.l e t e e e e e e e 7 e 7 7 e e e e 7 7 7 7 e e e 7 7 7 7 7 7 7 7 7 7 7 7 7 | 7 | 7 6 7 7 | | | | 6 6 f f f f Q f f ^ f f } ^ } } } } } P } P } } Y P } 8 } } ' } } } P ' {.' ) .3+$ ", +" { n > , ' ^ ^ ^ 6 6 6 6 ^ Q .Y m } } } } ' } ' } ' ' ' P P P ' ' P P P ' ' ' P ' ' ' ' Y Y ) Y , {.O {.O ) O O Y O O O p.O p.p. . .p. . . . . . .N. . . . . .z N. . .N.N.N.N.N.N.N. ., , , ' ) ) ) ) ) ! R B @ = ", +" { @ B D > c c c |+|+! |+> ! > ! ! c |+! c ! c ! c c c c c c > > c ] 5 > 5 ] 5 5 5 5 5 5 5 5 5 4+5 5 5 5 5 5 3+5 4 4 < 4 < 4 < < 0 a a a a a a a a d d ; ; ; ; ; ; ..; ; ; ; B ~ ~ ~ ~ ~ ~ n n 0+[ c+i { ", +" . = = = = { x = = { { { x x x x x x x x x x x x x = { = x x = x = x = = = { = x = = = = = { = x = x = = = = = . = . . . "}; diff --git a/xgnokii/xpm/BCard.xpm b/xgnokii/xpm/BCard.xpm new file mode 100644 index 0000000..f761ea9 --- /dev/null +++ b/xgnokii/xpm/BCard.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * BCard_xpm[] = { +"16 16 7 1", +" s None c None", +". c steelblue1", +"X c black", +"o c white", +"O c gray60", +"+ c gray45", +"@ c gray85", +" ", +" ............ ", +" .X.X.X..X.X. ", +" ............ ", +" .oooooooooo. ", +" .oO+OoOOooo. ", +" .ooo+Ooo++O. ", +" .o++Ooooooo. ", +" .oooOoO@@oo. ", +" .oO++@@OOOo. ", +" .oooooooooo. ", +" ............ ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Black_point.xpm b/xgnokii/xpm/Black_point.xpm new file mode 100644 index 0000000..a573b79 --- /dev/null +++ b/xgnokii/xpm/Black_point.xpm @@ -0,0 +1,13 @@ +/* XPM */ +static char * Black_point_xpm[] = { +"7 7 3 1", +" c None", +". c #397939", +"+ c #000000", +".......", +".+++++.", +".+++++.", +".+++++.", +".+++++.", +".+++++.", +"......."}; diff --git a/xgnokii/xpm/Caller.xpm b/xgnokii/xpm/Caller.xpm new file mode 100644 index 0000000..8a5dd95 --- /dev/null +++ b/xgnokii/xpm/Caller.xpm @@ -0,0 +1,50 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for CallerLogo. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Caller_xpm[] = { + +"20 19 7 1", + +"* c #000000", +"# c #800000", +"b c #008000", +"c c #00ff00", +"i c #808080", +" c None", +"l c #ffffff", + +" ", +" ", +" ********* ", +" *********** ", +" ** ** ", +" ** ", +" ** ", +" ** ", +" ** ", +" ** ", +" ** ", +" ** ", +" ** ", +" ** ** ", +" *********** ", +" ********* ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Caller_logo.xpm b/xgnokii/xpm/Caller_logo.xpm new file mode 100644 index 0000000..2546503 --- /dev/null +++ b/xgnokii/xpm/Caller_logo.xpm @@ -0,0 +1,31 @@ +/* XPM */ +static char * Caller_logo_xpm[] = { +"20 19 9 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #FFFFFF", +"# c #00FF00", +"$ c #008000", +"% c #0B256B", +"& c #D4D0C8", +"* c #86000A", +" ", +" ", +" . ", +" . ", +" .... .....+ ", +" .++++. ...... ", +" .............@+ ", +" .#$$.....+.++%+ ", +" . $$....+@+@@@+ ", +" .......+@%+@@@+ ", +" ......@@@@++@+ ", +" ......@@@@+&.+ ", +" ......+...+@++ ", +" ......@@+.***** ", +" ......%++%**++ ", +" ......%%%%+ ", +" .... ", +" ", +" "}; diff --git a/xgnokii/xpm/Check.xpm b/xgnokii/xpm/Check.xpm new file mode 100644 index 0000000..511bbee --- /dev/null +++ b/xgnokii/xpm/Check.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * Check_xpm[] = { +"16 17 5 1", +" c None", +". c black", +"X c gray50", +"o c gray85", +"# c white", +" . . ", +" ... ", +" X.....X ", +" XX.....XX ", +" ..#...X.. ", +" X.#.XXX...X ", +" ...#..o...... ", +" .....o..... ", +" .....o..... ", +" .X....o....X. ", +" ....o.... ", +" .X...o...X. ", +" X..o..X ", +" XoX ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Delete.xpm b/xgnokii/xpm/Delete.xpm new file mode 100644 index 0000000..b8824ac --- /dev/null +++ b/xgnokii/xpm/Delete.xpm @@ -0,0 +1,36 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char * Delete_xpm[] = { +"16 17 4 1", +" c None", +". c red", +"X c gray50", +"o c black", +" ", +" . ", +" ..X ... ", +" ..X ..... ", +" .......oo ", +" .....o ", +" ....o ", +" ...... ", +" ..o ... ", +" ..o ... ", +" .o ..X ", +" .o .o ", +" o o ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Dial.xpm b/xgnokii/xpm/Dial.xpm new file mode 100644 index 0000000..c076d65 --- /dev/null +++ b/xgnokii/xpm/Dial.xpm @@ -0,0 +1,34 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +/* XPM */ +static char * Dial_xpm[] = { +"14 16 2 1", +" c None", +". c #0000FFFF0000", +" .... ", +" ....... ", +" ......... ", +"........... ", +"..... ...... ", +" ... ..... ", +" . .....", +" ....", +" .....", +" ......", +" .... ", +" .. ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Display.xpm b/xgnokii/xpm/Display.xpm new file mode 100644 index 0000000..4a80808 --- /dev/null +++ b/xgnokii/xpm/Display.xpm @@ -0,0 +1,115 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +/* XPM */ +static char * Display_xpm[] = { +"109 96 3 1", +" c #000000000000", +". c #FFFFFFFFFFFF", +"X c #0000DF7D0000", +" ", +" ", +" ", +" ", +" ... . .. ... .... ... ... ... ... ", +" . .. .. . .. .. . . . . ", +" . . .. . . . . . . . ", +" . . . . . . . . . . ", +" . ... . . . . . ... . . ", +" . . . . . . . . .. . . ", +" . . . . . . . . .. . . ", +" . .. . .. .. .. . .. . . ", +" .... ... . .... ... ...... ... ", +" ", +" ", +" ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Duplicate.xpm b/xgnokii/xpm/Duplicate.xpm new file mode 100644 index 0000000..87b60d9 --- /dev/null +++ b/xgnokii/xpm/Duplicate.xpm @@ -0,0 +1,36 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ +static char * Duplicate_xpm[] = { +"16 18 4 1", +" c None", +". c black", +"X c gray50", +"o c white", +" ....... ", +" .XXXXXX. ", +" .......XXX. ", +" .ooooo..XXX. ", +" .ooooo.o.XX. ", +" .ooooo....X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo.X. ", +" .oooooooo... ", +" .oooooooo. ", +" .......... ", +" ", +" "}; diff --git a/xgnokii/xpm/Edit.xpm b/xgnokii/xpm/Edit.xpm new file mode 100644 index 0000000..4b1ebc8 --- /dev/null +++ b/xgnokii/xpm/Edit.xpm @@ -0,0 +1,37 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char * Edit_xpm[] = { +"16 17 5 1", +" c #84207BDE7BDE", +". c None", +"X c #FFFFFFFFFFFF", +"o c #000000000000", +"O c #52945294FFFF", +" .......", +" XXXXXXX o......", +" X X Xo....O", +" XXXXXXX ooo..OO", +" X XXXXo.OOo", +" XXXXXXXXXXoOOo.", +" X XOOo..", +" XXXXXXXXXOOo...", +" X oOo....", +" XXXXXXXoooo....", +" X oooXo....", +" XXXXXoXXXXo....", +" XXXXXXXXXXo....", +"oooooooooooo....", +"................", +"................", +"................"}; diff --git a/xgnokii/xpm/Edit_flip_horizontal.xpm b/xgnokii/xpm/Edit_flip_horizontal.xpm new file mode 100644 index 0000000..11dcff2 --- /dev/null +++ b/xgnokii/xpm/Edit_flip_horizontal.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * Edit_flip_horizontal_xpm[] = { +"20 19 4 1", +" c None", +". c #000000", +"+ c #35773A", +"@ c #5ACA62", +" ", +" ", +" ", +" . . ", +" .. .. ", +" .+. . . ", +" .+. . . ", +" .@+. . . ", +" .@+. . . ", +" .@@+. . . ", +" .@@+. . . ", +" .@@@+. . . ", +" .@@@+. . . ", +" .@@@@+. . . ", +" ....... ....... ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Edit_flip_vertical.xpm b/xgnokii/xpm/Edit_flip_vertical.xpm new file mode 100644 index 0000000..ad0a951 --- /dev/null +++ b/xgnokii/xpm/Edit_flip_vertical.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * Edit_flip_vertical_xpm[] = { +"20 19 4 1", +" c None", +". c #000000", +"+ c #5ACA62", +"@ c #35773A", +" ", +" ", +" .. ", +" .+.. ", +" .+++.. ", +" .+++++.. ", +" .+++++++.. ", +" .@@@@@@@@@. ", +" ............ ", +" ", +" ............ ", +" . . ", +" . .. ", +" . .. ", +" . .. ", +" . .. ", +" .. ", +" ", +" "}; diff --git a/xgnokii/xpm/Edit_invert.xpm b/xgnokii/xpm/Edit_invert.xpm new file mode 100644 index 0000000..ae63410 --- /dev/null +++ b/xgnokii/xpm/Edit_invert.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * Edit_invert_xpm[] = { +"20 19 4 1", +" c None", +". c #000000", +"+ c #5ACA62", +"@ c #35773A", +" ", +" ", +" ........... .. ", +" .+++++++++. . ", +" .+++++++++. . ", +" .+++@@@+++. . . . ", +" .+++@@@+++. ... ", +" .+++++++++. . ", +" .+++++++++. ", +" ................ ", +" .@@@@@@@@@. ", +" . .@@@@@@@@@. ", +" ... .@@@+++@@@. ", +" . . . .@@@+++@@@. ", +" . .@@@@@@@@@. ", +" . .@@@@@@@@@. ", +" .. ........... ", +" ", +" "}; diff --git a/xgnokii/xpm/Flip.xpm b/xgnokii/xpm/Flip.xpm new file mode 100644 index 0000000..a37801f --- /dev/null +++ b/xgnokii/xpm/Flip.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * Flip_xpm[] = { +"20 18 3 1", +" c None", +". c #000000", +"+ c #FFFFFF", +" ", +" ", +" ", +" ", +" ", +" ", +" . . ", +" .. .. ", +" .............. ", +" ...++++++++++... ", +" .............. ", +" .. .. ", +" . . ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Forward.xpm b/xgnokii/xpm/Forward.xpm new file mode 100644 index 0000000..57786ec --- /dev/null +++ b/xgnokii/xpm/Forward.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char *Forward_xpm[]={ +"16 16 5 1", +"c c #ffa858", +"a c #c3c3c3", +"b c #000000", +". c None", +"# c #ff0000", +".####a..........", +".#.aaa..........", +".###..a......a..", +".#aa..a.b...aa..", +".#a....abb.aa...", +".#a....ab#ba....", +".a......b##b....", +"bbbbbbbbb###b...", +"#############b..", +"bbbbbbbbb###bc..", +".cccccccb##bc...", +"........b#bc....", +"........bbc.....", +"........bc......", +"........c.......", +"................"}; diff --git a/xgnokii/xpm/Green_pixel.xpm b/xgnokii/xpm/Green_pixel.xpm new file mode 100644 index 0000000..693ed9c --- /dev/null +++ b/xgnokii/xpm/Green_pixel.xpm @@ -0,0 +1,6 @@ +/* XPM */ +static char * Green_pixel_xpm[] = { +"1 1 2 1", +" c None", +". c #5ACA62", +"."}; diff --git a/xgnokii/xpm/Green_point.xpm b/xgnokii/xpm/Green_point.xpm new file mode 100644 index 0000000..0f479a7 --- /dev/null +++ b/xgnokii/xpm/Green_point.xpm @@ -0,0 +1,13 @@ +/* XPM */ +static char * Green_point_xpm[] = { +"7 7 3 1", +" c None", +". c #397939", +"+ c #5ACA62", +".......", +".+++++.", +".+++++.", +".+++++.", +".+++++.", +".+++++.", +"......."}; diff --git a/xgnokii/xpm/Invert.xpm b/xgnokii/xpm/Invert.xpm new file mode 100644 index 0000000..cd9fbb2 --- /dev/null +++ b/xgnokii/xpm/Invert.xpm @@ -0,0 +1,46 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the logo of the GUI utility. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Invert_xpm[] = { + +"20 18 4 1", + +"* c #000000", +" c None", +"b c #dfdfdf", +". c #ffffff", + +" ", +" ******** ", +" *......** ", +" *......*.* ", +" *......**** ", +" *.........* ", +" *.........* ", +" *********** ", +" *********** ", +" *********** ", +" *********** ", +" *********** ", +" *********** ", +" *********** ", +" ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Names.xpm b/xgnokii/xpm/Names.xpm new file mode 100644 index 0000000..a3533a6 --- /dev/null +++ b/xgnokii/xpm/Names.xpm @@ -0,0 +1,21 @@ +/* XPM */ +static char * Names_xpm[] = { +"16 14 4 1", +" c None", +". c black", +"X c gray50", +"o c white", +" .. ", +" .Xo. ... ", +" .Xoo. ..oo. ", +" .Xooo.Xooo... ", +" .Xooo.oooo.X. ", +" .Xooo.Xooo.X. ", +" .Xooo.oooo.X. ", +" .Xooo.Xooo.X. ", +" .Xooo.oooo.X. ", +" .Xoo.Xoo..X. ", +" .Xo.o..ooX. ", +" .X..XXXXX. ", +" ..X....... ", +" .. "}; diff --git a/xgnokii/xpm/New.xpm b/xgnokii/xpm/New.xpm new file mode 100644 index 0000000..0aa41d1 --- /dev/null +++ b/xgnokii/xpm/New.xpm @@ -0,0 +1,45 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for New. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *New_xpm[] = { + +"20 18 3 1", + +"* c #000000", +" c None", +". c #ffffff", + +" ", +" ******** ", +" *......** ", +" *......*.* ", +" *......**** ", +" *.........* ", +" *.........* ", +" *.........* ", +" *.........* ", +" *.........* ", +" *.........* ", +" *.........* ", +" *.........* ", +" *********** ", +" ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/NewBD.xpm b/xgnokii/xpm/NewBD.xpm new file mode 100644 index 0000000..6b94a0a --- /dev/null +++ b/xgnokii/xpm/NewBD.xpm @@ -0,0 +1,47 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Open. + + Last modification: Wed Jun 14 18:04:00 CEST 2000 + Modified by Marcel Köppen + +*/ + +static char*NewBD_xpm[]={ +"20 18 9 1", +"d c #ffa858", +"e c #c05800", +"# c #000000", +"g c #ff8000", +"b c #ffff00", +"f c #ffdca8", +"c c #0000ff", +". c None", +"a c #ffffff", +"....................", +"...##########.......", +"...#aaaaaaaa##......", +"...#aaaaaaaa#a#.....", +"...#aaaaaaaa####....", +"...#aaaaabaaaaa#....", +"...#aaabacabaaa#....", +"...#aaacacacaaa#....", +"...#aaacccacaaa#....", +"...#aadcdcdceaa#....", +"...#adfcfcfcfea#....", +"...#aeeeeeeeeea#....", +"...#adggdddggea#....", +"...#adggdddggea#....", +"...#aaeeeeeeeaa#....", +"...#aaaaaaaaaaa#....", +"...#############....", +"...................."}; diff --git a/xgnokii/xpm/NewCall.xpm b/xgnokii/xpm/NewCall.xpm new file mode 100644 index 0000000..3f1fef0 --- /dev/null +++ b/xgnokii/xpm/NewCall.xpm @@ -0,0 +1,41 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Open. + + Last modification: Wed Jun 14 18:04:00 CEST 2000 + Modified by Marcel Köppen + +*/ + +static char*NewCall_xpm[]={ +"20 18 3 1", +"# c #000000", +". c None", +"a c #ffffff", +"....................", +"...##########.......", +"...#aaaaaaaa##......", +"...#aaaaaaaa#a#.....", +"...#aaaaaaaa####....", +"...#aa###aaaaaa#....", +"...#a######aaaa#....", +"...#a#######aaa#....", +"...#aa##a####aa#....", +"...#aaaaaa###aa#....", +"...#aaaaaaa###a#....", +"...#aaaaaa####a#....", +"...#aaaaaa####a#....", +"...#aaaaaaa##aa#....", +"...#aaaaaaaaaaa#....", +"...#aaaaaaaaaaa#....", +"...#############....", +"...................."}; diff --git a/xgnokii/xpm/NewMeet.xpm b/xgnokii/xpm/NewMeet.xpm new file mode 100644 index 0000000..826b18e --- /dev/null +++ b/xgnokii/xpm/NewMeet.xpm @@ -0,0 +1,41 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Open. + + Last modification: Wed Jun 14 18:04:00 CEST 2000 + Modified by Marcel Köppen + +*/ + +static char*NewMeet_xpm[]={ +"20 18 3 1", +"# c #000000", +". c None", +"a c #ffffff", +"....................", +"...##########.......", +"...#aaaaaaaa##......", +"...#aaaaaaaa#a#.....", +"...#aaaaaaaa####....", +"...#aaaaaaaaaaa#....", +"...#aaaaaaaaaaa#....", +"...#aaaaaaaaaaa#....", +"...#aa#aaaaa#aa#....", +"...#aaa#aaa#aaa#....", +"...#a####a####a#....", +"...#aaa#aaa#aaa#....", +"...#aa#aaaaa#aa#....", +"...#aaaaaaaaaaa#....", +"...#aaaaaaaaaaa#....", +"...#aaaaaaaaaaa#....", +"...#############....", +"...................."}; diff --git a/xgnokii/xpm/NewRem.xpm b/xgnokii/xpm/NewRem.xpm new file mode 100644 index 0000000..1363893 --- /dev/null +++ b/xgnokii/xpm/NewRem.xpm @@ -0,0 +1,43 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Open. + + Last modification: Wed Jun 14 18:04:00 CEST 2000 + Modified by Marcel Köppen + +*/ + +static char*NewRem_xpm[]={ +"20 18 5 1", +"c c #c3c3c3", +"# c #000000", +"b c #ffff00", +". c None", +"a c #ffffff", +"....................", +"...##########.......", +"...#aaaaaaaa##......", +"...#aaaaaaaa#a#.....", +"...#aaaaaaaa####....", +"...#aaaaaaaaaaa#....", +"...#aaaa###aaaa#....", +"...#aaa#bbb#aaa#....", +"...#aa#bbbbb#aa#....", +"...#aa#bbbbb#aa#....", +"...#aa#bbbbb#aa#....", +"...#aaa#bbb#aaa#....", +"...#aaa#ccc#aaa#....", +"...#aaaa#c#aaaa#....", +"...#aaaa###aaaa#....", +"...#aaaaaaaaaaa#....", +"...#############....", +"...................."}; diff --git a/xgnokii/xpm/Op.xpm b/xgnokii/xpm/Op.xpm new file mode 100644 index 0000000..31c9fd6 --- /dev/null +++ b/xgnokii/xpm/Op.xpm @@ -0,0 +1,50 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Operator Logo. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Op_xpm[] = { + +"20 19 7 1", + +"* c #000000", +"# c #800000", +"b c #008000", +"c c #00ff00", +"i c #808080", +" c None", +"l c #ffffff", + +" ", +" ", +" ********** ", +" ************ ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ** ** ", +" ************ ", +" ********** ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Open.xpm b/xgnokii/xpm/Open.xpm new file mode 100644 index 0000000..e3d9cd2 --- /dev/null +++ b/xgnokii/xpm/Open.xpm @@ -0,0 +1,47 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Open. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Open_xpm[] = { + +"20 18 5 1", + +"* c #000000", +". c #808000", +"a c #ffff00", +" c None", +"e c #ffffff", + +" ", +" *** ", +" * * * ", +" ** ", +" *** *** ", +" *eae******* ", +" *aeaeaeaea* ", +" *eaeaeaeae* ", +" *aeae********** ", +" *eae*.........* ", +" *ae*.........* ", +" *e*.........* ", +" **.........* ", +" *********** ", +" ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Operator_logo.xpm b/xgnokii/xpm/Operator_logo.xpm new file mode 100644 index 0000000..67ee2af --- /dev/null +++ b/xgnokii/xpm/Operator_logo.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char * Operator_logo_xpm[] = { +"20 19 5 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #00FF00", +"# c #008000", +" ", +" ", +" . ", +" . ", +" .... ", +" .++++. ", +" ...... ....... ", +" .@##.. . . ", +" . ##.. ..... ", +" ...... . . ", +" ...... ", +" ...... ..... ", +" ...... . . . ", +" ...... ... ", +" ...... . ", +" ...... . ", +" .... . ", +" ", +" "}; diff --git a/xgnokii/xpm/Preview_3210.xpm b/xgnokii/xpm/Preview_3210.xpm new file mode 100644 index 0000000..3bd72e2 --- /dev/null +++ b/xgnokii/xpm/Preview_3210.xpm @@ -0,0 +1,510 @@ +/* XPM */ +static char * 3210_xpm[] = { +"129 333 174 2", +" c None", +". c #DADADA", +"+ c #D6D6DE", +"@ c #D6CED6", +"# c #CECED6", +"$ c #C6C6CE", +"% c #B5BDCE", +"& c #B5ADBD", +"* c #B5ADAD", +"= c #ADADBD", +"- c #DAD6D6", +"; c #BDC6CE", +"> c #9C949C", +", c #848C9C", +"' c #6B6B7B", +") c #5A6363", +"! c #6B6B73", +"~ c #5A5A63", +"{ c #4A525A", +"] c #4A4A52", +"^ c #424A4A", +"/ c #394242", +"( c #394252", +"_ c #313941", +": c #63636B", +"< c #757B7B", +"[ c #7B778C", +"} c #A59CAD", +"| c #BDB5BD", +"1 c #CED6DE", +"2 c #ADB5CE", +"3 c #949CAD", +"4 c #4A3F41", +"5 c #4A5263", +"6 c #C6CED6", +"7 c #C6C6D6", +"8 c #9CA5BD", +"9 c #898EAA", +"0 c #5A6B73", +"a c #332B2E", +"b c #4A4A5A", +"c c #524A5E", +"d c #525263", +"e c #52526B", +"f c #525A5A", +"g c #525A63", +"h c #5A5A6F", +"i c #525A6B", +"j c #5A6373", +"k c #7B849C", +"l c #BDC6D6", +"m c #949CB5", +"n c #5A637B", +"o c #63635A", +"p c #5A636B", +"q c #526479", +"r c #5E677B", +"s c #636363", +"t c #636373", +"u c #636B6B", +"v c #7B7B94", +"w c #D6CECE", +"x c #52524A", +"y c #808080", +"z c #C6BDCE", +"A c #445D78", +"B c #262E36", +"C c #ADA5A5", +"D c #5A526B", +"E c #4A524A", +"F c #7384A5", +"G c #83A2C9", +"H c #9CADC6", +"I c #9CB5D6", +"J c #ADC6DE", +"K c #627794", +"L c #6B6B84", +"M c #424A63", +"N c #81737E", +"O c #ADBDD6", +"P c #B5B5D6", +"Q c #BDBDD6", +"R c #BDC6DE", +"S c #CEC6DE", +"T c #C6C6DE", +"U c #C6CEDE", +"V c #CECEE7", +"W c #DAE2E2", +"X c #CECEF7", +"Y c #BDCED6", +"Z c #6B6767", +"` c #89838C", +" . c #DEDEEF", +".. c #E7E7EF", +"+. c #CECEDE", +"@. c #948CA0", +"#. c #636B77", +"$. c #9CA5AD", +"%. c #626F7F", +"&. c #909494", +"*. c #B5C6D6", +"=. c #ADBDCE", +"-. c #D6CEE7", +";. c #D6DEEF", +">. c #DEDEF7", +",. c #737B8C", +"'. c #D6D6EF", +"). c #E7E7F7", +"!. c #EFEFF7", +"~. c #E7EFF7", +"{. c #9C848C", +"]. c #E7EFFF", +"^. c #EFEFFF", +"/. c #EFF7FF", +"(. c #C1D6EF", +"_. c #62525E", +":. c #E7E7FF", +"<. c #CED6EF", +"[. c #39526B", +"}. c #A5ADC6", +"|. c #EFE7FF", +"1. c #F7F7FF", +"2. c #F7FFFF", +"3. c #707081", +"4. c #737384", +"5. c #FFF7FF", +"6. c #D2D6CE", +"7. c #E7DEEF", +"8. c #F7F7F7", +"9. c #BDCEDE", +"0. c #BDC6E7", +"a. c #EFE7F7", +"b. c #635A6B", +"c. c #6B6377", +"d. c #4A4A73", +"e. c #EFF7EF", +"f. c #DAD6E7", +"g. c #FFFBF0", +"h. c #F7EFF7", +"i. c #FFF7F7", +"j. c #E7DEE7", +"k. c #CEC6D6", +"l. c #F7F7EF", +"m. c #B5C6DE", +"n. c #1B1B23", +"o. c #121414", +"p. c #F7EFEF", +"q. c #000008", +"r. c #000808", +"s. c #101010", +"t. c #627373", +"u. c #181515", +"v. c #212129", +"w. c #B5CAE7", +"x. c #E7E7DE", +"y. c #636B63", +"z. c #000000", +"A. c #1E1E18", +"B. c #B5CED6", +"C. c #0D0D0D", +"D. c #AD8C9C", +"E. c #526B52", +"F. c #5A7B5A", +"G. c #639463", +"H. c #6DC069", +"I. c #63CE63", +"J. c #70D86D", +"K. c #5ACE63", +"L. c #786273", +"M. c #DADEDA", +"N. c #080404", +"O. c #0C080C", +"P. c #000800", +"Q. c #080808", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . + @ @ + @ # $ $ $ # $ % % & & * & = * * = = & $ $ # $ $ @ + . @ @ + - . . . ", +" . . . + + @ . + @ ; * = > , , ' ) ! ~ { ] ] ^ ^ ] ^ / ( / / / _ ( ] ] ] ~ : < [ , > } | # # + . @ + + - . . . ", +" . . + @ + 1 % | 2 3 , ! { ] / / _ _ _ _ _ / _ / _ 4 ( ^ ^ ^ ( ^ ^ ^ ( ] ^ ^ ( ^ ^ / ( _ 4 / ( _ _ _ / ^ 5 , 3 = ; 6 + + @ + . . . . ", +" . . . + 6 7 ; 8 9 0 5 _ _ a / _ / / _ ^ ] ^ ] ] { { b c b b ] { { d e f g h g { { 5 g 5 i d { 5 { { i ~ ] b f d g ( _ _ _ _ _ { j k 3 % ; 7 @ + . . . ", +" . . + # l m k n ] ( _ _ _ _ / ^ ] d { { f b { f f d o i d 5 f ~ g p 0 q 5 f h r h g i q i i 5 h g i d g 5 5 : s ) t t u p 5 f { ] ] ^ _ _ _ _ _ h v 3 % w + - . . . ", +" . . @ $ = [ t ] _ _ / ^ { { f { 5 q ) { i 5 o t g 5 x 5 g ~ s h g 5 f ~ s ~ d d x ] ] ] { ] ] b { { ] { f ~ h g i j j : : d d h 5 g 5 d ~ ) e d { { ( _ _ _ 4 ~ y } z - + - . . ", +" . @ # } ' ^ _ / ] { ] ] b g f b ~ g g { 5 d d f ~ A ~ o { ( ^ 4 a a _ B B _ a _ _ _ _ _ ( ( ( ( ( _ _ _ _ B _ a a _ ] ] ^ { 5 f g i i : ~ i h s f 5 p ~ 5 5 { { ( ( / / c ' C w - + . ", +" - + @ * < 4 4 b ^ ^ 5 i f g D q x g e q x 5 5 { E b 4 _ _ _ _ _ ( e q q F 9 F G m G H G G H I J J I J I I I G G m m 9 F K L A e M ( _ x _ ( _ ^ { ] 5 h t : h j h ~ h d d d b { ^ _ 4 N | w + . ", +" + 6 3 { _ ( b f d 5 i q ~ p ~ ~ j p g { ( _ ] _ _ ^ ] d L v 9 9 8 2 O ; % l l % P l z 7 Q % % l R $ 7 7 S T U V S U U U W V X V V U P = m , ' b ] 4 ^ / ( ( / b e r s : r u p L : f ] b ( / < & # + . ", +" + Y 9 ] ^ { d f f d h : ) i j ! g M ] ] ] ( x Z < ` 3 = = 2 % l % % % % % % % P Q % % % % l l Q ; Q % % % l l ; R T R ; 7 U 7 6 7 7 # + W ...W .+.6 7 z @.y ) E / _ ( ( b p ' r ' ! #.' : g f b ] ) $.+.. ", +" + H i ^ ] p ) h f : g h %.#.d b b ^ g #.` &.$.= | ; Q *.2 % % % 2 2 | 2 2 % 2 =.2 =.% % % % % l % Q =.% ; l Q l ; R T 7 7 7 U 6 U U +.6 + V +.1 -.V + ;.;.W ;.>.+ 1 $ = &.' M ( 4 ] D j %.t h h s #.#.{ ^ t & - . ", +" . + K ] x d 5 g h e j : d ( ( M { 0 ,.&.=.; | % % & & % P & % Q % & % % 2 & = 2 = & % 2 % % 2 2 % % % % % l % ; 7 R $ ; 7 T 7 U +.+.# +.1 7 1 U U +.+ V +.@ + + + ;.'. .).!.~. .1 I 9 q ( _ 4 c i : %.%.' ~ i ~ ] {.@ . ", +" . + ,.] ~ g f q h ~ f ( _ ( A K 9 H % % =.% ; 2 = 2 = 2 2 2 % % % 2 =.% % % 2 & =.% % ; Q % % % % ; Q % % l % % 7 7 R l 7 T 7 6 U U + +.+.+.1 U V + W '.V +.+ '.+ '.'.+ + W >.].).].^./.>.(.I K M _ 4 _.p n Z ! j q { {.@ - ", +" . + ` ^ ~ ~ ~ j p g _ 4 A K m *.; ; =.% & = 2 2 % 2 2 | | 2 % & & 2 2 & % 2 = & % % % % Q % | % % % ; Q Q % l P % ; l R 7 U U R 7 7 U +.1 7 U +.+.U + + V V + + + '.'.+ ;. . .>.:.].:.].:.^.^././.<.=.v { _ 4 : ,.%.' L 5 > + . ", +" + 8 E g { j ) L [.b ,.8 Q l % % % % % & =.| 2 =.& | % % 2 2 Q % =.% % % 2 }.% 2 2 % % % ; Q ; % l % % P =.l l P % ; l l l l T +.7 U + +.+.U +.1 V '.+ +.+ U # '.'.W .'.'.>.;.).).).).).].^.].|.].1.2.2. .= ! x ^ 3.4.,.' 5 } + . ", +" + *.b f u d p j ( 4.= % l % % 2 Q O 2 % =.& % 2 }.| % % 2 = 2 2 & % Q =.% 2 2 % & 2 =.& % P % | % Q ; % *.Q ; % P ; ; l Q U 7 +.+.T U U U +.+ '.+ U U 1 1 V V 1 + . .'.;.;.;.;.>. .).).:.^.^.:././.^.^.5.2.2.1.6.j ] ! < , r ] z - . ", +" . 1 A ] g f e L h ,.% 2 % % % ; % % % & % % % & 2 =.% % % & & % % 2 & % 2 2 % % % % 2 = = % l ; =.% % % l ; % Q l T # % Q l 7 7 T U + U U 1 1 + W +.+ V +.+ '.V 1 ;.;.;. .>.>.+ .:.>.7.;.:./.:.^./.1.1.2.1.1.1.2.2.8.k 4 ! v ,.5 < - 6. ", +" + m _ f f { Z k &.; =.% % % % ; % % % ; % & =.& % % & =.=.& % % % % = 2 & & 2 % % & % % & % ; % ; 7 R l ; ; *.; 7 T 6 7 R +.+.U V U +.+.'.U U U + + V '.W + U V '.;.'. . . .'.;. .|.:.>.>.:.).).^.1.1.1.1.1.1.2.2.1.5.2.,.4 ,., ,.g & . . ", +" . 1 { ] d ) f [ [ = % 2 ; ; P Q P l % % ; ; % % = 2 % % % % = % ; % % % 2 % =.% Q l % % T % l Q U 7 U 7 Q ; R 7 7 T R U +.-.U U U V + U '.V U U U + V '.V 1 '.;.;.;.;.;. .;.>.>.).:.].^.:.:.>.:.:.^.^././.1.1./.5.1.1.1.2.~.d ~ k &.u ' - . ", +" - G 4 { g { : n [ ; % Q 7 l % % % *.% % % P =.| % P % % ; % % % % Q ; % % Q % % Q R *.Q Q l 7 R l 7 U U Q $ U U l T U 1 V V U U U V + + '.<.U + V V ;.'.'.;.;.;.;.;.;.;.;.>.:.).>.).^.:.:.:.].].^.^.^.^.1.1.1.2.2.2.2.2.2.5.2 4 ` 3 k i z 6.. ", +" + q ^ g g f ,.q 3 % % R ; % 2 % % = % % % =.}.2 % ; 7 ; % Q ; % l *.% 7 l R 7 7 R ; ; U R +.T T U 7 +.U 7 6 R 7 7 U U + +.U U +.V '.'.+ V '.V '.'.'.+ .>. .'.;.;.;.;.;. . .;.:.).).~.].~.].1.^.|./.1./././.1.2.2.5.2.1.1.2./.h [ > 3 %.} - + ", +" . 9.] d g ) : h d & % % % ; % % % % % % % % % % % % % % % % Q ; 7 Q Q % ; R l 7 7 Q ; 6 U 7 7 $ +.+.7 7 0.7 +.U U U +.+.1 +.+ ;.+ V V V '.+ V U ;.;.+ W ;.'. .;.;.'. .;.;.>. .>.:.a.].).^.^.]./.^./.^.^./.1.1.1.2.2.2.2.1.1.2.5.9 d 3 8 3.Z - - ", +" - H ^ f h 5 : A b.R % l % % l l Q % ; % % % % Q 7 U Q Q 7 l Q Q l l Q ; 7 0.l ; l R 6 7 l +.7 7 7 6 U V U +.T U U V U T U U U V + V V '.'.'.;.'.;.;.'. .;. . .>.;.;.).;.].^.>.^.].].^.:.).^.^.:.].^.^.^.1./.1.1./.1.1.1.1.2.1.2.}.b 8 8 [ ) $ . ", +" + k ^ f i d n h N U % l R Q % Q ; % Q Q *.; ; l T l R T 7 7 T R 7 l R ; Q R T T U T Q 7 T U 7 7 U U U R R U +.U +.U U U V 1 U V '.'.<.V V <.;.;.;.7.;.+ '.;.>.7.;.:.:.:.].:.:.].^.^.:.:.]./.].].^.^.^.1./.^./.1.2.1.1.5.2.2.2.5.9._ [ $.9 p & . ", +" . + q ^ { g j c.e , T l l ; ; ; Q % ; ; R % % l ; Q Q T U l T U 7 7 6 R ; % l 7 6 l U 7 7 R 7 l 6 U l +.T U U T U +.+ U U T + '.V + '.'.+ '.'.'. . . .;. .).:.;.;.). .;.).:.].^.:.:.^.].:.^.1.^.^.^.]./.1././.1.2.1.1.2.2.2.5.2.2.~.[.' = 8 q } - ", +" + l M { { f { r d.8 T ; Q % % Q ; % l l 7 7 7 7 Q ; Q Q +.7 l U 6 7 U U l % 7 6 ; 6 U 7 ; U T 7 l T l 6 U U U T T +.U U U +.+ V +.+ V V '.'.'.;. .;.'.>.7.>.;. .>.;.>.>.).:.].].^.].].:.].].^.]./.^.^.1./.1././.1.2.2.2.2.2.2.2.2.5.r ~ 9 m u ` - ", +" . =.] { { h : ,.M | T l % % l R 7 7 l R l R 7 Q R l % R R ; Q T R l T Q ; 7 l l Q 7 R l R T R 7 7 + +.6 U U +.6 U V +.U U U +.U V + V V '.'.;.;.'.'.;.>.>.;.>.>.>.;.>.).:.].].;.>.^.].].^.^./.^./.^./.1./.1./.1.1.2.1.^.1.5.1.2.2.2.F c 3 G 3.Z @ ", +" - H ^ c ) d h n D +.7 7 R R U U R T % Q R 7 l T 7 l 7 +.R l R R l 7 U U Q R Q Q 7 7 R l 7 Q R l Q $ U U U U 7 +.V +.U V '.'.+ V ;.;.'.+ .;.;.;.;.;.>.'.;.;.>.>.).>.:.:.].:.].>.:.].].:./.^.1./.^.^././././.1.1././.^.].^.2.2.2.1.2.$.c @.@.3.: @ ", +" . m _ x s h ~ M c.U % % R 7 U V U R 7 7 U # 6 T l % l 7 Q 7 T U l 7 7 R ; ; R l ; +.R 7 7 9.U U T R l 7 T U 7 +.V U +.V U + + U + + ;.'.'.;.;.;.+ .>.;.).;.;. .7.:.>.;.:.].:.].].^.^.].]././.^././.^././.1./././././.].).1.2.2.2.5.2 / ,.9 k x w ", +" . &._ c Z 0 t d N U l ; l T >.;.R l R 7 R l U l % 7 7 T l 7 R R 7 l l % % T 7 l 7 U R R 7 U U 6 T U 7 7 7 U 6 +.V + + V U +.+ U U +.V ;.+ '.;.;.+ '.>.:.>.;.7.>.>.>. . .:.].^.]./.^.].^.].:.^.1././.1.1.1.1.1.^./././.>.+ !.2.5.2.5.9.] 4.m k f | ", +" + K ^ f d 5 ' ~ @.U ; ; l +.1.>.R 7 $ R T l ; % l $ % Q l ; l Q % % 7 7 ; 7 R Q ; U R l 7 U U 6 7 T l 7 7 +.+.+.U + + T 7 U V '.V + V '. .+ ;.:.>.;.>.). . .>. .;.:.>.).^.|.^.^.].].:./.^././././.1.1././././.1.2.2.1.>.=. .2.2.2.5.W { ' 3 9 g } ", +" . 1 %.] j g { [ d } R T 7 R + 5.].U R 7 T R % ; Q Q % ; Q l 7 T l ; 7 7 l 7 7 +.7 ; +.T l 7 U R +.U U U 7 T U +.U U + + V U V +.V '.+ 1 '.;.;.>.:.;.>.;.:.:.>.;.'.).:.:.:.:.^.^.].].].^.^./.1.2.1.1./.1./.2.2.2.2.5.1.2.>.= +.5.2.2.5.e.< ` 8 k i > ", +" . 1 i ] x f g ' c % R l 7 Q .5.>.9.R ; l l 7 7 l Q Q % Q T 7 ; % Q +.7 T ; 7 T +.6 +.T T 7 7 7 7 7 T U 7 U U l U U 1 + '.U V + V U + + '. .f. .;.7. .;.'.).>.;. .>.;.;.>.].].].].^.^.].^.^./.1././.^././.1.1.2.1.1.1.1.>.8 $ 2.2.2.5.2.9 ~ 3 3 0 ` ", +" + 6 ] { p ) ~ L b.T Q Q ; l !.g.>.l 7 ; $ Q l 7 Q Q 7 % Q l 7 7 7 ; 7 U $ % ; R 7 ; 7 l U l 2 % ; Q U +.6 7 7 +.1 T +.+ V U '.+ V U + '.;. .W '.'.f. .;. .;.'.;.>.].:.).).].].].>.:.^.]./.1.1.1./././.2.2.2.2.2.2.2.2.2.>.$.| 1.2.2.5.2.9 ^ @.m ' 4.", +" - Y M c ) p %.3.c.T R R ; T h.2.;.T R l T R R l R Q l l R U l 7 R ; l T l 7 ; R 7 ; l U 7 7 V 8 > } 2 l ; Q 7 6 U U 7 6 V V + + '.'.V '.'.;.'.V U W <.0.=.$.= f.:.:.>.].].:.:.^.].^.]./.1.2.1./.2.1.2.2.5.2./.1.1.2.2.2.].$.* 5.2.2.5.5.8 c 8 9 q #.", +" - *./ b d ) ! g N U 0.U R +.i.5.>.U T R R l l 7 ; Q l ; Q T l 7 l ; R 7 l 7 T T 6 T R T l j.g.<.9 [ ` ` 3 2 *.% R R U 7 U + +.1 V '.W + V V 0.O l l H K ] _ < k.).].:.].].^.^.1.^./.^.2.1.1.1./.1.2.2.2.2.2.2.2.2.2.2.2.].8 C /.5.5.2.5.l 5 , 3 3.g ", +" . H ( g g { ' e ` +.U U 7 -.g.2.;.Q 7 T ; Q ; ; Q T 7 % Q l ; T R % ; T R 7 T +.T U Q Q Q l.].q ( ( L > &.> 3 &.m 8 = 2 U V + + '.U U T m.H 3 | .. .q n.n.o.a & 7.^.:.:.>.].^././.^.^.1.1./.1.1.2.2.1.5.5.2.1.2.2.2.5.5./.= C ).5.2.2.5.. : 9 }.[ g ", +" + 9 4 ~ ) g %.b @.+.U 6 ; '.5.2.V l 7 l Q l l l R l ; l l 7 $ ; ; ; % 7 +.$ 7 l l Q U 7 % p.~._ q.o._ ! ` $ =.{ b ' &.> 9 m 8 }.2 = 6.R F ] N j.'.'.%.r.s.r.a * /.^.:.^.].^.^.^.^./.^./.1./.1.1.1.2.1.2.2.2.2.2.2.5.2.2./.; = - 5.5.5.5.~.c.[ = k { ", +" + k 4 d g : t 4 & U R 7 U 7.5.2.V 7 R 7 T T 7 l Q l 7 Q T T 7 T 7 $ 7 7 7 % ; R ; *.Q T l 7 U k / { 0 t.y @ G o.r.u.N % % = = ; 1 W 1.K o.q.x ` ' } =.t._ v.{ @ /.:.^.^.].^.].^.^.^.^././.2.2.1.1.1.2.2.2.2.2.2.2.5.5.2./.Y = @ 5.2.2.g./.K [ & 9 i ", +" + @ k 4 { d s h c % 1 U l Q ..5.2.'.T l 7 T R Q 7 O ; ; Q Q Q 7 R T 7 l Q Q Q 7 l l l =.l 7 ; *.H H O 9.R Q V m n.o.B x < N y ` > C * | K _ o._ ,.I <.<.(.I H 0./.|.:.].^.^.^.].^./././.1.2.2.2.1.2.1.2.2.2.5.2.5.5.2.5.2.2.U = @ 5.2.2.5.2.k < 8 k g ", +" . U j ] d { ~ e b.z T U U l a.5.2.U T 7 l Q l l % Q Q 7 ; R R % Q Q ; 7 l l ; l l T ; Q l l l R 1 1 U U 6 7 V H g g #.v 9 }.O w.w.O }.} C 9 r s & :.;.;.;.;.].>.|.:.^.:.^.^.^.].^.1.1.1.2.2.1.2.2.2.2.2.5.2.2.5.5.2.2.2.5.2.U & 6.5.5.2.5.2.3 d 3 m q ", +" - 1 { ] h d p ] c.-.l U U 7 !.g.1.9.U 7 ; R U 7 l l R ; 7 Q % % Q % % *.l 7 l % Q % % 7 T Y l T T 6 U U 7 U T l = % Q '.;.;.'.'. .;.'.+ U T ; z ;.'.'.:.).'. .>.;.>.:.:.].].].^.^././.^.2.1.1.1.2.2.2.5.2.2.2.2.5.2.5.5.2.2.1 & % g.2.5.5.5.& ~ } H q ", +" . Y ] { ~ f t M N +.T U 7 # 8.5.1.0.R ; ; R 0.l 6 R 7 l l Q 7 7 Q l ; ; Q R l l l l % l l l 7 +.U 6 U +.T +.+.+.+.U V + V V V + U + '.'.;.;.;.>.>. .;.).:.>. .^.).).:.^.^.:./.^.^./.^./.1.1.2.1.2.2.2.2.5.2.5.5.5.5.5.5.5.5.;.% $ 8.5.5.5.5.=.h 8 9 r ", +" + l ( { d g : _ @.U T U U + 5.5.2.U T l % l R 7 R R T 7 7 R T R Q 7 7 R R Q l U T 7 7 U l ; 7 U 7 7 U U 6 +.V U +.U U U U '.'.U V V V U V '.+ .;.;. .>.:.).;.:.:.].].].:.^.^.^././.1.1.1.2.2.2.2.2.5.2.2.5.5.2.5.5.5.5.5.5.(.; $ ..5.5.5.5.1 h , 3 t.", +" + =./ d ~ f 5 a @.U 7 U l +.5.g.1.T U 7 ; R 7 Q ; Q ; ; 7 l l ; % U l ; Q 7 7 l 7 l l 7 7 l 7 R 6 +.7 U +.+.+.U 1 +.U T U U U U '.V V V +.'.;.;.;.'.).).>.;. .].^.:.:.:.].^.].^.1.^./.1.2.2.2.2.5.2.2.5.2.5.5.5.5.5.5.5.5.5.~.; l x.5.2.5.5.].r ' 8 k ", +" 6.8 _ ~ p j b _ & V +.U l . g.5./.U U 7 Q T T *.Q 7 7 7 R l R 7 R T l 7 R 7 U T T Q l R 7 7 T U 7 7 T U V + V +.U U V +.+ V V V '.V V '.<.;.;. .;.;. .;.'. .).:.:.].].].].^.^.^.^.].^.1.2.2.2.2.2.5.2.5.5.5.5.5.5.5.2.5.5.5.>.; 6 W 5.5.5.5.2.,.4.H k ", +" + 3 ^ d h t.M 4 Q V U U Q + 5.g./.U U l 7 Q R 7 7 R Q l l T 7 7 R R U U 0.R l R 0.R l U T l Q Q l U T 7 +.U U U U U V U U V X V U '.V V '.;.'.;.;.;.).>.;.>.:.^.].|.^.].]./.1./.|.^./.1.2.2.1.2.5.2.2.5.5.2.5.5.5.5.5.5.5.5.>.m.6 + 5.5.5.5.2.,.N % F ", +" + 9 / d h h ( c -.U 7 U l .5.2.~.T 0.l 6 R m.7 7 Q % ; R R 7 ; R T 7 T l l l T R U l T T l *.% $.= Q R 7 U T U T T U +.V '.+ + U V V '.V ;.;.<.;.'. .;.>.;.V V :.^.^.^./.^././.^.1.2.1.2.2.2.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.].l 7 @ g.5.5.5.5.9 N 8 k ", +" . + ,.4 g g 5 _ _.-.1 1 U ; a.g.5.~.7 U U U R R 7 7 l Q % Q l 7 ; 7 T l l 7 7 l +.T 7 l 7 T ; - !.O ,.< ` 3 2 R 1 7 U R U +.U V V V + U 1 V '.'.'.'.6 Q O m k 4.3 # ^.].^.^.].^.1.1.2.2.2.2.2.2.5.5.2.2.5.2.5.5.5.5.5.5.5.5.5./.l # # 5.5.5.5.5.2 N 8 9 ", +" + + A x g 5 ) _ b.-.6 7 l # 8.5.2.>.U U 7 7 R T l l U % ; T U 7 6 R R 7 +.U 7 l 7 T l 7 6 l z h.(.( _ b y.` [ , 8 8 8 I Q l V '.;.'.V U 7 l R 2 m m | 6.m A / _ ~ $ !./.].^.^././.^././.2.5.2.2.2.5.2.2.5.5.5.5.5.5.5.5.5.5.5./.l +.7 8.5.5.5.5.Y t 8 3 ", +" - + [.c g f t _ 4.;.U T R +.1.5.5.;.T +.R Q Q l 7 7 Q 7 7 U U 7 U R U R T U +.l Q R ; +.U R l i.H z.z.r.u.@.2 = 9 j s k 9 9 }.O Q m.R O O % 9 r u * 8./.q z.r.z.a * ^./.^.^././.1.^.1.1.2.2.5.2.5.5.5.5.2.5.5.5.5.5.5.5.5.5.5.2.l +.$ 8.5.5.5.5.1 t m m ", +" 6.1 ( { h g i a ` ;.7 U U +.5.5.2.;.7 T T 7 T 7 7 l T l l 7 R l 7 U T ; U U 9.7 T Q l U T T l f.; o.r.s.A.o ` p.9 n.n.4 N $.9 9 $.2 % U V v ( B _.P &.C ' v.s.s.4 z 5.1.1./.^././.1.2.2.1.5.2.5.5.2.5.2.5.5.5.5.5.5.5.5.5.5.5.2.Q +.; ..5.5.5.5.W d [ 9 ", +" . % _ f j g f a } '.7 7 T + 5.5.2.;.l R 7 7 R T l ; T 7 7 U R l % R 7 l ; R l 7 +.R l 7 U T 7 R H ' y.,.$.8 = '.q z.r.z.a , 3 &.> } % - B.o.z.z.u.Z &.; ;.=.,.' &.7.1.1.1./.1.^./.1.1.1.1.2.5.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.2.0.+ $ ..5.5.5.5.~.! 3 8 ", +" + 2 ] _.h i j 4 * ;.U T Q + g.5.5.;.T R R l l T 7 R 0.T +.U R l ; R Q 7 U R U 7 T T +.T T R 7 R P R l +.<.<.T <.K C.o.v.] 4., m G H m m 3 q _ n.v.&.~.].^./.]./././.].^.^.1./.1.1.2.1.2.2.2.1.2.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.2.U +.$ W 5.5.5.5./.,.D.8 ", +" + 2 / ) ~ ~ 5 _ & ;.7 T 7 W 5.5.2.V U V l 7 T 7 l T U +.U R 7 l Q T l l 7 R T 7 U T 7 l T T 6 R U U U U U V U U 2 ,.[ 8 l V ;. .;.V '.V U R G , > -.:.].:.:.1.1.^.^./././.1.^.1.1.2.1.2.2.2.2.5.5.5.5.5.2.5.5.5.5.5.5.5.5.5.5.2.0.@ 6 . 5.5.5.5.2.v [ H ", +" + 9 / f d n e 4 S + U U T ..5.5.2.;.U U l 7 U l l ; U 7 R R 7 7 l l T U l T U 7 7 T l l k.T +.T S U T U U U U U U U V ;.;.'.'.'.W '.;.;.;.;.>.>.].;.).].:.:./.^.^.1.5.1./.1.1.1.^.5.2.2.2.2.5.2.5.5.2.5.5.5.2.5.5.5.5.5.5.5.5.2.V @ 1 @ 2.5.5.5.5.&.N = ", +" . &.] t ~ p i d -.U +.+.T !.5.5.2.W R U l 7 T +.; % Q $ $ U 7 l 9.R 7 6 l l Y 7 Q l 7 7 +.7 U U U U +.+.U +.+.0.U V V V '.V '.;.'.'.'.;.).;.;. . . .).:.:.).).]././././.^.^./.1.1.2.2.1.5.5.5.5.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.V # # 7 5.5.5.5.5.$.' H ", +" . + k ] ~ d h { _.'.U 7 U T !.5.5.2.U R T R l T T 7 7 R l k.U 0.R l Q R l l R l 7 7 l 7 U U R 6 U V T 7 U U 1 U V V +.V '.V '.;.'.+ '.;.;.).;.'.;.>.>.;. .).].a.:.^.^.^./.1.1.^.1.2.5.2.2.2.2.2.2.5.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.;.+ + $ 5.5.5.5.5.H D 8 ", +" - + K ^ 5 c d _ c.7.U U R T 8.5.5.2.U R U 7 l R l T +.l % 7 T 7 7 Q R T ; T +.7 6 +.U U 6 T U 7 U U 7 U +.U +.U '.V + '.;.;.+ <.+ W .;.'.).;.;. .).:.).!.:.:.^./.^.^.^.^.^.^.1.5.2.5.2.2.2.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.;.# + % 8.5.5.5.g.w.Z % ", +" + + 3.] { d h 4 ` ;.U +.T +.l.5.5.2.U l U U l U T 7 R l U 6 7 R l 6 T Q U U T +.U l U R 7 7 7 l +.U +.+.U U +.+ '.V V V ;.'.;.'. . . .'.W .;. . .;.:.).].:.:.^.1.1.^.^.].^./.1.1.2.2.5.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.~.@ W ; l.5.5.5.5.;.: = ", +" . + r c g h h _ N ;.7 +.T +.i.5.5.2.U R R R 7 0.l l R V U 7 U R l l R Q +.U 0.7 7 U T 7 U R Q 7 7 T U 7 U V +.+.U V V '.V '.+ '.;. .'.'. . .;.;.>.:.>.:.:.:.:.^.].^./.^.^.^.1.1.1.2.1.2.2.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.6 W 7 !.5.5.5.5.>.g 8 ", +" + 6 5 x ) h e a @.;.T +.R -.g.5.5./.R U R l 7 Q Q R R U T +.U R Q 7 U R 7 T R T l T R l 7 R 0.U 7 U U U U U V V U V + '.V + '.;.'.;.;.;. .;.>.>.).|.:.>.).>.:.^.^.^.^./.1.^././.1.2.1.5.5.5.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.7 W ; ..5.5.5.5.~.t = ", +" - + 5 c 5 h i 4 D.<.7 T R f.5.5.2./.T T R T U 7 U l l Q l 6 R T T ; Q 7 6 U U R % R T 7 l U U +.T U V +.+.U U U '.+ +.V U '.+ ;.;. .:.:. .;.>.>.>.:.:.:.).:.^.^./.^./.^./.1./.^.1.2.2.2.5.5.5.5.5.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.2.).T + ; ..5.5.5.g.1.#.} ", +" . 1 M c { t r _ & ;.7 +.+...5.2.5.^.l 7 l U l R T l l R 7 7 l U l $ 7 7 $ 6 T ; $ U U Y +.T 7 7 6 U 1 # l U 1 + + # + V '. .W .;. .>. . .>.;.;. .:.>.a.:.^.>.).^.!./.^.^.2.1.1.2.1.1.5.2.2.5.2.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.7 W 6 - 5.5.5.5.2.,.@.", +" . U b f { h h _ z '.U +.R .5.5.5./.R U T +.T R 7 l R R R # U U U T T T 6 R U l 7 U T 7 +.0.U 7 U U +.1 U V +.+ '.W '.'.;.'.'.;.'. . .;.'.;.7.>.).;.:.].:.^.:.:./.1.].1.1.1.2.2.5.5.2.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.7 W +.k.g.5.5.5.2.9 @.", +" . 9.] { { i A 4 S <.+.1 +.a.5.2.5.].R U V 7 7 R R R T R 7 # +.T U +.U T 7 T R R 7 U U 7 +.U U +.+.U 1 +.V V U +.'.+ 1 V '.+ + '.V .7.;.;.'.;.>.).>.:.].).:.^.].^.^.].^.1.1.2.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.7 W + 7 2.5.5.5.5.m {.", +" + *.] { { g [.x f.V +.1 +.!.5.5.5.~.6 U U 6 7 T R U +.R 6 T U l 7 6 T T U T 7 U 6 T +.7 U T 7 V V ;.'.'.'.'.W ;.'. .;.;.;. .'.V + .;.;. .;.).|.^.^.^.].^.^.^.^./.].^.2.5.1.5.2.2.2.5.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.).l W + # 5.5.5.5.5.8 ' ", +" - I ( d ~ j [.c .V U U U h.5.5.5.].U U 0.7 U U l 7 U U 7 l 7 T 7 ; ; 7 7 ; R T l 6 U 7 U T +.V ^.5.2.1.;.'.^.1.>.^.2.5.2.5.2.^.:.1.].;.:.2.1.].5.2.^.^.].2.5.2./.^.^.2.5.2.2.2.5.2.5.2.5.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.].U . V 6 5.5.5.5.5.2 4.", +" . H ] h 5 p M _.'.V U U U h.g.5.5.].U T U 7 U Q T U U U l l U R l % T 7 R R 9.U R R U 1 +.U + '.1.2.5.5.].<.1.2.1.5.5.2.1.1.5.5.1.5.2.^.5.2./.].2.5./.^.1.5.5.5.2./.1.1.2.1.2.2.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5./.U . .R i.5.5.5.5.l < ", +" . 2 ] d ~ L M c.;.V U +.-.1.5.5.5.~.R U 0.R T 0.0.R 7 R l R R T l 7 U U l l U R U 0.U +.+.U '.'.1.5./.2.5.].1.2.1.2.2.>.:.].1.5.2.2.2.2.5.2.]./.2.5.1.^.5.2.2.2.5.2.1.1.1.2.5.2.2.5.5.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5./.R W ;.l p.5.5.5.5.Y ' ", +" - m _ { i t ( 4.:.V V U + 5.2.2.5.;.R U T R R U R 6 7 R 6 7 7 7 ; +.0.l Y l l ; 7 R U +.+.0.U V 8.2.:.!.5.5.5.2.1.5.2.].].].5.2.2.5.2.2.5.2.].].2.5.2.2.5.5.2.5.5.2.2.2.1.2.2.5.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5./.Y . .; ..5.5.5.5.V r ", +" + F ( f p %.] N :.U V +.+ 5.2.2.5.>.T U U l R R 9.6 U 0.R l 7 l R l l T U l R l 7 +.V U + V U + 5.5.~.;.2.5.5.5.1.2.5.5.5.5.5.2./.5.2.].1.5.2.1.2.5.1.2.5.5.5.5.5.5.2./.1.1.1.2.2.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.U W 7.l ..5.5.5.5. .3.", +" . F ] d t t ^ ` >.U + U W 5.2.5.5.>.U U V U U R U 9.0.T 7 l U T T 9.U U 7 l U l U V +.+.U U +.V ^.1.>.;.>.1.1./.].^.2.2.2.2.2.1.^.2.1.:.].1.5.2.1.2.1.5.2.2.2.2.2.2.1./.1.1.2.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.1 + .7 x.5.5.5.5.~.%.", +" . K ] f : L ( D.>.U V +.'.5.5.5.5.>.U 0.U U l R T +.9.U U U Q T V 7 R l 6 6 U U U V +.+.+.U V V ;.'.V '.V '. .>.;.;.:.:.^.:.:.:.:.:.>.:.].].^./.].^././.1.1././.1.2./.2.1.1.2.2.1.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.1 + .+ ..5.5.5.5.~.,.", +" + 3./ d j %.4 } ;.+.+.U ).5.2.5.2. .V U 0.U +.0.R 7 *.7 7 7 R l +.U U T 7 U U U U U +.1 U V V V V '.+.+ '.;.;.;.;.;.7.>.>.>.:.>.>.:.>.;.;.:.:.].:.:.^./.^./.1.1.1.1.5.2.2.1.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.V + ~.1 x.5.5.5.g.!.,.", +" + q ] f f r d.& ;.T '.V .5.2.5.5.>.U '.U U U V V U U 0.9.l +.T +.U T U U T U V V U V U V V +.U V + '.V V '.'.'.;. .;.;.;.;.>.>.>.>.>.:.:.:.:.^.].^.^.1.^.^.1.2.1.1.2.2.5.1.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.W + ).+ + 5.5.5.5.8.,.", +" + %.] d u %.b z >.'.+ V ..5.2.5.5.;.U V U U +.9.T +.U U U l U U U 6 U U +.U U 9.U U V U U V U + '.V V '.V '.+ ;.<.'.;.;.>.>.>.>.>.:.:.>.>.].^.].].^.^./.1.1.1././.1.1.1.2.2.2.2.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.V W ).U @ g.5.5.5.2.9 ", +" + q c ~ p j c k.;.'.'.U !.5.2.2.5.>.V V 0.R 6 U 0.Y 7 U U +.+.U 1 7 U U +.+.T U R V V V V V ;.;.;.;.).>.].>.].:.].>.].].^.].]././././.].1./.1.1.2.2.5.2.2.2.2.5.2.2.2.5.2.2.2.2.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.V 1 .1 # g.5.5.5.2.9 ", +" + q { g u L c k.;.'.U U !.5.2.5.2.;.U U T R 7 +.T U U U U V U U 1 V ;.;.W ;.;.>. .>.;.V V V V R P }.= = }.} 3 3 @.9 9 9 9 , , , 9 k @., , , @.3 3 8 } & & z # + f.x...l.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.V 1 .+ $ g.5.5.5.2.m ", +" 1 i d ) ) n b - ;.'.+ +.!.5.5.5.5.;.U U V T +.U V V V ;.>.<.;.V V U % = 8 3 k ` 4.: s ~ c ] _ ( / / ^ E { E.E.E.x E.E 4 / / / / / / / / B B B B B B B _ _ _ ^ ^ ] 4 4 ^ b ~ Z < y &.> C | - x.l.2.g.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.V + .+ 6 2.5.5.5.2.= ", +" 1 i g d j 3.~ f.;.'.+ +.h.5.5.5.5.>.U U '.;.>.<.V O 2 = k ,.#.{ _ _ _ _ / / E E E E.E.F.F.F.G.H.H.H.H.H.H.I.H.I.I.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.G.G.F.G.F.F.F.F.F.F.F.E.E.E.f f s < &.> & w - !.2.2.g.5.5.5.5.5.2.U 1 ).;.6 g.5.5.5.5.H ", +" U 5 ~ s g h D 7.'.'.'.+ h.5.2.5.5.>.V '.<.=.,.{ _ v.n.n.o.A.v._ E F.G.H.H.H.J.J.J.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.I.I.I.I.I.I.I.I.I.J.I.I.I.I.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.J.H.H.H.H.G.G.E.E.E.E E { ~ ' [ } ..5.5.5.2.V @ ).W # 5.5.5.5.5.% ", +" Y b d h : i b.7.V '.V + 2.5.2.5.2.;.+ ;.9 B C.o.v._ E E.F.G.H.J.J.J.I.I.I.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.I.I.I.I.J.J.J.H.H.G.G.F.E B ] | 5.5.2.;.1 .+ # 2.5.5.5.2.% ", +" # 5 { { %.,.c.).V '.U + 5.5.2.5.5.<.;.G o.A.E.G.H.H.J.J.J.J.I.I.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.I.I.J.J.H.H.E _ $ 5.2.V # .V 7 8.5.5.5.5.; ", +" *.{ 5 d : %.c.a.'.;.V W 5.2.5.5.5.>.V [.o.G.J.J.J.I.I.I.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.H.E _.i.2.+ # .;.6 l.5.5.5.5.6 ", +" =.{ 5 { j r N |.U V + .5.5.2.5.5.].I v.F.J.I.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.J.G.x - 5.;.1 . .U p.5.5.5.5.Y ", +" *.{ i j ' 4.N ].'.'.+ f.2.5.2.5.2.].G B H.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H._ | 2.V 1 .. 6 l.5.5.5.5.U ", +" =.{ i ! N t N :.+ ;.V + g.5.5.5.5.].G _ H.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.H.E D.g.V # .+ 6 ..5.5.5.5.+ ", +" =.{ d ~ < d @.>.+ ;.U + 5.5.2.5.5.].9 / H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.E D.5.V @ .W 6 ..g.5.5.5.W ", +" I 5 d ~ < e @.:.;.'.V f.2.5.5.5.5.].F 4 J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.E.{.g.V # . .@ j.5.5.5.5.W ", +" =.b q ) ' d @.>.+ '.+ .g.2.2.2.2.>.K E J.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.J.E.{.2.1 @ W W 6 . 5.5.5.5.W ", +" }.d g g ' d.@.;.V ;.V 7.2.5.2.5.5.>.%.E.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.E.N g.+ @ .W 6 j.5.5.5.5.W ", +" H M e g #.M D.:.'.'.V W 5.2.2.5.5.>.K F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.N 5.V # W W U @ 5.5.5.5.e.", +" H d e g 4.d.} >.'.'.V 7.5.5.2.2.5.>.K F.J.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.J.F.N 2.1 6.W .1 - 5.5.5.5.~.", +" 8 d h f < d.} >.V ;.V ).5.5.2.5.2.>.%.F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.N 2.U @ .W # . 5.5.5.2...", +" 2 { { g L d.* ;.'.'.U ..5.5.2.5.5.>.%.F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.L.2.1 + W + 6 - 5.5.5.5.~.", +" 2 ] e : [ d.& '.+ ;.'...5.5.5.5.5.].q F.J.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.L.2.V @ + W + . 5.5.5.5.e.", +" = { d h , r P ;.;.'.+ 7.g.2.2.5.5.>.q F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.L.5.V @ W .1 - 5.5.5.5./.", +" 8 { e d ` 4.z ;.'.;.+ a.5.5.2.2.2.>.0 G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.2.1 @ W W + . 5.5.5.5./.", +" $.f g f 4.D z >.;.'.+ !.5.5.5.5.5.].%.G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.1.U @ W W W . 5.5.5.5./.", +" 9 f h h ` c.z ;.'.;.V !.5.2.2.2.5./.K G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.2.1 6. .W + . 5.5.5.5.2.", +" 9 c h 0 , t P >.'.'.'.!.5.2.2.5.5.~.t.G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.L.1.1 1 W ~.. x.5.5.5.5.2.", +" 9 { q q ,.D z ;.;.'.+ ).5.5.2.5.2.~.0 G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.1.U + ;.W 1 . 5.5.5.2.2.", +" 3 f : p 4.D k.>.'.'.V !.5.5.2.5.5.~.0 G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.8.6 + .W 6 . 5.5.5.5.2.", +" 9 b n p < N S ;.'.'.+ a.5.2.2.5.5.e.t.G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.2.# + .W 1 j.5.5.5.5.2.", +" m b ~ : [ c.Q '.'.'.V a.5.2.2.2.5./.%.G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.8.1 + .W 1 x.5.5.5.5.2.", +" 9 ] j t y b.T ;.+ '.+ !.5.5.2.5.5.~.r G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.L.1.6 . W W # . 5.5.5.2.2.", +" 8 ] p ' 3.b.S '.;.;.+ a.5.2.2.5.5./.,.G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.8.6.. W W @ x.5.5.5.5.2.", +" m d h s [ b.S ;.'.;.V a.g.5.2.2.5.e.3.G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L./.1 . .W @ j.5.5.5.5.2.", +" 8 d t Z 3.c.S .'.;.+ a.5.5.2.5.5./.K G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.N ^.1 W ;...1 x.5.5.5.5.2.", +" H d j : v D -.;.'.'.'.a.5.5.2.5.5.e.K G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.N /.1 W W W @ e.5.5.5.5.2.", +" = { h ' ,.c.S ).'.'.V ).5.5.2.5.5.2.k F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.{.!.1 W W W + l.5.5.5.5.2.", +" H { i t K D S ;. .;.V 7.g.5.5.2.5.2.9 F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.{.!.6 . ...1 p.5.5.5.5.2.", +" 8 d h ~ ,.c.-.;.'.<.'. .5.5.5.2.5.2.9 F.J.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.{.!.1 W W W # !.g.5.5.5.2.", +" H b q p 9 4.-.>.;.'.+ .2.5.2.5.5.2.9 F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.D.~.6 + .W # 8.5.5.5.5./.", +" 2 d j p k c.S >.'.'.'. .g.5.2.5.5.2.m E.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.* .$ + W W 1 g.5.5.5.5./.", +" =.b p ' k c.-. .'.;.;.+ 5.5.2.2.5.5.H E.J.K.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.* ~.w . W W # g.5.5.5.5.e.", +" % ] i %.k c.S >.'.;.'.;.2.5.2.2.5.5.G E.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.* ;.@ W W . # g.5.5.5.5./.", +" 2 5 g 0 [ c.S >.;.;.'.;.2.5.5.5.5.5.I E.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.K.J.o | V . .W + + g.5.5.5.g./.", +" =.{ j ' [ c.k.>.;.;.'. .5.5.5.2.5.5.=.{ H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.z W . . .W + 5.5.5.5.5.!.", +" =.e h u ,.b.z ;.;.'.;.'.5.5.2.2.5.5.J { H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.o k.W . . W + . 5.5.5.5.5.e.", +" % h %.j ' b.z ].;.;.;.'.^.5.5.2.5.5.1 g H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.x - W . W W W . 5.5.5.5.5.e.", +" 6 A j L 9 c.& ].;.;.'.;./.5.2.2.2.5.;.q G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H._.- + . W .;...5.5.5.5.5...", +" U j t p ,.b.* ].'.;.;.;.^.5.5.2.2.5.;.A G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G._.+ 1 M.W ).W ..5.5.5.5.5. .", +" 6 h ! ) ,.r } ^.;.;.;.;.a.5.2.2.5.5.~.%.G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.. + . W !.+ l.5.5.5.5.5.W ", +" 6 h h ~ N 4.D.].;.;.+ '.a.5.5.2.2.5.].%.G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.N .W W . ..+ p.5.5.5.5.5.W ", +" U q b.) ` ,.@./.'.;.;.'.!.5.5.2.2.5./.K G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.` '.+ W .).+ g.5.5.5.5.2.6 ", +" U j h p ` v ` |.;.;.;.;. .5.2.2.2.5.2.[ F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.{.V + M.W .6.g.5.5.5.5.5.; ", +" 1 j ~ ! 4.[ ` |. .;.'.'. .5.2.2.2.5.5.9 E.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.D.+ W W W ..1 g.5.5.5.5.5.% ", +" 1 n p : ! , c.a.;.;.V + ;.5.5.2.2.5.5.m E.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.F.D.;.W + + W W g.5.5.5.5.2.= ", +" + r g p : 4.Z 7.>.'.;.'.;.1.5.5.2.5.2.8 E.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.x 3 . .W W W W 5.5.5.5.5.2.m ", +" + r d ) g ,.b.-.;.'. .;.;.1.5.2.2.2.5.=.{ H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.f & W W W W + ..5.5.5.5.5.2.k ", +" 1 r f ~ %.,.b.k.>.V '.'.'.!.5.2.2.5.5.9.0 H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.o z W .M.W + p.2.5.5.5.5.e.' ", +" 1 q d s ' ,.~ k.:.'.'.+ '...5.2.2.2.5.;.0 G.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.$ W W W .1 !.5.5.5.5.5.!.' ", +" + %.d p : 3._.* ].X '.'.V ).5.5.5.2.5.>.p H.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.L.7 ;.W ..).+ 8.5.5.5.5.g.~.' ", +" + K f u p ,.4.D./.<.+.'.'.).5.2.2.2.5./.q G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.' +. .W W ;.+ 2.5.5.5.5.5.V g ", +" . k d s ! L L ` 1.'.'.+ V '.1.5.2.2.5.2.t.G.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.N + W .W W W 5.5.5.5.5.5.B.! ", +" + m b s : q 4.c.a.;.+ .V V 8.5.5.2.5.5.k F.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.{.W . .. + W g.5.5.5.5.5.8 < ", +" . 8 b p i p , _.-.>.'.'.<.'.h.5.5.5.2.5.m y.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.} ). .W W + ..5.5.5.5.5.2.[ N ", +" . H ] ~ h i N b.z >.'.'.;.;.^.5.5.2.5.5.H E.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.< } .. .W W W l.5.5.5.5.5.2.0 N ", +" . =.d s u j ` D z |.'.'.;.'...g.2.5.5.5.B.{ H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.< * ..W . W + 8.5.5.5.5.5./.5 * ", +" . 2 { g L L ,.D C /.'.;.;.V 7.5.2.2.2.5.;.g H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.L.| .M.W W + 8.5.5.5.5.5.(.( & ", +" + l b ~ 0 j t c.{.^.V '.'.V .2.5.2.5.2./.i H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.G.Z k. . . .W W g.5.5.5.5.5.I ] $ ", +" - U g ~ j j ' 4.N |.;.'.<.;.'.1.5.2.5.5.2.' F.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.G.< .W .W + ..5.5.5.5.5.5.F ~ k.", +" V i s h j r 4.b.- >.V '.V + 1.5.5.5.5.5.=./ H.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.x } W + W W + ..5.5.5.5.5.5.%.~ = ", +" + r { 5 h ~ L D z :.V '.V V ^.5.5.5.5.5.2.t./ H.J.J.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.J.H.F.Z S + W W + @ 8.5.5.5.5.5./.b N ; ", +" + 3.b g j j c.D * :.V V '.V ;.2.5.5.5.5.5. .q _ F.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.J.J.H.J.J.J.J.H.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.H.J.J.H.H.J.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.G.G.E.f 2 $ 6.+ W # @ g.5.5.5.5.g.(.] 3 l ", +" + 3.] i j j ' r D.).U '.'.+ '.h.5.5.5.5.5.2.>.,.B a ^ E 4 E 4 E 4 4 4 E 4 E 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 E 4 4 E 4 E 4 E 4 x 4 4 4 4 4 E 4 4 4 4 4 4 4 4 4 4 / 4 4 4 4 4 4 4 / / / / / _ / / / 4 _ / / 4 f 3.&.* | $ @ 1 ; p.5.5.5.5.5.5.8 4 = $ ", +" + v f : #.t 4.r N a.;.X U V '.'.1.5.5.5.2.>.U =.&.' y ! ! ' u 0 f ) ) f f f E f f x x ] ] ^ ^ ( x ^ ^ ( x ] / _ a / _ ^ / / _ 4 a _ B / _ _ _ 4 _ / _ _ _ ^ ^ / ^ ^ ^ / 4 ^ { ^ { f f f f f x f g g s ! #.u ! ` 3 &.` > | | 6 % j.g.5.5.5.5.5.5.k ^ * | ", +" . k ~ t L u ' ,.c.- ;.X U +.V U V 1.5.5./.U 2 $.&.> &.&.> > &.&.&.&.&.` ` ` y ` ` ` ` ` ` ` &., ` ` y [ y ` ` y y ` y y y ` y y ` ` y y ` y < y y < y y y < y ,.` ` ` ` ` ` ` ` ` ` ` ` ` , &.` ` &.> &.> 3 > &.` < < ` > = * - 5.5.5.5.5.5.5.2.p t & + ", +" . 9 c p p q %.L _.z :.V '.+ V U V ;./.2./.0.8 &.` ` ` ` ` ` ` ` ` ` y ` y y y y y y y y < y ` y y y y y y y ,.< y y y y < < y < y y < < y y < < ,.< < y y y < y < < ` y ` y y y ` ` [ y [ ` ` y y ` ` y ` ` ` ` ` < < < ` C x.5.5.5.5.5.5.5.2.;.] #.8 Q ", +" + m ^ h t #.#.4.~ } >.<.+.U V V + 1 '.;.].;.=.> ` &.` ` ` ` < y y ` N y y y < < y < < < y < < ! < < < y < < < < < ' ! < < y < < ! < ! < < < ! < ' < < < ! ! ! ' ! < < < < < y y < y < < y y < y ,.y < y , ` ` &.&.` &.C 6.g.5.5.5.5.5.5.5.5.5.H 4 ,.3 = ", +" + H ] ~ 4.#.0 ' ! N ;.'.V V '.U '.+ '.V + ;.;.1 ; 2 & $.$.= $.C $.$.> > &.&.&.> &.&.&.&.` ` [ k ` ` ` y y ` ` ` y [ [ y y [ y y y ,.y y y ,.y ` [ [ ` [ [ y [ k ` ` &.&.&.3 3 > $.$.8 $.= = 2 ; ; ; ; 6 @ + + W W ..8.g.5.5.5.5.5.5.5.5.5.5.2.k ^ , m = ", +" - *.{ h n h p ' 4._.-.;.'.U X V +.V V V U V <.'.'.V V U 1 V V 1 U U 6 U 9.9.6 9.Q U 7 U 0.9.Y R l B.; *.=.; *.l l l Y Y ; 9.R U U 9.9.9.7 U U U V U V ;.V ;.W ;.;.>. ...!.e.8.e.8.2.e.2.2.2.2.2.g.2.5.g.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.e.r h 9 $.}.", +" + *.f ~ g h h Z [ c z <.+.+ U U U U U U U T U U U U 6 7 U U +.V +.T U U U +.+.U U '.V V + ;.;.<.'.'.'.;.;.;.<.;.;.;.;.;.;.;.>.].:.].].:.].].^.^.2./.2.2.2.2.1.2.2.g.5.2.5.5.5.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.1 { [ 9 8 = ", +" - l { h h ~ j L [ ~ D.>.U U V V +.U U U l U l Y 7 U U l U U 7 7 T T U U +.U U U U U V U V 1 U U U V <.'.V '.'.V 1 '.'.'.;.;.;.>.;.;.;.>.:.].].^.]././.^.^./.1./.1.1.2.2.2.2.2.2.2.5.5.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.H 4 ` ` = =.", +" . U 5 ~ h t : j 4.t 4.:.U U V U U R U T U 0.T T 7 U U l U 6 7 1 U U +.U T T U U T U U U U 6 U U U U U V U V V '.V '.V '.;.;.;.;.;.;.>.:.].:.:.:.].:.].].^./././././.1.2.1.1./.2.2.2.2.2.5.5.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.K x [ @.& 8 ", +" - 1 b d i p : q h ` ~ -.U +.V 0.T T T U U +.R U U T U ; U U T T U T U T 0.R R T U 0.R U V T +.V U U U +.+ V X V V '.'.'.;.<.;.;.;.>.>.:.>.>.>.:.:.].^.^.].^.^.1.1././.1.2.2./.2.2.2.2.2.5.5.5.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.~.M < , 9 % 7 ", +" + M { g h ) j e [ c & ;.+.V U T +.U U 6 U U R T R U 6 U 0.l R T T R l R l 7 0.V R R U 0.T U 0.7 1 V U V V <.'.V '.;.'.;.;.;.;.;.:.:.>.>.:.:.>.:.:.].].].]./.^.1.^./.1./.2.1.2.2.2.2.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.2.*._ 4., 9 } ; ", +" + q b i y.d i r ! d ` ;.U U U U U U U U U U U l R R 7 U U U 7 R R l 7 Q Q 7 U T R R T m.U U U 9.U U U V '.V ;.;.;.<.;.<.'.;.+ V ;.'.V ;.>.].:.:.].:.].].:.].].].^.^./.2.2.1.1.2.2.5.2.2.5.2.5.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.k ~ 9 @.@.8 2 ", +" + q ] ~ %.0 i r t L ~ ;.T R R Q *.R R 9.0.0.T U 0.l ; R T *.Q R 7 7 T 0.l T R R U T m.R T R U U '.V <.9.0.O }.m 9 ,.3.' u g ) ~ ) ) s ' %.[ 9 9 = Q V <.>.^.]././.^./.1./.1.1.2.1.2.2.2.2.5.2.2.5.5.5.5.5.5.5.5.5.5.2.2.2.e.8.8.e.1.2./.A _., , m }.}.", +" . K { h u p 5 i ~ ,.c & % 2 H $.3 9 &.> 3 9 8 = Q m.Q T R *.; R U R R l Q R T 0.l U R U U U 0.O G 9 ,.j d f { g ~ Z y , &., $.3 $.$., &.y %.! ~ ] f 5 p 4.3 H V >.]./././././.1.1.2.2.2.2.2.5.5.5.5.5.5.2.2.~.W 6 =.= = = H }.2 % Y .O B ' , 9 m % }.", +" + k { A g p i : ! ' d ` V m.T T l % = $.> &.[ ` [ k 3 8 =.l Q Q l % *.l l Q m.Q l U V w.m K r d f ~ y > 2 R 0.0.V V w.w.w.O O O J O m.0.<.<.<.;.<.U ; } ` Z { { : k H V ^.2././././.2.2.2.2.2.5.5.2.>.9.G m &.9 3 8 | $ - ..l.2.2.8.2.F a ,.[ &.3 2 9 ", +" 6.9 ] h s n e h ~ : c.b.V w.I G H O V V V V R & = 8 > ` k , 3 % *.Q Q *.*.l U V O 9 %.5 f < @.= *.V 0.I m F L A [.( _ B v.v.v.n.v.n.B B _ ( ( A ,.F m m.V W + $ C y g { %.m 0.].1./././.1.2.5./.m.9 k k C $ . ..2.g.g.2.].V P 2 R ]./.[.x ,., k 9 P 9 ", +" + 9 ] d %.r i h 0 %.[ 4 4.A v.n.n.B ( r m P V 0.U V R % $.&.[ k 9 = Q m.R l G K A p 3.3 Q Q O m K d._ v.o.C.q.C.q.N.z.z.q.q.N.q.z.q.q.q.z.N.O.q.q.C.C.o.B b 4.3 Q ).W = ,.5 b r 8 ;./.2./.;.G K k = - !.2.g.2.g.2.;.G L ( B n.o.v.D %.B L v , 9 9 2 @.", +" + 9 ( g u p A i g h @.5 C.O.q.O.O.q.q.O.o.a ' $.Q U *.2 R l =.}.9 ` [ [ L g i [ 8 *.R V 9 _ B o.C.O.r.C.r.r.r.C.O.q.C.q.P.q.N.q.r.C.C.r.r.C.C.O.N.q.N.q.z.z.O.s.v.4 {.l.2.;.*.9 q ' , 3 v 3.k U e.2.2.2.2.5./.O L _ o.q.q.r.n.( n.q.q._ 4.y , , 9 = 9 ", +" + = ( 5 g g i d t h ,.A q.C.o.s.C.C.C.C.q.C.C.v.~ $.T 0.Q Q ; R Q 2 9 3.,.9 *.V <.0.X K A.q.O.C.r.r.r.P.C.r.r.Q.r.q.r.q.r.r.C.s.s.s.C.o.o.o.n.v.n.n.n.o.o.n.C.P.z.z.u.L.f.2././.>.O k v m ;.2.2.1.1.2.2./.=.j n.N.q.q.C.A.] , .G o.Q._ t ,.,.[ &.m ,.", +" - 2 M { ~ p i h : g ,.( Q.v.A.C.C.r.O.C.C.O.r.P.N.A.L.$.m.Q 2 Q *.l 0.0.0.U T R R V G o.C.C.s.C.r.C.Q.P.C.P.q.r.r.Q.q.C.C.C.C.C.o.o.u.u.A.A.v.v.B B B _ / ] ] x g _ q.s.{./.].].].].]././.1./.1./.2./.J 5 o.z.q.r.o.v.^ Z > % ).].[.z.4 N v [ , m 8 ,.", +" . 2 d { i ) g e g e 9 _ o.B A.r.P.q.q.C.C.o.s.C.q.z.N.v.N % l Q % l T T l % R 0.T ).q q.A.o.r.C.C.O.Q.q.r.q.r.C.q.C.P.C.r.C.C.C.o.s.u.o.o.o.u.n.n.v.v.B _ ^ d ! & V _ z.4 1 /.].].:.>.].^.].].1.2.<.K n.z.z.r.o.v.4 ~ Z ` 3 }.; 0.A z.v.' ,.` , 9 = 9 ", +" . U 5 b d : j g f i 3 ( O.v.o.Q.q.C.C.C.C.s.o.A.v.u.P.z.C.4 3 R Q % Q m.Q T R R +.~._ A.A.s.C.C.C.s.s.C.Q.Q.Q.C.Q.C.C.C.r.Q.C.C.C.q.C.C.o.o.o.u.A.A.v.A.v.v.B B ] k.K z.a 7 1.].].>.>.].^./.1./.G _ q.z.r.C.A.B 4 f Z < y @.3 8 9 _ z.v.t v 4.[ 3 8 K ", +" - 1 5 f ) t L q ) ) 9 5 Q.A.o.s.C.Q.C.C.N.N.q.C.A.B _ A.z.z.n.3.2 *.Q *.% Q R Q # /._ A.A.o.C.C.s.C.C.Q.C.r.P.Q.N.z.N.N.N.N.N.N.N.N.N.N.N.Q.Q.P.C.o.A.o.A.A.v.v.A.t 5 z.a @ 2.:.].]./.^././.<.K o.q.P.r.A.v.a 4 x ) s < < ` k ` 5 C.z.a %.k [ &.8 9 ' ", +" 1 q b f p t i c 5 [ , s.o.o.C.Q.r.P.q.z.P.Q.O.N.C.A.c { o.z.q.c }.*.P Q % 0.Q +.e.[.n._ B o.C.O.q.q.Q.N.P.q.n.( _ ( [.[.A A A A A q A A [.A A _ o.o.A.u.u.n.v.v._ n.z.4 +./.>.:.].]./.2.O ( q.r.C.r.n.v.a _ ^ x f h u ! < 4.) v.z.C.] %.,., 3 = 9 q ", +" 7 L b d t t g t i ' = ( O.n.C.C.O.q.N.P.C.q.z.z.q.z.u.c : _ z.z.4 8 m.Q l R Q % 8.$.v./ v.s.r.q.O.r.r.N.q.z.d.I I I I I I I I I I I I I I I I K o.C.o.u.o.o.A.A.o.C.N.` ;.^.:.].>.]./.G v.q.r.C.o.u.v._ _ 4 ^ ] { [ #.f g f _ o.q.A.s v ,., 9 m m g ", +" 1 k b h h h ,.[ r e @.3.N.o.s.o.Q.q.Q.O.Q.N.B &.}.K C.z._ , [.r.z.a } l % m.R O + /.q v.A.o.C.Q.r.Q.Q.N.Q.N.n._ _ _ ( ( M [.[.[.( ( ( _ _ B B B o.Q.O.s.C.s.s.s.C.z._ % >.>.].>.:./.m o.z.r.C.Q.n.A.B B / 4 ^ x } J M / / ( A.N.z._ 0 #.c.k 9 @.9 g ", +" + 9 ] { h q h p p b t k v.C.o.s.Q.O.C.P.z.4 + >.6 2 o.z.z.a , 3.C.z.a } *.Q m.l 2 !.; v.s.C.C.C.C.s.C.q.O.q.z.N.N.z.z.z.z.N.N.z.q.z.z.z.z.z.z.N.Q.C.Q.C.C.q.r.Q.z.v.8 ;.].>.:.:.].9 C.z.r.P.C.o.n.v.B _ _ _ ! 7 /.K B _ _ B s.z.s.] h r 4.[ 3 P k { ", +" + 9 ( f p h g 5 i i g @.r s.o.s.s.Q.C.C.u.D.<._ o.A.r.P.q.z.A.` , o.z.4 P Q % Q l T g.= A.C.r.o.s.s.r.C.q.P.P.r.q.O.q.r.C.C.Q.r.N.r.q.q.s.C.q.r.Q.q.P.r.N.q.q.z.A.` ;.:.>.:.].].9 o.q.C.N.C.o.n.A.v._ B 4 > ..2.I _ _ _ B o.z.z._ ' ~ v v , & % k { ", +" . H ( g ) h 5 { 5 i b c.m B s.o.C.r.N.N.u.z H C.z.q.P.C.r.P.z.C.N > A.N.N l Q *.R P T g.* a O.s.o.C.r.s.C.P.N.N.r.q.r.s.s.C.C.C.C.C.C.s.q.r.N.P.q.q.q.P.r.z.z.A.` U >.:.>.]./.9 o.r.r.q.r.o.o.u.v.v.B v.: ).5.<.[.B B B n.r.N.s.c [ 4., m k m 8 v 5 ", +" - =.( { 5 i { h g i ) c 9 n Q.o.C.Q.P.P.C.z J q.z.z.z.r.C.r.q.z.O.` h z.x R O l Q l Q R 1.6.E C.N.C.s.r.C.C.r.r.r.q.Q.C.C.C.C.C.r.r.C.C.q.q.q.Q.r.P.r.q.q.z.v.$.+ >.;.;.:.2.G o.C.C.q.q.o.o.n.A.v.v.v.a v.~ .F v.B B A.r.N.q._ ' ,.! t ,.` m m K ] ", +" - 2 ( c b.j 5 ~ Z r i { : 9 B Q.s.Q.r.N.N.{.2.0 v._ r.z.C.q.P.q.z.n._ N.4 T Q l R Q U Q Q a.e.&.v.z.q.o.s.C.r.C.C.P.r.q.r.r.q.N.r.q.q.r.r.q.q.C.r.C.C.z.o.g = ;.;.;.;.>./.I n.q.o.C.q.C.o.o.o.A.n.v.v.B v.v.h ( B v.v.o.q.z.o.p k %.#.h ' , 8 m ,.d ", +" + O e ] i %.: f i j 5 { [.@.K s.o.C.C.C.N.A.* ~.(.I C.z.q.Q.z.z.q.Q.s.z.s U 2 Q Q R Q *.O Q .2.1 t.o.q.C.r.C.C.C.C.r.q.C.r.C.r.P.C.C.C.C.O.C.s.q.N.C._ 9 U ;.;.>.<.>./.<._ q.C.C.P.q.C.o.o.n.A.u.n.v.v.v.B v.A.v.n.o.q.q.z._ #.,.n ' L [ @.3 9 %.h ", +" Y h ] h j 5 M { 5 5 { g D 8 ( r.A.o.s.C.N.u.x : / C.Q.N.q.q.N.Q.C.N.C.} 0.P 2 P m.Q l m.O O Q .1.V F _ r.z.q.r.P.q.O.r.C.C.q.q.C.C.q.r.q.q.Q.A.b 9 R ;.<.<.;.<.<.:.>.q z.C.r.q.r.s.C.s.C.n.o.A.n.n.n.v.v.v.A.v.o.z.z.z.v.c.h h 0 L r [ , m 9 p u ", +" 1 %.^ h r i d A i g b 5 i } m C.C.s.C.s.C.q.z.z.z.q.r.P.N.q.r.Q.q.z.Z R 2 2 % Q Q R R P P O 2 2 l W /.~.=.#./ A.o.C.q.N.z.N.q.z.P.r.C.A.v.] 3.H V <.;.<.;.;.;.;.;./.9 C.C.C.z.N.C.o.s.s.o.o.o.u.A.n.A.n.A.n.A.o.C.z.z.O.4 %.%.' j %.' 4.k m 9 q < ", +" 1 3.^ q n j f e d M f d j #.9 A z.s.s.s.r.q.q.N.N.N.N.r.P.P.C.z.N.~ 0.*.2 O % *.Q R Q Q Q 2 P Q O 2 Q R ;.].>.W *.$.[ ' : ~ ) s ! [ 3 = T V <.'.'.'.<.<.;.;.<.'./.w.B C.o.z.r.r.s.s.o.o.o.o.o.o.o.A.A.A.A.n.n.C.z.q.z.B ~ p 4.k r ,.4.4.k 9 F 5 4.", +" + v ] 5 g t 5 d { ] d e f g p 3 _ z.o.C.N.q.P.N.Q.q.P.r.C.z.z.A.y 0.m.2 O P =.O O Q =.; R Q Q Q Q O O 2 2 O m.R V ;.>.>.>.>.).<.>.>.>.<.V V V V V V V <.;.<.<.>.].q q.o.r.z.r.C.C.C.C.o.n.o.o.o.o.o.n.A.n.C.C.N.z.z.A.i n c.! r L ,.%.,., m 9 g ` ", +" + k 5 { d 5 { 5 h { ] d j h ] 4.9 v.z.C.N.P.z.N.C.r.z.z.z.A.s = V O 2 2 P Q *.O P O 2 Q Q *.m.O P O Q R m.Q Q m.O m.T l m.w.0.R 0.V V <.<.V V V <.V V ;.;.'.>.1.G o.C.C.P.N.C.C.s.C.N.C.o.o.o.o.o.n.o.o.o.C.z.P.z.s.f %.' 3.L %.' r L ,.3 8 k { > ", +" + 9 ] g { g i M { f { d h #.q D v 9 _ z.z.N.N.z.z.N.o./ 3.2 R O 2 2 2 = }.=.O % Q O l Q Q 2 Q Q % Q Q R Q Q Q 0.T 0.U U l 0.0.+.U <.V V <.V U U ;.V V ;.;.<.^.>.[.z.C.r.C.C.r.o.s.v./ o.s.o.o.s.o.o.o.o.C.q.N.N.r.4 t %.j t r n %.! 4.k , % k 5 * ", +" - H ^ { M h ) { 5 j f d g b { g { ,.9 _ n.q.z._ 0 k H m.w.O 2 2 }.2 % 2 2 2 % O =.2 l l O % Q Q =.=.Q Q *.P R T l R 0.T R R U U V 0.U U U V V V X V '.<.;.;.].m C.C.C.o.s.C.C.C.N.' V _ O.C.C.o.s.s.o.s.q.q.N.q.B h j i 3.j #.%.0 ,.L ' , }.K f | ", +" + 2 b { ~ : g 5 { g M 5 5 ~ 5 d h f j j y.v.z.` <.R l 2 2 2 P % O O % 2 2 }.2 2 2 O 2 2 2 2 % O P 2 m.O Q m.T w.l Q R U U 0.T U V V V V U U V U X X V ;.;.>.>.[.r.o.O.s.s.C.C.Q.v.@ 2.(.( r.o.C.r.s.C.r.q.z.z.B 5 g p r F ' h r 3.[ L v @.= F { z ", +" . =.b f d : i 5 5 g g b M ~ : 5 b f g d ~ h n.A.{.2 2 2 2 P 2 2 2 2 = 2 }.2 2 H 2 P 2 }.}.2 2 % 2 2 Q Q Q Q Q O R Q R Q R R R R 0.X V 0.U V V V X V V '.<.>.I C.s.s.s.s.Q.O.C.q.{.5./.m B r.o.o.O.r.z.z.z.z.A.] ) 5 i #.' ' 3.3.r %.%.L , @.3.{ z ", +" + *.5 g { ! h 5 b { i i ~ ) d h { g 5 ] ] t i o.u.N *.2 2 O = = 2 2 2 }.O 2 2 2 I 2 2 P O 2 2 Q O 2 Q Q % Q Q Q Q R R R R R 0.l T 0.T U V V U V '.U V V '.>.q q.A.r.N.C.C.O.z.x h.w.A C.q.o.s.q.q.N.z.z.z.v.c h %.p g t ' t ,.9 4.#.' [ @.m 3.: $ ", +" - O { ] 5 i x { b M { 5 i g d h { f f 5 ] f ! d o.s.N 2 2 2 2 2 }.2 2 2 2 O 2 2 }.}.2 2 2 2 2 2 % 2 P Q Q Q Q Q Q P Q R Q 0.R l T 0.U U V V U R V U V V ;.w._ Q.o.C.C.C.r.P.C.3 9 B z.r.C.C.q.z.z.z.z.z.A.b u i D : ' %.p %.n k , ' L 9 8 9 r ! @ ", +" . ; 5 { { { { d M b h i 5 { d 5 M g g { ] b d f ] n.C.b.= P % }.= % 2 = 2 = }.2 H 8 2 2 2 2 2 O P 2 }.O =.*.Q % % m.Q % O Q R R R 0.U U V U U 0.V V V ;.>.G o.o.o.C.C.o.C.O.u._ C.q.r.r.q.q.N.N.N.z.N.A.b %.0 j h g j r ' ' 4.L 3.[ ,.,.9 @.3.u # ", +" . l { c h p { { A 5 b d b f { b 5 { f M { f { d d i v.q.x } O }.= }.8 2 2 }.}.H }.}.2 2 O }.2 }.}.}.2 O O 2 Q O Q Q O P R 0.R R U U R R 0.V V V V V V V >.K r.o.r.C.C.q.C.r.C.q.O.C.q.q.N.q.z.N.z.q.n.{ h n : t i < ,.4.' L 3.L [ k 9 ,.m } 3.: w ", +" - ; { ] f p ~ { f e 5 d { { { { ~ g g d { d d f E i A B z.a ` 2 2 H = 2 = H = = 2 }.= H }.$.8 2 2 }.2 O % 2 Q O % 2 P *.Q m.Q l R V 9.0.U 0.R U V U R U >.( C.o.r.C.C.r.q.q.r.r.C.q.N.N.P.P.z.z.z._ p j e e p h t y 3.%.4.n t [ K [ , [ 3 3 r ' @ ", +" + *.{ ^ g : g { { 5 { p h M f i 5 g c d { f e h i { M ' ( q.s.L.= 2 = 2 }.= H H }.H = H H 8 = 2 }.}.2 }.& 2 % % % 2 P R Q Q Q R U 0.T R T U 7 T V 0.U <.<._ C.C.q.r.r.s.N.N.q.r.r.q.q.z.z.z.z.z.B ' L j j n j t j ~ h %.t #.' , ,.,.,.[ @.m 3.) w ", +" - ; g d ~ : 0 i d d 5 5 h d b { f ) ( ] ] b d d A e { c r M o.N.4 @.% = }.}.8 8 = 2 }.}.}.= 2 2 2 = 2 }.= 2 O Q 2 P Q O % m.R R T 0.R l U 0.7 U V U U ;.w.v.C.C.q.q.q.C.r.q.O.r.r.N.z.z.z.z.n._ d t i Z 3.q { e h s ` [ v ' %.%.< ,.%.v 8 $.%.: w ", +" l { { h g f 5 5 b E b 5 ) 5 d h ] b b b b ( ] f d e f b f h _ C.u.t m }.H 2 2 = I }.2 }.= }.}.}.}.}.}.2 Q O O O O O 2 O Q R R Q Q T R T 0.l R m.R 0.'.I o.o.C.r.q.N.r.q.q.q.q.z.z.z.z.z.u.d ' 5 h ' ! n r h d j ,., ,.%.#.3.,.' 4.v 9 = m r ! @ ", +" l d { d g { 5 i { b d { s t M b b { ] ] 5 5 { b M e d 5 5 ~ : d B q.v.L m = =.}.= = 2 I = = }.2 2 2 2 2 2 Q Q 2 2 O =.P Q R Q O O R Q Q R Q Q T T 0.;.I o.o.C.q.q.N.q.P.z.N.N.z.z.z.s._ d %.%.A t ' h : L j ` ' : %.3.L t ' ,.L v 9 9 8 m r #.w ", +" l f { i A ~ #.[.5 g i d d r 5 ] f { { { 5 5 h b b b 5 d g b ] ~ t ( o.C.v.h m }.= 2 }.H = = 8 = }.2 }.}.}.O 2 }.2 2 2 P P Q Q m.P *.Q R Q l U Q R R V w.n.r.r.q.N.z.q.z.q.q.N.z.r.v.E 4.L h p i h ,.#.r h f y %.~ ,.r ,.' 3.3.,.9 v , 8 m %.u w ", +" l { { { d t h ] M A { f f d d { g d { d h h d p M d h ] ] ^ f d 5 f [.( o.z.A.c , = 2 2 2 = }.}.H }.}.8 }.O 2 2 P 2 2 O O 2 =.Q O Q Q R O Q R m.R 9.0.].q z.q.q.q.q.N.z.q.z.z.o.M j %.h t i h n h g g h e t 3.3.&.,.,.k ,.4.3.[ ,.3.9 = 9 3.! @ ", +" l b ] h h ~ 5 M { t q g ] { h h ~ b M { c h h s h M ] c b M ) d ( c d 5 i _ C.q.u.x < @.2 2 Q I = }.2 2 2 }.P 2 O I }.2 P 2 % Q O P P Q m.l P R T V V 2.=.r.q.P.Q.q.q.z.z.o.B ] r j h e h t t [ 3.q i j r r L ,.[ ' @.3.k 9 L ' 4.,.3 = m ' ! @ ", +" l { { : D s n h i p s f ] b { g d d 5 b M 5 b { { { { d d 5 g e d f f M g f A [.v.C.Q.v.x < 9 8 2 2 O 2 2 O O 2 2 O }.}.2 O O 2 Q Q *.Q R T U w.m.I 9 3._ r.r.q.N.O.q.A._ c h e p h 5 i : d h , K h n r u %.n h ~ ' v j [ K L L [ 9 9 = 8 r Z # ", +" 6 { ] 5 f f e A ~ { b.t x g q p i g 5 5 5 h 5 ] { h ] ^ { e g f t ~ j g M h h j L q B C.q.O.n._ f %., 9 H }.2 }.P O =.2 O O O O O O 2 I H m F r ( v.C.q.q.v.5 h 4 _ ] f : %.) ~ L %.: ! %.h ! %.n %.%.v q n 0 ' 3.t r ,.@.,.L %.' k 9 2 m n ! w ", +" l M ] d ! : h { e : d b d i t j f f h h h g ] ] { b b ] c f E f p 5 b { { ~ b i : r A M M _ n.C.q.O.C.n.B ( M i L K ,.F K F K 3.n [.b _ B o.q.z.N.o.v._ g %.%.K [ 4.t h : j 5 ! h j r : 4.r ' t d t h q h ,.t t 4.4.3.L ' 4.,.%.,., 9 % 8 %.! # ", +" 6 { ] M g p q d g 5 d ~ { d n h f b ~ d { M { { ] M p { d e f r A g { 5 M i { e M b h 5 d p t t { _ n.o.o.C.z.q.q.q.q.C.C.C.q.q.q.q.z.q.o.n.B _ 5 i q 4.%.n e M h n n p i q r ! r j b d L n ! ! r 4.h j %.' 4.%.3.4.,.%.%.! [ ,.3.v @.= m L t @ ", +" 7 5 { { i h e d { b h ' i d g { c b g { ] ] g 5 5 { c t q d d e M ~ t D ~ p 5 h b g h 5 { c.n h y.j 5 ^ b [.( _ _ _ B v.B _ B _ [._ ( A q %.r 3.,.i ~ 4.i h h j i ' L 5 i r Z t ' %.t h r %., ' ' %.t [ [ s h D ~ e 4.y < L ' @.v k 3 % H q : w ", +" 6 f { h : ~ 5 i { { 5 i s ( 4 ( 4 e _ _ _ _ 4 / b b x ) e b 5 q q b b { g b.) p b g 5 { d d h b d g d h p 0 g 5 h p q 5 : %.q ' 4.p Z L r ' h i ~ g i d g L 5 Z p %.3.p p j ! #.%.L #.~ e b f b ( ] ^ e h b ( M ( _ 4 b.! 3.' [ k k > 2 m %.! w ", +" U g x h : #.p h s : n A / b g b M h ( _ ^ b ( ] _ _ 4 4 _ _ ( ] ] ] { M ] o p 5 i h i b { { e 5 i h 5 f ! h { f 5 i 5 g D h d j n Z d D r 5 f j h y.p 5 f p e ' d { t c.h h 4.j c { { 4 ( ( b A b { M M q 5 ] d ( ( _ B ^ ' [ < 3.@.8 = 9 3.! @ ", +" 1 p g p g p q d ~ e n d d ] B v.A.o.o.u.o.o.A.v.v.B 4 4 ( _ _ _ _ _ / b d { f j d d d ~ ) g 5 5 ) h i i ) j A b g b ( { b c c 5 b f d : t p Z ' d e r ~ 5 q n g i h D g b M b ( ( ] j 5 M B _ a n.u.u.o.o.s.C.r.r.q.n._ v.c 9 v ,.@.= }.9 k ,.w ", +" 1 p g i i p p e i f h ! ] o.P.C.q.z.q.N.z.z.q.z.N.O.C.C.o.A.B B _ _ ( b ( _ ( f { ( b h ~ d h d { ( ( b { b ( _ ] _ _ _ ( _ ( b ( _ { b c g c M ( ] e d { d e ] ] ( c d b b M _ _ v.n.C.q.z.z.z.z.z.z.z.z.z.z.N.C.v.o.s._ B h k k k ` & }.K ! w ", +" 1 p ~ h ) t %.g g : n q n.C.u.s.s.C.r.z.z.C.C.C.C.C.C.N.N.z.P.N.C.u.v.B 4 ^ ] ] ] ( _ _ 4 _ ( ( ] 4 _ { { ] ( ^ _ _ / / 4 _ 4 ^ ( ] ( ( _ { ( ] ] / _ _ _ _ _ 4 ^ e %.< b v.n.q.q.q.z.z.z.z.z.N.r.C.P.C.o.o.A.B x C m n.A._ ] ,.4.@.3 & }.L ' @ ", +" 1 i f h d g : h h ~ ,.M s.v.A.o.s.C.A.5 _ r.C.s.s.o.s.o.s.s.s.o.o.r.q.q.s.4 h h q d { f f f D g ] 4 a a v.u.u.u.r.o.s.s.s.z.C.q.o.A.o.v.v.a _ ] ] ^ d e g b h 4.) #.q B q.z.N.z.q.q.r.q.q.C.s.o.u.o.n.A.v.v._ 4 x {.+.t.s.B ^ < ,.k } 8 H ,.' @ ", +" 1 p { d g ~ e h ~ 0 K _ o.v.o.s.s.C.Z 1.m o.s.o.o.o.s.o.A.A.A.n.v.v.a ] v.C.^ j L #.h j g : D B o.o.r.q.q.r.r.N.N.q.r.s.C.r.C.C.C.o.o.r.r.o.q.C.o.v.] : : q ~ ' j L ( z.q.r.P.N.Q.s.o.o.o.o.n.n.n.A.v.v.B a _ _ _ 4 > 9 r.v.4 y , 4.3 2 8 t.< @ ", +" 1 j x d h f g 5 d y 9 _ A.A.s.o.o.C.x i.H C.o.u.s.o.o.A.A.o.A.A.v.v.v.Z 3 B A.d n j d t j 5 n.Q.r.r.P.P.C.C.C.N.q.s.n.o.n.n.A.v.B a _ B B B _ _ { v.u.: ! i 5 5 p q o.r.P.f G M C.s.o.o.n.o.o.u.A.n.v.v.v.a _ _ _ ^ ! ! o.v.4 ' &.m } % m 3.! @ ", +" 1 i ] ~ Z p d t : 3.k _ o.A.s.s.C.N.a ..$.C.C.s.o.C.r.s.o.o.n.o.o.u.v.A.{.9 C.] p { d n %._ q.s.r.C.C.u.A.s.4 ` 0 n.o.A.A.v.v.B B _ B _ 4 ^ f t $.2 B _ h A e b #.[.q.C.N._.+ /.A N.s.o.C.C.o.o.A.A.A.o.A.B _ _ _ / ) g s._ ] #.` 3 = 2 m %.< + ", +" 1 p { e p : h r t ! k b s.o.C.r.N.N.a p.m r.Q.C.C.Q.v.v.r.o.s.a _ o.A.n.^ 3 v.a j d M r q o.o.r.C.r.C.o.u.C._.).2.[ C.u.v.v.B n.v.a _ _ _ _ _ ( f 7 K n.d g 5 g ,._ q.s.s.r.x 5.9 z.o.C._ ^ o.u.n.A.v.< q v.B _ B _ { ] o._ c ' ,., 3 & m 0 < - ", +" 1 0 h h f ) p ) { ' 9 b C.o.C.C.Q.q.a j.8 q.P.r.s.' 8 2 f z.x 8 m , A.v.v.' _ n.d p { h j o.s.q.Q.C.o.C.s.o.o._ j.B.A.o.v.v.v.x _ v.a a _ _ _ _ _ ,.K u.~ 4.0 Z K v.o.s.C.u.D.~.A z.Q.z.L.9 q.C.C.C._.*.( v.B B B _ { _ o._ d ,.,.v $.| 8 L 4.@ ", +" 1 ) c h : f i 5 ] ' 9 { P.u.s.C.C.z.a j.m q.q.z.^ G _ _.= 4 } A v.& A u.A.o ] u.{ j d f [ n.N.z.r.q.O.Q.r.C.z.a ..H n.C.o.o.A.* c n.v.B B a _ B a ~ ( B h %.h t r C.s.r.r.u.z /.A z.B ,.= k s.: ,.B D.<.( A.v.B B B { B u._ h ,.,.v 3 2 9 r y - ", +" +.p { d ~ g e i { : 9 3.o.o.C.Q.N.z.a p.8 q.z.z._.m C.v.}.4 & ( O.} q C.u.x 5 u.d f e j 3.n.N.q.N.P.q.N.r.q.z.{.2.q z._ ,.{ A.} G t.B / 9 G _ B B ] n.B h q i ' %.r.C.N.q.O.a ~.H q.} 8 | F f H } F N U _ A.v.v.v._ ( u.A._ j v 3.[ 8 & 9 r < + ", +" 1 p { h g f s h ~ s 9 K n.Q.C.q.r.z.a j.$.q.z.z.A.D.G =.V K k.J m 8 v.o.o.4 5 o.] t e h L B z.N.N.N.N.N.q.Q.A.@ 9.n.z.x C J M } O % 3., 9.` _ v.B ^ n.B 5 5 t ' 5 q.q.z.r.z.v. .I C.& _ Z &.` O 8 9 c.3 o.A.v.v.B _ _ r.n._ 4.[ L v m = m 0 4.- ", +" 1 i b g j g t u j d [ k _ N.s.P.C.q.C.x _ r.N.N.z.A.o < o s ~ Z g A.Q.u.o.a p C.c #.i t , ( z.q.N.z.N.N.Q.N.x ^.q z.Q.^ v Q ' 8 ( _.% }.[.z.v.B _ ( o._ M { e v M q.C.z.z.4 ; 2.%.z.* %.D.3 N =.p _ < G o.o.v.v.B / B r.v.^ ,.,.[ , 3 8 8 L y - ", +" 1 ) f 5 j ) h h t f ! m ' C.C.P.Q.q.q.z.z.P.N.N.z.z.z.z.z.z.z.z.z.N.C.r.o.A.{ o.( p ~ : [ 5 z.P.z.N.N.z.N.z.L.5.H ] A.z 9 $ 3.& q ` }.& ,.a B v._ _ C.4 p q A 4.q q.q.z.z.x =.K o.z.f H I 3.a 9 9 _ _.F o.o.A.n.v.v.o.u.B x 4.k , , } 2 m 3.< @ ", +" +.j f g ~ j h f f h ' 9 k _ N.C.N.P.r.Q.q.Q.z.z.z.z.z.z.z.N.q.Q.C.C.r.C.o.A.v.C.b j r { 3.4.r.z.z.N.q.N.q.z.c 9.<.9 u.@.G I e , O I ( _.9.8 B v.B v.A.5 h p p j v C.z.z.z.C.C.q.N.z.q.v.n.o.q.n.B o.u.o.C.o.o.C.u.r.o._ a j [ ` [ v = = m 3.< - ", +" 1 p b h j g i j M h t 3.3.4.B P.N.N.Q.N.P.q.z.z.z.N.z.z.z.q.N.C.o.r.Q.C.C.C.q._ d j j e d ` B z.N.q.N.q.q.N.o.v.v.o.q.n.B v.o.n.B v.o.o._ _ v.v.v.r.B n r %.3.3.k 5 z.z.q.z.N.r.q.z.q.N.z.z.P.q.z.C.C.N.q.N.q.z.N.v.b _ _., ,.,.,., 3 2 H %.< @ ", +" 1 p { ~ s %.j t i g g g ' [ j _ A.o.N.z.z.z.z.z.z.z.z.z.z.N.N.z.z.z.N.z.z.N._ r h 5 A 5 { < h q.z.N.z.z.N.q.N.N.q.q.C.N.r.O.C.r.q.C.C.o.o.C.o.n.q.s.b h t t [.n L , ( r.z.z.z.z.z.z.z.z.z.z.q.N.z.N.N.N.N.r.o._ { q ( ] ,.k [ [ ,., $.% 9 K 4.@ ", +" + #.{ h n t h p g g i i f c.h { E.( ( B o.C.q.q.z.z.z.z.z.z.z.z.z.q.C.v._ ( g %.h M h i n %.L 5 C.z.z.q.q.z.N.Q.C.r.N.q.q.Q.C.r.C.C.C.C.O.N.Q.q.C.( %.L ! r j ' ! h 3.i / _ B o.q.q.q.z.q.q.N.q.C.o.v.B _ ( q q M ] 0 F ,.,.4.` , m m 8 H ,.< . ", +" 1 %.~ i %.j g d { M q A i h i { ~ #.A { b ( ( ( B B _ v._ v._ _ _ ( ( b r d _ ( / ^ d b d ] h , q n.z.z.z.z.z.N.q.q.q.Q.q.s.r.N.q.z.z.z.z.z.C.v.e h e b.h d j h f 5 ] p ' r K %.q [.[.M A [.A A [.A A [.5 h n M 5 L , 3 , 9 ,.4.[ 9 = % m %.' . ", +" 1 u { 5 5 g i e { i h h ) M d i : j i ) ( M h ] ( M h 5 ( ( [.M M ( ( ( e h M b b i 5 M 5 b c ~ %.q ( _ _ v.C.q.z.z.z.z.z.N.z.z.C.C.o.v._ ( [.( b ( ( c p i n 3.%.j j h h 3.n h L h h h n n q g d ~ N d r j K K L [ ' ' [ ,.v , k k & Q m h y . ", +" 1 0 { d 5 ~ q { g p 5 i : g { { g g h h h q A { 5 5 5 A ( ] { h 5 f h q i h p i h i [.%.#.5 h i { i d i q d.b 5 b M ( _ _ ( ( e 5 A A A M ( ^ d b g t L : i n [ L t ' c.c.4.,.r q i h n n d i c.4.' 9 K [ 4.k k ` k ,.,., K < ` &.9 $.& H r y - ", +" 1 p { ~ ~ p i f d d j ~ ~ i d f f i g ~ t A h ) ~ 5 E { q c { f d h p 5 t #.) q i d j 4.: ) q j h g ~ ) f b ] ] e i 5 d e 5 b d ] ] g b { f b.! ) : %.p g #.%.r ! ' u p q j #.' L t : ! ' ' ! ' k ,.y ' 4.! %.3.,.,.,., ` ,., 4.y , 8 $.m 3.y . ", +" 1 j f g ~ 4.4.j h f ~ h { ] ( ] { ( ] b ( b g 5 i 5 f ~ i h g d h %.p { ~ g j h { ~ h 5 5 p p h h i b ) g h g f j h h { i ,.g d h h : c.h p u e i u j j h t i g h t h 0 q h i ' %.j ' , 3.4.' h q h h 5 [.b i M ( 5 r ' ,.k [ , @.3 3 m 9 %.y . ", +" 1 #.g g f Z 3.i h i d e h ( ( _ / _ _ _ ( ( ( ( ( _ 4 b c d c d j %.s e h h g 5 ] ~ d h i h g d g #.5 g h f f h h t A _ D ' #.%.e i 5 ~ b.p t j g ' L %.h d j : ~ j h h ' p t ' q d b b M f h M b { d 5 e ~ t A { f ( _ < ,.4.[ N 3 }.= 9 #.[ - ", +" V p x i i g { 5 g d g 5 c 0 _ v.v.v.v.B B a _ 4 ^ _ 4 _ 4 4 _ / / x ^ { ~ u 5 h 5 5 j : g ) i d 5 p n ~ f d { t q ~ 3.( ( h : 3.r t : j h d : j p p 5 h i g t r ) j r j g d f ] 4 M g A q A p ] / 4 _ B a a a v.A.a / ( x ' ,.' 4., 3 2 m L y - ", +" 1 j M e g p n i f ~ j b 5 a q.N.P.N.q.N.C.q.C.s.o.s.A.A.v._ / / ( ( / ^ _ x i [.5 ) j i 5 f d t 0 g p A ] M ( ^ ] ( c 4 4 ^ 4 ] b ] c { g 5 e %.#.' L ' p h t g g r i { ( M h [.M { ^ _ B n.o.o.s.C.N.z.P.z.z.q.C.C.N.4 _ c y [ &.9 } }.m %.` + ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Preview_3310.xpm b/xgnokii/xpm/Preview_3310.xpm new file mode 100644 index 0000000..5cc2815 --- /dev/null +++ b/xgnokii/xpm/Preview_3310.xpm @@ -0,0 +1,556 @@ +/* XPM */ +static char * 3310_xpm[] = { +"127 320 233 2", +" c None", +". c #816AA2", +"+ c #71668B", +"@ c #62717B", +"# c #558076", +"$ c #4B726F", +"% c #47735A", +"& c #436274", +"* c #4F6B7B", +"= c #567688", +"- c #677F83", +"; c #617F93", +"> c #728790", +", c #628A9E", +"' c #768E9F", +") c #686E6D", +"! c #717677", +"~ c #6E7271", +"{ c #777A79", +"] c #7A7E7D", +"^ c #7F8382", +"/ c #6C90A6", +"( c #5B859C", +"_ c #3C576A", +": c #5B6365", +"< c #5B5F5E", +"[ c #646462", +"} c #646868", +"| c #6F6E6C", +"1 c #757673", +"2 c #848888", +"3 c #819097", +"4 c #769B9E", +"5 c #7A97AB", +"6 c #537E97", +"7 c #4E7992", +"8 c #49738B", +"9 c #5F5D89", +"0 c #555B5C", +"a c #898D8A", +"b c #8A8F8F", +"c c #939591", +"d c #909594", +"e c #969A99", +"f c #9A9F9E", +"g c #9979C5", +"h c #427B81", +"i c #4D565A", +"j c #8D9BA3", +"k c #A0A4A4", +"l c #A6AAA8", +"m c #ACAFAD", +"n c #B0AFAB", +"o c #9EA09D", +"p c #6392A5", +"q c #505251", +"r c #628EA6", +"s c #6593AC", +"t c #6B96AE", +"u c #6D9BB4", +"v c #739EB7", +"w c #75A3BC", +"x c #73A2B6", +"y c #6D9AAE", +"z c #86A6B2", +"A c #7EA2A8", +"B c #97A6AF", +"C c #B6B0B1", +"D c #B7B9B9", +"E c #B2B5B4", +"F c #436A82", +"G c #4C8D93", +"H c #588195", +"I c #7BA4BC", +"J c #8BB3CA", +"K c #83AEC6", +"L c #7CAABE", +"M c #8BB7CF", +"N c #BDBEBC", +"O c #AEB2B3", +"P c #376E75", +"Q c #94BCD0", +"R c #A3C7DD", +"S c #8DBBD5", +"T c #7BA6C2", +"U c #95C2D6", +"V c #9CC2D5", +"W c #9CC5DC", +"X c #A1CADE", +"Y c #8FB3BE", +"Z c #C0C2C2", +"` c #529397", +" . c #41494D", +".. c #344A5A", +"+. c #7DABC4", +"@. c #A4CCE3", +"#. c #B2D4E6", +"$. c #93BED8", +"%. c #9DCAE2", +"&. c #ABCEE4", +"*. c #ADD2E6", +"=. c #ADD3EA", +"-. c #B4D6EA", +";. c #C4C7C5", +">. c #55839C", +",. c #3B4243", +"'. c #2D3F4D", +"). c #5C89A3", +"!. c #B5DAEC", +"~. c #95C3DB", +"{. c #BAD6EB", +"]. c #A6D2E6", +"^. c #BBC0BE", +"/. c #2F3233", +"(. c #D1E9F8", +"_. c #BEDFF2", +":. c #6A96B2", +"<. c #BADAEA", +"[. c #868EBD", +"}. c #5B8C9C", +"|. c #272A2B", +"1. c #AABDC5", +"2. c #131A22", +"3. c #0D0E11", +"4. c #24323F", +"5. c #BCDCEE", +"6. c #5D95A4", +"7. c #363B3B", +"8. c #86B3CC", +"9. c #B0C7D0", +"0. c #C9CCCB", +"a. c #55999F", +"b. c #C5E3F3", +"c. c #5E8EA8", +"d. c #BFD4DF", +"e. c #CECECE", +"f. c #CED2CE", +"g. c #A1AFB8", +"h. c #D2D2D2", +"i. c #659DAD", +"j. c #4A5154", +"k. c #D2D6D4", +"l. c #AC71D0", +"m. c #5BA2A9", +"n. c #C2DEF0", +"o. c #B8D6E6", +"p. c #CDCED3", +"q. c #40515C", +"r. c #C4E1ED", +"s. c #75A5C3", +"t. c #D7D9D8", +"u. c #444444", +"v. c #DBEEFA", +"w. c #6F9EBB", +"x. c #ADCDDC", +"y. c #85B6D2", +"z. c #6696B2", +"A. c #64A4AC", +"B. c #76AAC4", +"C. c #DCDEDD", +"D. c #47858D", +"E. c #6DA3C0", +"F. c #D4E8EA", +"G. c #E1E2E2", +"H. c #545656", +"I. c #4A4D4D", +"J. c #1B2630", +"K. c #699DBA", +"L. c #7EAECB", +"M. c #E0E4E0", +"N. c #669BB4", +"O. c #68A5B5", +"P. c #000000", +"Q. c #A3B4DC", +"R. c #ADDDEB", +"S. c #B7E3F0", +"T. c #A5D3EB", +"U. c #E5E7E6", +"V. c #75AEBE", +"W. c #A8CEEA", +"X. c #1F2123", +"Y. c #7CBAC4", +"Z. c #EAEAEA", +"`. c #86C2CE", +" + c #6CADB6", +".+ c #81B2CD", +"++ c #8DBEDB", +"@+ c #CBD4D2", +"#+ c #6CB4BA", +"$+ c #75BAC0", +"%+ c #EEEEEE", +"&+ c #B3DBE6", +"*+ c #9DCEE8", +"=+ c #ABD6EE", +"-+ c #709B84", +";+ c #5A898B", +">+ c #395D47", +",+ c #85BAD4", +"'+ c #E5F2FB", +")+ c #548767", +"!+ c #5F9873", +"~+ c #17181A", +"{+ c #F8F8F8", +"]+ c #67A27C", +"^+ c #6DAA82", +"/+ c #8DC3D8", +"(+ c #FFFFFF", +"_+ c #6EAE82", +":+ c #6FAD84", +"<+ c #79A98E", +"[+ c #6EAE86", +"}+ c #DFEDEF", +"|+ c #CFE4E0", +"1+ c #A9DCE2", +"2+ c #F2F2F2", +"3+ c #7AACCB", +"4+ c #F6F4F2", +"5+ c #83B298", +"6+ c #95BEAA", +"7+ c #5F90AF", +"8+ c #99D3DF", +"9+ c #91A4CD", +"0+ c #94C6E2", +"a+ c #9B95D0", +"b+ c #AC83D8", +"c+ c #9FD9E4", +"d+ c #51BCD1", +"e+ c #22C2D4", +"f+ c #38BED3", +"g+ c #67C3D7", +"h+ c #83BEDC", +"i+ c #91CDD9", +"j+ c #B97EDB", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . + @ @ @ @ # # # # # # # # # # # # # # $ # $ # $ # $ # $ $ $ $ $ $ $ $ $ $ % $ $ % % % $ % & $ $ @ + + + ", +" + @ @ @ $ $ $ $ $ $ $ $ * $ = @ = @ = @ - ; - - ; - ; - ; > ; ; > > , ' > , > , > , ; ; ; ; ; ; ; ; = = = = = * * * * $ $ $ $ $ $ $ $ $ * @ + + ", +" . @ @ $ % $ $ $ $ * $ * * * * = @ = @ @ @ @ @ @ @ @ ) @ ) ) ) ) ! ~ ~ ! { { { ] ] ] { ] ] ] ] ] ^ ^ ^ ] ^ ^ ] > ^ > > > > > > ' ' / , , , ( ; = = = * * $ $ $ $ & % $ @ + ", +" . $ % _ & & & * * & $ * * @ : : : : : < < < : < : < [ [ [ } ) | ) | ~ 1 1 1 { ] ] ] ^ 2 2 ^ ^ ^ ^ ^ ] ^ ^ ] { ] ] ] { ] ] ] ] { ] { ] ^ ^ 2 > 3 3 4 5 4 / , ; 6 7 = 8 * * & & & % & . ", +" . 9 $ _ & & & : * $ 0 0 : : [ < 0 : : < < < } ) ~ ~ ! 1 { { ] ^ ^ ^ 2 2 a b c c d c d e d e e c d d d c e e c d c d e e c c c e f f e f e e e e c e c d c b d d d 3 3 3 ' 4 5 / , ; * * * % $ + ", +" g # h $ $ & & & & i 0 0 : [ } } } [ } ) ~ ~ ~ { ^ ^ ^ a a 2 a a a a b d b 3 3 3 3 3 3 3 3 3 3 3 ' 3 ' ' ' 5 3 3 j 3 3 j j j j j j k k l l m n n m m n n n m l l k k o o e f e e d j 5 5 p 7 = 8 * & % ", +" . # = = * & & i q 0 < } } ) ) ) ~ 1 ! { ] ^ ] ^ ] ! ! - @ - @ - - = ; ; ; ; , , , , , r r s s t u v w v x y v v v u v v v y v x x z 5 5 5 5 j A j j j f B l m C D D D E m m l l l k o e j 5 5 , 7 * F & % ", +" ' G ; = * * * 0 0 : } ) ! ~ 1 ] ^ ^ ^ ] ~ ~ : : & * * = = = H H H ; ( , , r p / / / t t t y 5 x x I J K I v I L L L L K K K K J J J M M M M J J K L L I v 5 5 5 5 j f l D N N D E E O m l o e 3 5 / H 8 F P * ", +" g G ; H = 8 * } [ } } ) ~ { 2 a ^ | : & & & & * 8 = H H ; ( ( ( , , r , / / / t y y u v y v I x I K Q R S T v L K J J J M M Q Q Q U V V U W W W R R R R X X X W U Q M Y z A B B E Z Z D D E m m l d ' t ( 8 F P . ", +" ` H H = 7 = ! ) } } ! ] b d ~ ..._ * = = 7 H 6 H H ( ( ( , r , r p / s t t u u v v x w I L I +.J J @.#.$.I u L M S Q $.Q U U V W W W %.R &.@.@.X &.&.&.X @.*.=.*.#.#.*.-.@.R J z j B ;.Z D D E E O d / u ; = F P ", +" ' >.H H 6 = ! 1 } } ! a o 2 ,.'.& = 7 6 H 6 H 6 6 H ( ( ).).r r r s t s y y u v w v w I L L +.L K K Q #.!.%.+.u w M Q $.U V U ~.W W W R X X @.&.&.&.*.*.&.*.*.*.*.#.-.#.=.#.!.{.-.!.].Y B ^.;.^.^.D D n > 5 u H 8 F = ", +" ` ( H >.H - ] ~ ) ! b m ^ /.& 7 7 7 7 6 H H H H ( ( ( ).).r r s s s t t y v y v I w I w L L +.+.K K Q (._.Q u :.x J Q Q U V ~.V W X W W R @.@.&.&.&.&.&.&.#.#.#.#.#.-.#.#.-.-.!.-.-.<._.=.Q D ;.Z ^.^.^.k - w s H F P ", +" [.}., ( , H ] ^ ] ] c m d |.F H 8 = 7 7 6 H >.( ( ( , , r r r r s s t t y u y v v w I I L T +.L +.K K &.1.'.2.3.4.( M Q U $.U V W W X X X @.@.@.&.&.&.&.*.#.*.#.-.-.-.-.!.!.!.!.!.!.!.!.<.5._.V D ^.;.Z Z ;.> / +., 7 h = ", +" 6.6.p p p - b ^ ^ d O l 7.* H 8 7 7 6 H H ( ( ( ( }.).).r r r s s s t t y u u v x w w w L L +.+.+.K 8.&.9.> * _ _ ( K $.~.V V W W W R R @.X @.@.&.&.&.&.*.-.*.-.-.-.-.!.-.!.!.5.!.<.<.!.!.!.!._.1.E Z 0.0.0.m ; K w ( 8 h ", +" g a.s t v , > b 2 b l Z ! '., 8 7 6 H H H H ( ( ( ( }., ).p r p s t t s y u u v v v v I I I L +.K K K M #.(.b.%.T c.s +.$.$.$.W V V R R @.@.@.R R @.&.&.&.&.#.-.-.-.-.-.-.<.<.<.5.5.<.5.5.!.!.!._.d.O D e.f.0.0.> y 8.s H F ; ", +" y 6.y x I H b d a e E Z 0 8 6 7 6 6 H ( H H ( ( ( ( , )., r p s s s s t t y y v v v I I I L L +.+.K K Q {.(.-.$.w c.s +.Q $.V V V W R X @.R @.R &.&.&.&.#.*.-.=.#.-.!.!.!.<.!.5.!.<.<.<.5.!.!.5._.<.g.C ;.h.e.f.d ( J v ).= h ", +" i.i.v L I ; d a b o D E j.H 8 7 6 H H H >.( H ( ( ).).r ).r r s p s t t t y v u v w v I I L +.+.K K K Q 5.(.{.U v c.s T $.$.$.W W W R R R R @.@.&.&.&.&.*.#.#.-.-.!.-.!.-.<.!.!.!.5.5.<.<.<.<.5.5._.9.m N k.k.h.O = M K r 7 h ", +" l.m.y x K v > e 2 b l ;.a .H = 7 H H 6 H ( H ( ( }.}.).).r r r s s t t t y y v v v w I I I L +.+.K K 8.Q n.(.-.U v c.c.I Q $.W W W W X R R R &.&.&.&.&.*.*.*.-.-.-.-.!.{.-.5.{.!.!.<.<.5.5._.<.<.5._.o.l E p.k.h.Z - I 8.t H 8 ; ", +" g m.y w J / > e b e O ;.: q.>.7 7 6 H H H H ( ( ( }., r r r r s s t s t t y y v v v w I I L +.+.K K K 8.V r.b.{.X s.c.}.x S U V W V W R R R @.R @.&.&.&.&.*.*.-.-.-.-.{.<.!.<.5.5.5.5.<.5.5._.5.5._.n._.g.m 0.t.h.0.> y Q v ( 8 = ", +" y i.v L K , b d b f D ^.u._ 7 7 H H 6 H ( ( ( ( ( , )., r r p r s s s t t u v u v v I I I L +.L +.K K K V n.v.5.S t >.( w.Q $.V W W W R X X R @.&.&.&.&.&.*.#.#.-.-.-.<.!.{.!.5.!.5.5.5.5.5.5.5.5.5._.b.9.l Z k.k.k.d , Q x , 7 h ", +" i.y x K K , d d d k Z E 7.& 6 7 H H H 6 H ( H ( ( ( , ).r r r p s t s t y y v v x w I I I L L +.+.K K J V (.9.F _ ....F w S U V W W W W R X @.@.&.&.&.*.*.#.*.#.-.-.-.-.-.<.5.!.!.5._.5.<.5.5.5.5.5.n._.9.l ^.k.t.t.l ; U T s 7 h . ", +" l.m.y w J L ; e b d m ;.k 4.= 7 7 H 6 H H H H ( ( ( ( , r r r p p s t s t y y v v v v w I L +.L +.K K K J R (.x.>.F _ ..8 u S $.V V V W R @.R @.@.X x.&.*.*.*.#.#.-.-.-.-.<.!.<.5.5.5.n.5.5.5.5.5._.<.5.b.d.B E k.t.k.N > U K t 6 8 ; ", +" g i.u I J v > e d e E 0.] '.H 7 6 H H H ( ( ( ( ( ( )., r c.p s s s t t t u v v v w I I I I L +.+.K K 8.M R (.v.{.y.z.6 >.u Q $.W W W R R R @.@.@.@.&.&.#.&.&.*.-.#.-.-.-.!.5.{.{.<.5.5.5.5.5._.n.5.5._.b.b.g.n 0.t.t.e.> J M u H 8 = ", +" y y u L J / b e d f ^.;.< q.( 7 6 H H H H ( ( ( ( ( ).p r p r p s t s y u u u v v x I I L L L +.L K 8.K M x.(.(.{.W w.).>.u S $.W W W W R R X @.&.&.&.&.&.&.*.#.#.=.!.-.-.5.{.5.!.5.<.5.5.5.5._.5.5.n.5.n.(.1.k ;.t.t.k.3 L U v ).8 h ", +" y y x K J p 3 e d k ^.Z .& H 7 H 6 H H ( H ( ( , }.).r r s p s s s s y y u v v v v I I L T L +.K K K K J R (.(.{.~.w ).>.t M U V W W W R @.X @.&.&.@.&.&.&.*.#.*.*.-.-.<.!.{.5.{.5.<.5.5.5._.n._._.5.5.5.b.9.k N t.t.t.k v W I r 7 h g ", +" i.u x K J ; b e e l Z E 7.= H 8 6 H H 6 H ( ( ( ( ( }., r p p p s t t y y u x v v w w I L L +.K K K K 8.J x.(.(.5.~.w ).>.t M $.W W R R R @.R @.@.&.&.&.&.*.*.#.#.-.-.!.{.!.!.{.5.5.5.5.5.5.5._.n.5.5._._.b.d.k E t.t.t.O / X K s 7 h . ", +" l.A.u w J K ; e e e E ;.k /.= 6 7 6 H H H ( ( ( ( ( }.).r r p s s s s t y y u v v x I I I L T +.L +.K K K J &.(.(._.@.B.}.6 t S $.V V W W X R R @.@.&.@.&.&.#.&.*.#.-.#.-.-.<.{.!.!.5._.5.5.5.5.n.n._._.n.5.b.5.k m k.t.C.^., W J t H h ; ", +" g m.v L J L > o e e D e.2 4.( 7 6 H 6 ( H ( ( ( ( , )., r p r p s s t t y u u v v I w I I L +.+.K K K K K M &.(.v.{.K r 8 7 t M ~.V W W R R X @.&.@.&.&.&.=.*.*.#.-.-.-.-.<.!.5.{.5.5.5.5.5.n.5.5.n._.n.5.n.r._.B l ;.C.t.;., Q Q u ( 8 D.", +" [.i.w.L M L > f d f D e.| '.( 7 7 6 H H ( ( ( ( ( ).).r r r r p s t t y y y y v x w v I I I L L +.K K K J M x.v.1...'.'.4.& z.M $.V W W X R R @.&.@.&.&.&.*.&.*.#.#.*.-.!.{.5.5.<.5.<.5._.5.5.5._._.5.n.5._.n.b.1.k Z C.t.e.> J W w , = h ", +" 5 i.u K M I 3 e d k Z ;.j.q.( = 6 6 H H H H ( ( ( , r r r s s s s t t t u u v v v I w I I L L +.K K K K 8.M &.(.9.>.F _ _ F z.M $.V W W W R X R @.&.@.&.*.*.&.*.*.-.#.-.<.!.{.5.5.<.!.5.5.5.5.5.n.n._.n._._.n.b.1.k D t.C.k.3 L X +.r 7 h ", +" y i.x J Q v b o e l ;.Z 7.* ( 7 H H H H H ( ( ( , ).).r r p p p s s t y u y v v w x I I L L T +.K K K K 8.J &.(.v._.$.E.>.6 s S W W W W R R @.R @.&.&.&.&.*.*.*.#.#.#.-.!.<.-.<.{.5.<.n.n.5.n.5.5._.n.n.n._.b.b.d.k D t.t.t.j y X K t 6 h ", +" m.y T M Q / d e e m 0.m /.= 6 7 H H H H ( H ( ( ).).r p p s s s s t t u v u v v v I w I I +.+.K K K K 8.8.J &.(.(._.W w ).>.t M ~.W W W R X @.@.&.@.&.&.&.*.#.*.#.-.-.-.!.!.-.{.5.5.5.5.5.5._.n.5.n.n.n.n.n.5.b.d.k O h.C.C.O r W J u H 8 ", +" l.m.u L J J , d e o m 0.d |.( 7 7 H H H ( H ( ( ( ).).r r p s s p s t y u v v v x I I I I I +.L K K K K K 8.M x.b.(.{.W v ).>.:.S $.V W W R R @.@.&.@.&.R *.*.#.*.#.-.-.-.-.-.{.<.5.<.<.5.5.5.5.n.n.n.n.n.n.n._.b.n.l m e.C.t.;., V Q v ).8 ", +" g A.y +.M J = e e o D f.] 4.( 7 6 6 H H ( ( ( ( ( ).r r r p s p s t t y y y v v I w I I I I K K K K K J K 8.M R F.(.5.$.w ).6 t Q ~.W R W R R R R @.&.@.&.&.&.*.#.#.#.#.{.-.!.!.5.{.5.<.5.5._._.5.n.n.n.r._.n.n.b.b.g.l ;.G.C.f.' M ~.I r 7 ", +" [.m.x K M K - f e f D f.} '.( 7 H H H ( ( ( ( , }.)., r r s s s s t y u y v v v I I I I L L L +.K K K K 8.8.M R b.(.5.%.+.c.>.t S W W W W W R @.@.@.&.&.&.&.*.*.*.#.-.-.-.{.<.{.{.5.<.<.5._.5.5.5.n.n.5._.n.n.5.b.(.g.k N C.C.k.' +.X L r 7 ", +" t i.I K Q I - e e k ^.0.H.q.( 7 H 6 H H ( ( ( , ).r ).r r p s s s s t u u v v v v I I w L L T K L K K K K 8.M V b.v.9.5 ( 8 7 :.S V W R R X R X @.@.&.&.&.*.*.*.#.-.-.-.{.{.{.5.!.{.5.<.5.5.5.5.n._.5.n.b.n.b.b.b.(.1.k D t.C.t.j v @.K t 6 ", +" i.y L J V y - o e l Z Z I.& H 7 H H H ( ( ( ( ( }.}.r r p s s s t t t y u v v x I w w I L T K K K K K 8.8.8.M V (.B J.J.J.J._ K.$.W W R W R X @.@.@.&.@.&.&.&.*.*.#.-.-.-.{.5.5.5.{.5.5.5.<._._.n._.n._.n._._.n.r.(.9.l D k.C.C.g.t X 8.u H ", +" m.y L J V / > o e m ;.D 7.* 6 7 6 ( H ( H ( ( , ).).r p r p t s s t u y v v v v w w I I T L L +.+.K K K 8.J M W b.9.* '.4.4.F x $.W W W R R R R @.@.&.@.&.&.&.&.*.#.-.-.<.{.5.{.<.<.5.5.5.5.n.5.n.n.n.n.n.r.n.b.b.(.x.k E h.C.t.1.r X M v >.", +" m.u +.J V ( b o f E 0.l /.; 7 7 H H H H ( ( ( , ).).r r s s s t t t t u v u v x I w I I I L +.+.K K K J 8.J M $.n.(.5.M u ).>.v $.W W R R X X X R &.&.&.&.&.&.&.*.#.-.-.{.{.-.<.<.<.<.5.n._._.5.n.n._.b.n.n.n._.r.(.{.k m 0.G.C.Z r V V s.}.", +" l.m.x L Q Q = d e f D 0.e /.H 8 H H H ( ( ( ( ).).r r r r p s s s s t u v v x I x v I I L I L +.L K K J K 8.J M $.{.(.{.$.E.).).x $.~.W W R X R R @.&.@.&.&.&.*.*.#.*.#.-.{.{.<.{.<.<.5.5.5._.5.n._.n.r.5.n.n.n.b.b.(.n.f m ;.C.C.e.' M W B., ", +" g m.x K U J * f f f E e.^ 7.( 7 6 H H ( H ( ( , }.).r r r p s s t t y y v v v v I w I I T T +.+.+.K K 8.J J M M $.o.(.<.U w r r L $.W W W R R X @.@.&.&.@.&.&.&.*.#.#.#.-.{.-.{.5.5.{.<.5.n.<.5._.n.5.n.n.n.n._.n.b.b.(.B l ^.C.C.t.5 K X K t ", +" [.i.w J W I * f e k D 0.| ,.H 8 6 H H ( ( ( }.).)., r r r s s t t t y y v v v v v w I L I L +.+.+.K K K 8.J M M Q *.b.<.~.T p s +.$.V W W X R R @.R @.&.&.&.*.*.*.*.#.-.!.-.{.{.{.5.5.5.5.<.<.n._.n.n.r.n._._.n.n.b.b.(.g.m D C.C.t.B L &.8.u ", +" 5 i.I M V y @ k e l ^.;.< ..H 6 H H ( ( ( ( ( , }.r r p p p s s s s t u y v w v I x w I I L +.+.K K 8.J 8.J M M M x.(.b.%.L.s s K $.~.W R R W R @.@.@.&.@.&.*.#.&.-.-.#.-.{.{.{.5.5.{.5.5._.<._.5.n.n.n.n.n._.b.n.n.b.(.1.l D t.M.M.g.v &.J u ", +" y N.L Q X p - k e l ^.Z I...H = H H ( ( ( ( ( ).r r r p s s s t t t u u v v w I w w I L L +.L K K K K K J M J M Q R b.g.= * F r K V W W W W W X @.R @.@.&.&.&.*.#.*.-.#.-.!.!.<.!.{.5.5.5.n.5.5.n._.n.n.r.b.b.b.b.n.b.(.9.k E k.M.C.^.u &.Q w ", +" v O.K Q V , > o f O ;.N u._ H 7 H H H ( ( ( ).).).r r r p s s t t y y y v v v w I w I +.L L +.K K K K K 8.J 8.M M ].3 P.P.P.P._ S W V W X W X R R @.R @.&.*.&.*.#.#.#.#.-.-.{.!.{.<.{.5.5.5.n.5._.n.5._.n.n.n.b.b.n.b.(.x.f D e.M.C.0.5 @.V B.", +" A.u K V V H 2 o f O ;.O 7.* 6 6 H H ( ( ( , ( ).).r r r p p t s y t y u v v w I w I w I L +.L K K K K 8.J J M M 8.W Q.@ '.4.'.; S W V W W X W R @.@.@.&.*.&.&.*.*.-.#.-.-.!.!.!.<.<.5.5.5.n.n.5._.5.n.n.n.n.n.b.b.b.b.(.d.k E 0.M.C.h.5 W R +.", +" A.w.8.V Q = 3 f f O ;.m /.* 6 6 H H ( ( ( , ( ).).r r p s s s t t t y u v v I x I I I I L +.K +.L K K J K 8.M M M Q R.S.~.w N.B.Q U V W W X X R @.@.@.&.&.&.#.*.*.*.#.-.#.{.{.{.5.5.{.5._._._.5.5.n.r.5.n.n.n.r.b.n.n.b.r.k E ;.G.C.t.z U R L ", +" l.i.w J V M = d e f E ;.o /.= 6 6 H H ( ( ( ( , r , r r s s s t t t t t u v v v w w I L L L +.L K K K K 8.J 8.M M M $.R *.$.T v K $.W W W R W R X @.R @.&.&.*.*.*.#.*.#.#.-.-.{.-.{.5.<.5.5.5.5.5.n.n.n.5.n.r.n.b._.n.n.b.b.f E ;.G.C.M.B J &.K ", +" l.m.w M R Y * e e f D ;.d /.H 7 H H ( H ( ( ( )., ).r r r s s s t y u u v v x I I I I I +.+.+.+.K K 8.K 8.J 8.M M M Q R *.$.+.w J U U W W W W R R W @.&.@.&.&.&.*.&.*.#.-.-.{.<.{.-.<.<.<.5.5._._.5.5.r.n.n.n.n.b.n._.r.b.(.j E Z C.C.G.g.L *.J ", +" g i.I Q V L @ f e k N ;.^ 4.( 6 6 H ( ( ( ( )., }.r r p p s t t t u y u v v v v w I I I +.L L +.+.K K 8.J 8.8.M M M M V @.~.K T Q U U V W W R R @.R @.@.&.&.&.*.*.&.#.#.-.#.-.{.<.{.<.{.<.5.5.5.n.5.n.n.n.b.n.n.b.n.n.b.b.(.B O ^.M.M.M.1.v *.Q ", +" [.O.L Q R y @ o f k ^.;.1 ,., 7 6 ( ( ( ( ( , }.).r r r p t s t t y u v v v w v w I I L L L +.K K K J 8.K 8.M M S M S Q W ~.K J $.V W W W W R X @.@.@.&.&.&.&.&.*.#.*.#.-.-.{.<.<.{.<.5.5.5.5.5._.5.n.5.r.b.r.b.r._.5.n.b.v.B l N C.C.G.;.y *.Q ", +" [.u +.V R y @ k f l N Z [ ..( 7 H H H ( ( ( ( , r p p p s s s y t t y v u x v v I I I T T +.+.+.K K K K 8.J M 8.M M M Q V $.J M $.W V W W R W R @.@.@.@.&.&.*.&.*.*.*.#.-.-.{.{.{.<.5.{.<.<.5.5.5.5.n.n.n.n.b.n.n.b.5.b.r.(.g.k N t.M.G.f.5 T.W ", +" v u +.V W , - k f l ^.Z H.q., 6 H ( H ( ( ( , ).r r r s s t t t t y y y v v I I w I I L L +.+.K K K K K 8.M 8.8.M M M S Q ~.S $.U V W W W W W X R @.@.@.&.&.&.&.&.#.#.-.-.-.!.-.5.{.<.5.5.5.5.5.n.5.n.b.n.r.n.b.b.r.n.b.n.v.1.f N t.G.G.t.5 X X ", +" v x K V X H ^ k e l Z Z I.& ( 7 H ( ( ( , ( , }.r r r p s s t t y y y y v v v v I I w I L L +.+.+.K K 8.K 8.8.8.M S S $.$.$.Q $.V W V W W W X X R @.R @.&.@.&.*.*.*.#.-.!.-.<.!.5.<.!.5.5.5.5.5.5.5.5.n.n.r.b.r.n.n.n.n.b.(.9.d N h.U.M.C.5 Q &.", +" u O.8.W V = b o f l Z ^.u.* ( 6 H ( ( ( ( , , r r r p s s s y t y v y v v v I w I I I I T L +.K K +.K K K 8.8.M M M S S Q Q Q U $.V V W W W W X W R @.@.&.&.&.*.*.*.*.#.-.-.-.-.{.{.<.<.5.5.5._.5.5.b.r.n.n.b.b.b.b.b.n.b.b.d.b D p.U.G.G.B J &.", +" :.x 8.R Q = b k e E ;.E ,.* >.6 H ( ( ( }., ).r r r r s s s t y t y v v x v w v w I I I T L +.+.+.K K K 8.8.8.8.M M M M Q $.S $.V ~.W W W V W R R R @.@.@.&.*.&.*.#.#.#.-.-.!.!.{.<.<.5.5.5.<.5.5.n._.n.b.b.n.b.b.b.n.n.b.b.d.3 E e.G.M.G.B K =.", +" N.V.M R M * c f f O ;.m ,.H 6 6 >.( ( ( ( }.)., r r s s s t s y y y u v v v I v I I w I L +.+.K K K 8.K J 8.M M S S S S $.$.$.V $.V ~.W W %.%.@.X @.@.@.@.@.&.&.*.*.=.-.-.-.-.{.{.{.5.{.5.<.5._._._.n.n.n.n.n.b.n.n.n.n.b.b.b.b E e.U.G.G.O L !.", +" O.I Q R M * o k f O ;.l 7.H 6 6 >.( ( ( ( )., ).r r p s s s t t y y y v v v v w I +.8.$.$.$.$.$.~.%.W W %.W X X @.@.@.W.W.].=.=.=.=.*.=.!.!.-.-.!.!.!.-.!.5._._.!.!.*.#.=.-.-.-.{.5.5.5.5.5.5.n.n._.n.n.r.n.n.b.b.b.b.n.r.(.(.d n 0.U.G.G.^.I -.", +" N.V.$.X L * o f f E 0.o 7.H 6 H ( ( ( ( , , r r r r p p s s t y y v v v v v x w I Q #.I ; > ; ' , / > , ' ' ' ' ' ' ' ' ' > ' ' ' ' ' ' j ' ' ' 5 ' ' 5 ' ' 5 z Y 5 R *.-.-.-.{.{.!.<.!.5.<.5._.5._.n.n.n.n.n.r.b.b.b.n.b.r.(.j l ;.G.U.G.0.5 #.", +" O.L V @.v : k f f D 0.d ,.).7 6 H >.( , ).r , r c.r s p t t t y y y u v x I w I L &.Q. .: : i J.X.|.i : J.i - ! - > > : 7.@ > /.|. .3 ! .] > 4.|.4.] j ] 4./.'.^ _ V =.#.!.-.!.-.!.-.<.!.<.n.5.5._.5.n.n.n.n.b.n.b.n.b.n.b.(.j k ;.G.U.G.k.z -.", +" O.Y.W &.y @ l f f D 0.a ,., 7 6 H ( ( , ( , r , p p p p t t t t y u y v v v v I T &.g...3 g.j : X.|.3 j i g.B 3 d 3 B g.: f g.7.i g.j i .g.B ,.|.: 9.;.1.i |. .! & Q =.#.o.-.<.!.5.{.5.5.!.5.n.5._.n.n.n.b.n.n.b.b.n.b.b.b.v.B o Z C.Z.M.t.z &.", +" l.O.K V X , @ l f k ^.0.] ..r 7 H ( ( ( , }.r , r s s s s s t y y v y v v v w v I +.&.g. .> > 3 j q.X.3 j 0 g.0 X./.X.[ g.} j g.! g.g.,.J.j.^.B '.7.B g.> ^.j 4. .- : Q =.#.-.-.{.!.5.{.5.5.5.5.5.5._.n.n.n.r.n.r.b.n.b.b.b.r.(.g.e Z C.U.M.C.B R ", +" l.O.J X X 6 ~ l f k ^.0.~ q., 7 H ( ( ( ( )., ).r p r p s t y t y y u v v I w I I T &.g. .3 : I.B j ,.> j : B i X.J.|.: g.@ j g.g.1.{ J.|.q 1.B 7.@ 0.j i B 0.@ '.) q.Q *.#.-.-.-.-.{.<.{.5.<.5.5.5._.5.n.n.n.n.b.n.n.b.b.b.b.v.1.d N C.Z.M.G.g.U ", +" l.O.`.R &.7 ! l f k Z 0.} q.).6 H ( ( ( , )., p r r p s s t t t t u v v v v v w w T &.g.q.' } X.~ g.j 3 3 } g.: 4././.} g.! j g.0 j g.@ |. .O B j.B 9.1.^.1.1.B .@ q.Q *.-.-.-.-.!.-.{.<.<.5.5._.5.5.n.n.n.r.n.n.n.b.b.b.r.b.(.1.d N t.U.M.U.O Q ", +" l.O.8.x.R 8 ^ l f l Z ;.< _ ( 7 H ( ( ( , ).).r r p s s s t t t y y y v v w x w I L &.Q. .3 : 2./.3 B j 3 q.j j B j j B B 0 j g.,.7.3 1.^ i g.g.^ ^.g.: ) : j Z > ] q.M =.#.!.-.-.-.<.-.!.<.5.5.5.n._.n.n.n.n.n.n.b.b.b.b.b.b.(.9.d D k.Z.U.G.D J ", +" g +S R V & 2 l f k Z ;.H.& ( 7 H ( ( ( , }., r r s p s s t t t u y y v v v v w w T R 1.'.i ,.2.2./.i i j.|.7.: } : : : ,.|.i i 4.J.7.: @ j.< : 0 : .J.4.J. .@ @ } ..M -.=.#.-.#.{.{.-.!.<.5.5.5.5.n.5.5.n.n.n.n.n.n.b.n.b.b.(.d.d D k.Z.U.M.Z J ", +" l. +`.R V & b l f l ;.;.I.& ( 6 H ( , , , , r r r p r s s y y t y y u v v v w I I w U W * ...._ _ _ _ _ _ _ _ .._ & _ & * F F & * * F & & * F F 8 8 8 6 ; H H 7 = 8 = V =.-.#.-.-.{.-.{.5.5.{.5.n.5._.n.r.b.r.n.n.b.b.b.b.b.b.(.d.d E h.Z.U.M.0.J ", +" g +$.x.Q & d k f l ;.^.u.* H 6 ( ( ( , ( )., ).r p r s s t y t y v v v v v I w w I L +.T s.s.T B.+.+.+.+.K +.L..+y.y..+y.M M S S S S $.++~.$.~.W $.W %.%.%.%.X @.&.&.@.#.-.=.-.-.-.{.5.{.<.<.5.5.n.5.5.n.n.n.n.b.b.r.n.b.b.n.(.r.d O 0.U.U.U.@+Y ", +" g V.Q #.K _ o o o l ;.^.,.* 6 H H ( ( , , ).r p r s p s s t y t u u v v v x w x I w w w L L T +.+.+.+.+.K K K 8.8.J M S S S S S S $.$.~.$.W V W W @.W X @.@.@.@.W.&.*.=.=.#.-.-.-.-.-.<.<.5.5.<.5.5.5.n.n.r.n.n.n.b.n.b.b.b.b.(.r.a m 0.U.Z.U.k.z ", +" g #+U #.z _ o f f l 0.D 7.* 6 H H H ( ( ( r }.r r p s s t t t y y v u v v w w I I w L I L +.L +.+.K K K K 8.8.8.8.M M S S S S $.Q S Q W W W W W W @.X X &.&.&.&.&.&.*.*.#.=.-.#.-.-.-.<.!.<.!.5.5._.<.5.5.n.n.n.n.r.b.b.r.b.r.(.F.a m ;.U.U.U.t.z ", +" [.V.V #.w i k k f l 0.O 7.= 6 6 ( ( ( }.}.r r r p s p t t y t v u v v v w x w w w I L +.+.+.+.K K +.K K 8.8.8.M 8.M M Q S S Q $.Q U U U W W W X W X X @.&.&.@.&.*.*.#.#.*.*.-.-.#.-.-.!.<.!.<.5.5.n.5.n.5.n.n.n.b.n.n.n.b.r.b.b.(.b m ;.U.Z.Z.C.B ", +" [.V.W !.t : l f o m 0.l /.H 6 H ( ( ( ).r , r s s s t s t y y v y v v x w w w I L L I L +.+.L K +.+.+.K 8.8.M M S S S S Q $.S U $.U U U U W W W W X @.@.X @.&.&.&.*.*.*.*.#.-.-.#.-.-.!.<.{.!.<.<.5._.n._.5.n.n.n.n.r.r.b.b.b.b.(.d l ;.U.Z.U.G.Y ", +" [.$+W -., : l k f m e.k /.H 6 H ( ( , )., r p s s p t t t u u v v v v v x w w I I L +.+.L +.+.K K K 8.8.K 8.8.M M M M S S S $.U Q U U V W W W X X @.@.@.@.&.&.&.*.&.*.*.#.*.-.-.-.!.!.{.!.<.<.5.5._.5.5._.5.n.5.n.b.n.b.b.b.b.b.(.d l Z G.Z.U.U.g.", +" [.Y.R #.; : l f f l f.f /.; 6 H ( , , p r r s s s t t t y v v v v x w I I I L L I L +.K K +.K K K K K 8.8.8.M M M S Q $.Q $.$.~.~.U W ~.W W W @.X @.@.@.&.&.&.*.#.*.#.#.#.#.-.-.!.!.!.!.<.!.5._.5.5._.5.b.n.n.r.n.b.n.b.b.n.n.b.(.j k ;.G.Z.Z.M.g.", +" I Y.R *.; : l f f O e.b /., H ( , r r p s s t y t y v v x x I w I I I T L L +.+.K K K K 8.8.8.8.M M M M S S S Q $.$.U U W W V W W W X W %.X @.@.@.&.&.*.*.*.*.*.*.#.=.-.-.-.-.!.<.<.<.<.5.<.<.5._.5._.n.n.n.n.n.b.r.n.n.b.r.n.b.(.f k ;.G.Z.U.U.E ", +" v K X #.= @ l e f O e.^ 7.).H r p p s t t y u v u v v w w L I I L +.+.K K +.K K 8.8.8.8.M M 8.S Q S $.Q $.U U V W V R X R X X @.X @.@.@.@.@.@.=.*.*.*.#.=.-.-.-.-.-.!.!.!.<.<.5.5._.5.n.5.5.5._.n.n._.n.n.n.b.n.n.n.r.b.b.b.n.5.(.B k Z C.%+Z.Z.1.", +" I Y.x.*.* @ k e f O f.] .r p t y y y u x w w I I I T L +.K +.+.K 8.8.M M M S S S S $.$.$.$.U ~.W W W W W X R X @.@.&.&.&.&.*.&.*.*.*.&.#.#.#.-.!.-.!.!.!.!.5.!.5.5.5.n.5._._._.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.b.n.n.b.n.b.b.<.-.b.g.l Z C.%+U.Z.Z ", +" w 8.*.*.* 1 l f f O k.^ q./ y w I w w L +.K K K 8.8.8.M M M S S $.$.~.W W W X W X X X X X X @.].].*.*.*.*.*.*.*.*.#.*.#.#.#.#.#.#.#.#.-.!.5.!.<.5.5.n.5.<.5.5.5._.n.n.n.n.n.n.n.n.b.n.n.b.b.b.b.b.b.b.b.b.(.b.r.b.b.n.b.b.5.&.@._.g.l ;.C.%+Z.%+;.", +" x `.*.@.& ! k e f O @+2 j.t I K 8.+.L 8.8.M S S $.~.W ~.$.W %.W X @.].].=.].].=.=.=.=.#.*.R.&+!.&+!.!.!.!.S.5.!.!.!.&+&+&+&+&+&+&+&+!.<.5.5.5.5._._._.5.5.5._.5.5.5._._._._._.b._._.b.b.b.b.b.b.b.b.b.b.b.n.b.b.r.n.<.(.b.*.W ~.5.g.l ;.C.%+Z.Z.e.", +" +M &.X & ] k f k E k.^ q.t J V W M K S %.*+T.T.T.=+T.T.T.T.].].].X X V V V Q Q Y Y Y Y z z A A 4 4 > > > > > > - -+- - - - - # - - - # - # - - - - - - - - -+> 4 4 4 4 4 A z z Y Y Y Q V V x.*.#.&+!._.b.b.b.(.b._.!.b.*.8.M ++=+1.l ;.t.Z.Z.Z.h.", +" +Q #.R _ ^ o k o E k.] j.y M *.5.o.@.!.!.Q L A 5 / > ;+- # # $ $ % % % >+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+% >+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+7.7.7.7.7.,.,.>+>+ .q.0 $ $ # - , 5 M =+W.M w L.,+!.1.m Z t.%+Z.Z.t.", +" +M *.V q.2 k e f E k.{ q.x Q {.(.v.'+1. .7.7.7.7.7.>+>+>+>+>+>+>+>+>+>+% % % % % )+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+!+!+!+!+!+!+!+!+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+% )+% % % % >+>+,.>+>+7.7./.|.|.~+3.3.~+& Q M +.B.y.=+1.l Z t.%+Z.Z.M.", +" +Q -.Q _ c f e f E f.{ q.x Q n.v.'+{+i X.7.>+>+% % % % )+)+)+)+)+!+!+!+!+!+!+!+]+!+]+!+]+]+]+]+!+]+!+!+!+!+!+!+]+]+]+]+]+]+]+]+]+]+!+]+]+]+]+]+!+]+]+]+]+^+]+^+]+]+]+]+]+]+!+!+!+!+!+)+)+)+)+)+% % % % % >+>+7.X.P.P.> -.B.B.y.T.1.l ;.t.Z.Z.Z.G.", +" +/+&+Q q.d f e k D k.1 q.L V r.v.(+;.|.>+>+% )+)+)+!+!+!+!+]+]+]+]+]+]+]+]+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+]+^+^+^+^+^+^+^+^+^+_+_+_+^+^+^+^+^+^+]+]+]+]+]+!+!+!+!+!+!+)+)+)+>+>+X.P.,.!.M s..+=+1.l Z t.%+%+Z.U.", +" +U !.M q.c f e f E @+~ i T W b.'+(+j J.>+% )+!+!+]+]+]+^+^+^+^+^+^+^+^+:+:+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+:+:+_+:+:+_+:+:+_+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+_+_+^+^+^+^+^+^+^+^+]+^+]+]+!+)+>+7.3.J.x.~.s.L.T.1.l Z t.%+%+Z.Z.", +" +U -.J q.d f e f E k.{ i w R b.'+{+<+/.% )+]+]+_+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+_+_+^+[+_+_+^+]+]+)+>+|.X.V W s.+.T.1.l ;.t.Z.%+Z.Z.", +" +U !.L q.e e e f D k.] q.I &.b.'+'+] >+)+]+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+^+]+!+% >+|.Q W B.L.W.1.l ;.k.%+%+Z.Z.", +" #+U !.I q.d e e f D t.^ q.I R (.}+'+-+>+!+]+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+]+)+>+|.Y X +.+.*+1.l Z t.Z.%+%+Z.", +" #+U !.5 q.e e e f D t.^ .L &.(.}+}+> % ]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+!+% 7.Y X B.+.@.1.l Z k.Z.%+%+Z.", +" #+W !.v .e e e f D k.2 ..L &.(.}+M.-+)+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+z x.B.B.%.1.k Z t.%+%+Z.Z.", +" #+W 5.5 i o f e f D k.d .I -.F.}+|+-+)+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% ,.z 1+L T *+1.k Z k.%+%+%+%+", +" l.#+X !./ i k f e f D t.e '.I -.(.F.|+-+)+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+A ].V.B.@.1.l ;.k.%+%+%+%+", +" l.#+X !., i k e e f D C.k .I o.F.F.@+-+!+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+A x.+.B.%.1.l Z k.%+%+%+2+", +" l.#+X !./ i o f e f D t.l .v 5.(.F.@+-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+A 1++.B.%.1.l Z t.%+2+%+2+", +" l.#+X !., i o f f f D t.m .w 5.F.F.d.-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+A #.K T %.1.k Z k.%+2+%+%+", +" l.#+x.!., 0 k f e f D t.D .w n.F.|+@+]+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+,.4 &+K B.%.1.k ;.k.%+2+%+%+", +" l.#+&.!.; : k f f f D t.^.q.y n.F.|+@+-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 &+.+B.%.1.k ;.h.%+2+%+%+", +" l.#+&.!.= : l f f f D t.Z j.y _.F.F.@+^+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+4 !.K B.%.g.l ;.t.%+2+%+%+", +" l.#+&.-.; : k e f f D t.;.i / _.}+|+@+-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+4 &+J B.%.g.l Z k.%+2+%+%+", +" l.#+&.!.H } k e e f D t.e.i / n.F.F.@+]+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 &+J B.%.g.l ;.t.%+2+%+%+", +" l.#+&.!.= } l e e e D t.h.: , n.}+F.@+^+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 &+J B.%.B l ;.k.%+2+2+2+", +" l.#+&._.= : k e e f E t.k.: ( b.}+F.d.-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+4 <.M s.%.B l Z k.%+2+2+%+", +" l.#+#.!.= } k e e k E t.t.@ ; _.}+}+|+-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 &+M B.%.j l Z h.%+2+%+%+", +" l.$+*.&+= : l e e f E t.C.! H _.}+}+|+-+!+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 <.M +.@.j l Z k.%+2+2+%+", +" l.#+#.<.= } l f e e O k.C.^ * -.'+}+|+<+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+>+4 &+Q B.@.3 n ;.t.2+2+2+2+", +" g $+#.!.= : k e e e m k.C.b 8 <.'+}+|+-+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+4 #.Q L.W.b m ;.C.2+2+2+%+", +" l.$+o.!.= : k e e f O k.C.f * o.'+}+|+<+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+!+)+>+4 *.M 3+&.2 m ;.t.2+2+2+%+", +" l.#+#.!.= : k e e e l h.C.l * #.'+}+|+<+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+% >+4 &+J L.@.2 l ;.C.2+4+2+2+", +" l.$+#.!.= : k e e e l h.C.O * &.'+}+|+5+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+,.A &+M L.&.^ O ;.C.2+2+2+%+", +" l.#+#.-.7 0 k d e e l k.C.D * X '+}+|+5+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+A &+M .+&.] O ;.C.2+2+%+%+", +" l.$+-.#.7 0 k e e e l k.C.;.* R '+}+|+5+!+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+>+z &+M .+x.{ O ;.G.4+2+2+2+", +" l.$+o.!.H 0 k e e e k f.G.0.* V '+F.|+5+!+[+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+z *.M y.x.{ E ;.G.4+2+2+2+", +" l.$+-._.H i k e d e k f.C.e.* Q '+}+|+5+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+% >+z &+M 8.R { D ;.U.{+2+2+2+", +" l.$+#.!.( q.f e d e k 0.C.t.@ J v.F.|+6+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+% >+Y <.Q ,+9.] N 0.U.{+4+%+2+", +" l.$+-.&+( .f e d e k f.C.t.- I v.}+|+6+!+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+Y o.S $.1.2 N 0.U.4+4+2+2+", +" l.$+#.!., .e e d d o 0.C.C.^ 5 v.}+|+6+]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+Q <.S $.g.2 ^.0.Z.4+2+2+2+", +" l.$+-.!.t ..e e d d f 0.C.M.b / v.}+|+6+]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+Q o.M U B ^ ^.0.Z.4+2+2+2+", +" l.$+#.!./ ..d e d d f ;.C.C.j , F.}+|+6+]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% >+V <.M %.j ^ Z 0.%+{+2+2+2+", +" l.$+&+!.y .d e d e e Z C.G.l ; b.}+|+1.]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+^+!+>+% R o.8.%.d a Z f.%+4+{+2+2+", +" $+!.!.v ..b f d d e Z C.U.E = n.}+|+6+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+>+& 9.#.8.&.^ c ^.f.%+4+4+2+4+", +" l.Y.&+!.x ..2 f d d d ^.M.G.Z - #.}+|+1.]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+!+>+% X x.M &.! e Z h.2+{+4+2+4+", +" Y.!.&+I ..] o b d d E C.U.p.@ R }+|+9.^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+^+!+>+$ x.#.8.&.| k Z k.2+4+{+4+2+", +" $+&+5.K ..{ k d d d m C.G.t.> Q }+|+9.^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+]+!+>+# x.x.8.x.[ m Z t.2+{+4+2+4+", +" $+-.S.J ..@ k d d d m t.U.C.3 z '+|+;.[+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+^+!+>+;+#.x.8.1.< D ^.C.{+4+4+2+4+", +" $+&+5.M _ 0 k d d d m t.M.M.j z v.|+9.[+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+!+>+;+x.R S g.[ ^.Z G.{+{+{+4+{+", +" $+&+!.M _ i k d d d l k.G.U.g.' F.|+@+<+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+^+)+>+-+x.V ~.j ~ Z ;.G.{+{+{+4+4+", +" $+o._.$.& j.f d d d k f.G.U.D > b.|+9.<+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+!+>+4 x.Q %.2 ^ Z ;.U.{+4+{+4+4+", +" $+#._.Q & .e d d d f 0.G.U.0.> r.|+@+[+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+^+)+>+A &.U X ~ e Z ;.Z.{+4+4+4+2+", +" $+*.5.U F '.b f b d f ;.G.U.t.' x.|+9.5+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+% A 1+Q x.: l ^.0.%+{+{+2+{+%+", +" $+&+5.~.8 4.2 f d d e Z C.G.G.3 V |+@+5+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+_+^+)+% z x.S x.< O D e.2+{+{+{+{+U.", +" $+!.5.U 6 '.! f d d e D C.G.U.k Y F.9.5+]+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+)+% L x.U 9.[ N E k.2+{+{+{+4+G.", +" $+-._.U ( ..: f d d e O t.G.U.E A F.@+5+]+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+)+$ Y V @.j { ^.D t.{+{+4+2+{+r.", +" Y.&+5.~.c...i f d d d l h.C.U.0.' d.|+5+]+_+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+# Y V R.{ a D D G.{+{+{+{+{+d.", +" Y.&+n.U 7+.. .e d d e k 0.G.U.C.' x.|+6+]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+)+# Y V *.[ k E ^.U.{+{+4+{+{+x.", +" Y.&+n.U z._ ..d e d d k ;.G.U.U.j 1.|+6+]+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+% # Q 8+1.< O E Z Z.{+{+{+{+4+x.", +" Y.&+r.V s _ 4.a e d d e D G.U.U.O z F.1.!+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+% ;+Q 1+B ) D E 0.2+{+{+{+{+%+V ", +" Y.&+5.R :.& 4.] e d d e E C.G.U.0.A |+9.]+!+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+!+% ;+Q x.> ^ D O 0.4+{+{+{+{+Z.V ", +" 8.&+5.V z.F 4.) f d d e m t.G.G.t.j d.|+!+)+!+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+]+!+>+;+V R ) c E O h.{+{+{+{+{+F.V ", +" 8.&+5.W y 8 '.0 e d d e k e.G.U.G.B 9.F.-+)+!+]+^+^+:+:+:+:+:+^+:+:+:+:+:+:+^+:+:+^+^+^+^+:+:+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+^+^+^+^+^+:+:+:+:+:+:+:+:+:+:+:+]+!+)+>+, W g.< l O E t.{+{+{+{+{+|+R ", +" K &+5.V y 7 .. .d c b d f ;.G.U.U.1.B v.5+% !+^+^+^+:+:+:+:+:+:+:+:+:+:+:+^+^+^+^+^+^+^+^+^+^+^+^+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+]+!+% ,.i.X j } D O ^.U.{+{+{+{+{+x.&.", +" 8.&+n.W u 7 _ 4.2 d d b d O C.U.U.k.j r.g.>+)+!+]+]+]+^+^+]+^+^+^+^+^+]+]+]+]+]+]+]+]+]+]+]+]+]+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+:+^+^+^+^+^+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:+^+:+:+:+:+:+:+:+:+:+:+:+^+^+]+!+)+>+,.x o.! 2 E E ;.%+{+{+{+{+4+R -.", +" 8.&+_.W u 7 F 4.! e b b d l h.U.U.U.B 9.r.>+>+% )+)+!+!+!+!+!+!+!+!+!+]+!+!+!+]+!+!+!+]+!+]+]+!+]+]+]+]+]+]+]+^+^+]+^+^+^+^+]+^+]+^+^+^+]+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+]+^+^+^+^+^+^+^+^+^+^+]+]+!+!+% >+/.P K 9.I.m E E e.2+{+{+{+{+}+Q b.", +" J &+5.W u 7 F '.< e b b d f ;.G.U.%+Z g.'+Y >+>+>+% % % % )+% )+)+)+)+)+)+)+)+)+)+)+!+)+!+!+!+!+!+!+!+!+!+!+]+!+!+]+]+!+]+!+]+!+]+]+!+]+]+]+]+]+]+]+]+]+]+]+]+!+]+]+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+!+)+)+% % >+>+_ >.W b < N l D t.{+{+{+{+{+F.S (.", +" J &+5.X y 7 F .. .d d b d e D C.U.U.C.B (._.K p ;+# # $ % % % % % % % % % % % % % % % % % % % % )+% )+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+)+# )+# )+# # # # ;+!+;+;+;+;+}.6.N.*.j.d E l Z Z.{+{+{+{+{+d.~.(.", +" J &+_.X y 6 8 _ '.2 d d a d l k.U.U.Z.j I @.M L.3+3+s.s.s.s.w.w.w.w.u u u z.s r , H H H H H ` ( H ;+H ;+= D.# ;+= ;+;+;+;+;+;+;+;+;+;+;+;+;+;+}.;+}.}.}.p }., p , 6.p i.y O.E.w V.w V.V.B.V.3+Y.L..+.+y.`.,+++++M !.B q O l m f.2+{+{+{+{+{+V x.(.", +" K 1+5.W y 7 F F '.{ e b b d f 0.U.U.%+D F s u u :.:.v w E.w w.w w s.s.s.B.T +.B.3+3+3+3+L.L.3+3+3+3+3+3++.L.3+B.+.B.3+L..+L.L..+.+L..+.+3+.+.+.+y.y.`.M `.S `.y./+S S S S S $./+~.S ~.~.~.~.~.W ~.X %.@.].].*.*.=+v.} ^ m l D C.{+{+{+{+{+%+Q -.(.", +" 9+1+5.V t >.8 F ..0 e b b d d D C.U.U.C.@ 8 s r c.r s s t t y u u u u v v v w w w w w w w w T T T +.K L +.+.+.+.+.K K .+K .+.+.+y.8.8.y.8.,+M y.S M S S $.Q $.U U U ~.~.W W W W X %.%.%.%.@.@.@.@.].].=.=.*.=.].b.1.H.l l m Z %+{+{+{+{+(+F.M _.(.", +" K 1+n.W y H 8 F & .d a b d d l k.U.U.%+g.& ).p r s s t :.:.u :.v u u v v v x v w w w w w w w +.+.+.+.+.+.+.L.K K L..+K .+.+8.8.8.y.M y.8.M S M S S S $./+S ~.$.~.~.~.~.~.%.%.%.%.%.%.@.*+].@.@.].W.=.].=.=.=.=.b.) ! m l O f.4+{+{+{+{+(+d.~.b.(.", +" 9+1+5.W y 6 8 8 F ..2 b a b b e ;.U.G.U.C.- 8 c.s s s s s u u v u v u v w w w w w T T w s.T T T +.+.+.+.+.L.K L.L.8.8.8.8.8.y.y.M y.y.M S S S S S S $.S $.U ~.~.~.W W W W %.%.%.%.%.@.*+].*+].].=.=.=.=.=.=.=+S.1.I.k l l N G.{+{+{+{+{+{+R @.b.(.", +" 9+1+b.W i.6 8 8 8 _ { d a b b d l k.U.U.Z.0.* 6 s t s t s t u v u v v v w v w T w w T T T T B.T +.L.+.L.+.K .+K 8.8.M y.y.y.y.y.M 8.S ,+S S ++S S $.$.$.~.~.~.~.~.0+W %.W %.%.%.%.%.@.@.@.].=.=.=.=.=.=.=.#.*.(.^ 2 m k O @+2+{+{+{+{+{+}+Q 5.n.(.", +" 9+1+b.R t 6 7 8 8 & } d a b b b d N G.U.G.%+f F ).s t s t s t u v v w v w w I w w I T T B.B.+.+.+.K L.+.K L..+.+8.8.y.8.M y.y.y.M M S S S S S ++$.$.$.~.~.~.~.W W W %.%.%.%.%.%.@.@.@.].].*.=.=.=.&.#.].].*.b.g.} O l m ^.U.{+{+{+{+{+{+o.~._.b.(.", +" 9+1+n.W p 7 8 8 8 F .b a a a a b l k.U.U.U.U.> 8 7+s t :.:.t u w w w v w w w I T T T T +.+.+.+.+.+.L.L.L.K K L.8.8.8.M M y.S M M y.S M S S S S $.S ~.$.~.~.~.W 0+W %.%.%.%.%.@.@.@.@.].W.].*.*.*.*.=.].]._.d.u.c l l O f.2+{+{+{+{+{+{+V R b.b.(.", +" 9+1+b.W y 6 8 7 7 8 ..^ b a b a b e Z M.G.G.U.p.* 6 s t t t :.t v v u w w w I w T I s.+.+.+.+.+.L.K +.K .+.+.+K .+8.y.M y.8.y.y.M S S ,+S S S S $.$.$.$.~.~.~.~.W W 0+%.%.%.%.@.@.].@.@.].].].].*.].@.].=+(.: ~ l l m N G.{+{+{+{+{+(+}+Q -.b.b.(.", +" 9+1+n.~.:.6 7 7 7 7 & } d 2 b b a b k h.G.U.M.Z.E & >.s t t y :.u v u v w w T w T w w T +.+.+.+.+.+.+.+.K K 8.K L.8.8.8.8..+y.M M y.M S S S S $.$.++~.~.~.W ~.W W W W %.%.%.%.%.@.@.@.@.@.].].&.].@.].T.(.] 0 m l l D k.2+{+{+{+{+{+{+o.$.n.b.r.(.", +" 9+1+b.W s 6 7 7 7 6 F I.c a 2 a b b d N G.G.G.G.Z.d & ).s t u t v u v u v v v w w T T T w w w s.T +.+.+.+.3++.+.K 8..+L..+K .+8.y.8.y.y.,+,+S S S S $.$.~.~.~.~.~.~.0+W %.%.%.%.%.@.@.@.].].].].&.@.W.b.3 .l l l m ;.%+{+{+{+{+{+{+{+V @.b.b.b.(.", +" 9+1+b.W y 6 7 7 6 7 >...{ b a a a a b l k.G.G.G.G.Z.3 F c.s t :.u u u u v v v w v v w w w w w I w w B.B.B.+.L.L.L..+.+.+.+3+L..+.+.+.+,+S S ++++++++++/+~.~.~.~.~.~.~.~.W ~.%.%.%.@.%.%.%.].@.X W.T.b.3 i o m l l D C.{+{+{+{+{+{+{+}+Q !.r.n.r.(.", +" 9+1+_.W y 6 6 6 7 7 ( & 0 d 2 a 2 a a d D C.G.G.M.G.G.^ F c.r u y u u v u u u v u u u w.w.E.E.w E.w.u t r , H = * & & q.......'.....q._ & * * = ; r / v L.++0+0+*+*+*+0+%.~.W W W %.%.%.%.@.@.X T.b.3 I.k m l m E e.%+{+{+{+{+{+{+(+d.$.5.n.n.b.(.", +" 9+1+n.W y 6 7 7 6 7 6 ( ,.a 2 2 2 a a b f ;.M.G.G.C.U.C.^ F c.r s :.u u u :.u N.K.N.N.:.).= & _ '.4.J.X.2.X.X.X.|././.7.u.u.u.u.u.u.7.7./././././.7./.J.|.4...& ; / v 8.~.*+T.*+%.%.%.W %.%.W T.5.> I.f m l m m ;.Z.{+{+{+{+{+{+{+4+Q @._.b.n.r.(.", +" a+1+n.X u 6 7 6 6 6 6 r & } c 2 a 2 a a d k 0.C.C.G.C.U.h.- F >.7+z.w.w s.z.6 F & _ '.4.|.|.|./.7.u.I.0 [ ~ { ^ 2 a b e f f f o o k k k l m l m m k f e 2 | < H.H.I. . .q.: = / I 8.S 0+%.%.T.V ! [ k m l m O N C.{+{+{+{+{+{+{+(+}+U -.n.n.b.n.(.", +" a+1+n.X u >.7 6 6 6 6 6 ). .a b 2 2 2 2 2 b k ;.t.C.C.C.G.G.n : 8 u w , & 4.3.P.3.X.u.q : ) ) ! { ] ] ] ] ] ^ 2 2 b d d d d d e f e f o k l l m O E E D D Z ;.0.;.;.;.D l d ) X.3.|.q.= , I 5 [ a m m m m O N C.4+{+{+{+{+{+{+{+{+#.R 5.5.n.n.n.(.", +" a+1+b.R u H 7 6 >.H H 6 c.& } c ^ 2 2 2 2 b d l 0.C.C.C.C.C.U.e.2 i /.|.|.X.P.7.u.I.0 0 [ } } ) ) ) ! 1 ] ] ] ^ ^ 2 a b d d d f e f f f k l l m m D E D D N ^.Z Z ;.;.0.0.p.2+N 3.,.c c ^ j.q f O l m m E N t.2+{+{+{+{+4+{+{+{+2+Q ].5.5.n._._.(.", +" b+c+n.X x 6 7 6 >.>.( >.)., .2 2 2 2 2 2 2 b d m @+C.t.C.t.C.G.G.n b k k c X.,.7. .i 0 < [ : } } ) ~ ~ ! { ] ^ 2 2 a b d d d d d d e f k l l m O E D D D Z ^.Z 0.e.e.k.t.e.C.U.7.d ;.0.N k l m m m E D Z k.%+4+4+{+4+{+{+{+{+{+d.M !.5.n.n.!.5.b.", +" a+c+n.X w H 7 6 >.>.>.>.( :._ ) d 2 2 2 2 2 b b e D C.U.G.t.t.t.t.t.k.0.D e /.~+,.,.j.q 0 < < } ) ) ) ! ! { ] ^ ^ 2 2 b c c e c c c e f k l n n E O D N N ^.Z 0.f.f.t.C.U.%+{+{ ) D D m k l l l O D e.h.e.Z.{+{+{+{+4+{+{+{+{+2+Q W 5.5.5.n.!.5.(.", +" b+1+n.X x >.7 6 >.>.( ( ( 7+}.j.c a 2 2 a 2 a e m O l l ;.C.t.t.k.k.h.f.0.O } 3.X. . .j.0 < : } ) } ~ ~ ~ }.d+A.O.A A A j B B j j B z Y g.Y J `./+D D Z Z Z 0.e.f.t.G.U.%+(+a I.D E l k k l l O E 0.D } I.{ Z %+(+{+4+{+4+2+{+|+8.=+_.<.5.5.5.5.(.", +" b+1+_.@.x >.6 6 >.( ).).)., u _ ~ c 2 2 2 b e a < I.I.j.) k t.k.h.h.h.h.e.;.k < 3.~+I.j.i 0 : } } ) ) ) | ` e+e+e+f+f+f+d+d+d+d+d+d+g+d+g+g+g+g+h+9.N Z Z 0.f.h.t.G.U.2+(+f I.D D l l l l m m O ^.2 H.2 ^.k ~ 1 O {+(+2+{+{+4+Q W !.5.5._.5.5._.(.", +" b+1+5.X x 6 7 6 >.( ).).).).s , .c a a 2 ! u.X.u.~ : < d 0 2 e.k.f.h.h.e.0.Z m ~ X.3.u.0 0 < : } } ~ ~ | ! , m.m.d+d+d+d+d+d+d+d+d+d+g+g+h+`.Q 1.^.Z Z 0.f.k.t.C.Z.{+(+^ u.E N m l l l m m D E } q m %+(+(+U.k I.q Z {+{+{+|+y.=.!.5.<.!.5.!.5.(.", +" b+8+5.X w >.7 6 ( ).).).r , ).t _ } d ~ 7.|.I.] ^ : q i ~ D ~ ~ D k.k.f.f.e.0.;.E d ,.3./.H.} } } ) ! ! ! { ] ] 2 2 b j j B B z j j B l m O D E N ^.;.0.e.t.t.G.4+{+;.0 H.D D O m m O m E ^.m < < ;.Z.%+4+{+(+(+h.q ~+^ %+{+Q %.=.!.!.5.5.-.!.5.(.", +" l.8+r.&.x >.7 6 ( ( ( ).c.c.).r ( .} /.u.] b ) 0 0 0 0 H.! E ^ ~ 2 Z k.f.f.0.0.0.^.O { /.|.7.H.{ ! ~ ! ! { ] ^ a a b c c e e e e o o l m n E N ^.;.0.e.t.%+{+G.O a q ] ;.D O O m O E ^.D b [ ^ k.Z.%+2+{+{+{+{+(+(+a P.} 1.++*.-.!.{.!.{.-.<.n.(.", +" l.8+5.X x ( 7 6 >.).( ).r r )., ).& 3.7.l ) < 0 < 0 0 0 0 0 : b E ^ q b 0.e.e.e.0.0.;.;.E d H.X./.< { 2 2 ^ ^ 2 b b d d f f f o k k m m E D D Z ;.k.C.U.G.^.^ q < b D Z E E E E E E N e 0 < l G.Z.%+2+{+{+{+{+{+{+(+(+,.4.M %.=.!.-.{.-.5.5.!.n.(.", +" l.8+<.W w ( 6 6 >.).).).).r r ).( 7 J.u.e < } 0 < 0 0 0 0 < < < ) k E [ < l e.e.0.;.;.;.;.Z ^.f H.X.~+/.H.~ 2 b d e f k k k l m m O D ^.;.0.e.e.;.D f { I.I.| l ^.N E E E D E D N l ) I.^ ;.G.Z.2+2+{+4+{+{+{+{+{+(+{+/.; *+].=+-.-.{.-.5.5.!.5.b.", +" l.8+5.X w >.6 6 ).( ).).).r s r ).>._ ~+b ~ : < 0 0 0 0 0 0 < : [ < ^ ^.2 I.2 ^.e.;.;.;.;.;.^.Z ^.l 2 < 7.|.|.7.u.H.< } | ! { ^ 2 2 2 2 ] ~ } H.u.u.q 1 k ^.;.D E O O D D ^.^.l { I.} n f.G.Z.2+%+Z.4+{+{+{+2+{+{+(+c /.S 0+=+-.=.-.-.-.!.!.!.5.(.", +" l.8+5.].x >.6 >.( ( ).).).r r s r ( >.J.7.f ~ : 0 0 0 0 H.0 0 q H.< 0 : d m ~ I.a Z 0.;.;.;.Z Z Z Z Z ;.N l c 2 1 [ 0 H.H.q q q 0 0 0 [ } ~ ^ c k D Z ;.Z D D D D E E D ;.O ~ I.} f f.C.U.U.0.d ~ } f {+{+4+4+{+(+t./.I 0+T.=.*.=.-.!.-.!.!.5.n.(.", +" l.8+r.@.I >.7 6 ( ( ).).r r s s r ).( & P.} a : : H.H.H.i q |.P.2.< < < : ! k e 0 I.2 ^.;.Z ;.Z Z Z Z ^.Z Z Z Z ^.^.D ^.D E E E O E D N Z Z Z ;.Z N N D D D D D ^.^.Z O ] I.[ e Z C.C.G.G.Z.0.m E 2 } %+{+4+2+{+{+q & *+%.].=.*.#.-.!.-.-.!.!.5.(.", +" l.i+<.X w >.7 6 ( ).).r r r r s r r ( 6 '.3.^ { < 0 i i i /.P.~+/.0 < : [ } ) ^ k c q |.e ;.;.;.Z Z Z Z Z Z ^.Z Z ^.^.Z Z N N N D D N ^.N ^.N N ^.N N N Z Z Z Z O d } q < d ^.k.t.t.G.G.U.Z.Z.4+(+k.~ G.{+4+{+(+k /.Q 0+].=.=.=.=.-.-.-.-.!.!.n.b.", +" i+<.@.I >.7 6 ( ).r r r r s s r s r ( 7 J.X.c ) 0 H.H.I.~+P.u.< 0 0 < : } ) ) ) ^ e.,.X.D Z Z Z Z ^.^.N ^.Z Z Z ^.Z Z Z ^.N ^.^.^.N Z ^.N ^.D ;.0.0.;.D o ^ } q q ! f ^.e.k.t.t.C.G.U.U.Z.Z.Z.2+G.^ G.{+{+(+4+H.v *+%.&.=.=.=.=.=.-.-.-.!.!.n.(.", +" l.i+n.&.w >.7 6 >.).r ).r r s s r s s ).( 8 3.u.c } 0 i I.~+P.I.0 i 0 < < : } ) ~ { m e P.e D D Z Z Z Z Z Z Z Z Z ^.Z ^.^.Z ^.Z ^.Z ^.Z N ^.Z h.^.d ] } H.H.[ ! d O Z ;.e.h.t.t.C.C.G.U.U.Z.Z.%+2+Z.0.%+{+{+(+| & *+0+@.].-.-.=.-.=.-.!.-.-.-.n.(.", +" i+5.*.s.( 7 6 6 ).).r r r s r s s s r ).( & 3.I.a } 0 i |.P.X.,.H.0 < < < } ) ! 2 Z | P.d E E D D D Z Z Z Z Z ;.Z Z ^.Z ;.Z ;.;.Z Z ;.;.0.C.o q H.) ^ d k O D Z ;.0.f.f.k.t.C.C.C.U.G.U.U.Z.%+%+2+{+{+(+(+^ ,.M 0+@.].*.*.-.-.=.*.=.-.-.!.5.n.(.", +" U <.&.L ( 7 6 >.).).).r r s s s s s s s c.>.8 3. .b [ 0 i |.P.~+H.< < < [ ) ~ { ^.a P.u.O E E E D D D D D ^.N Z Z Z Z ;.0.0.0.;.0.0.f.f.t.0.q b f k m E ^.^.^.;.;.0.h.h.t.C.C.C.C.U.U.U.U.Z.%+%+2+4+{+(+{ ,.U 0+@.@.@.].*.=.*.=.-.*.-.!.-.!.n.(.", +" i+<.&.L ).7 >.( ).).r s c.s s s s s t s s c.).& 3.q 2 < 0 0 i H.0 0 < : } ) ! m m P.X.f O n O E E E E D ^.N N Z ^.Z Z ;.;.;.;.;.0.0.e.e.G.e ] m k m E D D Z ;.;.0.0.f.h.t.C.C.C.G.U.U.U.U.Z.Z.%+2+{+(+^ /.Q 0+@.W.T.].*.=.*.=.=.=.=.-.=.-.!.n.(.", +" `.<.&++.).7 6 >.).c.r c.r p r s t s t t s s ).7+& 3.< ^ : < : : 0 < < } } ~ e ^.X.3.a O l m O E E E E D N D N ^.^.Z ;.Z ;.;.;.;.0.e.0.e.C.e 1 m k E E N ^.;.Z 0.e.e.h.k.t.t.C.C.G.G.U.U.U.Z.%+%+4+(+e /.Y *+%.@.].].].=.*.&.=.=.=.*.-.-.-.!.5.(.", +" S <.!.+.}.7 6 6 ( ).c.r s s r s t s t u t s t r c._ 3.0 { : 0 0 < < : : ) b ;.7.P.] m l m m O E E O E D N N D Z ^.^.Z Z Z ;.0.0.0.0.e.0.k.m 0 m k E E N Z D N e.0.0.e.t.t.t.C.C.G.M.G.U.U.Z.2+{+(+c /.Y 0+0+@.].*.].].=.*.=.*.-.*.=.=.=.#.-._.(.", +" /+&+#.K r 7 6 ( ).).).c.r s s s s s t t u :.t t r r _ ~+1 ] : < 0 < : } ~ ^.1 P.H.l l m l m m O E O D D N N N Z Z N Z ;.;.;.0.;.0.0.e.f.h.N q l l E E D Z < e k.0.0.f.e.k.t.C.C.C.G.U.U.U.Z.4+(+c |.Y 0+0+@.@.].&.W.].].*.=.*.=.=.-.=.=.-.!.n.(.", +" y.!.-.M r 7 6 >.c.r ).r r r r s s t t y u u t :.r r c._ ~+| ] : < < : ) e e P.7.k l l l m m m O E E D D D D N ^.N Z Z Z ;.;.;.;.0.0.f.e.0.;.H.d l m E Z m /.l h.0.0.0.0.k.t.C.C.M.G.U.U.Z.4+(+a 7.Y *+++%.%.].].].*.&.=.=.=.*.=.=.=.=.*.=.-.5.(.", +" 8.&+!.M s 7 6 >.).r ).r r ).r s t t :.u y v u u t t z.7+'.3.} ^ ) } ) 2 0./.~+d l l l m m m O m E D D E D D D N ^.Z Z Z ;.;.0.0.0.e.e.f.0.e.[ ^ m m D 0.a |.D t.0.0.0.0.h.t.t.C.C.U.Z.Z.4+(+^ /.Y 0+++%.@.].].].@.*.W.=.=.=.=.*.=.=.*.=.=.#.n.(.", +" J &+5.S t 7 7 ( ).r r r r s s s t s t :.:.u u u u t y t c._ ~+I.] ! ] ^.^ 3.1 l l k k m m m O E E E E E D N D N N Z ;.Z Z ;.0.;.0.0.f.f.f.e.{ ! E E E 0.^ 3.H.e l ;.0.0.f.k.C.C.C.G.%+(+{+b j.J ++0+%.@.@.].@.@.].=.=.=.=.*.*.*.*.=.*.=.=.-.5.(.", +" J !.<.$.u 6 6 >.).r ).c.r s s s s :.u v :.t u u t t u :.s u H 4.7.q | < P.< l k k l k l m l m m E E E D D D N ^.Z Z Z ^.;.;.;.0.0.0.e.f.e.f.a [ E O E Z E { < H.} m e.0.k.t.C.G.U.4+(+;.~ .M 0+0+%.%.@.@.@.].=.&.W.=.=.*.*.*.=.=.*.=.=.=.!.n.(.", +" J R.5.U :.H 7 >.).).r r s r s s t t u u y u t t t u u u u y w..+' /.P.3.q l k k k l l l l m m O O E E E D D N ^.^.Z Z Z ;.;.0.0.0.e.e.f.f.e.f H.l O D N ;.h.e.e.0.;.e.h.h.C.G.U.(+U.} ,.' ~.0+W %.X @.].@.@.&.].W.*.*.=.&.*.*.*.=.#.=.*.=.-.r.(.", +" 9+*._.~.u 6 7 ( ).).s s s s s s t s u y :.:.u :.u u :.v :.u u x M Q .|.k m f k k k l m l m m O E E E E D D D ^.^.Z ;.;.;.0.0.0.e.f.f.f.h.f.l I.o O E N Z ;.0.0.;.f.f.k.t.U.2+{+l /.0 J 0+0+~.%.%.@.].@.].].@.@.*.*.W.=.=.=.=.*.=.=.=.-.=.!.n.(.", +" 9+]._.U x 6 7 ( ).r r c.p s s s s t :.u u y u u u :.u u :.u u u v B.S * I.c l k k l m m l m O m O E E E E D D N ^.Z Z ;.;.0.0.0.f.e.e.e.h.f.m q d m E N Z ;.Z 0.0.e.h.t.%+{+0.< /.' 0+h+W W %.%.@.@.@.@.].@.].W.&.].*.*.=.*.W.].*.=.*.=.=.!.r.v.", +" 9+].5.W w 6 6 >.).r r s s p s s t t u t t y y :.:.u u y u w.u w.u w.s.M r : 2 l m k k m m m m m E E E E E D N N ^.^.Z ;.0.;.0.0.0.0.f.f.h.e.E 0 2 m E Z ;.0.0.0.e.k.C.{+G.[ /.@ ++0+++~.%.%.%.].X @.].@.].].].@.W.&.*.W.*.*.=.=.].&.=.=.=.-.r.v.", +" a+]._.%.w >.7 6 }.c.c.s r s s s s t u :.t :.:.:.:.u u :.u u w.v w.v v v L.w > ! c l l l l l m n m E O D D D D N ^.^.Z Z ;.;.0.0.0.0.e.f.h.f.Z ) 2 l m N ;.;.0.f.C.%+%+e 7._ +.0+++++W %.0+X @.X @.@.].@.@.].].@.*.].].].].W.].=.].*.*.=.=.!.b.v.", +" a+X r.X L >.7 >.).).c.).r s p s s s z.t s :.:.:.:.u u u u :.u w.v v w.v v s.T x ' 2 c l m m m m O E E E E D N N Z ^.Z ;.;.0.0.0.0.0.0.h.h.e.0.d b k O Z ;.k.G.U.e.2 ,.'./ /+$.~.~.0+W %.%.@.@.@.].@.@.@.].@.].@.].@.].W.@.].].W.].*.W.=.*.-.b.v.", +" b+i+r.&.w ).6 6 ).r ).r r s s s s s s s z.z.s u u :.u u u u w.u u v v w.v v w s.+.T / > c k n E O E E E D D N N Z ;.Z ;.;.;.0.0.e.e.f.e.f.f.h.;.) o ^.t.G.h.C [ /.../ /+++S 0+W W %.%.@.%.X X @.@.@.@.%.].@.].@.@.].@.@.].@.].].@.=.*.=.=.!.b.v.", +" b+i+_.&.+.).7 6 ( r r r c.r c.r p c.7+c.s s s s z.s z.:.:.u u w.u w.u v w v w I w +.K L 5 ' j k n C D D D D D D ^.Z ;.Z ;.;.;.0.f.0.f.0.f.f.h.U.) 7.^ c } ...& u ++0+,+++~.W %.%.W %.%.%.%.@.%.%.%.X W @.%.X @.@.].].@.].@.@.@.].&.].=.=.-.b.v.", +" l./+5.@.K ).7 6 ( c.r ).c.c.c.r s z.i.N.N.N.N.N.7+c.7+s z.:.:.u u u w.w.v v w w w w T +.3+L.I 5 A B l m O D ^.N Z Z ;.;.;.0.0.0.0.0.e.e.h.h.t.G.e./.X...= u .+++++S ++++0+W %.%.W %.%.%.%.@.%.W W W 0+@.%.*+%.W W %.@.-.!.=.%.@.].@.].=.=.!.b.v.", +" j+/+<.#.J r 7 6 ( ).).).).r p 7+( * ....'..._ 8 ).z.K.s c.s s s N.w.u v v w v w w T I T w L +.+.+.T T L I z B g.g.E ^.^.Z Z ;.;.0.0.0.;.d.9.g.z I w.B.y.S S S ++~.~.$.$.0+W W %.%.%.%.%.%.%.~.W %.%.~.+.r * _ q...q._ * / Q =+0+~.@.@.=.=.!.b.v.", +" `.5.-.J c.7 6 ).).).( r s )._ 2.P.~+X./.|.X.~+~+4._ , E.z.).c.:.u u u v v w.w w w w I I w T T L K +.+.+.L.+.+.+.s.K K K K K Y J J K +.K L.+.3+3+y.S ,+++S $.$.$.~.W W W W W %.W %.%.W ~.U ~.*+K ; ..|.7.I.} ] d e e 3 q.4.' *+M ~.@.].].!.b.'+", +" `.5.-.M c.7 6 ( ).( ).s )...P.~+I.: } { b b a { q |.X._ r N.c.c.s :.u u w.v w.w.w w w T T T B.+.+.+.+.+.+.L.+..+L.L.L.K K .+L.L.L..+.+.+.+y.y.y.y.S S S $.$.~.~.~.W 0+W %.W W W W W ~.S ~.8.= 4.|.q ^ f O D ^.0.h.C.U.C.> 4.5 ~.y.%.@.].<.(.v.", +" `.!.=.S s 7 6 ).( >.r )._ P.q ) j.H.: ) ~ ^ d k O m c ,.~+..s 7+c.s :.u u v w.w.w w w w T T T T T +.+.+.+.+.+.K K +.K L.L.L.8..+8..+8.y.y.y.y.y.y.S $.++~.$.~.~.~.W ~.W W %.0+%.W ~.~.W v 4.|.} d k l l l m D ;.k.t.C.4+{+= '.8.3+W @.*.{.(.'+", +" `.!.#.S s 7 7 ( ( >., 7 2.7.d .I.,.u.q } ~ { a d f D h.l u.2.* :.c.c.z.N.u u u v v w w I T +.+.+.T +.+.+.3+L.+.L.+..+.+.+8.8.8.8.8..+y.y..+y.y.y.S ~.$.$.$.~.~.W ~.W W %.%.W W ~.~.++= 2.I.b e f o k l l E m d e ^.G.Z.{+p.'./ .+$.*+=.5.(.'+", +" M &+-.Q t 7 7 >.>.6 7 _ 3.{ ) I. .~+P.X.< ) ! ^ a d f O t.G.o |.'.s 7+c.z.u w.u w w w w w w T +.+.T +.T T +.+..+,+y.y.y..+y.y.,+++h+h+++y.8..+M M S ++$.$.~.~.~.W ~.W ~.W W W $.0+8...2.[ e b b e k l m E E H.q ) 7.E {+4+2+q.H L.$.@.*.5.(.'+", +" 8.#.-.Q y 6 7 ).( 7 F '.3.c : j. ./.P.~+i : ~ ! ^ 2 b k l ;.2+k.q 4./ r 7+u w.w.v w w w w I w B.+.T +.+.B.3++.s = & ..'.'.'.'...q.& = s 3+++++y.y.y.S ++$.~.$.~.~.~.~.W W %.~.~.K 4.X.2 d 2 b d e k m m E E o ^.^ ,.k.{+{+{+* H y./+].].5.(.'+", +" 8.1+<.U y 6 7 ( ).8 _ 4.~+a } H.j.,.P.~+i < } ! ] ^ a d o E N t.%+~ 4./ c.s y w.v v v w w T w w T +.L.w.( _ 4.X.|.7.q < } ) | } < H.I.,.'.q.= +.++S M S $.$.~.W ~.~.W ~.~.~.0+K 4./.c a ^ a d f k l O O O D 0.;.! .l {+{+2+i , y.0+@.].5.(.'+", +" 9+].<.X u 7 7 ).( 7 _ '.3.] ) 0 j.,.P.3.j.0 } ) ~ ] ^ b f e m ;.k.{+| '.c.c.N.u u u w w w T w +.+.w 7 4.~+X.I.{ b e o k l l m O E ^.^.N O b i .* L.,+L.S S $.~.~.~.W ~.~.@.$...|.d ^ { 2 d e f l O D ^.E D } d D 7.2 (+(+G.'.w ,+W *+=.n.(.'+", +" 9+].o.W w 6 7 ( ).7 & _ 3.q a H.i u.X.|.j.i 7.|.7.7.) ! I.< < 2 N k.2+{ = c.c.u v v w w w T 8.+., '.2.I.< 1 ^ a a d d d e e f k k m O ^.0.t.t.D 3 q.t +.I ,+$.~.~.~.~.~.&.=+& |.d 2 { 2 a 2 e m D ^.o d ^.Z e ^ e m U.{+(+3 & ++++%.@.-.n.v.'+", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Preview_5110.xpm b/xgnokii/xpm/Preview_5110.xpm new file mode 100644 index 0000000..a30f996 --- /dev/null +++ b/xgnokii/xpm/Preview_5110.xpm @@ -0,0 +1,420 @@ +/* XPM */ +static char * 5110_xpm[] = { +"142 350 67 1", +" c None", +". c #6B6B6B", +"+ c #5A5252", +"@ c #4A5252", +"# c #312931", +"$ c #212921", +"% c #8C8C8C", +"& c #423139", +"* c #A5949C", +"= c #7B8484", +"- c #292121", +"; c #212121", +"> c #6B7373", +", c #5A5A5A", +"' c #A5ADAD", +") c #182121", +"! c #211018", +"~ c #100810", +"{ c #101010", +"] c #080808", +"^ c #737B84", +"/ c #ADB5B5", +"( c #B5ADAD", +"_ c #000808", +": c #C6ADBD", +"< c #313939", +"[ c #525A5A", +"} c #394A4A", +"| c #212129", +"1 c #8C9C9C", +"2 c #6B737B", +"3 c #101818", +"4 c #313139", +"5 c #73847B", +"6 c #080810", +"7 c #9CA5A5", +"8 c #182931", +"9 c #29424A", +"0 c #081010", +"a c #39525A", +"b c #5A6B6B", +"c c #5A6363", +"d c #63737B", +"e c #73848C", +"f c #848C8C", +"g c #849494", +"h c #9C8494", +"i c #102129", +"j c #D6DEDE", +"k c #DEE7E7", +"l c #D6D6D6", +"m c #C6C6C6", +"n c #DEDEE7", +"o c #E7EFEF", +"p c #DEEFE7", +"q c #C6CECE", +"r c #63CE63", +"s c #EFF7EF", +"t c #C6D6D6", +"u c #F7FFFF", +"v c #84BD9C", +"w c #2984AD", +"x c #31A5C6", +"y c #FFFFFF", +"z c #637B73", +"A c #DE4A9C", +"B c #CE427B", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ..+++..+@@###$$+ ", +" %&&++***=++##---;>> ", +" %&&++***=++##---;>> ", +" ,&&,,*''=++##);;!++ ", +" ,&&,,*''=++##);;!++ ", +" ,##++%**=&&;;;~~)@@ ", +" +##..%**=&&--!))~## ", +" +##..%**=&&--!))~## ", +" &##,,***.&&)){]]{&& ", +" &--,,*''^&&--~~~{-- ", +" &--,,*''^&&--~~~{-- ", +" //###..***>&&)){]]]--** ", +" //###..***>&&)){]]]--** ", +" ((-##=='((^@@;;]]]]))== ", +" ''-&&%%(((%@@--~]]]!!>> ", +" ''-&&%%(((%@@--~]]]!!>> ", +" **-##==(**^&&;;{__]!!.. ", +" **#!!,,(((%@@;;{__]{{++ ", +" **#!!,,(((%@@;;{__]{{++ ", +" **-##,,://=@@##~]]]{{++ ", +" **-##,,://=@@##~]]]{{++ ", +" **-##>>(((%++##{]]]]]@@ ", +" %%-##>>:((%++--~]]_~~&& ", +" %%-##>>:((%++--~]]_~~&& ", +" %%;##^^/::%@@))~]]]]]<< ", +" %%;##..(((%@@--{___]]&& ", +" %%;##..(((%@@--{___]]&& ", +" ==;##^^(**%@@!!~___~~<< ", +" ==;##^^(**%@@!!~___~~<< ", +" %%-##>>(((%[[--{___~~## ", +" ==-##..(((=++;;~]]_]]## ", +" ==-##..(((=++;;~]]_]]## ", +" ==-##,,***,&&;;)___~~## ", +" %%-##++....@@&&!~~_]]-- ", +" %%-##++....@@&&!~~_]]-- ", +" **-##}}%**.##||{]]_~~&& ", +" **-##}}%**.##||{]]_~~&& ", +" **&;;++*((%}};;_]]_]]##( ", +" 122,@@}}#|||--)))!!3!!33!!!)!!))|||4<<}}[..511// %%{--,,%***++;;{_____##* ", +" 122,@@}}#|||--)))!!3!!33!!!)!!))|||4<<}}[..511// %%{--,,%***++;;{_____##* ", +" %%,44;;~66]66]]]]]]]]]]]66_]]__6_____]]______]]_]]]~~))|<<.77 %%;;;@@=**7++))~___~~##* ", +" >>4~~6666666666633366633333{{33333~{{3{{3366666666]66]]]______]])),..-;;}}=**%@@##]_____##* ", +" >>4~~6666666666633366633333{{33333~{{3{{3366666666]66]]]______]])),..-;;}}=**%@@##]_____##* ", +" 2--66633)3333||||))!!|||||||||||)||))||||!!||333!33~~333366666___]]___{{~]]--@[[&##))____]]##( ", +" 2--66633)3333||||))!!|||||||||||)||))||||!!||333!33~~333366666___]]___{{~]]--@[[&##))____]]##( ", +" '}}]33663|||||||44444444444|4444888888||||||||))|33|33||)33333336~~]]]66___]!!||@++[##--!]]]]]--* ", +" %%|663||||4449999994444444444444|||||8||||8||||||||333||33333!))33333666666___]]))<@@@##;;{00]~~##' ", +" %%|663||||4449999994444444444444|||||8||||8||||||||333||33333!))33333666666___]]))<@@@##;;{00]~~##' ", +" %%))633|4444}}}4999994494444444444||444|||||||||||))!|||!!33|!!3!!33333333~~{666____|44&--{{{]]_~~$$' ", +" 7))66)44499}}}99}99}}499}4499444444444||4||||8|||||||||||||||)|||||33333333333{{6____]--|))~~~]]_~~##' ", +" 7))66)44499}}}99}99}}499}4499444444444||4||||8|||||||||||||||)|||||33333333333{{6____]--|))~~~]]_~~##' ", +" )__||4}}}}}}}aaaa99}}}}}99999944444444||4||444|||||||8))|!!||!||333!!333333333666{{]]___;;;______]]$$' ", +" )__||4}}}}}}}aaaa99}}}}}99999944444444||4||444|||||||8))|!!||!||333!!333333333666{{]]___;;;______]]$$' ", +" }}6||44}@@}aaaa}aa@}}}}}999}}9944444444444444||44444488|||||||||||!||))!33333333{{333666__{||]]____]]--( ", +" =]])44}}[aa@[[aaaaa}aa}}}}}}aa99444944444||4||444||4|||||||||||||||!))33)))|!!))333366666___))--______##' ", +" =]])44}}[aa@[[aaaaa}aa}}}}}}aa99444944444||4||444||4|||||||||||||||!))33)))|!!))333366666___))--______##' ", +" )334@@bb[@@a[[[[}@@aaaaa}aa}aa}}9}}9}}}}999}}}aa}44444|||88|||||||||||||!3333333333333336{{___##]___]]--( ", +" ..]))}cccc[[[[@@@@[[[a@@aa}}}}99}}}}}44488|44444}}a@@caa44||||||||||||!!33|33|33))33333333366___{{#___]]##( ", +" ..]))}cccc[[[[@@@@[[[a@@aa}}}}99}}}}}44488|44444}}a@@caa44||||||||||||!!33|33|33))33333333366___{{#___]]##( ", +" ))344cbb[[[[[c[[[[c[[[@@}}}aaa}}44|{{633{{)||)))44|44@bb22[448||88||||||33|||333))333333333663____#{{___##' ", +" ))344cbb[[[[[c[[[[c[[[@@}}}aaa}}44|{{633{{)||)))44|44@bb22[448||88||||||33|||333))333333333663____#{{___##' ", +" 22]]|@@dbb..cbb[[[[[[aa@aaaaa[[}||66_333))))|))6||}}@[[@}}ccdee}8844|||)||)))!!3))))3))366333~~3____3--___##' ", +" 4466}bb.bb..b..bccbb[[[[[[cc@44)__66333)4444444|99[[c22bbb...dde[[||4||||||||||33333!3333333066{66___##]__##( ", +" 4466}bb.bb..b..bccbb[[[[[[cc@44)__66333)4444444|99[[c22bbb...dde[[||4||||||||||33333!3333333066{66___##]__##( ", +" 7]]))[22b..bbbbb.ddccb[[cbb[[4]]_]]003|||44##}aa}ccccbdd2eeee^22211bb||||||||)33)||333333{{33~333~~]]_)))__--' ", +" @66||beed22bbdcc...bbbcc[[[446__]0033)||44499@[[[ccbb222^eefffgg^ee11[||||||||))!3333333333)))!!36666]]]#__--' ", +" @66||beed22bbdcc...bbbcc[[[446__]0033)||44499@[[[ccbb222^eefffgg^ee11[||||||||))!3333333333)))!!36666]]]#__--' ", +" ;~~}}^eed2222ddddbbbb.bbb}}33_66]33|||44499}}}@@c[[ccd22^ff%%h117^^ffg}}|||88|||33366666633))|||)6666___-{{--' ", +" ;~~}}^eed2222ddddbbbb.bbb}}33_66]33|||44499}}}@@c[[ccd22^ff%%h117^^ffg}}|||88|||33366666633))|||)6666___-{{--' ", +" %%6!!..f22d22^^222ddd22dddaii___663||88|444}}}}}@@[cc..d222^^ffh7777711ggg488||333366666))3))))|44}4433]__)----( ", +" ,,]||^^f^^f22^^ddd2dddd.dd4__]]666)88||4449}}}}@[[@ccbbd22^^^ff%hh7''''g77.||88)3366633}^^%eecc999a}}336__]##--/ ", +" ,,]||^^f^^f22^^ddd2dddd.dd4__]]666)88||4449}}}}@[[@ccbbd22^^^ff%hh7''''g77.||88)3366633}^^%eecc999a}}336__]##--/ ", +" ||6}}fff^^e^^eee^^222dd2@@3__]]333|||||4449aa}}[}})@@..d..2^^eeg117''''7%%7}}||!663||77jkkkjjjj7[[[bb&&6___--##( ", +" /333[[11gfffeeffe22222ddd44___]]3338||444}}}99aa@}}4[[bb.dd2^^eegff7'''''777cc||0663ffkklmm:::llk''.bb[[366_))&&( ", +" /333[[11gfffeeffe22222ddd44___]]3338||444}}}99aa@}}4[[bb.dd2^^eegff7'''''777cc||0663ffkklmm:::llk''.bb[[366_))&&( ", +" 5]]|>>hheeefffff^ee222eed||___663))8||||499999}}@aaabbbbb22222^^%gg1''''/771ee||6664lljjm:::::::lllebb..|66_]]&&/ ", +" 5]]|>>hheeefffff^ee222eed||___663))8||||499999}}@aaabbbbb22222^^%gg1''''/771ee||6664lljjm:::::::lllebb..|66_]]&&/ ", +" @]]|ff77fggf^^eefee^dd22[33_66663|||4444944999}}aaa[ccbbd222dd^^fff177'''''11144366@kkkk:mm:mm:::jjgdd[[|~~___&&/ ", +" #66}gg11g11%ffggeffeee22@66___]]3||84444499999}}}aacccbb.222..22egg%77''/''177}}300[nnoo:ll:mm:::nnfbbaa|33]__## ", +" #66}gg11g11%ffggeffeee22@66___]]3||84444499999}}}aacccbb.222..22egg%77''/''177}}300[nnoo:ll:mm:::nnfbbaa|33]__## ", +" )~~c77hhfggh%%eee^^eee22}___00333|||444494449999}aa[bbbbddd22222^fff1177/''711[[0~~4jjkkl:::::::llld}}}}|666__))/ ", +" %%]))2''117gghggffg%%eee22}___]]663|||444449999999944}2222b..2dd22^ff%7777'''g%%..)~~3ggookll:::llkhha4444)336__~~' ", +" %%]))2''117gghggffg%%eee22}___]]663|||444449999999944}2222b..2dd22^ff%7777'''g%%..)~~3ggookll:::llkhha4444)336__~~' ", +" ..6||f''111ggfhhggfffeeedd4___6666)88|||44444999444||a77eebbb...22^eef1177/**g%%dd-333||''pkkooopp/}}|4488!336____% ", +" ..6||f''111ggfhhggfffeeedd4___6666)88|||44444999444||a77eebbb...22^eef1177/**g%%dd-333||''pkkooopp/}}|4488!336____% ", +" }}6&&777111%%1ff%%%ggeeeee9___]]663|||4444444}}}}}4ii4bbdd.bb.2222^^^ghh11'''gee22433333||c11'hh..4|||||!!|333____. ", +" 44]}}'77111111ffggfeeeee22}_____663|||4444444999}}}444aabbb22^22222eef1177711fggdd4|||33333||!||!!3||||||||!!366__} ", +" 44]}}'77111111ffggfeeeee22}_____663|||4444444999}}}444aabbb22^22222eef1177711fggdd4|||33333||!||!!3||||||||!!366__} ", +" ))6cc'77111gg1%%ff%eefeeee[66_]]663))|||444||49999}aa@[[[[b..b44cc2ee%hh11177eee[[4448||3333333333||||33!!833366__4 ", +" //~~322'7711111g%%ggfffeff22b33_]]666||844|||0049999}}}aaa[[[cc}33[[2eefgg117ff2eeaa444|88||)33333||||||!!))|!!366__) ", +" //~~322'7711111g%%ggfffeff22b33_]]666||844|||0049999}}}aaa[[[cc}33[[2eefgg117ff2eeaa444|88||)33333||||||!!))|!!366__) ", +" %%]]-ee'7777711hgghhg%%feeeed||_]]663!!|4444488499aaaaaaaa[[[bbbcc22^^^egggg1ee.22}}4444||||||||||||!88||||||))3{{__]// ", +" 22__|%%'77''711ggghhgfffff222}}6____333||||||4444499}}}aaa[[[[[bdddd2eee%%eef22b[[44444444444|||||||)||!33))|||366___%% ", +" 22__|%%'77''711ggghhgfffff222}}6____333||||||4444499}}}aaa[[[[[bdddd2eee%%eef22b[[44444444444|||||||)||!33))|||366___%% ", +" [[]]411/7777111%%%fffff%eeee2cc)__]]_333||||844444aa}}}}}}@@c[[[bb..2eegcc66|[[.aa449444||||8|||||||||||||!!|||)33___.. ", +" [[]]411/7777111%%%fffff%eeee2cc)__]]_333||||844444aa}}}}}}@@c[[[bb..2eegcc66|[[.aa449444||||8|||||||||||||!!|||)33___.. ", +" }}~~}'''7777711g11%%gff%ffee^224__]]6663|||||4444444}}}@@@@@[aa[dddd^22222||4[[[449944444444||||))||||||||||!|||~~___++ ", +" ##66@'''77771111gghhgff%%%ee2..c!!___66633|||44|4444444}aaaa@cccbbbb2ddd22bb[[[9994444444444||||||88|||)|||||33)33___44 ", +" ##66@'''77771111gghhgff%%%ee2..c!!___66633|||44|4444444}aaaa@cccbbbb2ddd22bb[[[9994444444444||||||88|||)|||||33)33___44 ", +" ))]]['''777777711111feeeeeee^22d}}00_6603333||||||44499}}}@@aaa[bbccdcc.aa99@[[999444||444||8|||88||||||33|||))|33]]_)) ", +" 33{{2mm'77771111hhffffffeeeeeee^bb446]]6]]66|))|8844444444}}acccccaac[[a}}}}aaa99944444444|||44|||||8||||||||))!0066_{{ ", +" 33{{2mm'77771111hhffffffeeeeeee^bb446]]6]]66|))|8844444444}}acccccaac[[a}}}}aaa99944444444|||44|||||8||||||||))!0066_{{ ", +" '~~))^//7''77711111%%gfffeeeee^^2ddbb4]]_6600333|||88|44444994}}a}}}}}}}|}}aaa44944444444||||4||4|||||||)!!||!3333366_]]/ ", +" '~~))^//7''77711111%%gfffeeeee^^2ddbb4]]_6600333|||88|44444994}}a}}}}}}}|}}aaa44944444444||||4||4|||||||)!!||!3333366_]]/ ", +" %66))f//'7777711111ffffffeeeee^^^ddddc443____]33|33|||||84444444944448||4}}}}44494444444444||||||88||||||))!!|))33366_]]' ", +" 2]]||1//'''77711h%%ee%ffeee^^^^^222bb2dd}))___0033333|||)||||444|||88844}}}9999944444444444||444||||||||||||||))!33]]___% ", +" 2]]||1//'''77711h%%ee%ffeee^^^^^222bb2dd}))___0033333|||)||||444|||88844}}}9999944444444444||444||||||||||||||))!33]]___% ", +" +__447//'77777111ggffgffeeeee^22222dddddd@@44366_6666333333333663ii449}}9444494444444444444444|||44||8|||))))|!!33333___5 ", +" @]]&&///'7777711ggg%%fff^^^eee22^2222.dddccbb@<<-3366_3366666{||4}}@@a9999999444|44888||888||||||))333333333333363333]__. ", +" @]]&&///'7777711ggg%%fff^^^eee22^2222.dddccbb@<<-3366_3366666{||4}}@@a9999999444|44888||888||||||))333333333333363333]__. ", +" 466}}/'''''gg177%11gge%%%eeee^^^^22222dd.ddbbcdddaaaa}44499}}a}}9}}9944444444|||)33330{{]]]]]]___________________]]44___[ ", +" 466}}/'''''gg177%11gge%%%eeee^^^^22222dd.ddbbcdddaaaa}44499}}a}}9}}9944444444|||)33330{{]]]]]]___________________]]44___[ ", +" #66}}///'**77777g11ggfeeeeeff2^^22222.dd2..ddcccc[[cc[@@@@@994444||)){336]]66____________________________________6644]__@ ", +" ;33@@///77711711gggffgfffeeeee22^222222222222dcc@@@}}4||-33{{6]]_________________________________________________]]446__} ", +" ;33@@///77711711gggffgfffeeeee22^222222222222dcc@@@}}4||-33{{6]]_________________________________________________]]446__} ", +" )33[[m'''''777111ggffffffeeee^eee^^22.cc[}}44|)){66]]_________________]]_________________________________________]]##{__# ", +" {33..m''777gg111g%%ggfffgffee2..c}}44){{]__________________________________________________________________________44{__- ", +" {33..m''777gg111g%%ggfffgffee2..c}}44){{]__________________________________________________________________________44{__- ", +" {3322m''177hh177hgg11e22c}}||)33]__________________________________________________________________________________44!__) ", +" {3322m''177hh177hgg11e22c}}||)33]__________________________________________________________________________________44!__) ", +" 77{))^^m'''77771^^c@@||;{{~_______________________________]__________________________________________________________##3__{ ", +" **]!!ee/''f..}}#!!)44))______]]___]____]___]]___]]___________________________________________________________________||)__] ", +" **]!!ee/''f..}}#!!)44))______]]___]____]___]]___]]___________________________________________________________________||)__] ", +" %%633ff(@@-##@@.77m((##______]]____]]___]]___]]___]__]]_]]___________________________________________________________##)__~ ", +" ==~||gg%||*mmqqqmmm77~~____]]_____]__]]___]____]___]]___]]______<<+##__{<<;,,...,,-<<;;_44}))&&{__#++]]______________||)__] ", +" ==~||gg%||*mmqqqmmm77~~____]]_____]__]]___]____]___]]___]]______<<+##__{<<;,,...,,-<<;;_44}))&&{__#++]]______________||)__] ", +" ^^64411f##mqqmmmmmm^^_____]____________]__]__]]_]]_]]__]________%%m//))#775%%@@@ff%**,,<''<))ll){{7''22______________##)__]// ", +" ^^64411f##mqqmmmmmm^^_____]____________]__]__]]_]]_]]__]________%%m//))#775%%@@@ff%**,,<''<))ll){{7''22______________##)__]// ", +" >>]||772@@qmmmmmmmm[[______________]]___]]___]]_]]___]]___]_____%%@ff%%}%%5[[___@@%%%55m}}_44//3..%<___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________||#___== ", +" ##6aa//.++q//mm@___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________--|___ff ", +" ##6aa//.++q//mm@___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________--|___ff ", +" ##6}}//.[[mmm((4___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________))|___== ", +" ##6}}//.[[mmm((4___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________))|___== ", +" ##3}}//.++qmm**{___rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________||-___%% ", +" ||~@@//.++mmm22____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________||)___%% ", +" ||~@@//.++mmm22____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________||)___%% ", +" --6@@''.@@m//[[____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________##)___%% ", +" --~[[//2}}m//44____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________##)___%% ", +" --~[[//2}}m//44____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________##)___%% ", +" --6[[//2&&m77))____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________##)___%% ", +" --6[[//2&&m77))____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________##)___%% ", +" ;;]@@//>}}m%%]]]]]_rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________44)___%% ", +" --6@@//e&&m..______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________443___%% ", +" --6@@//e&&m..______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________443___%% ", +" --6@@''e44/[[______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_________443___%% ", +" --3@@//f44'&&______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______]]443___%% ", +" --3@@//f44'&&______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______]]443___%% ", +" ))6}}''%##'--______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______]]44~___** ", +" ))6}}''%##'--______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______]]44~___** ", +" --]}}//%447##______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______66443___** ", +" --6@@''g##1##______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______{{443___** ", +" --6@@''g##1##______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______{{443___** ", +" ))6@@''g##f##______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______33446___** ", +" --]@@''744>44______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______33446___** ", +" --]@@''744>44______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______33446___** ", +" ))3}}''144.&&______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______||||3___** ", +" ))3}}''144.&&______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______||||3___** ", +" )){}}''144+@@______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______||||6___** ", +" ;;6@@771}}@}}______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______##||6___77 ", +" ;;6@@771}}@}}______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______##||6___77 ", +" ))6@@771aa}++______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr_______##))6___'' ", +" --6}}77g[[<@@______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______]44))6___77 ", +" --6}}77g[[<@@______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______]44))6___77 ", +" ||3@@771cc4[[______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______]44))~___'' ", +" ||3@@771cc4[[______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______]44))~___'' ", +" ;;0@@77gbb4++______rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______{44336__]'' ", +" ))6}}11gdd4,,]]____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______644336___(( ", +" ))6}}11gdd4,,]]____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______644336___(( ", +" --6}}77f224,,~~____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______|||336__](( ", +" ||6}}77g22<@@))____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______|||33{__]'' ", +" ||6}}77g22<@@))____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______|||33{__]'' ", +" ))6@@77g^^}}}--____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______4||336__](( ", +" ))6@@77g^^}}}--____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______4||336__](( ", +" ||6}}77g22}}}44____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr______4||33{__]// ", +" --3@@ggf22[}}&&____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____]]4||))6__]// ", +" --3@@ggf22[}}&&____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____]]4||))6__]// ", +" ))~}}ggg22b44}}____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____00#||!!3__]// ", +" --6}}ggg...44@@____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____))#||))]__] ", +" --6}}ggg...44@@____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____))#||))]__] ", +" ||6}}gggdd.44@@____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____--433336__] ", +" ||6}}gggdd.44@@____rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr____--433336__] ", +" ##6}}%%e22.}}}}{________________]]_]]]]]~~~~~{{)---))__________________{))!{{{{]]]{~~66]]]]_____________________44|||33]__] ", +" ||~}}%%e222}}<<{________________________________________________________________________________________________44|))336__] ", +" ||~}}%%e222}}<<{________________________________________________________________________________________________44|))336__] ", +" ##]}}%%e222@@44)_______________________________________________________________________________________________]44|))!!]__{ ", +" ##6}}11e...[[440__________________________]____________________________________________________________________344|))||]__{ ", +" ##6}}11e...[[440__________________________]____________________________________________________________________344|))||]__{ ", +" 446}}ggebbd..[[}@@}}}}}444-))66___________________________]66]]6__________________________________6333333333333||||||))]__{ ", +" 446}}ggebbd..[[}@@}}}}}444-))66___________________________]66]]6__________________________________6333333333333||||||))]__{ ", +" ##]}}fffddb..dd222.dddd2ddd..@@4))______________663))44444}4444444|||)))33]_______________60033)))|))|||33|33|||))|||336__{ ", +" 446}}%%e..bbbddb..cbbbbbbbbbbccc@@9))66___]))44}@@@}}@@}99}}}99444444444|||--333_______]33;||44|||)||||)))|))33)|||8833]__{ ", +" 446}}%%e..bbbddb..cbbbbbbbbbbccc@@9))66___]))44}@@@}}@@}99}}}99444444444|||--333_______]33;||44|||)||||)))|))33)|||8833]__{ ", +" 446}}ff^bbb..cccbbcaa444449}}@@[cca@@99|44@cc[[caa}99}}9444444444444444444|||44|))3]]~~|44#|||||88|))))300033))3|||||336__3 ", +" 44_}}ffe..2bb[[.cc#~~||}[[[@@}}}44@cc@@ccccbb}}[aa44444444}}}@@}@@}44##||||||)))||8||884|||44))0330;;||4##4;;||)88!))~~6__{ ", +" 44_}}ffe..2bb[[.cc#~~||}[[[@@}}}44@cc@@ccccbb}}[aa44444444}}}@@}@@}44##||||||)))||8||884|||44))0330;;||4##4;;||)88!))~~6__{ ", +" }}6}}ffedd.[[ccb44]}}''ljjkll''e@@4}}@@a[[aaa@@444}..ff7//jjjkkkjjlmm''%..}||))-88|88||||||3333|44211//mqqmee}}4|||||336__! ", +" }}6}}ffedd.[[ccb44]}}''ljjkll''e@@4}}@@a[[aaa@@444}..ff7//jjjkkkjjlmm''%..}||))-88|88||||||3333|44211//mqqmee}}4|||||336__! ", +" 44]}}ffeccc[[dd[33)77oopsskoooojll=}}44[[[[}}44,77moooooooosskkokkkoooooool''22#))|||44|4433344%qqkkkkkjjjk''@@|))|||33___) ", +" <<]}}ffebbb[[cc@66#ttoookkkkkooskkj77[[}[[a44}}joooookkoooossoosoooookkkkkkkkkk.9948844400)[[qqjkkjjjmmjqqj''}}|))|!!33]__; ", +" <<]}}ffebbb[[cc@66#ttoookkkkkooskkj77[[}[[a44}}joooookkoooossoosoooookkkkkkkkkk.9948844400)[[qqjkkjjjmmjqqj''}}|))|!!33]__; ", +" }}6}}ee^..b[[[[@33#mmkkkkksqq...mmokk//@}}[4444/kkkkkppoppoooookkkoppkkpkknkkkk[[[|||||3332nnjjklln<>,lll[[|||)))3333___# ", +" }}]&&gg2ccccc[[c44]}}llkkk=[[uuokkkjjnnk22}cc442nnokkoontttttttttttttttqnnkkk%%@}}|))]]6||2kkjjt22.kk>>,lll[[|||)))3333___# ", +" @@_44%%2bb[[[[[[44)33..koof&&mmmkkkjjjjk''@@@44@llkooppvwwxxxxxxxxxxxwwxppnkk..[|||]]__#)))..llkmmlllqq>ll/}}|||33|||33___| ", +" @@644ee2[[[cc[[[cc433||2qqk,,##>jjkjjkklll@cc444mmkookkokkjkkkkkjjkjjkkjkknll[[[44)__||4||8))ccqjjlnnjjjqq=@@||3||)!!33___4 ", +" @@644ee2[[[cc[[[cc433||2qqk,,##>jjkjjkklll@cc444mmkookkokkjkkkkkjjkjjkkjkknll[[[44)__||4||8))ccqjjlnnjjjqq=@@||3||)!!33___4 ", +" @@]&&ee2[[[cc[[[[[@||00!..mjjlllkknkkjjkmm@@@@@#''oookkoooooossooooookkkkkkmm}}@440]]|||44|||))@//jmmff@&&444||3||)3333]__# ", +" @@_&&eedcc[cc[[@@@c}}|||33}%%mmjkkjjjkkl22@..@@4ggokkookkkoooookoookkkkkkkn77}}[||_))||4||4||33)}}2[[##3!!)))33)|||))33___4 ", +" @@_&&eedcc[cc[[@@@c}}|||33}%%mmjkkjjjkkl22@..@@4ggokkookkkoooookoookkkkkkkn77}}[||_))||4||4||33)}}2[[##3!!)))33)|||))33___4 ", +" [[]44ee2bbc[[ccc[[ccc@@|||!||}}.%%7''11.@@fdd99|==kkkoooookoooookkkkkkkkkkk%%}}a||_))44|||4||44|<<}4466___633|||||!||33___4 ", +" [[]44ee2bbc[[ccc[[ccc@@|||!||}}.%%7''11.@@fdd99|==kkkoooookoooookkkkkkkkkkk%%}}a||_))44|||4||44|<<}4466___633|||||!||33___4 ", +" [[644^^^bbb[[[[bcc[[[[[[@@4||||4444}}@@577gcc}})22okkkkkookookkkookkknnjnno22}}}33_))444|||44||4^^@]]__666i||||3|||!!33___< ", +" ++]44ee^ccc[[[[[cccaa[[@[[[}}44444}@@dde772[[}}3@@looookkkkkkkkokkkkkkkkkkk++}}}))_||||4||4||||4[[#____6||}cc[[|!!)||33]__} ", +" ++]44ee^ccc[[[[[cccaa[[@[[[}}44444}@@dde772[[}}3@@looookkkkkkkkokkkkkkkkkkk++}}}))_||||4||4||||4[[#____6||}cc[[|!!)||33]__} ", +" [[_##ee2cc@cc[[[[[[[[bb[[[c}}aa}aa}@@dd=bb[}}44)]]c%%//lkkkkkookkkkkkllm''.}}..a||_4444|444||||}}}4_____44277^^|||3))33___} ", +" .._44^^2[[c[[@@[cc[[[[[c@@[cc[[[@@a[[cc@@@@}}@@){{3||44},,.2222222.[[@@&44}^^hh4))_||||4||)||44[[[|__]]644f''^^|||!||~~___} ", +" .._44^^2[[c[[@@[cc[[[[[c@@[cc[[[@@a[[cc@@@@}}@@){{3||44},,.2222222.[[@@&44}^^hh4))_||||4||)||44[[[|__]]644f''^^|||!||~~___} ", +" ,,]&&ee2cc[bb[[@aa[[[@@[@@[[[@@[@@}@@}}@}}}}}}}9||333||4|||||||4|||44449}}c^^@@4||_))))|##}^^mmkll[{{]]6||c^^&&|||)3333___@ ", +" ,,]&&ee2cc[bb[[@aa[[[@@[@@[[[@@[@@}@@}}@}}}}}}}9||333||4|||||||4|||44449}}c^^@@4||_))))|##}^^mmkll[{{]]6||c^^&&|||)3333___@ ", +" ..]44^^dcc[bb[[[aa[[[[[}@@[@@@@@}}@@@}}}}}4}}}}444#4444||||||44444444999}}}99||8||]6644.''njjkkjllm@@{{6||44433|))33333___@ ", +" ..]&&^^dcc[[[[[[@@aaa[[a[[[@@@@[}}}@@}}@}}}}}99}}}444444##44499944444444444||444443))eekkkjkkjjkkkjqq55|||33333|))3!!33___[ ", +" ..]&&^^dcc[[[[[[@@aaa[[a[[[@@@@[}}}@@}}@}}}}}99}}}444444##44499944444444444||444443))eekkkjkkjjkkkjqq55|||33333|))3!!33___[ ", +" ..]44ee2cc[[[[[[[[[[[[[@[[@@@aaa}}}}}@@@9949999}44444444444994444444444444|44444||)3355kjjjkklljlljkknn244i|||||))3))33___[ ", +" ..]44^^d@@@[[[[[cc[[[@@@}}@@@@@}}}@}}@@}999}}}}9}}9}}444444444444444444444444|||44|{{44mkkjllcc(kkq**kk^44|))||!||)!!33___, ", +" ..]44^^d@@@[[[[[cc[[[@@@}}@@@@@}}}@}}@@}999}}}}9}}9}}444444444444444444444444|||44|{{44mkkjllcc(kkq**kk^44|))||!||)!!33___, ", +" 22]||^^2cc[[[[[[[[[[[[[[}}}@@[[@@@}}}}}}}}}}}aa999}994444444444444|44||44444488||||)){{ckkkkk%%.jj[77qqc|||33))|33)3333___, ", +" 22]||^^2cc[[[[[[[[[[[[[[}}}@@[[@@@}}}}}}}}}}}aa999}994444444444444|44||44444488||||)){{ckkkkk%%.jj[77qqc|||33))|33)3333___, ", +" 55_44^^2cc[[[[[[aa[[[[[@@@@@@}}}@@a}}aa@@@@}}}}}44444444444444444444444444444444444||66)ffljjjj@}}fjjqq@||)))!!|))33366___. ", +" ==]4422d@@[[[[[[@@[[[aa@[[@aa@@@aa@}}@@}}}9}}}}9999994444444444444444444||4||448|||||)){))fjjkkf==jjj''}||333|||3333366___. ", +" ==]4422d@@[[[[[[@@[[[aa@[[@aa@@@aa@}}@@}}}9}}}}9999994444444444444444444||4||448|||||)){))fjjkkf==jjj''}||333|||3333366___. ", +" %%644eedcc[[[cc@aa[[[aa[}}@}}@@[}}}@@@@@}}4}}}}944&4444}9949944444|44444444||88|44|||||)66|55qqkkkqjj%%})))!!))|)))3333___. ", +" %%]##22d@@[[[[[[ccc@@@@@@@@}}}}@}}@aaaa@aa}44}}}}}}999994444444944|44||444444||||||||44|))633@@7qqknn^^&||3))))|||33300___2 ", +" %%]##22d@@[[[[[[ccc@@@@@@@@}}}}@}}@aaaa@aa}44}}}}}}999994444444944|44||444444||||||||44|))633@@7qqknn^^&||3))))|||33300___2 ", +" %%]4422b[[[[[[[[bbc@@aa@[[[[[@@[@@@@@}}}}}}}}}}}449444499944444444444444||444||||||44|||||3{{33|[[f%%cc#||3||33|)))3366___5 ", +" %%]4422b[[[[[[[[bbc@@aa@[[[[[@@[@@@@@}}}}}}}}}}}449444499944444444444444||444||||||44|||||3{{33|[[f%%cc#||3||33|)))3366___5 ", +" **64422dcc@cccca[[[[[[[@aa[aa[[[aa@}}}}}@@}9999}}}9444499944444444444||444|||444|||||||)|||||33~66)##}})33|))333||333{{___5 ", +" **]4422b[[[[[bb[@@[@@@@[[[@[[aa[@@}@@@@}}}@}}99}99}}}9944444444444444444|||||||444|||||||||))33)33{||||))))33|||))!))66___% ", +" **]4422b[[[[[bb[@@[@@@@[[[@[[aa[@@}@@@@}}}@}}99}99}}}9944444444444444444|||||||444|||||||||))33)33{||||))))33|||))!))66___% ", +" **64422bcc[[[ccc[[@@@@@4}}}44<<9}}@}}@@@}}@@@}}9}}}}}99}444||||||||88|||44|||||444|88||4|||))33{66!))]]3))|))333||)33~~___% ", +" ''~44^^dccc@@cc@}}4||44}[[,..[[@}}|4499}}}}}}aaa@@}44||)44<}}[[[}}}||)))|||4444||||||88)))3))44@[[@<<44)666))))3333))66___* ", +" ''~44^^dccc@@cc@}}4||44}[[,..[[@}}|4499}}}}}}aaa@@}44||)44<}}[[[}}}||)))|||4444||||||88)))3))44@[[@<<44)666))))3333))66___* ", +" ''~4422dcc[@@44)))<^^mmjoooooookmm1}}88|aa[aa@@@44333442//lookkonnl//^^433||||||44|ii66344fmmjjjkkkjjll'..|]]66)||)!!66___% ", +" ''~4422dcc[@@44)))<^^mmjoooooookmm1}}88|aa[aa@@@44333442//lookkonnl//^^433||||||44|ii66344fmmjjjkkkjjll'..|]]66)||)!!66___% ", +" //644222bb[||66)22joouusoooookkooookk==4))4@@}}|003..llkssokkkkkkkjkkkkl..)!!884||366||2kkokkookkkkkkkknkkm[[66!))3))]]___' ", +" //6##^^2cc)00332kkullff/sssssooooooooss%444}}))633=ookkm..flloojoonnnjjnkk2||44|66_))hhokk'..fflkkkjjjjjkkkjj[[{88!))66_]]' ", +" //6##^^2cc)00332kkullff/sssssooooooooss%444}}))633=ookkm..flloojoonnnjjnkk2||44|66_))hhokk'..fflkkkjjjjjkkkjj[[{88!))66_]]' ", +" //344^^2}}3~~<><><##66))))3366_-- ", +" |||^^f^^}6633[qqossll'kkskkssokkkooll2||}}}||366[qqookllmllkkkooojjkkoqq4||||433_33..luuj**mmkookkkkkjkko**44;|||33]]_-- ", +" |||^^f^^}6633[qqossll'kkskkssokkkooll2||}}}||366[qqookllmllkkkooojjkkoqq4||||433_33..luuj**mmkookkkkkjkko**44;|||33]]_-- ", +" -44eeg@@03344mooujj##4ssoyynnqsslkkkkl[[}@@666<>ooknnqkklljnn/##}}400_@@kkojj.ccjjkkkkkkjjkkknkk%%|9943366_-- ", +" -44eeg@@03344mooujj##4ssoyynnqsslkkkkl[[}@@666<>ooknnqkklljnn/##}}400_@@kkojj.ccjjkkkkkkjjkkknkk%%|9943366_-- ", +" |||^^f44i33cckssl..44.ssl**((.((mjjkko22.22||622ooooo@&&=llnnomm%mm%%mkkn....a66311oon..)..lljmmmmmnn:ll/llmm&aa[||66_## ", +" #))22g44333..oll4++&&+ss%>>..=..%sskko==^ee))3ffonnoo7**@[[ooj%%@%%==lnnk..^^[66)77oo'||%[[@@7..+>>...,,.>>nn[ee244___44 ", +" #))22g44333..oll4++&&+ss%>>..=..%sskko==^ee))3ffonnoo7**@[[ooj%%@%%==lnnk..^^[66)77oo'||%[[@@7..+>>...,,.>>nn[ee244___44 ", +" 43322f}}|))}}k//,++__.ss%@@77m((mnnook>>%77--3ccjoo//'nn+##kkq..%%%**lkkq,,77.~~322oo/!!=@@&&'''*%%**'===((''c11d44___44 ", +" &))22gdd}||||fooyoo==ossqmmkkokkoookk%22/11443||%oo//}}}@''uum((kllllkkk.cc11c))6##''k77[,,qqknnkjjkklkklll[[.^^@33]]_&& ", +" &))22gdd}||||fooyoo==ossqmmkkokkoookk%22/11443||%oo//}}}@''uum((kllllkkk.cc11c))6##''k77[,,qqknnkjjkklkklll[[.^^@33]]_&& ", +" &))22fddd}}44|^^noosskookoooooooojjff[gggcc@@4||4ffjjokknoonnooonkkooq..@^^22a44)33##7jjskkooknnkoonnknnm..}}[99|33]]_}} ", +" &))22fddd}}44|^^noosskookoooooooojjff[gggcc@@4||4ffjjokknoonnooonkkooq..@^^22a44)33##7jjskkooknnkoonnknnm..}}[99|33]]_}} ", +" }))22%22222cc}44@%%llooouoooonqq%,,}}2ffbcc@@c44|||@@1qqknnooknnlqq==}44c[[}}4444||))|..'llnnjooknnll/^^<||}}4||3{{]]_@@ ", +" }3322%22bdd22dcc@}}@@c^^2^^22.@@[..dd2bbc[[@@@[[}99444<<[....2..+}}||}@@a4499444444|||))|}}cc2^^2..@@4--4||||833)33]]_@@ ", +" }3322%22bdd22dcc@}}@@c^^2^^22.@@[..dd2bbc[[@@@[[}99444<<[....2..+}}||}@@a4499444444|||))|}}cc2^^2..@@4--4||||833)33]]_@@ ", +" &))ddf22222..d..d22cccbbbcc[[[ccd22ccc@@c[[[[[@@[99}}4}}}44444##}}}994}}44444944444||844|))|||||)||))|33|))||)||i3366_[[ ", +" }33..e22222dd222dbbdd...dddccccc[..ccbbbc@@[[[@@}}}}}}994}}}}|44444444}}999444444||44444|||||)!!3!!!!);;)!!))|||333___++ ", +" }33..e22222dd222dbbdd...dddccccc[..ccbbbc@@[[[@@}}}}}}994}}}}|44444444}}999444444||44444|||||)!!3!!!!);;)!!))|||333___++ ", +" @33..%222..dd222dcccc}@@@}}}}}}}[bb[[cccb[[@@[[[}}}}}}44444)))44444}}4449994444444444#|||))!!)||3)))))33|33333))|33___.. ", +" @33..%222..dd222dcccc}@@@}}}}}}}[bb[[cccb[[@@[[[}}}}}}44444)))44444}}4449994444444444#|||))!!)||3)))))33|33333))|33___.. ", +" +33..g22222...@@444}}c22%ff^^.}}4}}@@c[[[aa@@[@@}44))|44c>>ffe22[44||!4444444444444||i33|}}ccz==^..}}#{{6--)))))|33___.. ", +" @33..g22d[[}})))c''jjusskssuuojj([[444}}ccc[[@446||cc'jjkkkkkoookll77[))|44||94443366|22/nnooosskkknnqff#!!33)||333___22 ", +" @33..g22d[[}})))c''jjusskssuuojj([[444}}ccc[[@446||cc'jjkkkkkoookll77[))|44||94443366|22/nnooosskkknnqff#!!33)||333___22 ", +" +{{cc%22[4466477okkookkkskkkksookoo**444}[[99)664''kksllmooookkkkkkooj%%#||444||3__}}mnnnnnnnkkkkkkkknool..!!|||)66___^^ ", +" ,{{ccebb|66||7uu'@@}}#%%ossoosooossoo'}}9}}336--'oooo'&&<@@jjkooknnkkkoo=44&&466_}}qqn:::::nnokkokkookjjojjcc|44433___== ", +" ,{{ccebb|66||7uu'@@}}#%%ossoosooossoo'}}9}}336--'oooo'&&<@@jjkooknnkkkoo=44&&466_}}qqn:::::nnokkokkookjjojjcc|44433___== ", +" .{{[[^}}i33ccnuujnn%%;mmjlljjqnnlllnnk..c[[33~bbokkoo%&&*||ll7mmknnnnlnnl@@cc}663ffoo:::l::::lootllllkllmnn((&}}}))___ff ", +" .{{[[^}}i33ccnuujnn%%;mmjlljjqnnlllnnk..c[[33~bbokkoo%&&*||ll7mmknnnnlnnl@@cc}663ffoo:::l::::lootllllkllmnn((&}}}))___ff ", +" .~~[[e44|))22ooosoo##%kk^..===^^*..mms==2ff))0%%okkoo2||;^^oo.22*>>../kkj22^^[663//kkmAA:BB::>..*..==.**,::ll}ddb||___%% ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Preview_6110.xpm b/xgnokii/xpm/Preview_6110.xpm new file mode 100644 index 0000000..70bd411 --- /dev/null +++ b/xgnokii/xpm/Preview_6110.xpm @@ -0,0 +1,1609 @@ +/* XPM */ +static char * Preview_6110_xpm[] = { +"138 289 1317 2", +" c None", +". c #6B526B", +"+ c #7B637B", +"@ c #524A52", +"# c #423942", +"$ c #393139", +"% c #423142", +"& c #736373", +"* c #6B5A6B", +"= c #735A73", +"- c #5A4A52", +"; c #4A424A", +"> c #4A4242", +", c #4A3942", +"' c #393939", +") c #291821", +"! c #846B73", +"~ c #846B7B", +"{ c #393942", +"] c #6B5A63", +"^ c #7B6B7B", +"/ c #635263", +"( c #424242", +"_ c #42394A", +": c #846B84", +"< c #63525A", +"[ c #181010", +"} c #7B636B", +"| c #5A4A5A", +"1 c #73637B", +"2 c #181818", +"3 c #211818", +"4 c #212121", +"5 c #392939", +"6 c #5A526B", +"7 c #847384", +"8 c #292929", +"9 c #312931", +"0 c #312929", +"a c #7B6373", +"b c #948484", +"c c #8C738C", +"d c #8C737B", +"e c #8C7384", +"f c #524A5A", +"g c #84738C", +"h c #5A5263", +"i c #392131", +"j c #8C7B84", +"k c #8C7B8C", +"l c #7B6B73", +"m c #313129", +"n c #8C7B94", +"o c #5A4A63", +"p c #292931", +"q c #423129", +"r c #7B6B6B", +"s c #9C849C", +"t c #212118", +"u c #312921", +"v c #947B94", +"w c #312131", +"x c #293121", +"y c #524242", +"z c #392929", +"A c #84737B", +"B c #634A52", +"C c #182118", +"D c #101008", +"E c #000000", +"F c #424A31", +"G c #9C8494", +"H c #080800", +"I c #080808", +"J c #182110", +"K c #181810", +"L c #101818", +"M c #211010", +"N c #847B84", +"O c #633942", +"P c #BDADC6", +"Q c #211810", +"R c #100808", +"S c #AD9494", +"T c #B59CB5", +"U c #EFE7EF", +"V c #FFF7FF", +"W c #F7DEF7", +"X c #A58CA5", +"Y c #EFD6EF", +"Z c #FFEFFF", +"` c #DEC6E7", +" . c #E7CEE7", +".. c #CEB5C6", +"+. c #AD94AD", +"@. c #BD9CBD", +"#. c #9484A5", +"$. c #94849C", +"%. c #E7CEEF", +"&. c #C6ADCE", +"*. c #D6BDD6", +"=. c #101018", +"-. c #ADA5A5", +";. c #292131", +">. c #C6ADD6", +",. c #DEC6DE", +"'. c #ADA5B5", +"). c #AD94A5", +"!. c #210810", +"~. c #212931", +"{. c #6B5A5A", +"]. c #AD9C9C", +"^. c #292918", +"/. c #313121", +"(. c #5A5252", +"_. c #393929", +":. c #847373", +"<. c #4A425A", +"[. c #39314A", +"}. c #7B737B", +"|. c #733939", +"1. c #AD5A5A", +"2. c #AD6363", +"3. c #B5A5AD", +"4. c #BD5A63", +"5. c #CE6B7B", +"6. c #633939", +"7. c #CE7373", +"8. c #84636B", +"9. c #9C8C9C", +"0. c #AD5252", +"a. c #8C524A", +"b. c #E77B7B", +"c. c #C6635A", +"d. c #844A4A", +"e. c #E7949C", +"f. c #CE6B6B", +"g. c #A594A5", +"h. c #948494", +"i. c #D6635A", +"j. c #A54A42", +"k. c #B59CAD", +"l. c #AD8C9C", +"m. c #B5A5B5", +"n. c #C6B5CE", +"o. c #8C6B84", +"p. c #948C9C", +"q. c #BDADBD", +"r. c #C6ADC6", +"s. c #BDADB5", +"t. c #BD9CA5", +"u. c #B59CA5", +"v. c #8C7B7B", +"w. c #231C1B", +"x. c #1A1918", +"y. c #2C2B29", +"z. c #2E2C2C", +"A. c #222120", +"B. c #27211A", +"C. c #23221C", +"D. c #222221", +"E. c #201F1D", +"F. c #2A2A24", +"G. c #252422", +"H. c #2D2C2B", +"I. c #2C2C2B", +"J. c #2C2C2C", +"K. c #20201E", +"L. c #27261F", +"M. c #292721", +"N. c #2C2C29", +"O. c #25251F", +"P. c #21211E", +"Q. c #23231E", +"R. c #2A2A29", +"S. c #292823", +"T. c #242322", +"U. c #21201F", +"V. c #1D1E16", +"W. c #171B14", +"X. c #22221A", +"Y. c #222220", +"Z. c #21211F", +"`. c #26211B", +" + c #1B1612", +".+ c #13130B", +"++ c #16160E", +"@+ c #17170F", +"#+ c #1F1816", +"$+ c #17160F", +"%+ c #272722", +"&+ c #B7B6B5", +"*+ c #CBCBCB", +"=+ c #CFCFCF", +"-+ c #C3C2C1", +";+ c #2F2F2D", +">+ c #23211C", +",+ c #2E2928", +"'+ c #B7B7B6", +")+ c #BFBFBE", +"!+ c #4A4A49", +"~+ c #C5C5C5", +"{+ c #CECECE", +"]+ c #CDCDCD", +"^+ c #CCCCCC", +"/+ c #BFBFBF", +"(+ c #4A4948", +"_+ c #CECECD", +":+ c #B4B4B3", +"<+ c #30302F", +"[+ c #353535", +"}+ c #C2C2C2", +"|+ c #A6A6A6", +"1+ c #424241", +"2+ c #B9B8B8", +"3+ c #B5B4B2", +"4+ c #3A3635", +"5+ c #11110A", +"6+ c #242423", +"7+ c #B8B7B6", +"8+ c #CECCCD", +"9+ c #CFCECF", +"0+ c #B3B2B2", +"a+ c #22221F", +"b+ c #1D1D15", +"c+ c #16150F", +"d+ c #333330", +"e+ c #D3D3D2", +"f+ c #F6F6F6", +"g+ c #F9F9F9", +"h+ c #EAEAEA", +"i+ c #C0C0BF", +"j+ c #20201F", +"k+ c #393934", +"l+ c #D2D2D2", +"m+ c #E8E8E8", +"n+ c #EBEBEB", +"o+ c #EFEFEF", +"p+ c #E9E9E9", +"q+ c #DADADA", +"r+ c #CACACA", +"s+ c #C9C9C9", +"t+ c #D8D8D8", +"u+ c #F8F8F8", +"v+ c #DCDCDC", +"w+ c #575757", +"x+ c #D7D7D7", +"y+ c #DEDEDE", +"z+ c #3B3A3A", +"A+ c #43423E", +"B+ c #D5D4D5", +"C+ c #D2D1D0", +"D+ c #484741", +"E+ c #1A1A18", +"F+ c #42413D", +"G+ c #E2D9E1", +"H+ c #F7F6F7", +"I+ c #F9F5F9", +"J+ c #3A3A39", +"K+ c #1D1D18", +"L+ c #161B0F", +"M+ c #171810", +"N+ c #1F1810", +"O+ c #1C1810", +"P+ c #1C1C13", +"Q+ c #1A1A13", +"R+ c #3E3E3B", +"S+ c #CACAC9", +"T+ c #ECECEC", +"U+ c #E7E7E7", +"V+ c #DDDDDD", +"W+ c #3F3F3F", +"X+ c #3B3B3B", +"Y+ c #D1D1D1", +"Z+ c #F7F7F7", +"`+ c #E0E0E0", +" @ c #444444", +".@ c #262626", +"+@ c #292928", +"@@ c #3E3E3E", +"#@ c #FBFBFB", +"$@ c #F1F1F1", +"%@ c #EEEEEE", +"&@ c #E3E3E3", +"*@ c #D1D1D0", +"=@ c #2E2E2E", +"-@ c #1A1818", +";@ c #413336", +">@ c #D0CECE", +",@ c #D6D6D5", +"'@ c #4F4E44", +")@ c #282725", +"!@ c #C5C4C4", +"~@ c #E4E4E4", +"{@ c #E3E2E3", +"]@ c #CAC8C8", +"^@ c #262624", +"/@ c #151A12", +"(@ c #15170F", +"_@ c #161310", +":@ c #171C10", +"<@ c #181C10", +"[@ c #2E2E2D", +"}@ c #E1E1E1", +"|@ c #5A5A5A", +"1@ c #D6D6D6", +"2@ c #585858", +"3@ c #FCFCFC", +"4@ c #141410", +"5@ c #0C0C0C", +"6@ c #EEEEED", +"7@ c #63635E", +"8@ c #333332", +"9@ c #23211D", +"0@ c #3A3434", +"a@ c #CDCBCB", +"b@ c #D8D8D7", +"c@ c #494943", +"d@ c #41413C", +"e@ c #DBDBDB", +"f@ c #696969", +"g@ c #656465", +"h@ c #E8E0E8", +"i@ c #E0DEDF", +"j@ c #45453F", +"k@ c #1B1B15", +"l@ c #161A12", +"m@ c #181710", +"n@ c #161810", +"o@ c #171910", +"p@ c #1A1A15", +"q@ c #AFAFAF", +"r@ c #BDBDBD", +"s@ c #626261", +"t@ c #5C5C5B", +"u@ c #E2E2E2", +"v@ c #E6E6E6", +"w@ c #FAFAFA", +"x@ c #F4F4F4", +"y@ c #D5D5D5", +"z@ c #777776", +"A@ c #555553", +"B@ c #535352", +"C@ c #707070", +"D@ c #D0D0D0", +"E@ c #F5F5F5", +"F@ c #CFCFCE", +"G@ c #AFAFAE", +"H@ c #585655", +"I@ c #62615E", +"J@ c #B9B7B7", +"K@ c #898989", +"L@ c #DFDFDE", +"M@ c #D3D2D3", +"N@ c #E1DFE1", +"O@ c #BFBFBD", +"P@ c #464642", +"Q@ c #282421", +"R@ c #15150F", +"S@ c #171813", +"T@ c #161910", +"U@ c #161811", +"V@ c #191B14", +"W@ c #2A2A28", +"X@ c #3F3F39", +"Y@ c #C1C1C0", +"Z@ c #EDEDED", +"`@ c #E3E3E2", +" # c #565656", +".# c #C8C9C7", +"+# c #E1E1E0", +"@# c #6B6666", +"## c #DCDBDA", +"$# c #EDEDEC", +"%# c #E4E3E3", +"&# c #C4C4C3", +"*# c #272725", +"=# c #16180F", +"-# c #171A10", +";# c #30302D", +"># c #8D8D8B", +",# c #929290", +"'# c #3A3B36", +")# c #2A2B25", +"!# c #393A38", +"~# c #C8C8C8", +"{# c #D7D7D6", +"]# c #CDCDCC", +"^# c #C8C8C7", +"/# c #D5D5D4", +"(# c #494A49", +"_# c #C2C2C1", +":# c #373732", +"<# c #2E2F2C", +"[# c #C6C7C6", +"}# c #D4D4D4", +"|# c #CBCBCA", +"1# c #CBCACA", +"2# c #D5D6D5", +"3# c #CACBCA", +"4# c #3D3D3D", +"5# c #2F2F2E", +"6# c #303030", +"7# c #3C3D3C", +"8# c #C4C5C4", +"9# c #BCBBB9", +"0# c #2B2B24", +"a# c #171D10", +"b# c #17180F", +"c# c #22271C", +"d# c #222421", +"e# c #22241C", +"f# c #191E15", +"g# c #282A27", +"h# c #242624", +"i# c #333331", +"j# c #262623", +"k# c #31312B", +"l# c #242523", +"m# c #323230", +"n# c #313230", +"o# c #232422", +"p# c #2B2C25", +"q# c #272822", +"r# c #242522", +"s# c #272821", +"t# c #222720", +"u# c #232322", +"v# c #313130", +"w# c #323330", +"x# c #373731", +"y# c #333431", +"z# c #333433", +"A# c #333432", +"B# c #242623", +"C# c #232721", +"D# c #181412", +"E# c #171716", +"F# c #212620", +"G# c #242422", +"H# c #2E2E2B", +"I# c #2D2923", +"J# c #111612", +"K# c #1B1810", +"L# c #181E10", +"M# c #161B10", +"N# c #151710", +"O# c #181811", +"P# c #1B1C15", +"Q# c #171C14", +"R# c #151B10", +"S# c #161710", +"T# c #161610", +"U# c #161D10", +"V# c #161C13", +"W# c #171911", +"X# c #151713", +"Y# c #161815", +"Z# c #161C15", +"`# c #181815", +" $ c #161814", +".$ c #151B0F", +"+$ c #15160F", +"@$ c #16170F", +"#$ c #171D0F", +"$$ c #161813", +"%$ c #161713", +"&$ c #171814", +"*$ c #161C10", +"=$ c #171C0F", +"-$ c #181A10", +";$ c #181910", +">$ c #181D10", +",$ c #181814", +"'$ c #181B10", +")$ c #121910", +"!$ c #151810", +"~$ c #16170E", +"{$ c #15160D", +"]$ c #15150D", +"^$ c #12130A", +"/$ c #16150D", +"($ c #1F1716", +"_$ c #18180F", +":$ c #16190E", +"<$ c #16180E", +"[$ c #17190F", +"}$ c #171B0F", +"|$ c #171E0F", +"1$ c #17210F", +"2$ c #182410", +"3$ c #182312", +"4$ c #192413", +"5$ c #192414", +"6$ c #182213", +"7$ c #192314", +"8$ c #1A2514", +"9$ c #1A2715", +"0$ c #1B2815", +"a$ c #1B2515", +"b$ c #1B2715", +"c$ c #1B2716", +"d$ c #1B2616", +"e$ c #1B2816", +"f$ c #1B2A16", +"g$ c #1A2615", +"h$ c #1A2915", +"i$ c #192915", +"j$ c #192815", +"k$ c #182915", +"l$ c #182815", +"m$ c #172614", +"n$ c #172513", +"o$ c #172511", +"p$ c #172210", +"q$ c #181F10", +"r$ c #161A0E", +"s$ c #15180D", +"t$ c #15170D", +"u$ c #17150F", +"v$ c #181610", +"w$ c #171E10", +"x$ c #1F180F", +"y$ c #171A0F", +"z$ c #171D11", +"A$ c #181F12", +"B$ c #182012", +"C$ c #171F10", +"D$ c #181F13", +"E$ c #1A1F14", +"F$ c #1B2014", +"G$ c #1B2312", +"H$ c #1B2714", +"I$ c #1C2915", +"J$ c #1D2C16", +"K$ c #1D2D17", +"L$ c #1D2E17", +"M$ c #1D3017", +"N$ c #1F3419", +"O$ c #223C1C", +"P$ c #254321", +"Q$ c #274A24", +"R$ c #284B25", +"S$ c #284B24", +"T$ c #274924", +"U$ c #284D26", +"V$ c #294D26", +"W$ c #2A4E27", +"X$ c #294E28", +"Y$ c #294F28", +"Z$ c #2A4F27", +"`$ c #294E27", +" % c #2B4E27", +".% c #2B4F28", +"+% c #2B5028", +"@% c #2B4F27", +"#% c #2B5027", +"$% c #2A5027", +"%% c #2B5128", +"&% c #2B5228", +"*% c #2A4F28", +"=% c #294F26", +"-% c #284E26", +";% c #284F26", +">% c #274E26", +",% c #275026", +"'% c #274E25", +")% c #274D25", +"!% c #264B23", +"~% c #234420", +"{% c #203B1C", +"]% c #1E3318", +"^% c #1C2E16", +"/% c #1B2B15", +"(% c #1A2814", +"_% c #1A2513", +":% c #1A2313", +"<% c #192011", +"[% c #181D12", +"}% c #192013", +"|% c #191E13", +"1% c #182112", +"2% c #171F11", +"3% c #171C11", +"4% c #181B0F", +"5% c #191C10", +"6% c #182310", +"7% c #1D2A17", +"8% c #1F2919", +"9% c #21301A", +"0% c #233A1E", +"a% c #264322", +"b% c #284825", +"c% c #294726", +"d% c #274824", +"e% c #274926", +"f% c #2A4A27", +"g% c #2C4C27", +"h% c #2B4D27", +"i% c #2C5227", +"j% c #2E5428", +"k% c #2E5528", +"l% c #2E562B", +"m% c #2E572B", +"n% c #2E592B", +"o% c #305E2D", +"p% c #346632", +"q% c #3A793B", +"r% c #3E853F", +"s% c #408D42", +"t% c #429146", +"u% c #449447", +"v% c #439347", +"w% c #428E45", +"x% c #428F45", +"y% c #428D44", +"z% c #428C44", +"A% c #418B44", +"B% c #418B43", +"C% c #408942", +"D% c #428B43", +"E% c #428B44", +"F% c #408A43", +"G% c #418C44", +"H% c #418A43", +"I% c #3E8541", +"J% c #3D8440", +"K% c #3C833F", +"L% c #3E8640", +"M% c #3E8540", +"N% c #3C803E", +"O% c #377639", +"P% c #336731", +"Q% c #2F5D2C", +"R% c #2D5829", +"S% c #2B5428", +"T% c #2B5327", +"U% c #2C5127", +"V% c #2A4C27", +"W% c #294926", +"X% c #274724", +"Y% c #284824", +"Z% c #264423", +"`% c #264622", +" & c #233E1F", +".& c #1F3119", +"+& c #1B2414", +"@& c #1B2914", +"#& c #233C1D", +"$& c #2B4D26", +"%& c #30552B", +"&& c #33582E", +"*& c #386033", +"=& c #3F8340", +"-& c #439146", +";& c #439147", +">& c #459549", +",& c #45974A", +"'& c #449649", +")& c #459749", +"!& c #46974A", +"~& c #459347", +"{& c #438E44", +"]& c #418D43", +"^& c #408B42", +"/& c #408B43", +"(& c #408C43", +"_& c #418F44", +":& c #449748", +"<& c #4AA44E", +"[& c #4DAF52", +"}& c #50B456", +"|& c #52B858", +"1& c #53BC5A", +"2& c #53BA59", +"3& c #52B859", +"4& c #52B758", +"5& c #51B657", +"6& c #51B457", +"7& c #50B356", +"8& c #4FB356", +"9& c #4FB355", +"0& c #4FB255", +"a& c #50B355", +"b& c #50B256", +"c& c #4DAF54", +"d& c #4DAD53", +"e& c #4CAD53", +"f& c #4DAE53", +"g& c #4CAF54", +"h& c #4EAF55", +"i& c #4FB055", +"j& c #49A44F", +"k& c #479A4A", +"l& c #439045", +"m& c #429045", +"n& c #449247", +"o& c #459548", +"p& c #459649", +"q& c #449348", +"r& c #439046", +"s& c #439247", +"t& c #419045", +"u& c #418E44", +"v& c #3B7A3B", +"w& c #325A2D", +"x& c #2A4322", +"y& c #1F2C18", +"z& c #182011", +"A& c #182010", +"B& c #182311", +"C& c #233B1E", +"D& c #326230", +"E& c #3E833F", +"F& c #459047", +"G& c #4A9A4C", +"H& c #4FA953", +"I& c #52B558", +"J& c #55C25D", +"K& c #56C45E", +"L& c #57C55F", +"M& c #57C65F", +"N& c #56C35E", +"O& c #53BE5B", +"P& c #53BC5B", +"Q& c #52BB5A", +"R& c #50B858", +"S& c #4FB657", +"T& c #51BB58", +"U& c #54C05A", +"V& c #56C45D", +"W& c #58C760", +"X& c #58C860", +"Y& c #58C660", +"Z& c #58C75F", +"`& c #58C65F", +" * c #57C45E", +".* c #57C55E", +"+* c #59C961", +"@* c #5ACA62", +"#* c #59C861", +"$* c #57C35F", +"%* c #56C25D", +"&* c #55C05C", +"** c #55BE5C", +"=* c #54BC5B", +"-* c #53BA5A", +";* c #4DA750", +">* c #468F46", +",* c #3B6C37", +"'* c #2E4C28", +")* c #1F2E18", +"!* c #171A11", +"~* c #181A11", +"{* c #1C2815", +"]* c #2A4B26", +"^* c #50B156", +"/* c #55BF5C", +"(* c #54C05C", +"_* c #51B257", +":* c #4A984B", +"<* c #3D733A", +"[* c #2A4623", +"}* c #1A2414", +"|* c #181E15", +"1* c #21341B", +"2* c #345E30", +"3* c #4BA34F", +"4* c #54B959", +"5* c #499A4B", +"6* c #365F31", +"7* c #1C2E19", +"8* c #151A0F", +"9* c #254221", +"0* c #53B859", +"a* c #50B154", +"b* c #1D351B", +"c* c #141D11", +"d* c #192614", +"e* c #274C25", +"f* c #55BF5B", +"g* c #1D381D", +"h* c #15190F", +"i* c #1C1D14", +"j* c #1A2815", +"k* c #285027", +"l* c #439447", +"m* c #4BA651", +"n* c #1C331B", +"o* c #1F1F17", +"p* c #1A2A16", +"q* c #295228", +"r* c #449647", +"s* c #50B056", +"t* c #264223", +"u* c #181911", +"v* c #181D14", +"w* c #295028", +"x* c #55BD5C", +"y* c #294A26", +"z* c #191C13", +"A* c #181F16", +"B* c #1D1810", +"C* c #191810", +"D* c #1A2314", +"E* c #274624", +"F* c #4AA24E", +"G* c #2E582D", +"H* c #1B2316", +"I* c #1A1B11", +"J* c #1A2214", +"K* c #284924", +"L* c #4AA34F", +"M* c #51B358", +"N* c #2F5D2F", +"O* c #1C2716", +"P* c #202017", +"Q* c #1C2615", +"R* c #2C4F28", +"S* c #4EAF54", +"T* c #316030", +"U* c #1C2916", +"V* c #161A10", +"W* c #191B10", +"X* c #1D2B17", +"Y* c #2D562B", +"Z* c #499F4E", +"`* c #4DAA52", +" = c #325F31", +".= c #1A2816", +"+= c #181F15", +"@= c #181E12", +"#= c #1D2C17", +"$= c #2E592C", +"%= c #4BA44F", +"&= c #4CA650", +"*= c #326131", +"== c #151A11", +"-= c #1D1A10", +";= c #1D2D18", +">= c #2E572C", +",= c #49A24E", +"'= c #356331", +")= c #1D2E19", +"!= c #151A10", +"~= c #181E14", +"{= c #1A1F12", +"]= c #2D552C", +"^= c #4BA14E", +"/= c #356431", +"(= c #1E2F19", +"_= c #1F1910", +":= c #181E0F", +"<= c #2D552B", +"[= c #499F4D", +"}= c #4BA14D", +"|= c #336331", +"1= c #1F2E19", +"2= c #15180F", +"3= c #1B2613", +"4= c #2D542A", +"5= c #499E4D", +"6= c #4BA04D", +"7= c #356130", +"8= c #1E2C18", +"9= c #1C1B10", +"0= c #1D2716", +"a= c #2D5329", +"b= c #499D4C", +"c= c #4B9E4D", +"d= c #355C2F", +"e= c #1D2817", +"f= c #161B14", +"g= c #1E2816", +"h= c #469548", +"i= c #4C9E4D", +"j= c #34542E", +"k= c #1B2015", +"l= c #1E1E16", +"m= c #1D2916", +"n= c #2D5327", +"o= c #4EA451", +"p= c #35492C", +"q= c #181F14", +"r= c #2D5427", +"s= c #51B959", +"t= c #4FA653", +"u= c #37402A", +"v= c #111209", +"w= c #1C2C17", +"x= c #408A42", +"y= c #4FA752", +"z= c #31382A", +"A= c #1D2A16", +"B= c #2C5328", +"C= c #4EA652", +"D= c #313F26", +"E= c #1D1B10", +"F= c #1C2A16", +"G= c #2B5227", +"H= c #418D44", +"I= c #51BB59", +"J= c #4EA651", +"K= c #313923", +"L= c #181E13", +"M= c #1C2414", +"N= c #449347", +"O= c #53BD5B", +"P= c #4EA751", +"Q= c #2A331C", +"R= c #1B2213", +"S= c #2C5027", +"T= c #47994A", +"U= c #54BF5C", +"V= c #52B557", +"W= c #2B4226", +"X= c #1B2413", +"Y= c #2C4B25", +"Z= c #4BA24F", +"`= c #4FAB53", +" - c #2A3C24", +".- c #2A4422", +"+- c #51B156", +"@- c #47994B", +"#- c #23291B", +"$- c #1D1E14", +"%- c #1A1C11", +"&- c #243C1F", +"*- c #46964A", +"=- c #25341F", +"-- c #1B1910", +";- c #191E12", +">- c #274122", +",- c #4DA851", +"'- c #24391F", +")- c #181D11", +"!- c #2E592D", +"~- c #53B95A", +"{- c #54BD5B", +"]- c #263F21", +"^- c #181C11", +"/- c #1E321A", +"(- c #326733", +"_- c #50B457", +":- c #489E4C", +"<- c #274124", +"[- c #20361B", +"}- c #346E34", +"|- c #49A04D", +"1- c #284826", +"2- c #367136", +"3- c #48A04D", +"4- c #203D20", +"5- c #20351B", +"6- c #357136", +"7- c #57C75F", +"8- c #4BAA52", +"9- c #214021", +"0- c #1F331A", +"a- c #336C33", +"b- c #50B557", +"c- c #4BA951", +"d- c #142813", +"e- c #1C2B16", +"f- c #326632", +"g- c #4FB155", +"h- c #4AA64F", +"i- c #13220D", +"j- c #1C1E13", +"k- c #1C2616", +"l- c #2E5A2C", +"m- c #56C05D", +"n- c #4FB256", +"o- c #0F1F0F", +"p- c #1C1E10", +"q- c #56C15D", +"r- c #54BD5C", +"s- c #1D3A1D", +"t- c #1A1D11", +"u- c #264221", +"v- c #55BD5B", +"w- c #51B558", +"x- c #21371C", +"y- c #356D35", +"z- c #192E15", +"A- c #1B1D10", +"B- c #306430", +"C- c #142214", +"D- c #2C562A", +"E- c #4CA952", +"F- c #172616", +"G- c #1F2016", +"H- c #1A2613", +"I- c #2D572B", +"J- c #56C25E", +"K- c #305C2F", +"L- c #121B10", +"M- c #1B1E12", +"N- c #2B5229", +"O- c #274525", +"P- c #12120A", +"Q- c #294924", +"R- c #233B1F", +"S- c #1B1D11", +"T- c #59C760", +"U- c #4EB055", +"V- c #203C1F", +"W- c #254121", +"X- c #4CA851", +"Y- c #234422", +"Z- c #21371D", +"`- c #50B458", +" ; c #204021", +".; c #243C20", +"+; c #50B357", +"@; c #152A16", +"#; c #243A1F", +"$; c #4DAB53", +"%; c #4AA750", +"&; c #193119", +"*; c #20331C", +"=; c #459D4C", +"-; c #142614", +";; c #1E2017", +">; c #182017", +",; c #264A23", +"'; c #3C8940", +"); c #112210", +"!; c #181817", +"~; c #1A1D12", +"{; c #1C2C16", +"]; c #284823", +"^; c #51B758", +"/; c #367939", +"(; c #172A13", +"_; c #151B11", +":; c #1D1910", +"<; c #181914", +"[; c #242C18", +"}; c #2C5A2C", +"|; c #161B11", +"1; c #181916", +"2; c #191C11", +"3; c #479F4C", +"4; c #254623", +"5; c #1A1C13", +"6; c #181B11", +"7; c #152915", +"8; c #50B857", +"9; c #3D8740", +"0; c #244623", +"a; c #1E180F", +"b; c #162312", +"c; c #274F25", +"d; c #3E8A41", +"e; c #4DAC52", +"f; c #53BC59", +"g; c #449C49", +"h; c #347136", +"i; c #20391E", +"j; c #1C2015", +"k; c #181F0F", +"l; c #191A0E", +"m; c #1C2F15", +"n; c #295326", +"o; c #387A3A", +"p; c #429547", +"q; c #48A44F", +"r; c #51B557", +"s; c #54BE5B", +"t; c #54BF5B", +"u; c #54BD5A", +"v; c #53BB59", +"w; c #51B858", +"x; c #4FB456", +"y; c #4EB155", +"z; c #4DB054", +"A; c #4BAB52", +"B; c #4BAA51", +"C; c #4BAB51", +"D; c #4CAD52", +"E; c #4DB053", +"F; c #4DAF53", +"G; c #4DAE52", +"H; c #4EB255", +"I; c #50B656", +"J; c #51BA59", +"K; c #50B757", +"L; c #4BAC52", +"M; c #4CAE52", +"N; c #4CAB52", +"O; c #4AA74F", +"P; c #469D4A", +"Q; c #3F8C43", +"R; c #347338", +"S; c #244823", +"T; c #1B2C17", +"U; c #1E1A16", +"V; c #16170D", +"W; c #171E0E", +"X; c #1B3116", +"Y; c #224520", +"Z; c #285428", +"`; c #2C5F2C", +" > c #316831", +".> c #3A803D", +"+> c #3E8B42", +"@> c #3F8D43", +"#> c #3E8D42", +"$> c #3E8E42", +"%> c #419344", +"&> c #449A48", +"*> c #49A64F", +"=> c #49A74F", +"-> c #439A48", +";> c #409244", +">> c #3F8E42", +",> c #3F8E43", +"'> c #409044", +")> c #3F8F43", +"!> c #3E8B41", +"~> c #3D8840", +"{> c #3B853E", +"]> c #3A823D", +"^> c #39803C", +"/> c #397F3C", +"(> c #387E3B", +"_> c #387D3B", +":> c #377C3A", +"<> c #377B3A", +"[> c #387E3A", +"}> c #38813B", +"|> c #38823B", +"1> c #38803B", +"2> c #39833C", +"3> c #3A853F", +"4> c #3C8A41", +"5> c #3C8941", +"6> c #39833D", +"7> c #38813C", +"8> c #377F3A", +"9> c #37803A", +"0> c #38803A", +"a> c #387F3B", +"b> c #367A38", +"c> c #326B33", +"d> c #2F602E", +"e> c #285228", +"f> c #203D1F", +"g> c #1A2716", +"h> c #17180E", +"i> c #15190E", +"j> c #14190E", +"k> c #142110", +"l> c #152612", +"m> c #182B14", +"n> c #1A3117", +"o> c #1F3B1C", +"p> c #224521", +"q> c #224720", +"r> c #204520", +"s> c #1F411E", +"t> c #1A361A", +"u> c #132813", +"v> c #1E3F1E", +"w> c #204420", +"x> c #214720", +"y> c #214520", +"z> c #21441F", +"A> c #20411F", +"B> c #234520", +"C> c #234521", +"D> c #224420", +"E> c #224421", +"F> c #244621", +"G> c #244822", +"H> c #234922", +"I> c #234B22", +"J> c #234D22", +"K> c #234C22", +"L> c #234A22", +"M> c #234A23", +"N> c #234B23", +"O> c #234923", +"P> c #224823", +"Q> c #1F431F", +"R> c #214621", +"S> c #224822", +"T> c #224A22", +"U> c #244A21", +"V> c #234821", +"W> c #20421E", +"X> c #1D391B", +"Y> c #1B2F17", +"Z> c #1A2616", +"`> c #182115", +" , c #181A15", +"., c #15170E", +"+, c #14160E", +"@, c #13180D", +"#, c #131A0E", +"$, c #141C10", +"%, c #151D11", +"&, c #151E0F", +"*, c #141C0E", +"=, c #141D0F", +"-, c #151E10", +";, c #161F10", +">, c #162011", +",, c #141D0D", +"', c #141C0D", +"), c #141E0E", +"!, c #141A0D", +"~, c #151F10", +"{, c #162212", +"], c #172212", +"^, c #172211", +"/, c #172311", +"(, c #152311", +"_, c #152212", +":, c #162313", +"<, c #162112", +"[, c #181F11", +"}, c #182411", +"|, c #181E11", +"1, c #182113", +"2, c #182414", +"3, c #182714", +"4, c #182814", +"5, c #182813", +"6, c #182B13", +"7, c #192B13", +"8, c #192A14", +"9, c #192B14", +"0, c #192714", +"a, c #192613", +"b, c #192516", +"c, c #191F13", +"d, c #182413", +"e, c #182117", +"f, c #182513", +"g, c #172314", +"h, c #172110", +"i, c #162111", +"j, c #161E11", +"k, c #172013", +"l, c #1A1D10", +"m, c #162013", +"n, c #141C0F", +"o, c #171815", +"p, c #BDDEFF", +"q, c #84A5CE", +"r, c #94BDFF", +"s, c #9CB5F7", +"t, c #4A4A6B", +"u, c #EFFFFF", +"v, c #C6EFFF", +"w, c #6B8CC6", +"x, c #7B9CDE", +"y, c #94ADF7", +"z, c #D6FFFF", +"A, c #424A73", +"B, c #6B7BA5", +"C, c #5A7394", +"D, c #D6CECE", +"E, c #210008", +"F, c #A5C6FF", +"G, c #7373B5", +"H, c #E7DEDE", +"I, c #E7CEDE", +"J, c #BDD6D6", +"K, c #9CADAD", +"L, c #BDD6DE", +"M, c #FF7B63", +"N, c #FF8C6B", +"O, c #FF8473", +"P, c #FF6B5A", +"Q, c #BD5A4A", +"R, c #844242", +"S, c #D6F7F7", +"T, c #CE635A", +"U, c #D6524A", +"V, c #FF6B52", +"W, c #F77B73", +"X, c #7B4242", +"Y, c #102131", +"Z, c #9C4231", +"`, c #7B3931", +" ' c #7B635A", +".' c #2E272E", +"+' c #5D474E", +"@' c #242122", +"#' c #2C2A26", +"$' c #8E798E", +"%' c #62515A", +"&' c #241F1F", +"*' c #272525", +"=' c #14130D", +"-' c #1E1717", +";' c #272626", +">' c #291B22", +",' c #0F0F08", +"'' c #131109", +")' c #292728", +"!' c #322A31", +"~' c #4F464F", +"{' c #594A59", +"]' c #816F81", +"^' c #8A738A", +"/' c #3B3339", +"(' c #42383F", +"_' c #594D5A", +":' c #61545E", +"<' c #5E505C", +"[' c #665764", +"}' c #655464", +"|' c #8E8491", +" ", +" . + @ # $ % @ & * = . - ; > , ' # # $ , # ) ", +" ! ~ ; { % % ] ^ * = / - - ( % ; ' # # # ; ) ", +" ~ . ; ; $ _ / : + / < < ; # # # _ $ ' # ; [ ", +" } * ; $ % , | : + 1 . | , _ ' $ # # $ % ; 2 ", +" . ~ ; $ # ; / & & & . / @ , # # # $ ' $ # 3 ", +" . = ; % { , < & * = < - ; ' _ # ' $ # # # 4 ", +" } ] # % ; @ / * * & . / ; # # $ , # $ $ ; 2 ", +" . * % % ; ; / * = * < | ; _ # % # % ' # , 4 ", +" } * @ 5 ; @ | = ^ & . @ # ; ' % ' ' $ $ ; 2 ", +" * = $ 5 ; ; / & ^ * = ; ; # % ' , # $ % > ) ", +" * / ; 5 ; - 6 * * 7 / ; ; # # # # ' # { ; 8 ", +" ~ / ; 5 ; < | } * = * @ ; # # $ % # $ $ , 9 ", +" ~ = $ # % @ . & ^ 1 * ; @ $ # # # # ' $ # 8 ", +" * * $ $ % @ * . ^ : ] ; _ # # # { $ # $ ; 0 ", +" a / $ $ ; @ * } 1 = . ; ; ; $ ' ' ' # # # 0 ", +" b = ] % % 5 - / = 7 1 < | ; , ' % $ $ $ # , 9 ", +" c ~ . $ # ; @ = 1 & : / @ # ' # $ # $ $ ' # $ ", +" d & ] $ ' % | * * ~ e ] @ ' , # $ # $ $ { ( 9 ", +" a . ] { % # @ / a 7 & } f ; ' # $ _ $ $ $ # # ", +" } = - $ 5 { | * : 7 + g | $ # ' $ ' ' $ $ # ' ", +" * h $ 5 ; ; * + ^ ^ = | ; # % $ $ $ ' $ > i ", +" a < 5 { % | / = c j . | % $ ' % $ $ $ $ # $ ", +" * < $ 5 { - * & k g l | ; ' $ $ ' $ $ m # $ ", +" = | { $ 5 - ] * 7 e * | # $ , $ $ $ ' $ ; $ ", +" . / ' 9 5 ; * g ^ a & ; , $ $ ' $ { { $ ' $ ", +" i 8 0 $ i $ % @ e n . f # ' # # ' { 9 0 $ 8 ", +" ) # ' 9 $ # ; @ , ; * o , # # $ 9 p $ q ( $ ", +" r * | 9 9 5 @ < + ~ ; # < , $ 9 9 $ $ $ { # 0 ", +" c . @ 5 5 5 ; . * k s * t 8 9 9 ' i 9 9 $ # 9 ", +" ; > $ 5 $ ; / < $ 8 ) { ; > $ % ' 9 9 $ ' $ ", +" / 9 4 0 8 ) 4 8 ; / / | ; _ ; ; ; ' m 9 i u ", +" + ; 8 4 p 5 / = c v / ; , _ ; # _ ' # # ' { ", +" = ; $ p $ $ / & * + / _ # # _ ; # # $ # # # ", +" = ; 9 i p i | ^ 1 + | # , $ > # # # $ # # # ", +" ] @ p 8 0 9 < ^ + + < ; ' # # # % # % ' ' % ", +" * % 8 p 9 w - 6 & & | , $ { # # # # # # $ { ", +" & , p 8 5 5 f * 1 + @ , $ { % ; _ $ $ ' , { ", +" 1 # 5 0 p w @ = & * @ _ % $ # # # ' % # _ , ", +" ] # 8 x 5 5 @ < * . < | # % ; _ ; ; > ' > 9 ", +" y u 9 4 ) ) 8 4 z $ 9 9 9 $ 0 $ $ $ 9 9 9 0 t ", +" ~ 1 : _ 8 p $ f 1 + / ; $ $ $ 9 0 8 8 m 9 ' 9 ", +" A B > m C D D E E E E E E E E E E E E E E E E E E E E E E E E E [ C 4 9 F < 7 * a ^ $ 9 9 % = k 7 = / ; # % _ $ $ 9 p 9 , $ ", +" G < z E E E E E E H I J K J L 4 C C C C 4 4 8 4 4 4 x 4 4 4 4 x 4 x C C 4 4 4 J J L J I E E E E E D M , b } = / { 9 8 % ] ^ ^ . @ _ # { { 5 ' 9 9 $ , 9 ", +" N O ; c P 9 E K J K 4 C K C C 4 C 4 4 t t J 4 C J t 4 t C t t C C 4 Q C 4 4 4 4 x 4 4 8 x x 8 4 x 4 C J I J I R M ] < ^ # 5 p w $ 6 ^ : 1 f ; $ $ # $ { ' 9 9 # 9 ", +" S ~ c T U V W ^ 3 2 K H H D D D D D D D K D K [ K K K K 2 2 K K C 3 t C 3 t t 3 C C 2 t J L t Q t C 2 C 8 ' p $ 8 C [ I ) ~ ; . * $ 3 t w 5 * c ^ . ; _ { $ { 9 $ 9 9 9 $ 8 ", +" X V V V V V V V Y Y Z ` ...+.@.#.$.v + = / = * / * ; ; ; { % { $ $ { 5 $ 9 5 $ p 9 $ $ $ $ $ # 9 8 9 9 9 5 ; _ _ { 9 8 p p 8 4 E H , e / < ^ ^ ; 4 K 2 8 { * : ^ + | # % $ { $ { 9 m $ # 9 ", +" B . V V Y Y V V Y V Z %.&.*.+.+.k * ~ / @ 6 @ < ; # $ ' i 8 u $ 8 ) 4 8 8 4 8 0 8 8 u 8 p m 8 $ 9 ' ' 9 9 $ 9 9 $ 9 $ 9 p 5 0 8 8 p p 4 K =.8 f 6 - 9 K 2 3 2 _ o ^ ~ = f ' $ $ ' $ p 9 9 0 ' i ", +" -.* ..V V Y V Y Y Y Y V *.+.s . f { 9 9 4 4 4 3 2 [ 2 K 2 K K M 3 4 3 3 C ) 3 4 4 t ) 3 4 8 4 ) t 4 ) ) 4 4 4 x 8 8 8 8 8 8 9 ;.8 8 8 8 0 4 8 8 4 4 4 t D K t 2 K K 2 f g s * f _ $ % $ 9 9 9 9 9 # 0 ", +" } v Y V Y V V V Y V W j % 5 8 ) t D [ K [ 2 [ 4 4 K t 3 4 t 4 t 8 8 ) 8 4 8 ) 4 ) 4 4 ) 8 8 8 8 4 ) 4 4 8 9 4 ) t ) ) ) 8 ) 4 8 8 0 8 8 4 8 ) 4 8 ) 4 8 ) t C 3 t 4 t D 2 = X . ; { 5 { ' 9 p $ 9 9 # 9 ", +" < X %.Y Z Y Y V V T < 0 H J 2 Q =.2 3 8 4 x u 8 8 8 0 9 $ w 9 $ 9 0 $ i 9 $ $ i 0 8 ;.0 u i w 9 9 0 9 p 8 ) 9 9 0 ) 8 9 8 0 9 8 4 4 p p 0 0 8 8 0 ) 8 ) 4 4 4 8 2 3 8 ;.t D 2 ^ + ; # $ 5 $ 9 $ m 8 9 { i ", +" a k >.*.%.Y Z Y Y ; E D L 2 3 4 4 8 8 8 $ i $ $ i $ $ 9 # % $ # % $ 5 $ $ $ 5 9 $ { $ $ $ $ $ $ $ $ ' i $ 9 9 9 5 9 0 9 p i 9 8 0 w 8 9 9 0 9 { 9 ) 8 8 8 4 ) 4 ) 4 4 3 ; { [ D D { / _ 9 $ ' p $ 9 9 $ ' 9 ", +" < . P &.P ` ,.s , R E J 4 4 8 9 $ $ i # 9 # , { 5 $ # $ $ $ 9 0 8 0 9 9 0 8 5 0 8 0 5 9 9 0 ) w $ ;.8 $ $ 9 5 { $ 9 $ { 0 9 5 9 $ 5 9 $ 8 $ $ 9 # ; _ i 0 p 0 4 4 4 4 ) 4 ;.| f 4 [ K 9 { 5 $ $ 9 p 9 9 i # 9 ", +" ; < . P &.P ` ,.s , R E J 4 4 8 9 $ $ i # 9 # , { 5 $ # $ $ $ 9 0 8 0 9 9 0 8 5 0 8 0 5 9 9 0 ) w $ ;.8 $ $ 9 5 { $ 9 $ { 0 9 5 9 $ 5 9 $ 8 $ $ 9 # ; _ i 0 p 0 4 4 4 4 ) 4 ;.| f 4 [ K 9 { 5 $ $ 9 p 9 9 i # 9 ", +" a ; _ 7 +.+.'.T . 0 H L 4 ) 4 $ $ i $ ; # , ; # $ 9 9 ) 9 8 8 4 2 t 2 2 4 2 4 4 3 4 3 2 t 3 4 4 4 4 2 t 4 ) ) ) 8 0 8 9 0 $ 9 # $ 9 5 $ $ 5 $ { $ 5 { @ / f ; w 8 ) x ) 4 4 4 4 { + ; C K K 4 $ ' 9 8 9 9 m 9 > 9 ", +" a 8 6 1 = c $.$ 2 =.t x 0 $ $ 5 ; $ $ q $ 0 p 9 4 2 t C K 3 3 3 Q 4 t 3 t t t 3 K 4 4 4 4 3 4 3 4 4 4 4 4 x 4 4 4 ) 4 ) x 4 5 8 5 5 $ { 5 $ { 5 $ 5 # 9 5 - = = ; w 4 ) 4 4 4 4 4 _ . 9 K C 3 8 8 9 9 p 9 9 9 $ i ", +" ).!.f h | * & 2 D 4 4 0 5 { _ _ $ 9 8 x 4 3 4 2 K 4 3 t t 3 4 t t 4 4 4 t 4 4 3 4 4 4 4 4 4 4 4 4 4 4 ) 4 8 ) ) 4 4 ) 4 8 4 4 4 4 0 4 8 $ $ 9 5 $ 5 { $ $ 9 p ; + k : 8 3 0 4 4 4 3 ~.; ; 8 t 3 4 x m 9 9 9 p m $ 9 ", +" 2 f - ; : / 8 K 2 ) 9 ; @ ; $ ) u Q t 2 t 2 t 4 4 4 4 4 4 8 4 3 t 4 4 4 8 ) ) 4 8 ) 4 ) 4 8 4 x ) 8 ) 4 4 u 8 4 ) 8 ) ;.8 ) w 8 0 0 x 0 0 8 9 $ # 5 $ i 5 $ 5 9 i + s * ;.) 4 4 4 3 4 w { # 4 C 3 4 8 8 9 9 m 9 ' i ", +" {.0 5 ; @ 6 f 3 K 2 4 $ 5 ; ; 5 t t t 3 4 4 4 8 ) ) 0 8 ) 8 ) 4 4 ) 0 4 4 ) p 4 4 4 8 8 4 8 4 8 8 4 4 8 8 ) 8 4 ) 0 8 4 8 p 8 4 ;.8 ;.0 9 9 $ 5 $ 5 $ _ { $ { 9 $ 5 $ ; | X e 5 2 4 4 2 4 t 9 _ 5 4 3 x 8 9 m p 9 9 # 9 ", +" {.4 ; ; | ' 2 2 3 8 ( % ; 5 9 2 Q 4 4 4 4 ) 8 4 x ) ) 8 4 4 8 ) 4 8 8 8 8 ) 0 4 ) 8 ) 8 0 ;.) 4 4 8 4 8 4 8 8 8 ) 8 4 4 8 8 4 ) 8 4 9 $ i $ $ $ 5 ; ; ; ] | ; 5 % $ $ 9 % v +.+ 3 K 4 4 4 t 4 $ $ 8 4 t ) 8 8 0 0 m # 0 ", +" R { % _ # 4 3 J 2 { % , ; 4 4 4 4 8 0 ) 0 m 9 9 4 9 p p ;.8 0 ) 9 8 8 ;.8 8 8 p 0 8 0 9 w 8 u 8 8 8 p 8 4 8 w u 8 8 ;.8 9 ) 4 0 0 ;.0 9 9 $ { $ { % @ ; 6 . ] ^ $ 9 { 5 8 { : +.& 2 4 ) 4 t 2 8 9 $ 8 t x x p 8 9 9 ' 0 ", +" ]. 4 # # $ 4 t 2 0 i # , ; 8 4 ) 8 0 8 8 0 9 0 9 $ 9 9 5 ^.9 0 p 0 0 9 w 8 w 8 8 8 9 0 ) 0 $ w 9 5 0 8 i $ 8 9 9 p 8 0 8 p x p p 9 8 0 p 9 9 $ 5 ' $ $ % ; @ ; * + } @ w # 9 4 - +.G $ [ t 4 3 t 4 9 $ i 4 4 ) /.8 p m % 0 ", +" ].R { % { $ ) t 4 $ , , # 8 ) ) 8 x ) 0 w $ $ 9 $ 9 i 9 $ $ 9 9 9 9 0 9 8 9 0 8 8 $ i 9 9 $ 9 9 $ 9 0 $ 9 i 9 9 $ p 9 i p 5 9 9 9 8 i p 9 0 0 m 9 i 9 9 9 9 - ; | < : 1 % 8 $ 9 4 | +.7 4 [ 4 4 t t 4 9 $ 8 4 x u 8 p 0 # 8 ", +" R $ # # $ ) 3 4 p # ; f ; 8 9 8 ) m 0 5 $ $ 9 $ 9 $ 9 $ $ $ 9 $ 9 9 $ $ 0 $ # 9 9 i $ 9 9 5 $ { 5 5 $ 9 $ 9 $ 9 5 p $ $ 9 9 $ 5 $ 9 $ 9 9 $ $ p 9 9 w $ $ 5 % ; { f & = + _ $ $ w 8 * X . 4 2 4 4 4 3 9 $ 9 x ) 8 8 9 0 $ 8 ", +" (.5 , $ { 8 t 2 8 9 % ] $ 4 ) 9 9 0 9 $ % # i $ { 5 $ # i ' i $ # ' i $ _ $ i $ 9 $ $ $ $ $ # 5 % { _.% _ $ $ $ 9 5 { $ 9 $ $ 5 9 9 ' i 9 9 0 $ $ 9 $ { 5 5 $ $ 5 ; | | / * : i 5 $ 8 9 ^ s _ 3 4 4 4 2 8 $ 9 8 8 x 8 8 m $ 8 ", +" M # $ # _ 4 3 4 w ; ; } 0 3 8 0 9 % 5 $ _ ; , $ , # % % ' # $ $ , ' 5 # i > 5 $ 5 ' ' % $ $ $ # $ _ i # $ 9 # 5 $ > % $ $ $ 5 $ $ $ i ' $ i 9 9 9 9 ;.$ $ $ $ $ $ 5 ; / ] | * @ $ 9 $ p - c | 2 4 4 4 t t 9 $ 8 ) x 8 8 0 $ ) ", +" } 4 $ % # i 4 3 0 _ < & , C 9 0 $ $ $ % ; @ ; ; ; @ , , ; ' % , # % , ' $ # , @ 5 ; # 5 % $ , $ $ % % # $ $ , 5 ; $ $ { $ q $ $ $ % 9 9 9 9 $ 9 i p p { 9 { 5 { $ $ # % | < | o * 5 5 5 5 5 : 7 9 2 t 4 t 4 8 $ 9 8 8 ) x 0 { 8 ", +" !.# $ ; # 0 C ) $ ; < * ( 4 9 $ 5 y % _ , y - ; B ; ; @ ; # _ ; ' # @ $ $ , % # % ; $ y ; ; , $ ' _ , % # , ' , ' $ ; 5 # $ $ $ % # $ 5 $ 5 $ 5 9 $ $ $ $ $ 5 $ 5 ; % % _ ; - - / , 5 { 5 8 f s | 4 ) 4 t ) J $ ' ) u 8 8 x $ ) ", +" - ) @ # | $ 3 K u ; . | ; ) ) $ @ w ; ; ; - ; | @ ; - - @ ; , @ ; , % @ ; , ; @ ; % % ; ; % ; # , % % , ; , # , ; % % ; { $ 5 $ { % ; $ # 5 $ $ $ $ 9 $ 5 $ 5 $ 5 5 5 $ 5 @ - @ / ; 5 # { $ w { v ^ % 4 4 t 4 t 0 # 9 x 8 0 8 F 4 ", +" 3 f , @ @ 4 4 ) ; @ | - 4 8 $ ' i ; | - @ | / / B - - , @ - - | ; ; ; y , _ - ; _ % ; % _ ; % ; ; , ; ; ; _ ; # % ; % , ; % % , , % % % $ $ $ 5 $ $ 9 $ 5 $ $ 5 $ 9 { { $ 5 ; @ $ 8 % { $ { 5 5 @ 1 | 8 4 4 t 4 t 9 5 4 0 8 8 $ ) ", +" $ ; ; ; | # 4 2 8 ] / - - 9 9 $ $ % - < | - ] | - | | / ; | | | ; ; ; - - @ - - ; ; - ; % - ; ; @ @ , @ ; ; @ ; ; ; ; ; ; 5 % # $ % # $ # # % { 9 $ $ 5 $ 5 9 $ $ $ 5 $ i { $ 5 ; 3 9 _ 5 _ $ $ 9 , a ^ 5 4 ) x ) t 8 # 9 8 0 8 $ 3 ", +" ) @ ; ; | ' 3 3 ; | * / 9 4 # w % ; @ | @ = / ] . < / - - | - < - - | ; - @ ; | , @ < @ ; ; ; @ @ ; @ - @ - @ ; ; ; % _ ; ; ; ; @ ; $ ; $ { % % $ % $ $ { $ $ $ 5 9 { 9 $ i % ; 4 4 { 9 5 { _ $ 5 $ ; + _ 4 4 4 4 x t ' ' ) 8 p q 4 ", +" :.5 O ; o @ ) 4 9 - = < @ 8 9 i 5 ; ; < - / < < . < < | / / < | < ; | - ; @ - - ; - ; < ; @ - @ ; ; - @ | @ ; ; ; @ ; - @ ; ; ; , _ ; _ { % # $ % $ 5 { 5 5 $ i 9 $ { $ 5 { 9 % $ 2 9 # % % $ 5 { $ 5 { . h ) 4 4 8 ) t 9 ; 8 x /.9 4 ", +" 5 ; ; | * ' J 4 # < ] * 9 4 $ 5 y - < ; / * = * / | * ] / / / < ] - / / < @ ; / ] | | | - ; | @ < @ - - @ < | , ; @ ; - ; ; ; ; @ ; ; $ % { $ % { $ $ { $ ' $ $ $ 5 $ $ # 9 p % 4 2 $ $ 9 { $ $ # $ 9 5 <./ 9 4 ) 4 x x ) ; 9 8 9 $ [ ", +" w - / * & ) 2 ) 9 * a * 9 8 _ 5 @ / | | ] * & * {.. / / * ] / * < . ] f | < | - < - @ @ | - o - | | | @ @ ; - @ f ; ; ; @ < ; % @ ; ; ; % _ # 5 , # $ # 5 5 $ 5 { $ 9 { 9 9 9 9 2 4 $ @ / 5 _ $ $ % { 0 { | % 8 4 ) ) x t $ # 8 x $ 2 ", +" ; % < / + < t 4 8 ; = * | 0 5 , @ | - | / * / } * & / * ] / ] } * | < ~ ] / < . - / - / | - ; / @ f f - @ @ | - | @ @ - @ @ - @ ; @ @ ; @ ; # _ , ; , _ # { _ $ 9 i # 9 $ 9 8 9 4 Q 3 2 m & 1 5 { % % { w { | @ 0 4 ) 8 8 t 8 # 8 u $ 3 ", +" ) < | / l $ K 8 | } / / % 8 9 5 , ; f * / l * & + a & / * ^ / a & & / < * / | / | - | | - / . | @ < - ] - < ; ] ; / - @ - ; @ @ - ; ; ; % ; @ ; _ % ; , % # , { # $ $ $ $ i 9 t t t K 2 D E 0 s ; 8 _ % p 9 ; - 9 8 8 ^.8 x 4 ' 9 x $ 2 ", +" } % < < & = 8 K ) f a ] h # i 5 ; @ | < ] l a } * ] * ~ & * } a & * } = * < } | < . < | @ - / - < | | / | / @ < / - - | / @ < | | @ | | ; @ | % @ ; ; ; ; @ % # _ $ $ # 9 5 9 9 4 t 2 K 3 [._ E ) $.8 5 { 5 5 # # $ 9 8 x ) ) ^.9 5 x $ [ ", +" i | / & ^ / t K $ * < c ] ) $ ; , - | * * * } * : ^ & = ^ & a & * / = * & * / * | | | - / / | | / ] @ - | o | | | | - @ . < | / - ] | < @ @ @ ; ; | ; _ ; ; # % _ $ _ { $ $ 8 8 4 Q [ K 8 w ; ; E - : 0 # % $ 5 ; ; $ 0 8 8 x x 8 # 8 $ R ", +" ].% * & * + ; 2 3 ; a g * @ $ % 5 < ; / * & ^ + k 7 a 7 A & ^ g & : 1 & & } a ] ] - < & / < / / < | | | < - - < @ ; ; o {.< | - @ / ; ; / < - @ ; - - _ ; , ; ; , ; 5 % { $ 9 5 4 2 K K 4 8 8 8 @ 5 E X % 5 { 9 $ ; ; $ w 8 x 8 8 ) ' z $ R ", +" * f < * c 7 9 K 8 < ^ ~ & ' # 5 ; - * ] } & & e ^ + a ^ e l e ^ & ^ ^ a = & / / ] / * . | < / / < / / | o | / | . ] @ / < | < / . - o B - ; ; | f ; < @ < | _ f , 5 @ _ % $ $ p t t K M ~.4 ) $ 5 { E > #.4 5 9 { , _ # $ 8 8 8 8 x $ $ $ R ", +" 5 @ / ^ k & 4 2 | : ~ k = 3 $ 5 - | / | & ~ 7 ^ e 7 + A + ~ 7 : + }.& = & a * & * | | - ] . ] 6 B | < . - / ] ; < 6 - - | / < @ | / - . @ | | | @ @ - @ @ < _ - f @ % ; ; $ i 4 4 Q K 4 L |.1.1.2.B L E T ; { $ 5 5 ; ; 9 0 8 8 ) 8 x $ m 2 ", +" 3.5 < ^ : s - Q $ ] ^ ^ k @ $ 5 ' @ / < = * A g a b e 7 : ^ ~ ~ k * a + 7 } & & ] * = ] ] | | | ] / / < . ] * * | = < / / < | < / < . | / - @ f @ < - / - / < @ f % @ ; 5 @ $ 9 0 4 K D L 1.4.u i $ 5.6.E @ & i { 9 p 5 # $ p 8 8 x u 8 $ i R ", +" a @ ] ^ v b p 2 z a ^ e & ; $ $ % @ < / * & }.k e k k j 7 ~ k 7 a 7 1 ! ^ ^ N & a < < * = } * - / < * 6 | < * < . @ | | - / < o / | | | - - @ < / ; ; | | @ @ < @ ; @ @ _ ; # 9 4 4 K D 5 7.L q 1.L O 8.E 5 c { $ 5 $ # _ $ $ 9 8 0 8 x m $ [ ", +" ; < a : 9.& 3 2 - ] * 7 & $ i $ @ < / l & : ~ j c k G 7 ^ c & ^ ~ c g l }.= ^ 1 / & * * | < * / / | / & < / | | / - ; / . ; | = ] ] | | o ] | | ] f ; | - ; @ | o o ; - o , _ $ ) 4 J I ; 4.L $ 0.4 q a.K K ~ _ % { $ 9 $ ; $ 9 8 8 8 ) x $ [ ", +" % * 1 a ).] K 2 < ^ k & | $ $ , ; | / ^ * j : : k ~ 7 ~ A c 7 ~ v e a 7 + = } } + ] } * / * | ] = . < & / * } . / ] ] 6 < < / < * / @ / - - / * / < | @ ] | | @ - @ ; | , # 9 9 x ) K E f b.=.q c.L $ d.[ D f @ _ $ 5 5 # % $ m 9 0 8 8 x 9 [ ", +" e - & a G @.$ L ' * ^ & G | 9 $ , f / l ^ l : b 7 ~ k s b e e c e ^ A 7 = & & & ] & < * ] * ] / * / < | & . ] * . / / * / h | + / | < / * | / / * f / . @ . @ | / - ] | @ | f { $ ) 8 J H [.e.2.L 2 q f.$ K [ | | h # $ % { $ $ 9 m 8 8 8 8 i 3 ", +" ] 6 l ^ G g.9 3 9 } h.h.7 # 9 ; ; ] } . } 7 c 9.j v G k k h.~ 7 e + h.7 = l ^ ~ & & ] & * ] * ] * ] * * / 7 | | & = * * * < a @ ] / & < < . < | < ] / = | @ = - / | o @ / h ; # # ) ) J H p : 5.i.j.i.6.L C D o | | # $ 0 9 $ $ ' 9 u 8 8 8 8 3 ", +" - * ^ g T k K 4 @ & e c * 8 i - | < & } * k v k G ).G k e h.v ~ n : c + : ^ ^ ^ = ] . ] * / * * / * * * * = ] & & - * / ] . / * & | * | < ] . < o / < * * < * | * o | ] | @ ; | % $ $ K D K 1 [.q O ) L 8 Q K . @ @ ; $ { i $ 9 $ $ 9 x 8 u 4 3 ", +" g.@ & A s +.& D ) / b A h.| $ ; | / {.^ v ~ j ^ v G k ).c e k c e e k & ^ ~ ^ + ] ^ & & & . ] ^ ^ } * & & * } a * ] = * / & 6 - ] / / | / / | / / ] ] ] / / . | | / | / 6 ; @ o ; @ 5 6 x D H 9 $.~.L 4 ) ) K 2 * ; o | # $ $ $ i $ $ 8 0 m 8 4 u ", +" G - * ~ +...@ K 8 = b a h.@ i ; ; (.. ^ 7 : $.$.s h.G b h.h.v G k k e ^ ^ + + j l * & l ^ ] * * & a & / * * / < & & * / - . . = < @ a * < / ] < * * | c < | / . = / < / h o o @ % @ 5 ; l K H H , : $ ) x ) H 0 1 ; | ; # { $ 9 9 $ $ 9 8 0 0 C ) ", +" } | * e k.@.' [ $ + G +.h.$ 9 - | @ / * ^ ! s 9.e l.k s v k k v k & c 7 A & ^ ~ + & a } * = * * * / = & * * * / l * 1 & & l & / f h } * * * 6 ] < | & ^ / * | / * < / 1 | | | @ | ; o 8 : & D H H x > 8 t J E / 1 ; @ | ; % p $ 9 $ $ 9 9 8 8 K z ", +" ; * & k T v u 4 - j G c e $ w - / ] / ~ n G k ).9.9.9.s G n A n k k k a e e c ^ ] ^ 7 ^ & A * = ^ * & ] ] ^ / * * & * g + * & a & = . 7 ] 6 + / ] * ] / 6 | . @ 6 = < h . . ; | f @ - $ ) : 1 D D H D D K I ) 1 | / | o f { 9 m $ 9 ' ' 9 0 m 2 i ", +" ; & & h.@.N t 5 ] G ).9.X 8 ; | ] @ a g v G 9.c X G X X X g.v k : e 7 7 7 & & & 7 * l & * & * & . & * * & & * ] & l < ^ & 7 1 & l & 7 e 1 * = & * / * * ] a / ~ < | / ] | < . ; @ ; ; @ $ 9 h ~ i D D K D ) + 6 | 6 o @ @ ' 5 5 $ 8 $ $ 9 8 8 K , ", +" ; : e G m./ [ $ * g b k e # _ - ] * / k l.9.9.m.G s G b s c s 9.^ ~ h.^ ^ k ! ^ a * 7 } & = } ] * + / = ] / * * / ~ g e ^ & : v e & 7 7 ^ $.^ } * ~ 1 * & * * * f h < . = ; . o ; @ ] ; { $ 3 = + @ 9 $ { 9 / / @ @ . f | # $ ' $ u $ # 9 8 0 2 q ", +" b - ^ : T @.; D , & G k s / i < . / ] / v k.9.k.).s g.7 X k 9.9.e k l + c 7 a A ~ a k ^ * & ] / / < / / @ / / ~ * = ~ 1 ] : & 9.k ~ G + $.k ~ k $.l ~ 7 / * / o ] & . / / ] h o | / . < | f _ _ 4 % | | # % _ ) w @ . o @ | @ # 9 $ p $ ' 9 0 x 8 [ ", +" ] - ^ e T 9.) 4 - ).X c h.' 5 * ] - } l n s G X +.k.+.g.G s k +.9.7 7 : ~ }.= 1 : ] k * * = / @ @ @ / / @ } * & ^ & * & : & 7 e k k e ^ h.c 9.c + s G ~ N * < & & & < * / / . | | | | @ @ ; i # 5 ;.0 0 | / { $ _ 0 # 1 @ | | $ $ 9 9 9 # 9 8 0 0 E ", +" ; | a b &.s 2 8 ] +.b k G - @ - o * 7 G G k k.c @.k.G X ).s k k #.A ~ e 7 e j ^ a * ^ ] * < | @ ; | | / * < . * } & & : h.& ^ & l j & k c 7 : 9.v +.h.$.1 : a / ] / 6 ] * / | - | @ | o @ ; @ % $ { 9 4 4 5 / / _ ; 9 5 | / ; # $ $ 9 ) , $ m m m H ", +" y * e k n.& [ 5 } m.: g.G ) * / * 7 * : k.G G +.g.$.+.g.c b s o.d 7 : A e + ^ } 7 ~ * = < | @ ; ; | ; @ | < < & ] 1 * & = ^ ^ ^ : n G : 7 c $.: k k c X 9.7 ~ * < * / | < * * / h | | o o % ; $ % $ 9 9 8 4 4 5 ; ; * _ $ f | _ $ $ 9 8 { ' 0 8 0 D ] ", +" % l : s +.@ [ % v g.h.#.k 9 @ = < & l n G 9.3.).T j T h.).k c n h.7 }.+ l 7 ^ & & * ^ ] | - $ ; @ # | / ; ; | * * & : & g g 1 g v ^ & ^ 7 h.p.: : g.g.m.).+.a * ] ^ = * h | . ] / h = | @ ; ; # $ ; $ 8 ;.8 8 4 4 8 ;.@ $ 8 * @ 9 { 0 8 i ; _.8 8 t i ", +" G ; ^ k k.q.$ t ; c s 7 k }.0 @ } * e ~ e G 9.s G X G g.X g.v 9.h.n l & A : ^ a l h.& / / ; | ; { @ @ ; | o * / ; & } 7 + ] e X v A & 1 c $.+.n ~ h.X k 7 m.+.c G * & & ] + / | . / < - @ ; ; @ _ w $ $ 8 i 9 4 8 p 8 4 4 8 ) _ | { $ 9 x 9 ; 9 0 8 4 3 ", +" } @ ^ : r.m.K ) * G s ~ s./ 0 * & * ~ 7 9.g.).X k.k.s b e n 7 c 9.s g 9.7 ^ & & 7 ^ a | | | ; # ; @ ; _ ; 0 ' a . @ ] / 8 E H a #.* 7 $./ F h X : ~ 7 g v 9.P X g | & . / . & | | < o f @ o | % _ $ , $ i 8 9 8 8 ;.8 8 p p 9 $ / 9 $ p 8 9 _ i 8 m 4 R ", +" < / ~ ^ ,.g.I ; d +.).h.$.; , l / ^ e 7 G s ).9.+.k.n +.+.v c 7 h.: 7 g = A ^ a 7 l = @ @ @ # # % % ; _ m D E K g | . { D J H 8 k } 9._ E E E / +.s h.g.: k s.e $.a - l ^ @ / * * | . o @ @ f < # % ; $ p 9 p 9 4 8 8 p 8 8 8 $ / _ $ 9 8 8 # # 8 x 8 H ", +" y 1 ~ c ,.^ [ _ ~ k.$.G + 9 $ * * ^ G g ).+.9.q.+.s k.h.b T : v j ^ } & 7 7 : * a e = ; ; , _ _ % $ % | 8 D J R * h | { t Q D x k 1 7 8 D C E h r.9.c 9.s P 9.7 X h.* * ^ & } < * & @ / ] ; 6 ; # _ 9 > p $ 9 $ ;.8 8 9 8 p 8 i 6 @ $ _.9 8 i ' 9 8 0 H ", +" 5 1 ^ b &.(.L 5 G t.h.h.k 9 ] < & = G s s s c n.r.X 9.).g k n A c g k & ~ ^ 1 & 7 * - % ; > # , $ $ - { ~.t J H & . @ # 4 D R 0 v = & ) K J R & +.7 ^ : n X G s 9.: 6 < 1 = / . * @ . - ; | ; ; ' % { 9 i $ p 9 ) ;.8 8 ;.8 8 8 f f [.9 0 p $ # 8 9 8 H } ", +" , / ^ +.>.; R @ ).G k ).h 0 @ / * e 9.A 9.).k.v 9.g.s G v e v k 7 b g : a 7 ~ * & / | @ ; $ % # $ { ; $ 5 9 D H o . ; ; 8 m E { e / * 4 [ D K = 9.7 g G 7 = h.T 9.& : * ] / + * | | @ ; 6 o @ @ ; % ; $ p # $ p p 8 8 9 p p ) 9 / | # m p 0 9 ; 8 x x [ > ", +" 5 ] l ).k.9 3 ] s G v m.( i | * * e c k G X s.s 9.+.).k G 7 G c 7 7 } A * ^ = ^ & * | { $ $ # ; # % ' # 5 ' $ p / = ; ; 2 ( * i + * ; 4 8 C [ 7 : 1 X ^ n c g 7 ^ 7 & ~ = * 6 < / + / | | f @ ; % ; 5 # $ { $ 5 p 9 8 p 8 p 8 w f 6 % 9 $ 0 8 ; 9 t x D i ", +" g.| = a T +.[ 8 ~ n.s.k X < - | ] ! G & G g m.s 9.G G X s v k : k k : + l & & } * * * ] 5 , , # # 5 _ % ; 5 8 9 * , & , % 4 9 ] , 6 @ { [ ; ; 0 c & ^ & & +.7 j n c & * ] / 6 < * ] / + < @ - | @ ; ; % $ % $ 5 9 8 $ ) 8 9 8 8 ) ; = # $ $ p 8 > $ x 8 K ) ", +" e @ ^ l @.G [ ; l +.s s c > , * ] k k G g.@.G k ).).$.s 9.h.b v k e & & e & * ^ l = 6 ] - _ 9 # % % ; 5 % ; 8 8 * # * % ; ) $ < $ ] - @ [ @ $ < ^ l . & ^ 7 k 7 k & * * * * * * . / | . / / ; | @ ; % ; # $ 9 $ $ 9 p 8 4 ) 8 8 4 _ * ; $ 9 9 8 ' , ) x t H ", +" / | } : n.k 2 @ n k.e X k 9 ] / & e k k s G T X +.h.s h.X v G s 7 j 7 } ^ & A : 7 * / / @ % ; $ ; ; $ { % ; 8 K = ; / $ _ 4 $ , 9 . * _ D | x _ = * / * 1 / & g.7 ^ . ] * 6 l o ] / / 6 . - < @ @ ; % ; 5 { $ 9 w p 9 8 8 p 8 8 8 9 f ; # $ 0 x $ # 0 x 4 E ", +" B / * c *./ 9 B G +.d G g $ ; | e ^ G X G 9.X +.u.9.s +.9.h.).s G n 7 e ~ ^ 7 * * + = f ] f % ; ; % % ; w _ 9 D h q / 5 ; 3 $ ; $ & / $ K . 2 & 7 a & = ^ & n k k + @ < ] ] ] & * = ] . / < f ; @ ; # ; ; % $ 9 $ 9 8 ~.5 p 8 ) p 0 6 | ' 9 5 8 9 ' 0 x 4 E ", +" ; | & 9.*.# 4 | n.X h.g.: $ _ ] ~ ~ G 9.c ).v ).k k s 9.s b c k c k v.^ ^ 7 & ^ & l * * * @ ; @ ; ; { _ | _ $ [ | ; ; @ { 2 % # $ a _ 3 8 / t 1 / & + ^ * ^ c < & - = @ * = & . | } | @ / | @ f ] @ % @ # $ 5 5 5 0 $ 0 4 9 p 0 8 4 @ | ; p $ 0 8 , 8 x 8 E ", +" ; * ] g.n.9 2 B s.+.v ).k 8 } c & 9.v k.@.9.X 9.$.G s G k h.G 7 k = & : ~ & ^ A * * * = / . @ ; ; - % $ @ ; $ [ ' 4 ] - # 4 K D ; & ; 4 Q $ ) 1 ] ~ * * ~ ^ ^ * * * / * = / & = h / o < f ] - ; @ @ _ ; # % p { # p $ 9 8 ) 8 ;.4 8 @ / ; p $ p 8 ; _.4 9 E ", +" ; * / m.+.4 ) G ..X k k.' i ] * k v g.h.+.X k g.k.+.G s k v X s N : A * ~ ^ ~ * } + 6 ] | a . < @ @ ; ; - f $ K H E < * $ 2 K H % 7 , Q K E $ a < 7 * = 1 = 7 & } . * l < * * . . 1 ] ] / / | @ < ; ; ; # # 9 $ $ 9 p 8 9 9 8 8 9 8 , 6 ; $ p u 8 % $ ^.m E ", +" ; } & @.j =.0 k T g.v s | { | l h.+ X h.).@.).l.9.j k ).9.~ c v ^ k ^ 1 A + 6 7 * & * : < < + < % - ; ; % ; $ 2 Q H $ & 8 Q K D 9 & $ K J D $ n | * e ] 6 / | | = | < = * / & * < < < 6 = - | - ; @ _ % ; 9 5 5 p 8 p 9 8 9 8 8 p ) $ o f 9 9 8 u ' $ 8 m E ] ", +" | & * m.* ) $ g.+.v h.X @ # ~ * 9.a g.+.X G 9.h.u.s g.c h.9.+ G 7 ^ e ^ k 1 a l * / = ] 6 & / * a - @ ; / ; # 4 D H u + ; 4 D D $ * 9 K K H $ * + / | / l / * * ^ * / < / | / a / : . @ / / ; ; f / , ; % # { $ $ { 0 p 9 p 8 8 p 8 $ @ @ $ 9 8 x q { 0 m I y ", +" @ * * &.7 R 8 G 9.c s +.; @ & ~ d h.+ u.+.k k X 9.v c 9.s v j a 1 : 7 ] a + ] / } & * * + + * / / . . f | ; * ; 2 E 9 / | # K E ; & f ) H H k a * < ^ & | / * * - / . / ] & & * ] * * / / / | f ; - @ , ; 5 5 p $ $ 8 0 p p ) 8 4 8 p | f $ 9 p 8 $ { 8 m K 0 ", +" k @ * l k.h [ ; ).X 7 9.+.8 ] / * l G g k 9.9.r.X l.$.G k 9.k 7 h.: ^ j } & * } * g * ] * * | ] * / a / } / / - < 9 8 * / , ; _ ; a # f # 2 % a * | | & * / * * < ] * | / & ] . < . @ @ ] ] @ | f - | @ _ ; % 9 $ 9 w p $ i p 8 8 ) p 9 ; | ; 9 0 8 9 % x 0 2 M ", +" e @ | $.9.9 J = T T k ).+ 8 / & & g g b X c s ).9.9.k v s v k e 7 ^ ~ ^ l / 7 * & ^ / * ] * ^ } } * / & ^ a / 1 = | * | ; / | ] * f | ; | h . / f < / | - | : ^ | 6 / ] / ] * * / . / * / | | f - | o ; ; % @ $ { $ 8 { 9 9 9 8 4 8 8 8 @ | $ $ 0 8 m ' 0 8 t R ", +" ] - / k k.8 K / s.v k ).| 5 ; & a l j e c $.X T X k 9.G v e b k A e j = ^ ^ * & = } * / & * / * * a 1 & * * 6 * / 1 ] / * / + | / / * * ] * ] * e ] f < & * < ] / < | . / | h / * / / * = / | | | | - f ; ; % $ 5 9 9 p x p 9 8 8 8 ) 4 / 6 # $ 9 0 8 ' $ 0 t I ", +" < | * X '.K [ ] 9.s k X @ 0 ] * * 7 +.v 9.k b s s e X 9.G k : ~ 7 & / & = : } & ^ & = / | } : * = & + ] / & * * } } * ] A * * & * a & * + < < ] + ] / | + * | / * ] ] @ - / / ] . < / * * f . < f | f @ % , _ $ $ $ p w p 8 9 8 p 8 8 ) ( h @ { 0 8 x > 9 x 4 E ", +" O ; & X c 4 4 g T h.k c > { a ! & l 7 k k v h.s k ).k : G c k 7 7 ^ A & & ~ 6 * l . ] l / * * * . ^ ] & ^ * & & & o a & | } * ^ & | | < @ | | / / * / * | < * / - / | . = / ] = 6 < @ . h } . @ | | ; ; f @ { # 5 $ 9 9 8 p $ ) 8 8 8 4 $ = ; % 9 8 x ( i 8 x E ", +" $ ; < +.7 4 3 & +.h.7 : $ $ & 7 & ^ k v 9.n +.G 9.G s h.k 7 c c : & c A & & + & * . * 6 } / * }.~ * * ] * & ] & * . & * & / / / < & . * - f = - / | ] * ] @ / . / | | / . / @ * ] | + * / | / / ] ; < @ ; @ $ # { 5 8 0 8 p 5 9 8 9 9 8 $ * | _ 9 ) x $ $ 8 x E ", +" w _ } +.& [ 8 v v X 7 k _ @ - & + k v G c G k g.s c c v v n : : h.a & * l 1 a & a : ] & * 6 & ~ * * = a & . ^ & < ] * / ^ < / < = ; / / & . < / * a / < + / / | . - ] * o . * } / * * < < = / / . / ; ; @ 5 $ { $ 5 { p 9 8 8 8 p 8 p 4 $ & o @ 9 8 4 $ $ x 0 E ", +" G ) @ / g.6 D $ s +.k k & 8 | = & l 7 e 9.g G g.v G G g.s k b n 7 : : ^ ^ } : ^ * * 1 ] ] ] / ^ / * & & ^ < * = * ^ * / * * / / & * * & / / * * | | * ] < | - | ] * / / ] - / * | . & / * @ / o @ - f | % ; | # 5 { $ $ 5 p p 8 ;.8 8 8 4 9 h = ; $ 8 ^.$ $ x 8 E ", +" ;.z @ & +.; [ , v '.X e * % ] / ] & } n G : v v k ).c g.$.n 7 ^ l = 7 : & / ^ & * = * ] 6 / ] . ] ] & l = - * * * ^ / / } / . & < } ^ ] | & < - / / / * o . < < / / 1 | / & = / = @ = < . ] / . . ; < / ; f f # 5 { 9 8 9 8 8 p 9 9 8 8 8 9 / * f { 8 u $ $ 8 8 E ", +" h.9 $ - & X ; Q ; +.7 G 9.< , | } * * ^ 7 ! g.G 9.s G 9.k G c c : g ^ a 1 & j * & & / ^ & a * & a l * / & * * = ] * < * | - * - / = ] a / - . < / ] - / * / * * * / | } ] & / / * ] | * : * | / < / < / _ | < ; _ i $ $ p 5 $ 9 5 0 ;.8 9 8 4 h | | $ 8 x 0 ' x 8 E ", +" & ' $ , k X 9 K @ X s b c ; ; * * * g A 7 G X G j s k e 7 7 e k v 7 ^ ~ l & & = & ] / < * ] * / / / & = ] & * * * * & . * & . ] / * / | | | @ h < < < - f . l < / * / - / | o / < h ~ } * < . | | @ / @ - f | ; ; ; $ { 5 9 9 9 9 9 p 4 8 x 4 | | f # 8 x 0 $ x 8 I < ", +" ^ $ $ / $.k 4 2 @ X k.s G @ B ; * a 1 g h.^ g.9.k g.k v X k : b k c & = ^ A * l / * / ] ] a | ] * = } a / * * ^ h } ^ : & / ] | / ] ] / / ] . < | 6 - | @ / / * | * < / * (.. | / * / / | < < + | h | | ; % ; ; # _ $ 5 { # 8 $ 9 8 8 8 p ) 8 f * h % x 8 0 ' 8 8 D y ", +" P ^ i # < e h.8 ) / g.9.c X @ f / * ^ A & ~ g.).a s k.s b 9.9.c 7 : ^ }.= & } : & a ^ * < * / / * * & . h / } * } * & * / * / / & * < / ^ = * | * ~ | * } = / / < * / ; / / ^ * @ | < ] = * h | * @ | @ . @ _ ; # ; % $ 5 $ $ $ 8 p 9 8 8 p 8 4 ; & h ; 8 8 0 $ 8 8 K ' ", +" X ] ' @ @ ^ ^ 8 3 * +.).k v ; / @ . & & j 9.s G q.$.: v ~ j +.c c k j = + * 7 } ~ & / * . 6 1 + ^ ~ + ^ a a + : v v c k a : ^ + = 7 & + g 1 a ^ : = = k 1 + 7 g 1 7 = * . * / * * < / o @ | * < | o @ | @ @ @ @ _ % $ 5 { 5 5 $ p 9 p 9 p ) p 2 # * / ; 9 8 8 ' 9 x K i ", +" ~ ; $ $ @ c } L 2 d ).1 h.k ; a ] ^ & c e h.7 7 g.+.b G ^ 7 n 7 * 7 7 7 ^ 7 7 g v 7 k 6 e }.: & & }.* < - @ ; - @ > ' ' ( $ ' > x ( $ _._._.z ' ( $ _.( ' # # @ (.| h N l / * : & c #.n : : = * <.@ @ f ; ; ; ; ; # _ 5 $ $ $ $ 9 p 0 p 9 p ;.4 $ * o ; 9 8 x { 9 ) C 0 ", +" / _ ; # ; n & [ 0 ^ $.b 9.: i ; | * ^ / h.9.e 7 k = n v v n G T g ^ n l & l f - F 8 z t Q K D H H H H H H H H H H H H H H H D H H H H H H I H H H H D H D H H H H I H D D K K t K 0 $ m (./ @ @ * + 6 + 1 = | _ @ $ 9 { ~.p $ 5 p 9 9 8 8 8 9 4 { h . ; 9 8 4 ' ;.x C ) ", +" , # # $ < 9.| 2 t : +.S n & > | * c 7 h.^ ^ : 7 k 1 7 ^ }.@ $ _.9 K H H H H E E H H I D D D K K K K J K K J J 2 K C J K J K K J K J J K K K J K K J K J 2 J J J K 2 J D K K D D K D H I H E H D D D K x 9 _._ , # f | ; _ { { { { 9 8 p 9 p 8 4 _ & | _ $ 8 x 9 $ x t ) ", +" i $ # ' / X # 3 $ G h.^ G 7 | # - ; > y > x 4 t J D E E E E E E H H K K K K J K t J J K K J K 2 K J K K K K K K 2 K K J K 2 2 K K K K K K K 2 J K K K K K K K K K 2 K K K K J K K J K J K J J K K D D I H H H I D K t 2 4 4 4 ) 8 p 4 8 9 9 9 4 $ | / _ 9 0 8 m 9 x C M ", +" {.K ' $ / 9.; D ; 7 g 7 k h.> I D H H H E E H D D D K K J 3 C J C J K 2 K J K J K K K K J K K K J K K K J K K J K J K K K J K J K K J K Q J K K K K J K K K J K J 2 2 K K K K K K K K J K K K K K K J K J K K K K K H [ K D D D D K K 2 J K 4 { 4 / h _ $ 8 x 8 9 ) 4 M ", +" E $ ; @ h.| 2 ; v k e s ^ H K K J J K C K J C C J 2 2 K 2 K K K K K K K K K Q K K K K K K K 2 K K K Q K K K 2 K K K K 2 K K K K K 2 K K K K K C K K K K K K K K 3 K K J K K K J K K K K J K K K K K K K K K K K K J 2 J K K J K K K K K J D 9 , 6 <._ $ p x 9 9 8 4 R ", +" y 4 ; ] 7 $ 2 @ e k 7 9.< E K K K K K K K K K K K 2 K K K K 3 K K K 2 K Q K K Q 2 Q K K K K K Q K Q K K K [ K 2 Q K K D [ K K Q K D K K K K D D K [ D K J K K D [ 2 J K K K K K K K K K K K K K K K K K K [ K K K K K K K K K J K K K K J D K v - @ @ % 0 x m $ 8 4 R ", +" R ; * 7 $ 2 @ G k k k ; D J K K J K K C K Q K J K K Q 2 J K Q K K K K K K K K K K J K K w.x.y.z.A.B.K C.D.E.F.G.H.H.H.I.J.K.L.M.N.O.P.Q.D.R.K.S.T.U.V.W.X.Y.y.J.Z.`.K K +.+++@+@+@+@+K K K K J K K K K K [ K J K K K K J K [ 2 K J K K K [ s ; 6 | ' 8 4 8 $ 0 x H ", +" I ; * k 9 2 - n k 7 s | H K K K K K K K K K K K K K K K K K K K Q 2 Q K Q 2 K K K K #+$+%+&+*+=+-+;+>+,+'+)+!+~+{+{+]+^+^+/+(+~+_+:+<+[+}+/+|+1+2+3+4+5+6+7+8+9+0+a+b+K @+++++++++++++@+@+K K K K K K K K K K K K K K K K J K C K K K C D [ $.@ | / $ 9 8 8 $ x 4 H ", +" R ; * }.) ) * 9.k a n ; H J K K K K K K K K K K K K [ K K [ K 2 K K K K K K Q K K K K c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+q+n+o+u+v+w+x+y+*+z+A+B+C+D+E+F+G+H+I+v+J+K+L+M+$+$+@+@+@+++++@+@+K K K K K K K K K K K K K K C K K K J K K K J H 1 * h ; ' 0 8 8 9 8 4 H ", +" 3 $ * c C 4 } c j 7 c m D K J K K K K K K K K K K K K K K K K K Q K K K N+K K K O+P+K Q+R+S+T+T+U+V+W+X+Y+Z+g+f+`+ @.@+@@@q+u+#@g+$@%@&@*@=@-@;@>@,@'@)@!@~@{@y+V+]@^@/@(@_@c+++++++++++++@+K K K K K [ K K K K K K J K K K K K 2 2 K 2 Q H ^ 6 = @ ; 8 8 x 9 m 4 H ", +" 2 , ^ & 4 4 v h.7 c k ( H K K K K K K K K K K K K K K K K K K K K K M+K K K :@K K <@K Q+[@*+}@|@^+V+1@2@y+3@3@u+1@[+4@5@J.=+#@3@3@#@g+6@7@8@9@0@a@b@c@d@e@o+f@g@h@i@j@k@l@m@c+++++++++++++@+K K K K K K K 2 K K K K K K K K J K J K Q K C D & 6 o @ _ 0 x 0 9 8 4 H ", +" R @ * ^ 2 4 ~ 9.7 n 7 9 I J K K K K K K K J K K K K K K K K K K J M+M+n@n@n@n@n@M+M+o@p@1+q@r@s@t@~+u@~@v@Z+w@x@y@z@A@B@C@D@E@w@u+v@y+{+F@G@H@I@J@e+K@i+L@&@y@M@N@i@O@P@Q@R@@+@+@+@+@+@+@+@+K K K K K K K 2 K K K K K K K K K K K K K K J H | 1 @ | # 9 x 8 9 m ) H ", +" [ @ & | [ 8 v k ^ b 7 8 D K K K K K K K K K K K K K K K K K K K K S@T@n@n@n@n@n@U@n@n@V@W@/+S+X@W@Y@v@f+f+Z@n+m+Z@`@b@b@`+}@p+h+f+`+ #.#+#U+1@@###$#T+h+m+e@^+^+x+%#v@&#*#++++++++++++++++@+@+@+K K K K K K K K K K K K K J K J K J K J C H / * | 6 ( 8 8 x m 0 x H ", +" =.; ^ h [ $ ^ 9.n g e 4 D J K K K K K K K K K K K K K K K J K K K M+M+n@n@n@n@n@n@T@=#-#;#>#,#'#)#!#~#x+{#]#!+^#,@,@,@,@/#*+(#.#/#_#:#<#[#}#]#|#1#x+t+2#3#4#5#6#7#8#Y+9#0#++++++++++++++++++++@+@+@+K K D K K K K K K J K K K 2 2 K K J Q E * g / | ; 9 ) 8 9 9 ) E ", +" I # 7 h J 9 : $.k 9.s 3 D K K K K K K K K K K K K K K K K K K K K J K K a#M+M+:@M+M+b#++c#d#a+e#f#g#h#i#8@j#k#l#m#m#m#m#n#o#p#q#n#r#s#t#u#v#w#x#y#z#z#A#B#C#D#E#F#G#i#H#I#$+++++++++++++++++++++++@+K K K K K K K K K K 2 K K 2 K K K K J H @ c | <._ $ x m p 8 8 E ", +" 2 ; 7 | K 9 ~ c k c n 8 D K K K K K K K K K K J K K K K K K K K K 2 K K K J K K K K b#b#=#J#@+K#L#n@M#N#M#O#P#Q#R#S#T#T#S#U#V#M#N#a#W#n@X#R#M+M+:@Y#Z#n@M+M+O#`# $.$+$m@@+K @+@$@$@$@$@$@$@$++++++@+K [ K K K K J K K 2 2 J K 2 K J K K t E - c @ / ; 5 x ) 9 0 u E ", +" 2 ; 1 * K # ~ k k k v C D J K K D K K K K K K K K K K K K K K K K K K K K K J K K K K J K J K K K #$M+$$$$K K a#M+%$S#=#=#M+a#M+M+M+b#:@n@n@V#M+M+&$*$n@b#=$M+M+M+*$=#@+@+@+S#S#S#@+@+@+@+@+@+@+++@+K K K K K K K K 2 K K K K 2 K 2 K J t E ; n ; / @ m 8 x 9 8 x E ", +" 2 @ & @ L # k G n X & J D K K K K K K K K K K K @+@+@+@+@+@+@+@+@+@+@+@+b#b#b#b#b#b#a#-$-$;$a#M+M+M+M+o@>$;$;$;$;$K K ;$>$-$;$;$,$;$;$;$;$;$;$-$>$-$;$-$L#'$-$;$;$;$o@o@o@o@T@)$!$@$@$b#@+~$++{$]$^$/$$+m@($K J K K K K J J K 2 K J K J J H # g - / _ 9 8 8 m 9 ) H ", +" - 2 h ^ # 3 ; c G n h.^ 3 D J K K K _$_$b#@+@+@+@+@+++++++@+@$:$~$b#$+@+<$[$}$<@=$|$1$2$3$4$5$4$6$7$5$8$9$9$0$a$b$b$a$b$b$c$d$e$c$d$c$d$b$b$b$0$0$0$b$b$e$f$f$e$e$c$g$9$h$i$j$k$l$m$n$o$p$q$=$r$s$t$]$]$/$u$v$m@b#b#@+b#w$K K K K K K Q K J D 9 c h | @ 9 0 8 9 $ 8 E ", +" ) 8 | / 9 3 | b : n +.^ K D C K K K x$_$b#b#b#b#[$-$y$M#z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$Q$T$U$V$W$X$Y$Z$`$Z$Z$ % % %.%.%+%+%.%.%@%@%Z$#%+%$%Z$+%%%+%&%%%+%*%`$=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%#$[%}%|%A$1%2%w$3%-$K M+K K K J K J D $ k f h ; $ x 8 0 m u E ", +" 9.5 9 / & 4 K - : g k v | D K K J K K _$4%_$5%6%H$7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%B%C%B%B%D%B%E%A%F%E%z%z%A%D%B%F%z%G%y%G%z%G%F%z%z%z%H%I%J%K%J%J%L%M%N%O%P%Q%R%S%T%U%Z$V%W%X%X%Y%Z%`%P$ &.&+&[%-$M+C$K K K t H $ X | | _ $ x ) m 8 8 E ", +" : { 9 | : 8 K @ s n k b | K K C K K J _$_$<@@&#&$&%&&&*&=&-&;&>&,&'&)&!&~&w%{&]&^&/&(&_&:&<&[&}&|&1&2&3&4&5&6&7&8&9&0&8&a&7&7&8&9&0&8&}&7&7&8&9&0&8&}&}&7&8&9&9&8&}&7&b&c&d&e&f&g&h&i&d&j&k&u%l&x%m&n&~&o&p&>&q&r&s&t&u&v&w&x&y&z&o@M+K K K t H _.$.| | _ $ 0 8 8 x 8 H ", +" ..c # 5 @ = 8 4 | v A n g * D K Q 3 A&K K K B&C&D&E&F&G&H&I&J&K&L&L&M&K&K&N&O&P&Q&R&S&R&R&T&U&V&M&W&X&X&Y&Y&Z&`& * *.*K& *.*L& * *.*K& *L&L& * *.*K& *L&L& * *.*K& *L&L& * *L&M&X&+*@*@*@*@*@*@*@*@*#*W&$*%*&***=*P&1&-*5&;*>*,*'*)*L#!*K Q K C D ) X 6 / | $ 8 8 8 9 8 E ", +" +.n # p < 1 ;.3 @ k 7 v b | D J 2 J K K ~*'${*]*C%^*/*#*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*+*X&(*_*:*<*[*}*M#K K K t D 3 g 6 o @ $ 8 0 8 m 8 E ", +" s + ' 8 / * 4 D } h.$.h.n | H K K t |*K K q$1*2*3* *+*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*W&4*5*6*7*8*M+t K t D 2 n / | @ # x 8 9 m 8 E ", +" : < # $ / & 4 3 * v j X N _ D K 2 J K K K 1%9*=&0*+*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*L&a*J%b*c*M+2 J C D K $./ h @ ' 9 8 8 8 m H ", +" c 5 ; { * / 2 4 ] s s h.n @ D K t K K ;$'$d*e*;&L&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*+*f*:&g*h*:@J 3 J K D v * @ @ # 8 ) 8 m m E ", +" ).) $ 5 * / K 8 * k X b k @ H J K C i*K '$j*k*l*X&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*L&m*n*-#K#C K J K D G . @ @ ' 8 x x 9 8 H ", +" 4 9 $ = ; 4 4 : k k X $.' D C J o*K K '$p*q*r*+*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*+*s*t*!*u*Q J K K D A . | @ ' 0 0 8 m 9 H ", +" 3 4 ; / . 4 2 ~ h.h.g.v $ D Q 2 N+v*K '$j*w*)&@*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*+*x*y*z*;$K K C J H n 1 | f # 8 ) m 9 8 E ", +" E _ * * 4 8 l k $.9.k ' D J Q A*B*-$C*D*E*F*@*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*@*0*G*H*K J t J K D p.1 | | $ 9 x x 9 m E ", +" u 0 & @ 4 9 / 9.g.+.X $ D Q J ;$A&I*K J*K*L*@*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*@*M*N*O*-#K 2 K K H h.+ f | { 9 8 8 9 9 E ", +" k =.* @ 3 t * G $.h.v m D C K P*L#;$<@Q*R*3*@*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*@*S*T*U*V*2 K J J H n : @ f # 9 m ) m m E ", +" =.* @ C 4 - c $.X g $ D J 2 K ;$>$W*X*Y*Z*@*@*@*E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E E @*@*`* =.=u*J K 3 J H n : ; f , 9 8 x m 8 H ", +" 3 * <.) 0 | 7 b 9.9.$ D K t C +=L#@=#=$=%=@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*&=*=X*==K 2 2 C H & c f @ ( 9 8 0 p 9 E ", +" 4 < ; 4 4 * e v 9.9.x D K J J -=-$L#;=>=,=+*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*%='=)=!=2 J J C E & k | f ; 9 0 x p m H ", +" ) @ > t 8 f 7 k e 9.( I J 3 J ~=;${=7%]=L*X&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*^=/=(=l@J Q C Q E * : o @ # 9 8 8 8 9 H ", +" [ f ( 4 p | ~ }.k h.; H t C Q _=A&:=U*<=[=W&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*}=|=1=2=C 2 J C H * : f f ' 9 8 x 9 9 E ", +" 3 / # 4 $ | A h.X k 9 D K J J J K q$3=4=5=M&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*6=7=8=m@J Q J C H 1 g f @ ' 9 x 8 8 9 H ", +" 2 / _ 8 0 h e ).9.A 0 D t C Q 2 J 9=0=a=b=M&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*c=d=e=f=3 J C Q E 1 : @ | ; 9 8 8 9 9 E ", +" =.| _ t 9 | n j k 9.$ D t Q 2 t J q$g=a=h=J&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*i=j=k=l=2 J Q C H * $.| @ ; 0 8 8 m 9 H ", +" ) / $ 4 9 & G k e 9.( H Q J J J K 9=m=n=l&O&@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*o=p=!*Q C 2 J J D / c 6 | ; 0 8 x 8 m I ", +" u & { 8 0 ^ k 7 h.G ' H t C Q Q K q=m=r=B%s=@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*t=u=v=C J 3 J Q H * : | / ' 9 9 /.8 8 E ", +" ) / _ 4 { | 7 h.h.n ' D Q C Q C K q$w=T%x=R&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*y=z=I t K C C J H / + @ @ # $ 8 8 8 9 H ", +" ) * { 4 0 * a g s X > H C t 2 J Q q=A=B=x=R&@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*C=D=I 2 J Q 3 C H | g / @ @ 0 0 x p 9 E ", +" i h $ 4 5 & k h.k 9.( H C t J 3 J E=F=G=H=I=@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*J=K=I J K J K J H * : / | ; $ 8 0 8 m I ", +" i f $ ^.' < ^ k b s ( D Q C Q J K L=M=Z$N=O=@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*P=Q=D K t 2 C J H : 7 h @ > $ 8 8 x m E ", +" ) * _ 4 8 / ^ v k 9.$ H C Q K J J -$R=S=T=U=@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*V=W=I t K J K t H * + | @ ' $ p 8 8 9 H ", +" 4 * # 4 8 | k k c s ' D t J t J Q ~=X=Y=Z=K&@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*`= -R J C K K J H * 1 f f % $ 8 8 8 m I ", +" 3 * { 4 8 < c b h.9.@ H J 3 J t C -=G$.-+-X&@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*@-#-D Q C Q C K D * = o @ $ $ 9 x 0 9 H ", +" 3 | $ 4 8 < 7 h.7 e | H t 3 t K J $-%-&-@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@**-=-[ C Q C K J I & = f ; ; $ 8 p 8 9 H ", +" 0 / $ t 9 * : h.A 9.| H K t t J J --;->-@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*,-'-[ J J K t C H & * f @ > 9 0 8 0 m E ", +" i @ 9 x $ ^ c N k G @ D J Q C 3 K )-F=!-~-@*@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*{-]-[ t K C K J K 1 / @ | # $ x 0 p 9 H ", +" ) h 9 4 $ . 7 7 v 9.| D J C Q J K ^-/-(-_-@*@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*:-<-D Q C Q J K D & = f @ # ' 8 x p _.H ", +" ) f ' 4 9 * ^ X j j h D J Q C Q K L#[-}-@*+*@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*|-1-K Q C K 2 J K 1 / | @ ; i 8 m m 9 H ", +" 3 @ 9 4 ' 7 A g s n 7 D K t Q J J A&[-2-@*X&@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*3-4-K J 2 K J K J 7 f f | ' 9 8 0 8 9 E ", +" R @ $ 4 z & k A ^ g.* [ K K J 3 J A&5-6-@*7-@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*8-9-K t J K C D u v h | f % $ m 8 8 9 H ", +" 3 ; m 8 ' / 7 ^ v h.} K J 2 t J Q L#0-a-b-7-@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*c-d-J K C J t H $ #.o h @ _ ' 8 x 0 m H ", +" ) < p ) $ @ a A 7 e 7 K K t C Q J <@e-f-g-L&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*h-i-K K Q C Q H ' g.o o ; F $ 9 u 8 m H ", +" 3 | 9 8 $ & & j k 7 k u D J Q J K j-k-l-m-/*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E @*@*@*n-o-J K C K J D ' : o | @ { 9 p 8 8 5 I ", +" 3 f $ x $ & + }.k 7 v 9 D t C Q J -=p-#%q-@*@*@*E E E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*r-s-J J Q C J H @ & h | @ ; 9 m 0 8 9 I ", +" 4 , 9 4 ' ] ^ : k h.s ' D K t C J q$t-u-v-@*@*@*E @*E @*E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E @*E @*+*w-s-C Q 2 J Q E * & h @ @ $ 9 9 0 m m I ", +" 4 @ 0 8 $ / & 7 k n v ' D J Q J Q ;$>$x-y-@*@*@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E @*E @*X&7&z-C K K C J H : = 6 / ; ' 9 0 8 9 8 H ", +" ) ; 9 8 > ] & k n b G < H t t Q C t A-L$B-@*@*@*@*@*E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E @*E @*#*P&C-t J J t D K g * / | ; ( 9 0 0 8 m H ", +" ) @ 8 0 9 @ ~ = h.A $./ D J C t K t A&F=D-q-@*@*@*@*E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*E-F-J 2 Q J D t : 6 < f ; > 9 8 8 8 m H ", +" ) @ 8 8 9 @ c g l g +.l D J t Q K J G-H-I-m-@*@*@*@*E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*J-K-L-t J 2 J D 9 g o | @ ; ; 9 9 9 m 9 E ", +" w f 8 x 9 / h.k ~ j k & D K K t J K K M-N-/*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@***O-P-K C J J E , 7 | | f @ ; 9 8 m 9 m E ", +" ) ; 9 8 9 * l 7 j 7 7 : ^.K J t t J t >$Q-&=@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*=*R-[ t K C Q H | 7 @ | @ <.> 9 8 9 0 9 E ", +" 0 ; 8 ) x * : l e 7 7 c 0 D t J Q K J S-K*`*T-@*E E @*@*@*@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*U-V-K K t K J D * : ; h | f ; $ m 8 p m H ", +" ) ( 9 8 8 | a g v k k v @ D t J t K Q ;$W-X-@*@*E E E @*@*@*E E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*-*Y-K C K C K D e ] | | f | # ' 8 0 0 9 H ", +" 0 _ ) 8 9 @ 7 A N g n k ] H J K t J K L#Z-H=@*@*E E E @*@*@*E E E @*@*E E E @*@*E @*E E @*@*E E @*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E E @*@*E E @*@*E E E @*@*E @*E E @*E E @*@*@*E E E @*@*@*E E E @*@*`- ;K Q C Q H 0 #.| | < f ; # _.0 x p m H ", +" 0 ; 8 8 9 / c 7 A ^ c k * 2 K t t J K t .;@*@*@*E E E E @*E E E E @*E E @*E E @*E E @*E E @*E E @*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*E @*E E @*E @*@*E E @*E E @*E E @*E E @*E E @*E E @*E E @*E E @*+;@;C C K C H - g.| | | o f > 8 9 9 9 8 H ", +" 3 # 0 8 0 / 7 l N : h.^ 7 4 D Q J Q K 3 #;$;@*@*E E @*E @*E @*E E @*E E E E E @*E E @*E E @*E E @*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*E @*E E @*@*E E E E @*E E @*E E @*E E @*E E E E E @*@*E E E @*@*%;&;t K J J E & n - @ | | ; _ $ 9 8 9 9 H ", +" 4 ; 8 8 9 ; & : e G h.7 9.$ D Q C J C J *;2-@*@*E E @*E E E @*E E @*E E @*@*@*@*E E @*E E @*E E @*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*E E E @*E E @*E E @*E E @*E E @*E E @*E E @*@*@*@*@*@*@*E E @*=;-;;;>;3 J H ^ 1 < | f / | # $ 0 9 8 0 H ", +" 0 $ 9 8 p ; & : 7 N g s 7 @ H J K Q K K f$,;f%@*E E @*@*E @*@*E E @*E E @*E E @*E E @*E E @*E E @*E E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*E E E @*E E @*E E @*E E @*E E @*E E @*E E @*E E @*E E @*E E @*';);U#!;2 D 3 n / @ | 6 f @ _ 9 8 9 0 9 I ", +" 0 ; m ) x . & 1 k k ^ k $.: K D Q 2 J K ~;{;];@*E E @*@*E @*@*E E @*@*E E E @*@*E E @*E E @*@*E E @*E @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*E E @*@*@*E E @*@*E E @*E E E E @*E E @*E E @*@*E E E @*@*@*E E E @*^;/;(;_;:;J H $ G / < / | * ; > 0 8 0 8 9 H ", +" ) # 9 x 8 @ l ^ 7 A 7 A k n 0 D J J K L#<;z&[;@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*d&};l$|;A&C H ; : o | (./ f _ ( 9 0 8 m 9 H ", +" ) # 9 4 ;.; * & k ^ : 9.a s > H J Q Q J 1;>$2;D @*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@* *3;4;D$5;;$J H : o f / < h f @ { $ 8 8 9 9 H ", +" ) $ 9 4 $ / a p.& 7 e 7 ~ h.@ D C Q K C Q K J 6;7;%;/*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*+*8;9;0;B$L#t H 3 s @ ] h o / @ _ ' 8 8 9 p 0 I ", +" 0 5 0 8 8 @ ^ e A g n h.k X N D K C 3 J K t J a;b;c;d;e;N&7-X&+*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*+*`&f;g;h;i;j;1;J E / c ; ] h / o @ ; # m m 8 m 9 H ", +" ) 9 0 8 8 ; ~ 7 k b : k k 1 h.9 H Q K 2 K K J k;l;m;n;o;p;q;r;2&{-{-s;s;s;q-L&@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*@*X&N&t;u;u;u;u;u;{-{-u;u;u;u;u;v;w;x;y;z;c&c&c&e&A;B;C;D;E;z;z;F;f&G;F;H;I;J;I=s=K;9&z;F;L;C;C;M;N;O;P;Q;R;S;T;U;J J E v + - < / * 6 f _ $ 9 0 x 9 m H ", +" ) $ 0 x p _ ^ & e 7 k : A & X | H t K t J J K _$V;W;X;Y;Z;`; >.>+>@>#>#>#>#>#>$>%>&>*>=>->;>#>#>$>>>>>#>#>,>'>)>@>!>!>d;d;d;d;d;d;d;d;d;~>{>]>^>/>(>_>:>:>:>:><>:>:>[>}>|>}>1>1>1>1>2>3>4>4>5>3>6>7>}>8>9>0>a>b>c>d>e>f>g>+=J t H 3 #.< / | ] < * @ / ' 9 8 8 8 9 H ", +" u $ 9 4 9 / < * ^ $.h.n k g n N D K J J K Q J b#h>i>j>k>l>m>n>o>p>q>r>r>r>r>r>r>s>t>u>u>t>v>r>w>r>x>r>r>r>r>y>z>A>B>C>Y;D>D>D>E>E>~%~%~%F>G>H>I>J>J>J>J>J>J>K>K>K>K>I>H>L>M>N>M>I>M>O>P>r>w>Q>R>S>T>T>L>U>U>V>W>X>Y>Z>`> ,K Q J E | s ; o / ] * h @ @ $ 8 0 0 8 m H ", +" i $ 9 4 x $ * g : h.g k v 1 j n ; H K K t J K #$b#:$.,+,@,#,$,%,&,&,*,=,z$-,;,>,&,,,',),!,~,{,],^,/,/,(,_,_,:,<,z&[,},[,[,[,},!,|,D$D$D$1,2,3,4,5,6,7,8,9,m>9,8,0,a,b,c,A$d,e,f,1,d,>;d,g,h,w$U#i,j,k,|,|$l,C$m,n,R#o,N+J K C K H n = @ * * | * / f @ $ 0 p 8 0 p H ", +" i { 0 4 8 , * 7 }.~ v k c 7 / e 7 H K K K J K K K K K K K K K K K K K K K K K Q K K J K J K t J K Q J K K C K C J J Q J K J Q J K K t C K J C K K K K Q C J J t K K Q K K K t K J 3 C J K J K J K 2 K K K K 3 K 2 J K C Q C J H 8 v - ] | / / / / f @ ' 8 0 9 m 8 H ", +" q # 0 4 8 ; * 1 7 7 c k k : : ^ c ^.H C K K K K J Q K K J K K K J 2 K J K K K C K K K K K K K K J K K K K K J K K K J K K J K K K K K K K K K K K K J K K K J K K K J K K K J K K J K K J K K K K K K K K C C Q Q t C K C Q C H f ^ @ | | & / / / | % ' 9 8 0 m 9 H ", +" 5 $ $ 4 8 ; & = & + ^ 7 h.$.k & n < E J K K K K K K K K K K J K K K K K K J K K K J K K 2 K J K K K K Q K K K K K K K K K K K 2 C K K K K K J K J K K K K J K K K J K K K K K K K K K K J K K K J K K K 3 K J K K K K J K K J I & | | | * 6 < h h | # F p 0 8 8 9 H ", +" ; 9 0 t m _ | 1 ^ 7 ^ k g k ^ c : A H H C J K K K K K K 2 K K K K 2 K K K K K K K K K K 2 K K K K K K K J K 2 K K J K K J K J K K J K K J K K K K K K K J K K J K K K K J K J K K J K 2 K K J K K J K K K K K K K K J K Q J H $ : @ / ] ] 6 / ] / f ( $ 8 8 0 8 9 I ", +" 5 9 8 8 4 ; - ~ h.c & c e g c 7 ] g & D D D D D D K Q J K J K K K J 2 J K K J K K 2 K K K K K K K K K K K K Q K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K J K C K K K K K K J K Q K K K K H D [ D R & | | < < @ h * * < | , p 0 8 m 8 9 H ", +" $ $ 9 ) p # 6 7 ^ 1 : n : 7 n ^ a k 1 9 ' ) 4 t K D H H E E D D D K K C K K K K K K K K J K K K K J K Q K K K K K K K K K K K K K K K K K D K K K K Q J D K K 2 K K J K Q K K K J K K K K K K K K K K K K K D K 3 C $ $ _ $ 8 ; f o . 6 o h * / . / ; { 9 x 8 0 0 H ", +" $ 8 9 8 ) # @ ] n ^ 7 k 7 7 : 9.l v l 3 0 _ ; | 6 * | 6 l ; 8 D H H H H D K K K K J K K K K K J K D K K K J K K K K K K K K K K K K K K K K K K K K K K K J K 2 K K K Q K Q K K K Q K J K K K D D K 2 3 K 8 p 8 $ 8 9 9 p ) 2 f / * / | * h / * = | $ ' 9 8 m u p R ", +" , 8 9 4 x _ / & v ^ ~ $.^ 7 n 7 + N v p 3 $ % { , - . * : +.g v X ] 0 t R H E D K K K K C K K K K K K K K K K K K K K K K K K K [ K K K K K K K K K K K K K J [ K K K K K K Q J K D K D D D 2 2 9 $ $ $ $ 5 9 ;.4 8 2 2 4 4 ) f / h * / * o / * / - @ p 9 8 8 8 8 H ", +" ; 8 9 4 4 @ & * g h.c & 7 n G ^ & G #.@ t i { $ 5 @ f - ; . & c 7 #.X X +.| # [ E H H D K D K K K K K K 2 2 K K K K K K K K K J K K K K K K K K K K K K K K K K K K Q K K K D D D I R 8 $ w f ; @ ; 5 9 { 5 8 8 8 8 8 8 4 2 @ . f o & . * = 6 f * | _ 9 8 p 8 9 0 H ", +" ; _ 8 ) 8 @ . 6 < g & ^ 7 h.g ^ j k v * 3 8 $ $ _ @ @ | / ; * ^ ] * : h.& X +.X ^ & $ 4 [ D H D K K K J 2 2 J K K K J K K K K [ K D K J K K Q K K K Q K J K K 2 K D D H D D 2 9 # < @ o f f | | _ ; ; @ 5 5 0 8 8 w 8 8 4 8 ; / 6 / / 6 < . * / h h $ m 9 0 8 8 9 I ", +" ; 8 9 ) 4 @ 6 ] : c ^ h.v $.7 A v ^ g c x I J Q 4 0 $ 5 / * / = = n g 7 h.^ : ^ X ).k n = - $ [ H H D D [ K Q K 2 K K K K K K K 3 K K K 2 K K Q 2 K J K [ D D H H D 4 ; ; = 1 = : c h / o @ @ @ ; o f @ ' p 4 8 4 4 2 4 H ; + & . 6 6 } = & | & | | # m 8 8 9 m p I ", +" ; ) 9 8 8 ; f = g l * k 7 n 7 g n } ^ n D D K K D D D D 2 3 x # ; l * X '.g.g $.^ g k h.g.n s c ] > t K H H H H K K D K K K [ K K Q K K Q K J K D D H H H D 2 $ ] * : & 1 = ^ 6 | f o * / @ @ ; $ 8 x 3 4 K Q K K H K K H ; T ; / / & . 6 & / h * @ { $ 8 8 8 9 9 R ", +" - 9 0 8 4 { } ^ * 7 n e l X h.k h.* G h.x I Q K J K K K D D D D D K t $ , c e q.r.g k e c k n 9.+.n : & = @ ' i [ K H H H D D D D D H D H H H H K 4 9 @ ; 7 g g 7 & + . + / ^ = = : }.@ 9 0 0 K D D D K D K K D D 8 x D E } : 6 = / 1 * < * 1 * / | ; p 9 0 8 0 p R ", +" | 8 p ) 8 # ] a = ^ g 7 l l k c n e : 7 ^ E K C Q 2 K D K K D K J D D H H E D t / X P X k 1 h.k k k g X s $.~ h.1 / & > ; t 0 3 4 8 8 8 _.# <.= c ^ c : g g 7 + : & 1 * : 1 9.+ > ' ) D D D D K K K K K K 2 4 _ * = ) D 2 h.| / / & = + & 1 / / & / @ 9 8 8 9 8 0 R ", +" ; 4 9 8 4 ; ; * 7 & k 7 v ^ }.$.^ ^ 7 n s D D C 4 8 9 0 3 K D D D K K K J K D D E I z 7 +.+.g 7 7 h.c k k ~ & X s + : : c +.s k g $.'.@.$.k : ^ $.k = 7 ^ / g 7 ^ * X c 7 ^ ' 8 J H D K J D D K K K 2 4 4 p 9 $ 8 K K E @ n h / | . & = & * * & = @ ; $ 0 9 8 0 8 R ", +" - 4 9 4 8 % f & } A : & k n : $.e k k c k # H J 2 t 8 @ | ; { 9 4 2 D K D K K K J D E H 4 < r.+.1 & k k n : n h.$.7 ^ +.* l $ # i , ; ; = #.7 ] 7 1 & 7 } & : = k ~ #.c $ K H D K K K D K [ 2 3 4 8 p 9 8 p t K [ 2 D H +.1 / 1 & 6 = 6 * & = * 6 / @ 9 8 0 8 9 8 [ ", +" - 4 9 x w @ - & & 1 A * s h.k e n k c k X $.D D K C 3 [ # / . . / - $ 9 8 t J K 2 K K K D H 2 } T * l 1 k G g : } & v u K D D K I D I [ 2 ' & +.< & : k n : 7 + 1 G (.I D D K J K D [ t ;.{ $ 5 p $ 9 p [ D ) 2 C C E / g * = * . * * * 1 * = 6 ] h ; ' 9 8 8 9 0 R ", +" - ) 9 8 ;.; / & h.~ k g k +.h.7 k k ^ 7 ^ +.@ E 2 2 K _ 4 $ | / / ] o @ ; 5 p ) 3 2 K 2 K K C H * +.g ^ g k 1 g X k t I 2 K J K J J D J D D K # X g } & & 7 ~ 1 n $ E K J K K D K ;.% @ ; # % # $ 9 p [ { 6 D K 3 H 3 P / f / g = & * a * . * * 1 h $ ' 9 8 9 8 ) [ ", +" / 2 0 8 8 $ 6 * ^ c n 7 n & c 9.g 7 g c 9.g c D D 3 E p,q,E % ; - < ] o f @ , { 0 4 4 2 2 K K 4 E A v ^ : 9.n 7 n 4 I J K C 2 2 K K K K K K K H ; G & 1 * 7 n c # H C Q K D D w f f f ; # $ % { 9 9 0 E r,s,E t K E / e * | / * / * ^ : & * & ] / f ( $ p 8 0 p 8 [ ", +" {.4 9 8 z $ | * g 7 * l 9.: h.e c k k 7 k ^ X | E Q H t,u,2 3 $ _ ; 6 . < | ; ; % $ 8 t C Q D t C ) k.c e s h.^ E H J K K [ K K 3 K 3 C K K K K E ' X g : & +.* E 4 Q K D 4 <.. | ; ; ; # $ $ $ p 9 H 2 v,4 H t D H : * / / & = * . 1 & / = & / * = ; $ 8 8 8 9 8 [ ", +" * 3 9 8 8 $ @ A : h.~ n 7 $.7 k g.7 7 v 7 7 h.+.2 H K E p,q,E $ $ _ ; - | @ @ @ ; $ $ 8 3 t K K 3 4 ^ v 7 7 +.' H C 2 K D 4 4 9 0 w 8 8 8 K K K K H f e * 1 X 9 2 t K D 8 . . | @ ; ; _ @ % 9 $ 9 u E w,x,E 4 J H f X | o / * / / 1 * * = & a & | | _ m m 8 8 0 4 [ ", +" } 2 8 ) 9 _ < ^ 1 ^ k k ^ ~ h.^ n l ^ 7 v 1 b g.@ E Q E t,u,2 [ i { # ; ; - - ; ; % $ $ p 2 K K 2 8 1 h.n s & H K C K D 9 | ; % { { # i p 9 4 D K D D h.e 1 g 0 4 J D [ | 1 @ | o ; ; # # # $ 8 8 H K v,$ H t D R s.: | : * : = & * a 6 * * = 1 * < | p 8 9 8 0 8 [ ", +" ~ 2 0 8 8 % @ / ^ g : c n k 9.^ X ^ ^ #.h.s ^ v g.3 H K E s,r,E 4 9 $ % , ; ; ; ; @ # { $ t K K K 4 7 X h.& I D C D D ; . / | ; - % ; _ i 8 8 3 K J H $ X l ^ 9 ) J D 4 | / - @ @ _ ; # ' 5 8 4 3 E r,y,E 2 Q E g s f . * / & * = + 6 } < 6 6 < 1 / ( 9 8 8 0 p t Q ", +" 2 0 4 0 9 f & & 7 g h.9.n ~ g.h.k 7 7 e 1 7 j +.h.E 3 H H z,$ H p 0 $ 5 # % ; # , ; # 5 4 K K K i ~ k k _.H t K [ % . / - < f w % ; ; $ $ ) 4 2 J D E c ^ : o 3 K K 4 | - f ; ; , # ' $ p ) 4 H A,v,K H 4 E > P | & & 6 . * * / & h / * * * = 1 / $ ' 9 0 p 0 4 ) ", +" 3 0 0 4 $ @ * 1 G 7 7 7 G k j 7 : p.~ h.g.7 = h.T ; E ^.E B,v,E [ 9 9 i ' # _ # ' $ $ 9 K Q D [ 7 +.k n J D 3 D 8 | | | / i 3 G O R % % { 8 4 4 J K D 4 g.+ * 8 D D K % o @ , _ _ $ $ p 8 8 H H v,C,E t R H X ^ | / . * 1 = ^ = / = | & * ] 6 * | ( $ p 8 0 p x ) ", +" [ 8 p 8 { @ * v g k v G n k k 9.g * b G A : g 7 +.m.H H K E v,x,E 4 8 p p i 5 q $ 5 9 4 K D I ; X k.n.- E J K t % _ # , [ z U G D,l E 4 $ 8 4 Q t K K H - & n ; K [ K Q $ _ $ $ $ 9 p 8 4 t E x,r,E Q C E h g ; . / * & @ = o * : < / 1 + ] * 6 @ _ $ 8 8 8 9 4 ) ", +" ) 9 ) 8 ; | } 7 : c 9.k h.^ X ^ 9.g.g n ~ ^ }.: g 9.: D K H R u,C,H p 0 0 0 8 p $ 9 K J D I / s k $.X ^.H 2 2 p $ i 9 [ A B E,G D,3 G $ 4 8 8 ) 2 Q J H $ X / = ; K D K K 8 9 9 0 4 ) 8 4 H C,p,H H 4 E ; @./ 6 6 = / & & / 1 ] ] 6 / / ] * * 1 f ( i x 8 0 8 4 3 ", +" 3 m 8 4 { / < A k 7 k 7 n 9.^ k j g k n h.$.A X ^ G X @ E K E t,F,H t ) 8 8 8 8 t K K H E 6 +.^ 9.9.- H K K 4 9 ;.8 2 $ ..B E,H H 3 G j [ ) 4 4 2 Q K H ^.X = * & % K K D K 4 4 8 ) 4 4 t D G,<.E 4 H [ X ] = | & 1 < & . * 1 . * = = * * / = & | @ ( 0 8 x m 4 3 ", +" 4 8 8 ) $ / & g g.g k k n G G g k $.k } ^ k g g : k $.P 9 E t H H t C t t 3 4 K K D I _./ k ^ & a m.9 H K 2 4 ) 4 4 8 4 E I C 4 4 K E I t 4 3 t t 4 J K E @ : / & * # ) 2 D K 3 t t 4 C 3 4 H H t H H p.v @ / 1 + l 6 / 6 * = * = * * * / * & < @ , # 8 8 8 8 t ) ", +" 4 8 8 8 $ @ < : n : c h.h.n v k h.c A $.~ * 7 g s A + k +.9 E t K t 3 t 3 J J D I K | g v * = 7 k k H K Q 4 8 8 4 t 4 4 4 t 4 4 t t 4 t 4 4 4 t 4 t K K H ) g < / f | { w 4 K K K K K 3 C 3 2 J J E k #./ & * ^ & = / * 1 = < * & ] * | * * 6 1 / _ 9 8 8 8 0 4 ", +" 3 9 ) 8 % h * a k p.+.s k k k 7 $.h.^ X k ~ l : k 7 h.a X m.H H t K 2 K K D I 3 ; = . < / * ^ l 9., H C 2 9 9 ) 4 3 4 4 4 4 4 4 t 4 t 4 4 4 4 t 4 4 t K K H g < ; - @ # $ { p 3 D K Q J K 3 C K E , v + l * 1 * o | . & = / < = 6 * ] * } o | * @ @ ' 0 8 9 m 2 ", +" [ 8 8 8 ' <.* e G g h.g h.$.v 9.k 7 $.7 7 h.k c ~ 9.7 7 7 X ^ E E H K K 2 4 5 @ @ ; @ / | = : k k t D 2 ) $ 9 9 8 p 8 t 4 ) 4 ) 4 ) 4 ) ) 4 8 4 4 8 ) 2 K H ; / $ f _ $ $ 9 9 8 8 t 2 2 K K D H ; o.6 * 6 * o ^ = ] 6 a * / 6 / < * / + & = & & h _ ' 8 9 8 8 4 ", +" R 9 8 8 % < l ^ g ~ 7 n X n A G }.c $.: g k ^ & ^ $.: 7 s ^ g.1 { @ [ x 9 $ $ 5 @ @ ; | < * 7 h.l E K 2 _ , 5 $ $ 0 9 9 0 p 8 9 8 p 8 8 9 8 0 9 $ i 9 K K K 3 o _ # 5 $ { $ 0 p p ) 8 4 ) 4 H * v 1 + & = = } ^ = & 6 * * ] = & . / / / 6 * a ] | ; { 8 8 x 0 C ", +" R 8 8 x % ; * ^ c 9.h.7 l : g.G k b j * & 7 A v k ^ g 9.h.k 7 X @.v % 4 9 9 9 i { $ { ; < | / 9.@ E [ ^.| f _ # $ 5 { $ 5 9 $ i $ 9 9 0 9 $ 5 $ $ $ $ x K K I @ ; > $ 5 $ $ 4 x 8 4 8 t 4 [ { 1 ^ * = h ^ * * / = / / & * / / * * | * = * 6 ] + @ @ 9 8 8 m p 2 ", +" [ ) 8 8 $ ; = h.$.g k j 7 k A X k n ^ e k c k k : 7 k : : p.^ & 7 X 9.8 t 9 9 i 9 0 ; ; ; | / b 0 D D i o ; ; ; % ; # ; % % ; % $ { # $ $ % $ ' % # _ 5 K K [ % ; $ $ 9 0 8 ) 8 4 ^.4 4 [ 9 : ~ g * / = 1 6 ^ . / . < = / * . 1 & / = * * * } * f ' 9 x 8 9 8 2 ", +" 2 8 8 8 ' | * 7 : h.9.G v 7 j X j e a A n 7 7 g 7 j ^ n s c h.k e : g g ) 4 9 9 $ 9 $ % , _ @ - C D [ ; o ; ; ; ; ; _ , ; ; _ ; ; ; ; ; ; ; # # _ % , { 3 D K 3 # $ 8 i 9 4 4 4 8 4 4 K $ & ^ ^ * & = 7 ] 1 : & 1 + / / & = & / = = ] & } & * . h _ $ x 8 8 9 2 ", +" R 0 4 ) $ - < k c n h.~ e k A n k n $.v h.A g ^ + ^ G ^ 7 k v : k +.h.+.* $ ) 9 0 5 9 $ , 5 ; ' D K 3 / | ; ; @ ; _ @ ; @ @ ; ; - ; ; ; ; ; ; ; ; ; ; % 8 K 2 C , 9 9 0 8 4 8 ) 4 3 2 % g + k : ^ 1 / * & + * / & * 6 * * * f ] 1 & * & * a h / h ( $ 0 x 8 8 [ ", +" [ 8 8 x $ ; o k k k 7 k ^ N ^ e A 7 k 7 + j k & 9.g n h.^ A n 1 g.g.: : 9.1 0 ) 9 8 $ 5 ' w @ ' D D ) / @ ; ; @ , ; ; @ - @ f | ; ; ; ; ; ; _ _ , ; , % 8 K 2 K # 5 8 4 4 8 4 4 [ K ; k = : h.A & 7 : / = ] 6 : * * . & / / = / * < a h = * * ] / f $ w 8 0 8 [ ", +" [ 8 x ) , ; = ~ k ^ 7 9.7 e c k p.k : 7 +.7 * c g 7 & g X k k e #.b : $.b n v 9 [ 9 w 9 i 9 ; 0 D K 9 | ; _ @ ; ; @ f ; ; ; ; - @ ; ; % # % % ; # _ % { 9 K Q K 8 $ 8 4 ^.8 ) 3 9 6 1 ^ ^ ^ 7 + & & & * / * & * = / / 1 * < / = | / . 6 * * < = / > 9 0 x 8 8 [ ", +" !.m ) 8 p _ ] k = c 7 e g j g.^ : k 7 l c ^ k $.k n j & G v $.^ 7 ^ h.k k #.s 7 | 4 8 8 9 9 9 3 K [ % o @ - ; @ @ @ | ; ; @ ; @ @ ; @ ; ; ; ; , % , # % 9 3 K D 4 i 4 ) 0 2 [ $ 7 v : v & c & : 1 1 & / & / ] * * 6 ] 6 | / * 6 = & f ] = * / 1 @ $ 9 8 0 8 m D ", +" 2 8 8 x 9 ; - 7 g k j g c $.j g v h.c ^ 1 g ^ e n k +.$.h.: h.7 g g e h.1 A $.v s * 4 4 0 9 ' K D Q $ @ @ @ @ ; ; @ ; | i ) _ ; ; i ) % ; ; ; % ; ' $ _ 9 K 3 K t 8 4 8 3 3 f * . n & * ^ 7 1 : 7 & + 6 : ~ . 1 ^ . ] ] 6 * o } . = / < & = | f / _ p 0 9 8 9 I ", +" [ ;.x ) 9 | * & ~ k a k 7 h.n n l : 7 }.7 n @.X g.& * a r 1 9.h.$.c 7 h.h.^ }.G v : & ' ) ) ) Q K K 5 ; ; ; ; @ ; ; % ; n.-.; ) w * H,v 5 ; % # ; ; $ i 9 C 2 K 3 x 2 3 ^.* 7 h.^ * + g | = : ^ = / / & ] ] / : ^ * 6 . | | * = / * . ] 6 = * ] @ ; $ 9 8 8 8 D ", +" 4 8 x p 9 ; * * ^ l & 9.h.^ 9.& 9.g / j +.3.| t D H E E E H D u = b n X s 7 v & 7 7 c k h ;.4 K K 2 8 5 , % ; ; ; ; ; 5 $ [ u.I, ] @.w # , # % # % $ 8 4 Q 2 K K 2 2 5 6 g 1 + ^ 7 1 / : k / # 0 t D D H H H Q $ & 1 = / o / o & * = / * / a * h ; $ 8 0 8 m I ", +" 4 8 8 x $ , < * ^ 1 7 j G : + k b : +.+.< D E H [ D J D Q K D H E D $ ^ +.$.h.7 ^ $.g l ~ l { D Q 3 4 8 $ $ 5 ; ; ; ; @ i [ u.d O ] 2 _ > , # % $ 9 9 4 t C t K J , @ | + ] 7 n : l & = k | D D H D K K 2 4 Q H E H 0 n & f | . | / = * + | * h / ; $ 8 x 0 0 I ", +" M 8 8 ) $ _ : A & X k : k G h.b 1 : ..* E H D K [ 2 K 4 2 D K K K D H E ; v $.e g g n 7 v : i H J C Q 3 x 9 5 % # # % , ; [.!.d O 4 _ , $ { $ 9 8 8 t 3 J 3 t H E : = 7 n 7 = = . h.& @ D E D D K t ) 8 8 5 ; 6 h 2 E 2 a 6 / ] 6 * . ] 6 * / @ | , $ 9 8 8 m H ", +" !.8 ) 8 $ ; / a k l k 1 g j k g l +.@ E J 2 K 5 , , ; ; ; , 9 4 K K J D E D < #.v & h.n ^ c g 3 H D K 3 3 C 4 ) x i $ % ' # _ 8 9 ( % $ 5 $ 0 4 ) 2 t Q Q D E K / c : ^ / = 7 k h./ K H D R t 9 % % _ % 5 9 8 w ; + _ E D & * . * - . ] / * | ] f # { x 8 u 0 E ", +" 4 8 0 4 p ; / } h.c k h.h.^ 7 7 n j E K K ) _ | k p.+ < 5 % @ @ 5 8 3 K Q D E > X 7 9.g 7 : '.+.- D E D K 3 C t t 4 8 8 9 i 9 9 8 9 9 ) x 4 3 C 3 3 C D H H > = g.^ & 1 : g = = ( H H K 3 % @ @ @ ; # _ { $ 9 9 2 4 / 9 E 9 s < 6 / ] * * | ] . @ ; $ 8 0 8 0 H ", +" 4 8 8 8 8 - & : k h.c ^ a A n : +.$ H J 2 ; - / u,u,z,u,J,& z 5 ; ; 9 ) M J K E # +.$.7 k k 7 s k n < 4 H H D K 3 2 2 3 Q K 4 C t 4 t Q J 3 K 2 D H H I | g s #.* g 7 g 7 ^ c ^.E D K 9 | / f _ { { p $ $ 5 5 i 9 ) 4 $ K H + / - 1 . / . ] < 6 ; ' z 9 8 8 9 E ", +" 3 4 ) 8 9 ; * : c $.& ^ n j * ^ +.K D Q 9 ; 5 '.K,z,z,L,u,u,v,g z i @ _ 8 Q J K E q #.k 7 c ^ ^ n $.g.: . o 8 E D D Q C D K D D D D H H H D H H ^.# 7 n v + ^ & ^ & 6 + n / Q H D 4 | ] @ [.$ , $ O B 6.6.i ~.8 p 9 4 4 t E | : - * | < | 6 | f o > ' 8 0 8 8 E ", +" 3 4 8 8 5 @ - & 9.k ^ $.: 7 A c e K D K $ ; % f K,u,K,E,- K,u,L,L,5 z _ ; 9 t 2 K E ; +.g h.c h.: 7 n 7 : X v & f 3 2 t 4 3 8 z m w @ > < 0 | + #.X : 7 ^ : : 7 ^ & : : k 8 H D 8 * . # , 0.i.M,M,N,O,M,N,P,Q,R,0 8 4 t t H ; v ; / ] / < < < 6 ; # p m 8 0 m E ", +" ) 4 8 ) # | | 1 1 : & v ^ l k g P t D K $ ; ; $ 3 $ % @ 5 ) > L,g S,< 3 ; [.i t K K E * X k : $.n n ^ k k 7 g b X ^ R 8 ; % + g c X m.+.& ; X n n A 1 ^ 7 ^ 1 * k 7 + g , H D 8 = * [.d.P,O,O,M,T,a.j.0.U,P,P,V,T,8 4 4 Q H ; $.@ - @ < * @ f < f # 9 x 0 x 9 E ", +" 8 4 x 8 $ ; | ^ / ^ ^ ^ g 7 ^ 1 g.z H K ) # , ; ; $ # ; @ ; 0 t g u,u,}.0 , # 9 4 Q D D X v 7 h.b ^ ^ g 7 k 7 c $.k 0 2 0 @ < + n ^ = l % : v & & ^ + n 7 ^ : : ~ * g ] D D 8 / . @ { 1.O,O,W,$ 0 X,R,, Y,Z,P,P,T,~.2 t K E e . | | ; 6 | / / @ f # 8 0 x 0 8 E ", +" ) 8 8 8 $ # | / : 7 ^ A c e a ^ X h H K Q 9 # _ , , # _ @ _ @ 4 * z,S,z,$ $ _ # 8 2 K H } $.^ 7 ^ v & 7 k ~ 7 g ~ v * [ Q $ ; 1 = 7 h.; % n ^ 1 ^ : ^ : 7 & }.: ^ ^ 7 < H D _ = | @ [.R,O,W,1.~.j.N,O,c.Y,q j.U,d.L t 3 E $ #.; | f @ o @ | / | @ $ 0 0 x 8 m E ", +" ) 4 8 8 $ { | . k 7 a 7 ^ A & 7 n X t H K ^.$ ; # % ; ; > ; ; m n u,u,z,i % > # 5 C t E | $.k n $.k 7 k & n 9.7 k ^ c x D i ; & ^ . . $ @ 7 ] X k * g ^ 1 7 ^ 7 1 : n z H D _ . < - ; ; O { $ { `,i.i. 'i p Y,4 4 4 3 K E X 1 | @ | o @ / / f & f # $ 0 0 m 8 E ", +" w 4 ) 4 ' @ | & + k k 7 ^ 7 7 & h.X ^ H D K 4 % ; # ; % # > , ; 0 }.z,/ i @ ; # p Q D H : v X h.k } g : ~ e 7 g + a g ; [ 8 ; a v c f 8 ^ : 1 : k : & a ^ : : $.7 ^ c $ D K 8 / | o ; ; { # ( # 9 p ~.0 $ $ 9 ~.4 t K E ; #./ 6 6 - @ | f @ | | @ _ 0 8 0 8 0 E ", +" q 4 x 8 w @ / A e 6 7 7 g ^ k g & : '.h.E H K Q $ # % # , # , ; # z $ $ @ @ % 8 t K E ] m.: & g + n $.9.n ~ ^ n ^ ^ k ; [ 8 # * 7 k % 8 a 7 ^ 1 : & : + h.^ 7 ~ k g n - D D D 4 % - - ; ; ; % $ { $ $ 9 5 9 x ) Q D E , s @ ; | | / f @ / h | @ | # 9 8 8 8 8 H ", +" $ 8 8 ) $ ; | / ^ s ^ & : k k h.e ^ : X : t E D K ) m i { % ; ; # _ $ _.9 u t K H E , X k 7 h.c 7 N : k A : k + X A 7 ^ 2 4 $ : n / 4 _ k & $.& 7 & 1 k c ^ g ^ k c 7 G $ =.D D K t 9 $ $ % $ $ $ $ 0 0 8 t Q J I E | s / | o f f @ @ < | @ | | f ; 9 x 0 8 8 H ", +" q 4 ) 8 p ; 1 * ^ k g k k = ^ 7 g ^ ^ k '.g ; D E H D K 3 x t ) 8 ) 4 t K H E E t / X & k g v ^ 7 g A ^ g c c 7 9.k a 7 8 4 9 . g ~ % % $.n ^ & : 7 7 : & h.7 : ^ ^ 7 n & @ K H D D D K 3 Q 3 ^.t Q 3 K K D H H 4 = . f / @ 6 @ / f f / | | | | o ( m 0 8 x x H ", +" i 4 8 8 $ @ / e a N c l X ~ & A ^ ^ ^ 7 s : X 7 / 8 D H H H H H H H H H H K # & s s 1 ^ & k 7 g v c $.& 7 ^ n n 1 7 G e w 3 8 ; h.& 8 | b + = c 1 ^ 7 7 7 g 7 : 7 1 : ! 1 : = , 2 [ D D D D D D D D D D D 3 ' / . . @ | | ; ; ; @ o f < / @ h h ; _ 9 0 8 u 8 H ", +" , 2 9 ^.$ B * h ^ = : g g ~ ^ n } : h.^ ^ 7 j $.$.G * / ; ' 9 m 9 0 ; h / n X k * ^ l g 7 & 7 j g c ^ s g h.X c e 1 k : $ 3 5 < s = [ | ^ * 1 ^ : : ^ : & c : c 1 ^ 1 N & g = & . @ | { t 0 3 2 2 4 t [._ / + . @ ; | f <.f ; f ; o @ @ | f ; / / ; 9 p 0 8 8 H ", +" ' 3 8 8 9 $ . l h.7 : A * 7 7 1 : 7 1 g = ^ n : h.v s s T n n v T +.+.X n n 7 k ^ 1 ^ k 7 : : * }.7 ^ : k n ~ k n 7 : : 8 4 9 * #.@ ) * X ^ ^ g ^ 1 & * & 7 : * + g : } ~ : ^ n n + g 1 = 1 & 6 h = + * 6 / @ | / . | | | @ f f | _ @ - @ @ | o ; % 9 u 8 0 4 H ", +" y 8 8 4 0 ; & & : ^ n ^ ^ c 7 1 ~ ] c ^ 7 + ^ g ^ ^ v k ^ : g c g h.7 ^ ^ : : g : ^ : n & 7 : ~ ^ 9.g 7 7 & k h.: ^ g 1 3 8 5 * $.& ;., '.h.& g ~ n 7 ^ & = * = g ^ ^ l + & ^ + = ^ & ^ + * + 1 a 1 * & . . < / . | f o | f | f o ; @ | ; ; @ o ; { $ 8 8 0 4 R ", +" ; 4 8 8 i - | 7 : 6 ^ ^ 7 + ^ n & * 9.g A A 7 s n 7 n : ^ : 7 ^ & ^ ~ & 7 n }.& ^ ^ 7 : : } h.h.: e g 7 7 h.: k c a 1 k 4 4 9 * v : 9 4 c h.: j 7 1 ~ 1 $.} : ^ ^ 1 = : 6 g : 7 * a & / : 6 1 : / / | = + l . 6 @ 6 f / | o @ ; ; @ f ; @ @ ; f ; # m 8 8 8 4 R ", +" @ 4 9 4 $ ; & & e 9.^ : ^ & * a & & + 7 v #.^ $.+.G 7 +.& l c h.g c l n g ^ a : 7 : h.& h.g 7 & : 1 ^ k + k 7 k & g #.q K 9 # + $.s @ [ & $.= & 1 ^ & g 1 7 c v ^ & = * }.: ^ & + * 1 1 ] * & = * = & o 1 = = < / 1 f | 6 | | f ; ; @ ; _ @ ; _ ; # m 8 0 0 x R ", +" @ 2 .') $ ; & ~ h : : & c ^ ~ 7 / : 9.~ & A l < < ] & +.X n k h.e + X k 7 & 7 7 ^ + & ^ k c ^ & 7 * : g 7 ^ g e s X < [ t $ < . & 7 - p 9 : G 6 : b = & : * * 1 ] & & + ^ ^ & * = : ^ a 6 = & & 1 ^ = = } = f ; @ | / 6 . 6 f ; ; ; ; ; ; @ @ f @ # 8 p 8 0 4 R ", +" +'@'#'4 $ ; < g 1 1 7 l & ^ }.& X $'( K D D H H H H D Q ' a G 7 7 g.k * n 1 c ^ A 1 $.k ^ & ^ k ^ a 1 ^ 7 . * +.+.F E K K K K D H E [ t K H * s $.1 * 1 & 1 & 1 + = l / * + / & / & = ^ ^ / & = v ^ f 8 4 K D [ D D K 2 D 6 1 <.@ ; _ _ @ @ ; | ; # 9 0 8 8 4 D ", +" %'&'*'8 $ , h / : & 1 j 7 ] g '.(.E H D D D D K K D K D H H D ' $.X +.k 7 7 7 $.7 ~ g ^ h.^ $.: 1 7 : : v p.7 > t E J Q K K D H Q ^ T X & = : = $.}.: & ~ * * & 1 & * ] * = & = / > Q H D [ D K K K [ K [ H H D o | # f f | @ _ f _ # 8 p m 0 t D ", +" ='-';'>'0 | h * * 1 7 ~ 1 ^ g., E K K K D H D * g.v 7 : : + c g 7 ^ 7 : a 7 a 7 * g s y H E D t D E D * X n & & < 7 7 & = j 1 . & = } 6 * c 1 $ D H D K E R 1 * 5 % ; @ | @ # { 8 0 9 m D 3 ", +" ,'''0 )'!'~'{'& j k = ]'g ^'M E J Q H E [ : X v 7 & 7 } l 1 : l / n : h.+.$ E E D H E D } v n ^ ] * & | ] ^ = 6 + : + + ' D H K K I E | = f ; ; ; ; ; % $ 8 p D D ", +" D D j+5 /'('_':'<'['}'|'< E J D E H _.g s s n j X $.7 : g 9.+.c u E K E E / ~ $.1 ^ + & = & 1 = ^ & ; ) D D [ D D / | | ; @ ; @ ' 8 8 D D ", +" D D D D D D D D D D D D I D H R D D D D D D D D D D D K D J I E 3 3 ' 3 ' 3 3 3 3 ' 3 3 K D I D D D D D D ; D D D D ", +" 4 D D D D D D D D D E 4 $ Q 3 [ K t ) 2 D R [ K [ 4 [ [ t Q [ t [ I I ) D D D D D D D D D ", +" "}; diff --git a/xgnokii/xpm/Preview_6150.xpm b/xgnokii/xpm/Preview_6150.xpm new file mode 100644 index 0000000..ca3ac86 --- /dev/null +++ b/xgnokii/xpm/Preview_6150.xpm @@ -0,0 +1,1546 @@ +/* XPM */ +static char * Preview_6150_xpm[] = { +"138 289 1254 2", +" c None", +". c #464C51", +"+ c #27353C", +"@ c #262C30", +"# c #30373D", +"$ c #3B444A", +"% c #405259", +"& c #19262B", +"* c #36454B", +"= c #383C42", +"- c #364C53", +"; c #32454C", +"> c #5A5E63", +", c #24262D", +"' c #121F24", +") c #1D2E3C", +"! c #273A42", +"~ c #44585F", +"{ c #4C5C64", +"] c #4C5559", +"^ c #182022", +"/ c #121A1F", +"( c #1B1A1A", +"_ c #20333B", +": c #50636A", +"< c #59656B", +"[ c #465E60", +"} c #3E4D53", +"| c #10161A", +"1 c #18222C", +"2 c #314B51", +"3 c #395259", +"4 c #3D575C", +"5 c #3A4D53", +"6 c #1A1615", +"7 c #1B2A30", +"8 c #5D6C74", +"9 c #162234", +"0 c #2D444C", +"a c #253E45", +"b c #0D1217", +"c c #2C3E45", +"d c #546B72", +"e c #090E12", +"f c #697976", +"g c #686268", +"h c #5D5A5F", +"i c #222D33", +"j c #0F0E12", +"k c #060A0C", +"l c #05060C", +"m c #48444B", +"n c #949195", +"o c #0B0A0D", +"p c #7C8288", +"q c #697075", +"r c #37353C", +"s c #2A2A32", +"t c #241F27", +"u c #554A50", +"v c #16120F", +"w c #160E0D", +"x c #0E0507", +"y c #14090B", +"z c #1A0C0D", +"A c #201617", +"B c #2E2A34", +"C c #697985", +"D c #0A0607", +"E c #463A40", +"F c #607279", +"G c #6E808A", +"H c #070205", +"I c #1A1210", +"J c #201213", +"K c #281315", +"L c #2C1E23", +"M c #71889A", +"N c #2E1418", +"O c #32161B", +"P c #39161B", +"Q c #381218", +"R c #371B20", +"S c #401A20", +"T c #401E24", +"U c #461920", +"V c #35242E", +"W c #352C35", +"X c #020204", +"Y c #412329", +"Z c #461E24", +"` c #4C1E26", +" . c #4B232B", +".. c #55212B", +"+. c #572B34", +"@. c #57262E", +"#. c #602C35", +"$. c #55323B", +"%. c #040604", +"&. c #3F161C", +"*. c #4B1922", +"=. c #612530", +"-. c #63323B", +";. c #6C323C", +">. c #6C2E3B", +",. c #703641", +"'. c #793543", +"). c #783A45", +"!. c #793E48", +"~. c #7E3C49", +"{. c #703A44", +"]. c #653841", +"^. c #79797D", +"/. c #200E0F", +"(. c #662C37", +"_. c #72313D", +":. c #843E4C", +"<. c #7B424C", +"[. c #84434E", +"}. c #8A3D4C", +"|. c #8C4250", +"1. c #934253", +"2. c #6F4048", +"3. c #6A3740", +"4. c #442E37", +"5. c #843947", +"6. c #8F3D4D", +"7. c #963D50", +"8. c #944655", +"9. c #9D4C5B", +"0. c #8D4653", +"a. c #5A3740", +"b. c #4E2C33", +"c. c #60777C", +"d. c #290E12", +"e. c #782D3E", +"f. c #9D4556", +"g. c #8C354B", +"h. c #9C3D54", +"i. c #944A56", +"j. c #A64C5B", +"k. c #AA4F60", +"l. c #A45664", +"m. c #6B2937", +"n. c #B25467", +"o. c #8C4A56", +"p. c #401218", +"q. c #7B4751", +"r. c #553E45", +"s. c #808D92", +"t. c #92505B", +"u. c #B95C6D", +"v. c #A1525E", +"w. c #64424A", +"x. c #BE6375", +"y. c #854A56", +"z. c #8B8E91", +"A. c #C26479", +"B. c #B05C69", +"C. c #321116", +"D. c #2C4343", +"E. c #B36470", +"F. c #A6616B", +"G. c #1A060B", +"H. c #1F0A0D", +"I. c #654A52", +"J. c #68535B", +"K. c #8A6167", +"L. c #966069", +"M. c #7B5A63", +"N. c #58555B", +"O. c #7A565E", +"P. c #8B5A63", +"Q. c #7E6260", +"R. c #835359", +"S. c #A65A64", +"T. c #9D9C9F", +"U. c #D9DBDC", +"V. c #D8E2E3", +"W. c #CBDDDF", +"X. c #1C2E33", +"Y. c #8F9A9C", +"Z. c #E5E5E7", +"`. c #DAE9EA", +" + c #E7F4F5", +".+ c #E7EEEE", +"++ c #C9D4D3", +"@+ c #BECECC", +"#+ c #B9B8BC", +"$+ c #F3F2F4", +"%+ c #A1B1B4", +"&+ c #ABC0C5", +"*+ c #EEF6F4", +"=+ c #BACAC2", +"-+ c #C9CACC", +";+ c #BFC2C3", +">+ c #A1B0A0", +",+ c #6F8774", +"'+ c #A6A7A9", +")+ c #BED2D6", +"!+ c #B4C3C0", +"~+ c #84979C", +"{+ c #98A6A9", +"]+ c #75888C", +"^+ c #F9F9FA", +"/+ c #91AE91", +"(+ c #50645C", +"_+ c #AE495A", +":+ c #364C3B", +"<+ c #445B4C", +"[+ c #2C434A", +"}+ c #2B4243", +"|+ c #2A4143", +"1+ c #263E45", +"2+ c #2B4248", +"3+ c #2B4348", +"4+ c #2B4343", +"5+ c #2B3F44", +"6+ c #273F45", +"7+ c #2C4243", +"8+ c #2C4244", +"9+ c #2C4249", +"0+ c #2B3F45", +"a+ c #2C3F44", +"b+ c #2C3F45", +"c+ c #2C4348", +"d+ c #2C4449", +"e+ c #2E474B", +"f+ c #2C4344", +"g+ c #2D444A", +"h+ c #2D4449", +"i+ c #2C4345", +"j+ c #2C4045", +"k+ c #30454B", +"l+ c #2F494E", +"m+ c #2C444B", +"n+ c #2E474C", +"o+ c #2C4349", +"p+ c #284045", +"q+ c #2A4243", +"r+ c #2B4045", +"s+ c #2C4145", +"t+ c #2B4547", +"u+ c #2B4644", +"v+ c #2B4744", +"w+ c #2C4847", +"x+ c #2C4743", +"y+ c #2B4643", +"z+ c #2C4646", +"A+ c #2B4545", +"B+ c #2C4644", +"C+ c #2C4645", +"D+ c #2B4645", +"E+ c #2C4748", +"F+ c #2C4747", +"G+ c #2C4744", +"H+ c #2C4845", +"I+ c #2D4948", +"J+ c #2D4849", +"K+ c #2D484A", +"L+ c #2D484B", +"M+ c #2C4745", +"N+ c #2D4848", +"O+ c #2C4846", +"P+ c #2C4843", +"Q+ c #2C4A43", +"R+ c #2D4D48", +"S+ c #31514B", +"T+ c #2E504C", +"U+ c #304D4C", +"V+ c #304A4B", +"W+ c #2D454B", +"X+ c #2D444B", +"Y+ c #2F454C", +"Z+ c #30454C", +"`+ c #31454C", +" @ c #284345", +".@ c #2D4749", +"+@ c #2C4746", +"@@ c #2D474A", +"#@ c #294545", +"$@ c #294547", +"%@ c #2D4B4C", +"&@ c #2E4D4C", +"*@ c #30534C", +"=@ c #335C4C", +"-@ c #36644C", +";@ c #36654A", +">@ c #36654C", +",@ c #36654D", +"'@ c #36644A", +")@ c #37654C", +"!@ c #36644B", +"~@ c #37654D", +"{@ c #36654B", +"]@ c #38684F", +"^@ c #36664C", +"/@ c #386851", +"(@ c #386951", +"_@ c #396851", +":@ c #39664F", +"<@ c #38664E", +"[@ c #37664E", +"}@ c #37664D", +"|@ c #386850", +"1@ c #37664C", +"2@ c #366549", +"3@ c #366949", +"4@ c #366C4A", +"5@ c #376D4C", +"6@ c #37684D", +"7@ c #35614D", +"8@ c #33594C", +"9@ c #31544C", +"0@ c #2F514C", +"a@ c #2F4E4C", +"b@ c #2F4D4A", +"c@ c #2F4B4C", +"d@ c #2E4A4C", +"e@ c #2E484C", +"f@ c #30484D", +"g@ c #2C4643", +"h@ c #2D4943", +"i@ c #2F5146", +"j@ c #325B4A", +"k@ c #35624C", +"l@ c #36624E", +"m@ c #366151", +"n@ c #385F52", +"o@ c #385F53", +"p@ c #396753", +"q@ c #3B6D54", +"r@ c #3D7354", +"s@ c #3F7A55", +"t@ c #4A9F5A", +"u@ c #51B05C", +"v@ c #51B15B", +"w@ c #51B15C", +"x@ c #51B05B", +"y@ c #51B25C", +"z@ c #51B25D", +"A@ c #51B25E", +"B@ c #51B15D", +"C@ c #50B15B", +"D@ c #4CA759", +"E@ c #499F56", +"F@ c #479956", +"G@ c #469155", +"H@ c #448352", +"I@ c #427C54", +"J@ c #407653", +"K@ c #3E724F", +"L@ c #3B6F52", +"M@ c #3A6C52", +"N@ c #396153", +"O@ c #385953", +"P@ c #375553", +"Q@ c #365153", +"R@ c #334C51", +"S@ c #354E53", +"T@ c #354E52", +"U@ c #354F50", +"V@ c #365251", +"W@ c #32514E", +"X@ c #314E4E", +"Y@ c #304B4D", +"Z@ c #32484C", +"`@ c #2E464C", +" # c #374E52", +".# c #36494A", +"+# c #354F42", +"@# c #324F4C", +"## c #334C4C", +"$# c #35504C", +"%# c #365B4C", +"&# c #396748", +"*# c #3D7650", +"=# c #489857", +"-# c #4CA558", +";# c #4EAC59", +"># c #50B05B", +",# c #50B05C", +"'# c #50B15D", +")# c #52B25E", +"!# c #4EAA5D", +"~# c #4EA85C", +"{# c #4EA95B", +"]# c #52B75E", +"^# c #56C260", +"/# c #5ACA62", +"(# c #59C961", +"_# c #58C760", +":# c #57C05F", +"<# c #55B65E", +"[# c #52AD5D", +"}# c #50AB5C", +"|# c #4FA95B", +"1# c #4EA85B", +"2# c #4DA65B", +"3# c #4C9D5B", +"4# c #48865C", +"5# c #477F59", +"6# c #497B5D", +"7# c #4B7862", +"8# c #4D7466", +"9# c #4F7163", +"0# c #4B6F62", +"a# c #45715B", +"b# c #437359", +"c# c #407255", +"d# c #3E6F54", +"e# c #3C6754", +"f# c #3C5E54", +"g# c #385552", +"h# c #324B4C", +"i# c #2A4044", +"j# c #25353D", +"k# c #4C5E64", +"l# c #596F70", +"m# c #5F8073", +"n# c #5A8469", +"o# c #4D765F", +"p# c #466C54", +"q# c #3F6A4B", +"r# c #406E4F", +"s# c #40704E", +"t# c #437153", +"u# c #467553", +"v# c #487B55", +"w# c #4B9957", +"x# c #4DA459", +"y# c #52B15B", +"z# c #57BF5F", +"A# c #57C65F", +"B# c #57C660", +"C# c #56C460", +"D# c #55C15F", +"E# c #55C35F", +"F# c #59C861", +"G# c #57C262", +"H# c #57BD61", +"I# c #56B661", +"J# c #57B962", +"K# c #57BA62", +"L# c #58BD62", +"M# c #57B862", +"N# c #57B762", +"O# c #54AD5F", +"P# c #50A65D", +"Q# c #4DA15B", +"R# c #4C9E5A", +"S# c #4C975B", +"T# c #4B835E", +"U# c #47775B", +"V# c #416755", +"W# c #33504B", +"X# c #22353E", +"Y# c #4E6467", +"Z# c #5A7C6F", +"`# c #5A9A6A", +" $ c #58AC64", +".$ c #54AB5F", +"+$ c #51A75B", +"@$ c #4FA659", +"#$ c #51AC5C", +"$$ c #54B15C", +"%$ c #56B65F", +"&$ c #57BA5F", +"*$ c #56BE5E", +"=$ c #57C55F", +"-$ c #58C860", +";$ c #56BD61", +">$ c #55B461", +",$ c #52A75F", +"'$ c #4E8E5A", +")$ c #426754", +"!$ c #2E4345", +"~$ c #1C2C32", +"{$ c #526E65", +"]$ c #598D6A", +"^$ c #59AC65", +"/$ c #59C161", +"($ c #57C161", +"_$ c #57C360", +":$ c #56C55F", +"<$ c #57B35F", +"[$ c #4C765A", +"}$ c #39514F", +"|$ c #22353D", +"1$ c #4A5C62", +"2$ c #517664", +"3$ c #56A364", +"4$ c #59BB62", +"5$ c #5ABD62", +"6$ c #4F845E", +"7$ c #3C5953", +"8$ c #283D42", +"9$ c #465E5F", +"0$ c #547C67", +"a$ c #56AB63", +"b$ c #59C562", +"c$ c #5AC562", +"d$ c #508E60", +"e$ c #406456", +"f$ c #2B4446", +"g$ c #485F61", +"h$ c #547D68", +"i$ c #57AE64", +"j$ c #5AC862", +"k$ c #51A15D", +"l$ c #446F57", +"m$ c #2F4948", +"n$ c #1E303C", +"o$ c #496062", +"p$ c #56816A", +"q$ c #58AF64", +"r$ c #5AC962", +"s$ c #55B05E", +"t$ c #477955", +"u$ c #324D49", +"v$ c #22373C", +"w$ c #45595F", +"x$ c #506565", +"y$ c #59846E", +"z$ c #5AB365", +"A$ c #58BF60", +"B$ c #4C7D58", +"C$ c #365147", +"D$ c #24383D", +"E$ c #4F6168", +"F$ c #45585D", +"G$ c #4F6864", +"H$ c #5A876A", +"I$ c #5BB466", +"J$ c #000000", +"K$ c #4F805B", +"L$ c #395550", +"M$ c #25393E", +"N$ c #273A43", +"O$ c #4E6168", +"P$ c #46595E", +"Q$ c #4F6A63", +"R$ c #5A886A", +"S$ c #5BB564", +"T$ c #4E8B5E", +"U$ c #3B5E4E", +"V$ c #273F40", +"W$ c #1F313C", +"X$ c #2A3C45", +"Y$ c #4A5B62", +"Z$ c #475B5D", +"`$ c #506D62", +" % c #5A8C68", +".% c #5BB364", +"+% c #4E9B59", +"@% c #3C664F", +"#% c #284541", +"$% c #21363C", +"%% c #485E5D", +"&% c #4F7361", +"*% c #589265", +"=% c #5AB963", +"-% c #4EA059", +";% c #3D6D4F", +">% c #2A4842", +",% c #20343C", +"'% c #253C43", +")% c #60707B", +"!% c #465D62", +"~% c #46625F", +"{% c #4E7960", +"]% c #549F62", +"^% c #5AC262", +"/% c #4FA359", +"(% c #40704F", +"_% c #2B4A42", +":% c #27383F", +"<% c #586872", +"[% c #455B61", +"}% c #45635F", +"|% c #4D7E60", +"1% c #54A861", +"2% c #40734F", +"3% c #2D4D45", +"4% c #27373E", +"5% c #5B6C75", +"6% c #45615C", +"7% c #4D7E5F", +"8% c #54AC61", +"9% c #50A65A", +"0% c #417653", +"a% c #2E4F46", +"b% c #23383D", +"c% c #64757E", +"d% c #43565A", +"e% c #465F59", +"f% c #4E7D5F", +"g% c #54AD61", +"h% c #52AA5C", +"i% c #447852", +"j% c #2F5147", +"k% c #26383F", +"l% c #3E5156", +"m% c #455D5B", +"n% c #4E7B60", +"o% c #55AE61", +"p% c #53AE5C", +"q% c #467C56", +"r% c #305247", +"s% c #263941", +"t% c #485F5E", +"u% c #527D61", +"v% c #56AE62", +"w% c #54B45D", +"x% c #478358", +"y% c #335948", +"z% c #23383B", +"A% c #21363D", +"B% c #475F5D", +"C% c #547F66", +"D% c #57AE62", +"E% c #55BA5D", +"F% c #499656", +"G% c #345F48", +"H% c #243D3C", +"I% c #547D65", +"J% c #4A9C56", +"K% c #366547", +"L% c #253F3D", +"M% c #485D59", +"N% c #537E64", +"O% c #56AC63", +"P% c #58C662", +"Q% c #57C460", +"R% c #4A9E57", +"S% c #36684A", +"T% c #26423E", +"U% c #22363C", +"V% c #485D5F", +"W% c #517E61", +"X% c #55A762", +"Y% c #58C062", +"Z% c #59C761", +"`% c #4B9F59", +" & c #386A4B", +".& c #274440", +"+& c #26383C", +"@& c #495C61", +"#& c #507F61", +"$& c #55A662", +"%& c #57BF62", +"&& c #4C9F59", +"*& c #396A4C", +"=& c #284440", +"-& c #23363C", +";& c #4A5D61", +">& c #527F62", +",& c #57C15F", +"'& c #4B9D58", +")& c #274340", +"!& c #4D615D", +"~& c #547F64", +"{& c #58C362", +"]& c #56C05E", +"^& c #4C9E58", +"/& c #386A4C", +"(& c #274341", +"_& c #23363D", +":& c #4B5D57", +"<& c #557F66", +"[& c #57AE63", +"}& c #58C462", +"|& c #55C05F", +"1& c #4BA059", +"2& c #386B4C", +"3& c #274240", +"4& c #23373D", +"5& c #567E64", +"6& c #58AE63", +"7& c #59C462", +"8& c #57C560", +"9& c #4DA55B", +"0& c #396D4D", +"a& c #4C5D60", +"b& c #577F63", +"c& c #58AE62", +"d& c #57C760", +"e& c #396E4D", +"f& c #22343C", +"g& c #5A6E61", +"h& c #547E60", +"i& c #59C461", +"j& c #4EA95A", +"k& c #3A6F4C", +"l& c #27453F", +"m& c #21353C", +"n& c #577F62", +"o& c #57AE61", +"p& c #59C361", +"q& c #4DA759", +"r& c #3A704B", +"s& c #27463F", +"t& c #20353B", +"u& c #4B5D52", +"v& c #547E5D", +"w& c #58AE61", +"x& c #4DA557", +"y& c #39714B", +"z& c #27483E", +"A& c #4B5D50", +"B& c #57AE60", +"C& c #4CA457", +"D& c #39724B", +"E& c #27493F", +"F& c #1F323C", +"G& c #58C361", +"H& c #58C660", +"I& c #4BA557", +"J& c #39734B", +"K& c #27483F", +"L& c #547C62", +"M& c #56AD60", +"N& c #58C261", +"O& c #56C25E", +"P& c #4AA256", +"Q& c #274840", +"R& c #22353C", +"S& c #607967", +"T& c #547D5F", +"U& c #56AD61", +"V& c #54C15E", +"W& c #49A055", +"X& c #38714A", +"Y& c #21353B", +"Z& c #547C63", +"`& c #54BF5D", +" * c #499F55", +".* c #38704A", +"+* c #27433E", +"@* c #21323C", +"#* c #537D5F", +"$* c #58C260", +"%* c #54BE5D", +"&* c #4AA257", +"** c #27403E", +"=* c #4B5C61", +"-* c #527D5E", +";* c #55AA5F", +">* c #57C060", +",* c #4BA457", +"'* c #39704B", +")* c #273E3E", +"!* c #22363D", +"~* c #4A5C5E", +"{* c #507D5D", +"]* c #53A65E", +"^* c #56BE60", +"/* c #54C05D", +"(* c #4CA858", +"_* c #386F4A", +":* c #263C3E", +"<* c #22343E", +"[* c #495856", +"}* c #4D7B5B", +"|* c #52A05E", +"1* c #56BA60", +"2* c #54C15D", +"3* c #4CA958", +"4* c #376F49", +"5* c #233A3D", +"6* c #445B52", +"7* c #4B7859", +"8* c #519B5D", +"9* c #55B65F", +"0* c #59C862", +"a* c #4BA858", +"b* c #366D48", +"c* c #23393C", +"d* c #24363E", +"e* c #44585A", +"f* c #4A7358", +"g* c #50935C", +"h* c #55B05F", +"i* c #59C662", +"j* c #4AA757", +"k* c #336948", +"l* c #203539", +"m* c #41554D", +"n* c #4A6D58", +"o* c #508D5C", +"p* c #54C15C", +"q* c #4AA456", +"r* c #316246", +"s* c #1F303C", +"t* c #425558", +"u* c #4A6A58", +"v* c #52895C", +"w* c #55A75F", +"x* c #5AC462", +"y* c #55C05D", +"z* c #2F5944", +"A* c #435559", +"B* c #4A6859", +"C* c #51875B", +"D* c #56A55E", +"E* c #54BD5C", +"F* c #449552", +"G* c #2D5A43", +"H* c #20353C", +"I* c #425256", +"J* c #496658", +"K* c #51855A", +"L* c #55A45E", +"M* c #5AC362", +"N* c #51B35A", +"O* c #40884E", +"P* c #2C5842", +"Q* c #21383C", +"R* c #273942", +"S* c #3F5256", +"T* c #476556", +"U* c #4F8359", +"V* c #54A35D", +"W* c #4DA757", +"X* c #3C794C", +"Y* c #2B5240", +"Z* c #21383B", +"`* c #26363E", +" = c #3B5254", +".= c #456454", +"+= c #4C8258", +"@= c #53A25C", +"#= c #59C261", +"$= c #4BA056", +"%= c #3B714A", +"&= c #294C3E", +"*= c #22363E", +"== c #3D5255", +"-= c #436253", +";= c #4B8057", +">= c #51A15C", +",= c #4CA056", +"'= c #396D4A", +")= c #27483D", +"!= c #20363B", +"~= c #263A42", +"{= c #3E4F51", +"]= c #436152", +"^= c #4A7E57", +"/= c #51A15B", +"(= c #386A49", +"_= c #26453C", +":= c #21373B", +"<= c #3D5047", +"[= c #435E52", +"}= c #497C56", +"|= c #50A15B", +"1= c #57C160", +"2= c #4A9F55", +"3= c #366745", +"4= c #26433A", +"5= c #2A4148", +"6= c #3A494E", +"7= c #415950", +"8= c #4A7956", +"9= c #51A05B", +"0= c #499E54", +"a= c #336446", +"b= c #254239", +"c= c #233438", +"d= c #2C4149", +"e= c #415550", +"f= c #4B7357", +"g= c #529A5C", +"h= c #58BD60", +"i= c #489C54", +"j= c #316344", +"k= c #254139", +"l= c #27383C", +"m= c #2D424A", +"n= c #405351", +"o= c #4E6B58", +"p= c #568E5F", +"q= c #59B462", +"r= c #479A53", +"s= c #306143", +"t= c #25413A", +"u= c #27383D", +"v= c #31444B", +"w= c #3F5153", +"x= c #4B6558", +"y= c #578560", +"z= c #5BAD63", +"A= c #439250", +"B= c #2F6042", +"C= c #25403B", +"D= c #27383E", +"E= c #3E4B4E", +"F= c #4A5E53", +"G= c #587A62", +"H= c #5BA764", +"I= c #3E844D", +"J= c #2E5A42", +"K= c #253F3C", +"L= c #273B42", +"M= c #3A4E44", +"N= c #475755", +"O= c #54705F", +"P= c #62936B", +"Q= c #5CB864", +"R= c #5AC762", +"S= c #56BF5E", +"T= c #479B55", +"U= c #3A744C", +"V= c #2B5141", +"W= c #263C3F", +"X= c #30464E", +"Y= c #405254", +"Z= c #53645E", +"`= c #5C8765", +" - c #5BA863", +".- c #58BB61", +"+- c #58C661", +"@- c #4EA65B", +"#- c #438555", +"$- c #35614C", +"%- c #2B4642", +"&- c #28393E", +"*- c #374D3E", +"=- c #4A5E52", +"-- c #577A61", +";- c #55955F", +">- c #55A95F", +",- c #55B45F", +"'- c #56BD5F", +")- c #58C35F", +"!- c #58C360", +"~- c #58C160", +"{- c #59BF60", +"]- c #59BF61", +"^- c #59C762", +"/- c #52AA60", +"(- c #4B8D5C", +"_- c #426F57", +":- c #36564E", +"<- c #2D4146", +"[- c #4E695A", +"}- c #50825D", +"|- c #508F5D", +"1- c #50975C", +"2- c #509D5C", +"3- c #52A25B", +"4- c #53A65B", +"5- c #53A65C", +"6- c #54A45C", +"7- c #56A55D", +"8- c #57A65F", +"9- c #59AA61", +"0- c #5BAE63", +"a- c #5AB462", +"b- c #5AB862", +"c- c #59B062", +"d- c #59AE62", +"e- c #59AD62", +"f- c #5AAD62", +"g- c #5AAE62", +"h- c #5BAF63", +"i- c #5BB163", +"j- c #5BB463", +"k- c #5AB962", +"l- c #5AC062", +"m- c #5AC662", +"n- c #5AC162", +"o- c #5DB164", +"p- c #5DB064", +"q- c #5CAE64", +"r- c #5AAC63", +"s- c #5AAB62", +"t- c #59AA62", +"u- c #58AA63", +"v- c #59AB62", +"w- c #59AC62", +"x- c #58AB63", +"y- c #58A963", +"z- c #57A864", +"A- c #58A864", +"B- c #59AA65", +"C- c #59AC66", +"D- c #58AC65", +"E- c #58AB66", +"F- c #57AA64", +"G- c #56A964", +"H- c #55A664", +"I- c #539F63", +"J- c #509062", +"K- c #4B7960", +"L- c #45635C", +"M- c #3D5256", +"N- c #4B665B", +"O- c #4B715B", +"P- c #497659", +"Q- c #4B7758", +"R- c #4C7857", +"S- c #4C7A57", +"T- c #507B58", +"U- c #4F7E58", +"V- c #528059", +"W- c #53815A", +"X- c #55825D", +"Y- c #588362", +"Z- c #5B8265", +"`- c #588162", +" ; c #578661", +".; c #578861", +"+; c #578961", +"@; c #588A62", +"#; c #5B8C63", +"$; c #5D8D65", +"%; c #5E9067", +"&; c #5F9168", +"*; c #5E9468", +"=; c #5F9A67", +"-; c #5BA664", +";; c #5AAA63", +">; c #59AB63", +",; c #58AB62", +"'; c #59AB64", +"); c #59AE63", +"!; c #5AB162", +"~; c #5AB861", +"{; c #5AB562", +"]; c #5AB062", +"^; c #59AC63", +"/; c #58AB61", +"(; c #5AB163", +"_; c #5AB263", +":; c #5AAB63", +"<; c #5AA463", +"[; c #5B9C64", +"}; c #5C9665", +"|; c #5C9365", +"1; c #5B9165", +"2; c #5A9065", +"3; c #598F65", +"4; c #588D65", +"5; c #578C65", +"6; c #568B64", +"7; c #568A64", +"8; c #568964", +"9; c #568865", +"0; c #558764", +"a; c #548764", +"b; c #538764", +"c; c #538664", +"d; c #548664", +"e; c #548666", +"f; c #548568", +"g; c #558567", +"h; c #548466", +"i; c #538365", +"j; c #538266", +"k; c #507E65", +"l; c #4E7564", +"m; c #4E6A66", +"n; c #4C6066", +"o; c #405258", +"p; c #405457", +"q; c #405A51", +"r; c #415957", +"s; c #455954", +"t; c #40594C", +"u; c #445B58", +"v; c #485E52", +"w; c #486051", +"x; c #4A6452", +"y; c #4B6153", +"z; c #4E6858", +"A; c #536563", +"B; c #546664", +"C; c #566860", +"D; c #526B5D", +"E; c #536D5F", +"F; c #536D5E", +"G; c #566E61", +"H; c #566F5F", +"I; c #5A7065", +"J; c #597268", +"K; c #5A7468", +"L; c #577863", +"M; c #587D63", +"N; c #568262", +"O; c #558461", +"P; c #548560", +"Q; c #538461", +"R; c #558462", +"S; c #548564", +"T; c #568567", +"U; c #578564", +"V; c #588363", +"W; c #598464", +"X; c #5C8469", +"Y; c #598465", +"Z; c #598567", +"`; c #578763", +" > c #588765", +".> c #568664", +"+> c #558561", +"@> c #558560", +"#> c #568561", +"$> c #578664", +"%> c #5A8566", +"&> c #5B8667", +"*> c #588763", +"=> c #588762", +"-> c #598A63", +";> c #5A8964", +">> c #5C8865", +",> c #5A8763", +"'> c #5A8166", +")> c #5C7D67", +"!> c #5C7B66", +"~> c #5A7A67", +"{> c #597868", +"]> c #587668", +"^> c #567367", +"/> c #547267", +"(> c #537065", +"_> c #536F65", +":> c #546F65", +"<> c #556F66", +"[> c #526E66", +"}> c #516E65", +"|> c #4F6D63", +"1> c #4F6B63", +"2> c #4F6B64", +"3> c #4F6A64", +"4> c #4F6963", +"5> c #4F6861", +"6> c #4D6760", +"7> c #4C6660", +"8> c #4B6561", +"9> c #4B6364", +"0> c #4D6367", +"a> c #4B5C64", +"b> c #3A4D52", +"c> c #455452", +"d> c #405253", +"e> c #415356", +"f> c #445851", +"g> c #44585C", +"h> c #44585B", +"i> c #485B54", +"j> c #495859", +"k> c #465C5B", +"l> c #4A5D54", +"m> c #4B5D56", +"n> c #4C5C5F", +"o> c #4C6060", +"p> c #4C605E", +"q> c #4C635E", +"r> c #4C665E", +"s> c #4C675E", +"t> c #4C685E", +"u> c #4C685F", +"v> c #4D6960", +"w> c #4E6963", +"x> c #516A66", +"y> c #546B67", +"z> c #556A66", +"A> c #566A67", +"B> c #576C69", +"C> c #566A69", +"D> c #536B62", +"E> c #556C64", +"F> c #536C62", +"G> c #516B63", +"H> c #526C5F", +"I> c #526B5F", +"J> c #526B5E", +"K> c #536A62", +"L> c #536B60", +"M> c #576C65", +"N> c #536C63", +"O> c #556C62", +"P> c #586E66", +"Q> c #587064", +"R> c #596E67", +"S> c #556D62", +"T> c #546D61", +"U> c #566C67", +"V> c #596C69", +"W> c #596B69", +"X> c #556A63", +"Y> c #56696A", +"Z> c #56696B", +"`> c #556568", +" , c #56686C", +"., c #506367", +"+, c #4D6366", +"@, c #4D6165", +"#, c #4C5E62", +"$, c #4D6065", +"%, c #516265", +"&, c #4A5C61", +"*, c #4B6064", +"=, c #495C60", +"-, c #495759", +";, c #44585D", +">, c #40535A", +",, c #3C4D52", +"', c #3D4D52", +"), c #3E5155", +"!, c #3F5255", +"~, c #3E534C", +"{, c #405257", +"], c #41565B", +"^, c #405459", +"/, c #41585B", +"(, c #3F5759", +"_, c #43585C", +":, c #47595E", +"<, c #495B61", +"[, c #495B60", +"}, c #495C57", +"|, c #495C5F", +"1, c #4A5D56", +"2, c #4A5C5F", +"3, c #4A5D57", +"4, c #515D5D", +"5, c #4B5C55", +"6, c #4B5C5E", +"7, c #4B5D55", +"8, c #4D5F64", +"9, c #4B585A", +"0, c #485E5F", +"a, c #4C5C63", +"b, c #624E54", +"c, c #58879A", +"d, c #759BAC", +"e, c #5AA69C", +"f, c #6EB2B8", +"g, c #82B8D0", +"h, c #7AA5B7", +"i, c #537D90", +"j, c #488E84", +"k, c #529A8C", +"l, c #7C8F7E", +"m, c #748F7A", +"n, c #A8B7BC", +"o, c #52A898", +"p, c #54B4A1", +"q, c #4A9A8C", +"r, c #61C5B1", +"s, c #30625C", +" ", +" . + + + @ + # $ . ", +" % @ @ & & @ # * = - - - ; * > ", +" # , ' & @ ) ! ; ~ { > { { ] - - ", +" + ^ / ( ^ & _ + ; % { : < < [ } * = ", +" < ^ | ' / ' 1 ) _ 2 } { { < : { 3 2 + $ ", +" = / | | ^ 1 & ) ! ; 4 ~ < < < { 5 ; ! # ", +" @ 6 / | / ' & 7 ! ; ~ : : 8 8 : % ; _ # ", +" 7 | | | | ' 9 7 + - % ~ : : { : % 0 a # ", +" 1 | | | / ' 9 7 _ 0 ~ { : : { { ] 2 a ! ", +" 1 b | / / / 9 7 + ; 3 : { : < : ~ - c # ", +" ^ b b / / ' ' 7 _ a 5 ~ { d < : ] 3 c ! ", +" ' | | / / ' 9 ) _ 2 ~ { : { : { { } c + % ", +" ' b | / / / 9 ) _ ; 4 ~ : : : { ~ 3 0 ! } ", +" / b | / ' ' 7 ) _ 0 3 { : : < { ~ 5 2 ! * ", +" / b | | / / 9 ) ! 0 4 { : : : { { % - c } ", +" | b | / / ' 9 ) _ 0 3 ~ : : : d { 3 0 + * ", +" | e b | / ' 9 7 _ 0 - ~ : : : : { 3 ; ! c ", +" | b b | / ' 9 9 ! 0 3 ~ : < d { ~ } - ! c ", +" | b | | / ' & ) ) 0 2 ~ : < d : { 5 ; + ! ", +" | b b | / ' 9 ) _ 0 - ~ : : d { { 4 0 c # ", +" b e | | / / 9 , _ c - 4 : : d : ~ 4 ; c ! f ", +" | b b | / ' 9 ) ) 0 2 { ~ 8 8 : { ~ 0 ! ! g ", +" | e b | / / 9 ) _ 0 - 4 { : : : { 4 2 ! ! < ", +" b b | | / / 9 9 _ 0 2 ~ { : : { { ~ 2 c + h ", +" b b | / / ' 9 ) _ a 2 4 { d : : { 4 - 0 + h ", +" b e b | / ' 9 9 _ a 2 % { : : : { ~ - ; ! % ", +" b e b | / ' 9 9 _ a - 3 { { : : { ~ - c + . ", +" b e b | | / 9 ) ) a - 4 { : : : { ~ * ; ! $ ", +" b e b | / ' ' 9 ) ! 2 3 : { { : [ ~ * ; ! $ ", +" e e e | / / 9 9 _ a 0 % ~ d : { { ~ - c i * ", +" e e b | | / 9 7 _ 0 2 ~ { : { { { ~ - c + = ", +" b e e | / ' 9 ) _ a 3 % { : : : { % * c ! c ", +" j e e | | / ' 9 ) a 3 4 { { { [ [ 4 - c + c ", +" e b b | / / 9 ) ) a 3 4 { d : : ~ ~ - 0 + # ", +" j b b / / / 9 9 ) 0 2 4 ~ [ 4 4 % % } ; + ! ", +" k l l e | / 9 9 ) a 0 - ~ { { { ~ % - * ! # ", +" e k l k k e / 9 ) ! 0 ~ { : : { { 4 ; c c = ", +" e k e b b | | 9 _ a 2 ~ { { : : { % 2 + + ; ", +" b e e e b | 9 9 ! 0 3 4 : : : { { 4 2 + + } ", +" b e k b b | 9 9 ) a 3 ~ ~ { { { { 3 0 ! + m ", +" j e e b | | 9 9 ) ! 0 3 % { d { { 3 * 0 ! c ", +" e e e b b / / 9 ) ! 0 3 { : : : ~ } 5 ! _ c n ", +" k l e b b / 9 9 ) ! 0 % ~ : { { { 4 - c + c ", +" e e e b | | 9 9 ) ! 0 3 { { { { : % } 0 a # ", +" k e l e b / 9 9 ) a 2 3 { { : { [ 4 - ; ! c ", +" e l e e | | 9 ) ) a 2 3 ~ : { : { ~ - ; + c ", +" o l e e b | / 9 9 a 0 3 ~ { : { : ~ * 0 ! c ", +" p q < ] m = r + s @ 1 1 ^ ' ' / ( ' ( ^ ' t 1 t , s # * . > f e l e e | | 9 9 ) ) a 0 - 3 { [ { ~ 3 2 c c ", +" q u = , t t ( ( v w j v e j o x o j w y y j y j y o y y j b b v b z w v b A ( t t , B = . g e l 9 9 9 9 9 9 _ 0 3 ~ : C C d : { ; c + ! ", +" q m , ( A b o y j e l o o D k D l D l D o o D o o j y j j b j b j y y j w v 6 b v w v A A 6 ( ( ( ( t t , B E q e e | 9 _ 9 _ ! 0 % ~ 8 F C G G C 8 : ~ - * ", +" m t 6 j j o D D l k l H o l l l o e o e y y w z I 6 A I ( J J J K A A A A A A J I J J 6 J 6 6 J J A A t 6 ( ( t t L , B r | b / ! ) 9 ) _ a % { : C M M C F F : ~ 3 5 ", +" s | b o l D H l l l D D D o x w j I J J K A N O O P Q Q R S S T S S S U S S T S T T T S R R R P P O L N O A N A A N A A L L L V W m / 9 9 9 9 9 ) ) 0 3 ~ : F G M G C F : ~ 5 0 ", +" r | k l X H X l l l x y w J K N K P P P R R T Y Z ` ` . ...+.+.+.+.@.+.+.+.#.+.#.@.@.+.$.@.#.+. .@.+. . .Y . . .Y T V T L L L L V t , W = 9 ' 9 / 9 9 ) _ 0 - { : 8 M M G C F : ~ - ; ", +" m ^ e %.X H H l e j A K A N O P &.U *.U ` ........=.#.-.-.;.>.,.;.,.'.,.).!.~.~.).'.).).).).'.~.,.,.{.{.,.,.-.].-.-.#.$.+.@. . .Y Y V V V V L V B W , 9 ' 9 9 9 9 ) ) 0 3 ~ : F ^.M M C 8 { ~ - - ", +" B b %.X %.%.o j /.N O P S T *.*.` ..@.#.#.(.;.;._._.'.~.~.'.:.~.~.:.<.:.:.:.[.:.}.|.:.|.}.:.1.}.[.[.}.}.|.|.|.:.:.<.<.!.~.{.2.3.{.].-.+. .Y 4.V V B , s , 9 ) _ ) ) ) _ 0 3 : 8 F G M G G F < ~ - 2 ", +" ^ e H X H D j /.A S T ` +.@.=.#.(.>.;.'.'.'.).5.5.5.5.5.5.5.:.:.5.}.|.6.|.[.|.6.7.|.}.1.1.1.8.1.8.8.8.1.9.1.8.8.8.0.1.8.8.1.1.1.:.[.[.!.2.2.a.$.b.V V V B s B _ a 0 a ! _ 2 % % : C ^.M C C c.: { 3 $ ", +" ( o X X k j d.O &.U ..+.=.(.(._.e.'.'.'.~.5.5.5.}.}.:.}.6.6.6.6.|.|.}.|.|.6.|.|.0.|.|.8.|.1.1.1.7.1.8.8.8.8.8.f.f.f.8.8.1.8.9.9.f.f.8.8.8.8.0.[.<.2.$.4.V V , B ) 0 ~ { 3 a 0 - ~ { < G M G F C : ~ 5 - ", +" / o H %.e /.K P U ` ..#.>.;._.'.'.~.'.5.5.5.5.}.g.6.}.6.6.6.|.7.6.6.|.|.}.|.|.1.|.1.|.8.|.1.8.1.8.1.f.1.h.f.1.f.8.8.i.8.f.f.f.f.1.f.j.j.f.j.9.f.9.8.0.[.2.$.4.V V B # ~ F d { % ~ ~ { < G G C C F : ~ 2 * ", +" / %.l D y K Q U ` =.#.(._.'.'.5.g.'.5.:.g.}.}.}.:.5.}.5.}.6.7.6.|.|.}.|.0.|.|.|.7.1.|.|.|.|.8.7.1.8.1.1.8.8.8.8.8.9.f.8.9.9.9.i.9.9.9.f.j.9.j.k.j.l.k.k.9.i.[.].$.W V W ) : G F : : : : 8 G G C C F < ~ 5 2 ", +" / X X D J K P *.*.=.m.e.'.,.'.g.'.}.}.:.:.:.5.g.g.6.6.6.6.6.6.g.}.|.6.|.6.6.7.6.|.|.|.1.}.6.6.6.|.1.1.1.1.f.1.1.8.8.1.1.f.f.9.8.f.9.8.f.9.f.j.9.j.j.k.l.n.n.k.f.o.<.a.4.W V r 8 M G F : < F p G C C 8 d { 5 * ", +" t k H l y d.p.` ..=.m._.'.5.).~.5.5.}.5.}.5.}.:.:.}.6.5.6.g.}.6.6.6.|.6.6.6.|.6.7.|.|.|.|.1.|.}.6.6.1.0.8.6.1.i.f.7.1.1.1.8.i.f.i.8.9.i.8.8.f.9.f.9.j.k.n.k.n.n.n.k.o.q.r.E V ) m G s.M < : C G M M C 8 d ~ - * ", +" t %.D o J O p.*.=._.e.'.5.'.'.~.5.'.'.5.5.5.5.g.5.}.}.5.}.}.6.5.6.}.6.6.6.6.}.6.|.|.}.6.1.|.1.}.1.|.1.}.1.|.1.8.1.1.8.i.8.8.8.f.i.i.9.t.9.8.9.9.9.9.9.9.9.k.l.n.n.u.n.n.9.o.].4.V B . M M C < C p s.G G d : { - ; ", +" $ b %.x /.K S ....(._.'.'.5.~.5.'.g.5.}.5.5.}.5.5.5.}.5.|.5.6.6.5.}.}.6.6.6.6.6.6.6.6.|.|.6.}.1.}.1.1.1.}.8.0.1.6.o.0.1.i.8.0.t.8.8.i.8.i.9.9.9.9.i.9.9.9.9.j.9.l.n.u.u.u.n.v.q.w.4.B + > M M C F G C C C 8 : ] - * ", +" | D D J K P *.@.m._.'.'.5.5.5.:.5.:.5.5.~.~.5.5.5.g.5.}.5.6.6.5.}.}.}.}.g.6.6.|.|.|.|.}.|.[.0.|.0.[.|.1.0.1.6.7.8.1.1.f.1.0.8.8.0.i.8.f.8.9.0.8.8.9.9.8.f.9.f.9.j.l.n.n.u.x.u.9.y.r.4.V = C z.M C G G M C : < ~ 5 * ", +" t k x y K P ` =.m._.'.'.'.'.'.5.:.'.5.~.~.5.~.~.5.:.5.5.:.5.5.6.6.}.}.|.|.6.}.6.:.[.}.|.|.|.:.|.1.|.|.|.|.1.0.|.1.8.1.0.8.8.|.0.8.i.8.8.8.1.8.0.8.9.8.9.9.8.9.9.9.f.k.l.n.n.u.A.n.v.q.a.W B % M s.G M G G F 8 : ~ 5 $ ", +" = b D y J R *.=.=.>._.).'.'.'.:.~.'.~.).5.5.~.5.5.'.:.5.5.:.:.5.5.6.5.:.5.}.:.:.|.:.5.}.6.:.1.1.[.1.:.|.}.|.0.|.}.8.8.1.0.0.0.0.1.0.1.o.8.8.8.f.8.i.8.i.8.f.9.f.f.9.9.9.k.k.B.n.A.A.n.9.<.E V W g M G ^.M C C 8 : { - * ", +" ( k j /.N Z ..(.;.'.'.'.'.~.'.'.5.'.'.~.~.~.~.5.:.5.:.5.5.5.:.|.:.5.6.}.5.5.[.:.6.}.:.:.|.[.:.}.}.|.:.0.:.}.0.|.|.|.|.1.|.0.0.1.0.0.8.o.8.8.i.0.8.i.8.9.8.f.9.f.f.9.f.9.l.9.n.n.u.x.A.n.t.a.4.B = q s.M M G C F { ~ 5 * ", +" @ e o z K R ` #.;._.,.'.'.'.'.~.~.).~.:.5.5.'.'.'.5.~.5.:.5.:.5.5.:.}.5.:.[.|.:.5.[.:.|.[.[.:.:.:.}.}.|.[.|.|.|.|.|.|.0.|.0.0.1.0.|.1.0.8.8.8.8.8.8.0.i.8.8.8.8.9.9.9.8.9.9.v.k.l.l.u.A.A.n.y.r.V ) u C p M p C 8 : % - * ", +" / k j J P Z @.(.,.,.).,.'.'.5._.'.'.'.).).~.~.~.).).~.~.'.:.:.5.5.~.:.5.5.5.5.:.5.:.:.}.:.[.:.:.:.:.[.:.|.y.:.[.|.|.[.1.[.1.0.0.y.1.0.1.0.8.0.0.0.1.8.i.9.i.8.9.8.8.9.9.8.9.9.v.k.n.u.A.A.u.9.w.$.B + 8 p M ^.C F { ~ - * ", +" & D j J C.S ` @.(.,._.,.'.).)._.5.'.'.'.~.'.).'.~.'.5.~.'.5.5.).~.5.~.:.5.:.:.:.:.:.:.:.[.[.:.[.:.:.:.[.|.:.:.|.:.y.[.}.y.1.[.:.0.0.|.|.0.0.0.0.8.1.8.0.o.0.8.8.8.9.8.f.8.9.9.t.9.l.l.n.u.A.A.n.o.].V t . ^.M ^.G F { ~ $ D. ", +" | o w O P ` @.#.;.'.'.,.'.'.'.'.).).~._.~.~.~.).:.~.~.~.).~.:.!.!.5.:.~.~.~.~.:.:.:.~.:.:.:.:.<.[.:.:.[.:.|.:.[.:.|.|.}.:.:.0.|.[.|.|.|.|.0.0.0.0.1.|.8.0.0.o.o.i.i.8.8.f.8.8.9.8.8.9.n.B.A.A.A.l.<.4.V ) < p G C F < ~ * * ", +" , o y w L S .=.>.;.;.'._.'.'.'.)._.!.~.).'.'.!.'.'.'.~.'.~.).).).:.5.~.~.:.~.!.!.<.~.~.[.[.:.<.:.:.}.:.:.:.|.|.:.|.[.[.y.|.[.:.|.:.|.y.0.0.0.0.0.8.0.0.0.0.0.8.8.i.o.o.8.9.8.9.9.8.9.l.9.l.E.A.u.u.y.a.B t m C p C 8 { ~ - $ ", +" . b D v d.P Z @.#.;.,.{.).'.,.).'.).).'.'.).'.'.'.'.).'.~.~.'.~.!.).!.~.~.).~.~.~.:.!.!.!.:.!.:.:.!.<.:.:.[.:.[.[.:.}.}.}.[.1.[.[.0.|.|.}.}.|.0.1.|.0.0.8.8.|.0.o.o.|.8.o.o.t.o.o.t.8.t.8.l.k.n.A.A.u.9.<.4.9 B { G G 8 { % - - ", +" ^ o o I O R b.+.;.;.{.,.;.,.'.'.)._.'.,.,.'.).).{.'.~.).'.'.).).).'.~.).!.~.!.<.!.!.~.).~.<.:.).:.[.:.<.<.:.:.:.:.[.[.0.|.:.:.1.}.1.|.|.|.0.|.|.0.|.0.1.0.0.0.o.|.o.y.8.o.o.o.o.t.t.t.t.y.9.l.F.u.A.A.n.8.].L t = F C 8 { ~ - $ ", +" ] | D w J P U @.#.;.;.,.,.,.{.{.,.'.'.'.'.,._.).'.'.'.'.).).{.).).<.'.!.!.!.~.!.!.!.!.~.!.!.!.<.!.!.!.:.!.<.!.:.:.[.[.[.[.|.[.[.[.}.[.:.[.[.:.|.|.:.}.|.1.|.1.|.0.y.y.y.y.y.<.q.y.q.y.o.9.9.t.t.n.n.x.A.E.l.<.W t t : C F { % - * ", +" @ k o J O &.` +.(.;.{.{.,._._.3.,.,.'.,.,.).)._.).{.{.).).).'.).'.'.!.'.).!.).~.~.).!.<.~.).).).:.!.~.!.!.~.!.!.!.:.:.:.:.:.:.:.5.[.}.:.}.:.:.}.:.|.y.|.|.1.1.|.[.y.<.w.a. .V t t V 4.w.y.y.o.t.l.l.u.A.A.n.o.a.V 9 $ q < : } ; * ", +" | o y A P U ..#.#.;.;.,.{.).).,.,.,.,.'.{.,.).{.'.,.,.{.,.).'.).).'.{.{.{.3.{.{.,.{.].].].-.a.-.-.$.+.-.$.-.$.-.a.-.-.].].].{.w.{.{.!.2.!.:.!.:.:.:.:.:.|.1.0.y.q.w.].$.Y C.G.l l l l j V q.y.8.t.l.u.A.A.u.l.w.V t 9 g 8 : ~ * * ", +" # o o I N P ` ..#.,.{.,.{.,.3.,.,.,.,.,.,.,.,.{.).,.,.{.,.,.,.3.,.].-.a.+.b.b.4.4.Y T R V L L O O L d.K K K J O d.K A A O A O A O O R L Y V 4.+.$.].3.2.2.<.[.1.q.q.2.a. .N l | 9 ) r 9 e l t w.y.t.l.n.u.A.A.n.[.$.t A $ < { % - * ", +" n ( o w /.N T .+.#.;.,.;.).{.,.{.,.,.,.{.,.,.'.,.,.3.-.-.-.+. .Y S T N A K K d./.I I J /./././.J /././.j /.J J A J H././.| /./.y j y z y z y z z z z J A L V +.y.y.2.w.b.J l ) } { > < < { 9 G.O I.o.9.l.u.A.A.A.t.r.B t , : : % - * ", +" b D w J P S .#.-.-.;.;.,.;.{.{.'.,.,.,.'.,.3.].$.b.Y R P N N K K J J K K J N J K K A t A O A O K K K N L O O R O L A N O A N A K J A N A J J z j o y x x y O {.{.a.$.C.l t 3 J.K.F.L.M.8 8 ) l 4.y.o.v.n.A.A.A.n.<.4.9 / . : % $ * ", +" + o y J O P Z @.#.3.-.,.3.,.;.,.,._.{.,.2.3.-.b. .R R J K K L N N O N L C.C.N O R L P R O R R R P R O O O R P O R O P V O R V P O O R L O O K A O K J /.z j y O ].a.+.L G./ ; J.L.M.M.q A.K.8 < / /.q.o.l.l.E.A.A.B.y.r.V 9 W { } * * ", +" ^ o b N O S .+.-.;.3.,.,.,.{.,.,.'._.].a.b. .T T R R R O P P R R R R P R R Y T R T R R T T T T &.T T .T T T Z T .T Z T S Y Y V Y R R R R V T R R P O N K d.V ].a.b.d.l 9 . M.h > L.g 8 F.q 8 r l r.y.9.l.F.E.A.u.9.2.B A , { ~ $ ; ", +" b o I K C.S .#.(.;.3.,.3.,.,.,.,.{.,.].$.b. .Z ` S T T R T R R T R Z S T T Y T Y Y Y Y Y 4. . . . . . . .b. .b.` .b. . .Z . . . .4. . .4. .Z *.T Z V R R R T {.{.b.J l ) u M.{ N.L.8 > L.K.8 - l 4.y.y.l.n.A.A.A.l.q.4.9 9 m % * * ", +" s o j /.N P T ..+.#.-.;.3.3.,.,.,.2.2.a.+.-.+.+.b. . . .T .Y Y . . . .+.Y 4. .b. .b.b.b.b.$.$.$.E $.a.$.$.$.$.$.a.$.$.a.$.a.$.a.a.a.$.r.a.a.$.$.$. .b. .b.V Y V ].2.a.K l ) . O.~ N.L.g > ^.K.8 % l 4.y.y.o.l.x.A.A.x.o.$.L A ) ~ ; * ", +" ( o w /.O &. .+.].-.-.;.3.;.;.,.{.{.3.w.w.a.r.-.$.+.b.+. .+.@.b.b.b.$.+.$.+.$.+.a.$.$.$.].a.a.a.].a.].].].].].].2.{.2.].2.2.2.2.2.2.{.{.].].{.].{.{.].a.].a.+.$.$.r.q.2.R l 9 E M.N.] P.< > L.q g = l b.y.y.t.l.n.u.x.A.l.].W t t % * * ", +" b x J K P U ` +.+.;.3.3.3.3.3.2.2.q.<.<.{.w.].a.].$.$.a.a.a.$.-.].a.a.{.{.].].2.{.2.{.2.{.2.2.{.!.2.2.2.<.!.<.).!.<.!.<.q.!.q.<.<.<.q.[.<.!.[.<.[.q.<.<.2.2.2.2.].{.<.<.b.l / + I.O.N.M.J.K.F.8 8 9 G.$.y.y.o.v.n.u.x.A.u.q.W O / = - $ ", +" @ e y /.N P Z @.-.-.#.-.;.3.2.2.q.q.q.2.2.2.].3.].].{.].3.3.3.].w.2.2.2.].<.{.2.2.2.2.2.!.!.:.!.<.<.<.2.q.:.:.<.<.[.[.[.<.y.<.|.:.0.1.|.1.0.1.|.y.1.y.[.y.:.[.q.q.q.2.<.q.].z l 9 = I.M.P.K.Q.: { % e N w.0.o.o.9.l.n.A.x.n.t.4.V A , - - ", +" ' D w J C.T .+.+.-.-.;.3.,.!.y.o.y.<.q.!.2.2.w.2.{.{.{.{.{.{.,.).,.).2.!.).!.~.).).:.:.!.:.<.:.:.<.<.<.<.<.[.[.y.:.0.:.<.|.y.|.0.1.1.1.1.1.h.h.1.8.1.8.8.1.8.8.8.8.|.[.[.:.` l j 9 0 } % ~ ~ { } 9 l V <.y.o.o.8.v.n.x.x.u.l.].V / t $ $ ", +" | D z K C.S ..#.-.-.].-.3.!.o.t.t.o.[.q.2.2.!.{.2.2.2.{.{.!.).).!.!.~.'.!.!.{.<.!.).!.!.:.:.<.<.<.[.:.2.[.[.|.[.[.:.0.|.q.<.<.:.1.1.6.1.1.1.1.h.1.o.8.8.f.8.9.8.8.9.o.o.y.|.{.C.l y 9 B = $ ; + | l G.t {.y.0.t.8.9.n.x.x.x.l.2.4.9 9 = * ", +" = j j J A P U .#.$.-.-.,.{.y.t.v.0.[.q.<.<.<.2.!.2.).!.!.!.).!.).).!.).!.!.!.].b.$.2.!.:.<.<.<.<.[.2.V O a.<.:.[.:.y.[.[.o.V d. .<.|.1.1.1.1.1.8.{.Y b.q.8.8.f.9.8.8.o.8.0.y.'.3.T o l e | / b l l l l j V 2.:.0.o.9.j.n.x.A.n.o.$.t t i $ ", +" ^ o o /.K R Z ..#.#.].-.!.t.v.t.t.o.[.q.q.<.<.!.).2.'.).{.3.,.2.'.).!.).!.).o.O H y $.!.!.<.<.[.!.R.V l l N 2.[.[.[.[.[.[.{.l l z -.|.|.1.1.1.8.t.N l x +.1.o.8.f.8.o.o.o.<.2.q.[.{.#.T N d.d.Q O H.j l l j a.q.0.o.9.l.n.A.x.u.t.a., A , $ ", +" 6 %.w J N &.Z +.#.].(.{.[.t.S.v.i.i.[.[.<.!.).).2.{.'.q.4.d.Y ].{.).).2.<.).q.H X H Z 2.<.!.:.<.:.o.C.l l N 2.<.:.[.y.q.0.3.l l G.>.o.|.1.8.o.8.l.G.l l ..1.1.8.1.9.o.9.~.J z 4.y.0.q.<.~.~.>.b.S N H.l G.l O w.[.y.8.9.n.u.x.A.l.{.V ( 1 $ ", +" | o /.K O T .+.#.].;.~.l.S.v.v.o.i.[.<.!.~.{.'.'.{.).<.x %.G.+.2.,.).!.!.).t.d.H y $.<.<.2.<.<.[.[.<.C.d.#.q.<.<.:.|.y.[.9.Y C...<.|.|.|.|.8.8.l...G.d.{.o.8.8.1.8.1.l.U l l O |.o.y.y.y.y.q.].$.V O j G.l j 4.<.o.1.i.l.n.x.u.n.<.W t t = ", +" + o o I K O S .@.+.-.,.i.F.l.v.t.0.0.<.~.).{.'.{.,.{.:.,.D k x ..{.!.).).{.<.|.[.=.-.'.).!.<.2.!.<.).|.q.:.<.:.<.<.[.[.y.<.}.1.|.o.o.[.|.|.[.1.1.h.f.6.|.y.8.o.8.8.8.f.n.+.x l V o.8.8.9.9.t.o.|.{.+.V N G.l G.N ].y.i.i.9.n.x.A.u.y.$., t = ", +" ^ y y J K Q U ..=.#.].<.l.F.l.j.i.[.[.[.).'.;.,.3.,.,.'.i.&.G.P ;.,.,.2.).).!.!.!.~.!.).{.<.:.{.<.~.<.:.<.<.<.<.:.<.[.:.[.[.y.|.|.|.1.|.[.|.|.|.1.1.1.1.1.8.8.1.9.1.8.f.j.l.m.=.:.i.9.o.9.9.t.9.9.q.]. .V d.j j G.Y q.8.i.9.n.u.u.u.t.$.B t = ", +" / l w J O R Z @.#.-.,.t.S.S.v.v.0.[.:.!.{.;._.,.,.;.).{.!.~.-.].{.2.{.).2.<.{.).!.).).2.<.2.!.<.<.).).:.~.:.:.:.:.~.[.<.[.[.:.[.[.[.|.[.|.o.:.o.8.1.1.1.1.1.1.0.1.8.8.1.f.h.f.f.8.y.9.8.o.8.t.8.8.y.:.>.Y R J j j L w.y.8.8.l.u.u.u.v.].V t r ", +" g | o /.J N R ` ..#.;.[.l.B.l.9.i.|.!.!.,.,.,._._.;.,.{.,.,.{.).,.,.{.{.{.2.2.2.!.2.!.{.!.).!.!.,.~.<.<.~.<.~.q.<.~.<.:.<.~.[.:.o.:.:.:.|.:.|.|.:.1.1.|.1.1.0.1.1.1.1.1.1.8.f.8.o.8.o.t.8.8.8.t.9.9.9.o.q.$.T C.G.y j b.:.8.9.k.n.u.u.l.2.4., r ", +" = b j z K N &.Z @.#.3.8.B.B.l.l.1.[.~.'.,.,.;.{.{.;.3.,.,.{.{.,.).{.,.{.,.).2.2.,.).<.{.<.!.2.!.<.{.).!.~.{.<.<.~.<.~.q.:.<.:.~.[.[.[.y.[.:.:.:.1.0.6.1.o.|.1.1.1.1.1.1.0.1.8.8.9.t.8.8.t.9.9.8.8.9.8.f.8.{.+.R J y z V q.|.1.l.n.u.x.n.y.4.L B T. ", +" @ o j /.K N S ` @.#.,.l.B.B.v.j.|.[.!._._.;.,.,.{.,.3.3.,.,.{.,.{.{.,.{.{.{.{.{.2.{.{.{.2.{.!.{.~.!.).!.<.{.~.<.~.<.:.<.<.:.[.<.:.:.[.q.:.|.1.:.|.|.6.0.|.1.:.0.0.0.1.1.8.8.o.8.o.o.1.o.8.0.o.f.9.8.9.1.8.y.-. .A j J d.].y.8.v.l.u.x.n.R.$., B ", +" / k w J d.Q S ..#.;.:.S.S.B.j.8.:.).;.;.3.;.;.3.;.3.;.].{.{.{.,.,.].{.{.{.{.{.{.2.).{.,.2.~.2.!.!.2.).2.~.<.~.~.<.~.5.~.<.<.~.<.[.:.}.|.y.}.|.|.:.0.:.|.}.1.}.1.1.1.0.1.8.f.1.8.0.0.8.8.8.8.8.f.9.1.9.8.f.0.!.@.&.J j A $.y.0.9.n.B.x.u.i.a.L t h ", +" / D w J K P . .#.;.1.F.B.S.9.0.).).(.3.#.3.(.,.;.3.;.3.3.{.].;.{.{.{.].{.,.{.).{.).,.).2.).{.!.).!.).2.{.<.~.~.~.~.~.~.~.:.<.:.:.:.}.}.:.:.1.:.:.|.|.|.}.|.|.}.|.}.1.1.1.1.1.1.o.o.8.1.h.8.9.8.f.8.9.1.f.1.q.].` N j J Y [.y.8.l.n.u.u.9.].V t $ ", +" | o z J O P ` ..+.,.v.B.B.k.9.|.).,.3.;.3.;.;.3.3.,.3.-.3.,.3.].{.-.3.{.2.{.,.2.2.2.{.{.).{.).).2.!.<.'.<.{.~.<.<.~.~.~.2.~.<.<.:.:.:.:.[.:.:.|.:.|.g.0.}.1.|.|.1.1.6.1.1.h.1.0.8.0.0.8.o.o.8.o.1.9.1.8.1.1.0.{.+.O J j O ,.|.i.k.B.x.A.l.2.4., r ", +" b o /.J N S ` +.#.).S.B.B.v.1.:.'.3.(.>.;.3.].-.3.{.,.-.3.;.;.3.{.3.3.,.{.{.].,.2.{.{.{.,.{.{.{.2.{.<.{.<.).2.{.<.'.<.<.<.<.~.<.:.<.<.<.<.:.<.~.:.|.6.|.:.|.:.|.:.|.1.0.1.1.1.1.1.8.8.8.8.8.8.8.9.8.1.f.8.8.0.q.+.T d.z N a.|.0.k.n.u.x.n.q.4.( s ", +" = e y J A N &.Y @.>.|.B.B.l.j.[.!.{.;.-.;.-.].;.;.,.-.3.3.;.;.3.-.,.;.,.].2.{.,.3.{.,.{.,.).{.{.{.2.).{.).).{.~.~.~.).'.'.{.2.~.'.{.~.~.~.~.:.}.:.:.:.|.:.:.|.:.|.:.|.|.1.1.1.1.1.1.8.8.1.0.o.1.o.9.1.9.8.1.1.8.[.,. .O J H.+.<.y.9.B.u.x.n.y.4., i ", +" , j j /.N O S .b._.v.B.B.v.i.!.{.;.;.3.-.(.3.,.].,.3.3.-.-.;.,.-.].-.;.;.].].;.{.{.{.2.].3.3.;.,.-.-.+.b. .Y Y R O R O O O t O R O R Y ..b.+.-.].,.~.~.~.:.:.|.:.:.|.|.6.0.:.1.1.1.1.1.8.o.8.8.o.1.f.1.9.8.8.o.0.<.$.O J J R <.y.8.l.u.u.n.o.$.V r ", +" & e w J K O &. .+._.l.B.B.j.0.).;.-.(.(.-.3.(.-.>.-.,.,.;.,.,.3.3.;.,.].].3.;.3.-.-.$.@. .R N K z y l l l l l l l l l e e e e / b 9 9 9 / 9 9 b e j j K O T b.(.,.!.~.:.:.1.:.1.1.h.1.8.1.8.1.1.f.1.0.1.1.8.1.f.0.:.#.V J j O {.|.9.n.n.u.B.9.$.V E g ", +" ^ k w /.K P *.@.+.'.B.B.n.9.[.'._.#.(.(.(.3.;.-.;.;.;.-.3.-.,.;.-.].-.(.-.+. .T O J j l l l l l l l l l l l l l l l l l l l l l l l l l j b / 9 ) B + # ) ) 9 | A d.O Y +.w.{.<.:.:.|.1.h.1.1.0.1.1.8.9.o.8.o.1.0.0.{.+.N J d.-.y.1.v.u.x.u.j.a.R r.J. ", +" ( o w J C.P Z @.;.0.B.B.v.0.).,.(.-.-.>.3.#.-.(.;.-.-.(.3.(.].-.-...T N z l l l l l X X X X X X X X X X l l l l l l l l l l l l l l l l l l l l l l l l l l | 9 ) c ! r 9 A K t .$.{.:.:.0.1.1.1.1.o.1.0.1.o.8.0.|.).+.P /.J .[.8.j.n.u.u.v.2.V 4.w. ", +" v o z J C.P .@.(.9.B.S.j.[.,.;.(.-.-.-.-.(.-.-.(.-.3.#.-.+.Z L w x l l l X l X X X X X X X X X X X X X X X X X X X l X l X l X l l l l l l l l l l l l l l l l l l l b 9 r $ = ) 9 K t .].g.1.1.1.1.0.8.o.8.0.8.o.[.-.T N J R 2.0.v.B.u.u.n.w.W 4.w. ", +" | w /.J K &.Z @.;.S.B.l.f.[.,.;.#.#.#.;.;.-.(.-.3.-.+.T K x l X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l l l l l l G.9 ) = r B 9 O b.{.1.1.1.0.1.8.[.8.8.[.{. .O J N {.|.9.n.E.x.n.q.Y r 2. ", +" # e j /.K N S Z @.!.F.B.v.|.!.,.;.#.#.#.#.-.(.>.-.b.N o X %.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l X l l l l l l l l l l l l l l l b ) $ % + A 4.'.|.1.1.8.t.8.1.y.<...R J K $.[.f.k.u.x.n.[.4.V 2. ", +" @ e y /.K N S ..@.|.B.B.v.[.{.-.(.#.;.-.(.>.].$.R z X %.X X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l l l | m { r A b.<.[.o.8.o.1.8.<.-.R K /. .[.9.n.B.u.n.o.b.B 2. ", +" & e y /.K C.T .#.i.S.S.i.!.;.-.(.#.-.-.#.3.4.J H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l l l | $ { B L ,.|.|.8.|.i.0.,.Z N z R !.9.k.u.A.B.i.$.t a. ", +" ^ x I J K O U .;.v.E.k.0.!.;.#.(.#.#.-.3.Y o H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l l l l 9 ~ $ t a.:.1.0.0.1.~. .R A O ,.0.v.B.x.u.v.$.V V J. ", +" ^ D w J K P Z .,.k.B.v.[.{.-.#.#.-.#.].V %.%.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l l l = : K +.:.1.0.0.y.#.T J N ].8.9.n.x.u.v.r.V t . ", +" / D w /.K O Z @.5.S.S.t.[.,.#.-.-.-.w.O %.X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l l l _ 8 t ..:.[.1.1.-.Z d.d.b.0.9.n.u.u.j.].B , m ", +" | D v J K P Z @.0.E.S.i.!.;.@.+.-.2.K X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l l l ) F t +.:.1.8.2. .O /.T [.9.n.u.B.v.{.B t = ", +" b o z /.K P .#.i.B.k.0.).(.#.-.].O %.X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l l l x 9 8 A -.}.0.:.+.O K S <.9.l.u.u.k.2.V t r ", +" $ b o z d.K P Z =.v.B.v.|.{.-.(.{.Y %.%.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l l l l l , ~ N ;.0.[.#.P N O {.f.k.u.x.n.<.4.t + ", +" # e o I J O P ..>.S.B.9.~.-.#.,.a.o X X X X X X X X X X X X X X X X X X X X X X X X X l k k l X H H l k k e b | b b e e e e o k k k k k k k k o l l k b b e k X X X X X X X X X X X X X X X X X X X X X X X l l l l e $ = T !.|.{.T K N ,.8.k.u.u.B.q.Y t W ", +" B k o J K C.R ._.B.n.i.).-.-.2.J X X X X X X X X X X X X X X X X X X X X X X X X %./ = ; # & b b 1 # i & # $ % { % . ! 7 = $ 1 / 1 D.. + _ $ # b e / * ~ % & o X X X X X X X X X X X X X X X X X X X X X X X X X X l o > 7 $.0.:. .N N -.8.k.u.u.B.y.4., W ", +" i o o J d.P S .5.F.S.o.3.#.!.Y %.X X X X X X X X X X X X X X X X X X X X X X X X e # U.V.W.s.X.' 8 V.Y.p W.Z.`. +.+`.++< @+Z.] _ f U.U.c.c..+#+i ' $ U..+`.: 9 e X X X X X X X X X X X X X X X X X X X X X X X X l l l / ] t ~.:.+.Q K @.0.j.u.u.u.0.4.t @ ", +" & o y A K P U .|.E.l.[.-.;.{.o %.X X X X X X X X X X X X X X X X X X X X X X X X b } +`.$+`.q + f +%+@+ +%+z.s.s.&+*+Y.W.*+< p +.+^.+ f +=++ + Y.*+-+*+;+! | %.H X X X X X X X X X l l l l X X X X X X X X X X H l o # + @.<.-.&.N .0.9.u.u.u.o.a., W ^. ", +" ^ k j J d.C.S ..i.B.k.<.-.~.L H H X X X X X X X X X X X X X X X X X X X X X X X X e m .+@+>+$+W.: ,+ +%+@+*+~ X.7 _ p *+Y.W. +'+ +`.c._ & q *+)+c ] `.`.: ++ +G 1 o X X X X X X X X %.%.X X X X l l l l l X X X X X l l l b ] L '.;.Z A T 5.9.n.u.u.i.$.V @ ", +" / D w J K O Z @.j.B.9.<._.2.o X H X X X X X X X X X X X X X X X X X X X X X X X X e - +!+- ;+*+++~+ +{+@+*+~ & 1 X.]+*+Y.W. +Y. +Z.G X.& c.*+@+$ #+*+++{+;+*+++c e l X X X X X X X X X X X X X X X X X %.l X X X X X X X l = + $.'.` K O '.f.n.u.u.i.r.V @ ", +" ( k w A A R U #.v.S.i.!.~.4.X X X X X X X X X X X X X X X X X X X X X X X X X X X k ; .+;+i % V. +W. +{+=+ +Y.f G p %+*+z.++ +< C .+.+Y.# F *+@+f +*+ + + +*+*+z.' X X X X X X X X X X X X X X X X X X X X l l X X X X X l | . R ,. .O O ;.j.n.u.u.j.a., W u ", +" 6 %.y K J P *.(.k.n.9.{.[.y X X X X X X X X X X X X X X X X X X X X X X X X X X X l # +!+' ' < `. +*+Y.s.`.*+^+*+^+*+V.8 ++ +{ & < V. +%+C +=+#+*+/+; c D.f .+@+B %.X X X X X X X %.%.%.%.X X X X X X X X X X X X X X X X l $ L >.@.P N (.f.k.u.u.j.a.V s . ", +" | %.I /.K P *.3.B.k.1.:.3.%.X X X X X X X X X X X X X X X X X X X X X X X X X X X H / * W e o ' 0 5 - X.1 # - [ (+4 - _ 1 + c / o v + # + i c + ! c 1 e e e ' i X.b X X X X X X X X X X X X %.%.%.%.%.X X X X l l X X X X l x 9 , @.+.P K +.f.k.x.u.v.w.V , m ", +" b H G.J K P ` ).B.v.[.8.T X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l l X X H l k k l l k o e b e k l l %.k l X X l l l D l D x x H X X H X H X X X X X X X X X X X X X X X X X X %.%.X X X X X X X X X H l | # T #.R d. .1._+u.u.j.].V , = ", +" . o D y J K P U 5.B.j.[.t./.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.X X X X l l X X X l # L #.S K Z 1._+u.u.l.2.W B r ", +" ^ %.H H.I K R .0.B.j.5.q.x X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X l X X X H i L #. .K R :._+u.u.l.2.V s r ", +" m o %.D z /.K P ` o.B.i.:.!.H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.%.X X X X X X X X X X X X X l X / t @...O Q ~._+u.u.k.!.W , r ", +" | X X %.z /.K &.` i.n.1.:.-.H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.X X X X %.l X X X l l X X l | , .@.R C._._+n.A.n.!.4., W ", +" @ o X X H I J K R =.v.S.8.0.@.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.%.X X X X %.X X X X H X b s &.@.P N ;.k.n.u.n.<.W , W ", +" / H X X H z /.K P =.v.v.|.t.T X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.X %.X X X %.X H k + P @.&.O (.f.n.u.n.[.4., @ ", +" e X X X D z /.K S (.n.v.}.9.K %.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.%.%.%.X X X X X %.X X X X X X X %.X X H H _ O +.U O .._+_+u.n.y.4., B ", +" o X X X D y /.K P ;.n.v.:.i.o X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X X X X X X X X X X %.%.X X X X %.%.X X X X X X X X X X H ) A +.U O ` f.n.u.n.0.4.V s ", +" e H X X H /./.C.S ,.n.i.~.t.D H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.%.X X X X X X X X X X X X X X 9 t ..` O ` f.n.u.n.y.4.V @ ", +" e X X X D /./.C.S 5.B.i.:.!.%.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.k k k e e | | / ' / ^ ' 1 1 & 7 7 & & & & & & ' ' ' / / | b b e e o o %.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X / , Z ` O U f.k.u.u.0.4., W ", +" v %.X %.D I J N U |.n.i.}.].X X X X X X X X X X X X X X X X X X X X X X X X X %.k b | / ' & 7 _ ! ! ! c D.D.D.D.2 ; 2 D.0 0 2 D.* ; 2 2 2 2 - - - ; 0 2 0 0 0 2 0 D.0 c a ! _ 7 & ' | b o k k %.X %.X X X %.%.%.%.X X %.X X X X X X H X o , T ..O &.h._+n.u.t.$., W ", +" & l X X D z J K &.8.n.0.6.b.X X X X X X X X X X X X X X X H X H k e b / ' 7 X._ ! a D.0 0 D.D.2 0 0 2 0 2 ; 2 2 - 2 - - - 2 - 2 - - 2 - - 2 - - - - - - - - - 3 3 - - - - - 3 - - - 2 0 0 D.a _ 7 ' / e k %.X X X X X %.X X X X X X X H l , R @.P P 6._+u.n.o.$.9 B ", +" N.j X X x I J K *.8.l.[.8.T X H X X X X X X X X H %.e b / 1 7 _ ! a D.0 ; 0 0 2 0 2 2 2 2 3 2 2 2 2 2 2 2 - - 2 2 - 2 2 2 - 2 ; - ; - - - - - 3 - 2 - 3 - 3 - 2 - 3 3 - - 3 3 4 3 3 } 3 3 3 - 3 - 3 - 0 D.a _ & ' | e l X X X X X X X l l 9 R @.p.O }._+u.u.i.4.B s ", +" ^ %.%.o /.J C.Z 9.n.~.i.J X H X X X X X X b ' 7 _ ! a D.D.0 0 ; 0 2 0 2 2 0 2 2 0 2 2 2 2 2 2 2 0 ; * 2 2 ; ; ; ; 2 2 ; - - 0 2 0 2 2 - 2 0 - 5 - 2 3 2 - - - 2 - - 3 - 5 5 3 5 - 3 3 - 3 5 3 3 3 3 - 3 4 3 3 - - 0 + / l X X X X X X H 9 O @.*.N ~._+n.x.9.b.B s ", +" = k X o J d.K ` 9.n.5.8.I X X X X X H | + ! D.D.D.0 2 2 2 0 2 :+2 0 2 2 2 2 2 0 2 D.2 D.2 2 2 2 0 2 2 0 ; ; 2 ; 2 ; ; 2 0 0 - ; 2 0 0 0 ; 2 2 2 2 2 ; 2 - ; 2 ; 2 - - ; 2 - 2 - - 3 2 3 3 3 3 3 4 3 4 % 5 4 % 4 4 4 - ; _ k X X X X X l 9 A =.*.C.'.k.n.u.9.a.V @ ", +" . o H D /.K N =.v.n.5.1.w X X X X %.+ <+5 2 2 0 2 0 0 0 2 D.0 0 0 D.D.0 0 2 2 D.0 0 0 D.D.0 D.0 0 0 0 0 0 0 2 0 0 0 0 2 ; D.2 ; ; 0 0 2 0 0 0 0 ; 0 0 0 0 2 2 0 2 - 2 2 2 - - - 2 - - - - 2 - - 3 5 - 3 3 4 3 3 3 % 3 % - _ e X X l X X | 6 ..` C.e.k.n.u.9.$.B s ", +" . b X o z K K =.k.j.5.[.x X X X H + c.4 3 - 2 2 0 2 0 2 D.2 2 0 0 0 D.2 2 0 0 D.D.0 0 0 a 2 0 D.c D.0 D.D.0 0 0 0 0 0 D.D.0 D.D.0 0 0 D.0 0 ; D.0 0 0 D.0 0 0 0 0 0 2 ; ; 2 0 - - 2 - - - - - 3 2 3 3 - } 5 3 3 % 4 5 - 3 - + l X X X l b / .*.O m.k.n.u.v.a.B i ", +" $ e X o z K N =.k.9.:.).x X X X b F c.~ % 5 - 2 D.0 D.D.D.0 0 0 0 0 0 0 D.0 0 [+}+}+}+|+}+}+}+1+1+2+3+4+5+6+}+7+8+9+0+7+a+b+c+d+e+f+D.D.f+g+h+f+D.i+d+f+c+j+D.f+h+k+l+0 0 2 0 ; 0 2 - 2 2 - 2 - 2 2 - - - - 5 - - - - 2 2 2 - ' X X X H o 6 Z .Q =.j.n.u.k.$.L s ", +" * o %.w /.d.P (.B.f.6.].X X X X # s.~ % ~ 3 - - ; 2 0 D.; ; ; 0 D.D.0 m+i+n+o+p+q+q+q+2+r+s+4+t+u+v+w+x+y+z+A+B+C+D+E+F+x+x+G+H+H+I+H+J+K+L+K+M+N+J+O+J+M+x+P+Q+R+S+T+U+V+E+W+X+Y+Z+`+c 0 0 ; ; ; 0 2 2 - 2 2 2 2 2 0 0 2 2 4 ! l X X l l / T ..Q .._+n.u.l.a.V , ", +" $ o X j I K C.m.n.8.6.+.X X X X ] G 3 ~ ~ ~ 3 5 D.D.D.D.0 D.D.D.D.d+ @.@+@@@.@z+.@#@$@L+%@&@*@=@-@;@;@>@,@>@'@'@)@!@,@~@{@>@;@{@]@^@/@(@_@:@<@[@[@/@[@}@|@1@2@3@4@5@6@7@8@9@0@a@b@c@d@e@f@0 0 0 2 0 0 0 0 2 2 ; 0 0 a a 0 2 % * k l X H l | R b.Q .._+k.u.v.a.B , r ", +" c o %.o /./.O (.B.1.8. .H X X %.> < 3 ~ (+: <+4 * D.D.j+s+s+D.g@h@i@j@k@!@{@~@l@m@n@o@p@q@r@s@t@u@v@v@w@w@u@x@x@v@w@w@w@w@v@v@v@y@z@z@A@z@z@B@B@z@z@z@z@z@y@C@D@E@F@G@H@I@J@K@L@M@p@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@X+c ! _ ! ; 3 ~ b X X l l | P ..O ..f.n.u.l.a.V , r ", +" # o %.o J K P >.B.8.t.Y X X X l 8 { 4 : < 8 < ~ #.#+#@#@###$#%#&#*#=#-#;#>#,#'#B@)#)#!#~#{#]#^#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#(#_#:#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#_ ! ; 5 4 / l X H H e O .Q *.f.n.u.n.a.V , r ", +" c o H w /./.&._.n.|.1.N X X X e q ~ % k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#A#B#B#B#B#B#B#C#D#E#B#F#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#F#_#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#) _ c 3 ~ & H X l l e d.` P T h.n.u.n.a.L , W ", +" # o H w J d.R _.n.[.0.J X X H b q 4 ~ Y#Z#`# $.$+$@$@$#$$$%$&$*$=$-$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#(#B#;$>$,$'$)$!$~$_ ! - ~ _ X X X X e H.Z P S 7.k.u.l.].V , r ", +" # o X w z K &.).n.|.|.J X X X ( C 4 ~ {$]$^$/$($_$:$_#_#_#_#_#-$(#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#<$[$}$|$_ ! 2 [ + l X X l k z T S &.6.n.u.n.w.V 1 r ", +" _ D X w z d.&.).n.[.[.j X X X , f - 1$2$3$4$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#5$6$7$8$_ + 2 4 ! l X X X l j S *.P }.k.x.k.w.V , r ", +" t %.X y J d.&.5.n.5.:.x X X X @ c.- 9$0$a$b$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#c$d$e$f$) ! 0 4 ; k X X l e G.T U P g.k.u.n.2.V 1 W ", +" 6 X X y J K S 5.n.}.~.D X X %.= 8 % g$h$i$j$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#k$l$m$n$_ 0 3 - e X X X l j &.*.R g.k.x.n.w.V , W ", +" @ k X X y z d.&.}.k.|.,.D X X X $ (+4 o$p$q$r$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#s$t$u$v$_ ; 3 * o l X l l y P p.p.e.n.u.u.2.V t + ", +" b X X %.w /.K &.|.n.5.,.%.X X %.] : w$x$y$z$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#A$B$C$D$_ 0 5 5 b X X X l j P *.P g._+u.n.w.V , r ", +" $ o X X X w /./.S 6.k.6.#.H X X H : E$F$G$H$I$/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$K$L$M$n$N$- 3 b H X l l e R &.N '.k.u.u.2.W t r ", +" _ %.X X H y /./.&.1.j.8.-.X X X D < O$P$Q$R$S$/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$T$U$V$W$X$- 3 ' H X X X e C.*.O e._+u.n.2.V , r ", +" 1 %.X X X z /.K S f.k.1.+.%.X X e q Y$Z$`$ %.%/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$+%@%#%$%! ; 4 9 l X X l k d.U O e.j.u.u.q.V , # ", +" , %.X X %.w /.d.&.8.v.1.Y %.X X e f 1$%%&%*%=%/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$-%;%>%,%'%2 4 7 X X X X e d.*.O e._+u.n.2.W , r ", +" @ l H X X w /.K U 8.j.h.4.X X X b )%!%~%{%]%^%/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$/%(%_%,%:%; 3 7 l X X l e K &.P m.j.u.u.<.V , r ", +" = l X X H z /.K *.f.j.1.R X X H / <%[%}%|%1%/#/#J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$J$/%2%3%$%4%; 4 _ H X X X l N S P m._+n.n.<.W , r ", +" 8 e H X X I /.d.U i.j.9.V %.X X ^ 5%F$6%7%8%/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#9%0%a%b%! 0 % c l X X l e /.` O (._+B.n.<.V , r ", +" ^ %.X X z /.C.&.f.j.i.O X X H ^ c%d%e%f%g%/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#h%i%j%b%k%0 % c l X X X k j ` C.m.f.u.n.q.V , # ", +" . b %.H z /.C.U f.j.f.t %.X X 1 f l%m%n%o%/#/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$p%q%r%b%s%0 3 c k X X l l j Z C.m._+n.B.<.4., r ", +" 1 %.X z /.C.Z j.j.8.A X H X s c.} t%u%v%/#/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$w%x%y%z%A%0 % ; l X X X k j *.O =.k.n.u.<.V s r ", +" = o X w /.C.U f.j.i.K H X H + f % B%C%D%/#/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$E%F%G%H%$%a 3 c k X X l l j U Q =._+u.n.<.4., r ", +" j H z /.K U 8._+i.J X X H + q 5 t%I%i$/#/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$*$J%K%L%$%0 % - k X X X o j U p.=.j.n.u.<.W i r ", +" b H w z C.Z f.j.1.K X X X # f 5 M%N%O%P%/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$Q%R%S%T%U%! - ; k X X l e 6 U Q (._+u.n.<.4.B = ", +" e H z /.K &.f.j.1.J X H H = c.5 V%W%X%Y%/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$Z%`% &.&+&c % - e X l l b / U p.>.f.u.n.q.4.s r ", +" b H w /.C.&.8._+8.J H X X * F - @&#&$&%&/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#&&*&=&-&c 3 * k l X l b , &.p.m._+n.u.q.4.s r ", +" b H w /.d.U 1.j.|.I X X H $ 8 } ;&>&X%Y%/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#,&'&*&)&U%! - - k l X X j 9 &.p._.j.u.n.<.W B r ", +" e H z /.K *.1.k.1.I X X X m F % !&~&O%{&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$]&^&/&(&_&c - 3 e X X l j , &.Q e._+u.n.q.Y s r ", +" b H z d.d.&.7.k.8.A X X X $ < } :&<&[&}&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$|&1&2&3&4&0 2 - o l X X j , *.Q e._+u.n.q.4.s r ", +" e %.w /.d.p.6.k.1.v H X X $ F 5 :&5&6&7&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$8&9&0&.&|$c 2 3 e l X l b ) S Q '._+u.n.<.4.s r ", +" j H w J d.p.g.n.1.z X X H :+F % a&b&c&7&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$d&1#e&.&f&c - * k l l l j s p.Q e._+u.n.<.4.s r ", +" b %.y H.d.&.g.n.9.v X X X $ g&} :&h&c&i&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$d&j&k&l&m&! 3 2 e l l o j ) Q P e._+u.n.[.4., r ", +" v %.w /.d.Q e.k.7.z X X l $ c.} a&n&o&p&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$-$q&r&s&t&! - * e l l l b B p.Q e.k.u.u.q.4., = ", +" e %.w /.C.&.'.n.i.I X X X * g&% u&v&w&p&/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#F#x&y&z&,%a 2 3 e l l l j ) Q Q g._+u.n.[.4.B r ", +" j %.w H.d.p.e.n.j.z %.X X = 8 5 A&n&B&p&/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#C&D&E&F&c - ; e l l l b B P &.5.j.x.n.q.4.B r ", +" j H y /.C.Q e.n.9.J X X X $ f % { v&o&G&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$H&I&J&K&m&! 3 * k l l l | @ P U g.k.u.u.<.4., r ", +" v %.w z C.Q e.n.j.J H H X # 8 - A&L&M&N&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$O&P&J&Q&R&c 3 = e l X l | B Q U 7.k.u.n.y.4., r ", +" b %.w J d.Q m.n.j.K X X X # S&- ] T&U&N&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$V&W&X&l&Y&c 3 0 k l l l 6 , &.U g._+u.n.q.4.B r ", +" b X y J K P m.B.j.J X X H + q 5 { Z&U&N&/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$`& *.*+*@*c - ; k l X l / , p.*.h._+u.n.q.4.s r ", +" | %.w H.d.C.=.n.v.N X X X s F :+] #*M&$*/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$%*&*.***f&c } c k l H l A , p.*.h._+u.n.q.4.t = ", +" | %.o /.d.Q .._+k.N X X X @ q 5 =*-*;*>*/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$`&,*'*)*!*0 5 c k X X X t t p.*.h._+u.n.q.4., r ", +" b %.y /.d.p...n.n.N X X H 1 c.:+~*{*]*^*/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/*(*_*:*<*0 - c l X l X , L p...h.n.n.n.q.4.B = ", +" v k j /.H.C.*.f.B.R X X H ^ f $ [*}*|*1*/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$/#2*3*4*5*<*0 2 + l X k o ) t P =.h.k.u.n.q.r V r ", +" | %.o /.C.Q *.k.n.R %.X X ( C 5 6*7*8*9*0*J$J$J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$2*a*b*c*d*0 - _ l H k k s t P @.f.n.n.n.q.4.s # ", +" v %.w /.d.C.*.j.u.T X X X | f } e*f*g*h*i*J$/#J$/#J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$/#J$2*j*k*l*|$0 3 _ X H l X i A p.m.h.k.u.n.2.W B r ", +" b %.o H.d.C.p.h.u.Y %.X X j q } m*n*o*;*7&/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$/#J$p*q*r*s*j#; - ) H X X X + N p.e.h.n.u.n.q.4., r ", +" v %.o /.d.C.*.7.u.b.H X X e F } t*u*v*w*x*/#/#J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$/#J$y*W&z*W$+ 0 - 9 X X l H ) O P e.h.n.u.n.<.4.s r ", +" | %.j H./.d.p.g.n.+.H X X k < ~ A*B*C*D*x*/#/#J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$E*F*G*H*+ ; 3 9 X l H X + N p.g.h.n.u.B.q.4.B r ", +" v %.j /./.C.&.5.u.-.H X H %.> ~ I*J*K*L*M*/#/#J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#N*O*P*Q*R*; 2 ' X l H X # N p.g.h.n.u.n.q.W , r ", +" | %.o /./.K p.e.n.].H X X l A&{ S*T*U*V*p&/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#W*X*Y*Z*`*0 2 | X X l l + C.*.g._+n.u.B.<.4.B r ", +" v %.D z H.C.p.m.u.2.H X H H . : =.=+=@=#=/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#$=%=&=,%*=2 2 | X X H l B O *.g.h.n.u.l.<.4.B r ", +" | %.o z /.d.p.m.n.<.o X X X c (+==-=;=>=N&J$J$/#/#/#/#/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#/#/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#,='=)=!=~=0 0 e H X X l # Q *.g.h.n.u.n.2.4., r ", +" | %.o z /.K p.=._+o.o X X %.r < {=]=^=/=$*J$J$J$/#/#/#J$J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$/#/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#$=(=_=:=a 2 0 k H X X l r Q ..h._+_+u.n.q.4.s r ", +" | %.x /.H.d.Q ..k.i.w X X X , 8 <=[=}=|=1=J$J$J$/#/#/#J$J$J$/#/#J$J$J$/#/#J$/#J$J$/#/#J$J$/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$J$/#/#J$J$/#/#J$J$J$/#/#J$/#J$J$/#J$J$/#/#/#J$J$J$/#/#/#J$J$J$/#2=3=4=:=5=- c k l H X b W Q =.g._+n.u.S.q.4.s E ", +" / %.o z H.H.Q *.f.9.z X X H t q 6=7=8=9=1=J$J$J$J$/#J$J$J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#J$/#J$J$/#J$/#/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$0=a=b=c=d=- + l X X l | B Q =.h._+n.u.n.I.4.s = ", +" / %.x z /.d.C.U 1.S.J X X X | 8 :+e=f=g=h=J$J$/#J$/#J$/#J$J$/#J$J$J$J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#J$/#J$J$/#/#J$J$J$J$/#J$J$/#J$J$/#J$J$/#J$J$J$J$J$/#/#J$J$J$/#i=j=k=l=m=- _ l X H H 9 , &.m.h._+n.x.l.q.4.B = ", +" / k o z /.d.C.&.5.n.L X X X b 8 - n=o=p=q=J$J$/#J$J$J$/#J$J$/#J$J$/#/#/#/#J$J$/#J$J$/#J$J$/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#/#J$J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#/#/#/#/#/#/#J$J$r=s=t=u=v=- & l X X H 1 L &.e.g._+n.u.l.q.4.B = ", +" ' %.x z z /.Q p.e.B.L X X X D 8 } w=x=y=z=J$J$/#/#J$/#/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#/#J$J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$/#J$J$A=B=C=D=; - & X l H H , A p.e.h._+n.n.l.I.r B E ", +" ( %.y z H.d.C.p.m.n.Y X X X H > % E=F=G=H=J$J$/#/#J$/#/#J$J$/#/#J$J$J$/#/#J$J$/#J$J$/#/#J$J$/#J$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#J$J$/#/#/#J$J$/#/#J$J$/#J$J$J$J$/#J$J$/#J$J$/#/#J$J$J$/#/#/#J$J$J$/#I=J=K=L=* - ' X X X X , A *.e.h._+u.u.n.q.4.W = ", +" ' %.x y J /.Q p.=.n.+.%.X X X ] { M=N=O=P=Q=R=/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#S=T=U=V=W=[+; 5 / l X l H 9 C.*.e.h._+n.u.v.I.r W = ", +" / %.x y /.H.C.p.=.k.3.H X X X $ < X=Y=Z=`= -.-+-(#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#1=@-#-$-%-&-0 ; - b X X X H , C...g.h._+n.u.l.q.E B = ", +" ' k o z z /.d.p.*.9.<.x X X X t d 0 *-=---;->-,-'-,&)-!-~-{-]-/$M*c$^-b$7&x*x*M*M*M*x*c$R=r$/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#0*%&/-(-_-:-<-c ; 2 c l H X X l s O *.g.h._+n.u.9.q.4.W E ", +" ^ %.x z /./.C.p.*.7.t.x X X X o [ - - A&[-}-|-1-2-3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-R=/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#/#m-M*n-n-M*m-j$n-Q=o-p-q-z=r-s-t-u-u-v-w-e-x-y-z-A-A-B-C-D-E-F-G-H-I-J-K-L-M-- ; ; - + X X X X l W P =.g.g._+n.u.l.I.4.+ m ", +" ^ %.o y z H.d.Q ` g.l.J X X H %.} : 0 5 ] N-O-P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;,;,;';);!;~;b-b-b-{;];e-^;v-/;v-e-(;_;g-s-s-s-f-g-:;<;[;};|;1;2;3;4;5;6;7;8;8;9;0;a;b;c;d;e;f;g;h;i;i;j;k;l;m;n;~ } 3 - ; o X X X X o B p.=.g.f._+u.u.v.q.4.W = ", +" ^ %.o w z /.C.Q *.e.n.A X H X X 6 f ~ ; 5 o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>+>@>#>$>%>&>*>=>*>->;>>>,>W;'>)>!>~>{>]>]>^>/>(>_>:><>[>}>|>|>1>2>3>4>5>6>7>8>9>0>a>~ ~ } } * / X X X X H | , p.e.g.h._+n.u.v.I.E W ", +" ^ %.x z J /.d.Q p.m.u.Y %.H X X X # ]+[ ; $ - * * - } } - b>{=c>d>e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>D>E>F>G>H>I>J>K>L>M>E>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,[ @&@&@&=,-,-,;,>,~ ~ ~ ~ 4 3 } ' X X X X X X 9 O *.e.g.h.j.n.u.k.I.4.+ ", +" 1 %.D y /./.d.p.p.=.n.+.H X X X H l = G 8 * c c c D.D.c * ; ; :+* :+} } 5 b>,,b>',),!,~,{,],^,/,(,_,:,g>;,<,[,},@&@&|,1,2,3,2,m>4,5,6,7,=*=*8,9,0,a,{ ] [ { { { ~ A&~ { ~ ] ~ % ~ } % ~ % % % 5 3 4 } % % 3 5 5 % - _ e X H X X X X l i A *.e.h.h._+n.u.k.I.4.# ", +" ^ k D y z /.d.Q U .._+!.H X X l H X l , % : 5 ! + + + ! c # a c D.c D.D.D.; ; ; - ; ; - 2 2 - - 5 5 * } } - 5 } 3 } } } ~ % ~ % % } . % % ~ } % } % } ~ % } } % } } } - } 5 } } 5 % 5 5 3 - } - - 0 0 D.a ! ! X.1 e l X x X X X X X H + C.=.e.g.h.k.u.u.l.q.E W ", +" 1 o D w H./.d.C.p.*.6.9.D H X X X X X H X b | e %.%.e b | | ' ' 7 _ i + c D.# ! D.D.c c D.D.D.D.; ; D.; ; 2 2 * ; 2 0 0 2 ; * 2 - - * $ * - * 5 - - - - - - - * - 5 - - - * ; D.D.c ! + ! _ & 1 1 1 ' & ' | e l X X X X X X X X X X D W C.m.g.g.h._+n.u.l.I.E W ", +" & k %.y y H.d.C.U *.5.S.z X X X X X X X X %.X X X X X X X X H X %.l k e e b b | ^ ^ 1 7 X.X._ _ ! ! a c c c # c D.# D.c c c D.c c c D.c D.c D.c # c # + + ! _ ! + _ 7 7 & 7 & / | | b j j k k %.l %.X X X X %.%.X X X X X X X X X X b , Q =.g.7.h._+n.B.l.q.r r ", +" & o %.z z /.d.C.p.U m.u.R %.X X X X X X X X X X X X X X X X H X X X X X H X H H X X X H X X %.X X X l o o e e e b e j e b b b b b e e k e e e e e e k k k k k k X %.H %.X X X X X X X X X X X X X X X X X %.%.X X X X X X X X X X X t L U m.e.g.f._+n.u.v.I.$.+ ", +" , k %.y J /.d.C.Q p.=.k.-.%.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.%.X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X , O ..e.g.g.h.k.u.u.l.w.E W ", +" , D %.x z /.d.C.p.p.*.h.i.y H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X o t P m.'.e.g.h._+n.u.l.I.E W ", +" & o D G.y z d.Q Q p.*.e.B.V X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X l J S m.'.g.g.h._+n.u.9.I.4.W ", +" @ %.k y w z d.C.Q p.*...n.'.H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X %.X %.%.l l l X D C.*.e.'.g.g.h._+n.u.v.I.E W ", +" @ j %.G.z z d.C.p.p.p.*.}.v./.X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X e ' & + c * } % % { : : c j H .=.e._.g.g.h.n.n.u.l.I.4.# ", +" @ o %.x w z d.d.p.p.p.p.=.8.x X l | & i _ + + c D.! ! + @ ' k X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X %.| 7 c - % % % % % 4 ~ ~ ~ : F ] b H P >.'.e.5.g.f._+n.n.l.I.$.W ", +" s e x y y z d.C.C.p.p.*.*.|./.H j e 1 7 X.X._ + ! D.2 4 [ : (+~ # b %.X X X X X X X X X X X X X X X X X X X X X X X X X H X X X X H H H X X X X X X X X X X X X X X X X X X X X X X X X X l b X.! a a 0 a a 0 0 a c 2 2 5 ] 8 * l l .>.'._.g.6.h._+u.u.v.w.E r ", +" s e o y w w d.C.C.p.p.p.&.5.@.X o l e | / / ' 9 9 & 7 ) ! 0 2 { F 8 } ' %.X X X X X X X X X X X X X X X X X X X X X H H x L r.r.b,r.O z %.X X X X X X X X X X X X X X X X X X X X X X X e & 7 _ ) ) _ _ _ + + ! + ! c ; 2 { > | D d.(.e.e.'.'.g.h._+B.B.l.I.4.r ", +" @ e D y z z H.C.C.p.p.p.S *.0./.H X l k e b b | / / ' ' 9 & 7 _ D.4 8 q * b k X X X X X X X X X X X X X X X X X X %.z P b.b. .*.*...,.0.).R H X X X H X X X X X X X X X X X X X X X X j / & 7 & 7 & ) ) _ _ _ _ _ ! c 2 % { i l y *.e.'.'.e.'.g.f._+n.n.9.I.E r ", +" # b k y z H.d.C.C.p.p.p.p.p.e.#.x %.X l k e b e | / / ' ' ' 9 & X.+ ; { C } k X X X X X X X X X X X X X X X X X x L Z U P d.G.G.G.y y d.@.o.).J X X X X X X X X X X X X X H X e b X e ' 9 X.7 7 ) ) _ ) _ + _ ! + c 0 } { # l H O =._.'.'.'.'.}.7._+n.B.v.I.4.r ", +" r e D o z H./.C.C.&.&.p.p.*.*.:.T H X X k k e b | | / ' ' ' & 9 ' 7 + c { q ! X X X X X X X X X X X X X X X X x L ` S K D %.e b | v e o o /.;.[.R %.%.H X X X X X X X X X X X / k o | 9 7 ) _ _ _ ! a 0 0 a a _ ! c 2 ~ $ k H d.=.m.,.'.'.e.5.g.h.k.n.B.v.I.E r ", +" b D x y H.d.C.C.p.p.p.p.p.&...|.K H X %.l e b / / ' 9 & & 7 X.X.) ) _ 0 : : / X X X X X X X X X X X X X X o L ..R x l k / _ 2 ~ { > $ 6 l x S |.T %.X X X X X X X X X X X / | k e 9 4 c,d,d,e,f,f,f,g,g,g,h,2 0 ; 3 * b l z ` m.>.,.'.'.e.'.g.7.k.n.B.v.w.E r ", +" b %.y z z d.C.C.p.p.p.p.p.p.U =.}.w X X l l b 4 d i,i,i,c,j,c,c,d,k,i,_ 5 8 c e X X X X X X X X X X X X o K +.T D l e ' & _ + 0 - : F 8 i l x &.y.J X X X X X X X X X X %.# l e e 9 3 i,i,c,c,c,i,i,i,i,i,d 0 0 } * | X G.Z (.>.e.e._.>.,.'.g.h._+u.B.v.I.E r ", +" j H x w w /.C.Q p.p.p.&.p.p.p.p.'.>.G.%.l l e [ i,i,i,i,c,c,c,c,c,c,: 7 ! : : | X X X X X X X X H X X k J +.b.x X o | ' ' & 7 _ ) 0 % 8 8 @ D x @.,.H X X X X X X X X X e i D e b ' 7 7 7 ) ) _ ) _ _ a a a a 2 c | X z p.=.>.>.e._.'.e.>.'.5.7._+n.B.v.I.4.r ", +" b %.G.x z H.C.C.p.U p.p.*.p.p.p.*.'.(.o X l l k | / ' ' / 9 9 9 9 7 7 & X.3 8 & H X X X X X X X H H l j T ].H.l o b 6 / ' 9 7 9 ) _ c - : 8 1 H o ~.T X X X X X X X X X 1 | l k | ' 9 9 9 9 7 7 7 ) ) _ ! c 0 + e X H.&.=.=.m._.,.e._._._.e.g.h._+u.B.v.I.E # ", +" v %.y y z G.C.C.p.p.p.p.p.*.p.p.*.*.e._.x l X l l l e e b b | / / / 9 & 7 0 8 c H X X X X X X X X X o H.{.W %.y o b / / ' & _ + 7 ) _ ! - 8 ] y e R !.H X X X X X X X H + e D l | ' ' 9 9 7 9 7 7 _ ) _ ! ! & k H d.` (.m.m.>.e.;._.;._.'.'.e.7._+n.u.v.I.E # ", +" j D o z z /.d.C.p.p.p.U p.p.p.p.p.p.*._.,.G.H X X l l k k e e b | / / ' & ! : ] k X X X X X X X H l j R 2.y H o e | / ' 7 ! G %+c _ ) _ ! ~ d + X G.'.A X H X X X X X %.+ H e k / ' 9 9 7 9 7 9 ) _ _ ! ) / l H d.*...(.;.>.>._.>.e.>.e.;.e.5.7._+u.B.v.w.E r ", +" b D o y y H.d.C.Q p.p.p.&.p.p.p.p.p.p.U m.g.N k H H l l l k e e e b / / ' _ 4 8 b X X X X X X X X | w -.$.l k k e b | ' & : V.`.s._ _ ) + ; : (+e %.U $.H X X X X X X k + H k e / ' ' 9 & 9 7 7 7 7 ) / k X y Q ..m.m.m.m.>.>.e.>.>.;.m.>.e.5.7._+n.B.t.w.E = ", +" v D y w z /.K C.p.Q p.p.p.p.p.p.p.p.p.p.&...0.` x H X X l l l e j b b / ' 1 - g&^ X X X X X X X X | N q.J k l k e | / ' ! &+ +`.`.: 7 i _ c % 8 1 X G.~.x X %.X X X X | 1 X l e ' ' ' ' 9 7 7 7 & ' k l H H.p...m.m.>.e.m.m.m._.m.m.>._.m._.5.7._+B.n.l.I.E r ", +" v %.o w y H.d.C.p.Q p.p.p.p.p.p.p.p.p.p.p.p.*.'.'.O H X X X X l o k e | ' ' c 8 @ X X X X X X X k b ` 2.x k H k e b | ' * s.~+l,s.d 7 7 ) _ D.: m k H e.L H X X X X H ^ / l l e ' 9 1 9 9 & 9 | k l H G.&...m.m.#.#.(.m.m.;.>._.e.>.m.>.>.'.'.1.f.n.l.t.I.4.= ", +" | o y y z J d.C.p.p.p.p.*.p.p.p.p.U p.P &.Q p.p...:.(./.H l l X X l k e | ' + 8 c X X X X X X X | I <.{.D e H l e b | / ' 9 & ) 7 9 & & 7 7 # % : o H S -.%.X X X X X + / x X b | ^ / | b b l H H y P ..m.=.m.m.m.m.m.>.(.m.m.>.>.e.;.;.>._.5.7._+n.S.l.w.E = ", +" v %.o w y /.d.C.p.Q p.p.p.p.p.p.p.p.p.p.p.C.Q p.p.&.m.'.#.d.y H X X X X H o 1 % + X X X X X X H / K q.{.l k X k e b b / / ' / ' ' ' ' ' ' 9 & c * k H H.[.o H X X H X 1 e X H l k k k l X X H H.S ..=.=.m.=.m.m.m.>.>.m.m.>.>.>.>.m.m.m.e.m.5.7._+n.l.t.I.4.= ", +" | o o x z z /.C.C.p.p.p.p.p.p.p.p.p.p.p.p.Q Q Q Q Q Q &.@.e.(. ./.x H X X X k | j X X X X X X X l Z R.o.d.X H X l k k k e j j e e e e e e k e b k H D H._.d.H X X H H x x X X X %.X H x H.R +.-.;.m.m.(.m.(.(.>.>.m.m.(.>.m.m.m.>.>.>.>.;._.'.7.f.n.l.t.I.E r ", +" v o w y y z H.d.Q Q p.p.p.p.p.p.p.p.p.p.p.Q Q Q Q Q Q p.p.&.*.m.'.>.=.P H.x H %.H y N z x H X H x -.o.0.~.K H l X X X X X X X X X X %.X X H H H x y z z #.=.x x G.H.C.*.#.G.x x /.P ..>.;._.m.#.m.=.m.m.m.m.m.m.m.(.m.(.m.(.m.m.m.m.>.'.m.e.'.f._+n.B.t.I.E r ", +" / k D w y z d.d.C.Q C.p.p.p.p.p.p.p.p.p.p.p.p.C.Q p.Q Q Q Q Q C.p.*.=.m.'.'.>.` ` -.:.5.,.;.=.#.T [.|.2.~.~.a.T K /.y x x H H H H H H x x H.H.d.d.d./.z &.8.,._.e.g.g.g.f.}.;.;._.'.>.;.(.(.m.=.(.m.(.m.(.m.m.(.(.m.m.m.>.m.>.>.>.e.m.m._._.5.6._+n.l.t.w.r r ", +" / o o y x y d.d.Q Q C.C.p.p.p.p.*.p.p.p.p.Q p.p.C.p.Q p.p.Q p.&.C.P Q &.&.U ` @.#.(.'.'.5.~.:.:.'.l.[.!.{.,.;.>.#.@. . .*.*.&.Q Q P C.C.C.Q Q C.C.d.d.d./.#.g.g.g.g.'.'.e.e.m.(.=.(.=.=.(.m.m.=.m.m.(.m.m.m.m.m.>.>.>._.e.m.m.>.>.m.m.e.m.e.5.}._+n.B.l.I.4.r ", +" / k y w y z d.d.C.p.Q p.p.p.p.p.p.p.p.Q p.p.C.Q p.Q p.Q Q p.&.Q p.Q p.p.p.p.&.p.&.&.&. .` ..@.-.o.l.<.!.-.-.].$.@.+.b.Y U S U S P P P C.C.C.C.d.C.C.d.d.y p.m.(.=.=.=.=.@.=.=.=.>.(.(.m.(.(.m.=.m.=.m.m.>.m.(.>.m.>.m.m.m.>.>.>.>._.e.m.'.e.'.7.f.n.S.t.I.r r ", +" ( k D y y w d.d.C.Q C.p.p.p.p.p.p.p.p.Q Q p.p.Q p.Q &.P P Q p.Q &.p.p.Q Q Q p.&.Q &.p.S p.&.p.*.5.t.q.2.].#.-.=.......Z U T Z S Q C.P C.C.Q C.Q C.d.H.d.z d...@.=.=.=.=.=.=.=.m.=.=.=.=.=.(.m.m._.>.>.>.;.m.>.;.m.>.m.>.m._.m._._.>._.>._._.'.1._+n.B.t.I.4.r ", +" / k o o w y d.C.Q C.Q Q p.p.p.p.p.p.Q p.Q Q Q p.Q P P &.p.Q Q &.p.Q p.&.&.p.&.p.p.R Q &.&.Q p.*.:.P.<.!.].$.b.Y R K H.z G.G.x H D o x o x x H.H.H.C.N /.z /.*.=...=.=.=.=.=.=.(.=.(.(.=.(.m.=.m.m.m.m.(.;.>.>.>.;.>.m._.>.>.>.m.>._.>._.;.'.'.7.k.n.B.l.I.E r ", +" / k o y y y /.C.Q Q Q p.Q p.p.p.p.p.Q p.p.Q C.p.Q Q &.Q p.p.p.P Q Q P p.Q P S P &.S &.P &.P P *.0.o.<.].R H.x %.k e b | ' ' 7 7 @ @ @ 7 7 1 ^ | e x G.z z /.*...=.=.=...=.m.=.=.m.=.m.m.=.m.m.m.m.>.m.>.>.m.>._.>.;.m.m.>.>._.>._._.>._._._.'.6.k.n.l.t.w.r = ", +" ^ o y y y w H.d.Q Q Q Q p.C.Q p.&.p.p.Q Q Q Q P Q P P Q P &.Q Q &.&.p.P p.&.P &.&.P p.&.S Q &.*.i.8.].A H j ' 7 X.+ a D.2 - - } 4 % <+{ { : : < { ~ ^ H w H.*...=.=.=.=.m.=.=.m.=.(.=.(.m.=.(.m.m.m.m.m.>.>._.>.>.m.(._.m._.>._.>.;._.'.e.e.'.6.j.n.F.l.I.4.r ", +" / e o w G.y /.C.Q Q Q C.Q C.Q Q P Q Q Q Q P Q P Q P P Q P &.&.Q Q &.Q R P &.P R &.S &.U &.P S U t.i.R %.b ' ^ 7 X.X.X.X.! ! a + a a D.0 0 - 4 <+{ 8 (+l o H.*.=.=.=.=.=.=.=.=.>.=.m.m.>.m.(.(.(.m.m.m.m.m.(.>.>.;.>.m._.>.'.m.e.e.'._.e.'._.'.7._+n.S.t.I.E = ", +" ^ e o o y z d.d.C.Q C.C.C.Q Q C.Q P p.Q Q Q Q C.Q Q Q p.p.P P P P Q &.&.Q &.&.&.P S &.&.&.&.S *.t.j.K %.k b / ' ' ' ' 7 7 _ _ ! ! + _ + ! ! D.; % : F b x H.*...=...=.=.m.m.=.=.m.=.=.(.m.=.#.>.>.m.>.>.@.=.=.=...=.#.=.=.#.;.>._._._._.'.'.'.7.k.n.u.P.w.E r ", +" ^ o o w y z d.d.d.Q Q Q C.C.C.d.d.d././.y G.G.y z H.H.H.d.d.Q Q p.C.S &.&.S &.P P &.&.&.S S P *.t.i.K X %.k b / ' ' ' & 7 - ~ { : { ; _ + _ ! 0 ; { 8 j x /...=.=.=.=...=.m.m.=.=.=.=.#.=.m.=.=.@.` S Q d.d.K H.z G.H.K d.d.P S .@.#.;._._.'.7.j.n.B.S.w.E r ", +" ( j o x y y /.d.C.C.C.d.H.G.x x H X X X %.X X X X X X H H D x G./.K N P P &.R &.P S P &.&.&.&.*.0.v.C.%.D l o b / | / ' 7 m,V.`.`.++} _ _ _ + D.- <+F k x G.....=.=.=.=.=.=.m.m.=.=.=.#.#.Z P K G.x D o | ^ 1 i i i @ i 9 t b j y y K P -.'.'.1.k.n.B.P.I.E = ", +" ^ o w y z z K d.C.C.d.x X X X X %.%.k o | / ' / | | | e D H X H X %.x /.C.Q P P P &.&.&.R &.P S :.S.Y X %.l o j | | / 9 & - !+ + +M + ) ) _ _ + 2 ~ < D o d.*.=.=.=.=.=.=.m.=.=.=.=...Q /.D H o ' i c $ ~ { { < < 8 < F F 8 8 < ] = ^ D J @.'.h.k.n.S.v.I.E = ", +" & e o w y z H.C.C.C.x X %.k e | / & 7 X._ a D.0 0 2 3 4 % D.+ 1 j %.%.H x x d.P &.&.&.&.Q &.p.U ).S. .l D l k b e / / ' & _ : ++n,# ) _ _ ) ) + 0 : { X D d...=.=.=.=.=.=.=.m.=.` d.G.x o ^ X.c - 5 % 4 % ~ ~ { { { { > < < < F F C q $ o /.(.6.k.B.B.t.I.E r ", +" ^ e o w o z /.C.R x X X k b b / / ' & 7 9 X.X._ _ + a 0 - 4 { : < % + | %.%.H G.d.P &.&.S S &.U -.S.;.H l l l e b b | / ' & ) { 0 i & 7 ) ) _ + ; : c H G.C.=.=.=.=.=.=.=.=. .d.x H b ' + c c ; 2 - * - * 5 - 3 ~ % % ] ] { { > { < F 8 @ e &.1.k.B.E.l.I.E = ", +" 7 e w y y y H.Q P H %.l X k e b | ' X.X._ X.X.7 7 7 _ X.) + 0 - 4 : F 8 % ^ %.X %.w C.&.&.S &.&.#.l.t.z %.X l e e b | / ' ' 1 1 7 7 & & 7 7 7 + D.] | D H.p.=.....=.=.=...O D %.b ' 7 X.) + + + + ! = c ; $ * m % . % % % ] ] ~ < < 8 C ] o d.[.v.u.B.P.I.E E ", +" & e j j w w K @.( X o X X X l k b 7 j,o,p,q,i,D._ X.' X.7 X.X.X.a 0 - { 8 c.{ + o H x K &.S S &.` j.B. .l H H l k k e b / / / / / ' ' & & 1 & 7 7 | H H.C.*.=...=.m.=.m.d.H k | ' & 7 & 7 ) i i + r E E a.w.w.2.I.I.r.. ] % ] ~ { > < c.> o H.:.k.B.B.v.I.r E ", +" & j o y y y /.-.J X o X X X X X l 2 p,r,r,r,r,r,q,s,_ 7 & & 7 7 7 ) + 0 - ~ d C { | X z &.S S S U ).u.v.N l l l X H l D e e b b | | / 6 6 | e o %.x G.d.p...=.=.=.=._.+.%.e e / ^ / ' 9 9 & _ r r.!.8._+k.l.k.l.l.l.v.y.I.. ] ] { { < C } k J :.l.B.B.P.I.E $ ", +" & j j w w y H.>.N X k X X X X %.e 2 o,p,p,s,j,p,r,r,j,a _ & 7 7 7 X.X._ a ; } { c.= k D Q &.S U &.` 8.u.j.` H.D X X k l l l o D l D l l l H H G.d.p.&.&.....=.@.@.=.|.R %.o e b / / ' 1 1 & W [.j._+j.v.i.t.v.S.S.F.B.B.k.w.] { { < 8 q s l O |.l.E.B.l.I.E E ", +" 7 b o o y z /...b.X H X X X %.X X ' a s,s,X.X.0 j,p,r,o,s,X.7 7 9 & ) _ _ + 2 2 d { %.x P &.U &.U S @.0.B.u.1.'.@.N G.x x H H H H l D G.G.Q *.......*.....=.@.=.@.=.i.P H x l e b | | / ^ , r i._+j.}.E u ].w.r.u R.E.u.B.q.. { : < 8 ] o D .f.n.u.B.P.I.E $ ", +" & j y y y w J p.;.x X X X X X X X %.e b b | | ' X.2 o,r,p,s,7 & 7 7 7 _ ) + a 0 ~ # %.x &.S U &.p.U S ` _.i.j.n.k.f.7.e.e.=.@...=.=.=.e.e.e.m.m.=.=.=.....=.@.#.#.=.0. .H %.%.k o b b | | & W o.f.f.!.r y.v.j.1.E O.S.B.S.I.] N.{ < < @ D /.(.8.v.u.B.l.I.E m ", +" X.b j w w y H.C.,.R X X X %.X X X X X %.e e e / ' X.3 p,r,o,a 7 & & 7 7 7 + a 2 i l %./.&.U Z Z U Z *.` .` @.,.5.1.f.f.h.h.h.h.g.g.e.e.e.m.=.....=.....@.#.@.=.@.m.'.|.z %.X X l D j | ( ^ , a.a.$.W # R.v.v.i.E :+N.J.J.] ] { : 8 * o x Z !.f.l.B.B.P.I.r m ", +" b y y w w /.K ` 2.y X X X X X X X X X %.e e e | 9 s,r,r,r,s,& ' ' & 7 ) _ _ ^ %.H G.P U S S S &.U *.U S ` ` Z ` @.=.=.(.(._.m.m.=.=.....*.=...*.=...=.@.=.@.=.@.=.m.|.,.G.H X X X H o b | ^ & & t & 7 E a.r.r.= :+:+. . % ] ] { $ | x Q -.[.8.l.B.B.L.I.E m ", +" b e v w w I K C.(.#.D X H X X X X X X X %.k e e ' a j,r,o,a ' ' 1 1 9 & ' b %.%.H.Q &.&.U U ` *.&.U U *.U *.` ` ` &. .*.*.*.` *.....*...............@.=.@.=.=.#.#.#.>.f.<.H.X X %.X %.%.b v ( ( ( ^ & X.X.i + ! # $ * 3 % % ~ = b H N @.~.:.i.k.u.S.l.I.E m ", +" v o w y w v J C.&.[.R %.X X X X X X X X X %.l k e / X.s,2 X.' ' ' 1 / b %.H x d.R T &.&.&.U &.*.U U *.U .U ` ` ` *. .*.......*...*.............=.......@.#.=.=.#.#.-.m.8.t.Q x %.X H H X o e b | ^ ^ & & 7 @ @ _ c D.:+5 * + b %.H. .'.:.6.9.k.u.B.P.I.E ", +" b o y z y y d.C.&.&.:.&.H X X X X X X X X X l l k k e ' / | | | b e %.H H G.C.Q U &.Z *.*.&.*.Z U *.S ` *.*.*.` ` ` ` ..` *.......=.......=.......@.=.=.=.=.#.+.=.#.#.(.m.5.v.'.H.%.%.X H H o o e v 6 ^ ( ^ 7 X._ + + + + / k x d.@.'.5.}.|.f.l.u.B.l.w.E ", +" j y y y y J d.C.Q U [.S H H X X X X X X X X X k e k k e k k l X X H x d.p.&.S *.U Z S *.U U ` ` *.` *.*.U ` ` .` ` ` ..` ..................=...=.@.=.=.=.#.#.=.#.#.(.(.#._.9.9.*.G.D X X %.%.%.k k b | / ^ ( & & ^ v k X x Q #.,.).:.}.|.9.k.B.B.P.I.E ", +" j w z w /.d.N C.C.p.*.~.@.x X X X X X X X X %.X X l %.X X X %.H x H.Q p.Q P U &.U U *.U U *.U ` Z ` ` ` ` *.` U ..` ....` ..........=.=...=...#.#.#.@.@.#.=.#.#.#.=.#.#.>.#.>.g.k.f.*.H.x H X X %.%.%.k o j j e o H X H d.U (.).~.:.5.:.}.f.n.u.F.S.I.E ", +" j v z z /.K C.C.C.Q C.P (.{.Z G.X X X X X X X X X X X %.%.H G.d.p.U p.U &.U U U &.S ` U Z U S Z ` U U ` *.*. .*.` ` ` ` ` ............=...@...=.=.@.=.=.=.=.#.#.#.#.#.#.>.#.;.3.;.5.9.9.'.*.d.y H H X %.%.%.H H %.G.Q ` _.5.'.!.~.:.}.}.|.9.k.u.B.P.I. ", +" w I I /./.C.P Q C.P P P *.>.#.T H.D H H X X X %.H G.G.C.p.p.p.&.&.U U p.U *.U U *.U Z U ` *.*.` ` ` ` ` ..` ` . ...*...@.......=...@...=.@.+.+.=.@.#.#.@.=.(.#.#.-.>.>.-.-.;.-.;._.5.6.9.9.6._...U C.d.d.C.&.=._.g.5.).!.~.).~.5.:.}.|.i.n.B.F.S.I. ", +" w w I K K C.C.P C.C.C.C.O Q U =.#...T P K C.Q &.Q U p.p.p.&.P S S U &.U S U U S U ` ` Z Z ` Z ` ` ` ` ` ` .` ` .@.` .. .....@.@.=.@...=...=.@.=.=.=.=.#.#.(.=.#.#.(.;.(.>._.m.m.>.;.-.,.~.:.7.f.1.f.f.1.7.6.6.:.).~.'.!.:.:.:.5.:.5.6.8.n.u.F.P.u. ", +" z /./.C.C.P Q P Q P C.Q C.N P Q p.U S U S U U p.p.&.p.&.&.&.S *.&.U U U U &.*.U U &.*.` ` *.Z ` ` .` ` ` ` ` ` ` ....` . ...@.@...+.@.=...#.#.@.=.#.#.#.=.#.=.(.>.>.(.m.m.,.;.>.,._._.;._.,.,.'.).'.'.'.~.).[.~.~.~.:.5.5.5.:.:.6.6.f.n.u.B.u. ", +" z /.K Q P Q P Q Q Q P P Q Q P Q Q Q Q Q Q &.Q Q P p.p.S &.S U S U U &.*.U U *.` U U U Z ` ` ` ` ` .@.....` ..` ....@.@. .@.......+.+.+.@.#.=.#.#.@.#.#.#.(.#.#.(.m.;.;.>.,.;.;.;.,._.,.'.'.,.'.).~.~.'.~.'.~.5.~.~.~.~.:.:.}.}.6.6.f.k.u.B. ", +" J d.C.P Q Q Q p.P Q Q Q P Q Q P P C.Q p.Q &.&.Q P Q p.&.&.*.&.U &.U U U U U ` U U *.*.` U ` ` U *. .` .U ` ` ..... . . . .@.@.@.@.+.=.....#.=.(.@.#.(.#.#.(.(.#.(.(.>.>.>.'._.'.'._.,.,._.).).'.'.~.~.).5.:.5.5.:.:.5.5.5.}.6.6.j.n.B. ", +" C.P P &.P &.P &.P P P Q Q Q Q P P Q p.p.&.&.&.&.p.&.S U U &.*.&.U &.U U U U U U *.` Z ` U ` U ` ` ` ` ` ` .U .. .` ..` .` @.@.@.@.+.@.#.@.#.=.#.#.#.#.(.(.#.(.;.;.>.;.3.;.,.).'.'.,.'.'.).'.'.'.5.~.~.5.~.5.5.~.:.:.5.5.6.6. ", +" P P P P Q P P &.P &.O Q Q Q Q &.&.Q U U &.U &.S S &.p.S P &.&.&.S R R O O d.C.d.K K d.d.d.d.K /.d./.K J d.K J J /.d.d.K d.C.Q O P P p.S &.S U . . ... .@.+.+.+.#.;.>.>.>._.;.{.).~.).~.).).~.).~.5.5.:.5.5.}. ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Preview_6210.xpm b/xgnokii/xpm/Preview_6210.xpm new file mode 100644 index 0000000..3f0061b --- /dev/null +++ b/xgnokii/xpm/Preview_6210.xpm @@ -0,0 +1,13746 @@ +/* XPM */ +static char * Preview_6210_3_xpm[] = { +"150 314 13429 3", +" c None", +". c #7D7979", +"+ c #665E61", +"@ c #5F5659", +"# c #4E4548", +"$ c #41383B", +"% c #332A2D", +"& c #261E20", +"* c #1D1517", +"= c #50494C", +"- c #4F474A", +"; c #494144", +"> c #443E40", +", c #413B3D", +"' c #3E383A", +") c #423D3E", +"! c #443F41", +"~ c #464042", +"{ c #484345", +"] c #4B4848", +"^ c #504C4D", +"/ c #171414", +"( c #201D1D", +"_ c #2A2727", +": c #3B3738", +"< c #514D4E", +"[ c #565153", +"} c #554F53", +"| c #797377", +"1 c #898486", +"2 c #767273", +"3 c #5F5D5D", +"4 c #42403F", +"5 c #262322", +"6 c #252120", +"7 c #211D1D", +"8 c #1D1516", +"9 c #1E1516", +"0 c #1B1113", +"a c #1A0F11", +"b c #190F11", +"c c #180D0F", +"d c #140A0C", +"e c #120709", +"f c #13090B", +"g c #13090A", +"h c #0E0707", +"i c #0D0506", +"j c #0D0607", +"k c #0F0809", +"l c #100809", +"m c #0F0708", +"n c #0E0708", +"o c #0D0808", +"p c #0E0A0A", +"q c #100B0B", +"r c #0D0909", +"s c #130F0F", +"t c #171313", +"u c #181414", +"v c #171214", +"w c #1E1A1C", +"x c #2A2528", +"y c #1D191B", +"z c #383336", +"A c #514C4E", +"B c #6D696B", +"C c #737070", +"D c #575554", +"E c #373433", +"F c #282423", +"G c #1E1918", +"H c #1A1415", +"I c #16100E", +"J c #130E09", +"K c #110C08", +"L c #100D08", +"M c #100F0B", +"N c #12110D", +"O c #130F0D", +"P c #141915", +"Q c #151614", +"R c #141411", +"S c #161613", +"T c #161612", +"U c #151612", +"V c #131410", +"W c #141512", +"X c #171815", +"Y c #151815", +"Z c #131715", +"` c #131815", +" . c #151916", +".. c #121512", +"+. c #161310", +"@. c #16120E", +"#. c #14100C", +"$. c #100B08", +"%. c #100C08", +"&. c #0F0A06", +"*. c #0F0B08", +"=. c #0D0807", +"-. c #0C0606", +";. c #0B0505", +">. c #0C0707", +",. c #0D0A08", +"'. c #151311", +"). c #211F1E", +"!. c #373531", +"~. c #484643", +"{. c #72706D", +"]. c #4B4645", +"^. c #474241", +"/. c #302B29", +"(. c #1A1714", +"_. c #11110D", +":. c #0C110E", +"<. c #0B1512", +"[. c #101815", +"}. c #171513", +"|. c #171610", +"1. c #171911", +"2. c #181B13", +"3. c #132218", +"4. c #12251C", +"5. c #142821", +"6. c #162821", +"7. c #15312A", +"8. c #172C26", +"9. c #172B22", +"0. c #1B2F27", +"a. c #1A2F27", +"b. c #1B3029", +"c. c #1C332B", +"d. c #1A342D", +"e. c #1A342F", +"f. c #19332F", +"g. c #18312D", +"h. c #18312C", +"i. c #17312D", +"j. c #19322D", +"k. c #1A2B26", +"l. c #182922", +"m. c #162820", +"n. c #14261D", +"o. c #152119", +"p. c #122319", +"q. c #132016", +"r. c #12211A", +"s. c #111916", +"t. c #111713", +"u. c #141210", +"v. c #14100E", +"w. c #140F0D", +"x. c #110C0A", +"y. c #100907", +"z. c #0E0603", +"A. c #0D0604", +"B. c #0D0503", +"C. c #0C0503", +"D. c #160F0D", +"E. c #2D2726", +"F. c #332F2E", +"G. c #514E4E", +"H. c #413E3E", +"I. c #5D5857", +"J. c #413837", +"K. c #47403F", +"L. c #383231", +"M. c #2F2626", +"N. c #272120", +"O. c #26201F", +"P. c #211918", +"Q. c #171713", +"R. c #131913", +"S. c #14201A", +"T. c #10261F", +"U. c #0F2924", +"V. c #12302B", +"W. c #132F2A", +"X. c #172A26", +"Y. c #1C2C26", +"Z. c #1F3128", +"`. c #23332C", +" + c #25362F", +".+ c #283832", +"++ c #2D3B37", +"@+ c #2F3C38", +"#+ c #323E3B", +"$+ c #353B37", +"%+ c #383D38", +"&+ c #393F39", +"*+ c #3A413C", +"=+ c #3B423D", +"-+ c #3B433D", +";+ c #3A403C", +">+ c #3A413D", +",+ c #38423E", +"'+ c #374240", +")+ c #363F3E", +"!+ c #343D3C", +"~+ c #343D3B", +"{+ c #333C3A", +"]+ c #37403F", +"^+ c #323D3B", +"/+ c #2C3B37", +"(+ c #2A3934", +"_+ c #293934", +":+ c #273530", +"<+ c #26342F", +"[+ c #24302A", +"}+ c #1F322D", +"|+ c #17322D", +"1+ c #16302C", +"2+ c #192B27", +"3+ c #182925", +"4+ c #162521", +"5+ c #14241F", +"6+ c #13231F", +"7+ c #111F1B", +"8+ c #0F1913", +"9+ c #13120E", +"0+ c #150C09", +"a+ c #140A07", +"b+ c #120705", +"c+ c #100302", +"d+ c #0F0402", +"e+ c #0B0607", +"f+ c #120E0E", +"g+ c #2B2828", +"h+ c #383435", +"i+ c #302D2D", +"j+ c #4B4748", +"k+ c #787475", +"l+ c #757071", +"m+ c #3D383A", +"n+ c #262324", +"o+ c #211B1B", +"p+ c #211413", +"q+ c #1C1413", +"r+ c #0F221C", +"s+ c #131C18", +"t+ c #0F251D", +"u+ c #13271F", +"v+ c #16241C", +"w+ c #192F26", +"x+ c #1E3229", +"y+ c #1D3027", +"z+ c #243730", +"A+ c #2B3B35", +"B+ c #32403C", +"C+ c #36403E", +"D+ c #37413E", +"E+ c #3C433E", +"F+ c #41463F", +"G+ c #484F48", +"H+ c #4C524C", +"I+ c #4E524E", +"J+ c #51524F", +"K+ c #555552", +"L+ c #565653", +"M+ c #555551", +"N+ c #565651", +"O+ c #555550", +"P+ c #555650", +"Q+ c #53544E", +"R+ c #54544E", +"S+ c #52534E", +"T+ c #4D514D", +"U+ c #494F4B", +"V+ c #484C49", +"W+ c #464C48", +"X+ c #444844", +"Y+ c #454C47", +"Z+ c #434945", +"`+ c #404643", +" @ c #3F4440", +".@ c #3F4441", +"+@ c #3D423E", +"@@ c #3A3C37", +"#@ c #343B36", +"$@ c #2F3D39", +"%@ c #2E3D3A", +"&@ c #2B3A36", +"*@ c #283833", +"=@ c #24342F", +"-@ c #22342D", +";@ c #1E2F28", +">@ c #1B302C", +",@ c #152C29", +"'@ c #132924", +")@ c #0E2820", +"!@ c #101F16", +"~@ c #121911", +"{@ c #14120C", +"]@ c #160B0B", +"^@ c #110809", +"/@ c #0E0608", +"(@ c #0E0607", +"_@ c #120B0C", +":@ c #171111", +"<@ c #201C1C", +"[@ c #312F2F", +"}@ c #4E4D4D", +"|@ c #585152", +"1@ c #2A2425", +"2@ c #191416", +"3@ c #0E181A", +"4@ c #111C1C", +"5@ c #161E1C", +"6@ c #12251E", +"7@ c #152C25", +"8@ c #1D2E25", +"9@ c #233327", +"0@ c #2C372B", +"a@ c #333D32", +"b@ c #3A4337", +"c@ c #42493D", +"d@ c #495146", +"e@ c #53584F", +"f@ c #56554E", +"g@ c #5D5956", +"h@ c #625B59", +"i@ c #665F5D", +"j@ c #5F5954", +"k@ c #5D5953", +"l@ c #605C56", +"m@ c #615B56", +"n@ c #635C58", +"o@ c #625754", +"p@ c #675D5A", +"q@ c #665B59", +"r@ c #605953", +"s@ c #5E5A54", +"t@ c #5B5751", +"u@ c #5F5C56", +"v@ c #5E5953", +"w@ c #5C5751", +"x@ c #564E49", +"y@ c #58524D", +"z@ c #565551", +"A@ c #535450", +"B@ c #4E504A", +"C@ c #494C45", +"D@ c #474C44", +"E@ c #464A43", +"F@ c #454C44", +"G@ c #444A44", +"H@ c #454844", +"I@ c #444642", +"J@ c #464945", +"K@ c #444743", +"L@ c #444643", +"M@ c #424541", +"N@ c #3F433E", +"O@ c #3D423C", +"P@ c #39413A", +"Q@ c #38423A", +"R@ c #333A32", +"S@ c #333B38", +"T@ c #323C3C", +"U@ c #2D3939", +"V@ c #283A37", +"W@ c #1F352F", +"X@ c #163027", +"Y@ c #133026", +"Z@ c #112F24", +"`@ c #102B26", +" # c #15201F", +".# c #17191B", +"+# c #150D0C", +"@# c #120D0A", +"## c #150B09", +"$# c #0D0403", +"%# c #080302", +"&# c #080504", +"*# c #181515", +"=# c #565354", +"-# c #7A7879", +";# c #635F5C", +"># c #2C2C29", +",# c #13211D", +"'# c #0F2520", +")# c #162926", +"!# c #15322E", +"~# c #14312A", +"{# c #1D362E", +"]# c #273930", +"^# c #2D3C32", +"/# c #39463D", +"(# c #414941", +"_# c #4C5149", +":# c #54554D", +"<# c #58574F", +"[# c #605F56", +"}# c #646259", +"|# c #68665E", +"1# c #6D6962", +"2# c #6C665F", +"3# c #706863", +"4# c #706762", +"5# c #6E635F", +"6# c #69625F", +"7# c #615D5D", +"8# c #605C5B", +"9# c #615E5C", +"0# c #62605F", +"a# c #625F5E", +"b# c #5C5857", +"c# c #54514E", +"d# c #52534F", +"e# c #51514E", +"f# c #535451", +"g# c #50504C", +"h# c #4B4844", +"i# c #4A4845", +"j# c #484A47", +"k# c #474C49", +"l# c #424643", +"m# c #3F4642", +"n# c #3F4843", +"o# c #3E4842", +"p# c #3D4942", +"q# c #3E4943", +"r# c #3F4742", +"s# c #3E4540", +"t# c #3F4641", +"u# c #3F4741", +"v# c #3D443E", +"w# c #424945", +"x# c #434743", +"y# c #424642", +"z# c #414541", +"A# c #434744", +"B# c #404440", +"C# c #3D413F", +"D# c #3A403F", +"E# c #394040", +"F# c #323E3A", +"G# c #2D3B36", +"H# c #2E3D38", +"I# c #2A3A35", +"J# c #243534", +"K# c #203333", +"L# c #1B2F30", +"M# c #142B28", +"N# c #0F251C", +"O# c #141B13", +"P# c #16100B", +"Q# c #150F0C", +"R# c #0E0C0B", +"S# c #0F0807", +"T# c #130D0D", +"U# c #252122", +"V# c #514F50", +"W# c #585758", +"X# c #8C8B8A", +"Y# c #514E4C", +"Z# c #313834", +"`# c #17261F", +" $ c #13261F", +".$ c #153028", +"+$ c #20332B", +"@$ c #2F3A33", +"#$ c #3B433B", +"$$ c #3E453A", +"%$ c #484F45", +"&$ c #53594F", +"*$ c #5C6258", +"=$ c #63665F", +"-$ c #65645C", +";$ c #6D6860", +">$ c #726A63", +",$ c #726760", +"'$ c #746A64", +")$ c #716964", +"!$ c #746E69", +"~$ c #716A65", +"{$ c #6A635D", +"]$ c #6C6660", +"^$ c #6C6760", +"/$ c #67615B", +"($ c #615F5D", +"_$ c #565758", +":$ c #58595B", +"<$ c #525454", +"[$ c #4C4E4E", +"}$ c #464948", +"|$ c #454947", +"1$ c #3E423F", +"2$ c #373E38", +"3$ c #323B35", +"4$ c #343D37", +"5$ c #323A34", +"6$ c #313932", +"7$ c #303731", +"8$ c #2E342E", +"9$ c #2D342E", +"0$ c #2B3733", +"a$ c #273632", +"b$ c #23342E", +"c$ c #233630", +"d$ c #233831", +"e$ c #213730", +"f$ c #263932", +"g$ c #2C3631", +"h$ c #2E3530", +"i$ c #2F3733", +"j$ c #2E3631", +"k$ c #2F3732", +"l$ c #2E3732", +"m$ c #303935", +"n$ c #353E3A", +"o$ c #39423F", +"p$ c #3A4340", +"q$ c #3D4443", +"r$ c #3F4543", +"s$ c #414544", +"t$ c #404241", +"u$ c #444646", +"v$ c #3F4340", +"w$ c #3A403B", +"x$ c #3B413C", +"y$ c #3B3F3B", +"z$ c #3C423D", +"A$ c #3F4541", +"B$ c #3C413E", +"C$ c #363A3A", +"D$ c #343B3C", +"E$ c #2F3838", +"F$ c #263432", +"G$ c #20342F", +"H$ c #1A3229", +"I$ c #173126", +"J$ c #17281F", +"K$ c #15211F", +"L$ c #102222", +"M$ c #101816", +"N$ c #120C0B", +"O$ c #100909", +"P$ c #0D0B0A", +"Q$ c #232222", +"R$ c #505051", +"S$ c #918988", +"T$ c #445755", +"U$ c #1D312F", +"V$ c #152B28", +"W$ c #182D26", +"X$ c #24342E", +"Y$ c #333C37", +"Z$ c #464943", +"`$ c #56534D", +" % c #635E54", +".% c #6C675C", +"+% c #706A60", +"@% c #746D65", +"#% c #766E67", +"$% c #7A726C", +"%% c #776D66", +"&% c #786F68", +"*% c #756B64", +"=% c #736962", +"-% c #726C68", +";% c #6C6A69", +">% c #6C6D6B", +",% c #656664", +"'% c #5A5D59", +")% c #555853", +"!% c #4D514A", +"~% c #474942", +"{% c #40423F", +"]% c #393B3C", +"^% c #343436", +"/% c #2E3030", +"(% c #2B312E", +"_% c #252D2A", +":% c #23302B", +"<% c #222E29", +"[% c #24302B", +"}% c #27322E", +"|% c #29342F", +"1% c #293530", +"2% c #2C3A35", +"3% c #2C3834", +"4% c #303F3B", +"5% c #334845", +"6% c #2F4240", +"7% c #2C413E", +"8% c #2A403D", +"9% c #2B4440", +"0% c #25403B", +"a% c #24403A", +"b% c #28403A", +"c% c #26362F", +"d% c #27342D", +"e% c #26332C", +"f% c #222E27", +"g% c #202C25", +"h% c #1F2B22", +"i% c #1E2B22", +"j% c #203027", +"k% c #25352E", +"l% c #28352F", +"m% c #2F3A36", +"n% c #343E3B", +"o% c #343938", +"p% c #373C3A", +"q% c #343E38", +"r% c #313F35", +"s% c #334036", +"t% c #364138", +"u% c #3B413A", +"v% c #3E3F3D", +"w% c #3D3F3E", +"x% c #393E3C", +"y% c #363F3B", +"z% c #32403A", +"A% c #2C3E36", +"B% c #293E35", +"C% c #243931", +"D% c #203231", +"E% c #1E3233", +"F% c #162F2E", +"G% c #0D2422", +"H% c #131310", +"I% c #0E0907", +"J% c #070604", +"K% c #1E1E1D", +"L% c #6A6A6A", +"M% c #83817F", +"N% c #3F514C", +"O% c #1D2621", +"P% c #27312D", +"Q% c #383D3B", +"R% c #54534F", +"S% c #6C6A67", +"T% c #807976", +"U% c #807671", +"V% c #85776F", +"W% c #807267", +"X% c #807269", +"Y% c #867973", +"Z% c #7F736E", +"`% c #736E68", +" & c #6F6F69", +".& c #656660", +"+& c #5D6058", +"@& c #525751", +"#& c #464F4D", +"$& c #3D4442", +"%& c #363E39", +"&& c #2C362F", +"*& c #263129", +"=& c #213025", +"-& c #23332A", +";& c #24312A", +">& c #293531", +",& c #2A3833", +"'& c #2A3B36", +")& c #293D38", +"!& c #294139", +"~& c #2E4941", +"{& c #2D4740", +"]& c #2D413B", +"^& c #2E3C38", +"/& c #28332E", +"(& c #27322D", +"_& c #27302D", +":& c #252F2C", +"<& c #242E2E", +"[& c #232B2C", +"}& c #1F2828", +"|& c #1F2B29", +"1& c #1E2F2B", +"2& c #1B2E2A", +"3& c #1C2F2B", +"4& c #1B2F29", +"5& c #1C3128", +"6& c #1D3128", +"7& c #1D3229", +"8& c #1E332B", +"9& c #20352D", +"0& c #22372F", +"a& c #243A33", +"b& c #233B32", +"c& c #1F392E", +"d& c #1C362C", +"e& c #1D342A", +"f& c #1F352C", +"g& c #21342C", +"h& c #24352F", +"i& c #23332D", +"j& c #1E3124", +"k& c #1E3425", +"l& c #243B2D", +"m& c #263B2E", +"n& c #283A2E", +"o& c #2D3B32", +"p& c #323E36", +"q& c #36423B", +"r& c #3B423F", +"s& c #3C4341", +"t& c #3C4441", +"u& c #3B4442", +"v& c #384440", +"w& c #34403B", +"x& c #2F3D37", +"y& c #303E39", +"z& c #313D3D", +"A& c #2F3B3C", +"B& c #263938", +"C& c #193431", +"D& c #112A25", +"E& c #121711", +"F& c #0F0A05", +"G& c #080502", +"H& c #141312", +"I& c #636363", +"J& c #404D47", +"K& c #1E342B", +"L& c #2E372F", +"M& c #454640", +"N& c #585551", +"O& c #696560", +"P& c #7D7774", +"Q& c #877F7C", +"R& c #887D79", +"S& c #81746E", +"T& c #80756D", +"U& c #80796F", +"V& c #7C776E", +"W& c #76726D", +"X& c #6F6C68", +"Y& c #5E5E59", +"Z& c #5A5E59", +"`& c #4D534F", +" * c #383F39", +".* c #2F362F", +"+* c #2A3129", +"@* c #2B332B", +"#* c #2B342C", +"$* c #2B362D", +"%* c #2A3A30", +"&* c #2C4036", +"** c #293F34", +"=* c #2D4439", +"-* c #2B3E33", +";* c #2B3C34", +">* c #28372E", +",* c #25342A", +"'* c #223128", +")* c #24342B", +"!* c #26372E", +"~* c #223228", +"{* c #26352D", +"]* c #27372E", +"^* c #223027", +"/* c #233129", +"(* c #26362D", +"_* c #24322B", +":* c #22302C", +"<* c #24322F", +"[* c #21302D", +"}* c #21322E", +"|* c #1F332E", +"1* c #1D332E", +"2* c #1E342F", +"3* c #1A302A", +"4* c #1C302A", +"5* c #1A2E27", +"6* c #182B24", +"7* c #172922", +"8* c #192B24", +"9* c #152A22", +"0* c #132B22", +"a* c #152C24", +"b* c #162E26", +"c* c #162E25", +"d* c #1A3228", +"e* c #1F3831", +"f* c #203A32", +"g* c #1B362A", +"h* c #183326", +"i* c #1A3427", +"j* c #1C3328", +"k* c #1D3428", +"l* c #203329", +"m* c #22322A", +"n* c #283A34", +"o* c #2E3D39", +"p* c #303E3B", +"q* c #33413E", +"r* c #33403E", +"s* c #343F3E", +"t* c #364140", +"u* c #374242", +"v* c #394443", +"w* c #354240", +"x* c #2F3F3C", +"y* c #27403B", +"z* c #1A3833", +"A* c #112E26", +"B* c #121A12", +"C* c #110805", +"D* c #060504", +"E* c #171717", +"F* c #676767", +"G* c #58645C", +"H* c #273C33", +"I* c #28382C", +"J* c #43453B", +"K* c #5A564D", +"L* c #726962", +"M* c #847D75", +"N* c #89817B", +"O* c #887E78", +"P* c #837973", +"Q* c #7B756E", +"R* c #707066", +"S* c #666A5E", +"T* c #5B6155", +"U* c #4F564D", +"V* c #434941", +"W* c #373D35", +"X* c #303631", +"Y* c #2A342F", +"Z* c #2A3B37", +"`* c #293B39", +" = c #2D3E38", +".= c #37453A", +"+= c #39473B", +"@= c #354336", +"#= c #303D2F", +"$= c #2E3B2D", +"%= c #2C392B", +"&= c #2D3D2F", +"*= c #2B392C", +"== c #2D3A2F", +"-= c #2E392F", +";= c #2F3931", +">= c #313A32", +",= c #363E37", +"'= c #373D37", +")= c #363B34", +"!= c #333D34", +"~= c #2F3B31", +"{= c #2F3D33", +"]= c #2C382D", +"^= c #2D392F", +"/= c #2D382F", +"(= c #2D362E", +"_= c #2D372F", +":= c #2E3632", +"<= c #2D3734", +"[= c #33433F", +"}= c #2F3D3A", +"|= c #293631", +"1= c #24322D", +"2= c #24352E", +"3= c #23342F", +"4= c #233531", +"5= c #223431", +"6= c #223430", +"7= c #213330", +"8= c #20322E", +"9= c #1F322E", +"0= c #1F302E", +"a= c #1F2D2C", +"b= c #1F2D2B", +"c= c #1C2E29", +"d= c #162C25", +"e= c #162F27", +"f= c #142F27", +"g= c #142F25", +"h= c #183129", +"i= c #193129", +"j= c #172E25", +"k= c #172F25", +"l= c #1E362E", +"m= c #1E342D", +"n= c #1D332D", +"o= c #203530", +"p= c #1E332E", +"q= c #21332F", +"r= c #293936", +"s= c #2E3A3A", +"t= c #323E3F", +"u= c #364143", +"v= c #394144", +"w= c #3A4342", +"x= c #36423E", +"y= c #32423D", +"z= c #2E4540", +"A= c #27413B", +"B= c #1B3A33", +"C= c #102D24", +"D= c #12120C", +"E= c #0B0806", +"F= c #070606", +"G= c #151514", +"H= c #696968", +"I= c #737D72", +"J= c #2A4233", +"K= c #283929", +"L= c #3E4333", +"M= c #5B584B", +"N= c #797369", +"O= c #8B817A", +"P= c #8A8079", +"Q= c #897E78", +"R= c #847A74", +"S= c #79746D", +"T= c #696B63", +"U= c #545E53", +"V= c #3E483C", +"W= c #333C2C", +"X= c #2F3525", +"Y= c #303425", +"Z= c #354137", +"`= c #37453D", +" - c #36453F", +".- c #32433C", +"+- c #2C3B34", +"@- c #303C33", +"#- c #383E33", +"$- c #3C4337", +"%- c #3C4439", +"&- c #3A4237", +"*- c #383D33", +"=- c #3C453B", +"-- c #3D463C", +";- c #3C473C", +">- c #3E4B40", +",- c #3D4339", +"'- c #3D433B", +")- c #3A4139", +"!- c #384139", +"~- c #41433F", +"{- c #3C4339", +"]- c #364035", +"^- c #333F33", +"/- c #323D34", +"(- c #333B36", +"_- c #393B3A", +":- c #3B3D3A", +"<- c #393D36", +"[- c #2B3830", +"}- c #354642", +"|- c #49524E", +"1- c #3A3C35", +"2- c #323A37", +"3- c #2E3936", +"4- c #2B3635", +"5- c #2B3536", +"6- c #2A3532", +"7- c #233229", +"8- c #24372E", +"9- c #223530", +"0- c #233431", +"a- c #263330", +"b- c #25312E", +"c- c #22322C", +"d- c #22342F", +"e- c #1E302B", +"f- c #1E312B", +"g- c #1C312A", +"h- c #1C3029", +"i- c #1B2F28", +"j- c #182C23", +"k- c #162A21", +"l- c #213630", +"m- c #1C3129", +"n- c #1A3128", +"o- c #213934", +"p- c #233A36", +"q- c #1E322E", +"r- c #1D2D2A", +"s- c #1E2D2B", +"t- c #273635", +"u- c #324342", +"v- c #374244", +"w- c #364341", +"x- c #32443F", +"y- c #31413A", +"z- c #314139", +"A- c #293D35", +"B- c #1D342C", +"C- c #10241A", +"D- c #10150E", +"E- c #0D0704", +"F- c #070402", +"G- c #212020", +"H- c #98938B", +"I- c #2C4838", +"J- c #213624", +"K- c #3F4736", +"L- c #5A584A", +"M- c #797267", +"N- c #8D857D", +"O- c #8A807A", +"P- c #857771", +"Q- c #837873", +"R- c #78746C", +"S- c #65665D", +"T- c #4C4F44", +"U- c #34382C", +"V- c #2B3222", +"W- c #313E2E", +"X- c #3E493E", +"Y- c #434D45", +"Z- c #40483E", +"`- c #3A3F36", +" ; c #373C32", +".; c #424942", +"+; c #474C47", +"@; c #474B45", +"#; c #494F49", +"$; c #4B514B", +"%; c #494E49", +"&; c #474D47", +"*; c #464A44", +"=; c #454C42", +"-; c #474D41", +";; c #48493F", +">; c #484B42", +",; c #3F473E", +"'; c #39453C", +"); c #3C443D", +"!; c #41453C", +"~; c #3E463B", +"{; c #3C473D", +"]; c #3B463E", +"^; c #3B4541", +"/; c #3D4546", +"(; c #3C4042", +"_; c #3A3C3B", +":; c #2F372A", +"<; c #0F1F13", +"[; c #161C1A", +"}; c #4A5750", +"|; c #494C43", +"1; c #363D35", +"2; c #323634", +"3; c #3A3B37", +"4; c #333833", +"5; c #313636", +"6; c #33353A", +"7; c #323735", +"8; c #2B3429", +"9; c #27362A", +"0; c #283C37", +"a; c #283B37", +"b; c #283731", +"c; c #27362F", +"d; c #27352E", +"e; c #25332C", +"f; c #25322C", +"g; c #273730", +"h; c #21322A", +"i; c #1E3128", +"j; c #1F3129", +"k; c #1F3229", +"l; c #1D2E26", +"m; c #1D2F26", +"n; c #162920", +"o; c #182D27", +"p; c #1F3531", +"q; c #213633", +"r; c #1C312C", +"s; c #213532", +"t; c #2C383D", +"u; c #323D40", +"v; c #34423F", +"w; c #39433C", +"x; c #384037", +"y; c #343E36", +"z; c #2D3D34", +"A; c #1D352C", +"B; c #102319", +"C; c #120B05", +"D; c #0B0400", +"E; c #090806", +"F; c #454544", +"G; c #4E5A50", +"H; c #1F3528", +"I; c #324031", +"J; c #515547", +"K; c #6B685C", +"L; c #8A8279", +"M; c #8F867F", +"N; c #877A75", +"O; c #897975", +"P; c #78736B", +"Q; c #5D6155", +"R; c #464A3B", +"S; c #3A3726", +"T; c #3B3C32", +"U; c #3B463B", +"V; c #3B473C", +"W; c #404239", +"X; c #45473F", +"Y; c #4B5049", +"Z; c #4D544C", +"`; c #4D544D", +" > c #4E544D", +".> c #4C524B", +"+> c #4D534C", +"@> c #4D524B", +"#> c #50554F", +"$> c #515750", +"%> c #4E534C", +"&> c #505650", +"*> c #4B4F49", +"=> c #4C5049", +"-> c #4B5046", +";> c #4E5045", +">> c #54534D", +",> c #51504B", +"'> c #4C504A", +")> c #47504A", +"!> c #444B46", +"~> c #474B48", +"{> c #4A4B46", +"]> c #494943", +"^> c #464741", +"/> c #444741", +"(> c #414742", +"_> c #3D4743", +":> c #3C4544", +"<> c #38423F", +"[> c #071008", +"}> c #07110E", +"|> c #324339", +"1> c #4D554E", +"2> c #3C3E3A", +"3> c #383C39", +"4> c #3A3F38", +"5> c #353C35", +"6> c #383F3F", +"7> c #34363C", +"8> c #323435", +"9> c #31352E", +"0> c #2D362D", +"a> c #2B3C36", +"b> c #293832", +"c> c #293932", +"d> c #2C3D37", +"e> c #26352E", +"f> c #25332D", +"g> c #24362E", +"h> c #23352D", +"i> c #22332B", +"j> c #23342B", +"k> c #24352D", +"l> c #20342E", +"m> c #1F332F", +"n> c #1D322D", +"o> c #182B27", +"p> c #1A2D29", +"q> c #1E332F", +"r> c #203331", +"s> c #263236", +"t> c #333D40", +"u> c #394341", +"v> c #3C413D", +"w> c #394139", +"x> c #354037", +"y> c #313E37", +"z> c #273833", +"A> c #172E27", +"B> c #141811", +"C> c #110804", +"D> c #070301", +"E> c #161514", +"F> c #545454", +"G> c #878079", +"H> c #314235", +"I> c #2E392D", +"J> c #44493C", +"K> c #636357", +"L> c #837E74", +"M> c #8D837A", +"N> c #877C76", +"O> c #887C78", +"P> c #887977", +"Q> c #64635B", +"R> c #414B3B", +"S> c #343E2A", +"T> c #3E4131", +"U> c #47483E", +"V> c #495048", +"W> c #4B554B", +"X> c #565951", +"Y> c #585952", +"Z> c #5B5D55", +"`> c #595B53", +" , c #565750", +"., c #5A5C55", +"+, c #575951", +"@, c #54564E", +"#, c #53564D", +"$, c #53554D", +"%, c #565A52", +"&, c #525249", +"*, c #56554D", +"=, c #59534F", +"-, c #554E4B", +";, c #53514E", +">, c #4F504E", +",, c #4A4F4C", +"', c #4A514E", +"), c #535654", +"!, c #504C4B", +"~, c #4B4845", +"{, c #494A46", +"], c #434A45", +"^, c #414B47", +"/, c #394442", +"(, c #1B2F2A", +"_, c #030907", +":, c #020A08", +"<, c #4B5550", +"[, c #434140", +"}, c #3B433A", +"|, c #353E35", +"1, c #393F40", +"2, c #33363D", +"3, c #383F42", +"4, c #3B3E3C", +"5, c #393C36", +"6, c #2D3934", +"7, c #283B35", +"8, c #2C3B36", +"9, c #2A3732", +"0, c #2B3833", +"a, c #28342F", +"b, c #283831", +"c, c #26362E", +"d, c #273830", +"e, c #27372F", +"f, c #24332C", +"g, c #21332E", +"h, c #213531", +"i, c #172923", +"j, c #213032", +"k, c #323B3E", +"l, c #3F4444", +"m, c #394138", +"n, c #333E36", +"o, c #35403A", +"p, c #213833", +"q, c #122921", +"r, c #0D0602", +"s, c #090605", +"t, c #333232", +"u, c #A2A0A1", +"v, c #9D928A", +"w, c #565B50", +"x, c #2F3A2C", +"y, c #42453A", +"z, c #5A584C", +"A, c #7B766C", +"B, c #8F857C", +"C, c #8C8078", +"D, c #877E78", +"E, c #817774", +"F, c #7B6F6E", +"G, c #4C4B42", +"H, c #323D2A", +"I, c #34422E", +"J, c #45493C", +"K, c #605F59", +"L, c #60645C", +"M, c #5E635B", +"N, c #676661", +"O, c #625F59", +"P, c #615C56", +"Q, c #605C55", +"R, c #67655F", +"S, c #63615A", +"T, c #5F5A54", +"U, c #5D5A54", +"V, c #5D5E56", +"W, c #5B5C54", +"X, c #5A5A52", +"Y, c #5C5D56", +"Z, c #5F6059", +"`, c #585850", +" ' c #5A5750", +".' c #5F5B55", +"+' c #625D5A", +"@' c #5A5250", +"#' c #5B5554", +"$' c #555353", +"%' c #4D5350", +"&' c #46514D", +"*' c #35423F", +"=' c #676968", +"-' c #524A49", +";' c #504B47", +">' c #4B4B47", +",' c #3E4444", +"'' c #030A0A", +")' c #010808", +"!' c #1A251F", +"~' c #404843", +"{' c #413B3B", +"]' c #3C3E3C", +"^' c #353F34", +"/' c #343E31", +"(' c #38403E", +"_' c #292F37", +":' c #2B353B", +"<' c #455050", +"[' c #403F3C", +"}' c #323934", +"|' c #2C3C35", +"1' c #323F3C", +"2' c #313D39", +"3' c #303B37", +"4' c #2E3835", +"5' c #303A37", +"6' c #2F3B37", +"7' c #2F3D38", +"8' c #283630", +"9' c #28362F", +"0' c #25322B", +"a' c #26342E", +"b' c #23312E", +"c' c #233230", +"d' c #243432", +"e' c #243532", +"f' c #22312F", +"g' c #21302E", +"h' c #192927", +"i' c #152528", +"j' c #283234", +"k' c #3A3C3D", +"l' c #474E4A", +"m' c #3C483F", +"n' c #344038", +"o' c #353E39", +"p' c #3B4443", +"q' c #2C3F3B", +"r' c #1A332C", +"s' c #13231A", +"t' c #150A07", +"u' c #080402", +"v' c #0B0808", +"w' c #646263", +"x' c #575A4D", +"y' c #2F3C2C", +"z' c #3B3E2E", +"A' c #554F43", +"B' c #716B60", +"C' c #92897E", +"D' c #998C83", +"E' c #87827B", +"F' c #7E7B76", +"G' c #665F5F", +"H' c #413E36", +"I' c #383F31", +"J' c #424D40", +"K' c #575950", +"L' c #706D67", +"M' c #6F6D64", +"N' c #68655C", +"O' c #69655E", +"P' c #6D6963", +"Q' c #635D56", +"R' c #635C56", +"S' c #656059", +"T' c #68635D", +"U' c #6B6862", +"V' c #635F58", +"W' c #5E5D54", +"X' c #5E5C53", +"Y' c #5F5E54", +"Z' c #605F55", +"`' c #5F5E55", +" ) c #605E55", +".) c #5F5755", +"+) c #5E5554", +"@) c #5E5656", +"#) c #575454", +"$) c #4C5550", +"%) c #35443D", +"&) c #121B17", +"*) c #1C2321", +"=) c #6D7876", +"-) c #5A5350", +";) c #554D46", +">) c #524F4A", +",) c #504D4E", +"') c #49494C", +")) c #293533", +"!) c #0C1013", +"~) c #060B0C", +"{) c #1B2920", +"]) c #3D433C", +"^) c #423C3C", +"/) c #3D403E", +"() c #343E32", +"_) c #374133", +":) c #394440", +"<) c #172225", +"[) c #141D1D", +"}) c #4A5D5C", +"|) c #4E5150", +"1) c #3A3E38", +"2) c #2E3C34", +"3) c #313C38", +"4) c #313B38", +"5) c #343F3D", +"6) c #333D3B", +"7) c #323C39", +"8) c #313A37", +"9) c #303937", +"0) c #303C38", +"a) c #2E3C37", +"b) c #2D3A35", +"c) c #2B3832", +"d) c #2D3A36", +"e) c #29352F", +"f) c #263632", +"g) c #273736", +"h) c #273836", +"i) c #283937", +"j) c #263634", +"k) c #263533", +"l) c #1F2F2E", +"m) c #112827", +"n) c #172825", +"o) c #2A302C", +"p) c #414D47", +"q) c #3D4B42", +"r) c #354139", +"s) c #353E38", +"t) c #37403E", +"u) c #303E3A", +"v) c #243832", +"w) c #143026", +"x) c #13140E", +"y) c #0C0502", +"z) c #222120", +"A) c #908D85", +"B) c #3D4A3A", +"C) c #303E2A", +"D) c #4A4838", +"E) c #686256", +"F) c #847E72", +"G) c #948B7E", +"H) c #91857A", +"I) c #867F75", +"J) c #7A7870", +"K) c #686962", +"L) c #4E4B48", +"M) c #3C3731", +"N) c #43463E", +"O) c #6F6F68", +"P) c #78706A", +"Q) c #756A63", +"R) c #736A63", +"S) c #6C675F", +"T) c #6E6B62", +"U) c #6D6B62", +"V) c #68655B", +"W) c #676359", +"X) c #68645A", +"Y) c #69655C", +"Z) c #69665D", +"`) c #666359", +" ! c #666459", +".! c #67665C", +"+! c #656358", +"@! c #67675C", +"#! c #615C55", +"$! c #65615C", +"%! c #605D59", +"&! c #625D5B", +"*! c #635D5D", +"=! c #5D5B5C", +"-! c #4B5751", +";! c #213226", +">! c #040E06", +",! c #0A110D", +"'! c #606D6A", +")! c #605A55", +"!! c #5A5349", +"~! c #54534A", +"{! c #535453", +"]! c #4E4C4E", +"^! c #3E413E", +"/! c #293138", +"(! c #222F37", +"_! c #40453D", +":! c #444241", +"~ c #112113", +",~ c #010502", +"'~ c #050F08", +")~ c #596863", +"!~ c #65615B", +"~~ c #5B564B", +"{~ c #515145", +"]~ c #4C4E4B", +"^~ c #4C4B4A", +"/~ c #4A4842", +"(~ c #46494A", +"_~ c #434B50", +":~ c #444C46", +"<~ c #464A41", +"[~ c #3E4745", +"}~ c #394339", +"|~ c #3A4333", +"1~ c #2C3A33", +"2~ c #061612", +"3~ c #010301", +"4~ c #151E1A", +"5~ c #586461", +"6~ c #3F3F38", +"7~ c #333C33", +"8~ c #343E3A", +"9~ c #36413E", +"0~ c #343D39", +"a~ c #333C39", +"b~ c #353F3B", +"c~ c #353F3C", +"d~ c #34403C", +"e~ c #323D3A", +"f~ c #2F3936", +"g~ c #2C3837", +"h~ c #2A3938", +"i~ c #2C3A3A", +"j~ c #2C3B3A", +"k~ c #293534", +"l~ c #293635", +"m~ c #283534", +"n~ c #253534", +"o~ c #1A3432", +"p~ c #0F2E23", +"q~ c #06210C", +"r~ c #22372A", +"s~ c #36463B", +"t~ c #3A473F", +"u~ c #34423B", +"v~ c #304039", +"w~ c #343E39", +"x~ c #313F3B", +"y~ c #253D37", +"z~ c #133126", +"A~ c #12160F", +"B~ c #0F0906", +"C~ c #201F1F", +"D~ c #6A6969", +"E~ c #39453A", +"F~ c #363E2E", +"G~ c #514F3E", +"H~ c #6B6859", +"I~ c #8A857C", +"J~ c #958C87", +"K~ c #938982", +"L~ c #8E857C", +"M~ c #807C76", +"N~ c #666465", +"O~ c #484347", +"P~ c #3A3828", +"Q~ c #4B4F41", +"R~ c #636459", +"S~ c #75726A", +"T~ c #7F756F", +"U~ c #857872", +"V~ c #867671", +"W~ c #7B746D", +"X~ c #78726A", +"Y~ c #736D64", +"Z~ c #78726B", +"`~ c #726B63", +" { c #746E66", +".{ c #737067", +"+{ c #6C665D", +"@{ c #736E65", +"#{ c #6E6960", +"${ c #696259", +"%{ c #6A645A", +"&{ c #6B665C", +"*{ c #666257", +"={ c #605F54", +"-{ c #62635B", +";{ c #615F59", +">{ c #63605B", +",{ c #5F615D", +"'{ c #414E45", +"){ c #0E170C", +"!{ c #020502", +"~{ c #030B04", +"{{ c #4E5C58", +"]{ c #666562", +"^{ c #5B544D", +"/{ c #55554D", +"({ c #484E48", +"_{ c #464B44", +":{ c #45483C", +"<{ c #3D4642", +"[{ c #394041", +"}{ c #4C4740", +"|{ c #424440", +"1{ c #414949", +"2{ c #424743", +"3{ c #3D4139", +"4{ c #303934", +"5{ c #0B1610", +"6{ c #020302", +"7{ c #050F06", +"8{ c #42554F", +"9{ c #424742", +"0{ c #393F38", +"a{ c #374039", +"b{ c #39423B", +"c{ c #373F39", +"d{ c #353B35", +"e{ c #363E38", +"f{ c #363D37", +"g{ c #363E3B", +"h{ c #35403D", +"i{ c #343F3C", +"j{ c #313B37", +"k{ c #2E3A37", +"l{ c #2F3A38", +"m{ c #2F3B39", +"n{ c #2C3634", +"o{ c #293230", +"p{ c #293332", +"q{ c #233132", +"r{ c #1C3130", +"s{ c #0F2822", +"t{ c #152E29", +"u{ c #2A3F3A", +"v{ c #394944", +"w{ c #3B443E", +"x{ c #363C35", +"y{ c #323C37", +"z{ c #303D39", +"A{ c #2A3D36", +"B{ c #1E382F", +"C{ c #11221C", +"D{ c #120D0C", +"E{ c #0C0609", +"F{ c #0B070A", +"G{ c #433F40", +"H{ c #475D53", +"I{ c #2B3B2C", +"J{ c #49493A", +"K{ c #635C4E", +"L{ c #807B6F", +"M{ c #938E87", +"N{ c #948B88", +"O{ c #918481", +"P{ c #887F79", +"Q{ c #787670", +"R{ c #514C50", +"S{ c #3C333B", +"T{ c #444537", +"U{ c #5C6152", +"V{ c #737468", +"W{ c #7C786F", +"X{ c #7D726B", +"Y{ c #80736D", +"Z{ c #837771", +"`{ c #80756E", +" ] c #786E68", +".] c #756C66", +"+] c #7B736D", +"@] c #787069", +"#] c #776E67", +"$] c #746B65", +"%] c #786F69", +"&] c #79726B", +"*] c #757068", +"=] c #716C63", +"-] c #6F6A61", +";] c #6C655B", +">] c #6B645A", +",] c #696359", +"'] c #666258", +")] c #626055", +"!] c #606156", +"~] c #616159", +"{] c #5F5E59", +"]] c #4D564E", +"^] c #232C1F", +"/] c #0D120D", +"(] c #171F1C", +"_] c #4F5655", +":] c #615959", +"<] c #5E5452", +"[] c #5A5652", +"}] c #4C4F4B", +"|] c #3A453B", +"1] c #182E25", +"2] c #5D6665", +"3] c #5A5753", +"4] c #484B49", +"5] c #454D4D", +"6] c #464946", +"7] c #40433E", +"8] c #3B4340", +"9] c #1A2B22", +"0] c #07170D", +"a] c #0B1911", +"b] c #33413D", +"c] c #3D3F3C", +"d] c #3A3E37", +"e] c #3A4039", +"f] c #3A413A", +"g] c #383F38", +"h] c #394039", +"i] c #373C35", +"j] c #37403B", +"k] c #333E3A", +"l] c #333E3B", +"m] c #35413D", +"n] c #2F3835", +"o] c #2E3734", +"p] c #2D3633", +"q] c #2C3533", +"r] c #2A3333", +"s] c #253435", +"t] c #1A3032", +"u] c #0D292B", +"v] c #1C3331", +"w] c #32433F", +"x] c #3D4740", +"y] c #3B3F39", +"z] c #34413C", +"A] c #32413D", +"B] c #2F3F3A", +"C] c #263C35", +"D] c #18322D", +"E] c #151C1B", +"F] c #120A0E", +"G] c #090307", +"H] c #1D1718", +"I] c #5A5456", +"J] c #768077", +"K] c #33473B", +"L] c #3A4437", +"M] c #59564A", +"N] c #746B61", +"O] c #908A81", +"P] c #978E89", +"Q] c #8D7F7D", +"R] c #827270", +"S] c #7F7570", +"T] c #63615C", +"U] c #444141", +"V] c #3C3B3C", +"W] c #515247", +"X] c #717266", +"Y] c #79776D", +"Z] c #7C756D", +"`] c #7F756E", +" ^ c #7C736B", +".^ c #7E776F", +"+^ c #7C766D", +"@^ c #7C746D", +"#^ c #7F7871", +"$^ c #7B726C", +"%^ c #79716A", +"&^ c #766F68", +"*^ c #76736B", +"=^ c #76736A", +"-^ c #736F66", +";^ c #6F6960", +">^ c #6B645B", +",^ c #6A635A", +"'^ c #686057", +")^ c #676258", +"!^ c #616157", +"~^ c #605F58", +"{^ c #64615B", +"]^ c #625E5B", +"^^ c #5E605D", +"/^ c #4A524C", +"(^ c #39433F", +"_^ c #485052", +":^ c #5E5C5E", +"<^ c #5F5354", +"[^ c #5F5353", +"}^ c #5A5451", +"|^ c #545251", +"1^ c #4D504D", +"2^ c #30403A", +"3^ c #081C16", +"4^ c #0D1717", +"5^ c #4F605E", +"6^ c #626362", +"7^ c #4C4B4B", +"8^ c #454948", +"9^ c #424540", +"0^ c #3F433C", +"a^ c #213B34", +"b^ c #273C36", +"c^ c #39413F", +"d^ c #3E413C", +"e^ c #3A4038", +"f^ c #3B423B", +"g^ c #3A423B", +"h^ c #383E37", +"i^ c #3A423A", +"j^ c #313A36", +"k^ c #333D39", +"l^ c #303B38", +"m^ c #2F3836", +"n^ c #2A3533", +"o^ c #233232", +"p^ c #1F3434", +"q^ c #122C2E", +"r^ c #122926", +"s^ c #273834", +"t^ c #3C4A43", +"u^ c #323C3A", +"v^ c #313F3C", +"w^ c #2B3E37", +"x^ c #1C3731", +"y^ c #122928", +"z^ c #151012", +"A^ c #0C0307", +"B^ c #0C0607", +"C^ c #4C4648", +"D^ c #4E5C4F", +"E^ c #2D3E2F", +"F^ c #4C5043", +"G^ c #696156", +"H^ c #82756E", +"I^ c #948C85", +"J^ c #968A86", +"K^ c #8C7C7A", +"L^ c #7F6E6C", +"M^ c #736C69", +"N^ c #52514A", +"O^ c #424841", +"P^ c #626157", +"Q^ c #7C786E", +"R^ c #7E766E", +"S^ c #827871", +"T^ c #837A73", +"U^ c #7E786F", +"V^ c #7E7B71", +"W^ c #7E7B72", +"X^ c #7F7972", +"Y^ c #7D766F", +"Z^ c #7C746E", +"`^ c #766D67", +" / c #746D66", +"./ c #746F67", +"+/ c #726E65", +"@/ c #6B655B", +"#/ c #6E685E", +"$/ c #6B625A", +"%/ c #615F55", +"&/ c #5F5E56", +"*/ c #615D58", +"=/ c #675F5D", +"-/ c #676262", +";/ c #5F5E5D", +">/ c #5E5E5F", +",/ c #646163", +"'/ c #635C5E", +")/ c #5E5556", +"!/ c #5D5655", +"~/ c #5A5653", +"{/ c #585554", +"]/ c #4D4E4D", +"^/ c #273936", +"// c #040E0D", +"(/ c #050B0B", +"_/ c #3E4E4D", +":/ c #636565", +"( c #020A07", +",( c #030808", +"'( c #333B3A", +")( c #5E5F5F", +"!( c #4D4649", +"~( c #464B45", +"{( c #464B43", +"]( c #4A4A47", +"^( c #434544", +"/( c #3D4444", +"(( c #434A4A", +"_( c #474544", +":( c #44453E", +"<( c #3B4037", +"[( c #3E463F", +"}( c #384039", +"|( c #374340", +"1( c #343E3C", +"2( c #303A38", +"3( c #2A3931", +"4( c #273731", +"5( c #213431", +"6( c #1A3131", +"7( c #132929", +"8( c #142825", +"9( c #243630", +"0( c #354844", +"a( c #374546", +"b( c #374444", +"c( c #333F3B", +"d( c #314038", +"e( c #2C4038", +"f( c #223C37", +"g( c #112824", +"h( c #101111", +"i( c #0D0507", +"j( c #0C0708", +"k( c #534E50", +"l( c #444E45", +"m( c #384435", +"n( c #505341", +"o( c #6B6351", +"p( c #8F8377", +"q( c #9D8F86", +"r( c #8B7F7C", +"s( c #8B7E7D", +"t( c #8D8280", +"u( c #726D6B", +"v( c #4C4E4A", +"w( c #35392F", +"x( c #45483D", +"y( c #626356", +"z( c #7A766C", +"A( c #80766E", +"B( c #897C76", +"C( c #8A7E78", +"D( c #817971", +"E( c #807C73", +"F( c #7B776E", +"G( c #837D76", +"H( c #7D7670", +"I( c #7F7872", +"J( c #7D7570", +"K( c #756C65", +"L( c #7A736C", +"M( c #7A746D", +"N( c #747067", +"O( c #6D665D", +"P( c #6E695F", +"Q( c #716B63", +"R( c #6C625A", +"S( c #6E655D", +"T( c #6A665E", +"U( c #655F5A", +"V( c #675F5C", +"W( c #6D6464", +"X( c #5C5655", +"Y( c #55524E", +"Z( c #736C66", +"`( c #6C6158", +" _ c #5B5851", +"._ c #565955", +"+_ c #525553", +"@_ c #50514E", +"#_ c #4F524C", +"$_ c #4A524B", +"%_ c #26392F", +"&_ c #06130F", +"*_ c #070A0A", +"=_ c #323531", +"-_ c #575553", +";_ c #494646", +">_ c #434746", +",_ c #464940", +"'_ c #4B4A45", +")_ c #454543", +"!_ c #39413D", +"~_ c #444A48", +"{_ c #4F4F4E", +"]_ c #47473E", +"^_ c #3D4338", +"/_ c #363F3A", +"(_ c #37423F", +"__ c #333F3C", +":_ c #313D3A", +"<_ c #2E3B35", +"[_ c #28382B", +"}_ c #24352A", +"|_ c #20332E", +"1_ c #1D3232", +"2_ c #192E30", +"3_ c #112927", +"4_ c #18302A", +"5_ c #263C38", +"6_ c #39494B", +"7_ c #353F40", +"8_ c #2F3E35", +"9_ c #283D36", +"0_ c #173029", +"a_ c #0C2220", +"b_ c #0E080A", +"c_ c #0B0507", +"d_ c #110D0D", +"e_ c #969393", +"f_ c #908A89", +"g_ c #434E47", +"h_ c #414B3C", +"i_ c #62614D", +"j_ c #766C59", +"k_ c #978C7E", +"l_ c #988E83", +"m_ c #897F7C", +"n_ c #8B807E", +"o_ c #7E7774", +"p_ c #5C5C58", +"q_ c #39413B", +"r_ c #384137", +"s_ c #55584C", +"t_ c #757063", +"u_ c #827D72", +"v_ c #867B74", +"w_ c #8E817C", +"x_ c #867B75", +"y_ c #7C756E", +"z_ c #7E7771", +"A_ c #776E69", +"B_ c #716C64", +"C_ c #6E685F", +"D_ c #6D675F", +"E_ c #686056", +"F_ c #6A6159", +"G_ c #6D655D", +"H_ c #68625A", +"I_ c #6A635F", +"J_ c #6A5F5D", +"K_ c #6B6363", +"L_ c #52524E", +"M_ c #494D44", +"N_ c #767369", +"O_ c #6E6256", +"P_ c #5C584E", +"Q_ c #535050", +"R_ c #555151", +"S_ c #52514D", +"T_ c #4D5248", +"U_ c #3A463B", +"V_ c #1F3832", +"W_ c #1A292C", +"X_ c #454845", +"Y_ c #534E4B", +"Z_ c #474846", +"`_ c #444A49", +" : c #474C46", +".: c #4A4E45", +"+: c #4C4C46", +"@: c #404541", +"#: c #323D35", +"$: c #3D453E", +"%: c #575E59", +"&: c #494A41", +"*: c #3E4237", +"=: c #3D463F", +"-: c #383D36", +";: c #38423D", +">: c #37413F", +",: c #384441", +"': c #36423F", +"): c #2F3B35", +"!: c #28392C", +"~: c #26372B", +"{: c #24372F", +"]: c #213535", +"^: c #1D3134", +"/: c #0E2928", +"(: c #0C2A22", +"_: c #203935", +":: c #354447", +"<: c #363F42", +"[: c #37403C", +"}: c #323E35", +"|: c #2C3D33", +"1: c #21372E", +"2: c #112B26", +"3: c #0D1112", +"4: c #0A0406", +"5: c #070203", +"6: c #524F4F", +"7: c #7B7F7C", +"8: c #34463C", +"9: c #505645", +"0: c #6E6A56", +"a: c #837967", +"b: c #9B9285", +"c: c #8F877D", +"d: c #8A817E", +"e: c #8C8483", +"f: c #706D69", +"g: c #4B4E47", +"h: c #2F372E", +"i: c #48544C", +"j: c #66665A", +"k: c #867D70", +"l: c #878278", +"m: c #837D75", +"n: c #8A8179", +"o: c #847A73", +"p: c #827A73", +"q: c #766D66", +"r: c #716962", +"s: c #77736B", +"t: c #736F65", +"u: c #6C665C", +"v: c #6D665F", +"w: c #6D6660", +"x: c #69615A", +"y: c #6C635F", +"z: c #675D5C", +"A: c #5F5B59", +"B: c #444942", +"C: c #434D40", +"D: c #78796C", +"E: c #706558", +"F: c #5E5851", +"G: c #5B5856", +"H: c #585354", +"I: c #5A5353", +"J: c #54504D", +"K: c #505248", +"L: c #4B5044", +"M: c #3F4E48", +"N: c #3D4647", +"O: c #504F4E", +"P: c #4E4A45", +"Q: c #464B46", +"R: c #444B49", +"S: c #484C47", +"T: c #4A4D44", +"U: c #484942", +"V: c #3D443D", +"W: c #2C392F", +"X: c #333C34", +"Y: c #5E6662", +"Z: c #4E4F43", +"`: c #41473A", +" < c #3C473F", +".< c #3E453F", +"+< c #3A443F", +"@< c #36403D", +"#< c #36413F", +"$< c #333E3C", +"%< c #303C39", +"&< c #313B39", +"*< c #2C3732", +"=< c #27382B", +"-< c #25372C", +";< c #253731", +">< c #223635", +",< c #1F3435", +"'< c #142E2D", +")< c #07251A", +"!< c #19342F", +"~< c #2D3A3D", +"{< c #394346", +"]< c #3A413F", +"^< c #373F38", +"/< c #323E34", +"(< c #2D3E33", +"_< c #283C32", +":< c #17302A", +"<< c #0F1D1B", +"[< c #0D0708", +"}< c #080303", +"|< c #2A2728", +"1< c #8D8B8C", +"2< c #3F5546", +"3< c #3E4B36", +"4< c #5C5C45", +"5< c #726B54", +"6< c #8B8472", +"7< c #938D83", +"8< c #89827E", +"9< c #887F7D", +"0< c #7E7A77", +"a< c #5C625C", +"b< c #3C4238", +"c< c #5A5B51", +"d< c #787163", +"e< c #897E6F", +"f< c #888076", +"g< c #837B74", +"h< c #867D75", +"i< c #81766F", +"j< c #867C75", +"k< c #837972", +"l< c #817871", +"m< c #7B736C", +"n< c #746C65", +"o< c #716A62", +"p< c #706C63", +"q< c #757168", +"r< c #6F6B62", +"s< c #6B6362", +"t< c #6F686A", +"u< c #68625C", +"v< c #675E58", +"w< c #635E5C", +"x< c #545B58", +"y< c #364036", +"z< c #495144", +"A< c #7F8174", +"B< c #716A5F", +"C< c #5C5252", +"D< c #5C5657", +"E< c #595553", +"F< c #57554E", +"G< c #52524C", +"H< c #51514B", +"I< c #4E514C", +"J< c #504A4B", +"K< c #4E4A49", +"L< c #464C46", +"M< c #484C45", +"N< c #484C46", +"O< c #494E48", +"P< c #404844", +"Q< c #2D3735", +"R< c #2D3436", +"S< c #5B6060", +"T< c #57584B", +"U< c #3E4836", +"V< c #374439", +"W< c #364239", +"X< c #364038", +"Y< c #3B413B", +"Z< c #404640", +"`< c #3F423D", +" [ c #393F3F", +".[ c #38403F", +"+[ c #353E3C", +"@[ c #364440", +"#[ c #36433F", +"$[ c #313C3A", +"%[ c #2C3833", +"&[ c #293B35", +"*[ c #253934", +"=[ c #253935", +"-[ c #213632", +";[ c #1E3631", +">[ c #19332D", +",[ c #0D281E", +"'[ c #112C24", +")[ c #2D3E3D", +"![ c #3E494B", +"~[ c #3E4243", +"{[ c #3A413E", +"][ c #2B3F33", +"^[ c #283B2E", +"/[ c #1C352B", +"([ c #11231D", +"_[ c #130B07", +":[ c #090401", +"<[ c #0F0E0D", +"[[ c #504F4F", +"}[ c #787A70", +"|[ c #2C4531", +"1[ c #4A533B", +"2[ c #67634C", +"3[ c #7D735E", +"4[ c #9A9383", +"5[ c #958D86", +"6[ c #8A8180", +"7[ c #918786", +"8[ c #73726E", +"9[ c #41483F", +"0[ c #32382A", +"a[ c #4A4F43", +"b[ c #6C695D", +"c[ c #817A6B", +"d[ c #837B6B", +"e[ c #877F74", +"f[ c #867D76", +"g[ c #877E77", +"h[ c #81776F", +"i[ c #807770", +"j[ c #827972", +"k[ c #847D77", +"l[ c #7F7771", +"m[ c #7A726B", +"n[ c #7A716B", +"o[ c #777068", +"p[ c #79736B", +"q[ c #6D6760", +"r[ c #6B6163", +"s[ c #6D6468", +"t[ c #68635E", +"u[ c #665E59", +"v[ c #5F5D5B", +"w[ c #4A5450", +"x[ c #323B32", +"y[ c #545A4F", +"z[ c #7D7F72", +"A[ c #6A6358", +"B[ c #5E5555", +"C[ c #57534F", +"D[ c #55544A", +"E[ c #515249", +"F[ c #50524C", +"G[ c #52514C", +"H[ c #4E4E48", +"I[ c #5A5454", +"J[ c #444D44", +"K[ c #414B42", +"L[ c #484840", +"M[ c #494C46", +"N[ c #434741", +"O[ c #434944", +"P[ c #414846", +"Q[ c #2B3637", +"R[ c #293035", +"S[ c #53565A", +"T[ c #62665A", +"U[ c #404936", +"V[ c #3B453D", +"W[ c #3C423C", +"X[ c #40443F", +"Y[ c #41443F", +"Z[ c #3E4340", +"`[ c #3A3F3F", +" } c #393E3E", +".} c #394140", +"+} c #34413E", +"@} c #34413D", +"#} c #34403D", +"$} c #2C3C3A", +"%} c #263A37", +"&} c #263B38", +"*} c #233834", +"=} c #1F3530", +"-} c #1C342F", +";} c #163029", +">} c #092314", +",} c #323F3F", +"'} c #40494B", +")} c #2D3E34", +"!} c #2C3B30", +"~} c #233A30", +"{} c #132D25", +"]} c #14140E", +"^} c #0E0702", +"/} c #050302", +"(} c #343434", +"_} c #4F6256", +":} c #3A4A37", +"<} c #5B5D4B", +"[} c #746B59", +"}} c #8F8374", +"|} c #998F83", +"1} c #918781", +"2} c #8B7F80", +"3} c #897F80", +"4} c #63635F", +"5} c #384031", +"6} c #343C2C", +"7} c #55584D", +"8} c #7A7369", +"9} c #81796A", +"0} c #817C6C", +"a} c #888077", +"b} c #89817A", +"c} c #80766F", +"d} c #7B716A", +"e} c #807973", +"f} c #78716A", +"g} c #7B746C", +"h} c #716B61", +"i} c #686157", +"j} c #665E55", +"k} c #665C5B", +"l} c #665E5F", +"m} c #655E5A", +"n} c #5D5C5C", +"o} c #414A47", +"p} c #33392F", +"q} c #5B6055", +"r} c #7E7F72", +"s} c #6D665B", +"t} c #62595A", +"u} c #5D5859", +"v} c #56534F", +"w} c #56554C", +"x} c #51534A", +"y} c #4E4F4A", +"z} c #4D4D49", +"A} c #45423D", +"B} c #58514E", +"C} c #5C5B56", +"D} c #485046", +"E} c #434C42", +"F} c #494C48", +"G} c #434843", +"H} c #3F4643", +"I} c #263334", +"J} c #212D31", +"K} c #4C4E51", +"L} c #64645A", +"M} c #49503F", +"N} c #39443A", +"O} c #3A453C", +"P} c #3E453E", +"Q} c #3F433D", +"R} c #3C4242", +"S} c #3B4342", +"T} c #39403F", +"U} c #303C3A", +"V} c #283A38", +"W} c #293D3A", +"X} c #253A37", +"Y} c #1D342F", +"Z} c #1B322C", +"`} c #0F291E", +" | c #142A21", +".| c #263834", +"+| c #3C4C4B", +"@| c #323D37", +"#| c #303B34", +"$| c #303B31", +"%| c #2C3D35", +"&| c #1A372F", +"*| c #122018", +"=| c #120A06", +"-| c #191817", +";| c #616061", +">| c #878C84", +",| c #435545", +"'| c #4C5340", +")| c #6A6656", +"!| c #84786B", +"~| c #9B8E81", +"{| c #998C84", +"]| c #918582", +"^| c #908385", +"/| c #7E7778", +"(| c #4D4C45", +"_| c #343B2B", +":| c #3D4736", +"<| c #68695E", +"[| c #867C73", +"}| c #887F72", +"|| c #848071", +"1| c #878178", +"2| c #817770", +"3| c #786E67", +"4| c #776F68", +"5| c #787169", +"6| c #736D65", +"7| c #706A62", +"8| c #726D65", +"9| c #665D54", +"0| c #645A57", +"a| c #615A58", +"b| c #66615B", +"c| c #635B5B", +"d| c #575658", +"e| c #373D3B", +"f| c #34392F", +"g| c #62645A", +"h| c #807E71", +"i| c #6E685D", +"j| c #5F5757", +"k| c #5B5556", +"l| c #585652", +"m| c #545349", +"n| c #505249", +"o| c #4D514B", +"p| c #484A46", +"q| c #3C3831", +"r| c #5F5B57", +"s| c #62605A", +"t| c #484C41", +"u| c #474D44", +"v| c #4A4844", +"w| c #4A4D49", +"x| c #444944", +"y| c #243433", +"z| c #1C2C2E", +"A| c #464A4B", +"B| c #67675E", +"C| c #53584A", +"D| c #3E443C", +"E| c #3E443D", +"F| c #3B3E38", +"G| c #3E433D", +"H| c #424843", +"I| c #3D4343", +"J| c #3A4141", +"K| c #313E3B", +"L| c #2C3939", +"M| c #2A3A3A", +"N| c #2B3D3B", +"O| c #283C39", +"P| c #243A36", +"Q| c #233935", +"R| c #142E26", +"S| c #0D2A1E", +"T| c #19332A", +"U| c #2C423D", +"V| c #3C4D49", +"W| c #37423C", +"X| c #373F37", +"Y| c #33423B", +"Z| c #233A34", +"`| c #132921", +" 1 c #140D08", +".1 c #0A0301", +"+1 c #0A0706", +"@1 c #504E4E", +"#1 c #546356", +"$1 c #3F503C", +"%1 c #626450", +"&1 c #776F60", +"*1 c #93847A", +"=1 c #A7988F", +"-1 c #988C87", +";1 c #918584", +">1 c #8B7E81", +",1 c #6B6869", +"'1 c #42443B", +")1 c #383D2E", +"!1 c #4E5748", +"~1 c #78786D", +"{1 c #887D73", +"]1 c #867D71", +"^1 c #827E71", +"/1 c #817970", +"(1 c #847B73", +"_1 c #7B6F67", +":1 c #756D66", +"<1 c #79706A", +"[1 c #69625A", +"}1 c #66605A", +"|1 c #645E5A", +"11 c #625A5B", +"21 c #4E4E52", +"31 c #2F3434", +"41 c #383C34", +"51 c #68655A", +"61 c #7D776A", +"71 c #655E5E", +"81 c #5E585A", +"91 c #575350", +"01 c #514F45", +"a1 c #505148", +"b1 c #4C514C", +"c1 c #434844", +"d1 c #38362F", +"e1 c #605D58", +"f1 c #6B6760", +"g1 c #4F5144", +"h1 c #4A4544", +"i1 c #484A49", +"j1 c #484C48", +"k1 c #3F4341", +"l1 c #213430", +"m1 c #172E2C", +"n1 c #3F4545", +"o1 c #6D6B63", +"p1 c #606358", +"q1 c #444740", +"r1 c #41423E", +"s1 c #3C3D37", +"t1 c #3E403A", +"u1 c #40443E", +"v1 c #3E423C", +"w1 c #3D413C", +"x1 c #3C403E", +"y1 c #3A4140", +"z1 c #2F3B3B", +"A1 c #2E3D3D", +"B1 c #2E3F3E", +"C1 c #2B3E3D", +"D1 c #273B38", +"E1 c #253936", +"F1 c #17312A", +"G1 c #092B1C", +"H1 c #112F21", +"I1 c #213931", +"J1 c #394C47", +"K1 c #3A4540", +"L1 c #363D36", +"M1 c #323F38", +"N1 c #293B36", +"O1 c #182F27", +"P1 c #17110B", +"Q1 c #100703", +"R1 c #0A0503", +"S1 c #292626", +"T1 c #4A5C4C", +"U1 c #4B5841", +"V1 c #716F5A", +"W1 c #827969", +"X1 c #9C8D84", +"Y1 c #9E918C", +"Z1 c #908985", +"`1 c #8A8281", +" 2 c #847A7D", +".2 c #515250", +"+2 c #383B32", +"@2 c #45483A", +"#2 c #64685A", +"$2 c #807F73", +"%2 c #8C8479", +"&2 c #867F74", +"*2 c #807A6F", +"=2 c #827A72", +"-2 c #857C74", +";2 c #827971", +">2 c #7D736B", +",2 c #6A6259", +"'2 c #625E55", +")2 c #605E57", +"!2 c #5D5758", +"~2 c #46464C", +"{2 c #282E2E", +"]2 c #3F453E", +"^2 c #756F65", +"/2 c #868072", +"(2 c #70695E", +"_2 c #625B5A", +":2 c #5E5859", +"<2 c #585451", +"[2 c #58594F", +"}2 c #333932", +"|2 c #5D5852", +"12 c #565749", +"22 c #4D4C43", +"32 c #4B4546", +"42 c #474749", +"52 c #454744", +"62 c #474745", +"72 c #424745", +"82 c #203630", +"92 c #122D28", +"02 c #3B4242", +"a2 c #6F6C65", +"b2 c #6C6C63", +"c2 c #433F3C", +"d2 c #43403D", +"e2 c #434440", +"f2 c #3E413B", +"g2 c #3C3F3A", +"h2 c #383F3E", +"i2 c #363C3B", +"j2 c #35403E", +"k2 c #313C3B", +"l2 c #313E3F", +"m2 c #303D3F", +"n2 c #2F3D3E", +"o2 c #2D3D3D", +"p2 c #293B3A", +"q2 c #243734", +"r2 c #1A332D", +"s2 c #0C2D20", +"t2 c #092817", +"u2 c #1A352A", +"v2 c #2C3F38", +"w2 c #39433E", +"x2 c #38403A", +"y2 c #303D35", +"z2 c #2E3A35", +"A2 c #21332C", +"B2 c #142117", +"C2 c #140804", +"D2 c #0B0402", +"E2 c #0E0B0A", +"F2 c #6B6A68", +"G2 c #6E7B6F", +"H2 c #405441", +"I2 c #555F46", +"J2 c #76725A", +"K2 c #867B6B", +"L2 c #9B928C", +"M2 c #8D8A86", +"N2 c #858180", +"O2 c #746E6F", +"P2 c #414842", +"Q2 c #343B32", +"R2 c #55584E", +"S2 c #737265", +"T2 c #838173", +"U2 c #848073", +"V2 c #837D72", +"W2 c #817771", +"X2 c #7F746D", +"Y2 c #756E66", +"Z2 c #6F695F", +"`2 c #716B62", +" 3 c #6B655C", +".3 c #676056", +"+3 c #615E54", +"@3 c #635E5A", +"#3 c #5A5256", +"$3 c #3F3F45", +"%3 c #252E2E", +"&3 c #7C7469", +"*3 c #8C8477", +"=3 c #5F5556", +"-3 c #595552", +";3 c #58584F", +">3 c #4F4F46", +",3 c #474B46", +"'3 c #343B38", +")3 c #30362F", +"!3 c #605D56", +"~3 c #706C62", +"{3 c #5A5A4B", +"]3 c #504E45", +"^3 c #4C4549", +"/3 c #464649", +"(3 c #464846", +"_3 c #474645", +":3 c #1F342E", +"<3 c #122D27", +"[3 c #675F58", +"}3 c #6D6961", +"|3 c #555352", +"13 c #484342", +"23 c #454240", +"33 c #42423E", +"43 c #3A3F3A", +"53 c #3B413D", +"63 c #394441", +"73 c #303A3B", +"83 c #2E383B", +"93 c #2D383A", +"03 c #2C3D3C", +"a3 c #2B3C3A", +"b3 c #273937", +"c3 c #1E3430", +"d3 c #113025", +"e3 c #062513", +"f3 c #102C1D", +"g3 c #273931", +"h3 c #3F4D48", +"i3 c #38423C", +"j3 c #2F3E32", +"k3 c #2F3E34", +"l3 c #293933", +"m3 c #152F25", +"n3 c #170C07", +"o3 c #070302", +"p3 c #403D3C", +"q3 c #637062", +"r3 c #3F503A", +"s3 c #5F6448", +"t3 c #79745D", +"u3 c #8A7E70", +"v3 c #A2968E", +"w3 c #989089", +"x3 c #87817D", +"y3 c #7D7976", +"z3 c #3D453D", +"A3 c #64645B", +"B3 c #837E73", +"C3 c #858071", +"D3 c #827F70", +"E3 c #877D77", +"F3 c #7F756D", +"G3 c #7E746D", +"H3 c #7E736C", +"I3 c #7F766E", +"J3 c #70675F", +"K3 c #6C635B", +"L3 c #746F66", +"M3 c #6F685F", +"N3 c #6E675E", +"O3 c #6C645B", +"P3 c #686159", +"Q3 c #676059", +"R3 c #66605C", +"S3 c #353A3C", +"T3 c #212F2B", +"U3 c #474F43", +"V3 c #7E7568", +"W3 c #8D8375", +"X3 c #71695F", +"Y3 c #5E5655", +"Z3 c #5C5656", +"`3 c #57524D", +" 4 c #555348", +".4 c #4C4D44", +"+4 c #424842", +"@4 c #2C3531", +"#4 c #2C352D", +"$4 c #5F6156", +"%4 c #757165", +"&4 c #645F52", +"*4 c #545049", +"=4 c #464645", +"-4 c #454945", +";4 c #1E352D", +">4 c #0D2B21", +",4 c #303C35", +"'4 c #605C4F", +")4 c #706C61", +"!4 c #5C5854", +"~4 c #484140", +"{4 c #42413E", +"]4 c #40413F", +"^4 c #3F4240", +"/4 c #3A423E", +"(4 c #394240", +"_4 c #3B4543", +":4 c #384340", +"<4 c #323E3C", +"[4 c #303C3B", +"}4 c #2F3B3A", +"|4 c #2D3B3A", +"14 c #2E3B3B", +"24 c #2D3D3B", +"34 c #293A37", +"44 c #223632", +"54 c #143128", +"64 c #0B291B", +"74 c #082513", +"84 c #20362E", +"94 c #3A4846", +"04 c #323F35", +"a4 c #2E3D32", +"b4 c #333B37", +"c4 c #1C342D", +"d4 c #15150D", +"e4 c #100906", +"f4 c #080301", +"g4 c #161211", +"h4 c #465443", +"i4 c #545942", +"j4 c #6C6B4F", +"k4 c #7C7963", +"l4 c #91887D", +"m4 c #9B938C", +"n4 c #8F877E", +"o4 c #897F76", +"p4 c #746F68", +"q4 c #4B5048", +"r4 c #32392E", +"s4 c #50554D", +"t4 c #897E72", +"u4 c #8C8373", +"v4 c #888373", +"w4 c #7B7269", +"x4 c #7A7068", +"y4 c #796F67", +"z4 c #796F66", +"A4 c #797068", +"B4 c #70665F", +"C4 c #716761", +"D4 c #6D635B", +"E4 c #6B6058", +"F4 c #6E635C", +"G4 c #6E5F5A", +"H4 c #71625E", +"I4 c #6A6560", +"J4 c #4B514A", +"K4 c #21342A", +"L4 c #4D5648", +"M4 c #8E8376", +"N4 c #5B5653", +"O4 c #554F47", +"P4 c #524D41", +"Q4 c #4A4B42", +"R4 c #3E4741", +"S4 c #25362D", +"T4 c #213124", +"U4 c #555B49", +"V4 c #797261", +"W4 c #706359", +"X4 c #564D4C", +"Y4 c #4B4847", +"Z4 c #474940", +"`4 c #40483F", +" 5 c #3C443C", +".5 c #34403A", +"+5 c #1B362C", +"@5 c #082919", +"#5 c #263B2B", +"$5 c #585D47", +"%5 c #716D5D", +"&5 c #4A4641", +"*5 c #3F433F", +"=5 c #3F4043", +"-5 c #3E4040", +";5 c #39403B", +">5 c #3B4844", +",5 c #33403D", +"'5 c #2C3C37", +")5 c #2E3E3A", +"!5 c #243932", +"~5 c #153228", +"{5 c #123027", +"]5 c #06271B", +"^5 c #14312D", +"/5 c #314040", +"(5 c #414547", +"_5 c #3B433E", +":5 c #313E34", +"<5 c #2F3E3B", +"[5 c #213831", +"}5 c #0D251A", +"|5 c #100E0A", +"15 c #0C0403", +"25 c #787474", +"35 c #797B73", +"45 c #3E493A", +"55 c #62634E", +"65 c #767259", +"75 c #837B69", +"85 c #9B9187", +"95 c #928A83", +"05 c #8A837B", +"a5 c #867F76", +"b5 c #66655C", +"c5 c #3C4137", +"d5 c #343A2E", +"e5 c #595B52", +"f5 c #7F7B72", +"g5 c #91867C", +"h5 c #918779", +"i5 c #8E8879", +"j5 c #837D71", +"k5 c #807970", +"l5 c #888079", +"m5 c #847C74", +"n5 c #7E746C", +"o5 c #80776F", +"p5 c #7E746E", +"q5 c #807871", +"r5 c #746B64", +"s5 c #70655E", +"t5 c #71665F", +"u5 c #726861", +"v5 c #6D615A", +"w5 c #6E625B", +"x5 c #6F645E", +"y5 c #6A5E57", +"z5 c #6C615A", +"A5 c #685D5A", +"B5 c #605E5A", +"C5 c #414A45", +"D5 c #20322C", +"E5 c #263B35", +"F5 c #51574F", +"G5 c #837B70", +"H5 c #8F8379", +"I5 c #736963", +"J5 c #5F5957", +"K5 c #555048", +"L5 c #565549", +"M5 c #4D504A", +"N5 c #203427", +"O5 c #4F5444", +"P5 c #7C7463", +"Q5 c #766A60", +"R5 c #514C49", +"S5 c #464D47", +"T5 c #424A3D", +"U5 c #404B40", +"V5 c #3F4840", +"W5 c #37453E", +"X5 c #0B2721", +"Y5 c #253930", +"Z5 c #505547", +"`5 c #6D6A5D", +" 6 c #68655F", +".6 c #46423C", +"+6 c #3E433F", +"@6 c #3D4243", +"#6 c #3F4044", +"$6 c #3E4041", +"%6 c #38403B", +"&6 c #37413C", +"*6 c #2F3E39", +"=6 c #2C3D36", +"-6 c #283730", +";6 c #253830", +">6 c #18332A", +",6 c #16322B", +"'6 c #0B2C25", +")6 c #092A26", +"!6 c #293A3A", +"~6 c #424B4C", +"{6 c #343F3A", +"]6 c #273C38", +"^6 c #112B24", +"/6 c #12100E", +"(6 c #0E0503", +"_6 c #413F3F", +":6 c #52766B", +"<6 c #424F3E", +"[6 c #696953", +"}6 c #7D7561", +"|6 c #8C8172", +"16 c #9E9289", +"26 c #958C86", +"36 c #8D8982", +"46 c #7C7A72", +"56 c #55564D", +"66 c #34382B", +"76 c #42493B", +"86 c #6A6D63", +"96 c #868179", +"06 c #93877F", +"a6 c #8A8175", +"b6 c #827B71", +"c6 c #877E76", +"d6 c #7E756D", +"e6 c #756A62", +"f6 c #786D65", +"g6 c #776D65", +"h6 c #726961", +"i6 c #6F655E", +"j6 c #716861", +"k6 c #6E645D", +"l6 c #6C6058", +"m6 c #6C5F58", +"n6 c #695C55", +"o6 c #675B54", +"p6 c #655E59", +"q6 c #5E5B58", +"r6 c #515450", +"s6 c #193130", +"t6 c #213B3B", +"u6 c #495351", +"v6 c #7F7D77", +"w6 c #8E857E", +"x6 c #706661", +"y6 c #5C5756", +"z6 c #534F4D", +"A6 c #544F48", +"B6 c #4A4F48", +"C6 c #173127", +"D6 c #223831", +"E6 c #515148", +"F6 c #7C7163", +"G6 c #796F63", +"H6 c #4F4E47", +"I6 c #414D44", +"J6 c #3C4738", +"K6 c #3E473C", +"L6 c #414A41", +"M6 c #39453F", +"N6 c #233639", +"O6 c #091E28", +"P6 c #203439", +"Q6 c #404A48", +"R6 c #636761", +"S6 c #6A6B65", +"T6 c #47463E", +"U6 c #393D3A", +"V6 c #3C4243", +"W6 c #3E4143", +"X6 c #3E4140", +"Y6 c #37403A", +"Z6 c #323F3B", +"`6 c #2D3C37", +" 7 c #2D3E37", +".7 c #2E3F39", +"+7 c #2C3D38", +"@7 c #263731", +"#7 c #1D352E", +"$7 c #11302C", +"%7 c #072724", +"&7 c #1E322F", +"*7 c #3C4A48", +"=7 c #3D4841", +"-7 c #333E39", +";7 c #2D413E", +">7 c #121917", +",7 c #100504", +"'7 c #2B2929", +")7 c #838282", +"!7 c #395446", +"~7 c #545E4C", +"{7 c #75715C", +"]7 c #807564", +"^7 c #93867A", +"/7 c #9E9189", +"(7 c #958D87", +"_7 c #87847D", +":7 c #45473E", +"<7 c #383C2F", +"[7 c #53594A", +"}7 c #7B7B70", +"|7 c #8C847C", +"17 c #938880", +"27 c #8B837B", +"37 c #7F7B70", +"47 c #7F786F", +"57 c #7C7169", +"67 c #7B7069", +"77 c #766A62", +"87 c #786E65", +"97 c #736B64", +"07 c #6F645D", +"a7 c #6C6059", +"b7 c #70655F", +"c7 c #6A5F58", +"d7 c #635F59", +"e7 c #5B5D5A", +"f7 c #4E5652", +"g7 c #2B3C38", +"h7 c #102C2D", +"i7 c #0C1D20", +"j7 c #232B29", +"k7 c #657067", +"l7 c #8C8A84", +"m7 c #6A615D", +"n7 c #565151", +"o7 c #52504E", +"p7 c #53514B", +"q7 c #53534B", +"r7 c #494F4A", +"s7 c #192F2A", +"t7 c #243937", +"u7 c #524F4E", +"v7 c #81756D", +"w7 c #7E7268", +"x7 c #534E46", +"y7 c #424B42", +"z7 c #3C4436", +"A7 c #3F453A", +"B7 c #41493F", +"C7 c #1F3537", +"D7 c #051D28", +"E7 c #0A1A22", +"F7 c #141D1C", +"G7 c #393D37", +"H7 c #676962", +"I7 c #535851", +"J7 c #383E3A", +"K7 c #3C4142", +"L7 c #3C413F", +"M7 c #35413B", +"N7 c #2D3B35", +"O7 c #2C3E37", +"P7 c #243934", +"Q7 c #1E3632", +"R7 c #183532", +"S7 c #0D2E2A", +"T7 c #11291F", +"U7 c #2E3E39", +"V7 c #323D38", +"W7 c #304240", +"X7 c #1F3635", +"Y7 c #141E1D", +"Z7 c #130706", +"`7 c #090402", +" 8 c #171616", +".8 c #82A89F", +"+8 c #374833", +"@8 c #656B56", +"#8 c #7C7561", +"$8 c #86796A", +"%8 c #9E9389", +"&8 c #9A9087", +"*8 c #8E8880", +"=8 c #7C7C76", +"-8 c #595C58", +";8 c #3A3C33", +">8 c #41453B", +",8 c #626656", +"'8 c #8B8179", +")8 c #8E827C", +"!8 c #88817A", +"~8 c #86827A", +"{8 c #847973", +"]8 c #7A6F68", +"^8 c #7D736C", +"/8 c #7C726C", +"(8 c #726862", +"_8 c #6E645C", +":8 c #6E625C", +"<8 c #695D56", +"[8 c #625D57", +"}8 c #5A5D57", +"|8 c #4C534E", +"18 c #253833", +"28 c #092221", +"38 c #02090A", +"48 c #09100D", +"58 c #3F4C43", +"68 c #7C8179", +"78 c #625A57", +"88 c #544F50", +"98 c #525152", +"08 c #514F4C", +"a8 c #52554E", +"b8 c #464C49", +"c8 c #323C3B", +"d8 c #25393F", +"e8 c #4E5457", +"f8 c #837B76", +"g8 c #887A71", +"h8 c #5E544C", +"i8 c #4A4F47", +"j8 c #40473C", +"k8 c #40443D", +"l8 c #3E433A", +"m8 c #1F3333", +"n8 c #05222A", +"o8 c #011116", +"p8 c #020403", +"q8 c #1E2019", +"r8 c #61645D", +"s8 c #59605A", +"t8 c #363F39", +"u8 c #384140", +"v8 c #3B4142", +"w8 c #393F3D", +"x8 c #35423A", +"y8 c #334038", +"z8 c #323B38", +"A8 c #34403E", +"B8 c #2A3A34", +"C8 c #2A3933", +"D8 c #2B3B36", +"E8 c #273733", +"F8 c #1C3634", +"G8 c #112E2C", +"H8 c #092217", +"I8 c #1E322A", +"J8 c #3B423A", +"K8 c #273A3B", +"L8 c #152526", +"M8 c #110D0C", +"N8 c #100F0F", +"O8 c #3D3C3C", +"P8 c #648377", +"Q8 c #49553D", +"R8 c #73735C", +"S8 c #817663", +"T8 c #8E8378", +"U8 c #959087", +"V8 c #868376", +"W8 c #88847B", +"X8 c #757570", +"Y8 c #4C4F4C", +"Z8 c #383833", +"`8 c #767565", +" 9 c #8F8778", +".9 c #8C7F76", +"+9 c #8B7E7A", +"@9 c #857D79", +"#9 c #807C77", +"$9 c #796E66", +"%9 c #7B7068", +"&9 c #796E67", +"*9 c #766B63", +"=9 c #7A7069", +"-9 c #736A62", +";9 c #716760", +">9 c #6D625B", +",9 c #6B5F58", +"'9 c #6A5E56", +")9 c #695E56", +"!9 c #625C53", +"~9 c #5F5F55", +"{9 c #585C55", +"]9 c #313D38", +"^9 c #0C2627", +"/9 c #021213", +"(9 c #0A1A13", +"_9 c #314339", +":9 c #696C65", +"<9 c #545254", +"[9 c #4E4C4A", +"}9 c #4E504B", +"|9 c #424947", +"19 c #2E3639", +"29 c #15222A", +"39 c #0D2029", +"49 c #1F2929", +"59 c #5B5C4F", +"69 c #837C70", +"79 c #64574E", +"89 c #39433A", +"99 c #273935", +"09 c #0B2529", +"a9 c #011B1D", +"b9 c #010F09", +"c9 c #1E2B20", +"d9 c #5B6259", +"e9 c #535C55", +"f9 c #353F3E", +"g9 c #394141", +"h9 c #363E3C", +"i9 c #313E36", +"j9 c #2C3E38", +"k9 c #2C3736", +"l9 c #243634", +"m9 c #1E3836", +"n9 c #153130", +"o9 c #0A2016", +"p9 c #112519", +"q9 c #37453C", +"r9 c #404641", +"s9 c #333D38", +"t9 c #323A39", +"u9 c #323A3C", +"v9 c #2D3B3E", +"w9 c #1D2C30", +"x9 c #141112", +"y9 c #0D0D0B", +"z9 c #2F2E2F", +"A9 c #476353", +"B9 c #5C664E", +"C9 c #7D7860", +"D9 c #867967", +"E9 c #92887E", +"F9 c #88887E", +"G9 c #838476", +"H9 c #7F7D73", +"I9 c #6B6B67", +"J9 c #454847", +"K9 c #3A3836", +"L9 c #5C5A55", +"M9 c #807A6A", +"N9 c #8E8373", +"O9 c #8F8279", +"P9 c #8E827E", +"Q9 c #837C7A", +"R9 c #76716D", +"S9 c #81756F", +"T9 c #776C64", +"U9 c #756961", +"V9 c #6C5F59", +"W9 c #6B5E58", +"X9 c #6A5D56", +"Y9 c #675A53", +"Z9 c #685A53", +"`9 c #675B53", +" 0 c #635B50", +".0 c #5E5A4C", +"+0 c #5E5D55", +"@0 c #434947", +"#0 c #1D2E32", +"$0 c #0A242A", +"%0 c #192C2B", +"&0 c #5B5352", +"*0 c #4E4A4D", +"=0 c #4E4E50", +"-0 c #4E4F4D", +";0 c #494B46", +">0 c #414947", +",0 c #2A3236", +"'0 c #0F2127", +")0 c #021116", +"!0 c #060805", +"~0 c #323728", +"{0 c #757666", +"]0 c #665C51", +"^0 c #44433A", +"/0 c #3D473E", +"(0 c #3E433C", +"_0 c #3F443B", +":0 c #363E3A", +"<0 c #222C2F", +"[0 c #0B2525", +"}0 c #06291C", +"|0 c #213729", +"10 c #4A4C42", +"20 c #42483F", +"30 c #354140", +"40 c #374040", +"50 c #324037", +"60 c #35433C", +"70 c #2C3C36", +"80 c #2E3E38", +"90 c #2E3A38", +"00 c #213938", +"a0 c #173633", +"b0 c #0A251A", +"c0 c #0C2316", +"d0 c #303E33", +"e0 c #35403B", +"f0 c #343A3C", +"g0 c #2F3B3F", +"h0 c #1E3136", +"i0 c #141A1B", +"j0 c #0F0B09", +"k0 c #090908", +"l0 c #363636", +"m0 c #81A29B", +"n0 c #455B4B", +"o0 c #686C51", +"p0 c #7E765C", +"q0 c #8B7F6E", +"r0 c #9B9188", +"s0 c #8C887E", +"t0 c #858478", +"u0 c #79776E", +"v0 c #5D5D5A", +"w0 c #42423C", +"x0 c #6A635C", +"y0 c #8A8173", +"z0 c #8F8576", +"A0 c #93877D", +"B0 c #8D847E", +"C0 c #827C78", +"D0 c #7C7772", +"E0 c #7A736D", +"F0 c #796F68", +"G0 c #746860", +"H0 c #756861", +"I0 c #776A63", +"J0 c #776862", +"K0 c #776A64", +"L0 c #6D625D", +"M0 c #6C605B", +"N0 c #6B5F5A", +"O0 c #6A5F5A", +"P0 c #665B55", +"Q0 c #665D56", +"R0 c #60584F", +"S0 c #5D554C", +"T0 c #605B56", +"U0 c #575857", +"V0 c #43494C", +"W0 c #364146", +"X0 c #434C4C", +"Y0 c #515351", +"Z0 c #575451", +"`0 c #53504E", +" a c #4C4C4B", +".a c #4A4B4B", +"+a c #4B4E4C", +"@a c #424645", +"#a c #2C3532", +"$a c #0E2922", +"%a c #031E16", +"&a c #060C08", +"*a c #2A372B", +"=a c #636D60", +"-a c #5F5D55", +";a c #3E4239", +">a c #364238", +",a c #3E4843", +"'a c #3D443C", +")a c #3C3E35", +"!a c #3D413D", +"~a c #363D3C", +"{a c #23392F", +"]a c #303F35", +"^a c #393E37", +"/a c #384541", +"(a c #374241", +"_a c #374140", +":a c #34423D", +"b c #363F3C", +",b c #313D3B", +"'b c #313E3A", +")b c #313A38", +"!b c #293731", +"~b c #20372D", +"{b c #16382D", +"]b c #092E21", +"^b c #032114", +"/b c #0F2F26", +"(b c #2F4843", +"_b c #3C4640", +":b c #3B3E39", +"c c #100609", +",c c #100A0B", +"'c c #545151", +")c c #88A6A1", +"!c c #556B61", +"~c c #586550", +"{c c #86866C", +"]c c #8C866F", +"^c c #938A80", +"/c c #A0948E", +"(c c #8E837D", +"_c c #7E7872", +":c c #413E39", +"d c #716660", +",d c #6C6159", +"'d c #6B605B", +")d c #6A615E", +"!d c #625955", +"~d c #635B57", +"{d c #5F5953", +"]d c #5C5953", +"^d c #54504F", +"/d c #565352", +"(d c #585856", +"_d c #52514E", +":d c #4D4F4B", +"e c #041E0E", +",e c #122B24", +"'e c #304041", +")e c #3A4647", +"!e c #363C3A", +"~e c #343B37", +"{e c #303D3A", +"]e c #243B37", +"^e c #112D27", +"/e c #130708", +"(e c #0D0608", +"_e c #221D1E", +":e c #757172", +"f c #665F57", +",f c #605A4F", +"'f c #645F54", +")f c #645D52", +"!f c #62594F", +"~f c #756E67", +"{f c #706760", +"]f c #685C55", +"^f c #665951", +"/f c #655B55", +"(f c #5E5651", +"_f c #645F5B", +":f c #5D5B55", +"g c #4B4C47", +",g c #454B46", +"'g c #434842", +")g c #40453F", +"!g c #3F4740", +"~g c #3E4740", +"{g c #3F453F", +"]g c #3D3F39", +"^g c #3D3F3B", +"/g c #3C423E", +"(g c #393F3B", +"_g c #3B413E", +":g c #3A403D", +"h c #14160E", +",h c #120805", +"'h c #0B0302", +")h c #100B0A", +"!h c #545050", +"~h c #5A6E61", +"{h c #7E816D", +"]h c #8E8D77", +"^h c #94887C", +"/h c #978882", +"(h c #8F8681", +"_h c #848079", +":h c #66645E", +"i c #64584F", +",i c #666156", +"'i c #5E5B54", +")i c #5D5B5A", +"!i c #585655", +"~i c #544F4E", +"{i c #504B4A", +"]i c #504D4B", +"^i c #50524F", +"/i c #4B4945", +"(i c #4A4743", +"_i c #4B4A47", +":i c #3F4841", +"j c #162D28", +",j c #272221", +"'j c #747170", +")j c #557367", +"!j c #69725E", +"~j c #98967D", +"{j c #948D74", +"]j c #9C8E82", +"^j c #91847E", +"/j c #686763", +"(j c #374238", +"_j c #556055", +":j c #86887B", +"k c #393E3F", +",k c #373A3B", +"'k c #313C37", +")k c #303932", +"!k c #353E36", +"~k c #333935", +"{k c #2C3E3A", +"]k c #223832", +"^k c #11342F", +"/k c #02231C", +"(k c #0D2620", +"_k c #2E3C3B", +":k c #414545", +"l c #3F462F", +",l c #757867", +"'l c #8E857B", +")l c #847D76", +"!l c #837975", +"~l c #796E6C", +"{l c #6C6562", +"]l c #5B5953", +"^l c #53534D", +"/l c #4D4F48", +"(l c #4C4C45", +"_l c #4D4A43", +":l c #625B54", +"m c #444A45", +",m c #3E423D", +"'m c #3D413B", +")m c #38433F", +"!m c #2D3E39", +"~m c #2D4039", +"{m c #1B352A", +"]m c #0B2A20", +"^m c #022119", +"/m c #173132", +"(m c #3E4C4D", +"_m c #3C4642", +":m c #324038", +"n c #8A8978", +",n c #988D81", +"'n c #928680", +")n c #79716C", +"!n c #6A6362", +"~n c #605C5C", +"{n c #535250", +"]n c #444640", +"^n c #474843", +"/n c #4E4B47", +"(n c #5F5955", +"_n c #67625D", +":n c #5C554F", +"o c #858C76", +",o c #A3A48A", +"'o c #98947A", +")o c #968E7D", +"!o c #867E79", +"~o c #797573", +"{o c #656562", +"]o c #3F4945", +"^o c #353F36", +"/o c #686D5F", +"(o c #8C8878", +"_o c #91817C", +":o c #807470", +"p c #526356", +",p c #93997E", +"'p c #A3A286", +")p c #9D977E", +"!p c #94897A", +"~p c #767373", +"{p c #5A5A59", +"]p c #7B7D70", +"^p c #8D8778", +"/p c #94877D", +"(p c #93817D", +"_p c #7C6F6A", +":p c #67665D", +"

Q c #F9F9F7", +",Q c #A2A2A2", +"'Q c #BBCEBC", +")Q c #63B969", +"!Q c #BEC7BD", +"~Q c #EAE9E8", +"{Q c #FAF7F8", +"]Q c #A4A4A4", +"^Q c #506E6E", +"/Q c #222521", +"(Q c #37453F", +"_Q c #2F4340", +":Q c #183230", +"R c #37565D", +",R c #7A8875", +"'R c #B3B5A2", +")R c #7E7D6F", +"!R c #5C6157", +"~R c #474F45", +"{R c #3B4B3F", +"]R c #5A635E", +"^R c #E9E8E8", +"/R c #DDDFE0", +"(R c #B5B3B9", +"_R c #959499", +":R c #BBC0BD", +"S c #F6F8F8", +",S c #EEF1EF", +"'S c #D8DADB", +")S c #CFCFD2", +"!S c #ABA9AF", +"~S c #8E8D92", +"{S c #B8C1BB", +"]S c #8FC394", +"^S c #122813", +"/S c #000000", +"(S c #A7B3A8", +"_S c #F6F5F9", +":S c #FDFDFE", +"T c #617D84", +",T c #3F5D65", +"'T c #374E56", +")T c #84937E", +"!T c #BEC3AE", +"~T c #ABAE9C", +"{T c #747061", +"]T c #515349", +"^T c #CBCCCE", +"/T c #A09FA3", +"(T c #87858A", +"_T c #BDBFC0", +":T c #A2B4A4", +"U c #D7D7D8", +",U c #C9CDCA", +"'U c #9A9C9C", +")U c #848187", +"!U c #A5AAA7", +"~U c #CFD4D0", +"{U c #F2F2F3", +"]U c #3A4946", +"^U c #657883", +"/U c #425B66", +"(U c #394E57", +"_U c #7D8F76", +":U c #B9C1AB", +"V c #F0F0F1", +",V c #68716F", +"'V c #1F2624", +")V c #394845", +"!V c #070102", +"~V c #425C68", +"{V c #3A4F59", +"]V c #4A4F49", +"^V c #83937B", +"/V c #B8C0AB", +"(V c #A1A694", +"_V c #716C5D", +":V c #55554C", +"W c #79777C", +",W c #B6B7B9", +"'W c #7DAD83", +")W c #5AC461", +"!W c #F0F1F2", +"~W c #567575", +"{W c #364641", +"]W c #334745", +"^W c #233B3B", +"/W c #122725", +"(W c #455F6B", +"_W c #3C525A", +":W c #4D534D", +"X c #73A577", +",X c #C3C8C5", +"'X c #EEEEEF", +")X c #496767", +"!X c #262C29", +"~X c #354440", +"{X c #394947", +"]X c #394D4C", +"^X c #284342", +"/X c #152A29", +"(X c #0F0C0B", +"_X c #2B2A2A", +":X c #788A98", +"Y c #1F3F3F", +",Y c #394949", +"'Y c #364945", +")Y c #29423D", +"!Y c #7A929C", +"~Y c #4E7A70", +"{Y c #7B917D", +"]Y c #BDC2AF", +"^Y c #A7AA99", +"/Y c #645F50", +"(Y c #4B4F4B", +"_Y c #414845", +":Y c #394C46", +"Z c #BBC1AC", +",Z c #A2A695", +"'Z c #686355", +")Z c #354F49", +"!Z c #80918F", +"~Z c #F5F5F3", +"{Z c #EEEEED", +"]Z c #C7CACD", +"^Z c #A6A7AC", +"/Z c #656469", +"(Z c #939C94", +"_Z c #79BE7E", +":Z c #C8CECA", +"` c #EBEEEC", +",` c #CED0CE", +"'` c #CBCCCF", +")` c #B7B9BE", +"!` c #7B8182", +"~` c #283430", +"{` c #344846", +"]` c #384747", +"^` c #384946", +"/` c #384D47", +"(` c #29443F", +"_` c #0F0B0A", +":` c #070104", +"<` c #5D7E70", +"[` c #83957C", +"}` c #B9C0A8", +"|` c #9AA590", +"1` c #5B5C4B", +"2` c #4B4C43", +"3` c #384E4A", +"4` c #63716C", +"5` c #EFF4F6", +"6` c #D8DADE", +"7` c #B4B2B4", +"8` c #696869", +"9` c #7B877C", +"0` c #80C085", +"a` c #D3D5D3", +"b` c #CBCDCC", +"c` c #B5B7BC", +"d` c #73797A", +"e` c #1C3832", +"f` c #374744", +"g` c #354944", +"h` c #27423C", +"i` c #162A25", +"j` c #100D0B", +"k` c #080205", +"l` c #58796C", +"m` c #B2BCA3", +"n` c #98A38E", +"o` c #5F6150", +"p` c #494A40", +"q` c #414341", +"r` c #384F4B", +"s` c #576F6B", +"t` c #D8E0E0", +"u` c #F0F5F8", +"v` c #DADCDF", +"w` c #C6C7CA", +"x` c #B6B5B6", +"y` c #6C6B6B", +"z` c #758276", +"A` c #7DC182", +"B` c #D6D8D5", +"C` c #E8EBE9", +"D` c #CACCCA", +"E` c #B3B6BA", +"F` c #6B7172", +"G` c #183531", +"H` c #384D4B", +"I` c #394848", +"J` c #394A47", +"K` c #26403A", +"L` c #152924", +"M` c #57776A", +"N` c #809078", +"O` c #BAC1A9", +"P` c #909A85", +"Q` c #5C5E4D", +"R` c #404240", +"S` c #364E49", +"T` c #4D6965", +"U` c #CFD8D8", +"V` c #F0F6F8", +"W` c #DADCE0", +"X` c #C7C8CB", +"Y` c #BAB9BA", +"Z` c #717D71", +"`` c #7EC184", +" . c #D6D7D5", +". . c #FCFAFC", +"+ . c #E5E9E7", +"@ . c #CDCFCE", +"# . c #B2B4B8", +"$ . c #616F6F", +"% . c #364343", +"& . c #28433D", +"* . c #303031", +"= . c #5B7B6F", +"- . c #7A8B72", +"; . c #B6BDA6", +"> . c #9AA490", +", . c #48483F", +"' . c #49625E", +") . c #C7CECE", +"! . c #F2F7F9", +"~ . c #DDDEE2", +"{ . c #C9C9CC", +"] . c #BEBDBE", +"^ . c #717272", +"/ . c #6D776D", +"( . c #85BF89", +"_ . c #FCFCFD", +": . c #E4E7E5", +"< . c #CCCECD", +"[ . c #ABADB2", +"} . c #556A6B", +"| . c #1E302D", +"1 . c #344946", +"2 . c #354843", +"3 . c #152A24", +"4 . c #100C0A", +"5 . c #313132", +"6 . c #5C7D70", +"7 . c #7A8C73", +"8 . c #B4BDA5", +"9 . c #9CA692", +"0 . c #5B5B4A", +"a . c #48483E", +"b . c #414441", +"c . c #354A46", +"d . c #475753", +"e . c #F3F7F9", +"f . c #DCDEE2", +"g . c #C7C7CA", +"h . c #BFBDBF", +"i . c #777777", +"j . c #666F66", +"k . c #89BD8D", +"l . c #5BC263", +"m . c #D9DBD9", +"n . c #FDFBFD", +"o . c #E2E5E4", +"p . c #CBCBCF", +"q . c #A5A7AC", +"r . c #506465", +"s . c #1E2E2B", +"t . c #354846", +"u . c #334641", +"v . c #29433D", +"w . c #5F8175", +"x . c #BAC0A8", +"y . c #9DA691", +"z . c #5A5C4B", +"A . c #3E443F", +"B . c #374B46", +"C . c #43514C", +"D . c #B9B7B6", +"E . c #F5F9F9", +"F . c #DFE1E4", +"G . c #C9C9CB", +"H . c #C2C1C3", +"I . c #7E7E7E", +"J . c #606662", +"K . c #8CB98F", +"L . c #5CC164", +"M . c #6BC071", +"N . c #DBDDDB", +"O . c #E0E3E2", +"P . c #CBCCCA", +"Q . c #CCCBCE", +"R . c #A3A4A8", +"S . c #495C5D", +"T . c #1C2B27", +"U . c #374A48", +"V . c #334741", +"W . c #27413C", +"X . c #060203", +"Y . c #628478", +"Z . c #84927B", +"` . c #BBBEA8", +" .. c #A3A896", +"... c #5D6150", +"+.. c #3F483A", +"@.. c #35423B", +"#.. c #364941", +"$.. c #374C45", +"%.. c #ADB2AD", +"&.. c #5D615F", +"*.. c #8EB591", +"=.. c #5DC064", +"-.. c #9DAB9B", +";.. c #E0E1E2", +">.. c #FCFCFE", +",.. c #FBFAFB", +"'.. c #DCDFDD", +").. c #CBC8CB", +"!.. c #A0A0A1", +"~.. c #455652", +"{.. c #222C25", +"].. c #374944", +"^.. c #3B4A4A", +"/.. c #344843", +"(.. c #142822", +"_.. c #698D80", +":.. c #8A9981", +"<.. c #BDBFAA", +"[.. c #9CA290", +"}.. c #5D6050", +"|.. c #3E4638", +"1.. c #354339", +"2.. c #33463B", +"3.. c #2A4A42", +"4.. c #9CACA6", +"5.. c #F8F8F6", +"6.. c #5C5F5D", +"7.. c #8BB28E", +"8.. c #5EC265", +"9.. c #A4AAA2", +"0.. c #E3E5E6", +"a.. c #FEFDFF", +"b.. c #F9FAFB", +"c.. c #DADCDB", +"d.. c #CCCBCA", +"e.. c #C9C6C8", +"f.. c #9A999B", +"g.. c #242E25", +"h.. c #384843", +"i.. c #3A4948", +"j.. c #29443D", +"k.. c #152A25", +"l.. c #110E0C", +"m.. c #323132", +"n.. c #688C7F", +"o.. c #83917A", +"p.. c #BABDA7", +"q.. c #9AA08D", +"r.. c #5D604F", +"s.. c #3F463A", +"t.. c #35463D", +"u.. c #2C4841", +"v.. c #939E99", +"w.. c #F7F7F5", +"x.. c #939393", +"y.. c #595B59", +"z.. c #87AC8A", +"A.. c #A7AEA6", +"B.. c #CBCBCA", +"C.. c #C6C4C5", +"D.. c #939394", +"E.. c #3E403B", +"F.. c #272F26", +"G.. c #374943", +"H.. c #384746", +"I.. c #344742", +"J.. c #28423C", +"K.. c #142924", +"L.. c #090406", +"M.. c #688B7E", +"N.. c #808E77", +"O.. c #BDBEA9", +"P.. c #9DA28F", +"Q.. c #5F6050", +"R.. c #41473B", +"S.. c #38443D", +"T.. c #38443C", +"U.. c #34433B", +"V.. c #2F433C", +"W.. c #8A8C87", +"X.. c #F4F3F1", +"Y.. c #575957", +"Z.. c #85A687", +"`.. c #61C168", +" +. c #ACB3AB", +".+. c #EBEDED", +"++. c #FDFCFF", +"@+. c #D6D8D7", +"#+. c #CCCBCB", +"$+. c #C4C2C3", +"%+. c #8D8D8E", +"&+. c #3B3633", +"*+. c #29332B", +"=+. c #354842", +"-+. c #142923", +";+. c #100C0B", +">+. c #6C8E82", +",+. c #7D8B74", +"'+. c #B7BAA4", +")+. c #989C89", +"!+. c #605F50", +"~+. c #464C40", +"{+. c #3A443D", +"]+. c #38423B", +"^+. c #354039", +"/+. c #7B7B78", +"(+. c #EFEEED", +"_+. c #A5A5A5", +":+. c #7E9E81", +"<+. c #64C16A", +"[+. c #B1B8AF", +"}+. c #EDEFEF", +"|+. c #FEFEFF", +"1+. c #D4D6D5", +"2+. c #CDCDCB", +"3+. c #C2C0C1", +"4+. c #868586", +"5+. c #333330", +"6+. c #263F35", +"7+. c #172B26", +"8+. c #343334", +"9+. c #78876F", +"0+. c #AFB59D", +"a+. c #959A87", +"b+. c #626052", +"c+. c #474A40", +"d+. c #393F3A", +"e+. c #39433D", +"f+. c #314742", +"g+. c #6C7471", +"h+. c #EBEAE9", +"i+. c #585A58", +"j+. c #769878", +"k+. c #63C26A", +"l+. c #B7BEB6", +"m+. c #EFF1F2", +"n+. c #FFFEFF", +"o+. c #D2D4D3", +"p+. c #CCCCCB", +"q+. c #BDBBBD", +"r+. c #7C7C7D", +"s+. c #2D2F2B", +"t+. c #263E35", +"u+. c #354641", +"v+. c #384646", +"w+. c #364B45", +"x+. c #120E0D", +"y+. c #6F9184", +"z+. c #7A8870", +"A+. c #B3B8A1", +"B+. c #9CA08E", +"C+. c #615D4F", +"D+. c #46483D", +"E+. c #324B47", +"F+. c #5C7472", +"G+. c #E5E7E7", +"H+. c #5A5C5A", +"I+. c #6F9172", +"J+. c #64C36A", +"K+. c #BEC5BD", +"L+. c #F2F4F5", +"M+. c #CFD2D0", +"N+. c #B8B6B8", +"O+. c #737273", +"P+. c #292A27", +"Q+. c #263D34", +"R+. c #354540", +"S+. c #384645", +"T+. c #739487", +"U+. c #B4B8A2", +"V+. c #9FA390", +"W+. c #5F5D4C", +"X+. c #43463A", +"Y+. c #404742", +"Z+. c #3B423C", +"`+. c #526E68", +" @. c #5A5B5B", +".@. c #6B846D", +"+@. c #67C16D", +"@@. c #C5CAC4", +"#@. c #F6F6F7", +"$@. c #CECFCF", +"%@. c #CACACB", +"&@. c #B4B3B4", +"*@. c #6C6B6A", +"=@. c #272824", +"-@. c #2B3F39", +";@. c #354742", +">@. c #182A26", +",@. c #110E0D", +"'@. c #080506", +")@. c #343435", +"!@. c #77978B", +"~@. c #7C8A72", +"{@. c #B5B9A3", +"]@. c #9DA28E", +"^@. c #5C5F4B", +"/@. c #41483B", +"(@. c #3C3F38", +"_@. c #3C4940", +":@. c #4B6155", +"<@. c #D7DAD4", +"[@. c #667867", +"}@. c #69BF6F", +"|@. c #CDCFCC", +"1@. c #FFFFFF", +"2@. c #EEEFEF", +"3@. c #CDCDCF", +"4@. c #C8C9CB", +"5@. c #AEB0B1", +"6@. c #64605F", +"7@. c #262B28", +"8@. c #344544", +"9@. c #384A48", +"0@. c #3A4A48", +"a@. c #384945", +"b@. c #2C4540", +"c@. c #070506", +"d@. c #353536", +"e@. c #7A9A8E", +"f@. c #7C8B72", +"g@. c #B0B59E", +"h@. c #9AA08B", +"i@. c #5F624D", +"j@. c #3F423F", +"k@. c #3B3F37", +"l@. c #42564A", +"m@. c #CACBC5", +"n@. c #696969", +"o@. c #5D6B5F", +"p@. c #6EB973", +"q@. c #D1D3D1", +"r@. c #E9EAEB", +"s@. c #CBCBCD", +"t@. c #C6C7C9", +"u@. c #A8ABAB", +"v@. c #5B5755", +"w@. c #252C2A", +"x@. c #384443", +"y@. c #394B4A", +"z@. c #3A4B47", +"A@. c #2E4641", +"B@. c #7B9B8F", +"C@. c #7E8C74", +"D@. c #B6BAA3", +"E@. c #A4A895", +"F@. c #5E5F49", +"G@. c #3F4535", +"H@. c #3E4440", +"I@. c #3D4B43", +"J@. c #BCBCB7", +"K@. c #596159", +"L@. c #74B378", +"M@. c #FBF9FB", +"N@. c #FDFCFD", +"O@. c #C5C6C8", +"P@. c #A1A4A4", +"Q@. c #54504E", +"R@. c #262E2C", +"S@. c #394644", +"T@. c #394946", +"U@. c #7E9D90", +"V@. c #77856D", +"W@. c #ACB29B", +"X@. c #A0A491", +"Y@. c #62624E", +"Z@. c #3E4541", +"`@. c #3D4440", +" #. c #3B483F", +".#. c #30463A", +"+#. c #AAB1AB", +"@#. c #797979", +"##. c #545B54", +"$#. c #79AE7D", +"%#. c #FCFBFC", +"&#. c #FCFBFD", +"*#. c #C8C8CA", +"=#. c #4C4845", +"-#. c #364746", +";#. c #3C4A49", +">#. c #374947", +",#. c #363737", +"'#. c #82A095", +")#. c #7A8770", +"!#. c #AFB59E", +"~#. c #9FA18F", +"{#. c #62604B", +"]#. c #3E4536", +"^#. c #3A463D", +"/#. c #2C473D", +"(#. c #94A19B", +"_#. c #4F5650", +":#. c #77A67A", +"<#. c #5AC362", +"[#. c #88B58A", +"}#. c #E2E4E1", +"|#. c #C7C7C9", +"1#. c #C4C4C6", +"2#. c #8F9292", +"3#. c #354646", +"4#. c #3B4847", +"5#. c #364947", +"6#. c #172926", +"7#. c #100D0C", +"8#. c #84A196", +"9#. c #78856D", +"0#. c #B3B7A1", +"a#. c #A5A593", +"b#. c #65614E", +"c#. c #36433D", +"d#. c #313A30", +"e#. c #39443B", +"f#. c #2E4840", +"g#. c #7C8984", +"h#. c #8F8F8F", +"i#. c #4B514C", +"j#. c #719E74", +"k#. c #5EBB64", +"l#. c #A4AFA2", +"m#. c #E8EAE7", +"n#. c #C0C1C3", +"o#. c #858888", +"p#. c #1F3734", +"q#. c #344545", +"r#. c #394745", +"s#. c #394A46", +"t#. c #2E4542", +"u#. c #83A195", +"v#. c #738169", +"w#. c #ABB19A", +"x#. c #9C9D8B", +"y#. c #676351", +"z#. c #3F4536", +"A#. c #36453E", +"B#. c #313C31", +"C#. c #364137", +"D#. c #2F4840", +"E#. c #616D68", +"F#. c #EBECEC", +"G#. c #BDBCBD", +"H#. c #4C504C", +"I#. c #6C916E", +"J#. c #62BB68", +"K#. c #A8B3A6", +"L#. c #FEFDFE", +"M#. c #C6C6C8", +"N#. c #7E8181", +"O#. c #313634", +"P#. c #1F3733", +"Q#. c #354746", +"R#. c #354645", +"S#. c #374543", +"T#. c #374743", +"U#. c #85A398", +"V#. c #74806A", +"W#. c #9B9E8A", +"X#. c #686755", +"Y#. c #404637", +"Z#. c #35463E", +"`#. c #364037", +" $. c #F9FBF9", +".$. c #ECEFED", +"+$. c #C9CAC9", +"@$. c #A29EA0", +"#$. c #4D4C4D", +"$$. c #677C6B", +"%$. c #6BB571", +"&$. c #AEB6AC", +"*$. c #F0F2F0", +"=$. c #FEFEFD", +"-$. c #F5F6F5", +";$. c #D0D1D1", +">$. c #C6C5C7", +",$. c #BBBCBD", +"'$. c #767776", +")$. c #2E2F2D", +"!$. c #273934", +"~$. c #354640", +"{$. c #374642", +"]$. c #364541", +"^$. c #2C433E", +"/$. c #172925", +"($. c #060405", +"_$. c #39393A", +":$. c #87A69C", +"<$. c #717E6B", +"[$. c #ABAF9A", +"}$. c #9EA28D", +"|$. c #666957", +"1$. c #3F4638", +"2$. c #323D32", +"3$. c #3B4A46", +"4$. c #344441", +"5$. c #EBEDE9", +"6$. c #EDF2EE", +"7$. c #D0D3D1", +"8$. c #AAA3A7", +"9$. c #534F54", +"0$. c #606D64", +"a$. c #71B177", +"b$. c #B9BFB8", +"c$. c #F4F5F3", +"d$. c #FCFCFB", +"e$. c #F0F3F1", +"f$. c #CACDCD", +"g$. c #C5C4C6", +"h$. c #6A6E6B", +"i$. c #292D29", +"j$. c #334239", +"k$. c #35463F", +"l$. c #364745", +"m$. c #3A3A3B", +"n$. c #8BABA2", +"o$. c #73816F", +"p$. c #ACB09A", +"q$. c #9FA38D", +"r$. c #61634F", +"s$. c #3F4636", +"t$. c #314239", +"u$. c #313C32", +"v$. c #343C33", +"w$. c #3C4B47", +"x$. c #2F3331", +"y$. c #D5D4D0", +"z$. c #F1F5F0", +"A$. c #D6D9D7", +"B$. c #BDBBBC", +"C$. c #B0AAAE", +"D$. c #585459", +"E$. c #57615C", +"F$. c #74B079", +"G$. c #C3C8C2", +"H$. c #FCFEFC", +"I$. c #EDF1ED", +"J$. c #C5C3C6", +"K$. c #AFB1B2", +"L$. c #596A66", +"M$. c #2A403B", +"N$. c #34433A", +"O$. c #364841", +"P$. c #374946", +"Q$. c #182A27", +"R$. c #3A3B3C", +"S$. c #8DADA4", +"T$. c #768472", +"U$. c #ABB09A", +"V$. c #9FA48E", +"W$. c #5F614C", +"X$. c #3C4130", +"Y$. c #313E35", +"Z$. c #2E3E35", +"`$. c #3D4B48", +" %. c #2E3131", +".%. c #BAC2BF", +"+%. c #F5F6F2", +"@%. c #D7DAD8", +"#%. c #BBBABA", +"$%. c #B4AFB2", +"%%. c #5D5A5F", +"&%. c #525556", +"*%. c #7DA682", +"=%. c #CBD1CB", +"-%. c #F8F9F8", +";%. c #FEFFFD", +">%. c #EAEEEA", +",%. c #C5C8C8", +"'%. c #A8AAAA", +")%. c #4D605D", +"!%. c #1D322F", +"~%. c #35443B", +"{%. c #354745", +"]%. c #192B28", +"^%. c #080607", +"/%. c #3B3B3C", +"(%. c #90ADA5", +"_%. c #73806E", +":%. c #ABB09B", +"<%. c #A3A792", +"[%. c #60634E", +"}%. c #3D4232", +"|%. c #2F3C34", +"1%. c #2C3C33", +"2%. c #3C4946", +"3%. c #2C3C3D", +"4%. c #9EA8A6", +"5%. c #F6F5F3", +"6%. c #DBDDDC", +"7%. c #B2AEB1", +"8%. c #686469", +"9%. c #4C4B50", +"0%. c #819D86", +"a%. c #D6DCD5", +"b%. c #FAFBFA", +"c%. c #FDFFFD", +"d%. c #E2E7E2", +"e%. c #C2C5C6", +"f%. c #C4C3C6", +"g%. c #A0A1A2", +"h%. c #435A56", +"i%. c #193B37", +"j%. c #2E433F", +"k%. c #2D4541", +"l%. c #1A2C29", +"m%. c #14100F", +"n%. c #090708", +"o%. c #3C3D3E", +"p%. c #95AFA6", +"q%. c #6D7967", +"r%. c #A7AC96", +"s%. c #9EA38D", +"t%. c #5F614D", +"u%. c #3E4435", +"v%. c #2E3E36", +"w%. c #343B33", +"x%. c #34474A", +"y%. c #887A7C", +"z%. c #F5F1F0", +"A%. c #DEE1DF", +"B%. c #BEBFBE", +"C%. c #B3B0B2", +"D%. c #736F73", +"E%. c #48474B", +"F%. c #79957D", +"G%. c #5DBE63", +"H%. c #DCE2DB", +"I%. c #DDE2DE", +"J%. c #C0C3C3", +"K%. c #C0BEC1", +"L%. c #959697", +"M%. c #3A4A46", +"N%. c #173A35", +"O%. c #2E433E", +"P%. c #34443B", +"Q%. c #2E4440", +"R%. c #090808", +"S%. c #3E3E3F", +"T%. c #6D7A67", +"U%. c #A9AD98", +"V%. c #9DA28C", +"W%. c #60634F", +"X%. c #3E4434", +"Y%. c #2E3A31", +"Z%. c #303B30", +"`%. c #333A31", +" &. c #3A4C50", +".&. c #675E61", +"+&. c #F2EEEE", +"@&. c #E4E6E5", +"#&. c #C3C5C4", +"$&. c #B5B4B6", +"%&. c #827E83", +"&&. c #48464B", +"*&. c #6F8873", +"=&. c #61BD67", +"-&. c #E2E8E1", +";&. c #FDFDFC", +">&. c #FDFEFC", +",&. c #D7DBD7", +"'&. c #BEBCBF", +")&. c #8E8F90", +"!&. c #163630", +"~&. c #2F453F", +"{&. c #35453C", +"]&. c #35473F", +"^&. c #364845", +"/&. c #384744", +"(&. c #91ABA2", +"_&. c #6A7663", +":&. c #A4A993", +"<&. c #99A089", +"[&. c #60624E", +"}&. c #3D4233", +"|&. c #303A2F", +"1&. c #323A30", +"2&. c #48585D", +"3&. c #EBE8E8", +"4&. c #E8E9E8", +"5&. c #C6C9C8", +"6&. c #B3B3B4", +"7&. c #908C91", +"8&. c #4A484D", +"9&. c #69776C", +"0&. c #68B86E", +"a&. c #EAF1E9", +"b&. c #CFD3CF", +"c&. c #BABABC", +"d&. c #868889", +"e&. c #28302D", +"f&. c #1B3935", +"g&. c #304741", +"h&. c #38483F", +"i&. c #36463F", +"j&. c #120F0D", +"k&. c #3D3D3E", +"l&. c #93ACA3", +"m&. c #6C7966", +"n&. c #A3A993", +"o&. c #5F634E", +"p&. c #3C4232", +"q&. c #333B32", +"r&. c #3C524F", +"s&. c #DDD7D7", +"t&. c #ECEFEE", +"u&. c #C8CCCB", +"v&. c #9D9A9C", +"w&. c #554F55", +"x&. c #626563", +"y&. c #75AC79", +"z&. c #78B97D", +"A&. c #F2F8F1", +"B&. c #CCCCCA", +"C&. c #C3C5C3", +"D&. c #B2B6B6", +"E&. c #777B7A", +"F&. c #252822", +"G&. c #223A31", +"H&. c #30443A", +"I&. c #3A4941", +"J&. c #37443E", +"K&. c #394842", +"L&. c #2E423D", +"M&. c #1A2823", +"N&. c #150F0D", +"O&. c #96ADA4", +"P&. c #6D7966", +"Q&. c #A6AB95", +"R&. c #9BA28C", +"S&. c #323C32", +"T&. c #33403A", +"U&. c #3B524B", +"V&. c #3E3F3A", +"W&. c #C6C0BF", +"X&. c #EDF1F1", +"Y&. c #CFD5D4", +"Z&. c #B8B8B7", +"`&. c #ABA8A8", +" *. c #625D62", +".*. c #5D595F", +"+*. c #8CA48F", +"@*. c #5FBA66", +"#*. c #61BE69", +"$*. c #D0DBD1", +"%*. c #F7FCF8", +"&*. c #C7C6C5", +"**. c #C2C4C2", +"=*. c #AAB0AF", +"-*. c #647776", +";*. c #1D2A21", +">*. c #254032", +",*. c #324438", +"'*. c #3A4741", +")*. c #39453E", +"!*. c #3A4640", +"~*. c #2F423B", +"{*. c #1B2722", +"]*. c #140C0A", +"^*. c #090403", +"/*. c #414040", +"(*. c #9AB0A6", +"_*. c #A2A791", +":*. c #9AA28B", +"<*. c #5D624D", +"[*. c #3C4131", +"}*. c #323C36", +"|*. c #303A33", +"1*. c #31392E", +"2*. c #343E35", +"3*. c #35423D", +"4*. c #3B4F49", +"5*. c #A4A8A7", +"6*. c #EFF0F1", +"7*. c #D6DAD9", +"8*. c #BBBAB9", +"9*. c #B8B5B6", +"0*. c #7C787C", +"a*. c #605C61", +"b*. c #9CA09D", +"c*. c #5FB665", +"d*. c #CAD7CD", +"e*. c #F6FCF7", +"f*. c #F8FCF9", +"g*. c #C4C3C3", +"h*. c #A4A8A9", +"i*. c #546D6C", +"j*. c #192921", +"k*. c #274335", +"l*. c #34453A", +"m*. c #3A4742", +"n*. c #384543", +"o*. c #3A4740", +"p*. c #38453E", +"q*. c #1B2620", +"r*. c #0B0504", +"s*. c #A4B7AE", +"t*. c #A1A791", +"u*. c #60654F", +"v*. c #3B3F2E", +"w*. c #313A33", +"x*. c #333D33", +"y*. c #2F3A35", +"z*. c #384C47", +"A*. c #8C8B8B", +"B*. c #EFEEEF", +"C*. c #DBDFDF", +"D*. c #C0C1BF", +"E*. c #BEBBBB", +"F*. c #A09CA0", +"G*. c #757276", +"H*. c #969596", +"I*. c #BCC2BB", +"J*. c #ABC0AC", +"K*. c #90B091", +"L*. c #8FAF90", +"M*. c #95B095", +"N*. c #9AB299", +"O*. c #99B098", +"P*. c #94AD93", +"Q*. c #8AB38B", +"R*. c #76B679", +"S*. c #73B676", +"T*. c #70B474", +"U*. c #6BC171", +"V*. c #A1AFA1", +"W*. c #A6B3A8", +"X*. c #A8B5AB", +"Y*. c #ACB8AD", +"Z*. c #ADBBAF", +"`*. c #ACBBAE", +" =. c #ABBCAD", +".=. c #A7BDA8", +"+=. c #A7C0A8", +"@=. c #B1C5B3", +"#=. c #D2DCD5", +"$=. c #F2F8F4", +"%=. c #F8FCFA", +"&=. c #F7FAF9", +"*=. c #BFC1BF", +"==. c #9DA0A0", +"-=. c #455C5C", +";=. c #182620", +">=. c #2A4337", +",=. c #344439", +"'=. c #0A0504", +")=. c #ACBCB5", +"!=. c #6F7C69", +"~=. c #A2A790", +"{=. c #626853", +"]=. c #323D36", +"^=. c #303930", +"/=. c #2E3832", +"(=. c #36423D", +"_=. c #3D4D4A", +":=. c #7B7173", +"<=. c #EBE8EA", +"[=. c #DFE1E1", +"}=. c #C2C2C1", +"|=. c #BDBABB", +"1=. c #C1BFC2", +"2=. c #99989A", +"3=. c #9B9B9A", +"4=. c #BBBCBA", +"5=. c #D1D3D0", +"6=. c #DADFD9", +"7=. c #E0E6DF", +"8=. c #E5EBE3", +"9=. c #E7EDE6", +"0=. c #ECEEEB", +"a=. c #ECEDED", +"b=. c #E8EBE8", +"c=. c #DDE5DD", +"d=. c #D9E2DA", +"e=. c #DAE0DA", +"f=. c #D6DCD6", +"g=. c #D0D9CD", +"h=. c #CAD4C6", +"i=. c #C3CCBF", +"j=. c #BBC7B8", +"k=. c #B8C4B5", +"l=. c #ACBCAA", +"m=. c #91B491", +"n=. c #7BB57D", +"o=. c #6DB972", +"p=. c #A1AEA1", +"q=. c #AAB7AA", +"r=. c #B6C2B6", +"s=. c #C0C5C1", +"t=. c #CCCDCC", +"u=. c #D2D3D3", +"v=. c #DADADD", +"w=. c #DADBDE", +"x=. c #DBDBDF", +"y=. c #DCDCDF", +"z=. c #DEDEE1", +"A=. c #E4EAE5", +"B=. c #ECF2ED", +"C=. c #F5FAF6", +"D=. c #FAFDFD", +"E=. c #FAFBFC", +"F=. c #F6F7F9", +"G=. c #D1D0D5", +"H=. c #C7C7C8", +"I=. c #BCBEBC", +"J=. c #919596", +"K=. c #335959", +"L=. c #18352F", +"M=. c #2E4339", +"N=. c #37433E", +"O=. c #394643", +"P=. c #374440", +"Q=. c #1A2620", +"R=. c #B3C1B9", +"S=. c #6F7D6B", +"T=. c #A1A68F", +"U=. c #9AA18B", +"V=. c #646B57", +"W=. c #3D4334", +"X=. c #323B31", +"Y=. c #3F4D4C", +"Z=. c #6B686A", +"`=. c #E6E4E7", +" -. c #C8C8C7", +".-. c #BCBABA", +"+-. c #B7B8B6", +"@-. c #BDBFBC", +"#-. c #C7C9C6", +"$-. c #CFD1CE", +"%-. c #DEE0DD", +"&-. c #E9ECE9", +"*-. c #EDF0ED", +"=-. c #F2F3F2", +"--. c #F2F1F1", +";-. c #DFE6DE", +">-. c #D8E4D6", +",-. c #D3DFD1", +"'-. c #CDDACB", +")-. c #C9D6C7", +"!-. c #C5D1C3", +"~-. c #B3C8B2", +"{-. c #99C39A", +"]-. c #83BE89", +"^-. c #76BC7C", +"/-. c #67BE6E", +"(-. c #5BC162", +"_-. c #74BB79", +":-. c #A6B0A7", +"<-. c #B2BCB3", +"[-. c #B9C4BA", +"}-. c #C3CDC4", +"|-. c #CDD1CD", +"1-. c #DBDADA", +"2-. c #DCDCDB", +"3-. c #D6D5D9", +"4-. c #D7D6DA", +"5-. c #D7D7DA", +"6-. c #E5E8E5", +"7-. c #F4F6F5", +"8-. c #FCFEFF", +"9-. c #E3E4E8", +"0-. c #C7C8CD", +"a-. c #B9BCBA", +"b-. c #868A8C", +"c-. c #295255", +"d-. c #1F403D", +"e-. c #33453D", +"f-. c #3A4641", +"g-. c #374442", +"h-. c #39443D", +"i-. c #39463E", +"j-. c #1A261F", +"k-. c #1A1919", +"l-. c #AEBCB3", +"m-. c #A2A892", +"n-. c #9CA48D", +"o-. c #626852", +"p-. c #3C4030", +"q-. c #2E3730", +"r-. c #31392F", +"s-. c #2F3832", +"t-. c #3D4E4E", +"u-. c #566669", +"v-. c #ECEBEC", +"w-. c #CECDCC", +"x-. c #BFBEBD", +"y-. c #C0BFC2", +"z-. c #C8CAC7", +"A-. c #C5C5C4", +"B-. c #C6C7C6", +"C-. c #DFE1DF", +"D-. c #E1E4E0", +"E-. c #E0E3DF", +"F-. c #E1E5E1", +"G-. c #E0DFE1", +"H-. c #E1E1E3", +"I-. c #E4E4E6", +"J-. c #E5E5E7", +"K-. c #E6E5E5", +"L-. c #E8E6E6", +"M-. c #E9E7E7", +"N-. c #E7E7E6", +"O-. c #E3E6E3", +"P-. c #DFE6E0", +"Q-. c #D8E5DB", +"R-. c #D0E1D3", +"S-. c #CADECD", +"T-. c #C7D8C9", +"U-. c #C3D4C6", +"V-. c #BFCDC0", +"W-. c #BFC7C0", +"X-. c #BDC2BB", +"Y-. c #B4B9B1", +"Z-. c #B3B8B0", +"`-. c #AFB5AD", +" ;. c #ACB1A9", +".;. c #A9AEA5", +"+;. c #A2A79F", +"@;. c #9EA49C", +"#;. c #9CA39A", +"$;. c #9BA39A", +"%;. c #9BA29A", +"&;. c #9CA49B", +"*;. c #9FA79E", +"=;. c #A1A9A0", +"-;. c #A5ACA4", +";;. c #A7ADA5", +">;. c #ABAFA6", +",;. c #B1B4AC", +"';. c #B6BAB1", +");. c #BBBFB6", +"!;. c #C2C5BC", +"~;. c #C8CBC2", +"{;. c #D2D6CD", +"];. c #D7DAD5", +"^;. c #DADDDB", +"/;. c #E3E6E5", +"(;. c #E7EAE9", +"_;. c #E6E9E8", +":;. c #E6E8E8", +"<;. c #E3E2E5", +"[;. c #DFDFE1", +"};. c #D4D6D4", +"|;. c #D2D5D1", +"1;. c #D0D3CF", +"2;. c #CDD0CC", +"3;. c #C9CCC8", +"4;. c #C8CBC7", +"5;. c #C4C7C4", +"6;. c #C6C8C9", +"7;. c #C7C9CA", +"8;. c #CBCDCE", +"9;. c #D3D4D4", +"0;. c #E0E0DF", +"a;. c #F8F8FA", +"b;. c #D0D1D6", +"c;. c #C8C8CE", +"d;. c #C4C6C8", +"e;. c #B4B8B6", +"f;. c #7C7F81", +"g;. c #203F42", +"h;. c #223E3B", +"i;. c #35453D", +"j;. c #364340", +"k;. c #394642", +"l;. c #39453D", +"m;. c #30423B", +"n;. c #181717", +"o;. c #94A398", +"p;. c #6C7B69", +"q;. c #9DA38D", +"r;. c #99A189", +"s;. c #60654E", +"t;. c #303A34", +"u;. c #323A31", +"v;. c #2E3731", +"w;. c #343633", +"x;. c #3E4B4A", +"y;. c #4E5658", +"z;. c #CBC7C8", +"A;. c #D0CFCF", +"B;. c #BEBCBD", +"C;. c #BCBBBD", +"D;. c #C2C4C3", +"E;. c #D2D4D1", +"F;. c #D3D1D4", +"G;. c #D9D6DA", +"H;. c #D4D5D4", +"I;. c #D2D2D1", +"J;. c #D5D5D4", +"K;. c #E4E2E4", +"L;. c #E5E4E7", +"M;. c #E6E5E7", +"N;. c #E8E7E8", +"O;. c #DEE1E1", +"P;. c #E1E3E3", +"Q;. c #E2E4E4", +"R;. c #E5E5E4", +"S;. c #E8E7E6", +"T;. c #E9E8E7", +"U;. c #EAE9E7", +"V;. c #ECEBE9", +"W;. c #EDECEA", +"X;. c #ECEBEA", +"Y;. c #EBEAEA", +"Z;. c #EAEAEC", +"`;. c #E8E9EB", +" >. c #E9EAEC", +".>. c #E4E5E7", +"+>. c #E1E2E4", +"@>. c #D2D6D6", +"#>. c #D0D4D3", +"$>. c #CBCFCE", +"%>. c #C6CACA", +"&>. c #C7C9C8", +"*>. c #C6C6C5", +"=>. c #C3C2C3", +"->. c #BCBCBD", +";>. c #BEBEC0", +">>. c #C0C0C2", +",>. c #C1C1C3", +"'>. c #C3C3C6", +")>. c #C5C5C7", +"!>. c #CBCACD", +"~>. c #D5D3D6", +"{>. c #DFDDDE", +"]>. c #EAE7E9", +"^>. c #F0EEF0", +"/>. c #E2E1E4", +"(>. c #D2D1D6", +"_>. c #CACBD0", +":>. c #C7C8CE", +"<>. c #C0C3C4", +"[>. c #ABAFAD", +"}>. c #6A7776", +"|>. c #193534", +"1>. c #273C3A", +"2>. c #39433B", +"3>. c #394744", +"4>. c #0A0403", +"5>. c #6A7B6A", +"6>. c #989F8A", +"7>. c #979F87", +"8>. c #62664F", +"9>. c #2E3933", +"0>. c #2F362E", +"a>. c #34362F", +"b>. c #3C4843", +"c>. c #3B4E49", +"d>. c #B4BAB6", +"e>. c #EFF3F0", +"f>. c #C1BDC0", +"g>. c #BABBBC", +"h>. c #BBBCBC", +"i>. c #C4C4C3", +"j>. c #E0E0E1", +"k>. c #E8E6E8", +"l>. c #E1E0E1", +"m>. c #CDCCCD", +"n>. c #C5C4C4", +"o>. c #C6C5C5", +"p>. c #C5C6C5", +"q>. c #C7C8C7", +"r>. c #CACAC9", +"s>. c #E8E9EA", +"t>. c #EAEBEB", +"u>. c #EAEBEC", +"v>. c #DFDFE0", +"w>. c #D5D5D6", +"x>. c #CFD0D0", +"y>. c #C9CACA", +"z>. c #C6C8C7", +"A>. c #C5C7C6", +"B>. c #C4C6C6", +"C>. c #C5C5C6", +"D>. c #C9C8C9", +"E>. c #CBCACB", +"F>. c #CECECF", +"G>. c #E2E1E2", +"H>. c #CACACC", +"I>. c #C0C2C1", +"J>. c #A4AAA5", +"K>. c #556F69", +"L>. c #16352B", +"M>. c #3A423F", +"N>. c #3A4743", +"O>. c #1C2822", +"P>. c #687B69", +"Q>. c #979F8A", +"R>. c #9EA48E", +"S>. c #686C55", +"T>. c #3C4132", +"U>. c #2A3633", +"V>. c #32382F", +"W>. c #313930", +"X>. c #3B4640", +"Y>. c #2E443E", +"Z>. c #97A19B", +"`>. c #EFF4F1", +" ,. c #C4BFC3", +".,. c #B9B9BA", +"+,. c #B7B8B8", +"@,. c #9BA09B", +"#,. c #475B52", +"$,. c #19291E", +"%,. c #3A443E", +"&,. c #3C4947", +"*,. c #3A4843", +"=,. c #3A463F", +"-,. c #170E0C", +";,. c #6B7F6E", +">,. c #99A08C", +",,. c #9BA18A", +"',. c #666A52", +"),. c #2D3833", +"!,. c #283431", +"~,. c #323931", +"{,. c #333830", +"],. c #828481", +"^,. c #C7C2C6", +"/,. c #BABABB", +"(,. c #B8B9B9", +"_,. c #91938F", +":,. c #42453E", +"<,. c #1D2D23", +"[,. c #3A423D", +"},. c #3C4841", +"|,. c #3C4542", +"1,. c #3C4645", +"2,. c #170F0C", +"3,. c #697D6B", +"4,. c #969D89", +"5,. c #969D86", +"6,. c #666A53", +"7,. c #3E4233", +"8,. c #293633", +"9,. c #31362D", +"0,. c #30382F", +"a,. c #2F352A", +"b,. c #353D35", +"c,. c #334441", +"d,. c #C9C4C8", +"e,. c #B7B6B6", +"f,. c #83817E", +"g,. c #373630", +"h,. c #1E362C", +"i,. c #3A4240", +"j,. c #3B4841", +"k,. c #1B2721", +"l,. c #6B806F", +"m,. c #999F8C", +"n,. c #9BA18B", +"o,. c #686D56", +"p,. c #2B3936", +"q,. c #30362D", +"r,. c #2E352C", +"s,. c #484E4C", +"t,. c #D4D2D1", +"u,. c #EAE7EA", +"v,. c #CCC7CB", +"w,. c #BCBBBB", +"x,. c #ADACAB", +"y,. c #726F6D", +"z,. c #2D2824", +"A,. c #263934", +"B,. c #394542", +"C,. c #38463E", +"D,. c #3E4948", +"E,. c #394743", +"F,. c #140B09", +"G,. c #6D8373", +"H,. c #979D8A", +"I,. c #A1A790", +"J,. c #696D56", +"K,. c #3B3E2D", +"L,. c #2C3632", +"M,. c #2C3937", +"N,. c #323930", +"O,. c #2D382E", +"P,. c #323C34", +"Q,. c #3A4847", +"R,. c #333233", +"S,. c #BBB5B6", +"T,. c #F2EEF1", +"U,. c #D1CCD0", +"V,. c #BFBEBF", +"W,. c #A4A1A1", +"X,. c #59605F", +"Y,. c #212623", +"Z,. c #2D3E3B", +"`,. c #384A41", +" '. c #3A433F", +".'. c #3C4543", +"+'. c #1B2621", +"@'. c #191818", +"#'. c #708777", +"$'. c #949B87", +"%'. c #A2A891", +"&'. c #6C705A", +"*'. c #2B362B", +"='. c #303830", +"-'. c #3A4546", +";'. c #283336", +">'. c #8D888B", +",'. c #F6F3F5", +"''. c #D3CED2", +")'. c #C0BEC0", +"!'. c #939293", +"~'. c #45514F", +"{'. c #172D2A", +"]'. c #2F4140", +"^'. c #3F4948", +"/'. c #1A1918", +"('. c #758D7E", +"_'. c #8F9883", +":'. c #9AA189", +"<'. c #6A6E57", +"['. c #2B352C", +"}'. c #394143", +"|'. c #303D3E", +"1'. c #5E5959", +"2'. c #F2F0EF", +"3'. c #D8D5D7", +"4'. c #C1C0C2", +"5'. c #747979", +"6'. c #2C4441", +"7'. c #1B3330", +"8'. c #324341", +"9'. c #33443B", +"0'. c #192822", +"a'. c #191918", +"b'. c #789184", +"c'. c #8D9881", +"d'. c #9EA68A", +"e'. c #3C4031", +"f'. c #2B3835", +"g'. c #2E352D", +"h'. c #2E3431", +"i'. c #323536", +"j'. c #373C3E", +"k'. c #364744", +"l'. c #C6C3BD", +"m'. c #B6B9B5", +"n'. c #979A99", +"o'. c #989999", +"p'. c #999999", +"q'. c #323533", +"r'. c #19221D", +"s'. c #21312C", +"t'. c #3B4642", +"u'. c #3A4744", +"v'. c #1A2C25", +"w'. c #12110C", +"x'. c #7A9285", +"y'. c #8C9680", +"z'. c #A0A78B", +"A'. c #6E735D", +"B'. c #2C3A37", +"C'. c #2E362E", +"D'. c #30362C", +"E'. c #323937", +"F'. c #323537", +"G'. c #34393A", +"H'. c #202C26", +"I'. c #322C27", +"J'. c #262824", +"K'. c #191C1C", +"L'. c #212222", +"M'. c #4F4F4F", +"N'. c #6B6B6B", +"O'. c #8B8B8B", +"P'. c #5D5D5D", +"Q'. c #1E1E1E", +"R'. c #060403", +"S'. c #0F120E", +"T'. c #374239", +"U'. c #38413E", +"V'. c #394543", +"W'. c #1C2922", +"X'. c #150E0B", +"Y'. c #1B1B1A", +"Z'. c #7B9387", +"`'. c #919A84", +" ). c #6D725C", +".). c #404739", +"+). c #283432", +"@). c #2F3830", +"#). c #31382E", +"$). c #33383A", +"%). c #323636", +"&). c #374541", +"*). c #273A34", +"=). c #040302", +"-). c #030505", +";). c #151616", +">). c #787878", +",). c #898989", +"'). c #7C7C7C", +")). c #353535", +"!). c #030303", +"~). c #070202", +"{). c #161A17", +"]). c #150D0A", +"^). c #1B1A1A", +"/). c #798F83", +"(). c #8C967F", +"_). c #99A185", +":). c #6B7059", +"<). c #3E4335", +"[). c #2E3A34", +"}). c #31372E", +"|). c #333A3C", +"1). c #334844", +"2). c #140D0B", +"3). c #1F2121", +"4). c #878888", +"5). c #9D9D9D", +"6). c #383838", +"7). c #7B7B7B", +"8). c #626262", +"9). c #A0A0A0", +"0). c #0A0404", +"a). c #1D1F1D", +"b). c #2D3F3C", +"c). c #36413D", +"d). c #36443A", +"e). c #2E413A", +"f). c #7A8F83", +"g). c #88927B", +"h). c #979F82", +"i). c #3E4334", +"j). c #2A3634", +"k). c #2E3830", +"l). c #2F3939", +"m). c #2F3735", +"n). c #374D4B", +"o). c #120B0A", +"p). c #6F7070", +"q). c #DEE0E0", +"r). c #969696", +"s). c #555555", +"t). c #929292", +"u). c #101010", +"v). c #6C6C6C", +"w). c #212928", +"x). c #334135", +"y). c #3C4741", +"z). c #3B4842", +"A). c #2E4038", +"B). c #7C9286", +"C). c #979F83", +"D). c #6D735C", +"E). c #283330", +"F). c #2D372E", +"G). c #30372F", +"H). c #2B3634", +"I). c #2C393C", +"J). c #1E1414", +"K). c #757575", +"L). c #9B9B9B", +"M). c #0F1011", +"N). c #253236", +"O). c #333E3F", +"P). c #37443B", +"Q). c #324135", +"R). c #3C4340", +"S). c #3B4740", +"T). c #3D4A43", +"U). c #0B0604", +"V). c #1D1C1C", +"W). c #798E82", +"X). c #99A184", +"Y). c #6C725B", +"Z). c #3F4436", +"`). c #293632", +" !. c #2B3632", +".!. c #2E3531", +"+!. c #343C3D", +"@!. c #344548", +"#!. c #1D1A1C", +"$!. c #8F8E8F", +"%!. c #DDDFDF", +"&!. c #9E9E9E", +"*!. c #838383", +"=!. c #515151", +"-!. c #282829", +";!. c #585858", +">!. c #C0C0C1", +",!. c #14181A", +"'!. c #2B383E", +")!. c #353C3E", +"!!. c #334338", +"~!. c #35433B", +"{!. c #3D4644", +"]!. c #394742", +"^!. c #3C4943", +"/!. c #778B7F", +"(!. c #838D75", +"_!. c #99A083", +":!. c #6E745E", +"~. c #C3C1C3", +",~. c #BBBCC1", +"'~. c #A9B1BB", +")~. c #808B9B", +"!~. c #676B78", +"~~. c #8C8A91", +"{~. c #A9AAAB", +"]~. c #929898", +"^~. c #5A5B5D", +"/~. c #191316", +"(~. c #1F2D31", +"_~. c #303A39", +":~. c #18251F", +"<~. c #748B80", +"[~. c #7F8C74", +"}~. c #949A7D", +"|~. c #6D735D", +"1~. c #404638", +"2~. c #2A3734", +"3~. c #2F3730", +"4~. c #2F332A", +"5~. c #323A32", +"6~. c #2E372D", +"7~. c #2A352C", +"8~. c #2D322E", +"9~. c #393D3F", +"0~. c #354946", +"a~. c #131A15", +"b~. c #9A9797", +"c~. c #DADEDB", +"d~. c #D1D8D6", +"e~. c #CBD3D8", +"f~. c #7F8FA1", +"g~. c #44617C", +"h~. c #698AA5", +"i~. c #AABBC5", +"j~. c #D1D7D6", +"k~. c #D6D8D6", +"l~. c #D4D7DA", +"m~. c #D6D9E0", +"n~. c #747373", +"o~. c #CAC8C6", +"p~. c #E0DEDD", +"q~. c #D5D6D8", +"r~. c #CED3D6", +"s~. c #D0D2D4", +"t~. c #D1D0D0", +"u~. c #D0CBC9", +"v~. c #CEC8CA", +"w~. c #CAC7CC", +"x~. c #C9C8CE", +"y~. c #C4C3C5", +"z~. c #C6C3C2", +"A~. c #BABDC0", +"B~. c #94A3AD", +"C~. c #5A7284", +"D~. c #465467", +"E~. c #696D7B", +"F~. c #9C9BA1", +"G~. c #A4A5A6", +"H~. c #828587", +"I~. c #3D3B3E", +"J~. c #18171A", +"K~. c #243538", +"L~. c #3B4441", +"M~. c #3D4640", +"N~. c #3D4742", +"O~. c #17251F", +"P~. c #1D1E1D", +"Q~. c #70877B", +"R~. c #7E8A73", +"S~. c #9A9F83", +"T~. c #6D725B", +"U~. c #2D352E", +"V~. c #323B33", +"W~. c #283529", +"X~. c #27342A", +"Y~. c #29352D", +"Z~. c #2F3431", +"`~. c #353337", +" {. c #3C4D4C", +".{. c #1E2926", +"+{. c #504D51", +"@{. c #E6E5E8", +"#{. c #DCDDDA", +"${. c #D5D8D2", +"%{. c #D2D5D6", +"&{. c #B8C6D6", +"*{. c #6F8EA9", +"={. c #315C7E", +"-{. c #3E6685", +";{. c #8FAABE", +">{. c #BDCBD4", +",{. c #D4D8DA", +"'{. c #D8DADD", +"){. c #4B4B4B", +"!{. c #595959", +"~{. c #D1D4D6", +"{{. c #CFD3D6", +"]{. c #CDD1D5", +"^{. c #D0D2D2", +"/{. c #CFCFCD", +"({. c #CCCAC8", +"_{. c #C8C5C8", +":{. c #C6C2C4", +"<{. c #A1ABB6", +"[{. c #718598", +"}{. c #405C73", +"|{. c #3A546C", +"1{. c #6A7687", +"2{. c #999DA7", +"3{. c #9D9F9F", +"4{. c #6B6B6D", +"5{. c #272022", +"6{. c #1A282B", +"7{. c #2C3C3B", +"8{. c #3A423C", +"9{. c #202120", +"0{. c #6A8175", +"a{. c #7D8871", +"b{. c #9DA286", +"c{. c #717761", +"d{. c #27382A", +"e{. c #253529", +"f{. c #2A372F", +"g{. c #333034", +"h{. c #3A4446", +"i{. c #303C3D", +"j{. c #1E1B21", +"k{. c #C0BFC4", +"l{. c #E2E3E1", +"m{. c #D8D8D2", +"n{. c #D7D5D0", +"o{. c #D1D2D4", +"p{. c #BDC9D1", +"q{. c #7F9AAD", +"r{. c #2C5E89", +"s{. c #225583", +"t{. c #567EA0", +"u{. c #98B0C3", +"v{. c #D9DAD8", +"w{. c #D5DADA", +"x{. c #D5DCDD", +"y{. c #CDD0D3", +"z{. c #CCD1D4", +"A{. c #CBD0D4", +"B{. c #CDD0D4", +"C{. c #CED0D2", +"D{. c #CCCDCD", +"E{. c #C4C7C6", +"F{. c #C2C1C0", +"G{. c #B2B2B3", +"H{. c #798998", +"I{. c #476684", +"J{. c #2A4F72", +"K{. c #304D6C", +"L{. c #707F93", +"M{. c #9FA7B4", +"N{. c #A8ACB2", +"O{. c #A5A8A9", +"P{. c #8A8C8B", +"Q{. c #4C494B", +"R{. c #1A1517", +"S{. c #243535", +"T{. c #3B4540", +"U{. c #212221", +"V{. c #617C6F", +"W{. c #7C8871", +"X{. c #989E81", +"Y{. c #707660", +"Z{. c #2D3A38", +"`{. c #2D332C", +" ]. c #2B342B", +".]. c #283629", +"+]. c #253327", +"@]. c #2C3730", +"#]. c #313234", +"$]. c #3D5052", +"%]. c #19151A", +"&]. c #777479", +"*]. c #E0E4E4", +"=]. c #D6DBD8", +"-]. c #D6D7D4", +";]. c #D4D2CE", +">]. c #D2D1CE", +",]. c #C0CBCE", +"']. c #80A3BF", +")]. c #185281", +"!]. c #0F5085", +"~]. c #2C6493", +"{]. c #7096B4", +"]]. c #C3D1DC", +"^]. c #D3D8DA", +"/]. c #CACDCF", +"(]. c #CACED1", +"_]. c #CACED0", +":]. c #CBCDCF", +"<]. c #C7C9CB", +"[]. c #C7CACC", +"}]. c #C5CACE", +"|]. c #BFC5CA", +"1]. c #BBBFC3", +"2]. c #9EA5AD", +"3]. c #6B7C8C", +"4]. c #315472", +"5]. c #234C71", +"6]. c #2D5171", +"7]. c #5F7489", +"8]. c #9DA2AC", +"9]. c #A6A9B2", +"0]. c #A4A8AB", +"a]. c #9DA2A1", +"b]. c #777977", +"c]. c #322F30", +"d]. c #161D1E", +"e]. c #283935", +"f]. c #36403B", +"g]. c #3A433C", +"h]. c #5B776B", +"i]. c #9BA185", +"j]. c #767C67", +"k]. c #42493C", +"l]. c #2D352D", +"m]. c #2E342C", +"n]. c #30352E", +"o]. c #2B352A", +"p]. c #28352A", +"q]. c #2F3731", +"r]. c #333635", +"s]. c #2E3434", +"t]. c #2E3737", +"u]. c #3C494B", +"v]. c #2A3537", +"w]. c #382F2F", +"x]. c #BCBDBD", +"y]. c #D6DDDE", +"z]. c #D3DADC", +"A]. c #D3D5D5", +"B]. c #D0D2CF", +"C]. c #C7D0D0", +"D]. c #81A6BF", +"E]. c #256493", +"F]. c #06528E", +"G]. c #0E548D", +"H]. c #457097", +"I]. c #96ABC0", +"J]. c #C8CED8", +"K]. c #D2D3D4", +"L]. c #C6C7C8", +"M]. c #BDC4CA", +"N]. c #B9C5CE", +"O]. c #ABBAC7", +"P]. c #7A8A9E", +"Q]. c #455F7B", +"R]. c #2A4F74", +"S]. c #244E73", +"T]. c #32526F", +"U]. c #657887", +"V]. c #99A1A6", +"W]. c #A6A9A9", +"X]. c #A6A7AB", +"Y]. c #A2A6A6", +"Z]. c #929894", +"`]. c #595C59", +" ^. c #181516", +".^. c #1A2726", +"+^. c #2E3A33", +"@^. c #3A453F", +"#^. c #2E4039", +"$^. c #5F7C70", +"%^. c #7F8B74", +"&^. c #999F83", +"*^. c #757B65", +"=^. c #414637", +"-^. c #2F3831", +";^. c #313830", +">^. c #343730", +",^. c #2C362D", +"'^. c #313631", +")^. c #333735", +"!^. c #2B3432", +"~^. c #293433", +"{^. c #3D4E4D", +"]^. c #221C1A", +"^^. c #807977", +"/^. c #D8DAD7", +"(^. c #D6D9D9", +"_^. c #CDD1CF", +":^. c #CED3CE", +"<^. c #D3D2CD", +"[^. c #C9D2D9", +"}^. c #90ADC5", +"|^. c #366B95", +"1^. c #0A5087", +"2^. c #094D82", +"3^. c #235884", +"4^. c #62829C", +"5^. c #AAB2B8", +"6^. c #888888", +"7^. c #C2C1C1", +"8^. c #C2C1BF", +"9^. c #C2C1BE", +"0^. c #BEC1C4", +"a^. c #B9C3CB", +"b^. c #A5B5C3", +"c^. c #5C778D", +"d^. c #2C5276", +"e^. c #204C74", +"f^. c #1F4970", +"g^. c #365471", +"h^. c #6C7D8E", +"i^. c #9BA0A8", +"j^. c #A7A8AB", +"k^. c #A6A5A8", +"l^. c #999D9A", +"m^. c #7B837D", +"n^. c #0F1617", +"o^. c #1F3232", +"p^. c #37413D", +"q^. c #3D4643", +"r^. c #3D4741", +"s^. c #618274", +"t^. c #999F81", +"u^. c #757B63", +"v^. c #414535", +"w^. c #2B3532", +"x^. c #2F3833", +"y^. c #313B33", +"z^. c #2D3830", +"A^. c #2F342F", +"B^. c #313731", +"C^. c #2C332E", +"D^. c #2F3430", +"E^. c #313734", +"F^. c #2E3836", +"G^. c #2A3230", +"H^. c #303535", +"I^. c #474D4D", +"J^. c #272B27", +"K^. c #49433F", +"L^. c #C5C4C0", +"M^. c #DCDADA", +"N^. c #CFD2D1", +"O^. c #D2D3D5", +"P^. c #D2D1D3", +"Q^. c #CAD1D8", +"R^. c #95AFC3", +"S^. c #3D6C91", +"T^. c #0A4E81", +"U^. c #064E87", +"V^. c #114E7F", +"W^. c #456985", +"X^. c #A2B3C0", +"Y^. c #BEC1C3", +"Z^. c #C0BEBB", +"`^. c #BDBBB9", +" /. c #B8B9BC", +"./. c #B7BABD", +"+/. c #BBBDBF", +"@/. c #BFBFC0", +"#/. c #BABBBA", +"$/. c #BEBCBB", +"%/. c #BFBCBB", +"&/. c #BDBDC0", +"*/. c #B0B8C2", +"=/. c #667A8F", +"-/. c #294B6C", +";/. c #1E4C74", +">/. c #1F4B70", +",/. c #2F4F6C", +"'/. c #6E7E8E", +")/. c #9AA0A9", +"!/. c #A7A7AD", +"~/. c #A4A3A9", +"{/. c #A5A4AA", +"]/. c #A0A1A3", +"^/. c #8C908D", +"//. c #666A64", +"(/. c #252521", +"_/. c #182827", +":/. c #2B3839", +"(. c #352F2D", +",(. c #41534F", +"'(. c #263633", +")(. c #585454", +"!(. c #D7D5DB", +"~(. c #D4D2D7", +"{(. c #CCD2D7", +"](. c #CCCED1", +"^(. c #D0D0D1", +"/(. c #CCCED0", +"((. c #C4CDD4", +"_(. c #A2BACE", +":(. c #527694", +"<(. c #214E72", +"[(. c #244F72", +"}(. c #728899", +"|(. c #B2B4B6", +"1(. c #B3AEAA", +"2(. c #ACABAB", +"3(. c #A5A9AD", +"4(. c #A5AAAD", +"5(. c #A5A7A9", +"6(. c #A6A6A7", +"7(. c #A9ABAB", +"8(. c #ABAEAE", +"9(. c #AFB0B2", +"0(. c #B1B0B0", +"a(. c #B1B2B9", +"b(. c #8D98A7", +"c(. c #556A80", +"d(. c #657586", +"e(. c #8E96A0", +"f(. c #A6A8AD", +"g(. c #AAA6A5", +"h(. c #ABA5A4", +"i(. c #A7A4A5", +"j(. c #A1A2A7", +"k(. c #9BA0A5", +"l(. c #8D9192", +"m(. c #6B6B68", +"n(. c #2D2721", +"o(. c #18241C", +"p(. c #3B4244", +"q(. c #3C4647", +"r(. c #3B4745", +"s(. c #3E4A44", +"t(. c #16231B", +"u(. c #120D09", +"v(. c #709484", +"w(. c #75846A", +"x(. c #73785F", +"y(. c #454A39", +"z(. c #323932", +"A(. c #293730", +"B(. c #2C3330", +"C(. c #2C312E", +"D(. c #2D332F", +"E(. c #2B3029", +"F(. c #374849", +"G(. c #232727", +"H(. c #9D9D9C", +"I(. c #D6D2D7", +"J(. c #D3D3D8", +"K(. c #CBD1D6", +"L(. c #CDCAC8", +"M(. c #C8C6C4", +"N(. c #BDC3C7", +"O(. c #AFBCC5", +"P(. c #8C9FAE", +"Q(. c #8398A8", +"R(. c #A0AAB2", +"S(. c #AAA9A9", +"T(. c #A9A6A4", +"U(. c #9A9EA2", +"V(. c #9A9D9F", +"W(. c #A1A19F", +"X(. c #A1A2A2", +"Y(. c #A5A6A7", +"Z(. c #A7A7A8", +"`(. c #ACABAC", +" _. c #ABAEB2", +"._. c #A5AAB1", +"+_. c #A7A9AC", +"@_. c #ABA9A9", +"#_. c #ACA7A4", +"$_. c #ACA5A0", +"%_. c #A9A39F", +"&_. c #A4A2A1", +"*_. c #A0A1A5", +"=_. c #959A9E", +"-_. c #7F8181", +";_. c #4A4543", +">_. c #1A1612", +",_. c #263630", +"'_. c #3E4644", +")_. c #3A4745", +"!_. c #3C4845", +"~_. c #3E4845", +"{_. c #3F4943", +"]_. c #3D4943", +"^_. c #293A33", +"/_. c #15221B", +"(_. c #060402", +"__. c #739182", +":_. c #778067", +"<_. c #9CA284", +"[_. c #777E64", +"}_. c #474D3C", +"|_. c #313933", +"1_. c #2B322D", +"2_. c #29342B", +"3_. c #2C332F", +"4_. c #2E3633", +"5_. c #2E3733", +"6_. c #27332B", +"7_. c #22302E", +"8_. c #D8D4D5", +"9_. c #CBCED2", +"0_. c #CBCED0", +"a_. c #C9C7C6", +"b_. c #BEBFC0", +"c_. c #B9BCBF", +"d_. c #B3B9BE", +"e_. c #ACB3B9", +"f_. c #A3A5A7", +"g_. c #A1A09E", +"h_. c #9D9C9B", +"i_. c #95989B", +"j_. c #8F9396", +"k_. c #8D8E8F", +"l_. c #797978", +"m_. c #9C9C9D", +"n_. c #9E9E9F", +"o_. c #A3A4A4", +"p_. c #A9A9A8", +"q_. c #AAA8A5", +"r_. c #ABA7A5", +"s_. c #A7A6A6", +"t_. c #A7A4A2", +"u_. c #A39F9B", +"v_. c #A29F9D", +"w_. c #A0A09F", +"x_. c #9B9DA0", +"y_. c #8B8F92", +"z_. c #666665", +"A_. c #2C2724", +"B_. c #2B3D36", +"C_. c #3D4541", +"D_. c #3D4543", +"E_. c #15231B", +"F_. c #729281", +"G_. c #727D62", +"H_. c #9DA284", +"I_. c #7B8169", +"J_. c #484E3E", +"K_. c #2E3634", +"L_. c #2C342E", +"M_. c #2D3431", +"N_. c #29352E", +"O_. c #2F302F", +"P_. c #3A4041", +"Q_. c #314542", +"R_. c #171714", +"S_. c #9A9493", +"T_. c #DBD6D9", +"U_. c #D1D0D4", +"V_. c #CCCCCF", +"W_. c #CACBCC", +"X_. c #C5C6C9", +"Y_. c #C3C6C8", +"Z_. c #C1C4C6", +"`_. c #B3B5B7", +" :. c #A09F9D", +".:. c #9E9D9C", +"+:. c #86898C", +"@:. c #828688", +"#:. c #717173", +"$:. c #686867", +"%:. c #8E8E8F", +"&:. c #949393", +"*:. c #999B9A", +"=:. c #A5A39D", +"-:. c #A9A59E", +";:. c #A0A3A3", +">:. c #9DA2A4", +",:. c #9DA0A1", +"':. c #9B9D9C", +"):. c #9D9E9D", +"!:. c #9C9D9C", +"~:. c #969898", +"{:. c #7D7F7F", +"]:. c #474542", +"^:. c #1A1C19", +"/:. c #21322D", +"(:. c #323B36", +"_:. c #3B443F", +"::. c #17241C", +"<:. c #76998A", +"[:. c #718067", +"}:. c #9BA283", +"|:. c #7D846B", +"1:. c #474E3E", +"2:. c #323933", +"3:. c #27342C", +"4:. c #303735", +"5:. c #3A4D48", +"6:. c #222B29", +"7:. c #494140", +"8:. c #D1CFD4", +"9:. c #CDCACA", +"0:. c #C2C5C7", +"a:. c #BCC2C6", +"b:. c #BBC0C4", +"c:. c #B6BBBD", +"d:. c #B0B1B2", +"e:. c #AAA9A8", +"f:. c #A2A2A1", +"g:. c #9A9B9B", +"h:. c #949596", +"i:. c #838588", +"j:. c #68696B", +"k:. c #47484A", +"l:. c #6E6E70", +"m:. c #AAAAAB", +"n:. c #595A5B", +"o:. c #7C7F82", +"p:. c #88898C", +"q:. c #8E8C8A", +"r:. c #8E8C89", +"s:. c #919391", +"t:. c #949996", +"u:. c #979A94", +"v:. c #9E9E96", +"w:. c #989D9B", +"x:. c #969B9C", +"y:. c #979B9C", +"z:. c #989C9C", +"A:. c #999C9C", +"B:. c #989A98", +"C:. c #919290", +"D:. c #646562", +"E:. c #282623", +"F:. c #1A2A26", +"G:. c #2E3D3C", +"H:. c #3B463F", +"I:. c #3A4644", +"J:. c #82A396", +"K:. c #9DA385", +"L:. c #7D836A", +"M:. c #494E3E", +"N:. c #313832", +"O:. c #2A322B", +"P:. c #27332C", +"Q:. c #303634", +"R:. c #333936", +"S:. c #2B342D", +"T:. c #2A332B", +"U:. c #394F4D", +"V:. c #1F2625", +"W:. c #7B787A", +"X:. c #D0CDD1", +"Y:. c #D1CCCA", +"Z:. c #C8C6C5", +"`:. c #C2C4C6", +" <. c #BAC0C4", +".<. c #B8BDC1", +"+<. c #B6B7B8", +"@<. c #AFACA9", +"#<. c #A5A19E", +"$<. c #9B9C9D", +"%<. c #96989B", +"&<. c #8E9092", +"*<. c #838485", +"=<. c #4B4C4D", +"-<. c #7F8284", +";<. c #ACAEB1", +"><. c #A2A2A3", +",<. c #9E9F9F", +"'<. c #5F6368", +")<. c #68696D", +"!<. c #83807E", +"~<. c #918E8A", +"{<. c #919490", +"]<. c #929A96", +"^<. c #929995", +"/<. c #989C95", +"(<. c #999A94", +"_<. c #989994", +":<. c #999B97", +"<<. c #9D9F9D", +"[<. c #9A9B9A", +"}<. c #949593", +"|<. c #828280", +"1<. c #393A36", +"2<. c #161D19", +"3<. c #233835", +"4<. c #3B443B", +"5<. c #3A443B", +"6<. c #3B4845", +"7<. c #3A4643", +"8<. c #3B4744", +"9<. c #404A44", +"0<. c #2A3932", +"a<. c #17231C", +"b<. c #8BAA9F", +"c<. c #71806A", +"d<. c #9FA287", +"e<. c #7D826A", +"f<. c #494C3D", +"g<. c #2F342E", +"h<. c #2F3531", +"i<. c #313630", +"j<. c #323731", +"k<. c #30342D", +"l<. c #323630", +"m<. c #32362F", +"n<. c #333731", +"o<. c #373935", +"p<. c #2A352B", +"q<. c #2E362F", +"r<. c #3D4A48", +"s<. c #3D3B38", +"t<. c #ABA9A6", +"u<. c #CFCDCC", +"v<. c #C9C5C7", +"w<. c #C5C2C5", +"x<. c #BCBDC0", +"y<. c #B5BABA", +"z<. c #B4B5B3", +"A<. c #B2ACAA", +"B<. c #ABA4A3", +"C<. c #78797A", +"D<. c #545455", +"E<. c #9E9FA1", +"F<. c #BEBFBF", +"G<. c #A4A5A8", +"H<. c #737376", +"I<. c #777573", +"J<. c #8A8B8A", +"K<. c #969A98", +"L<. c #9A9D9C", +"M<. c #9C9E9B", +"N<. c #9C9D96", +"O<. c #9B9D96", +"P<. c #989E99", +"Q<. c #9D9FA0", +"R<. c #9C999D", +"S<. c #8E888C", +"T<. c #5E595B", +"U<. c #1A1917", +"V<. c #1F2E29", +"W<. c #3D4843", +"X<. c #3F4B46", +"Y<. c #3F4A45", +"Z<. c #3E4844", +"`<. c #3E4946", +" [. c #3E4944", +".[. c #2A3B34", +"+[. c #16231C", +"@[. c #110C09", +"#[. c #070503", +"$[. c #313231", +"%[. c #8EABA0", +"&[. c #717F6A", +"*[. c #A1A188", +"=[. c #7F836C", +"-[. c #494C3C", +";[. c #323530", +">[. c #323733", +",[. c #33372F", +"'[. c #363A33", +")[. c #353A32", +"![. c #343830", +"~[. c #34362D", +"{[. c #33342C", +"][. c #33352C", +"^[. c #393933", +"/[. c #2B362C", +"([. c #2C312B", +"_[. c #383B3A", +":[. c #3F4C4D", +"<[. c #28312D", +"[[. c #56544F", +"}[. c #BAB9B9", +"|[. c #CAC6CA", +"1[. c #C3BFC2", +"2[. c #B6B7B7", +"3[. c #B2B3B1", +"4[. c #B2AFAE", +"5[. c #ABA7A7", +"6[. c #979696", +"7[. c #6E6F6F", +"8[. c #B6B6B7", +"9[. c #878686", +"0[. c #7F807F", +"a[. c #A0A19F", +"b[. c #9EA19B", +"c[. c #9BA09A", +"d[. c #999E9C", +"e[. c #9A9A9F", +"f[. c #97939A", +"g[. c #6F666B", +"h[. c #2F2427", +"i[. c #1A2424", +"j[. c #3D463E", +"k[. c #3C4541", +"l[. c #3E4846", +"m[. c #3F4944", +"n[. c #3F4B45", +"o[. c #15231C", +"p[. c #343534", +"q[. c #97B2A7", +"r[. c #788572", +"s[. c #A0A088", +"t[. c #81866F", +"u[. c #4C5143", +"v[. c #303531", +"w[. c #313431", +"x[. c #32342F", +"y[. c #33372E", +"z[. c #353931", +"A[. c #34372F", +"B[. c #34372E", +"C[. c #373932", +"D[. c #293229", +"E[. c #373234", +"F[. c #3B3C41", +"G[. c #354845", +"H[. c #222C28", +"I[. c #635E5D", +"J[. c #C9C6C6", +"K[. c #B8B7B6", +"L[. c #ADADAB", +"M[. c #9C9D9A", +"N[. c #787877", +"O[. c #7E807F", +"P[. c #909693", +"Q[. c #9A9D9D", +"R[. c #A09FA2", +"S[. c #979497", +"T[. c #3C3636", +"U[. c #1B1F20", +"V[. c #2D3E3E", +"W[. c #3F4946", +"X[. c #3E4A45", +"Y[. c #9BB2A8", +"Z[. c #7B8977", +"`[. c #9F9F87", +" }. c #838770", +".}. c #4D5345", +"+}. c #343833", +"@}. c #333733", +"#}. c #363A32", +"$}. c #353932", +"%}. c #33362E", +"&}. c #32362E", +"*}. c #2E352E", +"=}. c #333531", +"-}. c #392F33", +";}. c #392F37", +">}. c #3A4144", +",}. c #314645", +"'}. c #1E2121", +")}. c #827978", +"!}. c #B2B2AE", +"~}. c #ADAFAB", +"{}. c #9C9C99", +"]}. c #7E7E7C", +"^}. c #5F605E", +"/}. c #5A5C5B", +"(}. c #848585", +"_}. c #4D4E4F", +":}. c #535659", +"<}. c #69696D", +"[}. c #817D80", +"}}. c #7B7575", +"|}. c #413A38", +"1}. c #1B221C", +"2}. c #2B3D38", +"3}. c #3F4942", +"4}. c #404A43", +"5}. c #404C46", +"6}. c #819A8E", +"7}. c #7B8B7A", +"8}. c #828670", +"9}. c #4C5243", +"0}. c #323834", +"a}. c #333530", +"b}. c #333633", +"c}. c #353830", +"d}. c #313A31", +"e}. c #333431", +"f}. c #393134", +"g}. c #353237", +"h}. c #384145", +"i}. c #343D42", +"j}. c #2A2323", +"k}. c #8F8D8E", +"l}. c #B3B2B3", +"m}. c #979697", +"n}. c #6C696F", +"o}. c #454248", +"p}. c #312E30", +"q}. c #292321", +"r}. c #1C201B", +"s}. c #2B352F", +"t}. c #3C4641", +"u}. c #3F4845", +"v}. c #3F4A44", +"w}. c #6B897C", +"x}. c #7B8E7D", +"y}. c #A3A38B", +"z}. c #303732", +"A}. c #343A37", +"B}. c #343732", +"C}. c #313531", +"D}. c #34382F", +"E}. c #363036", +"F}. c #332E34", +"G}. c #313136", +"H}. c #393F44", +"I}. c #1A1F1B", +"J}. c #A6A8A3", +"K}. c #A6A2A5", +"L}. c #B2B0B1", +"M}. c #A8A0A7", +"N}. c #6E676C", +"O}. c #1C1516", +"P}. c #1F2B25", +"Q}. c #34443F", +"R}. c #414A43", +"S}. c #404943", +"T}. c #3F4A42", +"U}. c #404A42", +"V}. c #3E3F3E", +"W}. c #719285", +"X}. c #7B907F", +"Y}. c #9E9F87", +"Z}. c #8B8E79", +"`}. c #505648", +" |. c #333B35", +".|. c #303430", +"+|. c #343934", +"@|. c #333934", +"#|. c #353A31", +"$|. c #353831", +"%|. c #343A35", +"&|. c #323833", +"*|. c #313533", +"=|. c #303334", +"-|. c #303235", +";|. c #303236", +">|. c #2C403F", +",|. c #27312F", +"'|. c #6F6968", +")|. c #9D9A99", +"!|. c #9A969A", +"~|. c #908D91", +"{|. c #9E9D9E", +"]|. c #797277", +"^|. c #373032", +"/|. c #202A29", +"(|. c #3C514C", +"_|. c #414B45", +":|. c #414C46", +"<|. c #414C45", +"[|. c #414A44", +"}|. c #404A47", +"||. c #3F4947", +"1|. c #424F49", +"2|. c #424342", +"3|. c #7C968A", +"4|. c #7F9280", +"5|. c #9CA188", +"6|. c #8B8F79", +"7|. c #4F5545", +"8|. c #323831", +"9|. c #313732", +"0|. c #353A36", +"a|. c #353A35", +"b|. c #373B34", +"c|. c #343931", +"d|. c #383B35", +"e|. c #343933", +"f|. c #323B3B", +"g|. c #354448", +"h|. c #282C2F", +"i|. c #484343", +"j|. c #726F71", +"k|. c #848284", +"l|. c #898889", +"m|. c #888989", +"n|. c #828383", +"o|. c #838484", +"p|. c #838585", +"q|. c #848384", +"r|. c #848383", +"s|. c #828182", +"t|. c #C9C8C8", +"u|. c #B9B8B9", +"v|. c #B5B4B4", +"w|. c #B2B1B1", +"x|. c #AFAEAF", +"y|. c #989798", +"z|. c #818081", +"A|. c #A1A0A1", +"B|. c #A2A1A2", +"C|. c #A3A2A3", +"D|. c #A2A3A2", +"E|. c #A1A1A2", +"F|. c #9B9A9A", +"G|. c #898787", +"H|. c #585656", +"I|. c #2A2C2D", +"J|. c #283436", +"K|. c #3F5555", +"L|. c #444D4C", +"M|. c #444A46", +"N|. c #434A47", +"O|. c #424948", +"P|. c #404A45", +"Q|. c #404B43", +"R|. c #434F49", +"S|. c #444F49", +"T|. c #273831", +"U|. c #16241D", +"V|. c #444544", +"W|. c #859487", +"X|. c #7E907E", +"Y|. c #868D74", +"Z|. c #515640", +"`|. c #353A2C", +" 1. c #303B35", +".1. c #383B34", +"+1. c #3B3F38", +"@1. c #3B3E37", +"#1. c #393C35", +"$1. c #383C35", +"%1. c #343A32", +"&1. c #3B3B33", +"*1. c #3E3C34", +"=1. c #3A3831", +"-1. c #363730", +";1. c #2E3A36", +">1. c #29352A", +",1. c #30362E", +"'1. c #373432", +")1. c #3D3D3F", +"!1. c #3C4649", +"~1. c #2D3536", +"{1. c #323130", +"]1. c #514A49", +"^1. c #6A6667", +"/1. c #7D7D7E", +"(1. c #7E8180", +"_1. c #7D8181", +":1. c #7E8182", +"<1. c #807E81", +"[1. c #827D80", +"}1. c #7F7E7F", +"|1. c #807E7F", +"11. c #848283", +"21. c #817E80", +"31. c #838082", +"41. c #8B898A", +"51. c #535253", +"61. c #313031", +"71. c #CCCBCC", +"81. c #B4B1B2", +"91. c #B2AFB0", +"01. c #AEACAD", +"a1. c #ADACAC", +"b1. c #A8A8A9", +"c1. c #A8A7A9", +"d1. c #9B9B9C", +"e1. c #3E3C3D", +"f1. c #2B292B", +"g1. c #777375", +"h1. c #9E9A9C", +"i1. c #A09C9F", +"j1. c #A29EA3", +"k1. c #A5A1A5", +"l1. c #A29FA2", +"m1. c #9F9D9F", +"n1. c #9FA09F", +"o1. c #A0A1A0", +"p1. c #9FA19F", +"q1. c #9E9EA1", +"r1. c #9B9CA1", +"s1. c #969598", +"t1. c #837F80", +"u1. c #605859", +"v1. c #3B3335", +"w1. c #262C2E", +"x1. c #354545", +"y1. c #445858", +"z1. c #445151", +"A1. c #454F4E", +"B1. c #424C48", +"C1. c #414D48", +"D1. c #404E4A", +"E1. c #404D4A", +"F1. c #3F4C46", +"G1. c #424B48", +"H1. c #444C4B", +"I1. c #424A4A", +"J1. c #424D46", +"K1. c #424C46", +"L1. c #404B45", +"M1. c #273D38", +"N1. c #162721", +"O1. c #060401", +"P1. c #404140", +"Q1. c #7B9587", +"R1. c #768F7C", +"S1. c #969F87", +"T1. c #858D73", +"U1. c #525840", +"V1. c #383E2E", +"W1. c #303630", +"X1. c #393D34", +"Y1. c #3F423A", +"Z1. c #393932", +"`1. c #353730", +" 2. c #313931", +".2. c #3C3F35", +"+2. c #3F3F37", +"@2. c #3C3C34", +"#2. c #393A33", +"$2. c #2F3834", +"%2. c #303B33", +"&2. c #333732", +"*2. c #383635", +"=2. c #3A3437", +"-2. c #3B393B", +";2. c #3C4749", +">2. c #364544", +",2. c #2A312F", +"'2. c #2D2627", +")2. c #4C4343", +"!2. c #6C6966", +"~2. c #767876", +"{2. c #7B7E7D", +"]2. c #7D7E7E", +"^2. c #7E7C7E", +"/2. c #7F7D7F", +"(2. c #7F7F80", +"_2. c #7F8081", +":2. c #7E7E80", +"<2. c #7D7D7F", +"[2. c #808082", +"}2. c #7E7E7F", +"|2. c #7E7F80", +"12. c #858587", +"22. c #434345", +"32. c #48484A", +"42. c #A9ABAC", +"52. c #A6A8A9", +"62. c #A4A6A6", +"72. c #A4A5A5", +"82. c #A1A2A1", +"92. c #4A4B4A", +"02. c #686967", +"a2. c #969695", +"b2. c #9E9A9E", +"c2. c #9F979E", +"d2. c #A29AA0", +"e2. c #A09B9F", +"f2. c #9E9B9D", +"g2. c #9B9C9A", +"h2. c #98989A", +"i2. c #949597", +"j2. c #808182", +"k2. c #332D2E", +"l2. c #252325", +"m2. c #363C41", +"n2. c #424B52", +"o2. c #495151", +"p2. c #464D49", +"q2. c #434D49", +"r2. c #414E48", +"s2. c #3F4D46", +"t2. c #3C4842", +"u2. c #3B473F", +"v2. c #434748", +"w2. c #424647", +"x2. c #414B44", +"y2. c #424B45", +"z2. c #243B36", +"A2. c #12241E", +"B2. c #0F0A07", +"C2. c #373735", +"D2. c #709285", +"E2. c #718A78", +"F2. c #9CA38C", +"G2. c #889076", +"H2. c #535840", +"I2. c #373C2D", +"J2. c #2F352F", +"K2. c #393C33", +"L2. c #3E4038", +"M2. c #393731", +"N2. c #3A3B35", +"O2. c #373A33", +"P2. c #2F362C", +"Q2. c #2E352B", +"R2. c #373D34", +"S2. c #353934", +"T2. c #303534", +"U2. c #2E3335", +"V2. c #2E3236", +"W2. c #303136", +"X2. c #302E32", +"Y2. c #333135", +"Z2. c #353839", +"`2. c #354644", +" 3. c #282A27", +".3. c #23211E", +"+3. c #38322F", +"@3. c #524E4B", +"#3. c #686663", +"$3. c #70706F", +"%3. c #757776", +"&3. c #74797A", +"*3. c #75797A", +"=3. c #767A7B", +"-3. c #787C7D", +";3. c #7B7D7F", +">3. c #787A7C", +",3. c #7A7B7E", +"'3. c #353539", +")3. c #616265", +"!3. c #D1D2D5", +"~3. c #AFB1B5", +"{3. c #A3A7AA", +"]3. c #9B9FA2", +"^3. c #9BA0A2", +"/3. c #989A9B", +"(3. c #9B9B98", +"_3. c #A1A19D", +":3. c #9A9C97", +"<3. c #565854", +"[3. c #171B16", +"}3. c #8D928C", +"|3. c #99999A", +"13. c #9D999F", +"23. c #9C999E", +"33. c #989699", +"43. c #939493", +"53. c #8E8F8D", +"63. c #787B77", +"73. c #60605B", +"83. c #3F3D39", +"93. c #251D1B", +"03. c #23201F", +"a3. c #353E40", +"b3. c #485356", +"c3. c #484C52", +"d3. c #48494F", +"e3. c #494D4B", +"f3. c #464B47", +"g3. c #3E4941", +"h3. c #424A45", +"i3. c #404B47", +"j3. c #3D4D4B", +"k3. c #243733", +"l3. c #151C17", +"m3. c #100704", +"n3. c #0A0604", +"o3. c #2E2D2A", +"p3. c #709284", +"q3. c #738A78", +"r3. c #9EA58E", +"s3. c #8C927A", +"t3. c #2F3A32", +"u3. c #393B33", +"v3. c #3D3E37", +"w3. c #3A3A35", +"x3. c #363831", +"y3. c #343834", +"z3. c #2F3534", +"A3. c #2B3534", +"B3. c #243130", +"C3. c #203031", +"D3. c #1F2E35", +"E3. c #213338", +"F3. c #1E3235", +"G3. c #203334", +"H3. c #283837", +"I3. c #333434", +"J3. c #393B39", +"K3. c #354743", +"L3. c #2B3735", +"M3. c #262927", +"N3. c #2A2725", +"O3. c #353030", +"P3. c #4F5555", +"Q3. c #5F6565", +"R3. c #696E6E", +"S3. c #707374", +"T3. c #737476", +"U3. c #79787A", +"V3. c #747376", +"W3. c #6C6B6F", +"X3. c #222126", +"Y3. c #747278", +"Z3. c #C9C9CE", +"`3. c #A09FA5", +" 4. c #97969C", +".4. c #99989E", +"+4. c #939396", +"@4. c #918E8F", +"#4. c #989393", +"$4. c #A19C9C", +"%4. c #999696", +"&4. c #171716", +"*4. c #4A4A49", +"=4. c #858785", +"-4. c #8C8F8F", +";4. c #8E9193", +">4. c #898B8D", +",4. c #787979", +"'4. c #6A6968", +")4. c #504E4D", +"!4. c #363432", +"~4. c #212522", +"{4. c #1F221E", +"]4. c #29302B", +"^4. c #495051", +"/4. c #505557", +"(4. c #4A4E4F", +"_4. c #454B4A", +":4. c #3E4C4A", +"<4. c #3E4D4B", +"[4. c #3B4B48", +"}4. c #334541", +"|4. c #30443F", +"14. c #38453F", +"24. c #41473E", +"34. c #3F463E", +"44. c #434B46", +"54. c #434C47", +"64. c #3F4F4D", +"74. c #243A35", +"84. c #12221B", +"94. c #0E0A07", +"04. c #292825", +"a4. c #739385", +"b4. c #768C79", +"c4. c #9EA48C", +"d4. c #8A9278", +"e4. c #393C34", +"f4. c #3D3E36", +"g4. c #3B3B36", +"h4. c #343B31", +"i4. c #353735", +"j4. c #2E3536", +"k4. c #263231", +"l4. c #203332", +"m4. c #14201E", +"n4. c #0F1A19", +"o4. c #0D1619", +"p4. c #0D1819", +"q4. c #0D1B1A", +"r4. c #101F1C", +"s4. c #18231E", +"t4. c #1F2F2B", +"u4. c #253331", +"v4. c #303730", +"w4. c #333C38", +"x4. c #384949", +"y4. c #2F393A", +"z4. c #252C2E", +"A4. c #242528", +"B4. c #2A292B", +"C4. c #3A3537", +"D4. c #4A4546", +"E4. c #565353", +"F4. c #656363", +"G4. c #4E5051", +"H4. c #101315", +"I4. c #5D6062", +"J4. c #B7B8BC", +"K4. c #96969A", +"L4. c #949397", +"M4. c #969498", +"N4. c #919092", +"O4. c #8C8A8C", +"P4. c #928E91", +"Q4. c #989497", +"R4. c #8E8C8F", +"S4. c #514F52", +"T4. c #100F11", +"U4. c #373538", +"V4. c #68676A", +"W4. c #676566", +"X4. c #5C5858", +"Y4. c #494443", +"Z4. c #2F2A2A", +"`4. c #251F20", +" 5. c #201F21", +".5. c #23282A", +"+5. c #324344", +"@5. c #43504E", +"#5. c #4F5A57", +"$5. c #4C5552", +"%5. c #48514D", +"&5. c #414D4B", +"*5. c #3C4C48", +"=5. c #354744", +"-5. c #2B4042", +";5. c #24363B", +">5. c #203337", +",5. c #1E2326", +"'5. c #192022", +")5. c #151E1F", +"!5. c #111D1B", +"~5. c #192322", +"{5. c #23322D", +"]5. c #2B3F38", +"^5. c #33463F", +"/5. c #384840", +"(5. c #3D4941", +"_5. c #3F463D", +":5. c #444E48", +"<5. c #424E48", +"[5. c #11241D", +"}5. c #0F0C08", +"|5. c #2A2927", +"15. c #759385", +"25. c #758A77", +"35. c #979F86", +"45. c #8E967C", +"55. c #575E47", +"65. c #3B3C37", +"75. c #2C3134", +"85. c #242F30", +"95. c #1B2B2B", +"05. c #151D1C", +"a5. c #090504", +"b5. c #0B0605", +"c5. c #080403", +"d5. c #0C0604", +"e5. c #100F0C", +"f5. c #151817", +"g5. c #192421", +"h5. c #1D2E27", +"i5. c #313837", +"j5. c #3C4442", +"k5. c #384446", +"l5. c #323A42", +"m5. c #283037", +"n5. c #23282B", +"o5. c #1E2626", +"p5. c #232220", +"q5. c #2B2725", +"r5. c #2F2B28", +"s5. c #1D1D1A", +"t5. c #050806", +"u5. c #232624", +"v5. c #787B7A", +"w5. c #8B8E8D", +"x5. c #8A8D8C", +"y5. c #898B8B", +"z5. c #8C8D8D", +"A5. c #7F8080", +"B5. c #7A7C7C", +"C5. c #070405", +"D5. c #292226", +"E5. c #251C1D", +"F5. c #231E1F", +"G5. c #232526", +"H5. c #2E3537", +"I5. c #424A4E", +"J5. c #485053", +"K5. c #4E5353", +"L5. c #4B4E4E", +"M5. c #484E4E", +"N5. c #424E4D", +"O5. c #3D4D4C", +"P5. c #263C39", +"Q5. c #1F2522", +"R5. c #13181B", +"S5. c #0C0B0F", +"T5. c #0C0A0F", +"U5. c #0B0306", +"V5. c #090204", +"W5. c #090305", +"X5. c #070304", +"Y5. c #0F0E0B", +"Z5. c #151F19", +"`5. c #1F352D", +" 6. c #2F463F", +".6. c #384841", +"+6. c #45504A", +"@6. c #444D46", +"#6. c #414C47", +"$6. c #233934", +"%6. c #0F0D09", +"&6. c #13100E", +"*6. c #2E2D2B", +"=6. c #789385", +"-6. c #768977", +";6. c #9FA58D", +">6. c #929A81", +",6. c #5B624C", +"'6. c #393F31", +")6. c #2E3831", +"!6. c #393A32", +"~6. c #3B3D37", +"{6. c #30372D", +"]6. c #2A3228", +"^6. c #263331", +"/6. c #213233", +"(6. c #162121", +"_6. c #100A0A", +":6. c #0D0605", +"<6. c #2B2B28", +"[6. c #5A5B55", +"}6. c #32332D", +"|6. c #1C1D18", +"16. c #11110E", +"26. c #0B0405", +"36. c #0C0304", +"46. c #0C0505", +"56. c #0D0C09", +"66. c #121F19", +"76. c #1A2C28", +"86. c #2C3630", +"96. c #2E342B", +"06. c #2F362B", +"a6. c #343632", +"b6. c #38363D", +"c6. c #373A41", +"d6. c #343C40", +"e6. c #334344", +"f6. c #324746", +"g6. c #232B28", +"h6. c #181E1F", +"i6. c #0E1717", +"j6. c #0F1213", +"k6. c #393534", +"l6. c #585955", +"m6. c #646662", +"n6. c #6E6F6D", +"o6. c #7B7A7A", +"p6. c #2B2824", +"q6. c #12100D", +"r6. c #1C2221", +"s6. c #273535", +"t6. c #324243", +"u6. c #404D4E", +"v6. c #414D4E", +"w6. c #495454", +"x6. c #4A5351", +"y6. c #4B504E", +"z6. c #494745", +"A6. c #464A4A", +"B6. c #454D50", +"C6. c #404B4E", +"D6. c #303E41", +"E6. c #222D2F", +"F6. c #0D080A", +"G6. c #110C0F", +"H6. c #1B1A1B", +"I6. c #252526", +"J6. c #2A2B2C", +"K6. c #262627", +"L6. c #121313", +"M6. c #0D0906", +"N6. c #181F1A", +"O6. c #434C46", +"P6. c #454E48", +"Q6. c #45514C", +"R6. c #3E4E4C", +"S6. c #223733", +"T6. c #11251D", +"U6. c #161210", +"V6. c #7C9688", +"W6. c #788A78", +"X6. c #9AA088", +"Y6. c #8C947C", +"Z6. c #5E6651", +"`6. c #3C4233", +" 7. c #323A33", +".7. c #3B3C34", +"+7. c #363931", +"@7. c #30342E", +"#7. c #27322A", +"$7. c #182F2A", +"%7. c #131716", +"&7. c #100404", +"*7. c #110807", +"=7. c #52504C", +"-7. c #585956", +";7. c #3A3C38", +">7. c #262720", +",7. c #1A1913", +"'7. c #191813", +")7. c #191613", +"!7. c #191415", +"~7. c #181214", +"{7. c #171114", +"]7. c #120E11", +"^7. c #0E0C0A", +"/7. c #141D18", +"(7. c #1B2B23", +"_7. c #23342A", +":7. c #353534", +"<7. c #353838", +"[7. c #373A3A", +"}7. c #393D3E", +"|7. c #3B4042", +"17. c #3B4147", +"27. c #3A434B", +"37. c #364148", +"47. c #2D3B3F", +"57. c #252E2F", +"67. c #202727", +"77. c #17201C", +"87. c #1D1C18", +"97. c #222524", +"07. c #2B2E2C", +"a7. c #30322F", +"b7. c #373332", +"c7. c #3F3A39", +"d7. c #413D3C", +"e7. c #444040", +"f7. c #464342", +"g7. c #4A4747", +"h7. c #484545", +"i7. c #464343", +"j7. c #454141", +"k7. c #3C3939", +"l7. c #3E3A39", +"m7. c #3F3837", +"n7. c #35312F", +"o7. c #292927", +"p7. c #1E1F1E", +"q7. c #1C1D1C", +"r7. c #181C1A", +"s7. c #1A2521", +"t7. c #232924", +"u7. c #26332A", +"v7. c #2E463E", +"w7. c #364944", +"x7. c #414D4C", +"y7. c #424B4B", +"z7. c #444E4D", +"A7. c #414B48", +"B7. c #424C47", +"C7. c #424A43", +"D7. c #434C43", +"E7. c #404A41", +"F7. c #3E493F", +"G7. c #43484B", +"H7. c #3A4047", +"I7. c #283034", +"J7. c #0D1311", +"K7. c #0B0706", +"L7. c #110F0E", +"M7. c #151716", +"N7. c #1C1B1A", +"O7. c #20201E", +"P7. c #282928", +"Q7. c #333533", +"R7. c #383B38", +"S7. c #3C3F3D", +"T7. c #404441", +"U7. c #373B38", +"V7. c #141211", +"W7. c #0B0303", +"X7. c #0E0202", +"Y7. c #171211", +"Z7. c #282C2C", +"`7. c #444847", +" 8. c #414943", +".8. c #3F4941", +"+8. c #404C48", +"@8. c #434E49", +"#8. c #3D4B49", +"$8. c #223732", +"%8. c #11110C", +"&8. c #829C90", +"*8. c #7D907F", +"=8. c #979C85", +"-8. c #8E967F", +";8. c #606652", +">8. c #414434", +",8. c #383B31", +"'8. c #363A36", +")8. c #3A3C34", +"!8. c #353A2E", +"~8. c #31392D", +"{8. c #313430", +"]8. c #2E3233", +"^8. c #283131", +"/8. c #1D2C29", +"(8. c #0F1915", +"_8. c #0D0705", +":8. c #18110F", +"<8. c #2E2826", +"[8. c #3F3C39", +"}8. c #2C2A27", +"|8. c #12130F", +"18. c #0B0B06", +"28. c #0C0804", +"38. c #0E0C09", +"48. c #11100D", +"58. c #131210", +"68. c #181616", +"78. c #1F191D", +"88. c #1C171A", +"98. c #0F1410", +"08. c #243131", +"a8. c #31332E", +"b8. c #343733", +"c8. c #353736", +"d8. c #3A393C", +"e8. c #39393D", +"f8. c #37373B", +"g8. c #36383B", +"h8. c #383D3F", +"i8. c #394343", +"j8. c #3B4848", +"k8. c #2E3B39", +"l8. c #293834", +"m8. c #262926", +"n8. c #252A28", +"o8. c #242A2A", +"p8. c #242A2B", +"q8. c #23292A", +"r8. c #24292B", +"s8. c #252B2D", +"t8. c #242B2C", +"u8. c #282B2B", +"v8. c #292724", +"w8. c #262A22", +"x8. c #2B362F", +"y8. c #323B37", +"z8. c #3D4C47", +"A8. c #3F4B44", +"B8. c #434845", +"C8. c #42473C", +"D8. c #434A3E", +"E8. c #3F4A40", +"F8. c #3A4C44", +"G8. c #283B3B", +"H8. c #1A2325", +"I8. c #0E100F", +"J8. c #1E211C", +"K8. c #2F2F2D", +"L8. c #2F2D2C", +"M8. c #1F2221", +"N8. c #1D1A1A", +"O8. c #211E1D", +"P8. c #272623", +"Q8. c #302F2C", +"R8. c #353633", +"S8. c #373A37", +"T8. c #3B3F3A", +"U8. c #3F3D3B", +"V8. c #393233", +"W8. c #251D1F", +"X8. c #0E0709", +"Y8. c #080202", +"Z8. c #110C0D", +"`8. c #3C4546", +" 9. c #444A47", +".9. c #424840", +"+9. c #414B43", +"@9. c #404D48", +"#9. c #3E4F4C", +"$9. c #404A4A", +"%9. c #243632", +"&9. c #14231D", +"*9. c #120F0B", +"=9. c #13100D", +"-9. c #7E9080", +";9. c #999F8A", +">9. c #636754", +",9. c #424333", +"'9. c #3B3C31", +")9. c #343831", +"!9. c #363834", +"~9. c #373733", +"{9. c #37382F", +"]9. c #33372A", +"^9. c #2E372B", +"/9. c #242F2F", +"(9. c #121411", +"_9. c #0E0605", +":9. c #201B18", +"<9. c #2B2624", +"[9. c #221E1B", +"}9. c #100E0B", +"|9. c #090805", +"19. c #0A0A05", +"29. c #0D0B07", +"39. c #130908", +"49. c #0E0604", +"59. c #090804", +"69. c #070A05", +"79. c #070D06", +"89. c #0B0D08", +"99. c #0D0A07", +"09. c #110A0A", +"a9. c #160D11", +"b9. c #1E191B", +"c9. c #1C1D1B", +"d9. c #0E0E0D", +"e9. c #172424", +"f9. c #273029", +"g9. c #373939", +"h9. c #393A3C", +"i9. c #38383C", +"j9. c #36383A", +"k9. c #343637", +"l9. c #343535", +"m9. c #383B3C", +"n9. c #3E3B3E", +"o9. c #3D4042", +"p9. c #3B4343", +"q9. c #384241", +"r9. c #394043", +"s9. c #3A4145", +"t9. c #394045", +"u9. c #3A4247", +"v9. c #3A4146", +"w9. c #3B4347", +"x9. c #3E4849", +"y9. c #38453C", +"z9. c #3D4840", +"A9. c #444A42", +"B9. c #434B41", +"C9. c #3D4C44", +"D9. c #324B46", +"E9. c #111311", +"F9. c #150F0F", +"G9. c #474441", +"H9. c #1F1918", +"I9. c #151613", +"J9. c #221D1C", +"K9. c #2A2523", +"L9. c #312B29", +"M9. c #38302F", +"N9. c #3B3432", +"O9. c #3A3936", +"P9. c #354038", +"Q9. c #3E3D38", +"R9. c #433D3C", +"S9. c #423B3D", +"T9. c #2C292C", +"U9. c #0B0909", +"V9. c #070101", +"W9. c #110C0C", +"X9. c #242E2B", +"Y9. c #424940", +"Z9. c #434940", +"`9. c #3F4A46", +" 0. c #3E4C48", +".0. c #434E48", +"+0. c #474D4A", +"@0. c #414A4A", +"#0. c #233430", +"$0. c #151F18", +"%0. c #110E09", +"&0. c #7A8D7C", +"*0. c #9BA18C", +"=0. c #636855", +"-0. c #434433", +";0. c #3A3B30", +">0. c #343630", +",0. c #383B37", +"'0. c #393935", +")0. c #37372F", +"!0. c #32362C", +"~0. c #2D362B", +"{0. c #29342C", +"]0. c #1D322E", +"^0. c #0B0705", +"/0. c #322A29", +"(0. c #3F3A37", +"_0. c #181310", +":0. c #080603", +"<0. c #070602", +"[0. c #070803", +"}0. c #090A06", +"|0. c #0A0D08", +"10. c #0C120C", +"20. c #090F09", +"30. c #070E07", +"40. c #050A05", +"50. c #0A0B06", +"60. c #110808", +"70. c #140A0D", +"80. c #120C0E", +"90. c #151412", +"00. c #242622", +"a0. c #252520", +"b0. c #130E0C", +"c0. c #0D0907", +"d0. c #121C16", +"e0. c #383738", +"f0. c #383638", +"g0. c #343838", +"h0. c #363939", +"i0. c #373B3B", +"j0. c #393C3C", +"k0. c #3B3639", +"l0. c #3E383C", +"m0. c #3B363A", +"n0. c #3A3739", +"o0. c #393C3B", +"p0. c #383A3A", +"q0. c #393A3A", +"r0. c #3D4040", +"s0. c #454B43", +"t0. c #444842", +"u0. c #414B46", +"v0. c #344642", +"w0. c #1B312E", +"x0. c #221F1D", +"y0. c #605A58", +"z0. c #544D4B", +"A0. c #1A1614", +"B0. c #171D17", +"C0. c #1F231D", +"D0. c #292925", +"E0. c #31302C", +"F0. c #363531", +"G0. c #383934", +"H0. c #393B36", +"I0. c #393C37", +"J0. c #393E38", +"K0. c #3D3E38", +"L0. c #3F3E3C", +"M0. c #403E3F", +"N0. c #2C2A2A", +"O0. c #12120E", +"P0. c #23362F", +"Q0. c #374641", +"R0. c #444C49", +"S0. c #434A4B", +"T0. c #404846", +"U0. c #424C45", +"V0. c #454B48", +"W0. c #233330", +"X0. c #141E16", +"Y0. c #110D09", +"Z0. c #798E7E", +"`0. c #969D88", +" a. c #929983", +".a. c #434434", +"+a. c #3A3B31", +"@a. c #333730", +"#a. c #383834", +"$a. c #33382F", +"%a. c #26322C", +"&a. c #203731", +"*a. c #0E0806", +"=a. c #30302C", +"-a. c #484440", +";a. c #120D0B", +">a. c #0B0704", +",a. c #0B0804", +"'a. c #080703", +")a. c #080904", +"!a. c #0B120B", +"~a. c #315041", +"{a. c #577F6D", +"]a. c #496E5D", +"^a. c #385647", +"/a. c #273F32", +"(a. c #18241B", +"_a. c #0D100B", +":a. c #0F0808", +"b. c #1A1816", +",b. c #131A16", +"'b. c #213232", +")b. c #2F3638", +"!b. c #373B3A", +"~b. c #343737", +"{b. c #343A38", +"]b. c #33443F", +"^b. c #3E423B", +"/b. c #3E413A", +"(b. c #41423D", +"_b. c #424A40", +":b. c #222A28", +"c. c #340B14", +",c. c #7F223B", +"'c. c #A92B4B", +")c. c #BF2F52", +"!c. c #C63456", +"~c. c #BA3C57", +"{c. c #B1415C", +"]c. c #AE405D", +"^c. c #B1405E", +"/c. c #B2405E", +"(c. c #B54160", +"_c. c #BD4363", +":c. c #C44266", +"d. c #613839", +",d. c #67363C", +"'d. c #6D323C", +")d. c #67353C", +"!d. c #613439", +"~d. c #7D3946", +"{d. c #B3415D", +"]d. c #D4385F", +"^d. c #CB3E59", +"/d. c #A14551", +"(d. c #5E3A39", +"_d. c #3A3F39", +":d. c #43423E", +"e. c #593337", +",e. c #944155", +"'e. c #C53A5E", +")e. c #C43B59", +"!e. c #983E4D", +"~e. c #573638", +"{e. c #3F3D3C", +"]e. c #423A39", +"^e. c #170F0E", +"/e. c #262D2F", +"(e. c #3F454A", +"_e. c #464B4B", +":e. c #414D46", +"f. c #383930", +",f. c #36312E", +"'f. c #313538", +")f. c #2B3C3E", +"!f. c #191B1C", +"~f. c #050300", +"{f. c #050201", +"]f. c #050004", +"^f. c #0A0200", +"/f. c #090200", +"(f. c #060602", +"_f. c #172B1F", +":f. c #5D947B", +"g. c #3C3D38", +",g. c #3A3B34", +"'g. c #42433E", +")g. c #454E4A", +"!g. c #27211E", +"~g. c #56514D", +"{g. c #080A09", +"]g. c #07090A", +"^g. c #0D0B0D", +"/g. c #1C1A16", +"(g. c #20211B", +"_g. c #252721", +":g. c #2D2C26", +"h. c #2E2D2D", +",h. c #4E5656", +"'h. c #525959", +")h. c #4A524D", +"!h. c #48504B", +"~h. c #464D48", +"{h. c #474F4A", +"]h. c #47514A", +"^h. c #474E48", +"/h. c #757B68", +"(h. c #4F5242", +"_h. c #3B3B30", +":h. c #393E39", +"i. c #1C2727", +",i. c #121312", +"'i. c #0C0504", +")i. c #070000", +"!i. c #060302", +"~i. c #0A0203", +"{i. c #080505", +"]i. c #060705", +"^i. c #191412", +"/i. c #251C1A", +"(i. c #1D1310", +"_i. c #2A3834", +":i. c #3F4849", +"j. c #495554", +",j. c #55575A", +"'j. c #514E53", +")j. c #545156", +"!j. c #525457", +"~j. c #4C5153", +"{j. c #4A5454", +"]j. c #45514E", +"^j. c #565947", +"/j. c #474739", +"(j. c #3E3F37", +"_j. c #363B36", +":j. c #363C38", +"k. c #38372E", +",k. c #36362C", +"'k. c #34352B", +")k. c #313327", +"!k. c #313328", +"~k. c #33302B", +"{k. c #36312F", +"]k. c #393332", +"^k. c #423B3C", +"/k. c #433E3F", +"(k. c #414041", +"_k. c #444848", +":k. c #45494A", +"l. c #2C2D31", +",l. c #2E2E33", +"'l. c #2E3035", +")l. c #2B2D35", +"!l. c #2B2D34", +"~l. c #2F2F33", +"{l. c #333536", +"]l. c #323332", +"^l. c #3B3531", +"/l. c #3D3733", +"(l. c #403C39", +"_l. c #3D3936", +":l. c #3B3632", +"m. c #3D483F", +",m. c #464A49", +"'m. c #454C4A", +")m. c #434C49", +"!m. c #424C49", +"~m. c #434E4B", +"{m. c #464D4D", +"]m. c #2C3D34", +"^m. c #273B2F", +"/m. c #223928", +"(m. c #1F3826", +"_m. c #1E3334", +":m. c #1E3234", +"n. c #1C2D29", +",n. c #1C3230", +"'n. c #203535", +")n. c #263434", +"!n. c #253434", +"~n. c #223533", +"{n. c #1E352E", +"]n. c #1B3428", +"^n. c #1A3325", +"/n. c #1C2C1E", +"(n. c #1D2F20", +"_n. c #1E3123", +":n. c #223229", +"o. c #10231F", +",o. c #132220", +"'o. c #1C1E1C", +")o. c #1C1D19", +"!o. c #181F19", +"~o. c #151D15", +"{o. c #151B13", +"]o. c #11170F", +"^o. c #11170E", +"/o. c #13180F", +"(o. c #18140D", +"_o. c #18150F", +":o. c #171910", +" , ' ' ) ! ~ { ] ^ / ( _ : < [ } | ", +" 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l k m n o p q r q s t u v w x y z A B C ", +" D E F G H I J K L M N O P Q R S T U V W X Y Z ` . . ` .. +. @. #. #. $. K %. &. *. =. -. ;. ;. -. >. -. ,. '. ). !. ~. {. ", +" ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3. 4. 5. 6. 7. 8. 9. 0. 0. a. b. a. c. d. e. f. g. h. i. j. k. l. m. n. o. o. p. q. r. s. t. u. v. w. w. x. y. z. A. A. B. C. D. E. F. G. H. ", +" I. J. K. L. M. N. O. P. Q. R. S. T. U. V. W. X. Y. Z. `. + .+ ++ @+ #+ $+ %+ &+ *+ =+ -+ ;+ >+ ,+ '+ )+ !+ ~+ {+ ]+ ^+ /+ (+ _+ :+ :+ <+ [+ }+ |+ 1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 0+ a+ b+ c+ d+ ;. e+ f+ g+ h+ i+ j+ k+ ", +" l+ m+ n+ o+ p+ q+ r+ s+ t+ u+ v+ w+ x+ y+ z+ A+ B+ C+ D+ E+ F+ G+ H+ I+ J+ K+ L+ M+ N+ O+ P+ N+ Q+ R+ S+ T+ U+ V+ W+ W+ X+ Y+ Z+ `+ @ .@ +@ .@ +@ @@ #@ $@ %@ &@ *@ =@ -@ ;@ >@ i. ,@ '@ )@ !@ ~@ {@ ]@ ^@ /@ (@ k _@ :@ <@ [@ }@ ", +" |@ 1@ 2@ 3@ 4@ 5@ 6@ 7@ a. 8@ 9@ 0@ a@ b@ c@ d@ e@ f@ g@ h@ i@ j@ k@ l@ m@ n@ o@ p@ q@ r@ s@ t@ u@ v@ w@ x@ y@ z@ A@ B@ C@ D@ E@ F@ G@ H@ I@ I@ I@ J@ K@ K@ L@ I@ M@ N@ O@ P@ Q@ R@ S@ T@ U@ V@ W@ X@ Y@ Z@ `@ # .# Q +# @# ## $# %# &# *# =# -# ", +" ;# ># ,# '# )# !# ~# {# ]# ^# /# (# _# :# <# [# }# |# 1# 2# 3# 4# 5# 6# 7# 8# 9# 0# 8# a# b# c# d# e# f# d# g# h# i# j# k# l# m# n# o# p# q# r# s# t# s# u# v# s# w# x# M@ y# z# l# A# B# C# D# E# ]+ F# G# H# I# J# K# L# M# 6@ N# O# P# Q# R# S# T# U# V# W# ", +" X# Y# Z# `# $ .$ +$ @$ #$ $$ %$ &$ *$ =$ -$ ;$ >$ ,$ '$ )$ !$ ~$ {$ ]$ ^$ /$ ($ _$ :$ <$ [$ }$ |$ 1$ 2$ 3$ 4$ 5$ 6$ 7$ 8$ 9$ 0$ &@ a$ b$ c$ d$ e$ f$ g$ h$ i$ j$ k$ l$ m$ n$ o$ p$ q$ r$ s$ t$ u$ v$ w$ x$ y$ z$ z$ A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ ", +" S$ T$ U$ V$ W$ X$ Y$ Z$ `$ % .% +% @% #% $% %% &% *% =% -% ;% >% ,% '% )% !% ~% {% ]% ^% /% (% _% :% <% [% }% |% 1% 2% $@ 3% 4% 5% 6% 7% 8% 9% 0% a% b% c% d% e% f% g% g% h% i% j% k% l% m% n% o% p% q% r% s% t% P@ u% N@ {% v% w% x% y% z% A% B% C% D% E% F% G% H% I% J% K% L% ", +" M% N% O% P% Q% M@ R% S% T% U% V% W% X% Y% Z% '$ `% & .& +& @& #& $& %& && *& =& -& ;& >& ,& '& )& !& ~& {& ]& ^& 3% 1% /& (& _& :& <& [& }& |& 1& 2& 3& 4& 5& 6& 7& 8& 9& 0& a& b& c& d& e& f& g& h& i& j& k& l& m& n& o& p& q& r& s& t& u& v& w& x& y& z& A& B& C& D& E& F& G& H& I& ", +" J& K& L& M& N& O& P& Q& R& S& T& U& V& W& X& Y& Z& `& * .* +* @* #* $* %* &* ** =* -* ;* >* ,* '* )* !* ~* -& {* ]* ^* '* /* (* _* :* <* [* }* |* 1* 2* 3* 4* 4& 5* 6* 7* 8* 6* 9* 0* a* b* c* d* e* f* g* h* i* j* k* l* m* n* o* p* q* r* s* t* u* t* v* w* x* y* z* A* B* C* D* E* F* ", +" G* H* I* J* K* L* M* N* O* P* Q* R* S* T* U* V* W* X* Y* Z* `* = .= += @= #= $= %= &= *= == -= ;= >= ,= '= )= != ~= {= ]= ^= /= (= _= := <= [= }= |= 1= 2= 3= 4= 5= 6= 7= 8= 8= 9= 0= a= b= c= 6* d= e= f= g= h= i= j= k= l= m= n= o= p= q= r= s= t= u= v= w= x= y= z= A= B= C= D= E= F= G= H= ", +" I= J= K= L= M= N= O= P= Q= R= S= T= U= V= W= X= Y= Z= `= - .- +- @- #- $- %- &- *- =- -- ;- >- ,- '- )- !- O@ ~- {- ]- ^- /- (- Q% _- :- <- [- }- |- 1- 3$ := 2- 3- 4- 5- 6- 7- 8- 9- 0- a- b- :% c- d- e- f- g- h- i- j- k- 0. l- m- n- o- p- q- r- s- t- u- v- w- x- y- z- A- B- C- D- E- F- G- ", +" H- I- J- K- L- M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- `- ; ; #$ .; +; @; #; $; %; &; *; =; -; ;; >; ,; '; ); L@ !; ~; {; ]; ^; /; (; _; :; <; [; }; |; 1; 2; 3; 4; 5; 6; 7; 8; 9; 0; a; b; c; d; e; [+ f; g; m* h; i; j; k; l; Z. m; n; 5. o; p; q; p; r; s; t; u; v; w; x; y; z; A; B; C; D; E; F; ", +" G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; `; > .> +> @> #> $> %> &> *> => -> ;> >> ,> '> )> !> ~> {> ]> ^> /> (> _> :> <> )* [> }> |> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> a> a; b> c> d> b> e> f> e% e> g> h> i> j> k> k> 2= l> m> n> o> X. p> q> r> s> t> u> v> w> x> y> z> A> B> C> D> E> F> ", +" G> H> I> J> K> L> M> N> O> P> Q> R> S> T> U> V> W> X> Y> Z> `> , ., +, :# @, #, $, X> %, @, $, &, *, =, -, ;, >, ,, k# ', ), !, ~, {, ], ^, /, (, _, :, (* <, [, C# }, |, 1, 2, 3, 4, 5, 6, 7, 8, G# G# 2% 9, 0, a, b> b, g; c, d, b, e, f, g, h, m> 3& 3& p> i, 3+ j, k, l, B# m, n, o, ^+ p, q, {@ r, s, t, u, ", +" v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, <# `, ' .' +' @' #' $' %' &' *' #& =' -' ;' >' }$ ,' 2& '' )' !' ~' {' ]' ^' /' (' _' :' <' [' }' |' 1' 2' 3' 4' m% 5' 6' 7' A+ 8' e% 9' d; 0' a' b' c' d' e' 0- f' g' h' i' j' k' l' m' n' o' p' q' r' s' t' u' v' w' ", +" x' y' z' A' B' C' D' M> E' F' G' H' I' J' K' L' M' N' O' P' Q' R' S' T' U' V' W' [# X' Y' Z' `' ) v@ m@ .) +) @) #) $) %) &) *) =) -) ;) >) ,) ') )) !) ~) {) ]) ^) /) () _) :) <) [) }) |) 1) 2) 3) 4) 5) 6) 7) 8) 9) 0) a) b) c) d) b) 1% e) f) g) h) i) h) j) k) l) m) n) o) p) q) r) s) t) u) v) w) x) y) u' z) ", +" A) B) C) D) E) F) G) H) I) J) K) L) M) N) +, O) P) Q) R) S) T) U) V) W) X) Y) Z) `) ! ! .! +! @! +! #! $! %! &! *! =! -! ;! >! ,! '! )! !! ~! {! ]! ^! /! (! z% _! :! ~ ,~ '~ )~ !~ ~~ {~ ]~ ^~ /~ (~ _~ :~ <~ K@ [~ }~ |~ 1~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 9~ 0~ 0~ a~ b~ c~ 0! b! d~ e~ d! f~ b! 4' g~ h~ i~ j~ k~ l~ m~ n~ o~ p~ q~ r~ s~ t~ u~ v~ w~ x~ y~ z~ A~ B~ F- C~ D~ ", +" E~ F~ G~ H~ I~ J~ K~ L~ M~ N~ O~ P~ Q~ R~ S~ T~ U~ V~ S& W~ X~ X~ Y~ Z~ `~ `~ { .{ +{ @{ #{ ${ %{ &{ *{ ={ -{ ;{ >{ ,{ '{ ){ !{ ~{ {{ ]{ ^{ /{ ({ _{ :{ <{ [{ A@ }{ |{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 9{ 0{ a{ b{ ,= c{ d{ e{ f{ g{ h{ 7) 7) 8! 4) i{ j{ f~ k{ l{ m{ l{ n{ o{ p{ q{ r{ s{ t{ u{ v{ w{ x{ y{ z{ A{ B{ C{ D{ E{ F{ G{ ", +" H{ I{ J{ K{ L{ M{ N{ O{ P{ Q{ R{ S{ T{ U{ V{ W{ X{ Y{ Z{ `{ ] .] +] @] #] $] %] &] *] =] -] +{ ;] >] ,] '] )] !] ~] O, {] ]] ^] /] (] _] :] <] [] }] *; |] 1] }& 2] 3] 4] 5] 6] 7] 8] 9] 0] a] b] c] d] e] f] g] 0{ h] i] )= j] 9~ 8! k] l] 9! m] n% 7) a! a! a! n] o] p] q] r] s] t] u] v] w] x] y] z] A] B] C] D] E] F] G] H] I] ", +" J] K] L] M] N] O] P] Q] R] S] T] U] V] W] X] Y] Z] `] ^ .^ +^ @^ @] #^ $^ %] %^ #% &^ *^ =^ -^ ;^ >^ ,^ >^ '^ )^ !^ ~^ {^ ]^ ^^ /^ (^ _^ :^ <^ [^ }^ |^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ 0^ .@ 4% a^ b^ c^ d^ e^ f] f^ g^ h^ i^ h] i] e{ n% 8! 8! n% l] j^ k^ e~ l^ l^ l^ 5' m^ o] p] n^ o^ p^ q^ r^ s^ t^ P@ u^ 1' v^ w^ x^ y^ z^ A^ B^ C^ ", +" D^ E^ F^ G^ H^ I^ J^ K^ L^ M^ N^ 5! O^ P^ Q^ R^ S^ T^ U^ V^ W^ X^ Y^ W~ P) Z^ `^ @] / ./ =] +/ +{ @/ #/ >] $/ >^ %/ &/ */ =/ -/ ;/ >/ ,/ '/ )/ !/ ~/ {/ ]/ ^/ // (/ _/ :/ K/ L/ M/ N/ Y^ O/ P/ P) Z^ Q/ %^ R/ S/ -] T/ U/ @/ +{ V/ W/ X/ Y/ Z/ `/ ( .( +( @( #( $( %( &( *( =( -( ;( >( ,( '( )( !( }$ ~( {( ]( ^( /( (( _( :( <( f] g^ [( g^ 9/ g] }( j] |( 8! h{ d~ 1( 6) i{ 7) 2( 2( 4) b! a! f~ <= 3( 4( 5( 6( 7( 8( 9( 0( a( b( c( d( e( f( g( h( i( j( k( ", +" l( m( n( o( p( q( r( s( t( u( v( w( x( y( z( A( J/ B( C( D( E( F( G( H( I( J( @] K( L( M( N( O( T/ P( U/ Q( O( R( S( T( U( V( W( X( Y( Z( `( _ ._ +_ @_ #_ $_ %_ &_ *_ =_ -_ ;_ >_ /> ,_ '_ )_ !_ ~_ {_ ]_ ^_ ); f] f] 7/ i^ P@ h] /_ C+ h{ (_ 9! n% {+ {+ __ __ #+ b! b! :_ l^ <_ [_ }_ |_ 1_ 2_ 3_ 4_ 5_ 6_ 7_ c~ n, 8_ 9_ 0_ a_ b_ c_ d_ e_ ", +" f_ g_ h_ i_ j_ k_ l_ m_ n_ o_ p_ q_ r_ s_ t_ u_ D( v_ Y% w_ x_ I/ y_ Y^ z_ Z^ A_ '$ %] %] &^ B_ C_ =] D_ C_ ;^ E_ F_ G_ H_ I_ J_ K_ L_ M_ N_ O_ P_ O+ Q_ R_ S_ T_ U_ V_ W_ X_ Y_ Z_ `_ : .: +: @: #: $: %: &: *: )- =: )- f] 0{ -: w> ;: >: n% ,: ': ': x= i{ l] #+ l] __ 2' e~ l^ ): !: ~: {: ]: ^: /: (: _: :: <: [: y; }: |: 1: 2: 3: 4: 5: 6: ", +" 7: 8: 9: 0: a: b: c: d: e: f: g: h: i: j: k: l: m: n: Y% B( U~ o: p: Y^ Z^ %^ q: @] @^ R) r: T/ =] s: ./ +/ t: u: v: w: x: y: z: A: B: C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: `: 7/ < P@ h] h] ); .< +< /, @< ': c~ h{ x= #< $< %< b! &< 3) 2( 5' *< =< -< ;< >< ,< '< )< !< ~< {< ]< ^< /< (< _< :< << [< }< |< 1< ", +" 2< 3< 4< 5< 6< 7< 8< 9< 0< a< b< F/ c< d< e< f< g< h< i< j< k< T^ l< O/ m< +] Z^ Z^ #% n< o< -] p< *] q< =] +/ r< s< t< u< v< w< x< y< z< A< B< C< D< E< F< G< H< N^ I< J< K< L< Y- M< N< O< L< P< Q< R< S< T< U< V< W< X< !- Y< Z< `< B$ [ .[ .[ +[ e~ e~ @[ #[ $[ __ :_ 5' 2( 5' %[ &[ *[ =[ -[ ;[ >[ ,[ '[ )[ ![ ~[ {[ 8_ ][ ^[ /[ ([ _[ :[ <[ [[ ", +" }[ |[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 8[ 9[ 0[ a[ b[ c[ d[ e[ f[ g[ T^ h[ i[ I/ j[ k[ l[ m[ n[ R) L* o[ p[ q< s: @{ N( T/ +{ q[ r[ s[ t[ u[ v[ w[ x[ y[ z[ A[ B[ D< C[ D[ E[ F[ G[ H[ I[ c# J[ K[ L[ M[ N[ O[ P[ Q[ R[ S[ T[ U[ ^- /- a{ V[ W[ X[ Y[ Z[ `[ } .} >: l] +} @} __ 7) F# #} 6) $[ b! l{ $} %} &} *} =} -} ;} >} }+ ,} '} t) y> )} !} ~} {} ]} ^} /} (} ", +" _} :} <} [} }} |} 1} 2} 3} 4} 5} 6} 7} 8} 9} 0} a} b} R= j[ g[ j< c} d} e} l[ m[ @^ Q/ q: f} g} h} B_ =] -] -] i} j} k} l} t[ m} n} o} p} q} r} s} t} u} v} w} x} y} z} A} B} C} D} E} >' F} ~- G} H} I} J} K} L} M} N} O} h] P} (> Q} `< 1$ R} S} T} )+ #} 0/ B+ :_ $[ :_ @} d~ l^ f~ U} j~ V} W} X} -[ Y} Z} `} | .| +| D+ @| #| $| %| &| *| =| D> -| ;| ", +" >| ,| '| )| !| ~| {| ]| ^| /| (| _| :| <| [| }| || 1| f[ `] S^ 2| g[ k< 3| m[ +] m< L( P) m[ 4| 5| 6| 7| 8| T! N( @/ 9| 0| a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| s| t| u| v| w| H@ x| Z[ y| z| A| B| C| D| E| F| G| H| Q} N@ .@ I| J| .[ @< h{ #} x~ K| ^+ #+ l] 4) l^ 5' 3- L| M| N| O| P| Q| n> R| S| T| U| V| W| e{ X| Y| Z| `| 1 .1 +1 @1 ", +" #1 $1 %1 &1 *1 =1 -1 ;1 >1 ,1 '1 )1 !1 ~1 {1 ]1 ^1 /1 c} A( (1 _1 2| (1 i[ #^ `^ .] :1 <1 W~ f} Z~ 8| N( S/ ;^ =] #{ [1 }1 O, |1 11 21 31 41 51 61 i| 71 81 91 01 a1 b1 c1 d1 e1 f1 g1 .: h1 i1 j1 H@ k1 l1 m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 1/ y1 .[ >: #} #} x~ 1' ^+ ^+ $[ 4' 5' a! f~ z1 A1 B1 C1 D1 E1 h, F1 G1 H1 I1 J1 K1 * L1 M1 N1 O1 P1 Q1 R1 S1 ", +" T1 U1 V1 W1 X1 Y1 Z1 `1 2 .2 +2 @2 #2 $2 %2 &2 *2 =2 j[ X{ -2 ;2 >2 `] d} m< @] %^ m< `^ `^ @] &^ @{ q< @{ ,2 E_ %{ j} '2 )2 `/ !2 ~2 {2 ]2 ^2 /2 (2 _2 :2 <2 [2 n| S: p$ }2 |2 `! 12 22 32 42 52 62 72 82 92 02 a2 b2 i# c2 d2 e2 X[ f2 g2 v> 1/ h2 i2 >: j2 b! q* #+ ^+ ^+ u^ 2( b! :_ k2 l2 m2 n2 o2 p2 D1 q2 r2 s2 t2 u2 v2 w2 x2 != y2 z2 A2 B2 C2 D2 E2 F2 ", +" G2 H2 I2 J2 K2 q( L2 M2 N2 O2 P2 Q2 R2 S2 T2 U2 V2 K/ W2 2| X{ c} A( X2 l< d} z_ %] @] %] L* @] Z^ Y2 Z2 `2 ;^ 3 +{ ,2 .3 +3 `' @3 #3 $3 %3 F@ &3 *3 (2 =3 D< -3 ;3 >3 ,3 '3 )3 !3 ~3 {3 ]3 ^3 /3 (3 _3 k1 :3 <3 T} [3 }3 |3 13 23 33 X[ G| 43 53 1/ [ .[ 63 ': e~ x~ :_ ^+ ^+ ^+ l^ l^ l] u^ 73 83 93 i~ 03 a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 k3 4{ l3 m3 n3 z. o3 p3 ", +" q3 r3 s3 t3 u3 v3 w3 x3 y3 9# Q2 z3 A3 B3 C3 D3 V2 E3 c} F3 G3 F3 H3 X2 I3 d} m< 4| $^ m[ #% Q/ @] J3 K3 L3 M3 N3 O3 G_ O3 P3 Q3 R3 =# S3 T3 U3 V3 W3 X3 Y3 Z3 `3 4 .4 +4 @4 #4 $4 %4 &4 *4 ^3 =4 -4 I@ >+ ;4 >4 ,4 '4 )4 !4 ~4 {4 ]4 ^4 v$ q_ /4 S} (4 _4 :4 i{ i{ l] #} ^+ ^+ <4 e~ b! #+ u^ [4 }4 |4 14 24 a3 34 44 54 64 74 84 94 8] 04 a4 b4 o* c4 d4 e4 f4 g4 ", +" h4 i4 j4 k4 l4 m4 n4 o4 p4 q4 r4 s4 -^ t4 u4 v4 61 w4 >2 c} >2 x4 y4 y4 z4 A4 @^ R) #] %^ @] '$ :1 B4 $] &^ C4 B4 D4 E4 F4 G4 H4 I4 J4 ]* K4 L4 c[ M4 R) $( N4 O4 P4 Q4 R4 S4 T4 U4 V4 W4 X4 Y4 Z4 `4 5 .5 +5 @5 #5 $5 %5 `/ &5 *5 ~[ =5 -5 ;5 w2 >5 ,: |( #< n% {+ 8! 0/ ^+ ^+ ,5 #+ #+ b! l^ $@ '5 '5 )5 d> l3 b> !5 ~5 {5 ]5 ^5 /5 (5 _5 :5 w& <5 [5 }5 |5 15 }< 25 ", +" 35 45 55 65 75 85 95 05 a5 b5 c5 d5 e5 f5 g5 h5 i5 j5 k5 l5 m5 A( n5 j[ n5 o5 p5 q5 4| 4| &% $] r5 q: s5 t5 u5 v5 w5 x5 y5 z5 5# A5 B5 C5 D5 E5 F5 G5 H5 I5 J5 <2 K5 L5 M5 w2 k* N5 O5 P5 Q5 R5 S5 T5 U5 V5 W5 p- X5 Y5 Z5 `5 6 .6 +6 @6 #6 $6 %6 &6 ,: |( l] 0/ l] 8! 8! c( e~ ^+ r! 3) :_ 5' c/ *6 = =6 a> A+ b, -6 ;6 >6 ,6 '6 )6 !6 ~6 r# s% {6 4% ]6 ^6 /6 (6 %# _6 ", +" :6 <6 [6 }6 |6 16 26 36 46 56 66 76 86 96 06 a6 j5 b6 c6 g[ d6 `] F3 h[ e6 f6 g6 %^ R) #] q: h6 B4 i6 j6 k6 B4 l6 m6 m6 n6 o6 p6 q6 r6 |( s6 t6 u6 v6 w6 x6 y6 z6 A6 D[ B6 c( C6 D6 E6 F6 G6 H6 I6 J6 K6 L6 M6 N6 O6 P6 Q6 R6 S6 T6 U6 V6 W6 X6 Y6 w~ C+ ': ': @< 8! 9! k] 4) :_ ^+ #} __ b! e~ Z6 `6 7 .7 +7 A+ d> A+ @7 #7 >[ $7 %7 &7 *7 =7 X: -7 v^ ;7 g. >7 ,7 f4 '7 )7 ", +" !7 ~7 {7 ]7 ^7 /7 (7 _7 S6 :7 <7 [7 }7 |7 17 27 37 47 c} 57 67 c} G3 c} 77 87 Q! @] R) L* 97 i6 07 v5 B4 k6 x5 a7 F4 b7 a7 c7 d7 e7 f7 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 l] s7 t7 u7 v7 w7 x7 y7 z7 A7 B7 M6 C7 D7 E7 F7 G7 H7 I7 J7 1, K7 L7 i3 M7 #< h{ |( i{ h{ j2 l] 7) #+ e~ $< u^ b! __ 2' N7 =6 =6 = '5 O7 a> &[ P7 Q7 R7 S7 T7 U7 p# X| V7 1' W7 X7 Y7 Z7 `7 8 -~ ", +" .8 +8 @8 #8 $8 %8 &8 *8 =8 -8 ;8 >8 ,8 D3 '8 )8 !8 ~8 M* {8 ]8 ^8 ^8 67 >2 X{ S^ /8 ] (8 (8 u5 k6 i6 w5 07 _8 =% :8 x5 07 <8 W/ [8 }8 |8 18 28 38 48 58 68 78 88 98 08 a8 b8 c8 z| d8 e8 f8 g8 h8 i8 j8 k8 l8 r) m8 n8 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 z8 {+ 9~ i{ h{ 8! n% __ F# l] A8 F# :_ b! 0) G# '5 B8 C8 a> a> a> D8 E8 h, F8 G8 H8 I8 t~ J8 @| c8 t= K8 L8 M8 R1 N8 O8 ", +" P8 Q8 R8 S8 T8 U8 V8 W8 X8 Y8 Z8 +: `8 9 .9 +9 @9 #9 O/ J/ $9 n5 %9 >2 &9 *9 X{ =9 -9 b7 $] R) i6 C4 '$ ;9 >9 ,9 ,9 a7 y5 '9 )9 !9 ~9 {9 ]9 ^9 /9 (9 _9 :9 h@ <9 R$ [9 }9 |9 19 29 39 49 59 69 79 L[ _! *5 3{ 89 99 09 a9 b9 c9 d9 e9 W| f9 g9 h9 i9 q! 8! 8! 9~ n% ~+ c~ j2 5) 4) i{ 0/ i{ 8) 4) %< 2% B8 j9 A+ a> a> a> ++ k9 l9 m9 n9 o9 p9 q9 r9 s9 t9 u9 v9 w9 x9 x! y9 z9 ", +" A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 n[ S9 X{ >2 87 T9 U9 f6 ]8 A4 :1 I5 ;9 I5 i6 ;9 =% b7 :8 V9 W9 X9 Y9 Z9 `9 0 .0 +0 @0 #0 $0 %0 v# >{ &0 *0 =0 -0 ;0 >0 ,0 '0 )0 !0 ~0 {0 ]0 ^0 /0 P< (0 _0 :0 <0 [0 }0 |0 10 20 q& 30 40 D+ 50 60 '+ C+ j2 8! ': ,: h{ 0/ b! k] #+ ^+ l^ b! #+ a) A+ 70 80 70 a> a> 90 E$ g) 00 a0 b0 c0 d0 !> e0 !+ f0 g0 h0 i0 j0 k0 l0 ", +" m0 n0 o0 p0 q0 r0 s0 t0 u0 v0 4, w0 x0 y0 z0 A0 B0 C0 D0 E0 =9 F0 Q) Q) G0 H0 I0 J0 K0 ;9 '$ ;9 r5 L* C4 b7 b7 L0 M0 N0 O0 P0 P0 Q0 R0 S0 T0 U0 V0 W0 X0 Y0 Z0 `0 a .a +a F} @a #a $a %a &a *a =a -a ;a >a ,a 'a )a !a ~a )) {a ]a 0^ ^a /a (a _a @< :a w& 6) n% i{ 8! C+ 1( u^ l] l] i{ __ l] u^ ^+ #} B+ b c~ ': 5) n% a~ 0/ ': i{ i{ 6) i{ c~ a~ z8 i{ 9! l] #} h{ 8! n% i{ e~ #+ ,b l^ e~ #+ 'b e~ )b !b ~b {b ]b ^b /b (b _b :b g] x2 D+ h{ #< |( 1( i{ c '+ i{ h{ n% (_ h{ 7) a! i{ k] 8! n% l] k] k] 8! u^ #} c( l] __ F# 4) 9) 5' 8, {a .c +c @c #c $c %c &c *c =c )[ -c ;c >c ,c 'c ", +" )c !c ~c {c ]c ^c /c (c _c &! :c $ b7 8c 9c tb K0 0c .] 07 >9 ac ,9 y5 L0 bc cc dc Na ec R, */ Ra k| fc gc hc ic jc kc lc -( `& mc J@ J@ nc oc pc qc rc sc tc uc vc wc g^ g^ i^ wc 7/ g] i] xc (_ i{ |( |( 9! i{ #} 8~ n% c 9! x= m] l] {+ 8! 8! l] 7) &< c( 8! e~ 0/ 0/ 8) __ e~ b! 4) 4) 4) yc zc Ac Bc Cc Dc Ec Fc Gc Hc =c Ic Jc Kc Lc Mc Nc ", +" Oc Pc Qc Rc Sc Tc Uc B0 Vc Wc Xc Yc Zc `c d .d +d @d A, P; #d $d %d &d *d W/ u5 =d -d ;d >d I5 :8 X9 ,d ,9 n6 'd )d !d ~d {d l@ .' ]d N4 Wc ^d /d (d _d kc :d ' b1 -( Vd Wd Xd K@ Yd J@ U+ Zd G| `d e -b .e x> ;b 8/ h] #$ 5 +e g] @e f{ c~ i{ h{ h{ c~ h{ h{ h{ 9! a~ e~ z8 8) l] 8! @+ U7 #e $e H# H# ^& %e c( &e &< ^+ 7) __ __ 2( $[ b! *e =e -e ;e >e ,e 'e )e !e ~e {e ]e ^e /e (e _e :e ", +" 9 i6 ,9 a7 >9 je ke le me O, ;{ ne *, oe pe -_ qe Lb J+ re se S: [d te J@ 52 52 nc V+ ue ve wc 7] we xe ye ze Ae Be f^ wc -b 0{ f] +e Ce '+ 1( {+ 0/ i{ 8! c~ i{ 8! k] 0! 0/ 7) 6) l] 7' =6 De t! Ee A+ =6 t! 'b :_ #+ 5' #+ e~ b! %< Fe #+ Ge g~ He Ie Je Ke Le Me Ne !e Oe Pe Qe Re /@ ba Se ", +" Te Ue Ve We Xe Ye Ze `e f .f +f @f #f $f %f &f *f =f -f Id ;f >f ,f 'f )f !f $/ ~f {f u5 F4 W9 F4 F4 R( ]f ^f /f (f _f l@ :f 70 t! C8 C8 hf yc z{ 4) #+ F# *' __ e~ Z6 z{ b! 9) if jf kf lf mf nf of pf qf rf sf tf uf vf j( wf ", +" xf yf zf Af Bf Cf Df Ef Ff Gf Hf If Jf Kf Lf Mf Nf Of Z~ Pf Qf Rf Sf Tf Uf Vf Wf R( i6 u5 u5 Xf Yf Yf Zf `f g .g +g @g #g $g %g &g l| ;, *g =g -g ;g >g {> 5f 6f Vb Za ,g 'g +4 )g !g ~g V: 9{ {g h] h^ ]g ^g /g (g >+ _g :g + (' t) i{ i{ a~ 8! i{ a! 9! 0/ a~ 8! u^ 6) a~ 8! Z6 y& 9d A] u) 9d [g z{ c/ b! #} d~ __ #+ __ 2' }g |g 1g 2g 3g 4g 5g 6g 7g 8g 9g 0g ag bg cg dg eg fg gg ", +" hg ig jg kg lg 26 mg ng og pg qg rg sg tg ug c} ^8 n[ vg wg xg yg zg Ag Bg Cg $/ Dg E4 >9 B4 Eg E4 Fg V/ Gg fe Hg Ig Jg gc gc gc Kg Lg ic -g Mg Ng z} =g Og kc Pg [d ue Qg 2{ Rg Sg ]; =: ); Tg -b 9/ w> ); Ug Vg Wg Xg R} Vg q$ Yg T} +[ a~ h{ 0g c~ ': m$ 9! h{ u^ z8 a~ c~ 9~ 6) #+ __ #+ __ b! l^ b! #+ 2' F# __ Z6 e~ b! #+ Zg `g !} o& h .h +h @h #h $h %h &h *h =h -h ;h >h ,h 'h )h !h ", +" ~h {h ]h ^h /h (h _h :h 9 s5 L* ah bh ,^ ch dh Q, eh fh gh hh eh 4b %( ih jh z} kh z} lh mh nh oh 52 ph X[ Qg ); ~g qh 7/ f] wc -b h] w> -b &+ I| rh I| R} Wg 1/ 02 h2 sh 0! h{ c~ i{ |( z8 n% 8! z8 7) 8! h{ k] z8 l] l] b! e~ l^ l^ b! #+ 5' n] 9) l^ 2( e~ Z6 th uh vh wh xh yh zh Ah Bh Ch Dh Eh -7 Fh Gh zh Hh Ih Jh Kh Lh ", +" Mh Nh Oh Ph Qh Rh Sh Th Uh Vh Wh Xh Yh Zh `h i k5 .i +i Gd @i #i $i %i &i *i =i *d -i ;i a7 <8 F4 >i Zf j} ,i dh 'i )i !i /d ~i Td /d {i ]i ^i /i -g mh Ng (i _i oh [d y# 9{ O[ :i f] ze +e ~g :i wc h] @e 8/ #$ `i ); g^ f] 0{ h] =+ D# Vg 1/ [i `[ } C$ j i{ z8 i{ 2- n% i{ .j n% 8! m] ': z8 8) {+ 8! l] #} r! #+ l] #+ 4) f~ b! c( #+ a! 3) __ #+ +j @j 6! #j $j $@ Pe %j &j *j =j -j ]< 4i gi ;j >j Q# ,7 li ,j 'j ", +" )j !j ~j {j ]j ^j T% /j #; (j _j :j k >k ,k 8a mj c^ a~ 8! i{ z8 n% 9~ 8! {+ 1( 0/ c i{ n% {+ {+ 7) b! e~ ^+ e~ e~ l] #+ F# $[ b! b! e~ #} #+ 'k )k !k q_ ~k ,b {k ]k ^k /k (k _k :k l ,l zi 'l )l !l ~l {l _f ]l ^l /l (l _l ;) :l /$ t) fl gl hl il sh 8! __ ^+ __ 3) b! c( 8) 7! u^ e~ i{ __ __ $< ^+ b! b! :_ __ #+ $[ e~ [g jl u) 0) f~ 7) 8! 3) kl *h c~ n% A] Wk 0& ll ml nl ol pl ql rl sl tl ul vl wl xl yl zl ", +" Al Bl Cl Dl El Fl R= Gl Hl `- Il Jl Kl Ll Ml Nl Ol Pl Ql Rl Sl N< S: '_ Tl Ul Ma Vl U( Wl Xl U( Yl Bb Zl `l m .m +m @m #m J+ $k Vi Vi =g fj $m %m &m *m =m -m &m ;m H@ >m v1 Q} H| Jk ,m 'm f^ -b f] h] ); $: )- 2$ )m |( h{ h{ i{ k^ n% i{ i{ Z6 ^+ #+ l^ 4) @} F# ^+ :_ b! e~ e~ :_ 7) #+ :_ $[ #+ e~ #+ l] 2' ++ !m U7 6, 3' l] h{ #} : 9! a~ 7) i{ k] 8! i{ Z6 ^+ #+ #+ __ e~ e~ b! 7! b! l^ e~ #+ c( i{ Z6 ^+ __ e~ e~ #+ 0) Mm Nm C8 9d l^ 8! i{ d~ Om Pm __ i{ 'b O7 Qm Rm A* Sm Tm Um Vm Wm *6 Xm Ym Zm `m y. n .n ", +" +n @n #n $n %n &n *n =n }3 Xa -n ;n >n ,n 'n ud )n !n ~n {n }] 8f ]n ^n /n (n Wl |1 U( R3 _n pm R3 Wl wm :n d> 9d l] i{ c 0/ a/ j2 u> c^ c Wn Xn Yn Zn `n o k) .o +o 1( @o #o $o %o &o *o =o ", +" -o ;o >o ,o 'o )o !o ~o {o ]o ^o /o (o An _o :o @+ 5' 8) a~ i{ #} +[ 1/ } >: B+ co do eo fo go ho io :m jo ko lo mo no oo po qo ", +" ro so to uo vo wo xo yo zo Ao W< Bo Xe Co Do Eo Fo Go Ho Io Jo Wh Ko Yi Lo Mo ~d pm R3 No ec 6o Oo .' Po Am Qo Ro So x} To z} -g kc og #m z} z} Uo H| Qg ], H| !> Vo ,m jj X[ Vo ], {g N@ 'm jj u# x] h] )- g] h] h^ '= Wo 7) 4) 7! i{ c~ 8! 8! __ __ #} l] e~ b! l] b! o] &< +} #+ b! l^ Ge b! b! ^+ Z6 #+ :_ l^ 0) d) A+ a> z{ l] 9~ c 4) '+ T} /( Xo el ': Yo &[ Zo `o p .p +p y2 @p #p $p %p &p *p =p -p ", +" ;p >p ,p 'p )p !p !o ~p {p 0g m' ]p ^p /p (p _p :p

Km 2{ ], O[ +4 jj Km X[ G| Be 8p Ug 9p '= 9p 8p 0p c~ i{ k] n% c h{ n% 8! e~ l] #} #} +} e~ b! 2( 5' #+ e~ b! e~ $[ ^+ 2' b! ^+ Z6 F# b! b! :_ ^& '5 `6 Oe i{ 8! 7) i{ >: h2 /( ap bp (_ A] j9 cp dp ep -e co i9 2i fp gp hp ip jp kp lp ", +" mp np op pp qp rp sp tp up Wo vp wp xp yp zp Ap `) N+ 62 X6 q$ /4 Rn Bp ]l ec Cp !d Dp $! Ep l@ Fp %g Gp Hp Ip ;, Hp Jp Kp jh #m kc 3n Gk Lp Og nh Jm Mp |d Np e Qg H| 9{ Op Qg Km Qg r9 9{ Km Pp :g Qp Qp Rp w8 Sp Tp h9 9~ h{ {+ k] 8! 8! 7) 0! z8 i{ h{ n% 4) 4) 6) __ e~ &< 7! __ e~ #+ 1' e~ __ Z6 b! b! e~ #+ #+ K| b! e~ 4) 4) 4) l] @< h2 Up Vp Wp y1 c u) Xp Yp Zp `p q <> Y6 .q +q @q #q $q %q &q ", +" *q =q -q ;q >q ,q 'q )q U0 !q ~q {q ]q ^q N* /q (q _q :q m dq @: Yg } 1/ 1/ 1/ lj 8a Tp a~ n% 6) n% a~ 8! a~ u^ a~ 1( 1( 7) z8 1( j2 m] __ __ eq eq +} :_ A8 eq F# i{ 'b 5' e~ 5' e~ __ __ 4) b! l^ b! e~ ^+ @< u& Vk fq gq I| h2 K| 34 hq iq ^k jq S} p! kq y~ lq mq nq oq pq ", +" qq rq sq tq uq vq wq xq yq zq Aq Bq Cq Dq Eq Fq Hg Gq Hq Iq Jq Kq Lq ,> Mq Cb Nq Oq m} P, |p Pq Qq &( Rq Sq Tq Uq &( &( Vq Gk /i mh @_ J+ Gk /i *k 7^ Wq Pb -4 Lq Op Z< d^ Qg jj 'm Sn Q} 'm Xq Yq `[ `[ 1i I| /( [ Zq +[ 8) z8 |( h{ n% 9~ ': `q r i{ 8! 5) j2 c~ 0/ 8n #} *' ': w* __ v; *' F# i{ 'b 5' e~ 5' e~ 4) b! l^ #+ e~ __ Z6 4) c .r +r (5 @r #r (' {e 34 $r %r &r *r .r =r -r ;r >r A~ nq ,r 'r ", +" )r !r ~r {r ]r ^r /r M( (r *; _r :r , +s j# @s x| 9{ (> e v1 N@ )g `< Jk jj @ #s Xg 02 1/ 1/ `[ [ Pr ~+ (_ 6) z8 8! z8 8! 0/ |( 1( ': j2 1( 8) a~ l] e~ :_ i{ #} __ l] #+ ^+ ^+ ^+ #+ $s __ #+ e~ b! #+ :_ 4) b! #+ ^+ l] n% er %s &s *s =s w= v^ -s ;s '6 >s ,s 's pr )s !s ~s {s ]s ^s /s ", +" (s _s :s m (> e Jk G| ]2 G| d^ 'm *5 wj Xg rh } mj qs J| h2 >: `q l] z8 8! {+ 8! 9~ rs c h{ h{ 6) 8) 0! 5) #} Z6 Z6 __ Z6 i{ #} c( Z6 Z6 #+ #+ __ #} e~ 4) e~ Z6 e~ l^ 5' #+ e~ 9~ y1 l, ss ts us p' K| vs ws xs ys 5_ .r pr zs As Bs Cs z. Ds Es ", +" Fs Gs Hs Is Js Ks Ls Ms Ns Os Ps Qs Rs Ss Ts Us Vs ea 2> ff h{ Ws Xs Ys Zs `s t .t +t fs @t :f #t $t `0 Vq ks 8q ih ih ks Gq og Wi og 3n z} v| Ng %t br Em Xd K@ ij Vo 2d Km 9{ Vo ,m v1 'm dr &t *t `[ =t [i I| -t v8 @p @< |( h{ h{ u^ 7) c~ n% j2 j2 ,: ': 9! k] a~ i{ r! #+ Z6 c( Z6 __ __ __ __ __ __ d~ #+ :_ l] #+ Z6 'b &< #+ e~ w- #} (_ ;t >t ,t @r 't :> )t !t ~t {t ]t 9= ^t /t (t As _t :t 2' /4 it jt p@ kt .t lt mt nt ot pt qt Jp Tq L+ Lo Ti Y# rt e# >' v( :d st tt Og Ng ut 4d Xd Q: G} vt wt (> r9 xt +6 yt Xq Xq w1 zt At I| Bt Ct Dt Et }i } 9~ ': __ h{ 9~ l] 7) z8 y% ;: Ft Gt j] &6 o' w~ y{ rf +j Ht It Jt |g z{ K| v^ B+ ,5 ,5 K| &< $[ Kt Kt Kt Lt Mt t* f9 #} Nt P[ >_ Ot Pt wj ,: Qt Rt St Tt Ut _a Vt Wt Xt Yt Zt `t u da ", +" .u +u @u #u $u %u &u *u =u @< -u ;u >u ,u 'u )u 5d !u ~u {u (< ]u ^u /u (u _u :u du eu fu @p gu @p hu m{ v^ q* iu ju iu p* 7! Y6 b{ ku ,= ^< lu L1 mu ^o nu 04 ou pu qu ru su x* x* tu hd uu vu wu xu yu zu Au Bu Bu Cu Du Eu Fu dl E@ Gu Hu Iu Ju 2' Ku Lu Mu Nu Ou u8 Pu -h Qu Ru Su Tu Uu Vu ", +" Wu Xu Yu Zu `u e[ v .v +v @v #v $v %v &v *v =v -v ;v !_ ye >v ,v 'v )v mt m} b| !v xm Zr ~v !i Ri {v N! G[ H< ]v B@ ^v _# Uo /v (v X+ l# _v Tn :v (g g{ >b 9~ [v }v |v 1v }v 2v 3v 4v 5v 6v 7v 5v 8v 9v 0v av Yk bv cv av dv ev fv gv B] $e .q hv iv jv su wh @- kv 50 Wm ]a lv 5i k] mv nv ov pv qv rv qv pv ju sv wu tv uv uv p* vv wv xv yv zv Av Bv Cv Dv Ev Fv Gv Hv Iv Jv Pu Kv Lv Mv Nv Ov Pv Qi ", +" Qv Rv Sv Tv Uv Vv Wv Xv Yv o% Zv `v w .w +w @w nc we [: #w $w %w &w *w =w 1l -w ;w >w t@ ,w 'w )w !w ~w Y_ {w mh ]w ^w |/ m# 02 E# /w (w B] _w B8 =[ :w x ,x 'x ~u 4$ )x !x ~x {x ]x 4( ^x X: Jo /x s (x _x :x y $t ,y R% #k 'y Ww )y qs !y ~y {y ]y ^y /y Q} (y _y :y z 9p ,z X< 'z Ko l| )z 3p !z ~z {z ]z ^z /z (z _z :z A ,A 'A )A y1 !A ~A {A ]A ^A /A 7/ 8p (A g^ 0{ : _A :A B ,B ", +" 'B )B !B ~B {B ]B ib ^B b# /B (B _B :B C ,C ", +" 'C )C !C ~C {C Ss !| ]C cj ^C /C (C _C :C D ,D 'D )D !D ~D {D ]D dC dC dC dC fC ^D hC hC hC hC /D lC mC mC mC mC nC oC pC pC (D _D rC 6y 6y sC 6y 6y 4y GA uC uC uC uC uC uC uC vC wC wC vC wC xC yC yC xC xC xC xC yC yC zC 3y 3y 3y 3y zC yC xC wC vC GA 4y sC sC 4y 4y 4y sC sC sC sC sC sC sC sC sC 6y rC _D sC 6y _D uC :D E ,E 'E )E !E ~E {E ]E ^E dC BD BD fC ^D hC hC CD CD CD /D lC mC nC oC nC oC oC nC pC /E (E (E _E _D rC wC :E F 4E I& ,F 'F _E )F .F ft %F !F ~F {F !F 3y [E ]F ^F l0 /F aE yC 3y zC wC uC vC vC GA 4y 4y 4y GA uC uC uC GA 4y 4y 4y sC sC sC sC sC sC sC LB uD RE (F _F :F zD 8F :[ 9F ", +" 0F aF bF cF dF eF fF gF hF iF jF kF lF mF nF oF pF qF hy rF sF (F tF uF vF wF xF yF zF ^D ^D fC fC fC ^D CD /D lC lC lC lC mC nC oC oC oC oC pC yC AF BF BF CF DF GA EF =F FF GF FF HF =F IF JF KF LF MF NF KF OF PF QF RF SF $F eE 6E TF =F |E _E UF VF WF XF YF ZF _E 3y `F 3y wC vC uC GA 4y 4y 4y GA uC uC uC GA 4y 4y 4y sC sC sC sC sC sC sC G .G +G wA @G #G $G %G &G *G =G -G ;G >G q$ ,G M6 'G wE )G !G ~G {G ]G ", +" ^G /G (G _G :G H ,H eA 'H )H !H ~H ~H hC hC hC hC /D /D lC mC lC /D lC nC mC nC oC pC pC (D (D _D `F hG JF {H ft ]H &F ^H 2w qG /H OF (H xC vC yC uC _H oG :H KF I ,I 'I )I yH !I ~I rC uC yC xC uC yC vC (D nC hC hC hC hC /D /D /D /D /D lC lC mC lC nC nC oC pC (D (D _D rC 6y sC 6y 3y hG {I eE uC ]I ^I MH OH qG iG }H SF (} (} /I (} (I _I jG IF :I ZF }E 7E wI ^F qG TF _I xI KF yI zI I& AI 3E zC BI CI JF AI NF vG (H DI Mx EI 6E kG aE FI %F &F GI 3H _E zC xC wC vC uC uC uC uC wC uC vC GA 4y 4y 4y 4y 4y 4y 4y sC sC sC sC 4y 4y GA zC sC ^D PH HI II JI MA KI LI MI NI 94 OI PI QI RI SI :[ TI UI ", +" VI WI XI YI ZI `I J .J +J @J #J $J %J yH &J fC 4y wC 3y wC GA yC 4y oC lC CD CD CD CD /D lC lC lC lC lC mC mC nC pC pC oC pC (D 6y 6y 6y sC sC sC _D [E zC wC wC wC zC 8E [E 8E wC yC [E @F 6E :E *J aE `F zC [E 8E _E `F zC [E aE BI aE kG BI 3H BI _E _E 3y 3y [E 8E 8E kG `F 3y 3y zC wC vC vC uC uC uC uC GA GA GA GA GA GA GA GA 4y 4y sC sC sC sC GA 4y GA zC sC hC =J -J ;J SH >J ,J 'J )J !J ~J {J ]J #C ^J 0+ :[ /J L% ", +" (J _J hI :J K ,K 'K )K AH oC wC `F BI 3y wC !K ~K {K ]K ^K kC cA mB /K nB nB (K _K nB 7H :K H lK mK nK oK pK qK nK pz rK rK ey sK tK uK tK vK vK MB pz wK gy uz xK yK zK AK BK CK aG DK EK FK b- GK HK (w IK JK KK LK MK +y ", +" NK OK PK QK RK SK TK UK VK Xz WK XK YK ZK AH (D wC 8E dE 3y yA `K L .L +L @L #L $L %L fA kC oB &L *L =L -L ;L _D >L ,L 'L )L !L ~L {L ]L ^L /L (L _L :L M ,M 'M )M !M 5C ~M {M ]M ^M PH rC xC BI 5E `F zC /M (M _M :M N ,N 'N )N !N sC zC dE dE zC zC ~N {N ]N ^N /N (N _N :N N 2y 'N #O ^D GA `F @F $O 3y %O &O uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM *O =O -O ;O >O ,O 'O my eN )O !O ~O ev {O 3D ]O ^O /O WN (O _O ", +" :O `M jO kO lO :[ (O NH ", +" mO nO oO pO qO rO sO tO uO D[ 7u vO wO ]M !I /D wC 3H 0E /E wC xO uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM yO zO AO BO CO kz eO DO EO FO ~t bJ ]J GO HO IO zE MK tG ", +" JO KO LO Zd MO NO OO PO QO RO )> SO TO UO VO /D yC BI 9E :E zC WO uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM BN XO YO ZO ]D vC `O P .P +P @P #P #[ $P %P &P *P =P -P ", +" ;P >P ,P .; 'P )P !P PO ~P {P ]P ^P /P UO (P mC zC dE _P zI :P

Q mP pC 3y EF ,Q EF 'Q )Q uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM !Q ~Q {Q $H PH sC xC dE ]Q ^Q /Q 7/ (Q _Q :Q R AP P< ,R eP 'R )R !R ~R {R ]R ^R ^M {D /R sJ (R _R :R C 9R 0R ", +" aR bR cR dR eR fR gR hR iR J[ jR kR lR mR nR NB oR pR qR WM rR wM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM sR tR |R 1R qJ rC 3y 3H _P uR vR wR xR yR X7 zR y) AR BR CR ", +" DR ER FR GR HR IR JR KR LR E} MR NR OR PR {D QR sJ RR SR TR UR VR uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM WR /R |R 1R qJ rC 3y 8E 2E XR YR #[ ZR `R S zR y) AR wf .S ", +" +S @S #S $S %S 5Q &S h| *S =S -S ;S lR >S ,S 'S )S !S ~S {S ]S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ^S /S /S /S /S uM uM uM (S NB _S :S &J _D 3y 3H _P C 3S uy ", +" 4S 5S 6S 7S 8S 9S 0S aS bS cS dS eS fS >S gS dy )S hS iS jS kS uM uM uM /S /S /S /S ^S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ^S /S /S /S /S uM uM uM lS vK mS :S nS oC `F 3H 1E |H vR oS pS qS 2S rS C. sS tS uS ", +" vS wS xS yS zS AS BS CS DS B7 ES eS fS >S FS sK GS HS IS JS KS uM uM uM /S /S /S /S ^S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ^S /S /S /S /S uM uM uM LS aG MS :S nS oC 3y 8E 1E |H NS 5R pS OS PS QS E- sS tS uS ", +" RS SS TS US VS WS XS YS ZS `S T eS fS >S .T 'S +T @T #T $T %T uM uM uM /S /S /S /S ^S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ^S /S /S /S /S uM uM uM &T *T MS :S nS oC 3y _E |E =T vR 5R pS -T lo ;T A. sS tS uS ", +" >T ,T 'T /x )T !T ~T {T ]T j8 T eS lR >S eC 'S ^T /T (T _T :T uM uM uM /S /S /S /S ^S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ^S /S /S /S /S uM uM uM U ,U 'U )U QT !U uM uM uM TT TT TT TT ST uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM ~U {U }T )K nC [E 8E 9E vI WT tT XT ]U 0i ZT eg xT yT 0E ", +" ^U /U (U #; _U :U F TU tT v* UU !5 cU dU CU eU GH ", +" VU WU XU GU YU ZU `U DS j8 V .V +V @V MT #V $V NU %V &V *V =V -V uM /S /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S /S uM uM uM uM ;V >V }T )K nC 8E 8E 1E ,V 'V tT v* )V !5 cU dU !V eU GH ", +" ~V {V ]V ^V /V (V _V :V C fV GH ", +" GV (U ]V HV ET IV JV KV yv LV MV NV qV SP rV 4U OV PV QV RV wM VR uM /S /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S /S uM uM uM uM SV >V 1R #H rC 3H BI 3E TV UV AV VV WV DV XV YV D> fV GH ", +" GV ZV `V W .W +W @W #W $W %W &W *W =W -W ;W rU sU >W ,W 'W )W VR uM /S /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM SU !W 1R #H rC 3H BI 2R ~W zV {W `H ]W ^W /W YV u' qG GH ", +" (W _W :W C }H 0E ", +" fW gW hW W :U iW jW kW 2W lW mW nW oW yF pW $V qW rW sW tW pM VR uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM uM uW vW xD }T nS sC 3H aE wW ^Q xW }S yW zW AW BW ,. CW }H !F ", +" DW EW FW GW YU HW IW JW KW LW MW NW OW fS 7W PW NU QW RW SW pM VR uM /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM uM uM TW !W 1R nS GA 3H aE QF UW VW WW XW YW AW ZW E2 AR }H cE ", +" `W X .X +X @X #X $X %X &X *X =X OW -W qU 4U -X rW ;X >X rM uM uM /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM uM uM ,X 'X yH !I vC 3H aE QF )X !X ~X {X ]X ^X /X (X o3 _X cE ", +" :X Y ,Y BV 'Y )Y NX OX PX QX }E ", +" !Y ~Y {Y ]Y ^Y /Y (Y _Y x; :Y U TY UY VY WY XY BX uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM YY ZY EX `Y Z wY .Z +Z @Z #Z $Z dY %Z &Z *Z =Z GY -F EF ", +" -Z ;Z >Z ,Z 'Z p| `+ }, )Z !Z ~Z {Z ON ]Z ^Z /Z (Z _Z uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM :Z ZY 0X Z 9Z 0Z F} aZ x; 5Z bZ cZ dZ rz eZ fZ gZ hZ iZ uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM ;V rT 1R jZ kZ GX lZ mZ nZ oZ pZ hX qZ &Z *Z =Z GY -F EF ", +" rZ sZ tZ uZ vZ wZ xZ 8] yZ zZ AZ BZ CZ DZ EZ FZ GZ HZ uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM IZ 6W :S JZ KZ LZ MZ NZ OZ PZ 3Z QZ qZ RZ SZ YV PX uG :E ", +" TZ UZ VZ WZ XZ YZ ZZ ;t `Z ` .` +` @` #` $` %` &` *` uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM =` -` ;` >` ,` '` )` !` ~` {` ]` ^` /` (` X. _` :` uG (E ", +" <` [` }` |` 1` 2` ZZ 02 3` 4` jA 5` 6` #` 7` 8` 9` 0` uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM a` -` ;` )H b` KI c` d` e` WV 3Z f` g` h` i` j` k` uG (E ", +" l` _U m` n` o` p` q` 02 r` s` t` u` v` w` x` y` z` A` uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM B` -` ;` C` D` +T E` F` G` H` I` J` qZ K` L` M8 GY z9 (E ", +" M` N` O` P` Q` p` R` y1 S` T` U` V` W` X` Y` >F Z` `` uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM .. .1R + .@ .8J # .$ .!< ]W % .dY %Z & .5. j` GY * .FI ", +" = .- .; .> .o` , .q` 1/ fJ ' .) .! .~ .{ .] .^ ./ .( .wM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM RM . ._ .: .< .+T [ .} .| .1 .ov f` 2 .RZ 3 .4 .Tu 5 .dE ", +" 6 .7 .8 .9 .0 .a .b .er c .d .6E e .f .g .h .i .j .k .l .uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM uM m .n ._ .o .b` p .q .r .s .t .gX QZ u .v .i` 4 .GY 5 .dE ", +" w .aT x .y .z .:{ A .c^ B .C .D .E .F .G .H .I .J .K .L .uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM M .N .n .5J O .P .Q .R .S .T .U .I` BV V .W .ul 4 .X .5 .dE ", +" Y .Z .` . .....+..`= @..#..$..%..RY nC dE /E eI &..*..=..uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM -..;..>..,..'..P .)..!..~..{..]..^..^` /..v .(..(X GY 5 .kG ", +" _..:..<..[..}..|..1..y8 2..3..4..5..nC aE /E /H 6..7..8..uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM 9..0..a..b..c..d..e..f..h3 g..h..i..hX /..j..k..l..4: m..3H ", +" n..o..p..q..r..s..wv Ix t..u..v..w..mC aE @F x..y..z..uW uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM A..fG a..oW ,H B..C..D..E..F..G..H..f` I..J..K..j` L..m..3H ", +" M..N..O..P..Q..R..S..T..U..V..W..X../D BI @F vQ Y..Z..`..uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM +..+.++.qV @+.#+.$+.%+.&+.*+.]..H..BV =+.A= -+.;+.GY =F 3H ", +" >+.,+.'+.)+.!+.~+.{+.]+.^+.ZA /+.(+.^D kG /E _+.Y..:+.<+.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM [+.}+.|+.@V 1+.2+.3+.4+.5+.6+.]..i..aV #E DY 7+.l..L..8+.8E ", +" >+.9+.0+.a+.b+.c+.Ug d+.e+.f+.g+.h+.dC [E /E DH i+.j+.k+.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S uM uM uM uM l+.m+.n+.HI o+.p+.q+.r+.s+.t+.u+.v+.VV w+.&Z 7+.x+.L..8+.[E ", +" y+.z+.A+.B+.C+.D+.~' A .i3 E+.F+.G+.!N 3y (E 1E H+.I+.J+.uM uM /S /S /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM uM K+.L+.|+.{U M+.B..N+.O+.P+.Q+.R+.S+.f` qZ DY 7+.x+.L..8+.[E ", +" T+.z+.U+.V+.W+.X+.Y+.B# Z+.5Z `+.xH =J zC V $@.%@.&@.*@.=@.-@.{W H..PI ;@.MX >@.,@.'@.)@.[E ", +" !@.~@.{@.]@.^@./@.b .q` (@._@.:@.<@.%H yC :E }E pG [@.}@.uM uM uM /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S uM /S uM uM uM |@.-` 1@.2@.3@.4@.5@.6@.7@.8@.YT 9@.0@.a@.b@.>@.,@.c@.d@._E ", +" e@.f@.g@.h@.i@.76 j@.t$ k@._@.l@.m@.tI uC OP EF n@.o@.p@.uM uM uM uM /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S uM /S uM uM uM q@.zH }T r@.s@.t@.u@.v@.w@.Iv x@.y@.9I z@.A@.>@.,@.c@.d@.`F ", +" B@.C@.D@.E@.F@.G@.H@.k1 df I@.ES J@.!I 6y OP OP DI K@.L@.uM uM uM uM /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM uM B` M@.N@.cA G .O@.P@.Q@.R@.AU S@.9@.XW T@.A@.>@.,@.c@.d@.`F ", +" U@.V@.W@.X@.Y@.76 Z@.`@.x; #..#.+#.nS (D :E 6E @#.##.$#.uM uM uM uM /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM N .%#.&#.iA *#.O@.'U =#._& -#.;#.>#.YT hX GO >@.M8 c@.,#.yC ", +" '#.)#.!#.~#.{#.]#.q_ Ft |, ^#./#.(#.#H mC (E OP nG _#.:#.<#.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM [#.}#.N@.5J ;L |#.1#.2#.j@.44 3#.4#.5#.H..T@.GO 6#.7#.c@.4w uC ", +" 8#.9#.0#.a#.b#.]#.W| c#.d#.e#.f#.g#.#H CD *J EF h#.i#.j#.k#.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM l#.m#.N@.pJ PB |#.n#.o#.!e p#.q#.r#.>#.dY s#.t#.6#.7#.c@.4w 4y ", +" u#.v#.w#.x#.y#.z#.o, A#.B#.C#.D#.E#.yH F#.FI G#.^H H#.I#.J#.uM /S /S uM uM uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM K#.XL L#.oW 7W M#._T N#.O#.P#.Q#.2T R#.S#.T#.GO 6#.7#.c@.4w 4y ", +" U#.V#.w#.W#.X#.Y#.@..Z#.Mj `#.2 .~M $..$.+$.7T @$.#$.$$.%$.uM /S /S /S uM uM uM /S /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM &$.*$.=$.-$.;$.>$.,$.'$.)$.!$.~$.{$.uE ]J ]$.^$./$.j` ($._$.6y ", +" :$.<$.[$.}$.|$.1$.:m z- 2$.X| 3$.4$.5$.6$.7$.7T 8$.9$.0$.a$.uM /S /S /S uM uM uM /S /S /S uM uM /S /S /S uM uM /S uM /S /S uM uM /S /S uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S /S uM uM /S /S uM uM /S /S /S uM uM /S uM /S /S uM /S /S uM uM uM /S /S /S uM uM uM /S /S /S uM uM uM b$.c$.d$.e$.f$.g$.,W h$.i$.d> j$.k$.l$.S#.{$. N 6#.7#.($.m$.(D ", +" n$.o$.p$.q$.r$.s$.U..t$.u$.v$.w$.x$.y$.z$.A$.B$.C$.D$.E$.F$.uM /S /S /S /S uM /S /S /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM /S uM /S /S uM uM uM uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM G$.)N H$.I$.=Y J$.K$.L$.m> M$.N$.O$.P$.hX s#.jO Q$.,@.c@.R$.pC ", +" S$.T$.U$.V$.W$.X$.Y$.Z$.B#.v$.`$. %..%.+%.@%.#%.$%.%%.&%.*%.uM /S /S uM /S uM /S uM /S /S uM /S /S /S /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM /S uM /S /S uM uM /S /S /S /S uM /S /S uM /S /S uM /S /S uM /S /S /S /S /S uM uM /S /S /S uM uM uM =%.-%.;%.>%.,%.g$.'%.)%.!%.NG ~%.k$.{%.0@.YH jO ]%.]G ^%./%.pC ", +" (%._%.:%.<%.[%.}%.|%.1%.B#.v$.2%.3%.4%.5%.6%.7E 7%.8%.9%.0%.uM /S /S uM /S /S /S uM /S /S uM /S /S uM uM uM uM /S /S uM /S /S uM /S /S uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM /S /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM uM uM uM uM uM /S /S uM uM a%.b%.c%.d%.e%.f%.g%.h%.i%.j%.~%.O$.{%.aJ YH k%.l%.m%.n%.o%.pC ", +" p%.q%.r%.s%.t%.u%.wh v%.B#.w%.0I x%.y%.z%.A%.B%.C%.D%.E%.F%.G%./S /S uM uM /S uM uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM /S /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM /S /S uM uM H%.d$.;%.I%.J%.K%.L%.M%.N%.O%.P%.O$.uE S#.AV Q%.l%.m%.R%.S%.nC ", +" p%.T%.U%.V%.W%.X%.Y%.Z$.Z%.`%.bJ &..&.+&.@&.#&.$&.%&.&&.*&.=&./S /S uM uM /S uM uM /S /S uM uM /S /S /S uM uM /S /S uM /S /S uM uM /S /S uM /S uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM /S /S uM uM uM /S /S uM uM /S /S uM /S /S /S /S uM /S /S uM /S /S uM uM /S /S /S uM uM uM /S /S /S uM uM uM -&.;&.>&.,&.J%.'&.)&.m$ !&.~&.{&.]&.^&./&.WW GO ]%.]G ^%.^F mC ", +" (&._&.:&.<&.[&.}&.i9 t$.|&.1&.)m aY 2&.3&.4&.5&.6&.7&.8&.9&.0&.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM a&.>&.H$.b&.J%.c&.d&.e&.f&.g&.h&.i&.P$./&.AV GO >@.j&.c@.k&.mC ", +" l&.m&.n&.<&.o&.p&.7i Ht d#.q&.Dv r&.P[ s&.t&.u&.eE v&.w&.x&.y&.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM z&.A&.;&.2G B&.C&.D&.E&.F&.G&.H&.I&.wR ]U J&.K&.L&.M&.N&. u [I /D ", +" O&.P&.Q&.R&.o&.p&.oj -7 1&.S&.T&.U&.V&.W&.X&.Y&.Z&.`&. *..*.+*.@*.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM #*.$*.%*.0X (P &*.**.=*.-*.;*.>*.,*.'*.,: 5R )*.!*.~*.{*.]*.^*./*.CD ", +" (*._&._*.:*.<*.[*.}*.|*.1*.2*.3*.4*.#..5*.6*.7*.8*.9*.0*.a*.b*.2L c*.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM d*.e*.f*.5Y -W g*.**.h*.i*.j*.k*.l*.m*.n*.wR o*.p*.A% q*./O r*./*.hC ", +" s*.T%.:&.t*.u*.v*.w*.|*.x*.x[ y*.io z*.A*.B*.C*.D*.E*.F*.G*.H*.I*.J*.K*.L*.M*.N*.O*.P*.Q*.R*.S*.T*.`..uM uM uM uM uM uM uM uM uM -V uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM U*.V*.W*.X*.Y*.Z*.`*. =..=.+=.@=.#=.$=.%=.&=.b..uD P *=.==.-=.;=.>=.,=.(Q `q Ao )*.T.. 7 q*./O '=./*.hC ", +" )=.!=.~=.R&.{=.}%.]=.7i x*.^=./=.(=._=.:=.<=.[=.}=.|=.1=.2=.3=.4=.5=.6=.7=.8=.9=.0=.a=.b=.c=.d=.e=.MA f=.g=.h=.i=.j=.k=.l=.m=.n=.o=.uM uM uM uM uM FN uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM M .p=.q=.r=.s=.*J cX t=.7K `F u=.>U v=.w=.x=.y=._F z=.>E lA A=.B=.C=.D=.E=.F=.G=.H=.I=.J=.K=.L=.M=.1..N=.O=.P=.)*.Fu iv Q=.VN .I fV hC ", +" R=.S=.T=.U=.V=.W=.]=.#| X=.S&.rf )m Y=.Z=.`=..` -..-.g$.:E +-.@-.#-.$-.%-.&-.*-.*$.AH AH {D =-.=-.=-.{D 0C --.0C 0C 0C dC m#.;-.>-.,-.'-.)-.!-.~-.{-.]-.^-./-.`..uM uM uM uM uM (-.uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM uM _-.:-.<-.[-.}-.|-.FB EB 1-.sC JI _D _D _D (D pC rC _D 2-.vC vC ny 3-.3-.3-.4-.5-.nK pA 6-.0=.7-.8-.b..9-.0-.DZ a-.b-.c-.d-.e-.;b f-.g-.`q h-.i-.uw j-./O .I k-. ", +" l-.S=.m-.n-.o-.p-.)k q-.r-.d#.s-.ff t-.u-.oK v-.w-.x-.y-.b` 5=.z-.A-.B-.WQ vB 7y C-.D-.D-.E-.D-.F-.F-.*L pB kA G-.H-.I-.J-.J-.&L K-.L-.M-.M-.^R N-.O-.P-.Q-.R-.S-.T-.U-.V-.W-.X-.Y-.Z-.`-. ;..;.+;.@;.#;.$;.%;.&;.*;.=;.-;.;;.>;.,;.';.);.!;.~;.{;.];.^;./;.$L (;.~H 'H _;.:;.J-.<;.kA [;.LB fy wz };.|;.1;.2;.3;.z-.4;.5;.9Y 6;.6;.6;.6;.7;.8;.9;.0;.BD 1V a;.tF b;.c;.d;.e;.f;.g;.h;.i;.Zb en j;.k;.l;.)*.m;.j-./O .I n;. ", +" o;.p;.q;.r;.s;.v*.t;./=.r-.u;.v;.w;.x;.y;.z;.'X A;.B;.C;.D;.E;.};._E aK F;.G;.lz CB vC ON xC zC 3y H;.H;.WQ 0K bK bK bK 3H bK A;.I;.J;. . .6H ;H 2-.rC cz K;.nB nB L;.M;./K N;.jC CD M;.nC bz qC cz jA O;.[=.pB P;.P;.Q;.fA R;.S;.T;.U;.V;.W;.X;.Y;.Z;.`;. >.kB .>.+>.oA sK PN @>.#>.kZ $>.u&.%>.&>.*J *>.(E :E =>.6E ->.;>.y-.>>.,>.'>.)>.!>.~>.{>.]>.^>./>.(>._>.:>.<>.[>.}>.|>.1>.@..2>.:) 3>./a h-.o*.uw q*./O 4>.n;. ", +" 5>.6>.7>.8>.v*.9>.0$ /- 1&.0>.a>.b>.c>.d>.e>.SJ f>.g>.h>.i>.:D sC _D j>.&L k>.(K l>.6y sC xB BA 3y zC SJ 9x m>.FI @F /E n>.o>.p>./E p>.p>.q>.r>.B..BI 0x _E BA CA EB PJ PB rC PE I-.oB mB kC kC kC s>.fG gG t>.F#.bG u>.;U BD BD ^D OR ^D OR /D &L oC j>.v>.IA mK w>._E x>.@ .< .b` y>.z>.A>.B>.(E C>..*J @F @F D>.E>.m>.F>.gK AA PJ OJ G>.OJ xB gK H>.G .NW I>.J>.K>.L>.gi *+ q_ M>.oS N>.)*.o*.~*.O>./O '=. 8 ", +" P>.Q>.R>.S>.T>.*< U>.]=.V>.W>.)= X>.Y>.Z>.`>.my ,..,.+,.cE OP 5E zC 6y hC ~I %H tI qJ AH ~I dC ^D CD /D oC (D sC wC `F 3H dE 5E FI @F ,.,,.',.p-.),.!,.oj ~,.W>.{,.w; 8n ],.JZ KB ^,./,.(,.!F cE UF EF .GH !F !F 0E GH !F bE bE cE !F !F cE 7E cE }E 6E :E (E /E FI kG 8E `F zC vC sC 6y (D _D 6y 4y uC yC zC _E kG aE dE dE 5E $O $O dE aE aE BI kG [E _E `F `F zC yC yC xC wC vC GA 4y 6y 6y rC rC (D pC oC nC (D (D _D rC 4y uC xC zC zC 8E kG kG BI dE 5E dE dE FI FI 5E 5E FI FI $O FI 5E 5E FI $O *J @F *J @F /E e,.f,.g,.h,.Ao w; S..i,.1,.5R j,.Fu co k,./O 4>.LF ", +" l,.m,.n,.o,.u%.*< p,.L& q,.^=.r,.3B ^&.s,.t,.u,.v,.w,.4E 0E GH eE 9E eE eE 9E 4E 4E 4E 4E 9E |E |E |E 9E 'F 4E 4E GH bE GH !F UF EF (E *J FI 8E _E xC vC sC rC 6y 6y sC 4y 4y vC zC yC 3y `F zC xC xC wC vC uC uC 4y sC rC (D pC mC lC CD CD ^D hC lC oC 6y vC `F 8E aE dE 5E FI $O *J @F @F @F *J *J @F @F *J $O @F *J $O @F @F *J *J *J *J *J *J *J /E /E /E /E :E x,.y,.z,.A,.B,.{+.C,.i,.D,.E,.h-.)*.co Q=.F,.%# E* ", +" G,.H,.I,.J,.K,.L,.M,.7i N,.h: O,.P,.Q,.R,.S,.T,.U,.V,.0E 4E 4E 9E |E |E 9E 'F 9E 9E 9E |E 2E 2E 2E 2E _P 2E 2E _P 9E 2E _P 2E 1E 2E |E |E |E eE 4E !F UF OP /E FI kG 3y uC rC rC rC (D pC oC oC nC nC mC lC lC lC lC /D /D CD /D lC oC 6y 4y xC [E aE $O /E :E :E :E :E '.,'.''.)'.0E 9E 1E 1E |E 1E 1E 9E |E 1E 1E 1E _P _P _P _P 3E 3E 3E DH 2E 2R DH 3E _P 2R 3E 3E 2R 1E 1E 1E 2E |E 9E 9E 'F !F }E 6E (E FI BI BI 3H _E 3y xC xC xC xC xC zC `F [E 8E BI $O /E :E EF EF zI }E zI EF 6E OP 6E 6E OP :E :E :E :E :E :E :E (E /E /E /E /E (E /E (E (E @F @F = ['.X* }'.|'.1'.2'.3'.4'.eE 9E 2E 2E |E 2E 2E 1E 2E 2E _P _P 3E 3E 3E 2R DH 2R 3E 2R 3E DH 2R 3E 3E 2R _P 2R PF 3E DH DH 2R 3E _P 3E 3E _P 1E 9E 4E bE bE GH 0E cE UF zI zI }E UF }E }E UF cE !F !F 0E 0E cE cE cE UF zI }E zI EF 6E 6E OP OP :E :E :E :E ).,).^H ,Q _+._+._+.QF ]Q wW nP QF QF wW QF wW nP nP wW _+.QF QF QF QF QF QF _+.QF )F )F wW wW nP )F nP )F wW ,Q vQ iG ^H 1P QF 2R 3E 3E _P 9E 'F 4E bE !F cE cE UF UF }E zI zI zI EF 6E 6E 6E 6E 6E EF 6E 6E EF EF 6E OP 6E 7E bE 2R p'.').1I xI 1H BF WF wG E* NH )).[H CF !).~).{).M$.w& Zb >a PC Nt /, vP h-.o*.iv Q=.]).^*.^). ", +" /).()._).:).<).[).p,.L& }).='.9) |).5; #} 1).2).o3 3).4).(E *J GH 5).:H lG ^F NH LF FH 6).JH 7).]F vQ NP ]Q ZF ZF QF nP QF _+.QF _+.]Q QF QF _+._+._+._+.QF _+._+._+._+.QF QF QF wW QF wW QF 1P nG 8).1I JF VF 1I 8).wI 9).)F DH 1E 1E |E eE 0E !F !F !F 7E UF UF UF }E EF zI zI EF 6E EF zI 6E zI zI UF UF }E bE ]Q 7).|I 2w LF WF wG tG JF uI vI ,).,Q eE ]Q _H (I 0).a).b).c).;b d).p*.M>.u8 /a $R !*.e).!' +N 4>.^). ", +" f).g).h).:).i).z2 j).k).}).g'.p] l).m).3) n).K% o).p).q).lC lC CD /D (D wC *J 4E /H GI ^F _I TF {I P'.:H r).9).]Q ,Q ,Q ]Q ]Q _+.]Q ,Q ]Q QF QF ]Q ]Q ]Q _+.]Q ]Q ]Q ]Q ]Q NP ]Q NP ZF 1P h#.{F xI LF mG NH MF ^I CF EH s).]I NP )F DH 1E 4E bE GH !F !F !F cE UF UF UF }E }E UF zI zI UF 7E EF UF UF !F 3E t).GI RF oG u).^I 6).v).O'.]Q UF 5E 3H 3H aE FI }E vQ )).o w).!y Lm W< x).r) {[ (4 ^z y).z).A).Q=.+N r*.-P ", +" B).g).C).D).z#.*< E).F).#).G).3i H).Q< p] ]` I).J).1P dA GA wC zC yC wC xC uC rC (D rC 3H 2E >F KF tG MF AI K).DF vQ ,Q 9).NP ,Q ,Q ZF NP NP ]Q NP ZF ,Q ,Q ,Q NP NP NP NP NP ZF 9).L).>).(} E* VF IH 3E (E EF QF +F =F LF -F N'.,Q )F 3E 9E eE bE bE 0E !F cE 7E 7E 7E UF UF UF UF UF UF cE 7E 0E _P ]I +y Q'.hG CF ^F >).)F /E 3H dE BI BI 5E $O .S).T).~*.q*.+N U).V). ", +" W).Hs X).Y).Z).),.!,.L& #).0>.3i `). !..!.+!.@!.#!.$!.%!.sC xC [E yC vC FB J;.3y zC xC uC 6y mC 8E 5).GI xI KH IF n@.DF 5).9).&!.1P ZF ZF ZF NP 9).9).ZF ZF ZF ,Q ,Q ,Q ,Q ZF 1P L).v)._O MF *!.3y fC pC wC yC uC 6y (E DI _I ^I 8).^H nP _P 9E 4E bE GH 0E !F cE cE cE cE 7E UF 7E cE !F cE 2R wI =!.:I SF -!.;!.iG dE 3y [E 5E $O *J /E (E !.zI 7E bE 3E h#.6).,!.'!.)!.p$ P).!!.~!.Qp {!.]!.j,.^!.e).q*.+N U).V). ", +" /!.(!._!.:!.u%.g$ .0!.a!.b!.NA tC qB 0G )F =T [I TF &F yU c!.p'.vQ 9).9).ZF ZF 1P 9).,Q ,Q ,Q 9).ZF 9).9).1P 5).v).qG ^F ZF CD oC wC _E 8E BI BI 8E yC FI jG 6).2I CI ^H PF 1E 'F eE eE GH !F !F !F !F !F 7E UF cE cE 1E x..d!.e!.f!.g!.h!.i!.j!.`F k!.l!.m!.8x H=.n!.H .H .o!.p!.q!.r!.2R s!.t!.u!.v!.w!.Or o$ n' N$.c#.c^ 1,.63 %,.!*.Kv Q=.x!.y!.V). ", +" z!.A!.B!.C!.D!.E!.U>.F!.G!.H!.I!.J!.w*.K!.i$ L!.M!.N!.O!.P!.Q!.R!.S!.T!.U!.V!.W!.FB a!.X!.Y!.*T Z!.`!.6y GA xC 6E ').FF OF &F =T GF vQ 9).9).9).9).ZF ,Q ,Q ,Q 9).9).1P NP ZF *!._I 6).1E nC (D wC [E kG aE aE dE aE 3H [E BI NP 2w NH v).9).2R 9E eE eE GH 7E !F !F !F 7E }E 7E cE wW _H }H ~..~.+~.@~.#~.$~.%~.kG &~.*~.=~.-~.;~.>~.4'.,~.'~.)~.!~.~~.{~.]~.^~./~.(~._~. c >: x= m] ': |( wJ |,._b X>. 7 :~.@# J% FH ", +" <~.[~.}~.|~.1~.E!.2~.3~.4~.5~.@).6~.F).7~.8~.9~.0~.a~.b~.N;.c~.d~.e~.f~.g~.h~.i~.j~.k~.7W l~.m~.oK 5K vB 6y 6y 6y 4y !F yU EH tG }I ,).&!.&!.&!.1P ZF NP NP ,Q 9).9).1P &!.x..IF EH NP (D vC zC 3H BI 5E $O FI FI $O 5E BI 3H `F jG TF *F *!.wW 2E eE bE GH !F 0E !F cE 7E UF 7E ]F &F (I OF n~.o~.p~.q~.r~.r~.s~.t~.u~.v~.w~.x~.y~.z~.A~.B~.C~.D~.E~.F~.G~.H~.I~.J~.K~.l] ': m] n*.'+ |( |( Nt L~.M~.N~.De O~.@# J% P~. ", +" Q~.R~.S~.T~.1$.),.f'.U~.}).V~.O,.W~.X~.Y~.Z~.`~. {..{.+{.@{.#{.${.%{.&{.*{.={.-{.;{.>{.,{.wC vK '{.ay 4y GA GA wC wC 4y zC ,Q {F TF ){.,).^H 5).&!.9).9).9).9).9).ZF &!.iG !{.OF ]F oC wC kG $O 5E /E OP 6E OP :E :E :E 8] 8{.#P co O~.@# J% 9{. ", +" 0{.a{.b{.c{.1~.2g M!.@* }).G).O,.d{.e{.f{.3P g{.h{.i{.j{.k{.l{.m{.n{.o{.p{.q{.r{.s{.t{.u{.e~.v{.w{.x{.HA uC yC `F `F `F zC xC dE =T qG ;!.]F ^H 5).9).1P 1P 1P &!.ZF L).@#.KH EI _D wC BI .E{.F{.G{.H{.I{.J{.K{.L{.M{.N{.O{.P{.Q{.R{.S{.1' |( `q /a r k;. r |( Gw |,. O~.@# J% U{. ", +" V{.W{.X{.Y{.Y#.y*.Z{.#4 }).`{. ]..].+].@].2; #].Or $].%].&].*].=].-].;].>].,].'].)].!].~].{].]].^].*T ON 3y [E [E kG kG 3H BI [E (E pG {I yI p'.L).1P 1P 1P 1P &!.vQ x..ft KH GH xC FI EF cE 7E bE 'F PF vI K).&!.1E 1E 'F bE !F zI (E 5)._O Mx ]F PF |E eE bE GH !F 7E EF 2H EH :H 4y vC 8E sy /].(]._].:].<].[].}].|].1].2].3].4].5].6].7].8].9].0].a].b].c].d].e].f].#< ,: ,: |( P=.P=.|( OI 8] g].#P = O~.@# J% TF ", +" h].W{.i].j].k].]9 M,.l].9,.m].n].o].p].q].r].s].t].u].v].w].x].y].z].A].B].|-.C].D].E].F].G].H].I].J].K].kG BI dE $O /E *J 5E dE kG ^H KF sG iG L).&!.&!.&!.&!.1P &!.=T Q'.7).dE 6E cE 'F |E PF QF ]I JF HF rG [H :H NP DH 2R 2E GH cE EF |H Q'.F* 5)._P 9E 4E GH !F 7E zI HH [H 3y [E 5E 5E C>.L].L].*J B-.d;.M].N].O].P].Q].R].S].T].U].V].W].X].Y].Z].`]. ^..^.+^.#$ c~ Ao `q O=.,: ,: O=.u> |,.8{.@^.#^.O~.@# J% TF ", +" $^.%^.&^.*^.=^.9>.2~.-^.#).;^.>^.N,.,^.'^.)^.!^.~^.)!.{^.]^.^^./^.(^.A]._^.:^.<^.[^.}^.|^.1^.2^.3^.4^.5^.7;./E :E OP zI EF /E /E FI QF ){.').iG vQ 5).5).5).5).vQ L).ft ^F zI /E eE 1E PF nP 9).DF ft wG BF ]H ]H qG x..1P QF PF 1E eE zI 2E (} ;F 6^.PF 1E 'F GH !F 7E 6E yI &F /D $O :E OP EF 7^.8^.9^.8^.0^.a^.b^.c^.d^.e^.f^.g^.h^.i^.j^.k^.k^.l^.m^.Nr n^.o^.!k $$ p^.': ,: O=.O=.O=.S@.jN q^.r^.y).co O~.@# J% TF ", +" s^.~@.t^.u^.v^..!.w^.x^.y^.z^.A^.B^.C^.D^.E^.F^.G^.H^.I^.J^.K^.L^.M^.LJ N^.N^.O^.P^.Q^.R^.S^.T^.U^.V^.W^.X^.Y^.Z^.`^. /../.+/.@/.zI p'.M'.,).L).vQ vQ vQ 5).5).1P HH MF IH 8E cE 9E 3E QF ,Q iG >F ^I rG [H (} 2I HF F 9).1E 4E bE !F 7E EF GF ft 3y 6E 7E 7E !F #/.wQ $/.%/.&/.*/.=/.-/.;/.>/.,/.'/.)/.!/.~/.{/.]/.^/.//.(/._/.:/./4 Be ^z |( B,.O=.5R O=. @#.@#.CI JF 6).jG p'.5).NP DH 9E !F ZF RF ,F x..2R |E 4E 0E cE }E 2E F> 9).cE bE 4E 4E B/.C/.D/.E/.F/.G/.H/.I/.J/.K/.L/.M/.N/.O/.P/.Q/.R/.S/.T/.U/.(z V/.9g W/.v& x= B,.Ao Ao |( ': X/.|,.w{ _b A+ Y/.Z/.J% YF ", +" `/. (..(.+(.@(.zq #(.$(.$* %(.*< &(.a/.*(.=(.=(.-(.;(.>(.,(.'(.)(.!>.!(.~(.i/.{(.](.^(./(.((._(.:(.<(.[(.}(.|(.1(.2(.3(.4(.5(.6(.,).(H nG &!.vQ vQ vQ &!.5).&!./H _I JH _E GH 1E wW NP 9).iG 2H vI i .6^.jG DF /H wI CI /H {H vQ 9).nP 1E GH GH CI -F nG ,Q 3E 'F bE !F 7E EF ]Q {F NP _P 2R wW 7(.8(.9(.0(.7` a(.b(.c(.d(.e(.f(.g(.h(.i(.j(.k(.l(.m(.n(.o(.b) cu p(.q(.|( |( /a #< (_ `q u'.r(.L~.r^.s(.hf t(.u(.dI EH ", +" v(.w(.3/.x(.y(.z(.)b C^.$* A(.3% -(.B(.C(.a/.=(.=(.D(.E(.u> F(.G(.H(.ez I(.J(.K(.](.w-.L(.M(.N(.O(.P(.Q(.R(.S(.T(.]/.U(.V(.L).6^.~F K).nP &!.&!.L).L).vQ ^H &!.I& E* &!.(E |E 2R QF NP NP 9).p'.r).iG GF t).GF r).{H iG p'.L).9).,Q _+.PF 4E UF GF uG _H 5).DH 9E bE 0E 0E 7E 6E DF v).iG ]Q ,Q W(.X(.Y(.Z(.`(.hx _.._.+_.@_.#_.$_.%_.&_.*_.=_.-_.;_.>_.,_.z] '_./( Gw `q u'.)_.,: /, u'.&,.!_.~_.{_.]_.^_./_.K (_.EH ", +" __.:_.<_.[_.}_.|_.[a 1_.2_.A(. !.3_.3_.:= .j 4_..j 5_.6_.)^.ei 7_.Qr 8_.vA (>.9_.0_.FI a_.Dz b_.c_.d_.e_.f_.g_.h_.i_.j_.k_.l_.,F N'.9).NP 1P L).vQ L).iG ^H t).^F ;F 8E cE 'F _P PF wW wW _+.&!.5).5).5).5).vQ vQ vQ ZF 9).ZF NP _+.wW PF |E }E _P vG KF p'.QF |E eE GH GH 0E 7E }E c!.L% c!.{H f/.GF m_.n_.o_.p_.q_.r_.wW s_.t_.u_.v_.w_.x_.y_.z_.A_.Y/.B_.S..C_.D_.wJ V'.O=.UU rs ,: rs oS wJ _m o# s(.;* E_.K (_._O ", +" F_.G_.H_.I_.J_.7$ K_.L_.7~.3( %[ M_.:= i$ i$ 8) 8) 4_.N_.O_.P_.Q_.R_.S_.T_.U_.V_.W_.X_.Y_.Z_.A~.`_.9(.nP :..:.2H +:.@:.#:.){.$:.nP NP 5).L).^H vQ L).iG {H IH YF @#.xC GH 'F |E _P 3E 2R 2R PF wW wW wW _+._+.]Q wW 2R )F )F PF DH 2R 3E |E 0E cE K).tG ,).,Q 2E 4E bE !F cE cE EF UF wI $F eI %:.%:.&:.x..*:.W(.=:.-:.;:.>:.,:.':.):.!:.~:.{:.]:.^:./:.(:.8/ 8/ _:.t'.u'.O=.u'.`q u'.V'.%K jN |,.=: ]_.=6 ::.u(.(_.xI ", +" <:.[:.}:.|:.1:.2:.0! h$ 2_.3:.e! 4:.4:..j .j m$ 4_.a! f~ D(.3P 5:.6:.7:.f>.8:.9:. -.0:.a:.b:.c:.d:.e:.f:.g:.h:.)&.i:.j:.k:.l:.m:.ZF 5).vQ ^H ^H p'.p'.{H {H v).qG 9E $O bE bE bE bE bE 'F 'F |E 2E 2E 1E 2E 2E _P |E 4E 2E 1E 'F 9E 2E |E 'F 0E }E ^H MF F* 5).2R 'F eE GH eE 0E }E zI zI h#.n:.o:.p:.q:.r:.s:.t:.u:.v:.w:.x:.y:.z:.A:.B:.C:.D:.E:.F:.G:.:v ]2 `b H:.K1 |( S@.u'.B,.`q `q I:._4 {!.Tg r^._w ::.u(.(_.-F ", +" J:.4Q K:.L:.M:.N:.9) }!.O:.P:.L,..j Q:.-(.a/.nj m$ *(.R:.S:.T:.w~ U:.V:.W:.X:.Y:.Z:.`:. <..<.+<.@<.#<.$<.%<.&<.*<.>/ =<.-<.;<.><.^H p'.{H iG iG r).r).iG {H M'.vG kG OP eE bE GH cE 7E UF cE cE UF UF UF zI zI UF 0E 7E 7E UF }E 7E !F !F 0E cE zI eE ~F IF x..wW 2E 9E 4E 4E eE 0E GH 7E (E ,<.'<.)<.!<.~<.{<.]<.^<./<.(<._<.:<.<<.[<.}<.|<.1<.2<.3<.b] e k8 4<.5<.$R 6<.7<.63 8<.N>.8<.u'.X/.~_.9<._b 0<.a<.u(.(_.2w ", +" b<.c<.d<.e<.f<.g<.K_.h<.g<.k$ h<.i<.j<.k<.l<.m<.i<.n<.o<.[!.p<.q<.r<.|4 s<.t<.u<.v<.w<.x<.y<.z<.A<.B<.1P +Z C<.D<.JH p'.9(.E<.p'.{H r).r).r).GF GF r).{H x..{I >).zC zI cE 7E UF 6E :E .W<.X<.W<.Y<.Z<.`<.~_.Tg [..[.+[.@[.#[.$[. ", +" %[.&[.*[.=[.-[.6$ &< rx ;[.>[.;[.,[.'[.)[.![.~[.{[.][.^[.G)./[.([._[.:[.<[.[[.}[.|[.1[.B;.2[.3[.4[.5[.6[.7[.M'.>F NP DH n_.GF GF GF 2H 2H x..t).2H r).{H ]I [H NP yC OP :E }.,}.'}.)}.!}.~}.{}.]}.^}./}.(}.GH DH {H t).h#.h#.h#.h#.NF NF jG NF NF jG NF p'.AI =!.kG aE (E $O @F FI aE 3H [E `F 3y `F 3y zC xC yC zC `F 3H 8E BI 5E FI $O /E *J *J $O *J 6E ~F /I yI 1P PF DH DH 2R _P 2E 2E 2E 2E 1E 'F 4E cE UF 9).L% _}.:}.<}.[}.}}.|}.1}.2}.Pp 3}.4}.4}.~g =: x] `i `i =: =: =: =: =: R4 =: <{ l[.{_.5}.hf +[.K #[.IF ", +" 6}.7}.s[.8}.9}.7$ d! 0}.a}.b}.;[.![.$}.)[.W* z[.c}.![.xn d}.6$ e}.f}.;}.g}.h}.i}.j}.Gp Fr -8 F2 k}.l}.0E 9).GF NF O'.O'.c!.c!.jG O'./H /H c!./H c!.c!.{H =F L% `F *J @F :E /E /E $O 5E BI kG [E kG 3H 3H `F [E 8E kG *J $O $O $O FI FI /E /E /E (E |.,|.'|.)|.!|.~|.O'.O'.6^./H /H wI *!.]I 6^.yI nG nG HH wI yI O'.%F 2I 1P _E 6E 7E !F !F 7E 7E }E }E zI 0E @#.[I h#.zI 7E nP <.><.E|.B|.9).F|.G|.H|.I|.J|.K|.L|.M|.:~ N|.O|.C5 P|._|._|.{_.n# r# m[.Q|.R|.S|._|.`i wc M~.,a ]o {_.W<.T|.U|.@[.(_.V|. ", +" W|.X|.7>.Y|.Z|.`|. 1.m$ zq .1.+1.@1.#1.$1.)[.%1.~,.`%.&1.*1.=1.-1.9> 4{ 2' ;1.>1.,1.'1.)1.!1.~1.{1.]1.^1./1.(1._1.:1.<1.[1.[}.HH IH }1.|1.11.21.31.41.51.61.71.3+.81.91.01.a1.nP QF _+._+.wW _+.vQ $F E* WF BF WF qG x..QF ]Q ]Q NP NP QF wW QF nP b1.c1.d1.e1.f1.g1.h1.i1.j1.k1.l1.m1.n1.o1.p1.q1.r1.2F s1.t1.u1.v1.w1.x1.y1.z1.A1.B1.C1.D1.E1.F1. [.]o G1.H1.I1.%s O|.S}.:|.J1.9<.3}.`i Sg :i K1.L1.oS M1.N1.%. O1.P1. ", +" Q1.R1.S1.T1.U1.V1.]=.d! W1.X1.Y1.Z1.^[.`1.`%.`%. 2.7~ .2.+2.@2.#2.a>.&|.HC $2.%2.&2.*2.=2.-2.;2.>2.,2.'2.)2.!2.~2.{2.]2.^2./2.(2._2.:2.<2.[2.}2.|2.12.22.32.7W D/.42.52.62.72.,<.L).&!.vQ L).iG {H ,).~F .Z<.^, >t v2.w2.>t [|.x2.3}.3}.9<.S}.qc [|.y2.5}.aU z2.A2.B2.u' C2. ", +" D2.E2.F2.G2.H2.I2.U~.s}.J2.K2.L2.M2.N2.O2.Q2 N,.P2.Q2.R2.<- i] S2.w[.T2.31 U2.19 V2.W2.X2.Y2.Z2.8a 3/ `2. 3..3.+3.@3.#3.$3.%3.&3.&3.*3.=3.-3.;3.>3.,3.'3.)3.!3.~3.{3.]3.^3./3.r).2H x..h#.]F DF O'.,).6^.EI $F |H *!.]I yI yI ]I wI jG c!.NF 2H f/.(3._3.:3.<3.[3.Z& }3.|3.13.23.33.H*.43.53.63.73.83.93.03.a3.b3.c3.d3.e3.f3.Op vt :i g3.=7 u2.{_.4P Tg Z< {g Km dq h3.3}.3}.R4 pc j[.=: Tg y2.y2.i3.j3.k3.l3.m3.n3.o3. ", +" p3.q3.r3.s3.H2.)1 t3.6' 2:.u3.v3.w3.N2.x3.w%.N,.P2.Q2.e|.y3.R:.z3.A3.B3.o^ C3.D3.E3.F3.G3.H3.t].I3.J3.*+ Fu K3.L3.M3.N3.O3.[, P3.Q3.R3.S3.T3.U3.V3.W3.X3.Y3.Z3.LI `3. 4..4.+4.]F h#.O'.O'.6^.wI eI *!.I .IH ').%F :H @#.').%F HH IH eI ]I /H $!.@4.#4.$4.%4.0# &4.*4.=4.-4.;4.>4.,4.'4.)4.!4.~4.{4.]4.(4 ^4./4.(4._4.-M :4.<4.[4.QZ }4.|4.pw Gh 14.o*.S).=: &b Gr 24.34.3}.9<.Q|.~g `b `i Tg 44.54.C1.64.74.84.B2.94.04. ", +" a4.b4.c4.d4.i4 )1 t3.3' 5$ e4.f4.g4.^[.-1.h4.N,.W>._r i4.8> j4.k4.l4.Q$.m4.n4.o4.p4.q4.r4.s4.t4.u4.K_.N:.v4.w4.2T x4.3Z y4.z4.A4.B4.C4.D4.E4.F4.%` G4.H4.I4.J4.VH K4.L4.M4.N4.h#.NF c!./H eI HH IH I .@#.7).@#.sG ').sG 7).:H eI HH :H eI /H O'.O4.P4.Q4.R4.S4.T4.U4.V4.W4.X4.Y4.Z4.`4. 5..5.+5.@5.#5.$5.%5.#& &5.*5.=5.-5.;5.>5.,5.'5.)5.!5.~5.{5.]5.^5./5.(5.&b eT _5.3}.S}.4}.4}.3}.x2.4}.=Q :5.<5.64.74.[5.}5.*. |5. ", +" 15.25.35.45.55.I2.3~.|!.W1.K2.@2.g4.65..1.p} #).W>.r,.H^.75.85.95.05.y9 y!.a5.b5.c5.(_.c5.d5.e5.f5.g5.h5.2= 6- i5.@p j5.{!.k5.l5.m5.n5.o5.p5.q5.r5.s5.t5.u5.v5.w5.w5.x5.y5.z5.NF NF jG /H yI nG HH I .7).7).7).sG %F nG IH HH yI eI IH :H :H HH A5.|2.B5.pG l2.C5.v D5.E5.F5.G5.H5.3, I5.J5.e8 K5.L5.M5.N5.O5.%R P5.Q5.R5.S5.T5.U5.V5.W5.X5.0).Y5.Z5.`5. 6..6.`i 1o .; Rb Tg Tg _|.4}.:i Tg +6.@6.#6._=.$6.[5.%6.&6.*6. ", +" =6.-6.;6.>6.,6.'6.)6.d! N:.!6.&1.g4.~6.41 %1.{6.Hr ]6.^6./6.(6._6.:6.)h <6.3f [6.}6.|6.16.SG 26.36.46.56.66.76.(z 86.96.06.a6.b6.c6.d6.e6.f6.,s g6.h6.i6.j6.pq k6.i# l6.m6.n6.i .IH HH nG HH o6.>).i .@#.o6.').i .n~.i .>).i .i .K).DI CI P'.=!.5n M2.p6.(. q6.>7 r6.s6.t6.u6.v6.w6.x6.y6.4n z6.A6.B6.C6.D6.E6.(I v' &# ca F6.G6.H6.I6.J6.K6.L6.s, %# M6.N6.&@ HK c1 ij Rb Tg Tg 3}.{_.K1.3}.O6.P6.Q6.R6.S6.T6.|5 U6. ", +" V6.W6.X6.Y6.Z6.`6. 7.7! e{ u3..7.e4.+7.![.&}.@7.9$ #7.$7.%7.&7.*7.N. =7.-7.;7.>7.,7.'7.)7.!7.~7.{7.]7.AF b5.^7./7.(7._7.W~.0>.:7.,#.(} <7.[7.}7.|7.17.27.37.47.57.67.77.87.a).97.07.a7.b7.c7.d7.e7.f7.g7.h7.i7.j7.H. k7.l7.m7.n7.o7.1/.p7.q7.r7.s7.t7.u7.v7.w7.aU x7.y7.z7.A7.B7.C7.D7.E7.F7.g3.G7.H7.I7.J7.K7.L7.M7.^I N7.O7.P7.Q7.R7.S7.T7.U7.M3.V7.W7.X7.Y7.Z7.R} `7.w# 8.BP .8.9<.R|.+8.^, y2.@8.#8.$8.6@ %8.+. ", +" &8.*8.=8.-8.;8.>8.,8.e|.'8.3; )8.!8.~8.G).{8.]8.^8./8.(8._8.:8.<8.[8.}8.|8.18.28.B2.94.94.38.48.58.68.78.88.,@.E= 98.F:.08.z3.a8.B}.b8.c8.,#.d8.e8.f8.g8.h8.@Z i8.j8.l/ h9 ,b k8.l8.f> e/.m8.e/.n8.o8.p8.q8.r8.s8.t8.p8.u8.v8.w8.x8.y*.y8.,+ Vm z8.s(.A8.v}.M~.H@.@: B8.B7.{_..; C8.D8.E8.F8.5P G8.H8.I8.J8.K8.L8.M8.N8.O8.P8.Q8.R8.S8.%+ d+.T8.U8.V8.W8.X8.Y8.Z8.z4.`8. 9.1X .9.9[ +9.@9.#9.5a K1.wn $9.%9.&9.*9.=9. ", +" -9.,,.;9.>9.,9.'9.)9.!9.~9.{9.]9.^9.(= 7/./9.:z (9._9.:9.<9.[9.}9.|9.19.29.39.49.59.69.79.89.99.09.a9.b9._I c9.,r d9.e9.7_.f9.q-.A}.g9.4w h9.i9.j9.k9.<7.l9.<7.<7.,k m9.o%.n9.k&.o9.R} p9.Gw q9.r9.s9.s9.t9.u9.v9.w9.x9.z).y9.(5.z9.0f vt Vo X[ Km X[ v1 X[ @: Km Qg u# ~g A9.mV B9.C9.D9.&7 E9.F9.G9.v( TC H9.I9.J9.K9.L9.M9.N9.O9.'= P9.X< Q9.R9.S9.T9.U9.V9.W9.X9.(^ [|.Y9.Z9.C7.`9.x;. 0..0.+0.@0.#0.$0.%0. ", +" &0.*0.;9.=0.-0.;0.>0.,0.'0.)0.!0.~0.{0.l8.]0.4T ^0./0.(0._0.U).:0.<0.[0.}0.|0.10.20.30.40.50.$. 60.70.80.90.00.a0.b0.c0.d0.5& b> E'.e0.f0.)).g0.Pr h0.i0.<7.h0.<7.|i j0.k0.l0.l0.m0.n0.m$.o0.p0.q0.R$.R$.R$.o%.o%.r0.L7 %,.O} mu Ae Jk vt 3d z# Qg )g G| G| ,m e 9{ ,; Z- s0.t0.u0.v0.w0.^7.x0.y0.z0.A0.b0.9+ B0.C0.D0.E0.F0.G0.H0.I0.J0.d] )a K0.L0.M0.N0._` RG O0.P0.Q0.:i N[ G@ R0.S0.T0.U0.V0.^'.W0.X0.Y0. ", +" Z0.`0. a.=0..a.+a.@a.o<.#a.C[.$a.*}.%a.&a.Hh *a.=a.-a.;a.>a.,a.'a.'a.)a.!a.~a.{a.]a.^a./a.(a._a.29.:a. u% v1 X[ ba.e2 M@ Jk )g vt )g )g vt Qg ca.da.Y9.Y<.2/ ea.fa.{1.ga.ha.ia.ja.ka.la.ma.na.oa.pa.qa.qa.ra.sa.ta.ua.va.wa.(@.xa.ya.1m za.D> E& Aa.Y<.,g cq Ba.Ca.Da.K1.Cy Ea.Fa.Z5.Ga. ", +" Ha.Ia.Ja.Ka.La.Ma.Na.Oa.#a.Pa.Qa.Ra.b- Sa.Ta.04.Ua.Va.LK WN Wa.Xa.Ya.Za.`a. b..b.+b.@b.#b.$b.%b.&b.*b.=b.FV b0.-b.VD ;b.>b.>a.,b.'b.)b.j9.!b.b4 R:.~b.}i 1i ,k |i >k ^t y1 qf {b.~+ i{ 'b ]b.4i ^a *c bo ^b./b.0^ bu '- u% >z Km `< (b.nc 5n I@ Vo Z< jj )g H| H| +4 V* _b.},.BJ :b.b.Ub.Vb.Wb.Xb.Yb.Zb.`b.i0. c. } i0.}i 8a I| .c.)1.+c.@c.j0.C$ h2 #c.3; $c.%c.Qn %c.~- M@ e v1 wt Km Y[ &c.Hm Gm I@ +4 +4 Km X[ _v _v Qg )g m[.*c.8I R# =c.ih -c.;c.-. >c.,c.'c.)c.!c.~c.{c.]c.^c./c.(c._c.:c._ Xc.Jk Vo e Hn Yc.;m Zc.`c.@: 9{ Qg r9 H| H| 2{ @a d..d.R# C~ +d.@d.|a.#d.$d.%d.&d.*d.=d.-d.;d.>d.,d.'d.)d.!d.~d.{d.]d.^d./d.(d..7._d./B :d.a.nd.Gb./] od.pd.qd.rd.sd.[> td.ud.vd.wd.}t Bb.xd.yd.zd.Ad.Bd.Cd.Dd.S8.U6 Ed.Fd.Gd.X6 ZP Hd.g!.Id.x1 Jd.Kd.Ld.Md.[I Nd.Od.Pd.Qd.Rd.0s ij 9^ Sd.Td.Ud.os @s Qg Km N@ Jk Z< )g )g Vd.Wd.Xd.Yd.Mc.Zd.&# B~ `d. e..e.+e.@e.#e.$e.%e.&e.*e.=e.-e.;e.>e.,e.'e.)e.!e.~e.^a * {e.]e.^e.)h /e.(e._e.B7.:e.54.:5.]P +0. P2 Ae.Be.Ce.De.Ee.Fe.-. *. Ge.He.Ie.Je.Ke.Le.Me.Ne.Oe.Pe.Qe.Re.Se.Te.Ue.Ve.We.Xe.Ye.Ze.`e. f.TC .f.+f.X>.s(.<5.@f.:e.:e.#f.$f.r7 f.,f.ld 'f.)f.!f.LK id.~f.MK {f.{f.9P ]f.PX li ^f./f./f.:[ :[ Eb.(f._f.:f. vt vt 7S *h bf.cf.df.ef.ff.Mc ;a.gf.hf.if.jf.kf.lf.mf.nf.of.pf.qf.rf.sf.tf.uf.vf.wf.xf.yf.zf.Af.Bf.Cf.a) Df.Ef.g_ Ff.J1.Gf.S|.]P Hf.If.Jf.p* ", +" Kf.Lf..a.+a.tf.Mf.;f.Nf.'[.!. Of.Pf.Qf.Rf.Sf.Tf.eV eV 5T Uf.Vf.Wf.Wf.Xf.Yf.Zf.cD pc.pc.qc.`f. g..g.+g.@g.#g.$g.%6.%g.Gc.&g.*g.=g.b+ N).-g.;g.>g.N2.,g.*c se.X[ @1.v1 N@ Sn g2 *c se.@1.@1.Sn v1 e X[ v1 bu Qg 2{ I@ 'g.ps e2 |d nc Hn 9f Vo H| H| Qg Q} jj )g.m% !g.~g.{g.]g.^g.W9.U6./g.(g._g.:g.^.}g.|g.1g.2g.3g.4g.5g.6g.I3.7g.8g.9g.0g.ag.bg.{O cg.dg.eg.fg.dg.=Q gg.=Q hg.ig.If.wn ", +" jg.kg.f<.lg.vb.5e.mg.'[.ng.G0.og.pg.qg.rg.sg.tg.3f.ug.vg.Xf.GQ wg.xg.yg.MK MK &M ~f.zg.de.Ag.Bg.Cg.Dg.Eg.Fg.ia.56.Gg.Fc.Hg.Ig.Jg.Kg.Lg.Mg.Ng.g4.F| Og.v1 G| Vo se.Jk B# H| _v )g Km Pg.7! Qg.Rg.Sg.Tg.Ug.Vg.Wg.Xg.Yg.}8.Zg.`g. h..h.+h.@h.#h.$h.%h.&h.Lh $h.Jz *h.=h.-h.;h.>h.,h.'h.Ob )h.!h.ue !h.!h.~h.{h.]h.ig.^h.p2. ", +" /h.(h._h.gc.5e.:- :h.i.,i.'i./f.)i.CW de.>C &M MK MK ch.Mw !i.Kh ~i.{i.]i.;c.Y5.^i./i.(i._i.:i.;g.j.,j.'j.)j.!j.~j.{j.]j.FC Nb ~z %' `& `& ~z qi.^h.^h. ", +" ^j./j.(j.Xi.F| _j.7n A}.:j.eb _ vj.Wc.l# ij 7f Qb I@ H@ Xd I@ Vo 6n Zd O[ x# M@ Np wj.xj.yj.zj.Aj.Bj.Cj.Dj.Ej.Fj.Gj.Hj.Ij.Jj.NH Kj.}t Lj.Mj.Nj.Oj.Pj.Sh.Qj.Rj.Sj./x +6.pi.Tj.Uj.Vj.Wj.Xj.Yj.Zj.`j. k.~z U+ If. ", +" .k.+k.@k.)a Pa.#k.$k.3> F| %k.&k.*k.=k.-k.;k.>k.,k.'k.)k.!k.~k.$h.}h.{k.]k.^k./k.(k._k.:k.l.,l.'l.)l.!l.'l.~l.{l.aw ]l.#h.^l./l.(l.[8._l.:l.0 8l.|9 >t 7S ], !> `a V+ 92.9l.0l.al.bl.>, re q4 cl.dl.el.fl.gl.hl.il.jl.pO kl.m.M|.Ww 32.,m.'m.)m.!m.~m.{m.Vk *X M7 ]m.^m./m.(m.:3 _m.:m.n.,n.'n.)n.!n.~n.{n.]n.^n./n.(n._n.:n.o.,o.'o.)o.!o.~o.{o.]o.^o./o.d4 (o._o.:o. c #4A4A42", +", c #424239", +"' c #312939", +") c #313129", +"! c #292921", +"~ c #291829", +"{ c #292118", +"] c #39424A", +"^ c #182121", +"/ c #211021", +"( c #212118", +"_ c #181818", +": c #292939", +"< c #181829", +"[ c #101010", +"} c #101018", +"| c #081008", +"1 c #100818", +"2 c #000000", +"3 c #080000", +"4 c #100808", +"5 c #080808", +"6 c #080800", +"7 c #081010", +"8 c #080008", +"9 c #080810", +"0 c #182929", +"a c #39394A", +"b c #293931", +"c c #000808", +"d c #000008", +"e c #000800", +"f c #080818", +"g c #212139", +"h c #293142", +"i c #101808", +"j c #31394A", +"k c #183139", +"l c #29424A", +"m c #313152", +"n c #393952", +"o c #313952", +"p c #31425A", +"q c #29314A", +"r c #31294A", +"s c #394A5A", +"t c #8C524A", +"u c #424A5A", +"v c #081018", +"w c #181029", +"x c #294252", +"y c #525A73", +"z c #313963", +"A c #082118", +"B c #102129", +"C c #63638C", +"D c #CEDEDE", +"E c #DED6E7", +"F c #DEDEDE", +"G c #E7EFE7", +"H c #EFEFEF", +"I c #E7E7EF", +"J c #FFFBF0", +"K c #F7F7F7", +"L c #D6DEDE", +"M c #DEE7E7", +"N c #7B7B94", +"O c #7B9C6B", +"P c #638C5A", +"Q c #6B9463", +"R c #5ACA62", +"S c #6B7B8C", +"T c #527363", +"U c #527342", +"V c #637B8C", +"W c #B5BDBD", +"X c #C0DCC0", +"Y c #FFF7FF", +"Z c #395A6B", +"` c #738CAD", +" . c #182942", +".. c #C6CEDE", +"+. c #7B84AD", +"@. c #BDC6BD", +"#. c #ADB5BD", +"$. c #9CA5C6", +"%. c #9CA5AD", +"&. c #949CBD", +"*. c #B5BDCE", +"=. c #395273", +"-. c #081810", +";. c #42737B", +">. c #527B94", +",. c #395263", +"'. c #4A7384", +"). c #31525A", +"!. c #315A5A", +"~. c #5A84AD", +"{. c #396B73", +"]. c #8494B5", +"^. c #216352", +"/. c #217363", +"(. c #215A31", +"_. c #291839", +":. c #4A7B8C", +"<. c #800000", +"[. c #FF0000", +"}. c #800080", +"|. c #ADBDB5", +"1. c #314263", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . . . + @ # # $ $ % & * & * * * = * = = = = * = * * * * * * % % $ # # # + . . - ", +" . - . # # $ & * * = = = = ; > > , , ' ) ) ) ) ) ) ) ! ~ ) ~ ) ~ ) ~ { ~ { ~ { ! ! ) ! ! ) ) ) , , ] > = = = * * $ $ + . . ", +" - - + $ % * = = ; > > ' ) ) ) ! { ' ) ~ { ~ ! ~ ^ { ^ { { ^ { ! ~ { { ! ^ ! ~ ! ~ ! { ! ~ ! ^ { ^ / ^ / ( / _ / _ / { / { ~ { ! ! ' ) > ; = = * $ $ + . ", +" . + % * = > > ' ) ) ' { { / _ _ { ^ / { ! ! ~ ! ) ! ' ! ! ' ! : ! ~ ! ^ { ! < ! ~ ! ! { ! ~ ^ { ^ ! ~ ^ { ! ^ ! ~ ! ! ^ ) ! < ! ^ ^ ^ / _ [ _ } _ / { ! ' ) > ; ; * * # + - ", +" + & = ; , ' { { / _ / ( { { ~ ! ! : ! ! ' ! : ! < { ^ / ^ ( ^ / _ _ _ / _ _ _ } _ / _ _ ^ _ ^ _ _ / [ _ } _ _ [ } _ [ _ } _ { ^ / ( ^ / ( { ^ { : ! ! ~ { ^ / _ _ } [ / { ) , , ; = * % # . ", +" - * > ~ { [ / _ { ^ ! : ! ! < { ^ ^ ^ / _ ^ _ _ _ } _ [ [ _ } [ _ [ [ } [ _ } [ } _ [ _ _ } [ _ } [ } [ [ } [ _ [ } [ [ } [ [ } [ _ } [ [ _ } [ _ } ( / ^ { ^ { ^ ! ~ ! { ! ^ / _ } [ / { ) > > ; * + ", +" * { [ [ ^ { { ! ^ ~ ^ ( ^ / _ _ [ _ [ [ } [ [ } [ [ [ } [ } [ _ [ } [ [ _ } [ _ [ } [ / [ _ } [ [ / [ [ } _ [ } [ [ [ } [ [ } [ [ } [ [ } [ [ [ } _ [ _ / _ _ ^ _ / ( ^ ~ ^ ! ! ~ ! { { ^ { } [ [ { > * + ", +" * / | [ ^ / _ ^ } ( _ [ _ } [ [ [ [ [ } [ [ } [ [ } [ [ [ } [ [ } [ [ } [ _ [ } [ } [ } [ } [ _ [ } [ [ } [ [ } [ [ } [ [ } _ [ } [ [ [ } [ [ } _ [ [ } [ _ } _ _ / _ ^ ( ^ ( / ^ ( ^ ~ ^ { ^ ! ^ / ^ 1 _ > % ", +" $ ) 2 [ [ [ _ } [ [ } [ } [ [ [ [ [ [ } [ [ [ [ } [ [ } [ [ [ } [ [ } [ [ [ } [ } [ [ } [ _ [ _ } [ [ } [ [ } _ [ [ [ [ } [ [ } [ [ } } [ [ } _ [ } [ } [ [ _ [ } [ _ [ } _ / _ ^ _ / ^ _ { ^ { ^ { ^ { ^ / [ ) $ ", +" ; [ 3 [ [ } [ [ [ } [ [ [ [ [ [ 4 [ [ [ [ [ [ } [ } [ [ } [ } [ [ } [ } [ [ } [ _ / [ _ [ / [ } [ _ } [ [ } _ [ [ } } [ [ } [ [ } [ [ } [ } [ [ } [ [ [ } [ [ } [ _ } _ [ / _ _ [ / _ _ [ _ / ^ _ / ^ ^ { ^ ( } , # ", +" $ ) 4 5 4 [ [ 4 [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ [ [ [ [ } [ [ } [ [ [ } [ [ / [ _ } _ [ } [ _ [ } [ [ _ } [ [ } [ _ [ } _ [ _ } [ [ [ } [ [ [ [ [ [ } [ [ } [ [ } [ [ / [ [ _ } [ _ [ } _ _ / _ _ ^ { ^ { ^ { ~ = ", +" = ~ 6 5 4 7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ } [ [ } [ [ } [ } [ } _ [ _ } _ [ / [ [ } [ [ _ } [ [ _ } [ _ } _ _ [ / [ [ } [ [ [ } [ [ [ [ [ [ } [ [ } [ [ } [ } _ [ } [ [ } _ [ } [ _ _ / _ ^ / { ! : ! > $ ", +" + ; [ 5 8 4 7 4 4 [ 7 [ [ [ [ [ 4 [ 9 [ [ [ [ } [ [ [ [ } [ [ [ } [ } [ _ [ [ [ } _ [ _ } [ _ } [ [ } [ [ [ } [ _ } [ } [ _ / [ } [ [ [ [ } [ [ [ [ [ [ [ } [ [ } [ } [ [ } _ [ } [ _ } [ [ } [ _ / _ _ / ( ^ ^ { ! ' , * ", +" & ) [ 8 4 5 4 4 7 4 [ [ [ [ [ [ 9 [ [ 4 [ [ [ [ [ [ } [ [ [ } [ [ } [ [ } [ _ / [ _ } [ [ / [ [ } [ [ [ } [ [ [ / [ [ [ / [ _ } [ } [ } [ [ } [ } [ [ [ [ [ [ } [ [ [ } [ [ } [ _ [ } _ [ } [ _ / [ _ } _ ^ ( / 0 ' , a ; + ", +" - = ~ 4 6 4 4 5 4 4 4 [ [ } [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ } [ [ } [ [ } [ _ } [ _ } [ _ } [ [ } [ [ } _ [ } [ } [ [ } [ [ } [ [ [ [ } [ } [ [ [ [ [ [ 4 [ [ [ [ [ [ } [ / _ [ } [ } _ [ } [ [ [ _ _ } _ _ / ^ { ! ' , , > % ", +" # ; { 4 6 8 4 4 4 9 4 [ [ [ [ [ } [ [ [ [ 4 [ [ [ [ [ [ [ [ [ } [ } _ } [ [ [ } [ _ [ / [ _ [ } [ _ } [ } [ [ } _ [ } [ } [ [ } [ } [ [ [ [ [ [ [ 4 [ 7 [ 4 [ [ } [ } [ [ [ } [ _ } [ / _ [ / [ } [ } _ [ / _ { ^ { ) a , > * ", +" $ , [ 4 5 8 4 5 4 4 [ 4 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ _ } [ [ } [ [ _ } [ } [ [ [ } [ [ } [ [ } [ _ [ [ } [ [ } [ [ [ [ 4 [ [ [ [ [ [ [ [ [ [ [ [ [ } [ } [ _ } [ _ [ [ / [ _ [ [ _ / _ _ / ^ ( ~ ! b > ; = ", +" . * ) [ 8 5 5 5 4 4 4 9 [ [ [ [ } [ [ } [ [ } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 4 [ 4 [ 4 [ [ 4 [ [ [ [ 4 [ 9 4 [ 4 [ 4 7 [ [ 4 [ [ [ 9 4 7 4 9 [ [ [ [ [ 4 7 [ [ [ } [ _ [ } _ [ / [ _ } [ _ _ } _ } [ [ _ / _ ^ { ^ ) ' > ; = . ", +" + ; ! [ 8 6 8 4 5 4 4 4 [ [ [ [ [ } [ [ [ [ [ [ 9 4 7 4 5 [ 5 9 4 5 5 5 8 5 8 3 c 3 d 2 d 2 2 2 2 2 2 d 2 2 2 2 2 d 2 2 3 2 2 d e 8 2 e 2 5 6 c 5 5 4 9 4 7 4 5 [ [ } [ _ } [ _ / _ _ } [ _ } [ _ / _ _ } _ _ _ { ^ { ! ' ] > = # ", +" $ > / 7 6 8 5 5 4 5 4 [ [ } [ [ [ [ [ 4 [ 4 4 5 5 6 6 8 e 8 e 3 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 d 2 3 d 2 2 8 2 e d 3 2 2 d 2 2 2 2 2 2 2 2 2 2 2 2 3 2 6 3 3 e 3 5 4 5 4 1 [ [ } [ _ / [ [ _ [ [ _ _ _ } [ [ / _ ^ / ^ ! ' , ; ; % ", +" * , [ [ d 6 5 4 8 4 5 [ [ [ [ [ 4 [ [ [ 4 5 3 2 3 2 2 2 2 2 2 2 2 d 2 2 2 e 8 5 9 5 [ [ [ [ } } [ } ^ } _ } } } _ } } _ } } [ } [ [ 9 5 9 8 d 8 d 2 2 2 3 2 8 3 3 8 2 3 3 8 3 5 9 4 5 [ 4 [ [ _ _ [ _ / [ ^ _ / _ { ^ ! ' , > ; * ", +" . = ' [ 5 5 8 5 4 5 5 4 4 [ 4 [ 4 _ [ [ 4 2 2 2 2 2 2 d d 5 9 f [ } } _ ^ / ^ < ~ 0 ^ g ! g : b : : h : h : h ' h : h : h ' : : : : g ^ g ^ : ^ ^ ^ ^ } ^ } } [ [ 9 6 8 2 6 2 2 2 2 2 3 2 6 6 4 i [ / [ _ } _ / _ ^ { ^ ! ! a > ; = . ", +" $ ; { } 5 5 6 5 4 8 4 5 4 [ [ [ _ _ [ 8 2 2 5 7 } } ^ } ^ < ~ < : ' b h h h j ' b h h b : k b h h h h h k h j j h h h h h j ] j h l j h j ] j ] a j j ' j ' : 0 g ! < _ ^ } _ } [ 9 8 e 2 2 2 2 3 5 [ [ _ / _ _ / _ ^ { ^ ~ , ; ; = + ", +" % , / [ 5 5 5 3 4 5 5 4 4 5 [ ( ^ 1 2 2 9 } 0 ' a j j h ' h ' h : b h h ' b : k : : k : k : k : h b h b h b h : b k : b k h h b h b h h b h h j j h h b h h b a h a a a a a h ' : ^ ^ / } 7 5 d 2 2 d 4 [ _ } [ _ ^ / _ ^ ! ' > ; = $ ", +" = ) { [ c 5 5 4 8 5 4 4 5 [ ( / 5 2 9 } : ] m : h h : : : : : k : : h ' : h : : : b : k b : : k b h b h h : b h : k : : b : k h h b : : h k h h j h h j h j h j j h j j n j j a o ] n ] h : ^ } 4 2 2 2 5 [ [ } _ _ / ( ! : ) > ; ; % ", +" . = { / | 5 5 5 8 4 5 5 3 [ ( _ 5 2 1 : j j h : k : 0 : k : b : : : : : : : : b ' k : : : : : k ' h : h ' k ' h h b : : h : h h : h h h : h ' h j ' h j h ] h ' h a h h j j a j h j p a j l h j b < [ d 2 2 5 [ [ [ / _ ^ { ! ' > ; = * . ", +" # > ~ [ 5 c 3 5 5 5 4 5 [ / ( 4 2 } : b ' : k : g 0 : : : : : b : : : : : b : g ' : : g : b h h h ' h h ' h h b h h b : b : : h ' : h : h ' h h h b h ' j h j b h j h j j a j j j j j q h j j j j ] h / c 2 2 5 [ } _ _ / ^ { b a ; = = . ", +" # > ^ [ 5 d 6 8 5 4 8 4 _ ! 4 2 } k h b g : 0 : 0 ~ : 0 : : k : : b : : b g : : b : : k : h ' ' b : : h b h h h b j h h : b : h b h : : b h ' h b r ' h b h j b j h j j j j ] j j o a j j j j j o s ] a } 8 2 2 5 [ [ _ _ ^ { ! , ; = t # ", +" . ; ( 1 6 c 3 5 5 8 6 [ ~ _ 2 5 : b : : 0 : : : : : 0 ~ : 0 : g : : : k : : : k : : 0 : ~ k : : : : : : h ' h ' j h ' h b h h ' h h b : : h b h ' h b h h h j j b j j h j j j j j j j j n j j ] o a a a ' } 5 2 8 7 [ _ / ^ { : , > = = # ", +" + > / 7 6 d 5 5 5 5 4 / { 5 c ^ a ' : 0 g ! g 0 : : : : 0 : : 0 : : 0 : : : ! : 0 ~ g : k ^ : : k : b : : h b h ' h h b h h h : h ' h : : h ' h h : : h : b h h j b j a j a j j j h j j j ] o n o j j h ] ' } e 2 5 } _ _ / ^ ! a > ; * @ ", +" $ , } 5 5 2 5 5 3 4 4 ( } 3 } ' b : k < 0 g ~ 0 g : ! g : g ! g : : : 0 ~ k : : g 0 : : ) g : b : : : : 0 ' : : b : h ' : h ' : b : : : : : h ' : h h : b h h b h j h h a o j j a o j j j n s ] ] j j a a ] ' 7 2 6 [ / _ ^ { ! ' > = * # ", +" = ' _ 5 3 c 3 5 3 5 / ^ 5 3 ^ h : g 0 : ! < : g ! g k : ^ : k : ~ 0 : : : : : 0 : : : 0 g : 0 : : ! : 0 ~ k : ! g ^ < ^ < ! < : : 0 : ! k : : : k ' h b h h h b h h h j j ] h j j ] n ] j n s a j j a j ] n ] _ 2 2 [ _ ^ ( ^ ~ b > ; * $ ", +" % > ~ [ 5 6 d 6 5 2 4 ! { d 4 : ~ 0 g : 0 < : 0 : g b g ! g : : 0 g : : : 0 : 0 : : g ^ : 0 ~ g : b : < _ ^ g ! g ^ ~ ^ [ } } ^ ^ ^ ^ ^ } ^ < < : ' h b : h j b : h b h h a j j j j o s j j n ] o j a j ] n s s : 5 2 5 [ / ^ { ! ' , ; = % . ", +" . = { { } 4 2 5 3 8 5 [ ~ [ d } : 0 g : : 0 ~ k : : 0 : : g k ~ 0 : : 0 : : : 0 ~ : k : : g : : h h a j ^ 9 } : j : h ) < f } 0 : g : : _ 7 9 } ^ 0 : ! : : h h h h b h h h j ] j h j j j a o ] o ] o a o ] n o ] ] ^ 2 2 [ ^ { ^ ! ' , ; * = + ", +" % , / { } 5 3 8 6 8 5 ^ ( 9 d ^ g : ^ : : : 0 ~ 0 : : : ^ : 0 g : : : : 0 : : g : ^ g : : h j a ] n u n < _ h ] u ] n j : < h a n s n ] g } ^ < : : : < : k h b h b h h b h h b a j j j j j ] n n ] s a n s ] n s s g 6 2 [ { { ^ { ! a ; = * % ", +" * ! { ^ [ 8 6 8 6 8 5 / ^ 2 9 < : < : : 0 : g 0 g ~ : 0 g ~ g ! g k ~ k ~ : 0 : 0 : < : j j a ] n u n a ' b a a n s a a h h a a ] n n a : 0 ' ] s a a j h ' h k h h h j h h b j j j j j a j n ] o o ] n j n p ] n s h [ 2 5 _ { ^ ! : ) ; = * * . ", +" = ~ { ^ 4 3 8 3 5 8 [ { [ 2 } ^ : : 0 ' : 0 ~ g ^ : k ~ k 0 : < : : k ~ 0 : : : : : ^ : : h ' h h ' j ' h : : : h ' ' h ' b ' h : h a ' : : h j a a n n a j h b h h j b h h j j j b j ] j ] o ] o j j j ] p ] n j ] u ^ d 3 [ { ^ ~ ! ) > * = * . ", +" . ; { { / 4 5 3 5 2 8 ^ { 9 c } : ^ : : : 0 ~ k : < 0 : : : ~ k : : : : 0 g : 0 : : 0 g 0 : : : : : : : : : : : g : : : : : h h : : : h h : b h : : h h a h b h h h b j ' h b j j j a j ] j n ] p a j h j n ] n ] p ] u ' 5 2 [ ^ { ^ ! a > = * * # ", +" # , / ! _ 5 3 8 3 2 4 ^ / e 4 _ < < : 0 : : < g ^ : ^ : : 0 g ~ 0 g ! < : 0 ~ g ! g ~ 0 : ~ 0 g : b : : k : : k : : : k : : h : : h h ' h : h h ' h h ' h ' h : j j h h b h h h b h a j j a ] o ] n j j n j o ] n p s n a [ 2 5 / 0 ~ ! ) > = * = $ ", +" % { ^ { } 4 2 5 3 8 4 ! } 2 } ^ < ~ 0 g ~ 0 : ^ g ^ g : 0 ~ 0 : < 0 g ^ : : 0 g g 0 : : g 0 : : 0 : h ' : g : h : : 0 : g : b ' : : b h ' h ' h h j ' h h h b h b h b h j h b h h j b j j j ] n p ] o j ] o j j n ] n s n ^ 8 e } { ! ~ b ] = * * % ", +" * ( { ^ [ 4 8 3 c 3 [ { [ 2 } < ^ 0 ~ 0 < : ^ < 0 ~ 0 g : 0 g : ^ ~ < : < : : 0 : ~ k ~ 0 : : ~ g ! : : g k b : ^ < ~ 0 ^ ^ ^ : 0 g ! : k ~ k : : h h ' h a h h : h ' h j ' j b h h a b j j o ] o ] n j j ] o a ] o ] s u ' e 2 [ { ~ ! ) , ; * = % ", +" ; { ^ ~ [ 8 6 8 3 5 _ / 5 5 } ~ ^ < ^ < ! < : ! < g ~ 0 : : ~ 0 g 0 g ! : 0 : : : 0 : g ^ : : 0 g : k : : b h _ f } 0 ' 0 [ 9 ^ < ^ g ^ } v ^ ^ g : ' h b h a : ' j : h ' h b h h j j j j j j j n s a j j n n j o ] s ] u j 5 2 4 ^ ! : ) a = * * * . ", +" # > { ! ^ [ 8 5 3 2 4 { _ 3 5 _ < ^ ~ 0 ~ 0 : ^ : < ! g 0 : : : < ^ : : : g : : 0 ~ : 0 g ^ : 0 : : : : b a a : [ 8 < a a ' [ 9 w ' b b ~ 7 } ^ ~ < 0 : : : h ' : h b h : h b h h h b a ] h j h j j n s j n ] x ] n s ] n u ] _ d 5 ( ! ! ' , ; = * * + ", +" % ) { ~ ( 4 8 3 3 2 4 ! [ 2 9 ^ < ^ < ~ 0 ~ 0 ~ 0 : g 0 g : < ! g < ~ 0 : 0 < : : 0 < ~ < ^ : g : b j a a a j : ^ ^ a ] ] j : < j ] n ] h : b j j j ' h ' h ' h : h ' h ' : : h h b j j j j j j j a ] n ] o s n s ] n u n u ] : 6 d _ ~ ! ) ' ; * * * $ ", +" * _ { : _ 5 3 5 2 3 [ { [ 3 7 / < ~ 0 0 < ^ g 0 ~ 0 g ~ : 0 g 0 g 0 g : ^ g ! g 0 ~ < < 0 g ~ 0 : : ' j h ' : b : h b a h h b a a a a j ' h a ] a ] ] a h h b : h : : h b : h b h j h j b a j n j j s a o ] n u a n s s u ] y a 5 2 [ { : ! , > = * = $ ", +" ; [ ! ! } 6 8 3 2 5 / ^ 4 2 [ ^ ~ 0 ~ ^ : ^ ~ ^ g ^ g 0 : ~ : < ! g 0 ~ < < g 0 g : 0 g ~ 0 : : 0 < : b : g 0 g : ! g : : : : ' : b : : h : ' h h ' a : h ' h : h b : : h h : h h b j h j a ] o ] j n o ] n s n ] n ] s u u ; u [ 3 9 ^ ! ' ) ; = * * * ", +" . > [ ~ ! } 4 2 5 3 4 ! } 3 c } ^ ^ < ^ < ! g 0 ~ 0 < ~ 0 < 0 < ! g g ! g 0 ~ 0 ~ ^ : : ^ 0 : < : : ^ < < ! g g : 0 : : : 0 : < ! : : h : : : k : ' h : h h b h ' h ' h : h h : h j h b h j j a p a j j ] n s n ] s a p n n u ; u ~ 2 5 _ ~ ) ' > = * * % . ", +" $ , } ) ~ [ 6 3 8 2 [ { [ 2 9 _ / ^ < ^ < ^ : ^ : ^ : ^ < ^ ^ ~ g 0 : < 0 ~ 0 ~ 0 < ~ 0 < ~ 0 ~ 0 : ^ ~ 0 g 0 ~ k ~ : : k : g : : h h h h : : : : b : : h ' h h h ' h : b h a : b h b h j h h j a ] o n n ] p ] n n ] n n n ] u u ' 9 2 _ ! ! ' > = * * * . ", +" & ! / ) 0 4 5 3 2 3 [ { 9 2 [ ^ } ^ < 0 < ~ 0 ~ ^ g ^ ^ ~ ^ g 0 ~ 0 ~ 0 ~ k ~ 0 ~ ^ < ! < : ^ g ^ : < ! g ^ g 0 ~ k : 0 ~ : : ^ ^ : : b : 0 : : b : : h ' h : j ' h b h h ' ' h h b q j j b j a o j ] p ] n s a o s a n ] n s z ; n 7 2 [ ~ ) b ] ; * * * # ", +" * / ( ) { 9 3 5 3 5 } _ 8 2 } ^ ^ < ^ ~ ^ ^ < 0 < ^ < ^ g 0 { g 0 ~ 0 : ^ < ^ < ^ < 0 < ~ 0 ~ 0 ~ 0 ~ 0 g ! g : : : b } } 0 : : } } 0 : ^ } ^ : ' h : : h : b h ' h a h ' h h b j j h b j j j ] j j j a o ] n ] n s ] n n s ] s y a 7 2 [ ! ' ) , ; * * * # ", +" = 4 ! ' ^ 4 5 8 3 5 _ [ 8 2 } _ } ^ 0 < ^ ^ ~ ^ < ^ ^ ~ 0 : < ^ ~ 0 g ^ g ! < 0 ~ ^ < ^ ^ g 0 ^ < ^ < ^ ~ 0 : : b ] g 7 } : ' A 9 } : : ^ 9 } 0 ^ g : b a h ' h : h ' j ' h : h h j h j h b h j j j j o ] p s n ] n s n ] n ] p ; s } 2 4 ! b ' , ; = * * $ ", +" - > [ ' ) ^ 4 3 5 2 4 { [ 8 c } ^ ^ ~ < ^ < ^ < ^ ^ ~ < 0 ~ 0 ~ 0 < ^ ^ : ^ < ! < ^ < ^ ~ 0 ~ 0 ~ ^ g ! < k ' j a ] a < } : ] j ^ } h ] b w ^ a ] ' b : h h ' : h : b h ' : : b h b h b h a j j h j n ] j j a n s n s ] s n ] s s u u / 2 5 ^ ) ' , > * * * * ", +" . > } ) ' [ 5 8 6 2 [ ~ [ 2 9 [ } ^ < ^ < ! < : ^ < 0 ~ 0 g ! < ~ k ~ ^ g ! < < ^ < ^ : 0 ~ 0 < ^ g ^ < ! g : : b ' : : : b h ' : : b a : h b h a j a ' h h a : : b : h h : : : h : h h b j j j h j a o j q ] n j ] s n s n n ] u y u ! 8 c _ ' ) a > = * * % . ", +" # ) _ ' ) [ 5 8 3 2 [ ! 4 2 9 _ ^ ^ < ^ g ^ ~ 0 < ^ ~ 0 < ! g 0 : ^ 0 ~ 0 g ! < ~ ^ g ^ ^ < ^ ~ ^ ^ < ) g 0 : 0 : g 0 : g : : g 0 : : : : : ' h ' : ' : h b j ' h : : h : : h h b h h b h h h j h j j ] j j j j n s a n ] n ] n s ; ; h 5 5 [ ! ' , > * * * * . ", +" % ) / b ) [ 8 e 8 3 [ ~ 4 2 5 } ^ < ^ g ^ ^ 0 ~ ^ ^ < ~ ^ < 0 ~ : 0 ~ ^ < ! < 0 < ^ ~ ^ < ^ < ^ g 0 ~ 0 : ^ ~ 0 g : ~ 0 : 0 : : < : g : : k : : h b : : h ' h j h ' h : h b h h h h ' h a h b a h b j j j a j j j n s n s n ] u u u y u 1 2 _ ! ) ' > = * * * @ ", +" * { ^ , / 7 3 3 2 5 / ( 5 2 [ / ^ ^ ~ ^ ^ g ^ < ^ ^ < : 0 ~ g 0 ^ ~ 0 < : < 0 ~ 0 ~ 0 < ! < ^ < ! < ^ < ^ : < : ^ < : : 0 ~ : k : : ! 0 : : : : : : b : : h ' h ' b h h ' h ' : h ' j ' j a h a h j h b h h a j ] s a ] n u s n u z y ; } 3 [ ! ' , ] = * % * $ ", +" = / ! ' ( 4 d 6 2 4 ^ [ 8 2 } ^ ^ / B ^ : 0 ~ 0 < ^ < ! < 0 ~ ^ < ^ : ^ ~ 0 ~ 0 ~ B < ^ g ! < ^ < ^ : ^ < ^ : 0 g ! g 0 ~ g 0 : : 0 : : : : 0 : 0 : : h : h h b : : : : : : h b h ' j j b a ' h b h ] j h a j ] o n j n ] u u n s u y ; / 2 5 { b ) , ; * * * $ ", +" > [ ) ' ^ 5 6 8 2 [ { [ 2 5 } ^ / B ^ < ^ ~ 0 ~ ^ ~ 0 < ^ < ^ < ! g ^ < 0 ~ k ~ 0 ^ < ! < < ! < < ^ < ! < ~ ^ g 0 g < ~ 0 g ~ 0 ~ : g : k ~ g : : : : : : b h ' h h : : : h h a : : h a ' h h b h j j a j j j j j j ] o ] s ] u u n y ; g 2 5 _ ) ' > ; * $ * % ", +" . > } ) ) _ 8 2 5 2 [ ~ [ 2 5 } ^ ^ ^ ^ < ^ < ^ < : 0 ~ ^ < ~ 0 ~ 0 ~ 0 ~ 0 ~ ^ 0 < ^ < < ! < < ^ : ^ < ~ 0 < < ! < ~ 0 g : 0 g : 0 g 0 : : : k ! : : k : : : : h ' j h b j h a ' h b h : ' h ' h h b j j b j h j ] o ] n n n s s u u ; y ' 5 6 _ ' ) > ; * % * * ", +" . a [ ' ) } 5 3 6 2 _ ! 4 2 4 _ } ^ ^ < ^ < ^ < ! < : 0 : ^ 0 ~ 0 < : 0 ~ g 0 g ^ ~ < ! : g 0 ^ < ! < ! g : ! : g 0 g ~ k : ~ k ~ g : 0 : : b ' : k : : : b : : : h : j ' j ' j h b r ' h : h ] j b j h b j h j j a n s u ] ] s n u u y ; a 4 6 } ) ' , ; * $ * $ . ", +" $ ) _ ' ) [ 5 2 8 3 } { 8 2 [ } _ } ^ ^ ~ 0 ~ 0 < ^ ! g ! g ~ 0 < ~ 0 g 0 ~ 0 < ^ g 0 g : ! g : ^ < g : 0 : : k g : 0 : 0 : : 0 g b : : 0 : : : k : : : b h : : h : b h : h b ' a j b h b h h j b a j ' h j b j a o ] ] s s n s u n u ; y n _ 3 [ ! ' , ; * % * * . ", +" # ) ^ , { 9 3 c 2 5 _ / 6 2 7 } _ ^ / ^ ^ ~ 0 ^ ^ < ^ 0 g : 0 < g 0 ~ 0 < < ^ ~ 0 ~ < 0 : : k ~ 0 g ^ : 0 g 0 g ! g : : 0 ~ 0 g 0 ~ k : ~ 0 g 0 : : : b : : : : h b h ' : k : : h b h ' h b j b h j b j b j a j ] o n o n s n n u n u u y ; w 2 [ ! ' , > * % $ * . ", +" . ; { , ^ 4 2 3 2 4 _ [ 8 2 [ } ^ } 0 ~ 0 ^ g ^ ~ 0 ~ < ! g 0 ~ 0 ~ 0 < ~ ^ < ^ g ^ 0 ~ : 0 < ^ < ^ < ^ ^ ^ / B ^ < ^ ^ } ^ w ^ } ^ ^ } ^ < ^ < ~ 0 : : 0 : k ! : h b : h ' : : j a : b h j j h a ' j h h b a s n n ] o n s n ] n ; u ; y C / 2 5 ^ b , > = % $ * . ", +" * , ' { c 2 2 2 [ { 1 3 8 } ^ _ ^ / ^ ~ 0 ~ ^ g ! < ^ g { ^ ^ ^ ^ / ^ _ B ^ } _ } ^ } } } [ } } } [ f } } _ } } _ } } } _ } ^ } ^ } } _ } ^ ^ ^ } ^ _ w _ } ^ ^ ^ < : : : : 0 ' : : k h ' j j h j j j a h a s n n o s n s u n u n ; u y C ^ 2 5 { ' a > = * $ $ + ", +" * , ' _ 5 8 2 3 [ { [ 2 5 } ^ ^ ^ ^ ^ ^ < ^ ^ ~ ^ ^ / ^ ^ } } [ } } } } [ } } _ } } _ } _ } ^ ~ 0 ~ ) a , ] > ; u ; ; ; ; ; ; ; ; ; ; ; ; ; > u > a , ' ) : ! ~ ~ 0 ~ ~ ^ < ~ ^ < ^ < ^ g ! : : b h a ' j h a s s n s n s n u n u u u y = ~ 2 5 ^ ) ) ] = * $ $ . ", +" = , ' _ 8 e 3 2 } { 9 2 5 [ ^ ^ ^ } ^ / ^ _ / _ } } } [ [ [ } [ } _ { 0 ) ' , ] > ; = = * * * & % $ $ $ # + @ + . . . D . D . D . - . . . . . @ + # # $ $ $ % & * * * = = ; > s , : ! < ! < ! g ) : ! g ) : h h a ] a s ] u n u n ; u y y a 3 c _ ' ) , ; * $ $ . ", +" # > a ) [ 8 2 2 2 _ / 4 2 5 } _ w _ } } } [ } [ _ } _ ^ { ) ' , > ; ; = = * * & $ $ + . . D E F F G G H G H G I H I H H H J H H J H J K J K K K H K H K K K K J H H I F L - . . # $ % * * * = = ; ; ] , : ! : b : : b h a a a ] u n u ; y y , 9 5 } ) ' > ; * * # . ", +" - = ' , ' [ 3 2 3 2 _ { 5 2 9 _ < { } [ } ^ ! ! ! ' , , > ; = = * * * % $ $ # + # + . . . . . L . L L L L L L L L E F F F F F F F F F F F I F I I F F F I G I I I I G I G H J K K K K H J H F F L . + $ % * * = = ; ] ] ) b ~ : h ' a a n ; y u 4 8 [ ! ' , ; * $ $ # ", +" & ) { , ~ 4 6 3 2 6 } { c 2 9 ^ ' ~ ^ ! ' , ] ; ; ; = = = = * = * * * * % $ % $ $ # # # . . . . L . E . F . F E L L F F F F F F F F I F I F G F I F I I F I F G I I F I F I F H I H I H I H H I H H H H K H I E - . $ $ * = = ; > ] : g j u y ; } 3 } ! ' , > * * $ $ ", +" ; 4 ~ > { 4 8 2 3 e _ _ 8 2 } ' ~ ! ] a , a , > > > ; ; = = ; = = * * * * * $ % $ $ $ # # + . . . . L . F E . L . F F F L F F F F F F F F I F I F G F G I F I F G I I F I F I I H I H H H I G H I I H I I I I G I F I F F E . . # % = ] ^ h y ; _ d [ ~ ) , ; = % * % + ", +" . > 4 ) , ~ 5 6 8 3 5 _ ^ 3 2 } ' b ' ] , ' , ) a > u > ; ; t = = = C = * * * $ * $ $ $ $ + . . + # $ # . . L . + . . . . + . + . . F - . L F F D . F F . L L F F F . L L F I I G I H G I H I H I G H I I G I I I I I F G F F I F L L D % ) < u ; ^ 3 7 { b a > = % $ * + ", +" + , 1 , a { 8 3 5 2 4 ( } 6 8 _ ^ ' , ' ' ) , a , , > ; > ; ; ; = t = * * * * * $ * $ $ # # . L + $ $ % $ . F . # + . . + # + # # + . . # + F F . # . F . $ . F F F # # # L F I I H I H H I H G H I H I G I I G F G F I F I F F F F F F L * ! h ; < 2 4 ^ ) , > = * % * # ", +" # ) [ , a / 4 3 3 2 [ { [ c 8 _ ~ b , ' , ) , ' , a > > ; ; ; = ; = C t = * * * % $ $ $ # # . F F . F # * # F H . . F E . F F F F + . F # $ . F L + . H D $ + I F F . . $ # F G I I H G H H H I H I G I I H I I I I F G I F G F F F F F G + ] h u : 2 4 { b a , = * $ * $ ", +" $ ! / , , / 3 5 3 2 [ { } e 5 ^ ~ ) a ) ) ' , , a , a > > > ; ; t = = = C * * * * * $ $ # + . F G F F F # $ . J L . F . . H F H I . F F + # . L . L F H F $ # H I . F F # $ . G I G I H I H I H I I I H G I G I G I I F I I F F F F F F F D = h u ' 2 5 ^ ) , , ; * $ * $ ", +" % _ / , ' _ 3 3 5 2 _ : 4 2 9 ^ : ) , ' ) , ' , ) , , a > ; ; ; ; = = = = = * * * $ $ $ $ $ . F F + L H F $ # F L F . # + . F F H E . H . . F # # . I J L $ . H F + # G . % # F G I I H I G H I H G I I H I H F H F H F G F I F F F F F F F * ' s ' 2 5 { ) a > ; * $ % $ . ", +" * _ / > ' / 6 3 2 d _ ~ [ 2 5 < ! ' ) ' , ' , ) a ' , > > ; > ; = ; = = * * * * * * $ $ $ + + F F # # G H . . L . F . # $ $ # . F L L F . F I . $ $ L H E $ + H L # $ . F # $ . F G I I H I H G H H H G I H I I I I F H F G F H F F F F F F * j s a 2 5 _ ) ' > ; * $ * $ . ", +" = [ { > ' [ 3 8 6 2 _ ~ 4 2 7 ^ : ) , ' , ) ' , ) , a , u > ; ; t = = t C = * * * * * $ $ $ . F F + # L G H F F . F F . # # + . F . F F . . H F + $ # H F # . F . . . F F . $ $ F F G I G I I I I I I H I G I G I I F I I F H F F F F F F F % ) n ] 5 6 _ ) , a ; * $ $ * . ", +" = 1 ) > ~ [ 3 3 c 3 _ { 4 2 [ g ! ' , ' , ' , ' , a , , > ; > ; = ; C = * * = * * * $ * $ $ + . G . . + . I F F . F I G F . F L . F F F . . F H F . + F F . . F . F F L F F + # . F F G F H F G F H F G I I I I F G F G F I F I F F F F G F $ ' a ] [ 8 [ ) ' , > * % $ * . ", +" - > [ ' > ~ | 8 6 8 3 ^ ~ 5 2 [ < ) ) a , ) ) a ) , a , , > ; > ; = = = = * = * * * * % % $ $ $ + - . + # # . - . . . - D D - L . - . D . - . . - F L - L L D D . - . D - L L . - D L F F F F F F F F F F M F I F F I F M F I F F F F F F M F % ' ] u [ 3 _ ! a , ; = $ * $ . ", +" . , 1 , > ~ | 3 8 6 d ( ~ 6 2 [ 0 ~ b , ' , , ) , ' , ] > ] ; ; ; ; = = * = * * * * * * & % $ $ $ # # # $ $ # # + # + # # + + # + . + + . + + + + . - L . . D . L . - . . . D L . F D L - F L L E L F L F L F L F F F F F F F I F F M F F I I $ ' a u [ 6 [ ! ' > > = % $ * . ", +" # ! [ a > { 9 3 8 6 5 / ^ 5 2 } < ) ' , ' , a , a , , , > > ; > = ; = = = * = * * * * * * % $ $ $ $ $ $ $ $ $ $ $ # # # # $ # # # # # # # # # + @ + . . . . . . . . . L . . . . L . . . L . . L . L . D . E . L D D L D F F F F F F F F F F G $ ' a ; _ 8 7 ! , a > = $ $ * + ", +" $ { } > ] { 8 3 5 2 4 ^ / e 2 } ~ b ) , a ) , a , , a , n ; > ; = = * t N * N % * $ % $ $ $ $ $ # $ # $ # # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ # $ # $ $ # $ # # # # + # # + # . # # + # + # . + # . + . + . . . . . . . . L . F L F F F F F F I $ , m ; ^ 2 [ { a , ; = * $ $ $ ", +" % [ _ > > / 5 8 3 8 4 ^ _ 8 2 _ < ) a , , a , > ; > > ; ; = = * * * * N & * % * $ * $ * % * * $ * * * * * O * = * P = = = = t = = = ; t = = ; = t = = = = = * = t * = * * = * * * * * * * * % * % * % * $ * $ $ $ $ # # + . . - L L E F F F I # a a u ~ 2 [ ^ , , > = $ $ $ $ ", +" * [ / ; , } 3 6 8 6 1 { [ 8 c } ^ ' , , ; > > ; ; = > > ; ; = = t = = = ; t > > , ' ) ) { { { ( i ( ( [ [ [ [ [ 4 [ 4 / 4 i 7 4 4 4 4 | 4 4 4 4 [ [ [ / / / ( { ^ { ~ { { ) ) ' ) , , > > > > ; > ; > ; > ; > ; = t = = * * % $ # . L L F F I # , a y ! 2 [ ~ , ] ; = * # $ $ ", +" * 5 ( ] ' [ 4 3 8 e } { } 8 5 } ^ ! a , , 1 } [ / / 1 } [ / / / } } 1 / 4 9 [ 1 4 [ [ [ [ 4 4 4 4 4 4 4 [ 4 4 4 4 4 4 6 4 4 5 4 5 6 5 5 5 4 | 4 7 [ [ [ [ _ [ / [ } _ [ [ / [ / [ 4 / [ / / / [ { / { / { { { { / ^ { ~ { ! ! , = $ . F L L F # > r = : 2 5 ^ , a > = % $ * $ . ", +" = 8 { > ' [ 3 8 6 3 [ ~ [ 2 5 ^ ^ ' , , ' [ 4 [ [ 4 [ 4 [ [ 4 [ [ [ [ [ [ [ } [ _ / _ / _ / _ _ _ [ [ _ _ [ _ [ [ 4 [ 4 [ [ 4 [ 7 4 [ 4 7 [ [ [ [ } [ _ / ( / _ _ _ / _ / _ [ _ / [ [ } [ [ [ } 4 [ 4 4 4 4 9 5 5 | 5 5 5 3 8 4 / , % . F F F + > m y : 2 5 { ' > ; = * # $ $ . ", +" - ; 6 ! > ' [ 8 6 8 2 / { 7 2 5 } ^ ' > , * { [ _ / _ _ ^ _ / _ / _ ^ { / _ ^ { ^ / ( { ^ / ( _ / ( / _ / _ / [ _ } [ [ [ [ } [ [ [ [ [ [ [ [ [ [ } _ _ } _ / ( _ / _ ^ _ _ / _ / _ _ / _ _ } [ [ [ [ [ [ [ [ 5 4 5 5 5 2 8 e 8 6 3 [ ; # F L F # ; a y ) 2 5 ^ , a > = * # $ * ", +" . , 4 ' ; ) 4 8 5 3 3 ^ { [ 2 5 _ < ' ; , * > / _ ^ ! ! ^ { ^ { ^ { ^ { ^ { ^ { ! ^ ! ^ { ^ { ^ { ^ { ^ ^ / _ ^ / ( _ / _ _ / [ _ } [ _ [ [ _ / _ _ / [ _ / ( ^ _ ^ _ _ / _ _ ^ _ _ / _ _ / _ _ } [ } [ [ [ [ [ 5 | 5 5 5 5 5 5 5 8 [ ) * L L F . ; a y ' e 8 { ' , > = * # $ $ . ", +" + ' [ , , ' 4 3 8 5 3 ^ { 9 2 9 ^ ^ a > , * * ) [ { ~ ~ ! ^ ! ~ ! ^ ! ~ ! ^ ! ~ ! ~ ! ! ~ ! < ! ~ ~ ^ ~ ! { ~ ! ^ ~ ^ ^ ^ / ^ ^ / _ ( / _ ^ / _ _ / _ _ / _ ^ _ / _ / _ _ / _ / _ } _ / _ _ [ / [ _ [ [ [ [ [ | 4 4 5 6 5 5 5 5 5 5 ) ' = . E F + ; r = j 3 c _ ) > u = * $ $ $ . ", +" # ! [ a > ~ 6 3 5 5 3 / ( 9 2 9 _ / , ; , * $ = { ^ ! ! ' ) ' ! ' ) : ! ' ) : ! ! ) ! : ! ) ~ ! ~ ! : ! ~ : ! : ! ^ ! ~ { 0 { ^ { ^ ! ^ { ^ ^ { ^ ^ / ^ ( ^ / ( ^ / _ } ^ _ / _ _ / _ _ [ / [ [ _ [ } [ [ [ [ [ [ 4 4 5 6 8 c 5 [ ( ; , * # L F . ; a y a 8 6 _ a , > ; * $ $ $ . ", +" $ _ [ > > ~ 5 6 8 5 3 ^ { 5 2 [ ^ ^ a = , * # % > { ' ' b a ) a ) ' , ) ) ' , ) ' , ) ) ) ) b ) ) b ) ) b ) b ) b ) b ) ) ) ) ) ) ) ) b ! : ) b ! ! ! ! ~ ! ^ ! ^ ^ { ^ { ^ ^ / _ _ / _ / _ [ _ [ [ [ [ [ [ [ 4 4 4 4 5 8 5 5 [ ^ ) ; > = + . F . ; a C > d 8 _ ' , > ; * $ $ $ + ", +" % [ _ ] > ~ 5 3 5 5 3 { ^ 8 2 9 ^ ^ a ; , * $ # * > > > ; , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , > , , , > , , , , , , , , , , , , , , , , , , b , b , ) , ) ) ) ) ) ! ! ^ { ( _ _ [ [ [ [ 4 9 5 5 5 5 4 _ ) a ; ; * $ E F . ; a = z 4 5 _ ) ] > ; * % $ $ # ", +" * [ / > ] { 4 d 6 8 8 ( { 5 2 [ } ^ , = ; * # F F Q & Q O & Q O & & O O & O O & O & O & O & O O & O & O & O & Q & Q & Q O & O & O O & O & O & O & O O O & O O O Q & Q & O & Q O & Q & O O & O O & O & O & O & Q O & Q & O O & O , , = ; = $ . F . = a y ; 8 3 _ ' > > ; = $ $ $ + ", +" * 4 _ > a { 8 8 6 5 8 / ^ 5 2 } ^ ^ a = = * + I R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ] = = t % . F . = r y > 1 c [ ' > u ; = $ $ $ # ", +" = 3 ^ ; , [ 8 3 5 3 5 { _ 8 2 } ^ ^ > * = * . H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ; = = = % . F . = r y ; } 3 _ ) > > ; * * # $ # ", +" ; 3 { ; , } 3 3 8 5 6 / _ 8 2 _ < ~ > * * % E H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ; * = = * . E . = r = ; 1 3 _ ' ] > ; * % # $ # ", +" ; 6 ! ; , [ 8 3 5 3 5 _ ( 8 2 } g ^ > * * * F H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ; * * t N . E + = r y ; ^ 3 [ ) , ; ; t % # # $ ", +" * / ( > a 4 3 8 6 8 5 _ / 2 2 _ g ^ ; * * $ E J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R = * * ; * . . . C a = y / d [ ' , > ; * & + $ $ ", +" + , ~ > a 4 8 6 5 8 4 ( [ 5 2 _ g ^ ; * * $ L J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R ; * * = * . E . = a y = ~ 2 [ ) ] > ; = $ # # $ ", +" = ' , , [ 3 8 5 6 [ / _ 3 2 } : ^ ; * * $ L J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R = * * = * # D . = r C = / 2 [ ) a > ; * % $ $ + ", +" * ) , ' [ 3 5 8 6 [ { [ 8 2 ^ g { ; * * $ F K R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R = * * = * # . . = n y = ~ 2 [ ) , ; ; = * # # . ", +" = ' , ' 4 3 5 8 6 [ { } 6 2 ^ : < ; * * # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * N t * # D . = n y = / d [ ) a > ; = $ $ + . ", +" $ ) , > ' 4 3 5 5 8 [ { [ 8 2 ^ : ~ ; * % $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R = * % = * $ . . * r y = g 2 [ ! , ; > * * $ + . ", +" . > } , ; { 8 3 5 5 3 _ ~ [ 6 2 ^ h ! = * % $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * % = = # E # = a y C { 2 [ ! a > ; = * # # + ", +" $ _ [ > > ~ 6 2 5 4 3 [ { _ 3 2 ^ h : ; * % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R = N $ t S $ . . = n y = ~ 2 [ ! , > > = * # $ $ . ", +" * [ / > ] { 8 5 3 8 5 / ( } 3 2 ^ ' : = * $ $ G J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * $ = = # . . = n C C ) 2 [ ! a > ; = * $ $ $ . ", +" * 6 ^ ; > ^ 8 3 5 5 3 _ { } 3 2 ^ : : = * % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * $ = = # . . * h ; S ! 2 [ ~ , a > = * $ $ $ + ", +" = 8 ^ > ; / 6 8 6 8 5 / { [ 6 d ^ h { = * $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * $ = = # . . = n y C ) 2 [ { a > ; ; * $ $ $ + ", +" = 3 { ; , / e 8 6 4 5 _ ! [ 8 3 ^ : g = $ * # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * & $ = t # . @ = n y * ' 2 7 { , ] > = * % $ $ . ", +" ; 3 ^ ; > ^ 3 8 6 8 4 / { [ 2 6 < b ~ = % * # G J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * * $ = = $ . . = n y S ) 2 4 ^ , > ; ; * $ # # + ", +"- > 5 ! ; , [ 8 3 5 5 3 _ { [ 3 c ^ h ~ = % $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * % $ = = $ . @ = n C = ' 2 4 { a > > ; = $ # # + ", +". > 8 ! > a [ 8 3 5 8 5 / { [ 6 2 ~ h ! = % * + F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * % $ t = $ . . = n y C ) 2 5 ! a , ; ; * % # $ + ", +". , 8 : ; , [ 8 5 4 5 3 { ! [ 2 5 ^ j ~ = $ % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * % $ = = $ . # = n y * : 2 5 { , ] > ; = * # $ # ", +"+ ' | ) ; , 1 3 5 8 4 5 { ~ [ 2 3 ^ h ) = % $ $ G H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = = % . # = a y S ) 2 4 ^ , ] > ; t $ $ $ # ", +"# ) 4 b ; , 4 8 6 4 5 8 { ! [ 2 6 ^ h : = $ * + I H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ t ; % . # = r y N b 2 [ { a > > ; * & # $ # ", +"# ) 4 ' ; , [ 8 3 4 5 8 { ! [ 2 8 ^ h ) = $ $ # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * % $ = = * . # = a C * : 2 [ { b > u ; = % $ $ $ ", +"# ! 5 , ; ) [ 8 3 5 5 5 { ! 9 3 6 ^ h ' = % * + F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = = * . # = a y S ! 2 4 ^ , a > ; = * # $ $ ", +"$ ! 9 , > a 4 3 5 8 4 5 ~ ! 4 2 5 ~ j ! ; $ $ $ I H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = t % . $ = h y S ) 2 4 ! ' > > ; = $ $ $ $ ", +"$ { 7 ' ; ) [ 8 3 4 5 8 { ! 9 3 e : b ' = % * # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = ; * . # = h = S ~ e 4 ^ , ] > ; * * + $ $ ", +"$ ( 9 , > ' [ 3 5 3 5 3 { ^ [ 2 3 ^ j ' = $ * # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = ; % + # = r y S ! 2 4 ! a , ; ; = $ # $ $ ", +"$ ( [ a ; ) 4 3 8 5 5 5 { { 4 2 5 ^ j ' * $ $ # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ t > * . $ = a y S ! 2 7 { , a > ; * * # $ $ ", +"$ _ [ , > ' 4 2 5 8 4 5 { ~ | 3 2 ~ j ) * $ % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = ; * + $ ; h = C ) 2 4 ^ , , > ; * $ $ $ $ ", +"$ _ [ ] ; ) 5 3 5 5 3 4 ^ { [ 3 2 0 a ' * $ % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * $ $ = > * # $ > a y C ! 2 7 { ' > u ; t % # $ $ ", +"$ [ [ > > ' 4 2 5 4 5 8 { ~ | 3 d ^ j ) * $ % $ G J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R * # $ = > * # $ ; h y C ! 2 [ { ] , > ; * % # $ $ ", +"% _ [ ] > ' 5 3 5 8 4 6 ^ { 4 2 5 ^ h ' * $ $ $ G H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ t ; * $ % > ] T C ) 2 [ ! a , > ; * % # $ $ ", +"$ [ [ , ; { 5 8 6 4 8 5 { { 9 3 8 ^ a ) * # % # F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ = > * $ % > o y C ! 3 7 ! , a > ; = % $ $ $ ", +"% [ [ , > ~ | 3 8 5 5 3 ^ { 9 2 5 < b ' * # $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ = > * $ * ; j = = ~ 2 [ { a , > ; = $ # $ $ ", +"% [ [ ] ; { 9 3 5 5 4 8 { ^ 4 3 c ~ b ' * + $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R O + * = > = $ * > j C y ! 2 7 { b > u > * * # $ $ ", +"% [ [ > > ~ 5 5 3 4 5 3 { ~ 4 2 6 < ' j * + % $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ t ; = $ % > l y = < 3 7 ! a , > ; = % $ $ $ ", +"% [ 4 > s ! 4 2 5 5 8 5 ^ ! 4 2 8 ^ j ) & + $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ U > * $ * ; a y = < 3 [ ! a , > ; = $ $ $ $ ", +"& [ [ > > ~ 5 3 5 4 8 6 { ~ | 3 8 ^ h , * . % $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ $ $ ; > * $ * ; ] y = < 3 [ ! a , > ; = $ # $ $ ", +"% [ [ a > ^ 4 2 5 4 8 5 { { [ 2 5 < ' ' % + $ $ F J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ + * t ; = $ % > j y = ~ 2 [ ! , a > ; = % # $ $ ", +"& [ [ , ] ~ 6 8 6 5 5 8 { ~ | 2 8 ! h b * + $ $ F H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ + * = > * % * ; j y = < 2 [ ! a > > ; = * # $ * ", +"% 4 [ > > ~ 6 d 5 5 4 3 ^ ! [ 3 d ^ h ) * . $ $ F H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ + $ > ; = $ * > ] C ; ^ 6 } ! a , ; > * * # $ $ ", +"% 4 [ a > ^ 8 8 6 8 6 8 { ! 4 3 d ^ ' ' & + $ $ F H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ + O t ; = $ * a ] C ; ^ 3 [ ! , ] > ; * * # $ % ", +"% [ [ > ] ! 4 8 5 4 8 6 / ! 9 3 5 < : ) * . $ $ L H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R $ + * ; > * * * ) s = y ( d [ : , > ; > = % $ $ * ", +"& [ [ > > ~ 5 3 4 5 4 8 ^ { [ 2 5 ^ : : * . $ $ L H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # + * > > * * = a ] S ; ^ 2 [ ! a > > ; * * $ $ $ ", +"% [ / > ] { 9 3 5 4 5 5 { ~ | 3 d ^ : ! * . $ $ L I R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # + * = > * * = ' u C ; ^ 2 [ ) , a ; ; = $ $ % * ", +"% [ _ > ] { 4 d 6 4 4 5 { ! [ 2 8 ^ : : * . $ $ . J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R + # * > ; = * = ' s C ; } 6 } ! a > > ; * * # $ $ ", +"$ ( [ , , ~ 5 8 6 8 4 4 ^ ~ [ 2 5 ~ 0 : & . $ $ L F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # + * t ; = * ; ' u = u } 3 [ : , , ; ; * * # $ % ", +"$ / [ a , { 9 3 5 5 4 5 / ! 4 2 5 < : ! * . $ $ . H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * ; > * * ; ' ; C u [ 8 [ ) , a > ; * * $ $ * ", +"$ ! [ , a { 9 3 5 5 4 8 ( ~ [ e 8 ^ < : * . # $ . G R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # + * ; > = * ; ) u C > } 2 _ ' , > ; ; * % $ * $ ", +"# ) [ ' , ^ 4 3 5 8 4 6 / ! [ 3 c ^ < ! * . # $ . H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * t > = * > a u C ] [ 8 _ ) a > ; ; * * * * $ ", +". , [ ) ' ! [ 8 6 5 8 5 _ ! [ 3 8 ^ < ~ * . # $ . G R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * ; > = * ; ' ; C ] 4 e [ ) , > ; = * * * * $ ", +" ; 4 { b ) } 3 8 3 5 3 / ! } 3 e ^ < ! & . # $ . G R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * > > = * a j u V a 5 6 } ) ] > ; = * * * t $ ", +" * 4 [ ' ) } 4 2 6 8 6 _ ~ [ 2 8 ^ < ~ * . # $ . F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * > > = = > ' y C , d 5 _ ) , ] ; = * = = = W ", +" $ ! 5 ! ) / | 5 8 4 3 _ { } 6 2 } ^ < * . # $ . G R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * > > C = a : ; C b 8 e _ ' , > ; = t = ; * . ", +" ; 3 _ ' { [ 4 8 5 8 [ ~ [ 2 5 } B ~ * - + $ + F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R # # * , > = ; ' : u V j 2 5 _ ) a ; ; = = ; > * ", +" % ( 4 { ! } 4 4 8 3 _ { [ 6 d ^ ^ < * X + $ . F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R + # = , a = = ' ! y C b 2 5 / ) > > ; = ; > = @ ", +" ; 3 } ! ^ [ 5 6 8 [ ^ [ 8 2 } } ! * - . $ . F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R . # * ) > = ; ' ~ y C b 2 5 ( ' , > ; ; > a * ", +" . , 2 [ ( [ [ 6 6 [ { [ 2 c _ v ^ & E . # + F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R . $ = ' > = t g : y * a 5 5 ( ) > ; > > , = . ", +" # , 5 4 _ [ 4 5 [ _ [ d 5 } } ^ * L . . . F R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R . $ t b a = ; ~ : y S ] } 3 { a > > ; ' > # ", +" # ) d 5 [ 4 7 [ [ 5 9 [ ^ } 0 & F L # . J R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R . $ > ' , ; > ^ : y S u } 5 ! > ; > ' , % ", +" ; 3 2 2 5 [ 4 9 5 } ^ ^ } ^ * E . . D H R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R R . $ > ' > ; , ~ b y N y ~ 7 ^ ] a ' ! = . ", +" # > [ d 6 9 [ 9 [ ^ < ^ } < * . F L # L J Y K I D . # # $ $ $ $ # $ $ $ $ $ $ % * & * O * = * = = = = = = = = = = U = U = = = = = = = = = = = = = = = = = = = U = = = = = = = = = U = = = = = = = = = = = * * * $ # + . F . * , ) > ; , ~ : ; S N ; : ' ; a , ; # ", +" . ; } _ } } } ^ ~ } } } ^ ; . F . + # F H H F . . # # + + + # + # + + + + + + . + . + # + # # # # # $ # # $ $ $ $ $ $ % $ % $ $ $ $ $ % $ % $ * $ % O $ $ $ % % * % * * & * % & % * & * % * % * % * % * * * * = * $ # . # = ' > ; > a { k Z C ` % y ; ; > C . ", +" * h u a { } ^ } } _ B ^ ' $ L . . $ $ . - L . . L . D . . . . . . @ @ + + . . . . . . . . . + + + + + + + + + # # # # $ # $ $ # $ $ $ $ # $ # $ $ $ $ $ $ $ $ $ % $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ # * * > ; ; ; > ' ) j y C S N C = ; ; $ ", +" * a y = .} } [ } _ } ^ _ ; + . . @ $ $ $ $ $ $ # + + . . E ..D - D . . - . . E . L . . . . . . + . # + # # + # # # $ # $ $ $ $ $ $ $ $ $ $ $ O $ $ * $ * $ * $ * $ * $ * $ $ $ $ $ # # # + # # + # . + + + # + $ * * = * t ; = > ~ h u y y y C S S N +.@ ", +" * ] y y ' ^ } _ } _ } } _ ~ ; $ $ # # # $ $ * $ $ % % % $ $ $ $ # # . . . E . F F F F F F F L L E . F . F . . . X . . . . @.. @.@.@.+ + + + + . # + + + . + . + . + . + . + + . . X . . + + + # # $ $ $ * $ * * % * * * = C = ; ' : j ; y y = y N % #.$.- ", +" & a y ; h _ } } A } _ } ^ } ^ , ; = * % $ # + # # $ $ $ * * * % * $ * $ % $ $ $ # # + . . . E . L L L F F F F F F F F F F F F F F F F F L L L L L . F F . F . . . . . . + . + $ $ $ $ $ $ * * * * * * * * * * * * * * * = = ; a a a u y y y y C S %.$.%.- ", +" N ] ; y : } } v } _ ^ } ^ ^ } } ^ : a > = * * $ $ # # + . . . # # $ $ * $ * $ * $ $ * $ $ # $ # $ $ $ # $ $ # # + # + + + + + + + + + + + + # # # # # $ $ $ $ $ $ * $ * * * * * * * * * * $ * $ $ * $ $ * $ * * * * ; ; ; > n a n u y y = y y = S &.# &.. ", +" % a ; y k } _ } _ } ^ } ^ ^ ^ } ^ } ^ ~ ~ ) , > ; t * * $ # # . . . . . . . . . + # + # # # # $ $ $ $ $ $ $ $ $ $ $ $ $ * $ $ $ $ $ $ $ * $ * $ * $ * * * * * * * * * * $ * $ * $ $ $ $ # $ $ $ * $ * * t = = = ; > > n n ; n ; u y ; y y y y C S % $.%.*. ", +" & > y y : _ } } _ } ^ } } ^ w ^ ^ } ^ ^ } ^ w / ^ g ' , > = * * * $ $ # + . . . . L . L . L . L . F . L . . . . . + + + . + # + # # # # # # # # # $ # # # # # # $ # $ # $ $ $ $ $ * $ $ * * * t * t > ; ; > u > z ; u ; ; y u y ; Z y y y ; y y S %.$.%.- ", +" % u ; u : } } } } ^ _ } ^ } _ ^ < ^ } ^ ^ < } ^ } B ^ w / < ~ ~ a , ; = t * % $ $ $ + # + . . . L . F . F L . L . . . . . . . . . + + + + # + # + + # # $ # $ $ $ $ * $ * * * * t * = t = = > > ] l ] > u u u u u y ; z y u ; y u y ; y y y = C S %.$.$.. ", +" % > =.; : } -.} _ ^ } A } ^ _ ^ ^ / ^ < ^ ^ } ^ < ^ ^ ^ } ^ } ^ ^ ~ { : b h ) , > > = = * * * * $ % $ $ $ $ # $ # # # # # $ # $ $ $ $ $ $ * $ * $ * * * * * * t * = t = > = > > u > ] u , a u u n u u u u u u u z ; y u u u y u y ; y y y ; y y N &.# &.. ", +" % u ; y g } } } ^ } } } _ } ^ / B _ ^ < ^ } ^ ^ ^ < ^ < ^ ^ < ^ < ^ < ^ < ^ < ~ < ' ' ' ' ) a , , , > > ; > ; t ; = > = = t = = = t = = t ; > = > > > > > > > ] , s ] a a a a a n n u n u n ; u u ; u u ; u u ; u z ; z y u y u y ; y y ; y y y S % $.%.- ", +" $ ; u u : } } A } } _ ^ ^ } ^ ^ } ^ } _ ^ } ^ < ^ ^ ~ ! < ^ ^ ^ ~ ^ g ^ ~ 0 ~ 0 g < ^ : < : ~ g < ~ g : ~ ' : k b ' ] ' a b j a , ] j b j b a ) a ' a a a h j j j a n ] n n s n u s n u s u u u u u z ; z u z u u ; u y ; y ; y u y ; y u y ; C S % $.$.@ ", +" $ u ; u : } } } _ } } ^ < ^ < ^ [ [ 7 9 } } _ / _ ^ ^ ^ ~ ^ ^ / ^ < ! < 0 ~ k < ! : < ~ 0 : 0 : ^ : 0 : : k k : k : b h : k : h h h : h h h j j b j a ] j ] a j j ] n ] s ] u n s s s s n u u u ; z ; z ; n ; n u z u n z n z ; u y u y u ; y y N &.$.%.- ", +" $ ; u y g } [ _ } _ ^ ^ < ~ 0 / f 2 2 c 3 5 d 9 [ 1 [ } _ / ^ ^ ^ ^ g ! g ! < ~ 0 : 0 < ! : 0 ~ 0 g ! k : b ' k : h : k : : h b h b h b j b a j j a j a j a o ] a ] o ] s n ] s ] s n u u n u n ; n n n n a a r ' : ~ g ~ ~ a z ; y u y y u y y N % $.%.*. ", +" $ ; u u : } } } ^ } ^ ^ < : ' ^ c | [ 5 5 5 8 2 d c 3 5 5 7 4 [ } ^ ^ : 0 g ^ : 0 ~ : 0 g : : 0 g 0 : k : b : : : b : : b : h : h h b j h a b j ' j a j j ] j a s a n s n ] u n u n u n ; n ] a a ' ' : ^ ^ } [ } 5 c 8 c 8 } ' u y y y ; y y y N &.$.%.- ", +" # y u y ~ } -._ } ^ ^ < : : b ^ 5 ^ { ! ^ { ^ } 4 5 6 d 2 2 c 8 5 4 _ ^ / g : ~ : 0 ~ 0 ~ 0 : < : k : : 0 : : : k : : : h b h b h h j ' j h j b j j j a a o j ] n n ] s n u n u n u n ] a ' ' ^ / v [ | 5 d 8 d 5 8 9 [ _ 5 8 ^ u y u y u y ; C S %.$.%.- ", +" # y ; y < } } _ ^ ^ < { g b a } 5 ^ { ~ ) : ~ ! ! { ^ ^ [ 4 8 e 2 2 8 5 } ^ ~ k < ! 0 ~ 0 g : 0 : : b < ~ 0 : : : : : 0 : : b : b : b : h b ' h h b j a ] j j a o ] n s n n u z u a ' < _ } 9 5 d 6 3 5 4 4 [ / _ / { ~ > ^ 2 } s y ; u y y y y N &.# &. ", +" #.= y u : } [ ^ ^ < ^ < : : b ~ 2 4 [ _ ^ / ! ~ : ) ' ) ' ! ! } [ 5 c 2 d 9 ^ ~ < g ! < ! < ! g ! : < ^ ^ ^ / } _ } [ } _ ^ } ^ } _ ^ } ^ / ^ g ! g : h j h a a ] o ] n n s n ; a ~ } c 8 2 2 5 | [ [ _ / { / { ! ! ~ b ; ! 2 ^ u y ; =.; y ; C N %.$.$.. ", +" @ y y ; : A } } ^ ^ ~ ^ 0 : a ! d c 4 [ _ } ( ^ / ^ { ! ) ' b ) b ! { } 6 d 9 ^ 0 ~ 0 ~ 0 : ^ ^ } } _ 9 9 5 8 5 8 6 d 6 d 8 5 c 6 d 5 d 5 c 5 4 [ } } } ^ : : b a a j ] s n u a ! 9 2 5 5 [ [ _ _ ^ { ^ ! ^ { ! ^ ' ) > a [ 8 g ; y u y u y y y N $.#.$. ", +" @ = y u : } [ A } ^ ^ g ~ 0 ' b } 3 c [ [ _ : ] ] b ^ _ / ( ! ' ) a , ] ! 8 2 } : ! g 0 : : [ 9 5 2 d 5 9 4 4 [ [ [ [ 4 [ [ [ [ 4 [ 4 [ 5 4 5 c 3 d c 3 c 9 [ / 0 h ] n ] s ; j 9 2 5 [ _ ^ { ^ ~ ! ~ ( ^ ^ b ] ) ! ' > { d 7 h ; y u y ; y ; y +.%.$.# ", +" @ y y u : } } _ } ^ ^ ~ 0 : : ) ~ | 2 5 [ _ ! u T ;.Z l b ^ } ^ { ~ , ; > ^ 2 [ ^ : g ' h ^ 5 5 [ [ _ } ( ^ { ^ { { ! { ^ ! ^ { ^ ! ^ { ^ ^ ^ _ _ } [ 4 4 8 e d [ g j ] j n ; : d e [ ^ { { ~ { ^ / 0 h ] T >.; ' ' , b 9 2 ^ n y u y y y u y C N $.#.$.- ", +" W = y u g [ v _ ^ } ~ 0 : : < ! g ( 5 2 3 [ / b ,.'.V >.'.Z l b ~ _ : ; = ~ 6 5 ^ g : j , c d [ ! ~ ! ! ~ ! ! ~ ! ^ ! ~ ! ^ ( ^ { ! ! : ! ! ~ : ! ! ~ { ^ _ [ 5 d 7 b a j u u ^ 3 d [ { < / ^ ~ b ).Z V V ` ;.s b , ' 4 2 ^ a ; u y y ; y u y y & $.$.# ", +" @ y y u ~ } } _ } ^ g < ^ : 0 < 0 : } 5 2 6 4 _ 0 ] !.'.V ~.>.>.{.l { , = , 8 5 } : b j : e 3 _ ^ ! ^ ! ^ ! ^ { ^ ! ^ ^ { ! : ! ^ ^ { 0 { < ! ! ^ : ! ! ~ ) , ~ 6 c < a s ; n [ 2 5 } ~ ! h ] ;.V ` ~.` Q {., b , ~ | 2 } ] u ; =.; u y u y ; C N $.# $. ", +" . y ; u g [ v ^ ^ w ^ < < : < ~ 0 < g _ 9 2 2 5 [ ( { b !.T ~.~.` >.b a = , 4 2 [ 0 h ] ^ 2 5 _ / { ! ^ { ^ ~ ^ { ^ { ^ ! ; * * ; { ^ { ^ { ^ { ^ { ^ ! ^ ! a > 5 3 ^ h z y , d 2 4 _ ~ s V ].].].~.Q ^.l ) ) ) { 5 d ^ j u u y ; u y y ; y y C N $.$.# ", +" . C ; u g [ } ^ } ^ ^ < ^ : : 0 : ~ 0 ~ < _ d 2 3 7 [ / ! : ] !.T '.b ' > > [ 2 [ g b a _ 8 2 _ ! < ! ^ ~ ^ ( ^ { ^ { ~ > % D D $ > / ^ { ~ ! ^ ! ^ ~ { ^ { b ; 5 2 ^ h n ; : c 2 4 ^ ) Z ` ` ;./.^.b ) ! ) ) [ 5 9 0 n u u ; u y u ; y y u y y & %.$.# ", +" W = =.u g [ _ } ^ ^ < ~ < : ! g : k ~ g : ^ ^ 9 2 2 5 [ _ _ { 0 ) : ~ ! > ; _ d [ ^ ' ] ^ 2 5 _ ~ ! ^ { ^ { ^ { ^ { ^ , % - F F L * , / ^ ! ^ ~ { ^ ! ^ { ~ ) > 5 2 ^ h z u : 2 2 [ { b b !.(.b ) ! ! ) ) ( 3 3 f : s u ; u u ; u u z y y y ; C N &.$.$. ", +" . y y u ~ } v _ } < ^ g ! g k : g ! < < g : : ) } d 2 2 5 [ [ _ _ _ ^ { ] ; ~ 6 9 ^ h ] ^ 8 2 _ { ! ~ ^ ! ^ { ^ ! ~ , * D F F F F F * ) { ^ ! ! ^ { ^ { ^ ! a , 9 3 ^ j u u ^ 2 5 } ^ ! { { { { ! ! ) { 4 3 5 < a u ; u u u u y ; y n ; y ; y y +.$ %.$. ", +" @ = u u g [ } ^ ^ < < ^ g : : 0 : < : 0 < ^ : : 0 < } c 2 2 5 9 [ _ _ { a ; ) 4 5 ^ : ] ' 2 2 _ ~ ! 0 { { ~ ^ ! ^ ' = - H F F F F I . = ~ ^ ! ~ ^ ! ~ ^ { 0 , a 6 d ~ j y n } 2 5 _ ^ { { ~ ) ) { ( 4 3 5 ^ h ] ; u u u u ; u u u ; u u u y y y & &.$ $. ", +" . y y u g [ } ^ ~ 0 < ~ ^ g 0 ~ g b g ^ : ^ g 0 : : g B [ 8 2 2 c 4 [ _ ) ; , 3 7 ~ h h b 3 2 _ ^ ! ~ ! ^ ! ^ { { b = % % * % * $ % % ; ) { ^ ! ~ ^ { ^ { ~ , a 6 c 0 n y ] } 2 5 _ { { ! 0 / _ 9 2 5 } : n ; u u u u ; u y z ; z u y u y u y C N $.$.# ", +" . C ; y : } _ ^ ^ w ^ g < ^ g : 0 g ! g ! < ! g ~ 0 < ~ 0 / v 9 d 2 2 e _ ) / 6 } : : h , d 2 [ { : { ^ ! ~ ^ ! ~ ! ' ) ) ) , ) ) ) ) ) { ~ ! ^ ! ! ^ { ^ ) ] ) 5 3 : ] y u ^ 2 5 _ _ } [ [ 5 d 5 ^ : n u u u u u ; z ; z ; ; u u u ; y u y ; C N # $.# ", +" . = y u : } ^ } ^ ^ < : ^ g ! g : 0 g 0 < ^ < ^ < ~ ^ ^ : : 0 / } 7 5 5 3 5 5 [ 0 : : j a 6 2 5 _ ^ ( ^ / ^ { ^ ! : { ! ~ ! ~ ) { ~ { { ~ ( { ^ { ^ { ^ ^ ) > { d 5 ' ] s y ] } 3 5 9 8 d 5 } < h s u u u n ; u u z ; z ; z ; y ; z ; u y ; y C +.$.%.@ ", +" . y y ; g } } ^ ^ < ^ ~ g 0 g ^ g : ~ ^ ~ ^ < ^ ~ 0 ^ < ^ ^ < 0 ~ ^ ^ ^ } 9 } : ! g : a u ^ 2 d 4 4 [ [ _ [ _ ^ / ( ^ { ! ~ ! ! ' ! ! ~ ( ^ ^ / ^ ^ / ( } { : [ 2 7 b n s ; y a } f } ^ g ' j ] ; s u n u u u u u u n ; u ; z u ; u y y y ; y C & $.$.# ", +" . = u Z : } } ^ ^ < ~ 0 < ~ k ~ 0 : 0 g ^ : ^ ~ 0 ^ ~ ^ < ^ ~ ^ < : ~ : : : ! g : k : j ; ] 5 2 e 8 2 c 3 5 5 4 7 4 7 [ ^ { { ~ ! ' ) ^ [ [ [ [ [ [ [ _ } _ _ 2 2 } ' ] s u ; ; n h n n u u ] u u u u u z n ; u u ; u z ; y u ; z u n ; z y ; C % $.%.#. ", +" . y ; u : } } _ } ^ < : 0 g ^ g : : ~ 0 ~ 0 ~ 0 < ~ 0 ~ : ^ : ^ < ^ 0 g ! g : k 0 : g b ; C 4 5 [ [ 9 4 5 c 5 2 2 2 2 8 [ ^ { 0 ) > ' _ 8 6 8 5 5 7 [ [ _ ~ ) 2 8 ^ a ] n u z u n u s u ] u n u u u n ; n u u u ; z ; ; u ; u u ; ; y z ; u y C N $.$.# ", +" . C u y ' _ } ^ ^ < ~ < ~ : : k ~ 0 : < ! g ! g ^ < ^ g ! < ^ ~ 0 ~ g ! g k : ) g 0 : : u S ^ 8 _ _ / [ [ } [ [ 4 e 2 2 5 _ ~ ! , u ) { [ } [ [ _ / _ / _ ! ! d 5 : a ] s n u z u n u n u n u u u n ; z u n u ; z ; u y ; u y ; z y u ; z y ; C +.%.%.$. ", +" . = y u : } _ } ^ ^ g ) g 0 : 0 g : ^ g < ! g ^ < { < ^ < ^ g ! < ^ ^ g ^ ^ : : k ' k : s C ' 7 [ _ _ } _ [ _ } [ 5 2 2 5 [ { : , > a _ [ _ ^ _ } _ _ _ ^ ! / 2 7 ' s n ] n u n ; n ] u ] u u u n ; n u ; u u ; u ; u u y z ; y ; u ; y u y y C & $.%.# ", +" . C u y : [ } _ w ^ : g 0 : : 0 ~ < : { g 0 < ^ ^ < ^ ^ / ^ ^ } ^ } ^ } _ / ^ ^ ~ b : : a C > f 4 _ / _ [ _ } [ [ 5 2 2 d [ ^ ) > ; ) / [ _ / _ _ / [ _ { ! 7 2 } h ] n u ] ] n ] a ] n ] u a n s n u u n ; z ; u y ; y ; u y u y u z y u y ; C % &.&.# ", +" . = u y ~ v [ } ^ ^ g ! g k : < : 0 ~ 0 ^ / _ } } } [ 1 | 9 8 4 c 8 5 5 d 9 8 7 } ^ : : j = y } | [ ( } [ [ [ } [ 8 e 8 e [ ~ ) ; > ' [ [ } [ [ } [ [ _ ! ) 2 2 ^ a n s ] a ' ^ ^ / ^ / ^ ~ ~ : : ' ' h a n ; z ; y u y u u y u ; y u u ; y y C N $.% @ ", +" . C u u : } } ^ } ^ : g 0 : b : 0 ~ ^ } [ [ 9 8 e 3 d 6 5 6 5 5 5 5 4 5 7 4 | 5 5 } ^ : h u ; } 6 [ { ^ / _ ^ / _ _ [ [ [ ^ { b , ; ! _ } [ _ } [ [ [ [ { ^ 2 9 ! a s n n ! f 5 d e 3 d 3 e 5 c 7 f [ } _ < : ' a z ; ; y z y u u u z ; z y y C % &.&.#. ", +" . = u y : } [ / ^ g ^ : 0 : 0 : ~ ^ 5 e 8 c 6 5 4 [ [ _ ^ { ^ { { ( ! ! { ) b ! 9 6 } : ' ] ; 9 3 [ ^ ! { ! ^ ! ! ~ ^ { ^ { ~ ! ' ' ) ' ( { ~ ( { ^ { ) b [ 2 } ' ] u ; h 9 5 [ [ [ [ 4 4 4 5 5 8 5 6 d 3 5 5 9 } ~ _.r n ; ; y z ; ; z y y y C % &.% @ ", +" - = =.; : } } ^ ^ ~ ^ g : k g ! 0 5 8 [ [ / ^ { ^ { ^ ! { ! ) ) ) ) b ) ) , > ; { d } ! h ' u 4 2 5 ^ { ! ~ ! ^ ~ ! ! ^ ^ / ^ ( ^ { ) ~ ! : ! ! < ! : > , 8 2 _ j n u ; ~ 2 4 _ { / { ~ { ^ / ^ _ _ _ [ [ 4 5 5 6 2 5 } ~ r u y ; u ; y ; y y C % &.% #. ", +" - y ; =.~ } _ } ^ < ^ g 0 : k ' ^ 2 [ ( ~ ! ~ ! ~ { { ^ { ^ { ! ~ ! ) ' ! ' > = ' 6 } ~ : h ; / 2 2 [ ~ ! ^ { ^ { 0 ' ) ) ! ^ ! ^ ! ^ ! ^ ! ^ ! ^ { : > ] 3 d : a ] u ; < 2 4 _ { ^ ~ ! ^ ) ! 0 ! ! ' ! ! { ^ ( / [ 4 6 d / n u y z y u y ; y S % $.% $. ", +" . C u ; g } } ^ / < ~ 0 : : : ] ^ 2 [ ^ { ^ { < ! b ] u > x b ! ^ { ! ~ ! ) ] = ) 8 } ! : b n b [ 2 [ ^ ! ! < { ^ { ) = * * * * * = ' ! ~ { ^ ~ ( ^ , ] { d [ h ] ] u u / 2 5 [ { ^ ! ^ ! ^ ! ^ { 0 0 ! : ) ) ' ) ) a ( 3 5 h u y ; z y u y y S % $.&.# ", +" . = z y ' } _ } ^ < 0 ~ g : b ] : 2 6 [ / ^ { ^ ! ; Q ~.Q >.P Z , 0 ~ ! ! ' > ; ) 8 [ : : : b ; } 2 5 ( ~ ! ! ^ { ^ a * . E - L - % , { ! < ! ^ { ~ , , [ d / j n u u ; / 2 5 _ ^ ^ ! { ~ ) ~ ~ ) { ~ { { 0 ~ ! ! a ; , 6 d ' u y y u ; y ; y C % $.% @ ", +" - C u ; : _ } _ < ^ < < : : h ] ' 2 2 4 _ { ^ { : T V Q :.Q :.Q ;.U b ~ { ' > ; ) 4 [ < ) g h u ! d 2 [ 0 ! ~ ! ^ ! ) > % D I F # ; ! ~ { ! ^ { ^ b > ~ 3 9 : a n s u u / 2 5 / ^ ! ~ <.> <.t <.<.t <.> / { { ! ^ , ; { 6 7 h u u y y z ; =.; C +.# &.@ ", +" . = u y : } _ < ^ / B ~ : : : j b 9 2 3 _ / { ^ ) ] !.U b (.!.T Q ~.T (.^ ! > ; ' 4 4 ^ : : : ] ] } 2 5 _ ~ ! ^ ~ ! : ) > % . $ > ) { { ! ~ ! ^ ! a , [ d } h ] u u ; n / 2 5 ^ ~ ! <.t <.t [.t <.}.[.<.t / { ~ ! , > 1 2 ^ ] u u y u y u y ; C % &.%.#. ", +" - C n y : } } ^ ^ < < ^ ! < 0 : a { d 2 4 _ ^ ! ^ ! ! ^ { ~ ) , {.Q ~.U k ~ > ; ) 8 [ < ) k : ' ; ' 9 2 4 _ ^ { ! ^ ! ' ) ; * ; ) { ~ ! < { ^ ! ' , / 2 9 : j ] u u ; u / 2 4 _ ^ , <.t <.}.<.t <.t <.}.<.~ { ! ' ] ) 8 9 : s u =.u ; u y u y C % &.% @ ", +" . = u y : [ } _ ^ ~ < ~ ^ : < g b a [ 3 d 4 _ / ^ ^ { ^ { 0 ! ) ] Q Q {.) ! > ; ) 4 9 ^ : g b : u ] ^ 8 e 4 } _ ^ / ^ ! ~ ! ) { { / ^ { ^ ^ { : ) ! 5 5 B h a n n u ; u } 2 4 _ { ~ t <.a ) <.t <.~ > <., { ~ ! , a 4 2 } ] u y u z y u z y ; C % &.% #. ", +" - C n y : _ } } ^ < : ^ ^ ^ : 0 ~ h ~ 5 2 5 5 [ _ _ ^ ^ ^ { ~ ! a !.T b ) : > ; ) 3 } ^ ~ k ' : h s a [ 8 2 5 5 [ [ [ _ _ / [ [ _ _ [ } _ [ _ _ } 5 5 } h a j s n u u ; / 2 5 ^ { ~ / ~ ~ ) > <._.~ ! ' ! ~ ) ) ' _ 6 5 : u ; u u ; z ; u ; y S % &.+.@ ", +" - = u y : } [ } ^ ^ < ^ < : 0 g ^ : ! < 4 d 8 c 6 9 [ [ [ _ ^ { { ) ! ) ~ ) > ; { 5 } ^ : : : : b ' j ' ^ [ 8 d 8 5 5 8 5 c 8 5 5 8 5 4 5 4 5 8 6 9 ^ : j ] j n ] u u ; / 2 4 [ ^ ^ ~ ( ! { ~ _.! { ~ { ! { ! ^ _ 8 9 g ] u y u z y u z ; u y C % &.& @ ", +" - = u y : } } _ ^ w ^ g ^ g : ^ g ^ < ~ ^ } 5 2 d 6 2 8 4 4 [ } _ / _ / ( ) > > } 3 } ~ k < : : : 0 ' j h ! ^ ^ } } [ f 9 [ 9 [ 9 [ 9 } [ } } ^ / : h ] j o n ] s n ; ; w 2 6 [ / { ^ { ^ { { { ^ / ( } [ [ 1 [ 9 f : ] u u u ; u z ; ; y ; y C % &.N *. ", +" = z y ' } } } ^ ^ < ~ 0 ~ 0 ~ < ^ < ^ g ! B } [ 9 5 2 2 8 d 6 8 4 4 | [ { ' ! 8 4 ^ 0 : ~ 0 : : ' k ' h ' : : : 0 g ! < : : : : : : : b ' h ' j j ] o ] n o s n n u y ' 5 2 4 _ _ { _ / [ } [ [ 4 5 4 8 5 9 } ^ : n ; u u z y ; z u u u u y C % % +.@ ", +" . C ; y ' } [ } ^ / B g 0 g ! < ^ ~ ^ < ^ < ^ ^ B ^ } [ [ [ 5 8 2 2 e 8 e 4 } 5 9 _ ~ : < : : k : : : b : h : k : h : h h h b j j j j ] j ] j j j ] j j n ] j n u s n = u ~ d 2 5 4 9 5 5 5 5 d 8 9 9 [ ^ < : j ] s u y u u ; ; y ; z ; n ; y C % &.% @ ", +" = z ; q _ } } ^ < ^ < ^ ^ < ^ < ^ < ^ ^ < ^ < < ^ { ^ / ^ } _ } _ } [ 1 9 5 } / < ! g 0 : : : 0 : : : : b h h b j h b j h h j b j b j j ] j ] b ] o ] j o j ] n u n ; ; n ~ 7 2 d 5 9 7 } } < < g : h a ] s u u u u u ; z ; z y ; ; z u u y S % &.% *. ", +" - = u y h } } } ^ ~ < 0 / ^ } } } } } _ ^ } ^ ^ ~ ^ < ~ ^ ^ ~ ^ ! < ~ ^ ^ } ^ < ~ : < : < ! k : : : b : : : k : h j j h b h ] j a b j a j j ] ] j j ] s a j o ] n s n z u ; n h 0 g : k ' j j a s ] s s n ; u ; ; ; u y u ; u u n u n n s u ; N &.%.% *. ", +" = z y ' } [ _ ~ b : : : _ } [ 1 8 8 5 6 4 9 } } } } ^ ^ } ^ ~ ^ ^ < ^ g ! g ~ : 0 : ~ 0 g : : : b : : b : h b h b : h j h h a a j j j j a j j j a n s n n ] o s n u n u u u ; u u u u u u u u u ; u n u a n n n z ; ; z n n n a r h j a n y N % &.+.. ", +" = u y h } } ^ : n ] j : : ^ } 4 2 2 5 2 2 2 2 d 2 c 6 d 5 7 [ } _ ^ _ } ^ { < ^ ~ 0 : ~ 0 ' k : : : b : j h a b : h ' j a j ] n a a ] j a j j h ] n ] s ] n ] u ] n n u n u u ] u ] ] ] a a ' ' ' ' ! / ^ / } } / ^ a a a ' a h ' k : : ] y S +.% % *. ", +" = z ; r [ } ^ h n u n ] h : ^ 4 5 [ _ } [ [ [ [ [ [ 4 5 e 2 2 e d 3 d 6 5 [ _ } ^ } ^ ^ ^ ^ ^ ^ < ^ < 0 ~ : 0 ~ g 0 ' : : b ' h b h a ' : h ' b h a a a ] n h a ' h ' ' ' ' ~ 0 ~ ^ w } } [ 4 5 5 c 9 d 8 e 5 5 9 [ [ ! g : : : k ! g : j ; S % &.% @ ", +" - = z y : } [ < a u ; u n j h ^ [ _ { { ~ ! ~ ! ) : ) ! ! ^ / [ [ [ 5 5 2 2 2 9 [ } [ } _ 1 [ 9 [ 4 [ 9 [ [ 1 [ f 4 } } _ } } } [ } _ / _ } _ _ } / ^ : b h ' g < ^ / [ } 7 9 c 3 d 2 e 2 6 d c 3 9 4 [ [ _ _ / ( ! a { 9 ^ : k g 0 : 0 : n y N &.% +.- ", +" = n y ' } [ ^ h n u u u n a ^ 4 / ^ ^ { ^ ! ! ~ ! ! : ) ' ) b ' ) ) ! ^ } [ 5 d 4 } [ [ [ 8 2 3 2 2 2 2 2 2 2 2 2 2 3 2 2 3 2 2 3 3 2 2 2 2 8 2 2 9 _ g : ^ < _ [ 4 8 8 2 2 3 5 5 4 4 [ _ / ( ^ { ^ ! ~ ! : ) ! ' ; , 9 } : : : 0 g ! : s y N % ].% *. ", +" = z y h [ f } : s u u n u a ^ 9 [ / { ^ ( ^ ^ ^ _ ^ { ^ ! ! ' ) ) ' ' ) , , a [ 8 } [ [ 9 5 3 2 8 6 5 4 8 4 4 4 [ 4 4 5 3 5 3 4 5 4 5 5 5 6 8 6 e d 9 [ ^ ~ ^ 1 4 3 3 2 6 4 _ / _ / ! ~ ! ! { ! ~ ! ~ 0 ! ! : { b = , 9 } : h : : 0 : h ] y N ].%.].. ", +" = z ; r [ 7 } : u u u ; u n : 9 [ { ^ / ^ ( / ( ~ ! ~ ^ { : { { ! ! ! : ) > = a 4 [ [ [ 4 8 2 2 [ ~ ! ~ ! ! ) ' ! ) ) ' ) ) ! ! ~ ! ! ! ~ ! { { ^ { ^ } 4 } } [ 4 6 2 2 5 _ { ~ ! ~ ^ ~ ! ~ b ) { ^ ! > ] ) { ! ' ; ! [ ^ : h k : 0 : j ] y N $.% % ", +" = z y a } [ } : n ; z y ; u r [ 9 / ^ { ^ { 0 ) ' , b ) ' , b ' ) ; = > ^ ~ = ; 4 4 } [ 8 2 2 2 [ ! ' b ) ' ) ) ' ) , ; ; = ; > ) ' , ' ) ) b ' ) , ; ) 2 _ } [ 5 2 2 2 5 _ ~ , u > , ' ) > * = ; > = & * ' ! ~ , ; { 9 < : : : k : : j u y N %.].% ", +" = n y a _ } _ g ] u ; u y ; n / d ^ / ! < { ~ , a ) , ] , ' , ' , % + = / ! > ; { 8 [ [ 4 2 2 2 d } { ! ^ { ^ ! ^ ) ' ; = * # * ) ! ~ ! ! ~ ! ) ~ ) ; , d [ ^ 7 5 2 2 2 [ ^ ) ; = * $ = ; * # $ % $ $ $ = ) ~ ! a ; ( 9 ^ : : h ' k : j u y N &.%.&.- ", +" = z ; j } } [ ^ ' u z y u y n g 5 [ _ ^ ~ ! ^ ' , , ] > > a ) ) , % . = / ^ a ; , 8 [ _ 7 2 2 2 2 _ ! ~ ! g ! { ^ ! > * # + E % , { ! ^ ! ^ ! ~ ! ) > ) 2 ^ ^ } 5 2 2 5 [ { ! , = # E % > % $ * $ $ * = > ~ ) ' > > 1 1 : b h b h h h ] ; y & &.%.%. ", +" = n y a } _ } } : r u ; u ; z ' } 5 4 _ ^ ( { ^ ) a > a , , a ! a * + = ~ { ) = > 8 } [ [ c 2 2 2 [ ~ ! 0 ! ~ { ~ ) ; @ L # % = ! ~ ! ~ ! ~ ! ^ ! , > ^ d ^ < _ d 2 2 5 ^ { g ) ; % . * > > = = ; > > > a ) ~ ) > ' 4 v : j h h j h a u y C N %.$.$. ", +" = z ; n } [ } ^ ^ : ' n n u ; n ~ c e 5 4 } _ / _ _ / { ~ ^ { ! ' * * = { ~ ) ; > 1 [ ~ A 8 2 2 2 } ! ) ~ ! ^ ! 0 ' = % $ = t , ~ ! ! ! < ! ! ^ ) ] , } 5 : ! } 5 2 2 [ ^ { ) > ; * . * ) / { { ! ! ~ ) ) ) ! ' ) _ 1 g j j b a j n u ; Z y +.%.&.# ", +" = n y j _ 1 [ ^ < ! g h h n n n ] ^ [ d 8 c 5 7 4 [ [ _ _ { ^ ! ' , > ' ! ! ' > ; / [ : ^ } 5 2 2 [ ! : ! ^ ! ~ ) ) > = * = = ; ! ~ ! : ! ^ ! ~ ! > ] 4 } : 0 ^ d 2 2 [ ^ { h = * % * > ) ~ ! : ! ~ ! ! { ^ { ^ } 4 g ] ] s n n u u y ; y y & %.&.# ", +" = z ; o } } } ^ ^ < 0 < ~ : h a j ' ! } } [ 8 d d 8 c 5 4 [ } _ { ! ~ { ~ ! ' > ; ' [ : : ^ 5 2 2 [ ^ ! ! ~ ! ! b > ; ; = = > a , ! ! ~ ! ~ ! ^ ) ; , 2 ^ : : ^ 2 2 2 [ { : ! ) ' ) ! ' { ! ^ { { ^ ^ [ [ 4 5 9 } g ] s s u u u u u ; u ; C % &.$ $. ", +" C ] y ] < [ } ^ ^ { < ! g g : < 0 : h ' : ~ ^ ^ } 9 6 d 2 c 3 4 7 [ [ [ _ ^ / ) ; ) / h a : [ 8 2 5 _ ~ ! ^ ! : > N $ * * $ * * ; ' ! ! 0 ! ^ ! ' > ' e < b h ^ } 2 d [ { ^ { ^ { { { / _ _ } [ 9 5 6 9 7 } ^ ' ] n u u u u y u u y u u u C N $.% $. ", +" = s y j ^ } _ / ^ ^ ^ < < : 0 < ^ ^ < : ^ k : : : : _ v [ f 5 5 5 3 d 5 8 5 4 { ' ~ b n s h ^ 7 2 2 [ ( ^ ! < ) ; % $ % * % $ * > ' ! : ! ~ ^ ! , , { 9 : j ] h ~ 7 2 4 _ / [ [ } [ 4 4 5 5 5 7 [ } ^ < h ] ] u u ; u ; u u ; u u u y y y y +.%.&.# ", +" S ] y j ^ [ } ^ ^ ^ < g ^ 0 ~ ^ ^ ^ ^ < ^ < ^ < : ! g 0 : ) < ^ _ } [ 5 5 5 5 [ } ~ s u u n a < 9 2 6 [ _ } _ ^ , ; = > ; ; ; ; , ' { ^ { ^ ( ! ' ) 9 } ] ] u u a : f 2 5 c 8 8 5 9 4 7 } ^ < : j ] ] s s u ; ; u u ; u y u y u y u ; y y C & $.% $. ", +" * o y ] } } _ / } < ^ : ^ ~ ^ ^ ^ ^ ^ < ^ ^ ^ } ^ < ^ ~ 0 : : : : ! < ~ ^ ^ ^ } ~ j u ; y u u n < 9 2 2 5 3 4 [ [ / / ( / { { / ( [ } [ [ [ [ [ _ 5 } j u y ; Z ; u : } 7 f } ^ < : : b a ] ] s u ; u u u u y u y u =.; y u y u y u u y ; C +.# &.# ", +" C ] Z a ^ } } ^ ^ < ^ < ^ } ^ } _ ^ } ^ / ^ ^ ^ < ^ ^ < ^ < { 0 g : k ) : : : h j ] u y y y u ; n : } [ 9 5 5 d 5 2 5 3 5 2 3 6 d 8 5 8 c 3 c 5 9 } h ; y y y y y ; s j h h j ] n ] s s ] u u u u u u u u u u u u y u y z ; z y n y z u z C N &.% #. ", +" * o ; o ^ } _ < ~ g : _ } } 7 [ 9 [ } [ } } / _ / ^ / ^ ^ ~ ^ : ^ 0 ~ 0 : k : b h j a a s n z u s n j ! g ^ ~ ^ ^ } } } } } } } } } _ } ^ } < ~ 0 j u y u y u u u u u u n u u u u u ; s u u u u ; u ; u u ; u u ; u u ; z ; n n n n n ; y y % &.$ $. ", +" S ] Z a < } } : : b : g _ } [ 9 5 3 5 d 6 5 7 4 7 4 } [ } _ _ / ^ < 0 < ^ ~ 0 : : 0 : h ' h : j j a a j h a j j b j b h b h b h ' j j h j a ] j ] s u u n u n ] s n u u u n u u u n u u n u u z u n n n n a _.r a n n n n n r a r a r n u C +.$ &.# ", +" * n y ] < } ^ : a j h b : ^ / 7 3 c 6 5 5 5 2 6 d 6 d 6 5 8 5 7 [ [ 1 [ _ ^ ~ 0 ~ < ~ ^ : < 0 : : : h ' h b h a j h a j ] a j j ] ] s a n ] n n ] ] j s a ] ] a ] a n n n a a a a ' ' ' a ' ~ ' ~ ^ ^ / _ } } [ / : ' , a a ' : : : h n y C N &.% @ ", +" * s ; p ^ [ } ' ] ] n n j ) < [ | [ _ / _ _ ^ _ _ } [ [ 5 5 e 8 2 2 d 6 9 5 } ^ / ^ ^ } ^ / ^ ^ < ^ ^ < ^ g 0 ~ 0 : 0 : : : : : h h : h h h h : b h b h h j j ' : : : ' ~ ~ ^ _ / [ } [ 7 4 9 e d 6 5 5 4 7 4 } [ ^ _ ~ ' h : g ! : h ] u C % &.%.@ ", +" N s y j ^ 1 _ : ] u s ] n j 0 4 [ ! / ^ ! ~ ! ~ ! ! ~ ! ^ { ^ _ _ [ [ 5 8 e 5 1 } } } } [ [ 9 7 [ [ 9 7 5 7 1 [ 7 [ } } } } } _ } } v [ } _ } _ } g ! : : : < 0 ^ _ } 7 5 5 5 3 e 5 5 5 4 7 4 [ [ } _ ^ { ^ { ! ' > } | 0 : : : : < : a y C % &.% @ ", +" * n ; x ^ 1 [ : ] u s s s ] : 7 [ ^ _ _ ^ { ^ { ^ { 0 ! ' ) ' ) ' ) ' { ^ ^ [ [ 9 } [ 1 [ 5 5 6 2 d 2 2 2 2 d 2 d 2 3 c 8 e d 8 e d 3 c 2 8 e 8 5 7 } 0 ~ 0 < / 7 [ 5 d 2 5 4 7 [ [ _ _ / ^ { ! ! ~ ) ) : ) ' ! ] = ^ 8 ^ : : : : 0 ~ j Z C % $.% #. ", +" N s y ] } } ^ : a u u s n ] : [ 5 { _ / ( ^ ^ / ^ ! ' ! ! ' ) ) ' ) ) b ' > ] { 8 } [ [ 9 5 2 e 5 4 | 4 4 [ [ [ [ [ [ 4 [ [ 4 [ [ [ [ [ [ 4 [ 4 4 7 7 } { < _ } [ 5 3 2 5 _ ^ ( / ^ ! ~ ! ! : ! : ! ) ~ ) ) ! : , ; { d ^ ~ : 0 ~ < : j ; C &.%.].@ ", +" & u ; p ^ [ } ! j u u ; u n b } 5 ^ / ^ { ^ ! , > ; ; ; , > ' ! ! ] > , ' , ; , 9 [ [ [ 5 6 2 2 4 _ ( / ( { ~ { ! ' ) ' ) , ) ' ! ! ~ ! ~ ! ~ { { ! ^ _ 1 ^ / [ 5 2 2 2 [ _ { ^ { ~ ! ^ ! ~ ! ! ^ ) : ! ) ' ! ! a ; [ e ^ ^ g ~ ^ ^ g a y V % &.% @ ", +" * u y n ^ } [ < a u u u u n ] } 9 / [ ^ { ^ , * N * = * * = > : ) = % = ~ { ; ; [ 5 } [ 9 2 2 2 5 [ { ^ { ~ ! : ! ' > = = ; > , ' ) ) ) ' ) ) ' ! ] > ! 8 _ _ } 5 8 2 2 [ ~ , ] > j ) ) > u > ; > ; > ; ; ; > ' > > [ 5 ^ ~ ^ 0 < ^ ~ ] y C % &.% @ ", +" % u ; n ^ } } ^ h u ; u u ; n ~ 5 _ _ ^ { ! ] * $ * = = * = ; > = N # * , _ > ; ! 8 [ [ 9 2 3 2 3 [ / ( ! ^ ~ ! < ) = # $ = ; ' ! ! ~ ! ! { ! ^ ) , ; ! d ^ / } 5 2 2 5 } ) * # % = > ; * & * $ % * % $ % % * , , ] 5 [ 0 g ~ 0 ~ ^ h s y C % $.% @ ", +" N ; y ] < [ } } : a u ; z ; u ~ 7 4 [ ^ { ^ ' = * = ' > > a > N $ $ . . ; { a = , 3 ^ } | 2 2 2 2 [ ^ ~ ^ { 0 ! ~ ) = % % * % > ) ~ ) { ! ~ 0 { ~ , > { 9 : ^ _ d 2 2 5 _ a % L $ * = ; * * * $ % * * # * $ * ) > ) d } : ) : : 0 : o u y S % &.% *. ", +" % u y n ^ } } _ < : n u ; u u ' } 8 5 [ / { ! ) > ' { ~ { ~ , ; * * . # > { ) ; > 5 } ^ [ c 2 2 2 } { 0 { ^ ! ~ ! ' , ; t & # = ' ! ! : ! ! ~ ^ ) > ] [ } h 0 } 5 2 2 4 _ , $ . % $ $ > > > > > > > > ; > > > , ; [ c } : h k : : j s y ; C % $.].@ ", +" % u ; n ^ } _ w } ^ g j n z u n ' [ 2 5 6 [ [ / [ / _ _ ^ ! ' ) , ; = ; , ~ ) ; > [ _ < _ c 2 2 2 [ { ! ^ ~ { 0 { ) > ; * * $ = ! ~ ! ! ~ 0 { ! : > > 9 ^ j ~ -.5 2 2 } { ' % . $ + $ > / ~ ! : ~ ) ' ! ) , ~ ) ! 8 } : j h a j h ] u y y C % &.% *. ", +" % ; =.] < } } _ } ^ < < : h a s ] ' [ 8 2 3 8 3 8 5 [ [ _ / ! ~ ! ) , ~ ! ! ! > ; { f : g 7 6 2 d [ ^ ' { 0 ! ~ ! ' ; * = = = ; , ! ' ! ! ~ ! ^ ' ; , d g b : } e 2 5 [ { ) > = * = > ' { ! : ) ) ) ! ~ { / [ } 9 } j ] ] n ] p ] u y ; y C % &.+.. ", +" % u ; n < [ } } ^ ^ ^ ^ ^ g : ' h b ' ! ^ } 9 5 d 2 2 8 5 | [ _ { ~ { ! ~ ! : , ; ) } j b ^ 8 2 2 [ { ! ! ~ ! ^ ! a = * * ; = t u ! ~ ) ~ ! ! ^ , ; ) 8 : : h _ 8 2 5 _ : ! : { { ~ ! ! ' { ^ { ^ } [ [ 9 9 7 } g ] s s s u u u y u y ; y C % &.% - ", +" % ; y o ^ } } } _ ^ ^ } ^ ^ ^ ^ ~ 0 ' h h ' : ^ } } 6 d 2 2 2 8 c [ [ [ _ ^ { , > ' ^ a a ~ 7 2 2 5 ^ ! : ! ! ~ ! , * % * % * * ; ! ! ' ) ! : { a > : 5 h h a ^ 7 2 5 _ { ! ~ ( ^ { / _ [ } 4 c 8 6 5 [ ^ g b n u ; u u y ; u u y ; =.y y N &.%.&.*. ", +" % u ; n < [ } } } _ ^ } _ ^ < ^ ^ ^ < g ^ : k : b : ! ^ } } 7 8 d 2 2 d 8 5 5 / ! ^ h n n j ! f 2 3 [ { { ! < ! ! ] * * * * * = , ~ ' ! ' ! ! ' > ] [ } ] u ] a ^ 8 2 9 _ } [ } 4 5 c 2 d 6 9 } ^ : b a s u u u u y y y u y u u z y ; y y S % $.% *. ", +" $ ; u s ^ [ } _ _ } ^ A } ^ ^ ^ } ^ ^ ^ < ^ < ^ : : : h : b g ^ ^ } } [ 9 d 9 8 f ~ u u u s a g 9 2 8 [ [ _ _ / ( > = ; { ) ' ' ) { { ~ ! ~ { : , / [ ' ; y u u a : 9 d 3 3 d 8 9 f } / ^ : b ] u u u ; u u u ; u u y u u y y ; u u y y y S % ].% - ", +" $ ; Z u / [ _ ^ } ^ ^ } ^ / ^ ^ / B ^ ^ ^ < ^ ^ ^ < ^ 0 : : : b a ' ' : 0 ~ g ! g n ; y u y u n g 7 2 2 3 2 6 6 7 [ [ 4 [ [ ( [ [ [ [ [ [ [ | 4 5 5 < u y y y ; y ; h ^ } _ ~ k h a a ] u s u u u ; u y y u ; =.; z u ; ; u ; u y u ; y ; S % &.+. ", +" $ ; y ] ^ } 7 } ^ ^ ^ } } A } ^ _ } ^ ^ } ^ / ^ < ^ ^ ~ ^ ^ ^ : < : k ' h j ] a a s ; u u y u u ] : ^ 9 c 8 c d 2 2 2 3 e 3 2 3 2 d 2 d d 2 5 9 [ < s y y T y y y ; u s a ] u u u u u u u u u y u =.y u ; u u u y u u ; y z u ; z ; y u y S ].% % ", +" $ ; Z u ^ 1 [ _ < ~ B ^ ^ 1 7 d 9 7 [ } } _ } _ } ^ ^ ^ ^ ~ ^ ^ : ^ : : b g : : k : q q n p n u s a j b : g ~ < ^ < ^ ^ } ^ ^ } _ B < ^ g g : ' j u ; y y y Z ; s s s n s n u u u ; u u u y u y u z u u y u u z ; u ; z u a a n n n y u y S % &.% ", +" $ ; y ] < [ } ^ : b : g < ^ f 5 2 2 d 2 5 8 9 9 4 [ } _ [ _ _ / 0 ~ 0 : < ! g 0 g g g : : b h : : h b h j a j j a a j a a a a a j a a n n u ] n ] u u s n u n n s s n n u u n ; n u u u u u ; z n > n n n n r a n u n n a ' j ' h j n y y N &.&.% ", +" # ; Z u / } } ^ ' j : b ' g _ 7 2 c 4 7 5 5 d 5 2 2 5 3 5 8 5 7 [ } } [ ^ / < ^ < ! < ^ : ^ g : 0 : : k : : h b ' h h ' h h ] n ] n ] j ] n s n ] ] n n u n a ] s n ] n n n a a a r ' a ' _._.~ ~ ^ } ^ } } [ 9 } ~ ' h ' j ' h : h n u y N &.$ &. ", +" # ; y u ^ [ } ^ ' j j h j b ~ 7 [ ( ^ { ^ ! ^ ! ^ ^ [ [ 5 5 5 2 8 2 c 8 5 7 } / ^ } _ / _ } _ ^ / ^ ^ ^ ^ : ^ : : : : : ^ : h a h a h h a j a h a j j h a h a a ' h ' : ! ~ / _ } } [ 1 1 4 5 c 5 9 5 [ [ } _ / ^ { _ < b ' h : : h s y y N &.%.$ ", +" # T ; u : 7 [ } : j j b j h b } [ ! ( / ! ~ { ~ ! ! ' ! ~ ! ^ { ^ [ [ 5 5 5 3 7 } [ } } } 4 9 4 7 [ 9 4 [ } } [ [ [ } [ } } _ } _ / _ } / ^ } / ^ ^ ' b : : : 0 / _ } [ 8 c d d 3 c 8 5 [ [ _ } _ ( { ^ ) ! ' ) > ; 7 } : ' : : b h n y y N %.&.% ", +" # ; y u g [ f } : a ] ] j j ' } 4 ( _ _ } [ } _ _ ^ / ( ! : ) ' ) ) ) ' ! ! } 7 4 } [ } 5 5 d 2 2 2 2 2 2 2 3 d 2 2 2 d 2 2 2 8 3 d 2 8 e 2 3 2 d [ ^ : 0 ~ ^ } [ 5 d d 5 9 [ [ _ } ( ^ { ^ ) ! ' ) ' ) ' ' ) b ; ; [ [ < b : : : h s ; y N &.% &. ", +" |.; Z s ^ } } _ g a ] ] ] j b } 5 ^ [ / ^ [ [ } [ _ } _ } _ ( { : ) ' ) , ] ; { d [ } [ 9 8 2 2 5 4 7 [ [ [ [ [ [ [ [ [ [ [ [ i [ [ [ [ [ 4 7 5 6 5 7 _ ^ ^ } } 7 3 2 2 [ _ / ^ { { 0 ~ ! ! ~ ! ! : ! ) ) ) ! ' ; > _ 9 : : 0 : g : p y y +.$.%.$ ", +" # y ; u < [ } } ! h ] n s ] j } 5 _ [ { b > ; , a , , a , , ' ! ! a > > ] > ; > 9 9 [ 9 8 c 2 2 [ { ^ ! ! ! ! ! ! ! ! { ! ^ ! ! ! ) ! : ! ! ~ ! ^ ) { } [ ^ [ 7 5 2 2 e [ ^ ! ) ~ 0 ! ) ' ) b ' ' ) ' , a , a , > > 1 9 0 : : : < : u y C & $.&.$ ", +" + = Z u ~ } [ } : h ] s n s a ^ 8 _ [ ~ ; * & * = * * = ; * * a ) > = * * , ; ; } 8 } [ 8 2 2 2 [ ^ ) ' ! ~ ) ! : ! ) ] > > , ' ) ) ' ) ' b a ) ' > ; ! d ^ } 4 5 2 2 3 [ > = = = = > = = = = = = = ; = = = * ; ; ' 5 } : : 0 g ^ h u y = +.# &.# ", +" @ ; ; u g [ } } ^ ' ] s s u n : 5 [ [ { ; & * * = * * ; > = * > ' a = # * ' , ; ' 6 } [ 9 2 2 2 6 } { ^ ! ^ ! ^ { : ; * * * * > ' ! ) : ) ) ) ' ) ; ; ^ 9 ~ ^ } 2 2 2 6 _ * . # # $ * N # $ * $ $ * * $ $ % # = ; { 5 } : : : < < j ; y C % &.%.$. ", +" @.y u u : [ } } ^ < a s u ; u r [ e [ ( > = ; , , ; > ' ) , a , ~ , & $ ; { a = , 8 _ / } e 2 2 2 [ { ! ^ ~ ^ ! ^ ) * + $ $ # = ) : ) ! : ! ' ! ' , > } } : ^ } 6 2 2 5 ^ * # $ $ . * = * * = = * * * # $ * * = ; / 2 ^ : : : : : j u y C % $.% #. ", +" . = y u ~ 7 } [ } ^ : a s u u n ^ 5 6 4 { ) { [ / ) ) { ~ { { { ! = $ * ) { ' ; > 4 } ^ } e 2 2 d _ ^ ~ ! ^ ! ~ { b * + # $ + = ' ) ) ' ) ' ) ! ) > ] [ g h ~ -.d 2 6 [ { > * & + # = { ' , ' , ' > = * t ] > > > 4 1 : j b h : b u ; y C % $.%.$. ", +" . C u u ~ 7 [ } _ B ^ < a n n u ' _ d 3 5 8 4 4 [ [ / _ { ( ^ { : ; = > ~ ! ) ; > / } ^ ^ 5 2 2 2 [ ! { 0 ! ~ ! { a = # % * $ = ) ' ) ) ' ) ) : , ; ) 1 : h : [ d 2 5 } : > = * $ * > / { ~ ' ~ ) ' a , ' ~ { ~ / 1 : ] a j a ] n u ; y C % &.%.@ ", +" - = ; u g [ [ } } v ^ ^ ^ : : a j b } 4 c 8 3 8 8 6 4 i [ _ _ / ! ) , ~ ! ! ' > ; { } g ^ } e 2 3 [ ^ ~ { ! ^ ! h ; = * * * * > a ! ) ' ) ) ' ! a > a 8 : j : _ 2 2 5 ( ! ' > a > , ~ ) ' ) ! ' ) ~ { / [ [ [ 1 7 : ] u ] n u u u u y y C % $.&.@ ", +" - C ; u : [ 7 } _ } ^ } ^ ^ < g : ' b ~ ^ } [ 9 5 d 6 2 5 5 4 [ _ / _ _ ~ ^ { , ; ) B h h ^ 4 2 2 [ _ { 0 ~ { ^ ; * * ; = = = = > ' ) ) ' ) ) : , ; ! d j a h } c 2 4 ^ ~ ! ^ ! / { ! ~ ^ { { _ _ [ [ [ [ } } ^ h s u u n u u ; u ; y y C % $.%.@ ", +" = y ; : 7 [ } ^ } B ^ < } ^ ^ ^ < ~ k ! g ! < ^ } [ 9 5 8 2 5 5 5 9 [ [ [ _ ' , : : ] j : _ 8 2 5 _ ~ { 0 { { ; % * = * = * % ; ) ~ ) ) ' ) ) ] > / v a n j ^ [ 2 5 _ { ^ ! ~ ^ ^ [ [ [ 7 7 4 9 } } < : h a n u ; u ; u u u ; y ; y y C %.$.% @ ", +" C ; y : [ [ } _ ^ } ^ } ^ / ^ w _ ^ ^ < ~ k ~ 0 ~ : ^ ^ } } 9 5 5 d 6 d 5 5 _ ^ ! o u s a ! } 2 d [ ^ { ^ ^ { , = = t * = = * > ' ) ) ' ) ! ' > a } < u u n ] { 7 d 4 } [ } 7 4 5 9 5 5 [ } ^ g h ] u n ; u u ; u u u u u ; 1.u y y y S % $.&.@ ", +" * s ; : [ [ _ } A ^ } ^ ^ w ^ ^ / B } ^ ^ ^ < { g ) : g ! g ^ < ^ / } } 7 9 9 B h ; u y u a < [ 2 5 [ } _ / _ ! , a , > a > a , ~ ! ~ ! ~ ! ' ) / v a ; y ; u u : 1 7 5 9 7 [ } } ^ ^ ~ : j ] ] u ; u ; 1.; u y u y u ; u u y u ; y y S &.# % *. ", +" C u ; h 7 [ } _ ^ } ^ ^ ^ ^ ^ / ^ } ^ / ^ ^ ^ < ^ < g ^ g : : : : b : 0 g : 0 ' u ; y y ; u ] g 7 8 8 6 5 5 4 [ [ [ } / [ / [ / [ [ [ [ [ 4 [ [ } : ; y y y y = u h g ^ ! : h a j a a ] u u s u u ; u y u y u u y u u y z ; ; u u y y C %.$.% *. ", +" * u ; h [ 9 } _ } B } A } _ } ^ } _ / ^ } ^ / ^ ^ < ^ < ^ ^ ^ < : 0 : : : ' h a s u u u u y s ] : ^ } 9 7 5 5 8 e 8 5 e 8 5 3 6 8 3 5 8 5 9 4 _ : u y C y T y y Z u ] s ] s n u u n u u u u u u y u y u y u y u u u u u n u u z ; u y S %.$.% *. ", +" * s y : } [ [ ^ < ^ _ v [ 7 4 9 [ [ } [ ^ _ } ^ / ^ ^ ^ ^ ~ 0 ~ 0 g < g 0 ~ : : ) h h a n o ] ] j : : : ! < ~ ^ < ^ ^ ^ ^ / ^ < ^ ^ / 0 ~ g ! h ] ; y ; =.; y u s u s n s n u n u s n u u z ; u y y y ; u ; u y ; u u n n a n n u ; y C &.# ]. ", +" S u ; : } [ } ^ ' h ^ ^ } 7 9 6 3 d 6 d 5 8 5 4 7 9 [ } _ ^ / < < ! g ! < ^ ^ ! < ! < 0 : h h h : h : b h h j a a h h a h j h h a : j a n ] a n u n n s n s n ] s ] s u u ; u u n ; u n ; s n u n n a j h h : j s u a a a h h a a u y S %.$.% - "}; diff --git a/xgnokii/xpm/Preview_7110.xpm b/xgnokii/xpm/Preview_7110.xpm new file mode 100644 index 0000000..e82ae9b --- /dev/null +++ b/xgnokii/xpm/Preview_7110.xpm @@ -0,0 +1,1285 @@ +/* XPM */ +static char * 7110_xpm[] = { +"142 390 892 2", +" c None", +". c #7B848C", +"+ c #6B6B63", +"@ c #5A5A63", +"# c #4A5252", +"$ c #424A39", +"% c #5A4A42", +"& c #7B6B6B", +"* c #636B73", +"= c #5A5A52", +"- c #4A5A52", +"; c #424A4A", +"> c #393939", +", c #84848C", +"' c #5A4A52", +") c #5A6363", +"! c #6B848C", +"~ c #849C8C", +"{ c #8C9CA5", +"] c #52636B", +"^ c #39424A", +"/ c #393129", +"( c #292929", +"_ c #293139", +": c #636363", +"< c #5A6B6B", +"[ c #637373", +"} c #213931", +"| c #4A635A", +"1 c #5A7B84", +"2 c #5A6373", +"3 c #294242", +"4 c #212921", +"5 c #736B73", +"6 c #395252", +"7 c #736B63", +"8 c #7B846B", +"9 c #314A39", +"0 c #102929", +"a c #5A634A", +"b c #181010", +"c c #294239", +"d c #4A6B6B", +"e c #52737B", +"f c #31424A", +"g c #315252", +"h c #637363", +"i c #5A6352", +"j c #39635A", +"k c #102121", +"l c #6B736B", +"m c #29424A", +"n c #102939", +"o c #081818", +"p c #000000", +"q c #636352", +"r c #635A4A", +"s c #736B6B", +"t c #63634A", +"u c #6B6B52", +"v c #7B6B5A", +"w c #847363", +"x c #8C6B5A", +"y c #9C8C6B", +"z c #BD9C6B", +"A c #846B52", +"B c #A5A59C", +"C c #734A42", +"D c #DECE9C", +"E c #A5B59C", +"F c #636B5A", +"G c #949C9C", +"H c #5A8473", +"I c #52736B", +"J c #5A6B5A", +"K c #52846B", +"L c #6B4A42", +"M c #849473", +"N c #5A947B", +"O c #4A7B73", +"P c #316B63", +"Q c #B5BDAD", +"R c #52847B", +"S c #CED6D6", +"T c #315A52", +"U c #DEDEDE", +"V c #295242", +"W c #316363", +"X c #295252", +"Y c #294A42", +"Z c #6B9C8C", +"` c #214239", +" . c #E7E7E7", +".. c #29635A", +"+. c #215A4A", +"@. c #9C2931", +"#. c #214242", +"$. c #214A4A", +"%. c #214A42", +"&. c #215242", +"*. c #213942", +"=. c #A5B5BD", +"-. c #BDC6CE", +";. c #F7F7F7", +">. c #FFFFFF", +",. c #F7F7FF", +"'. c #21424A", +"). c #213A31", +"!. c #293439", +"~. c #2A353A", +"{. c #2A4743", +"]. c #3A474B", +"^. c #3A474A", +"/. c #4A5652", +"(. c #4A5E52", +"_. c #52676A", +":. c #5A6772", +"<. c #627672", +"[. c #6A878A", +"}. c #6A868A", +"|. c #82868A", +"1. c #8A9DA3", +"2. c #8B9CA3", +"3. c #939C9B", +"4. c #E5E6E5", +"5. c #E4E6E4", +"6. c #E0E5E0", +"7. c #DEE5DF", +"8. c #DBE4DC", +"9. c #DAE3DB", +"0. c #D0DBD1", +"a. c #D8E4D8", +"b. c #CEDBD0", +"c. c #D7E2D8", +"d. c #D2DCD3", +"e. c #C5D5CD", +"f. c #C4D5CC", +"g. c #B5C6C5", +"h. c #B6C6C6", +"i. c #9EB6B5", +"j. c #9FB6B6", +"k. c #8F9F97", +"l. c #879F9F", +"m. c #788889", +"n. c #698889", +"o. c #627772", +"p. c #52666A", +"q. c #52646A", +"r. c #43504B", +"s. c #44554C", +"t. c #537069", +"u. c #5A7370", +"v. c #618270", +"w. c #749184", +"x. c #83A399", +"y. c #98B8AD", +"z. c #97B8AC", +"A. c #96B8AB", +"B. c #AAC6BA", +"C. c #B7D2BF", +"D. c #B6D3BE", +"E. c #C1D9C3", +"F. c #C2D9C4", +"G. c #CAE0CC", +"H. c #CDE1CE", +"I. c #D0E1D2", +"J. c #D4E2D6", +"K. c #D6E2D7", +"L. c #D4E2D4", +"M. c #CFE1D0", +"N. c #DAEEDC", +"O. c #C4D9C6", +"P. c #CCE0CE", +"Q. c #CCE0CD", +"R. c #CAE0CD", +"S. c #C8E0CB", +"T. c #C0D9C3", +"U. c #C0D9C2", +"V. c #B4D3BC", +"W. c #C3D9C5", +"X. c #BBD3C3", +"Y. c #BDD3C5", +"Z. c #CDDBCE", +"`. c #BFD4C7", +" + c #AFC6C0", +".+ c #B7D3BF", +"++ c #A4C6B3", +"@+ c #A7D1AF", +"#+ c #97C7A5", +"$+ c #93C7A0", +"%+ c #9ED1A6", +"&+ c #92C79F", +"*+ c #9CD0A4", +"=+ c #94C7A2", +"-+ c #96C7A4", +";+ c #A3D1AB", +">+ c #A6D1AE", +",+ c #9EC7AD", +"'+ c #ABD1B3", +")+ c #B8D8BA", +"!+ c #ADD2B5", +"~+ c #AED2B6", +"{+ c #C1DFC3", +"]+ c #BBD8BD", +"^+ c #B9D8BB", +"/+ c #BFDEC1", +"(+ c #BDDEBF", +"_+ c #BDDDBF", +":+ c #B6D7B9", +"<+ c #BED8BF", +"[+ c #B6D1BE", +"}+ c #BAD1C2", +"|+ c #AEC6BE", +"1+ c #AFC6BE", +"2+ c #9AB5B1", +"3+ c #9CB6B3", +"4+ c #8E9F96", +"5+ c #788789", +"6+ c #617671", +"7+ c #5A676F", +"8+ c #5A6062", +"9+ c #395852", +"0+ c #39484A", +"a+ c #39454A", +"b+ c #39434A", +"c+ c #292A29", +"d+ c #112C2A", +"e+ c #1A1512", +"f+ c #2B2F2B", +"g+ c #13302B", +"h+ c #3A484B", +"i+ c #4A6252", +"j+ c #527169", +"k+ c #739382", +"l+ c #7BAA8F", +"m+ c #86BD97", +"n+ c #8DC79A", +"o+ c #9DD4A1", +"p+ c #A0D8A4", +"q+ c #A2D8A6", +"r+ c #A3D8A7", +"s+ c #A3D8A6", +"t+ c #9FD8A3", +"u+ c #97D39C", +"v+ c #97D29B", +"w+ c #8CCF94", +"x+ c #8DCE95", +"y+ c #8ECF96", +"z+ c #89C795", +"A+ c #8FC79B", +"B+ c #92C7A0", +"C+ c #84BC96", +"D+ c #80BE90", +"E+ c #7CBF8A", +"F+ c #71B679", +"G+ c #6CB87B", +"H+ c #6EB876", +"I+ c #65B070", +"J+ c #64B16F", +"K+ c #63B26F", +"L+ c #5EB26F", +"M+ c #5EB26E", +"N+ c #5CAB67", +"O+ c #5DA868", +"P+ c #5DA369", +"Q+ c #5E9D6A", +"R+ c #5A906A", +"S+ c #559770", +"T+ c #5A926A", +"U+ c #5A9B69", +"V+ c #5AA667", +"W+ c #57B164", +"X+ c #5AB665", +"Y+ c #5BB962", +"Z+ c #5AB962", +"`+ c #5AB862", +" @ c #5AB662", +".@ c #5AB763", +"+@ c #5BB762", +"@@ c #5AB062", +"#@ c #5AAC66", +"$@ c #5CAC67", +"%@ c #5CAA67", +"&@ c #5AAC6E", +"*@ c #60AF71", +"=@ c #60AF72", +"-@ c #66AF71", +";@ c #66B071", +">@ c #6CB97A", +",@ c #6EB976", +"'@ c #6DB975", +")@ c #6DBA75", +"!@ c #73C281", +"~@ c #74C281", +"{@ c #76C086", +"]@ c #81BC92", +"^@ c #8CC698", +"/@ c #92CE9A", +"(@ c #92CD9A", +"_@ c #94CE9C", +":@ c #98CEA0", +"<@ c #AFD9B2", +"[@ c #AFD6B2", +"}@ c #B4D5B7", +"|@ c #A8D0B0", +"1@ c #B1D5B3", +"2@ c #A2C6B0", +"3@ c #96B7AB", +"4@ c #9EB5B5", +"5@ c #A3B5BB", +"6@ c #294342", +"7@ c #223C32", +"8@ c #243224", +"9@ c #273A27", +"0@ c #29402A", +"a@ c #314633", +"b@ c #5A6F62", +"c@ c #7FA695", +"d@ c #9FC6AD", +"e@ c #A5D5A8", +"f@ c #94D298", +"g@ c #83D088", +"h@ c #78CE7E", +"i@ c #6ECB76", +"j@ c #6AC974", +"k@ c #6CC976", +"l@ c #68C573", +"m@ c #67C572", +"n@ c #67C26C", +"o@ c #63C16B", +"p@ c #60C268", +"q@ c #5FC067", +"r@ c #5CC067", +"s@ c #5BC167", +"t@ c #5ABD64", +"u@ c #5ABE64", +"v@ c #58BB63", +"w@ c #5ACA62", +"x@ c #56BF5E", +"y@ c #59C961", +"z@ c #59C761", +"A@ c #5AB563", +"B@ c #58BA62", +"C@ c #5ABF62", +"D@ c #58C163", +"E@ c #5ABF64", +"F@ c #5ABD66", +"G@ c #5EB968", +"H@ c #66BC72", +"I@ c #66BB72", +"J@ c #6BC377", +"K@ c #78C783", +"L@ c #92CF97", +"M@ c #ABD9AE", +"N@ c #BFDBC1", +"O@ c #DCEEE4", +"P@ c #C4D2CC", +"Q@ c #5A6C6A", +"R@ c #395352", +"S@ c #3A403B", +"T@ c #183B2F", +"U@ c #2C4A2E", +"V@ c #2C4A29", +"W@ c #3D6B40", +"X@ c #518A59", +"Y@ c #72B282", +"Z@ c #7AC089", +"`@ c #66BF6E", +" # c #5FC467", +".# c #5CC564", +"+# c #5AC763", +"@# c #5AC862", +"## c #5AC662", +"$# c #5AC762", +"%# c #5AC562", +"&# c #59C661", +"*# c #59C561", +"=# c #58C461", +"-# c #58C561", +";# c #59C861", +"># c #58C560", +",# c #57C460", +"'# c #58C760", +")# c #59C562", +"!# c #57BE62", +"~# c #5BB562", +"{# c #70C17C", +"]# c #88C694", +"^# c #B8DBBA", +"/# c #CEE0D0", +"(# c #617771", +"_# c #2A4542", +":# c #4A645A", +"<# c #3A5852", +"[# c #30493F", +"}# c #326640", +"|# c #407A4C", +"1# c #479152", +"2# c #4DA357", +"3# c #50B05B", +"4# c #54B35E", +"5# c #55B75E", +"6# c #55BD5E", +"7# c #57C760", +"8# c #57C35F", +"9# c #55BA5E", +"0# c #5AAC62", +"a# c #68A275", +"b# c #90B8A4", +"c# c #43554B", +"d# c #424E4A", +"e# c #52636A", +"f# c #4A675A", +"g# c #3D554D", +"h# c #4A7452", +"i# c #4F9457", +"j# c #58B163", +"k# c #55B85E", +"l# c #56C25F", +"m# c #57C45F", +"n# c #56C35E", +"o# c #4DAC54", +"p# c #41834D", +"q# c #3F624F", +"r# c #34543C", +"s# c #5A6D6A", +"t# c #4B6353", +"u# c #417156", +"v# c #5EA369", +"w# c #60C168", +"x# c #5BC764", +"y# c #57C560", +"z# c #4FAD55", +"A# c #39713D", +"B# c #2F564D", +"C# c #52656A", +"D# c #4C6854", +"E# c #5A896C", +"F# c #6EC37B", +"G# c #61CA69", +"H# c #54BE5E", +"I# c #398648", +"J# c #3E5440", +"K# c #899EA1", +"L# c #4A665A", +"M# c #4C6D54", +"N# c #6BA378", +"O# c #76CF7D", +"P# c #5DC965", +"Q# c #53C15F", +"R# c #43974E", +"S# c #3E624D", +"T# c #879D9F", +"U# c #537569", +"V# c #80BF90", +"W# c #73CE7A", +"X# c #5CC764", +"Y# c #59C862", +"Z# c #57C562", +"`# c #4BAC5B", +" $ c #447A51", +".$ c #8AA092", +"+$ c #F1F4F1", +"@$ c #92CF9A", +"#$ c #6ECE76", +"$$ c #59C962", +"%$ c #56C262", +"&$ c #4D9F5A", +"*$ c #81A689", +"=$ c #F0FAF2", +"-$ c #60836E", +";$ c #98D39C", +">$ c #6FCE75", +",$ c #52B65F", +"'$ c #74AD85", +")$ c #E1F1E2", +"!$ c #96D69B", +"~$ c #68CB70", +"{$ c #55BF62", +"]$ c #6AA872", +"^$ c #CBDFCB", +"/$ c #F3F6F4", +"($ c #789580", +"_$ c #96DB9B", +":$ c #63C96C", +"<$ c #5AC962", +"[$ c #57C362", +"}$ c #5BAF6D", +"|$ c #BDDBC0", +"1$ c #EFF3F7", +"2$ c #5A6262", +"3$ c #7CA990", +"4$ c #87D28C", +"5$ c #5AB568", +"6$ c #AED2B0", +"7$ c #E9F2E9", +"8$ c #5A5A62", +"9$ c #4A6C5A", +"0$ c #8ABB9C", +"a$ c #5AC462", +"b$ c #9ECFA6", +"c$ c #E4F1EC", +"d$ c #4B6553", +"e$ c #89BC9B", +"f$ c #91C69E", +"g$ c #EAF7EA", +"h$ c #5A6C71", +"i$ c #9CC6A9", +"j$ c #5AB762", +"k$ c #90C79E", +"l$ c #E9F7EA", +"m$ c #BCC6CD", +"n$ c #526A69", +"o$ c #A3C6B2", +"p$ c #56B85F", +"q$ c #81BD93", +"r$ c #E1F0E2", +"s$ c #DCDDDD", +"t$ c #5A6E69", +"u$ c #B4D2BC", +"v$ c #57BE60", +"w$ c #7DBE8D", +"x$ c #E4F5E5", +"y$ c #DCDDDC", +"z$ c #8BC798", +"A$ c #58C162", +"B$ c #78BA79", +"C$ c #D5EDD7", +"D$ c #CCE1CD", +"E$ c #81BF91", +"F$ c #6ABA78", +"G$ c #C3DEC6", +"H$ c #F2F5F2", +"I$ c #79868A", +"J$ c #CEE1CF", +"K$ c #82BE93", +"L$ c #65B66D", +"M$ c #BADDBC", +"N$ c #EEF4F6", +"O$ c #CEE1D0", +"P$ c #79B081", +"Q$ c #59C762", +"R$ c #61B96C", +"S$ c #B1D7B4", +"T$ c #EDF4EE", +"U$ c #919D99", +"V$ c #5FB665", +"W$ c #ABD5AE", +"X$ c #EBF3F3", +"Y$ c #DBEFDD", +"Z$ c #ACD6AF", +"`$ c #F1FAF2", +" % c #A1B5B9", +".% c #5AB663", +"+% c #9FD0A7", +"@% c #E9F3F1", +"#% c #A2B5B9", +"$% c #CDE1CF", +"%% c #5AB462", +"&% c #A2D1AA", +"*% c #B9C6C9", +"=% c #C5DAC7", +"-% c #5AB362", +";% c #97C6A4", +">% c #C6DAC8", +",% c #5AB262", +"'% c #92C190", +")% c #E8F2F0", +"!% c #B9C6CA", +"~% c #BBD4C3", +"{% c #56B45F", +"]% c #88BC9A", +"^% c #CBD5D3", +"/% c #C1D4C9", +"(% c #57B463", +"_% c #87BC98", +":% c #E9F3E9", +"<% c #B7C6C7", +"[% c #88B285", +"}% c #EAF3EB", +"|% c #DDDDDD", +"1% c #BAC6CB", +"2% c #56B863", +"3% c #7DAD85", +"4% c #56B663", +"5% c #7EAD86", +"6% c #DBE3DC", +"7% c #56B55F", +"8% c #77AD87", +"9% c #D8E2D9", +"0% c #56B862", +"a% c #71AF79", +"b% c #D3E1D4", +"c% c #58C662", +"d% c #6AAA72", +"e% c #C4DDC6", +"f% c #DFE5DF", +"g% c #6A848B", +"h% c #5DB76B", +"i% c #AAD5AD", +"j% c #E4F1E5", +"k% c #6A858B", +"l% c #5BBF67", +"m% c #98D29C", +"n% c #CBE0CC", +"o% c #788589", +"p% c #5AC265", +"q% c #8ED194", +"r% c #D1EBD2", +"s% c #184231", +"t% c #5BC262", +"u% c #8DD393", +"v% c #CFEBD1", +"w% c #818689", +"x% c #95D599", +"y% c #D4ECD7", +"z% c #9DD2A3", +"A% c #DDEEDE", +"B% c #82858A", +"C% c #5AC262", +"D% c #A9D5AC", +"E% c #E4F1E6", +"F% c #83848B", +"G% c #5AC362", +"H% c #ACD4AF", +"I% c #D8E3DA", +"J% c #A5D4A8", +"K% c #96D29A", +"L% c #CAE1CB", +"M% c #79878A", +"N% c #79CD7F", +"O% c #B5DCB8", +"P% c #7FA087", +"Q% c #7AD080", +"R% c #B2DCB5", +"S% c #778B87", +"T% c #79CE7F", +"U% c #B1DCB4", +"V% c #698B87", +"W% c #5BC662", +"X% c #7ECF84", +"Y% c #B9DDBB", +"Z% c #809871", +"`% c #5BC564", +" & c #87D08C", +".& c #C0DFC2", +"+& c #6A8889", +"@& c #9BD79F", +"#& c #CAE1CC", +"$& c #6A756A", +"%& c #5DB96B", +"&& c #ACDBB0", +"*& c #D3E2D4", +"=& c #63B46E", +"-& c #B9DDBC", +";& c #D2DCD2", +">& c #68B270", +",& c #C0DFC3", +"'& c #D5DCD5", +")& c #6AAF72", +"!& c #C3DFC5", +"~& c #D7DCD7", +"{& c #6BB773", +"]& c #C8E0CA", +"^& c #D9DDDA", +"/& c #5AC062", +"(& c #74B47C", +"_& c #DBDDDC", +":& c #7DBF8D", +"<& c #5BBF62", +"[& c #7FBF8F", +"}& c #D0E2D1", +"|& c #5ABD63", +"1& c #80BF91", +"2& c #D2E2D3", +"3& c #59C662", +"4& c #8EC79B", +"5& c #DFF0E0", +"6& c #5ABC63", +"7& c #D4E3D5", +"8& c #5BBD62", +"9& c #97D09F", +"0& c #5CBC63", +"a& c #A5D9A9", +"b& c #5DBD69", +"c& c #AADAAE", +"d& c #63B66D", +"e& c #B6DDB9", +"f& c #D9E4D9", +"g& c #6EA876", +"h& c #C9E0CA", +"i& c #7FA793", +"j& c #D8E4D9", +"k& c #213A42", +"l& c #3A464A", +"m& c #899DA2", +"n& c #E0E5E1", +"o& c #8EA096", +"p& c #F3F5F3", +"q& c #274040", +"r& c #273337", +"s& c #14322C", +"t& c #3B504B", +"u& c #688E85", +"v& c #D0E2D2", +"w& c #5AC363", +"x& c #57B466", +"y& c #A0B5B7", +"z& c #3F4847", +"A& c #253435", +"B& c #263E36", +"C& c #38563F", +"D& c #86B296", +"E& c #BCDFBE", +"F& c #B2C6C2", +"G& c #E3E6E3", +"H& c #2E4046", +"I& c #283933", +"J& c #294F39", +"K& c #75A67E", +"L& c #99D59D", +"M& c #5BBD64", +"N& c #A8C6B7", +"O& c #EDF4ED", +"P& c #253534", +"Q& c #233933", +"R& c #223C31", +"S& c #D0EBD3", +"T& c #B2D7B5", +"U& c #E6F2E7", +"V& c #BBC6CC", +"W& c #263436", +"X& c #213E31", +"Y& c #213B31", +"Z& c #587364", +"`& c #ABD8B1", +" * c #9CD7A1", +".* c #5DBA6B", +"+* c #A7D5AA", +"@* c #E2F1E3", +"#* c #BBC6CB", +"$* c #373937", +"%* c #213C31", +"&* c #223A2D", +"** c #243F33", +"=* c #284637", +"-* c #95B8AB", +";* c #62BB6A", +">* c #A9DAAD", +",* c #E0F0E1", +"'* c #A3B5BA", +")* c #273137", +"!* c #21372E", +"~* c #243B33", +"{* c #3E5649", +"]* c #95B4AA", +"^* c #D5E2D6", +"/* c #AFC6BF", +"(* c #5AC464", +"_* c #6ABD72", +":* c #BEE6C1", +"<* c #274037", +"[* c #23322D", +"}* c #223832", +"|* c #314242", +"1* c #8D9995", +"2* c #BED2C6", +"3* c #D1ECD3", +"4* c #DDE5DE", +"5* c #A4A59B", +"6* c #212E26", +"7* c #1A322D", +"8* c #243434", +"9* c #2E4737", +"0* c #929A9A", +"a* c #E1E5E1", +"b* c #CFE2D0", +"c* c #64B26F", +"d* c #98C7A6", +"e* c #E8F7E9", +"f* c #E2E6E2", +"g* c #212A22", +"h* c #384149", +"i* c #C8E0C9", +"j* c #5AB86A", +"k* c #72AE7A", +"l* c #EEF4EF", +"m* c #C7D4CF", +"n* c #D3ECD4", +"o* c #7AC07B", +"p* c #58BF62", +"q* c #6E9D7C", +"r* c #ECF4ED", +"s* c #F5F6FD", +"t* c #B8C6C9", +"u* c #CCE1CC", +"v* c #94CF9C", +"w* c #5ABC67", +"x* c #58BA65", +"y* c #67A682", +"z* c #9BB7B0", +"A* c #B2BDAA", +"B* c #D5E2D5", +"C* c #BFE6C3", +"D* c #78C57B", +"E* c #5CBF67", +"F* c #A0B6B8", +"G* c #929C9A", +"H* c #D6DCD6", +"I* c #DBEEDC", +"J* c #BBE5BF", +"K* c #86C793", +"L* c #5DBF6B", +"M* c #5AC266", +"N* c #5CC467", +"O* c #5CC367", +"P* c #64C06F", +"Q* c #7BA583", +"R* c #86A09E", +"S* c #A2B599", +"T* c #DEE5DE", +"U* c #D5EDDD", +"V* c #5BC663", +"W* c #819E89", +"X* c #68A385", +"Y* c #77A97F", +"Z* c #63B079", +"`* c #71B382", +" = c #70B57F", +".= c #71B481", +"+= c #83BE82", +"@= c #8EBBA1", +"#= c #98B8AE", +"$= c #C6D5CE", +"%= c #E2E5E2", +"&= c #EFF3EF", +"*= c #D8E3D9", +"== c #D1E1D2", +"-= c #CDEBCF", +";= c #A8E0AC", +">= c #85D28A", +",= c #78D07E", +"'= c #72CD79", +")= c #B7C6C8", +"!= c #C3D4CB", +"~= c #C4DAC5", +"{= c #D8EEE0", +"]= c #DFF0E7", +"^= c #F0F5F8", +"/= c #F5F6F5", +"(= c #F1F5F1", +"_= c #D4EDDC", +":= c #BFE7C7", +"<= c #B2E3BA", +"[= c #ACE1B4", +"}= c #A9E0B1", +"|= c #AAE1B2", +"1= c #AEE2B6", +"2= c #B2E6B6", +"3= c #ADE2B5", +"4= c #C3EBC6", +"5= c #D2ECDA", +"6= c #E5F2E6", +"7= c #FEFEFE", +"8= c #F4F6FC", +"9= c #F2F5FA", +"0= c #EFF4F7", +"a= c #F3F6FB", +"b= c #F1F5F9", +"c= c #E3F1E4", +"d= c #DEF0E6", +"e= c #DCEFDD", +"f= c #D9EEDA", +"g= c #DAEEE2", +"h= c #DBEFDC", +"i= c #DAEEDB", +"j= c #EAF3EA", +"k= c #F0F5F1", +"l= c #F0F5F0", +"m= c #08425A", +"n= c #085284", +"o= c #184242", +"p= c #103942", +"q= c #0073B5", +"r= c #007BC6", +"s= c #086BA5", +"t= c #005A8C", +"u= c #00639C", +"v= c #1873A5", +"w= c #216373", +"x= c #214A39", +"y= c #104239", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . + @ # $ $ # % @ & ", +" * = # - - - ; > > > > > $ $ @ , ", +" ' ) ! ~ { ! ] # ^ / ( ( / _ > > $ : ", +" ' # < ! ! ~ [ ] ; ( ( } _ ( ( / } > # ", +" # # | [ ! 1 2 - 3 _ 4 4 4 4 } ( ( > $ 5 ", +" , $ - @ ! ! . 2 6 3 _ ( } 4 4 } ( _ / 3 7 ", +" 8 9 # ] 1 ! ! < - 3 ( } 4 ( 0 ( } ( _ > a ", +" + $ ; ] . . 1 ] # 3 _ 4 b _ 4 } ( _ / 3 ' ", +" : ; ; < [ ! ! ] 6 > _ 4 4 4 4 4 _ ( _ / ; ", +" @ 9 - < ! ! 1 ) 6 3 _ ( 4 4 } 0 ( _ ( c $ ", +" # $ - < 1 ! < ] 6 > ( 4 4 4 4 4 ( _ ( / $ ", +" $ ; # ] ! 1 2 d ; > } 4 4 4 4 0 } _ ( > $ ", +" # ^ - 2 ! ! e ) 6 _ ( 4 4 4 b ( ( ( > } $ ", +" $ ; # < 1 ! [ ] f > } 4 4 4 4 0 _ ( / _ > , ", +" ; ; - 2 1 1 2 - g > ( 4 4 b ( 0 ( _ ( > $ , ", +" # ^ - < ! 1 < d ; _ } 4 4 4 4 _ 4 ( _ ( > 8 ", +" ; # ] 2 1 [ [ ] f } ( 4 4 b 4 0 ( _ ( > > h ", +" $ ; ] [ ! ! 1 ] f > 4 4 0 4 4 ( 0 _ ( / 9 = ", +" , ; ; ) 1 1 ! 1 - ; c } 4 b 4 b _ 4 ( _ ( > i ", +" , ; # ] ! ! . e ] ; _ 4 } 4 b 4 4 _ 4 > ( 9 ' ", +" , 9 ; ] [ ! ! e @ f 3 _ 4 4 4 b _ 0 _ ( _ > # ", +" . $ ; ] 1 . ! < j ; _ 4 4 k 4 4 4 4 ( } ( > $ ", +" . > - ] [ 1 ! ] ] f } ( 4 b 4 b 4 _ 0 _ / > $ ", +" l ; ^ | 2 1 ! d ; ^ } ( 4 4 b 4 4 4 ( _ ( 9 $ ", +" 5 > 6 ] < ! 1 ] 6 ^ ( 4 k 4 b 4 b _ ( ( _ > ; ", +" [ 9 ^ | 2 e [ d @ m } 4 4 b 4 4 4 4 ( _ ( > $ ", +" : ; 9 ] < 1 [ ] 6 _ } 4 4 4 b b ( 4 _ _ ( 3 $ ", +" * 9 ; - [ ! e ] ; 3 ( 4 4 b ( 4 4 4 4 ( / _ ; ", +" ) 3 ; - 2 2 2 ] 6 ^ } 4 b 4 b b ( n ( _ ( > ^ ", +" ) $ ^ ] 2 1 e ] ; 3 ( } 4 b 4 4 b ( ( ( _ / 9 ", +" @ > ; ] 2 ! e - 6 ^ } 4 4 4 b 4 _ 4 0 > ( _ $ ", +" = 9 ^ - < e 2 ] 6 ^ ( } 4 b 4 b 4 _ 4 ( _ > 9 ", +" @ 9 ; | 2 1 [ ] ^ 3 ( 0 4 4 b ( b 4 _ ( _ / ; ", +" = ^ ; ] < 1 2 6 ^ 3 ( 4 4 b 4 b ( 0 4 _ ( _ $ ", +" - 9 ; ] ] ] ] ^ } 4 0 b k 4 b 4 4 4 0 ( ( > > ", +" @ > ; - ] 6 ^ ; ; ^ > 4 0 b 0 b 4 4 _ ( _ _ $ ", +" 5 3 f ; 6 2 ! < d ^ c ( ( 4 b 4 b 4 0 ( ( _ $ ", +" . > } ; 2 1 [ e @ f _ } 4 4 b 4 b 4 4 ( ( > $ ", +" . $ ; ] < ! ! 2 d ; 3 ( 4 0 4 4 4 4 ( _ ( > # ", +" 8 ^ # < ! ! 1 2 ] g > 0 ( 4 4 4 4 _ 4 _ ( > # ", +" . > - d ! ~ { e ] # 3 _ ( ( 4 b 4 0 ( ( _ / # ", +" : $ 6 - 2 ! 1 [ ] f _ ( 4 4 b 4 4 4 ( _ ( > $ ", +" - 3 ; @ 2 1 1 ] 6 ^ _ 4 4 b 4 b 4 0 _ ( ( > 9 , ", +" ' 3 ^ 6 < 2 2 ] 6 > 0 4 4 b 4 4 b _ 4 ( _ / ^ , ", +" # 3 9 - ] e 2 ] 6 ^ } 4 b 4 b 4 4 4 4 _ ( > 9 , ", +" - > ^ - ] 2 e ] 6 ^ ( 4 k 4 4 b 4 4 _ 4 ( > 9 , ", +" = 3 ^ - ] 1 < ] ^ ^ } 4 4 b 4 b 4 4 4 _ ( > > , ", +" ) > ^ ; ; ; 3 _ } 4 b k b o b b b b k ( ( _ $ , ", +" [ > 4 k 4 0 4 4 b k b b o b o o b o b b b 4 > ", +" ^ 9 ^ | < ] ] 6 3 _ ( 4 b 4 b 4 b 4 4 4 ( > ", +" ; > c ; ; 6 6 3 _ ( } 4 k 4 b 4 b 4 4 ( _ $ ", +" , 9 > 3 ^ ; - f 3 _ } 4 4 b 4 b ( b ( 4 ( _ > ", +" , > 3 > 6 6 ; 3 > } 4 4 b 4 b 4 b ( b 4 _ ( 9 ", +" ! > c 9 ; ; 6 ; 3 ( 0 4 4 b 4 4 b 4 4 4 ( _ > ", +" l > _ 3 ; 6 ; ; _ 4 } 4 0 4 b 4 b 4 b 4 _ ( > ", +" p p p p p p q = = = r = = r = = = = = # ' # ' # ' = - q s 5 8 , 5 c _ 3 ^ # 6 ; c _ 4 4 b 4 b ( b ( b ( ( _ > ", +" p p p p p p p p p p q + = + : : t + : + : u q = t = t = = = a # = - % # ' # = # # % # ' # ' = + 8 h _ / 3 # 6 ; f 3 ( 4 4 0 b 4 b ( b 4 4 ( ( > ", +" p p p p + s 7 v 7 v & 7 w 7 8 w w w w w w w v w v x v w w u v v v u u u t u u u t = r r # % # # $ % # # % $ ' = 7 , : > c ^ - 6 6 ^ 3 ( 0 4 4 b ( b 4 b 4 4 _ ( ^ , ", +" p p p p p p p & 8 8 8 y y y y y y y y y y y y y y y y z y x z y x y x x x y x x x x x x v v A A u u u t t u % # r $ % $ $ $ % $ $ # ' + , = 3 ; ) [ ! ] - 3 _ ( 4 0 b 4 b ( b ( 4 ( _ > ", +" p p p p p w 8 , y y y z y B z z z z z z z z z z z z z z z z z z z z x z z x z x z x z x z A A x x x A x x x A x A C v r t u = r % # $ % # $ $ $ # > $ > > / 9 # 2 < < ; 3 ( } 4 b 4 b 4 b 4 4 _ ( > ", +" p p p p , y 8 y B z D z z D z D z z D z z D z z z z z z z z z z z x z x z z A z x x z x z x x x x x y y A x x A x A A x x A u C A t C = r u r = % # $ $ $ $ > > _ / > ( > 9 ; _ _ 4 0 b 4 4 b ( b ( 4 > > ", +" p p p p p , B z E z D D z D z D D z D z D z z z D z z z z z z z z z x z x z x z A A x x x w 8 w F v 8 8 w v u v w A x A A x x A A A A A C A v A A t A r r r % ' r $ $ $ > $ > 9 / } ( } ( ( _ b 4 b 4 b ( n _ ( $ , ", +" p p p G B z E z D D D D z D D z D D z D z z z z z z z z z z z y y x w x w l l + h l H h H I I J I | K | I | I I I J J I h J h F v u w A u v v A v A A A v C C v L r r ' $ ' $ $ # $ > / > / } ( ( _ 4 b 4 4 b _ ( / > ", +" p p B E D D D D D D D D D D z D z D z z z E y M M M N M H H H H I h K H O O I I d O I O d I | P | P | P | P P j | P P | j | P | | | I | | i i : t q q + u v u v t t t r t t r = r $ % $ $ 9 $ > > _ ( 4 _ 4 4 4 4 ( _ > ", +" p p p Q D D D D D D D D D z z D z z z z M M N K N N K N R K I I K I O O O O d O d P I P P d P P P | P P I j P | P P | P | P j j | j P j j | j | j - j | - - i | F i = = u + u t r t r r a # $ ' $ > $ > / _ ( ( ( 0 ( _ ( $ ", +" p p D S D D D D D D D z D z D z z y M N K N K K N K K K O K O I O O I O O d O O P d O P P | P | P d P | P j P | P j | P j P j j j j j j j T g j T - T j 6 - j j - | j - - - a = i = r = = = r # r % $ $ $ 9 > / _ ( _ 4 ( _ > ", +" p p p D U D D D D D D D D z z z z M N N N K K K K K K K O K O K O O O P P I P I P P I P P | P P d P P | P P j j j P j j j j j T j j j T j j T j T j g T T - T T g j g T T j 6 - g g g - - # a $ = a $ a $ ' $ $ $ > > ( / ( _ / > ~ ", +" p p D U D D D D D D D z z z z M M N N K K N K K O K O K O O O O O d P O d O P P P I P P P I P P I j P P j P j j P j j j j j T j T j j j T j j 6 j T T g j g T T T - g T g T T j T g ; j 9 | V - - $ = = = % a # % # $ $ > ( _ ( > $ ", +" p p S D U D D D D D D z z M N N N N N N K K K P K O K O P O O O P O O P O P P I P I P | P I j P P P P | P j P j W T P j j P j j T j j j T g j j g T j j f g T j T T T g g g T 9 V g g V T g g - V g - 9 - $ - a % - % $ $ $ > / > ( $ ~ ", +" p p D U D D D D D D z M M N N N N K K K K K K O O O O O O O O P O O d P O d I P I P I P O P P j P | P | P | P | P T j j j j P T T T T j g T T T g T T j g X g g T V g T V T g T g g g g T V Y V g g $ g $ - 9 $ ; - $ a $ a $ $ $ > 9 $ ", +" p p D U D D D D D D M ~ Z N N N N K K K K K K K P O O K O K O P O O P O d O P P K P | P P | P P P | P P P P P j j T P j T T j j j j j T g T T g T T T j T T g g V T T g g T g g ; T V g g Y 6 3 3 } ( ` ( c 9 9 g $ $ a $ a $ % # $ > > $ , ", +" p p D U D D D D D D M M N N K K K K K K K K K O K O O O O P O O P O P I P O O O P P P P P O P P P P P P P j j j j P j j T j T T T j T T T T T g T T T g T g T g g g g g T g g g g g g V g f V } 4 k k k 0 k 4 4 ( 9 - V $ 6 $ = $ # $ $ $ % ", +" p p D D D .D D D z M Z N N N K K N K K K P K O P K P O O P O P O O P I P O P P P P I P I P P P d j P P j j W j P j j W ..j T j T W T X T T T j g T g T g j g g T T g g g g g V 6 V g f T g c 4 0 k b b b b k b 4 4 ( 9 9 9 $ $ - $ r # $ $ # ", +" p p D U D D D D D Z N N N K K P N K O K K K P K K K O P O O P O P P I P O P d P d O j O P | P j P P P | P P | ..j W j j j T T W T j T T T T T T +.g j g T g T T 6 g g g g g g g j f T V g 3 4 b 0 b o o o b b b 4 b 4 ( 9 9 ; 9 $ a $ a # % # M ", +" p D D D D D D E M N N N N N K K K K K P P K O O O P K P O P O P O O P O O P P d P j P P P I P j P | P P j P P T j j P W T T j ..T T T j g T T +.T g T T g g X g g g g f g V g V g g Y g } } b k o k k _ _ 4 b o b b / ( 9 $ g g $ V $ = $ # % = ", +" p p D D U D D D Z N N N K K K K P K O K K O O P K O P O O P P K P O P O P O P O P j P | P P j P j P j W j P j T j j T j g T T T W j T T j T T T g g j X X T g g g X g X g g g 6 g V g V X _ 4 k b ^ ! [ 2 ] @ - ^ b b ( % / ; 9 g g $ - - $ a $ # , ", +" p D D D D D D Z M N N K K K K K K O P K P O P O P O P O P O O P O P O P P P d P j I P P P | P P P P j P j P T W j T W g | g T T g X T g j j g X g T g T g g f g X g X g V Y g V g g Y g c ( k b 2 { ] # ' C ' # - - 4 b % $ r $ g 6 $ g $ a - # % = ", +" p p D D D D D E Z N N K N K O O P N O K O P O O P O P K P O O P O P O P O d P I P P P j P P P j j P | P j P P j T j ..T T j g j j T j ..g T T T g g g g V X g X g X g X g g Y g g V f Y c } 4 k ] { ] C @.@.@.@.@.' # # b / L t q ; V V - $ - a # # r ", +" p B D D D D E Z N N K P K O O O O O O O K O O P K O K P O O P O P P O P P P I P P O j P P | P j P j P j ..j T j T T T j j j g T T g T g T g g X g g V g g X Y X g g V f X f g Y g f g Y Y ( 0 4 { ] C @.@.@.@.@.@.@.@.- ^ b A A v ; V 9 9 - $ - % # # + ", +" p p z D D D D E Z N N K K O O P K O O P O P O O O O P P O P O P O P P P I P P O P P P j P P P d ..j P j W j j W j W T T T T T X T g T T V T 6 X g g X g X g g g g f X V X g g f X g X Y 6 3 } b 6 . @ @.@.@.' @.C C @.@.' # ( @.A w a 9 g V ; - $ - $ # r ", +" p y D D D D D E N N N K O K O O O P P O O O P O P O O P O O P P O P P | P P | P P d j P P j j P P P j j j W T T T T +.j T j g g T T V g g T g g g g g X g f X g X g g f X Y g V f X V m V m } b [ 2 C @.@.6 C @.@.^ @.@.C % ( % x z $ V g 9 $ V a $ $ # r ", +" p B z D D D z Z N K K P K O O P O K O O O P O P O P P O P P O O P P P P P I P P j P P j P P P j P j P j 6 X j W T j T j X 3 g g g T g T g g V g g g g g Y X g Y g f X V X f g X X Y X Y g 3 c b e ] @.@.L ^ L @.C ' L @.@.^ ( C z z % f Y g V $ ; $ - % # , ", +" p y D D D z E N N K K K O P O O P O P O P O P O P O O P O P P O P I P | P P j P P | W j j P j P j j T f 0 0 } j T W T g } 0 0 Y g T T g V 0 k ( X g V 6 X X Y X g V #.X V f g g Y g X f Y g } b - d C @.@.# @.@.@.^ @.@.@.; ( C z z # 9 Y c 9 V $ $ # $ a : ", +" p p B z D D z Z N N O O O O P O P K P O P P P P P O P P P P I P P | P P P P P | P P P j j P j P j j W j } b o k | T W T f k o b 4 j T g V } o o k - V 6 g X X Y X f X V f V X f Y g Y g V X 3 3 0 _ # L @.@.^ L @.L ^ @.@.L > ( A z z > 9 Y Y 9 V $ 6 $ # % = ", +" p y z D z D M Z N K P K O O P O P O P P O P P O P P O P O P | P P P d P P | P P P | P T P T P j j W j g } o k o h T j T Y k o b ( I g X V } o b b F - X g Y g X Y X V g f V X f Y X Y X m X X c ( k # ^ @.@.@.L @.L @.@.@.^ / / x z A 9 c Y Y g 9 g $ $ - $ = ", +" p y z z D z E N K K O P P K P O O P O P P O P P I P | P | P P P P | O P j P P P j P j j P j P j P W j T g 4 k / M X T T g 0 k o 8 - V g X f 0 b $ 8 V V V X V m X Y X f V X Y X V g f Y X g g #.> k _ ^ ' @.@.@.@.@.@.@.% > ( @.z z $ 9 Y 3 #.Y 9 9 $ - $ = % ", +" p y z z D z Z N N P P K P O P P P d P O P P O P I P O O P O P P d P P P j d j P P | P P | P j j j j j j j j J H - T T T - +.g J | T X f X V ; a h $ V g f X X X f g g V Y $.V f X V X %.Y V X Y c _ b 4 _ > @.@.@.@.L / > ( L z z t $ 3 Y c Y V 9 g $ $ $ $ # , ", +" p p y B D z E N N K K P P K P I P P P O P I P P P P j P P j P I P d P j j j j P | P P | P P P j W j W W d T T g g T T g g T g g V g &.$.X f X V V g g V V X g X V X f X g f X Y g X f X Y X Y #.X 3 Y } b b ( _ _ _ _ ( ( b / z z A $ 9 c Y c 3 #.V g 9 - # a % : ", +" p 8 y z D E Z N K K P K P K | P O d P P d P d P I O P I P P | P P | P P P j P j P | d P P j j j | P W j T 6 T f g g g 6 g X Y g V m Y m Y f 3 Y X Y Y X Y f g g Y X f V 3 X g f Y %.Y 3 $.Y X %.X Y c 3 > ( b b b b b b ( C A z C $ f c Y c #.*.9 Y 9 g $ $ i # r ", +" p w z z D E ~ N K P K P | P O P P I P | O P | O j P d P | P P d P P j P | O j | P j j d j | j - 6 6 ; 6 f 9 9 ; ; ; ; ; ; ; ; ; ; ; - 9 f 9 ^ c _ } } } } } } *.3 #.#.c #.f V Y Y Y m g Y X Y %.3 Y 3 ` 3 6 9 > ( / $ % v w x % g 9 c c Y #.3 c 3 3 V 9 $ - $ = = ", +" p y y E E E N N K P P K P O P O P O P I P O O P d P P I P P I P P j P | P P j j 6 - j 6 - ; ; @ < [ , , G =.Q -.-.-.S -.S -.-.-.Q -.-.-.Q Q =.=.B B { , , 5 h - ; 9 } ( } } } } *.c c c 3 %.f V #.Y 3 c c Y f 9 - | - a i i 9 9 c c 3 Y Y 3 3 3 #.3 9 V ; $ = $ ' ", +" p , z z E M Z N K O P P P P I P P d P P | O P P P d P j P d P | j j j 6 j # ; - ) * , G Q S U . . . . .S -.Q =.Q B =.E G ~ . , . , . . . . ! 5 ! ! . , { { B =.E =.=.E { ! ) - 9 _ 4 } 0 c } c 3 Y c #.Y Y #.#.c Y 3 ` 3 c c c 3 *.c #.9 m c 3 Y #.V 9 9 # # # # ", +" p y B z E ~ N N P O P K O P P I P I P P O P P j d P | O j | j ; ; ; - 5 ~ =.S . .;.;.;.;.;. . .U U -.=.B { . , ~ G { { . ! * [ 1 ! ! ! ! [ [ h < [ ! [ ! . ! 1 ! ! . . ~ { G E =.=.=.{ l # } 4 n } } } _ 3 #.c 3 3 Y 3 c *.c Y Y ` Y Y #.` 3 #.c 3 3 V 9 $ - # % 8 ", +" p p y z E E Z N K K P K P P | P K P P I P P d P d | j j 6 - ; ) . Q S ;.>.;.;.;.;. . . . .U S S -.-.=.=.B { [ 2 ; ] , { . ! [ [ ^ # * . . H [ [ ; 3 @ [ ! ! [ ! [ [ [ [ 1 [ ! [ 1 ! ! . ~ =.=.-.=., * 9 _ 4 } } } } c c c *.9 ` Y #.3 m c #.3 Y c c 3 3 V g $ 6 $ # s ", +" p w y z E z Z N N O P O P O P O d P | O P d | T 6 6 @ < , Q .;.>.;.;. . . . . .U U S S -.-.-.Q =.=.B =.{ ! , 4 4 0 G { . ! . $ k k ; =.! [ [ . k k k , . ! < h [ I < < [ < < [ < < [ < [ [ ! ! . { B =.=.{ * ; 3 ( } ( } c *.c *.3 *.Y c #.c 3 c *.3 3 g 9 g $ - # = ", +" p y y z E Z Z N P O O P P O P d P I P j - g - h , -.U ;.,.;.;.;. . . . .U U S S -.Q -.Q Q =.B =.G =.{ G . , . 4 b _ B G . ! { > k 4 ; -.! [ . . b 0 ( =.{ * [ < < < < d ) I < d 2 ] ] I ] < < < < [ 1 ! ! . { =.=.B [ - } ( } } *.c ` c #.c 3 _ c *.c 3 f V 9 $ # % = ", +" p 8 y E z ~ N N K P O P I P O P | g ; - 5 B S ;.;.;. . . . . .U U U S S -.Q -.Q -.Q Q =.=.B =.{ { { G { { , G ; _ = S =.. ! { [ } > B Q . ! [ B ; ( : -., [ < < I < ] ] ] ] d ] | ] | @ d @ d ] ] ] < < < [ [ ! ! ~ G =.B . - _ } } } '.c 3 _ #.c 3 3 Y Y 9 ; ; # # = ", +" p , y z E Z N N O P P O P P | | 6 h G S ,.,.;. . . . .U U U U S S -.-.-.-.Q Q Q =.Q =.B =.{ { { { { . . { . =.=.=.S Q { . . . E =.-.-., ! ! [ . E =.-.B ! 2 < < < ] ] ] ] - ] - ] - ] - | ] - ] - ] | @ ] ] < ] [ [ ! ! . { =.E 5 f } } c *.c c c 3 3 Y Y Y Y $ ; $ ' ", +" p y y B E N N K O O P P I | T - B .;.;. . . . .U U U S S S -.S Q -.Q Q -.=.Q =.=.B =.{ G { { { , . { . . Z . G G G { . . . ! . , { . ! ! [ [ [ 1 ! 5 [ [ < ] < d - ] | @ | ] - @ | @ ] - ] - @ | @ | ] - ] ] ] ] d < < [ < ! . { =.< ( } 3 ` #.3 3 c m Y 9 9 6 $ # $ , ", +" p , y z M N N K P P K P I V F S ;.;. . .U .U S S S S S -.-.Q Q -.Q =.Q =.=.=.B G =.{ { { { { . . . ! ! . ! . . . . ! ! ! ! ! 1 ! ! [ 2 * < < e 2 [ < < ] ] ] - ] @ | ] - ] - ] | - ] - ] - ] - ] - | ] - ] - | @ | ] ] I * h [ ! . Q 1 ( 3 #.c _ 3 3 c Y Y 9 9 - $ = , ", +" p y z E E N N O K O P | T F U ;. . .U U U S S S -.-.D -.Q -.Q -.=.=.=.=.=.B =.{ { =.{ { . , . ! . ! ! ! 1 ! ! 1 ! ! ! [ [ [ [ [ * < 2 < < ] ] ) ] ] | ] ] ] - ] - | ] - ] - ] - j ] 6 - | ] - W # W # ] 6 ] | - d - @ | ] ] < I [ [ ! G . } } 3 c *.c c Y 3 g 9 $ - % 7 ", +" p p w z z Z N K K P O | j - S . .U U S S S -.-.Q -.-.Q -.=.Q =.=.=.=.B =.B { { G { { , . { . ! ! ! ! ! ! [ [ 1 [ 1 [ [ [ [ e < < < [ < d ) | | ] - | @ | - ] - - ] @ - - - ] 6 ] 6 6 ] - W ] - ] 6 @ d # d 6 d - ] - ] - ] - ] ] < < [ ! G - c c _ 3 ` 3 3 Y V 9 $ # $ + ", +" p & y B y M N N O P P | j G .U U U S S -.Q S -.Q -.Q -.=.-.=.=.=.=.B =.G =.{ { { { . { . ! ! ! ! [ ! [ l ! [ [ 1 [ [ [ < [ < < I ] ] ] | ] ] | @ | @ j @ - j 6 # - ] 6 d 6 6 - 6 6 # 6 6 ] ; 6 6 d ; 6 - ] j j 6 d - ] - ] | @ ] d < I [ ! G } 3 c _ c c 3 3 3 g $ $ # q ", +" p w y z E Z N K O P I T J . .U S S -.Q -.-.Q Q -.Q =.=.-.=.=.Q B =.G G =.{ { { , { ! ! ! ! ! ! [ 1 [ [ 1 [ 1 2 [ 2 < < [ d ) ] ] ] | @ | | @ | - d 6 6 6 6 # 6 6 6 6 # 6 # 6 ; 6 # 6 6 # 6 6 # 6 # 6 # 6 j ] 6 d 6 ] 6 ] - ] - | @ | ] ] l . h 3 c c 3 *.c 3 3 9 $ - $ r ", +" p w y y ~ M N K O P | g B .U U S Q -.-.Q Q -.Q =.=.-.Q =.B =.B =.{ G { { { { . . . ! ! ! ! [ [ [ [ < [ [ [ [ 2 < < < < d | ] - ] - ] - ] - 6 ] 6 6 ] # ] 6 ; ^ 6 # 6 6 # 6 ; ; ; 6 # 6 6 - 6 6 # 6 6 6 # 6 6 - 6 ] 6 6 @ j @ | ] - ] - < < l { c *.` 3 c 3 3 3 V ; $ # r ", +" p , y B M M N K P I j - S U U Q -.Q Q Q -.=.=.=.=.=.B =.=.=.G =.{ { { { { . . . . . ! ! ! [ [ [ < ] < < [ [ ] ] ] ] - - - - - @ | # # ] - 6 6 # # 6 6 @ f ^ ^ _ ^ ^ # 6 ; 6 ; 6 # 6 ; ; # 6 ; ; 6 6 # 6 6 # 6 # 6 6 ; 6 6 # d 6 @ ] - ] ] < [ G ; ` 3 c _ c 3 3 9 ; $ # # ", +" p y y y ~ N N O P | j F U U S Q Q Q =.=.=.=.B =.=.B =.=.G =.{ { G { { { . { . . ! ! ! ! [ 1 [ [ - [ . [ - ] - ] * 9 2 . . ! ! [ 6 ] . # ; ; [ , 2 2 [ @ 6 ; ] @ 6 f ^ f 6 # 6 ; ; ; 6 # 6 ; ; 6 # 6 ; # 6 # 6 6 ; 6 # 6 ] ^ 6 # W - ] - @ ] < . ) %.c *.3 c 3 c c 9 9 - # ", +" p p 8 y E M N K O j P j l .U -.Q Q =.=.=.B =.=.B =.G =.{ G { G { { { . { . . . ! ! ! ! [ ! [ [ < { [ . 2 - ] [ . G [ [ , G G . [ , , ~ G # 2 G .G [ -.[ - , ] ) - ^ 3 f ; ; ; 6 ; ; ; 6 ; ; ; # 6 ; ; 6 # 6 ; # 6 # 6 ; 6 6 ] ^ # 6 ] 6 ] - e [ 8 m #.3 } 3 *.c 3 9 $ $ # 8 ", +" p & , y y M N N O P | ; , .S -.Q =.=.B =.G =.G =.G { G =.{ { { { { . { . . ! . ! ! ! ! ! [ 1 [ 2 G , -.G [ - ! G Q =.Q ;.S -.-., S G , ! @ G U G , ! -.5 ! [ Q =.@ - 3 ^ ; g ; ; g ; g # 6 ; ; 6 ; ; ; ; 6 ; ; 6 # 6 ; ; # 6 6 ; 6 # 6 ] 6 ] ] [ ~ 6 *.c c *.3 c 9 9 9 $ # 7 ", +" & y y ~ Z N K I P j - Q U S Q =.B =.{ G G G G { =.{ G { { { ~ , ~ . . ! . ! ! ! ! ! [ [ 1 [ [ < G , U S . ) 2 , -.B G B [ : , . -.B . Q [ Q 5 ] , . Q 5 . 2 S =.* < 6 ^ ; ; 6 f ; 3 ; 6 ; ; - ; ; 6 ; ; ; ; ; ; 6 ; 6 # 6 6 ; ; 6 6 ; ; 6 - ] < , j c *.` #.c c 3 9 $ - $ : ", +" , w 8 B y Z N K P | j # S U Q =.G G { G G { { G { G { { { ~ { . { . ! . ! ! ! ! ! [ ! [ [ [ 2 < ) G ! U B -.* ! [ -.=.. , ! [ , h S B G .-.@ ) | . 8 =., [ 8 , . 5 ] ) ^ # 6 f ; Y 6 f ; ; ; g ; ; ; 6 ; - 6 ; ; ; ; # 6 6 # 6 # 6 # 6 6 # 6 @ [ . - *.3 3 } 3 Y 3 9 ; # # r ", +" 8 & M y M Z N K P I g i .U Q B { { { G { { { { { G { ~ . { ! . . ! ! ! ! ! ! [ [ [ [ 2 < < [ ] ] ~ , U , G Q . , U S , 8 5 ! 8 -. .-.Q -., Q . Q G B =.G B .-.-.S B Q ! ; 3 ; f 3 f f ^ ; ; g ; g ; ; g ; g ; ; 6 # 6 ; ; ; ; 6 ; ; ; # 6 # d < ! ) f } } } c 3 Y 9 $ ; $ = ", +" 8 8 y M M M N K P | 6 l .S =.G { { , { . { . { { . ~ . { ! { ! ! ! ! [ ! [ [ 2 [ 2 e 2 ] ] | 2 ] . .S 5 < G U U S y -.S S S S -., B -.8 @ : =.Q , Q Q =.Q 5 - # # G B [ # 3 9 3 3 > 3 3 9 3 9 ; 9 9 ; ; g ; ; - ; g ; ; ; 6 ; # 6 ; 6 ; 6 ; - ] ! h c c } *.c 3 3 Y $ $ - ' ", +" 5 8 y y ~ Z N I P P ; G .-.B { { . { ! ~ . ~ . . . . . ! ! ! [ ! [ [ [ 2 [ < [ < < ] - ] | ] | @ | @ : ] | @ @ = @ # # # ' # # ' - # ; ; ^ 9 ^ $ ; ^ # ^ # ^ 9 > 3 3 ^ 9 ^ c _ _ c _ 3 > 3 3 > 3 3 _ 3 3 3 ^ ; g $ f $ 6 ; - ; 6 ; ; # 6 ; - 6 ] [ ! Y c _ ` 9 3 3 9 9 $ # # ", +" s , y y ~ M K O | P $ Q U Q =.. . . ! . ! ! ! ! ! ! ! ! [ 1 [ [ [ < < < < < ] ] | @ - - - - 6 # 6 # ; ; ; ; ^ ^ f 9 ^ ^ > m > 3 > _ 3 _ > } _ > _ ( _ > } _ / *.} ( } ( } ( _ ( } ( _ ( } _ _ _ _ ( > c _ 3 3 _ 9 3 > 3 3 ; f ; ^ ; ; ; ; 6 ; - ] < . ; %.} c c 3 c 9 $ g $ = , ", +" s 8 y y M N K O j j - S S =.{ . ! . ! ! ! ! ! [ ! [ [ [ [ * < < ] ) ] | ] - 6 - 6 # 6 6 ^ 6 ^ 3 9 ^ 3 > _ > } / } _ ( } 4 } _ 4 } ( 4 ( 4 ( ( 4 0 4 4 4 ( 0 4 4 4 4 4 0 4 4 4 0 ( 0 ( } 4 4 4 4 } 4 } 4 } ( _ } _ _ 3 3 > c 3 ^ ^ 9 6 ; ; ; 6 6 - 2 . - Y ` c } 3 c c 9 $ $ - ", +" s w M y Z N K P | T = .S G { . ! ! 1 [ [ [ l [ < < ] < ] | - ] ; - 6 - 6 f ; ^ ^ 3 > _ _ _ } ( _ ( } 4 } 4 } 4 ( 4 4 0 4 4 4 4 4 0 4 4 4 0 4 4 4 4 4 4 4 b 4 4 4 4 b 4 4 b 4 4 b 4 4 b 4 4 4 4 4 0 4 4 ( n ( 0 ( } ( _ } > c > c ^ ; 6 ; ; ; - ] ] ! J Y *.c _ 3 3 Y 9 9 ; $ 5 ", +" s 8 y ~ M N K K P g l .-.{ ! ! 1 l [ I [ < ] ] | ] # - - 6 ^ ^ ^ 3 f _ } _ } ( } ( } } 4 4 4 0 ( 0 4 4 4 4 b 4 4 4 4 b 4 4 b 4 b 4 b 4 b 4 b b b 4 b b 4 4 b 4 b 4 4 b 4 k b 4 b 4 b 4 k 4 b 4 b 4 b 4 4 4 4 4 4 4 4 0 ( } 4 _ } > 3 m ^ ; 6 ; - ] [ [ Y 3 } c c 3 3 3 $ $ - 7 ", +" s w M y N N K I j - , U =., ! [ [ [ < | @ | j # 6 ^ 3 ^ _ _ c _ } ( } 4 } 4 4 4 4 4 4 4 b 4 4 4 4 4 b 4 4 b 4 4 b 4 b 4 4 4 4 4 4 0 4 4 4 b _ 4 4 b 4 4 b 4 b 4 b 4 b 4 b 0 k k 0 b 0 k b 0 b 4 b 0 b 4 b 4 k b 4 b 4 4 4 4 4 4 } _ _ 9 ; 6 $ 6 | ] * ! V c c *.c 3 3 9 9 $ # 7 ", +" , & M y M Z N H I j 9 Q S =.. ! [ < ] | ] 6 ; ; 3 _ } ( } ( } 4 0 4 } 4 0 4 4 4 4 4 0 4 4 4 4 4 4 0 ( n ( _ _ _ _ _ _ _ _ _ _ ^ _ ^ _ > _ ^ _ _ _ _ _ _ _ _ _ _ 4 _ 4 4 0 4 4 4 4 4 4 b 4 b 4 b 0 k k 0 k k b 4 b 4 k k k b b 4 4 4 ( 3 _ 3 ; 6 - | - < . g } *.` c 3 Y V $ $ # q ", +" , w 8 y ~ M N I P j 9 S -.B . ! 2 d ] 6 ; ; 3 _ 4 4 4 4 4 0 4 4 4 4 4 } 4 _ 4 _ } _ _ _ m ^ ^ ^ # @ @ ] ] @ 2 < e [ 1 ! . . . . . . . . . . . ! ! ! 1 ! [ 1 [ 2 2 ] @ @ 6 # ^ ^ ^ _ _ _ _ _ ( 0 ( ( 0 4 4 4 k 4 k k 0 b 4 0 b 4 b _ 4 } _ f ; ; 6 - ] ] . 6 ` #.c *.c 9 V 9 $ # = ", +" w l 8 M M Z H H I T ; S -.G ! [ < | - ; ^ 9 _ 4 4 4 0 4 _ ).!.~.{.].{.^./.(._._.:.<.[.}.|.1.2.3.=.=.=.=.-.-.-.S S S U U U . . . .;.4.5.6.7.8.9.0.a.b.c.0.0.9.d.e.f.e.g.g.h.i.j.i.k.l.m.n.o.p.q.# ^ ^ ^ _ _ _ 4 _ 4 4 0 4 4 4 4 4 4 0 _ _ ; 6 ; - 6 # ] ! - c 3 _ #.c 3 9 g $ # r ", +" 8 s 8 M y Z H K P ; # U Q { [ 2 ] | 6 ^ _ ( 4 k 4 4 _ !.r.s.t.u.v.w.x.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+/+(+/+_+:+^+<+[+}+|+1+2+3+4+m.5+6+7+8+9+0+a+b+_ _ _ 4 ( _ 3 ^ ; 6 ; - 6 ] [ < Y *.` c c 3 c 9 $ $ - ", +" 5 l 8 y M N H K | T i U =.. [ < ] - ^ 3 c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+r+s+p+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@N+$@%@&@*@*@=@-@;@>@,@'@)@!@~@{@z+]@^@/@(@_@:@<@[@}@|@1@@+2@3@4@5@, # _ _ } 3 ; 6 - 6 - - ] 2 [ g c } #.3 3 3 9 $ # a ", +" l l 8 8 ~ M K O j 6 8 S G . [ < ] 6 6@7@8@9@0@a@b@c@d@e@f@g@h@i@i@j@k@l@m@n@o@p@q@r@s@t@u@v@ @w@w@w@w@w@w@w@w@w@w@w@w@w@w@x@w@w@w@w@w@w@w@w@y@w@w@w@z@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@A@B@C@D@C@E@F@G@H@I@J@J@K@L@M@N@O@P@Q@3 _ 9 6 ] 6 - 6 ] # < . Y #.` 3 c Y 9 9 $ $ # ", +" s l 8 y ~ N H I 6 ^ G -.G ! [ d - R@S@T@U@V@W@X@Y@Z@~@`@ #.#+#@###$#%#&#*#=#&#-#w@w@w@w@w@w@w@w@w@w@w@y@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@y@y@y@y@;#>#,#-#'#)#!#~#{#]#^#/#(#_#^ - ] | ] 6 6 - 2 . Y } ` m c Y V ; 9 - a ", +" 7 l y y M M I I T 6 Q -.{ ! 2 2 :#<#[#}#|#1#2#3#4#5#6#=#y@w@y@y@y@y@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@y@y@y@y@y@y@;#7#8#9#0#a#b#c#d#] < ] @ | @ W ] . Y c #.} 3 3 Y 9 $ $ # ", +" * w y M , N H I j 9 S =., ! < e#f#g#h#i#j#k#w@l#m#w@w@w@w@w@w@;#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@y@n#o#p#q#r#s#! ] ] | 6 @ | . ; ` c _ #.Y 9 V $ g # , ", +" + 8 8 y y M O I g ; U Q . 1 * :#t#u#v#w#x#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@y@y#z#A#B#<.{ 1 ) ] - - ] ! # Y } c c 3 Y 9 $ $ # w ", +" s & 8 y M N H d g - .=.. [ < C#D#E#F#G#$#>#,#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@y@w@H#I#J#K#-.. < | ] 6 ] 2 < X } c 3 3 3 9 $ g $ & ", +" 7 w y y M M I | g + .B ! [ < L#M#N#O#P#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Q#R#S#T# .G < ] | # - ] ! 9 ` } _ c 3 9 $ # # + ", +" s w w y M H H P 6 , U { ! [ < _.U#V#W#X#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Y#Z#`# $.$+$=.[ ] - - 6 ] , Y } } 3 3 3 9 V $ # q ", +" l 7 w y M M I j g G S { [ < ] f#U#@$#$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@$$$$%$&$*$=$S ! ] @ 6 ] - , m #.c *.c 3 3 9 ; # = ", +" + 8 y y 8 H I j ^ Q -., 1 < ] f#-$;$>$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Y#,$'$)$4.! 2 ] - 6 ] . 6 ` c 3 *.3 9 9 - $ = ", +" + & 8 y M K I j 9 -.Q . [ 2 ] (.k+!$~$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@{$]$^$/$, 2 | ] 6 ] , ; %._ c 3 _ 9 V $ ; = ", +" , + w 8 8 M N I j ; S =.. [ 2 ] f#($_$:$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@[$}$|$1$G [ ] f ; - ! ) ` c #._ c 3 9 $ ; = ", +" , F 8 8 M M M d 6 $ U =.. 2 ] | 2$3$4$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$$$)#5$6$7$G [ | 6 # - [ < 3 ` } 3 c 3 9 6 ; = ", +" 8 * 7 w M 8 K | 6 = U B 1 < ] 8$9$0$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@a$b$c$=.[ ] - 6 6 < 5 Y *.} ` 3 3 9 9 # = ", +" ! + w 8 M M H | g : U =.[ 2 | e#d$e$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@$$`+f$g$-.[ ] 6 6 ; < ! 3 ` ` c 3 9 9 ; $ = ", +" l h & 8 8 N H | 6 ! S G 1 < @ - h$i$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$$$j$k$l$m$[ ] 6 # 6 ) . 9 #.} } c 9 V $ - # ", +" s h w M 8 8 H | X , U G [ < | 8$n$o$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@p$q$r$s$! | # 6 ; ] . 9 } ` ` 3 c 9 ; ; - ", +" * + 8 8 M ! I | f B S ~ 2 ] ] - t$u$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@v$w$x$y$. @ 6 # 6 | , c *.} c 3 3 9 9 # - ", +" + h w 8 M H H j 9 B -.{ < ] - - <.O.z$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$A$B$C$5.! < - 6 ; - . 9 c ` *.c 3 9 9 $ # ", +" : + 8 8 8 H h 6 6 Q -.! < ] - - <.D$E$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@)#F$G$H$. ] - 6 ; - . ; c *.c } 9 Y $ g $ , ", +" : h & 8 M l I | 9 -.Q ! < | ] 6 I$J$K$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@$$L$M$N$. ) 6 ; ; | ! ; c } 3 3 } 9 9 # # >. ", +" h : w 8 M I I j 9 -.=.[ < @ 6 - I$O$P$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$Q$R$S$T${ ) - 6 ; - [ ) %.} #.c c 9 9 $ - , ", +" : F l 8 M I I j ; Q Q [ 2 | - - U$O$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@$$V$W$X$G < - ; 6 - 2 < 9 #.c *.c 9 9 $ # >. ", +" ) + 8 8 M H d - - -.B ! ] ] ] ; U$Y$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$$$a$Z$`$B [ - 6 ; 6 * [ Y } c 3 c 9 ; ; - , ", +" : + w 8 H H I V - S G [ < - - - %D$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@.%+%@%=.< - ; 6 ; < l Y c *.c c V $ $ # >. ", +" : F w 8 M I | 6 = S G 1 ) | # j #%$%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$%%&%`$=.[ - 6 ; ; ) . 3 #.c 3 > 3 9 # # , ", +" J F l 8 N h I g J S { [ ) - d @ *%=%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$$$-%;%@%-.< - 6 ; ; ) ! c } c _ Y 9 9 $ # , ", +" : : l 8 l I | g + S { [ | 6 6 ] *%>%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$,%'%)%-.2 - ; ^ ; - . c } } 3 c 3 9 $ # , ", +" ) F 7 8 H I j 9 [ -., < ] 6 # ] !%~%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@{%]%@%S [ - 6 ; 6 - ! 3 } c c 3 3 9 ; $ , ", +" = ) h l l I | Y 8 -., e @ j ; ] ^%/%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$(%_%:%S [ 6 ; ^ ; - [ 3 } c 3 _ 9 9 ; # M ", +" ) J + 8 H H | 3 . -.. 2 | 6 ; 2 y$<%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$@#{%[%}%S ! # ; ; f - ! 9 } c _ c 3 9 ; $ , ", +" : ) l l l I | 3 , Q , e - ; # 2 |%1%w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@2%3%}%U [ - ^ 3 9 # * 6 ` } c 3 _ 9 ; # , ", +" ) i l l H h T 3 , =.. 2 ] 6 6 [ .m$w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$4%5%6% .1 # f > m - * 3 } } 3 3 3 > ; $ , ", +" J ) + l l I j 9 G Q ! ] - # ; [ .-.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@7%8%9% .! @ 6 3 > T * ; } } c } } 9 ; $ , ", +" ) = F l l I | ; , =.[ ) - 6 ; ! .Q w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$0%a%b%5.! # ; 9 ^ 6 : 6 } } } c > 9 $ # M ", +" ) J F h l I j c G B [ ] - # 6 . .Q w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@c%d%e%f%g%- ; ^ 3 6 * g } } c > c > 9 # , ", +" ) i l F l I | c G B 1 ] - 6 ; . .=.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#h%i%j%k%# f 3 _ ; h $ } } c } 3 > $ $ , ", +" ) F + l l I j 9 B G [ ] ; ; ; . .B w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$Y#l%m%n%o%- ^ 3 3 9 * 6 c } } 3 3 9 9 $ , ", +" ) i F l l I T 9 G G [ | # 6 ; , .E w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#p%q%r%5+- m > 3 ^ * ; } s%3 > 3 > $ ; ~ ", +" ) ) + l h I | 9 B ~ 2 - ; ; 6 , .G w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$$$t%u%v%w%6 ^ c _ ; h ; c } ` 3 _ 9 $ # , ", +" ) i : l l | j 9 B , e @ 6 ^ f ~ .E w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@$$##x%y%I$- 3 _ 9 3 * - } } _ c c 9 ; $ ~ ", +" ) i F l h I | 9 G , 2 - 6 ; ^ , ;.G w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#w@z%A%B%6 3 3 > 3 * 6 } ( s%c > 9 $ ; ~ ", +" ) = q l J I j 9 B . ] - ; f ; ~ .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$Y#C%D%E%F%- 3 _ _ 9 < - } } } } c 9 $ ; ", +" ) - + l h I - 9 G . @ - ; ^ f , .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#G%H%I%. ; 3 > } > < - ` } c c / 3 ; $ ", +" h - = h h | j 9 B ! | # 6 ^ 9 , .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$w@a$J%r$F%6 3 _ > 3 h ; c } } c c 9 $ 6 ", +" < = F F h I g 9 G . @ 6 ; ; 3 . .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$$$##K%L%M%; 3 > } 3 * ; } c } } 3 > ; $ ", +" + | F l h | j > G l ] ; ; 9 3 , .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@$$w@4$(+m.# c 3 > 3 : ; ` } } > c 9 $ ; ", +" [ = q F I | 6 c , 5 ] ; f ^ ^ , .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$w@<$N%O%P%; _ 3 ( > < - s%( } c / 9 6 # ", +" [ - F F h I g > ~ [ ] - 9 ^ 3 . .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@$#<$$$$#Q%R%S%9 3 _ > c ) ; } ( } } c 9 $ ; ", +" l @ F F ) | g 3 , ! - ; 6 ^ 3 8 .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$w@<$T%U%V%; 3 / _ c @ $ } 0 } } > 9 $ ; ", +" [ - q J J I g _ , l - 6 ; m 3 ! .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$$$W%X%Y%Z%6 c ( _ > ) f } ( } c / Y $ ; ", +" . - = J I - T c 8 1 @ 6 ^ 3 ^ * .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@$$`% &.&+&; > _ ( c ] - } 4 c } c 9 ; $ ", +" ! - i i J | 6 c 5 [ - ; 3 3 > [ .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@w@r@@&#&$&; 3 > ( ` @ 9 } } } > c > $ ; ", +" , - - = | | g _ l ! - 6 ^ c 3 5 .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$<$w@%&&&*&k%; _ > ( c @ 9 } } } } 9 9 ; $ ", +" , 6 a J h j g c l [ ] ; _ 3 9 [ .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#=&-&;&. ; c > ( c @ Y } 4 } c / 9 $ ; ", +" , - = J - | ; c * [ - ; 9 3 ^ 2 .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@>&,&'&l ; > c ( 3 @ V } } } } c 9 $ ; ", +" ; - i @ - T 3 : [ | ; 3 > 3 [ .-.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@Y#)&!&~&! ; c _ > c @ ; } 4 s%} 9 > 6 a ", +" - $ h i j # ` ) [ - 6 ^ 3 3 * U -.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Q${&]&^&! ^ > } ( c @ Y } } } > c 9 $ # ", +" - - - | | ; c - [ - ; 3 _ > < U S w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@/&(&#&_&[ ; > } ( 3 @ 9 } ( s%c > 9 9 = ", +" # - - i | g / ; [ - f 3 _ 9 2 U S w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$Q$:&O$s$1 ; 3 _ ( 3 ) 9 } } } c c 9 ; = ", +" ; ; | - - - s%; ! - m > c 3 2 S U w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<&[&}&|%[ ; > c ( _ * 3 } 4 } > c $ 9 : ", +" - ; - a | g 3 9 [ - m _ } > ] S .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$|&1&2&U [ ; _ } ( 3 * #.4 } } c > 3 $ @ ", +" - ; - i - g 3 9 [ # f > } ^ ) S .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@3&4&5&S [ 9 3 ( _ 3 * c } 4 } c _ 9 $ ) ", +" - ; ; - | ; c _ * 6 9 3 _ _ @ -. .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$6&4&7&S [ ; > } ( 3 * c 4 } } _ 9 > $ l ", +" - 6 - - - T 9 ( < 6 9 _ } _ - -.;.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@8&9&5&S ) ^ c ( _ > < c 4 } } } 3 9 ; l ", +" ] ; ; | | $ #.} ) - _ > 0 _ - -. .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@0&a&*&-.) f > } ( f : c 0 } } c > 9 $ , ", +" | ; # - j ; 9 } ] - 3 _ ( } # =.;.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@b&c&7&-.] 9 _ ( } ; | _ } 4 } } > 9 ; , ", +" ) ; - # T ; 9 } @ - m _ 4 } # =.;.w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@d&e&f&Q ] ^ ( } 4 # - } 4 } } c > 9 $ ", +" ) ; ; - g ; 9 4 | - ^ _ ( *.; =. .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@g&h&T$=.@ 9 _ ( } # 6 } } } } } c 9 ; ", +" ) ; ; - ; - Y ( - - f _ } 4 ; G .w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@i&j&/$G ] 3 } ( } - ^ } 4 } } > c $ $ ", +" * 6 ; ; 6 ; 9 } 6 | ^ c ( k&l&m&n&w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@o&p& .{ | ^ ( } 4 @ 9 ( } 4 } } 9 9 $ ", +" [ 6 ; ; - V 9 } ^ | ^ q&r&s&t&u&v&w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w&x&y& . ., | 3 _ 4 } ) > } 0 } 4 c > 9 $ ", +" [ ; 6 ; V ; 9 4 3 ] z&A&).B&C&D&E&w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@F&G&U . - m ( } _ : c 0 } 4 c c > $ ; ", +" ! ; 6 # 6 6 g / } ) H&I&} ).J&K&L&w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@@#M&N&O&|%! # 3 _ 4 _ ) 3 4 } 4 } > c $ # ", +" 8 6 - ; - V ; } _ | z&P&Q&R&} >.S&w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$w@T&U&V&[ - _ } 4 } ) *.4 } 4 _ c > 9 = ", +" , # f ; ; g 9 } ( @ 9 W&X&} Y&Z&`& *w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@+#.*+*@*#*[ ; > 0 } _ @ c 4 0 } } > c $ = ", +" 6 6 ; ; V 9 _ 4 - f $*%*&***=*>.(+-*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$Y#;*>*,*'** ; c ( ( 3 - c 0 } ( c c 9 9 : ", +" 6 f ^ ; ; 3 ` 4 ; ; )*} !*~*{*]*^*/*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@<$(*_*:*U&5@] ; > 0 } ; ; _ ( } } ( c > ; 7 ", +" - f f 3 ^ Y } 4 ^ 6 <*[*} }*|*1*f%2*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@@#p%Z@3*4*5*] ^ } ( } # ^ } } 4 0 } / c ; 8 ", +" - f ^ 3 9 g } 4 3 ; q&6*7*8*9*0*a*b*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@(*c*d*e*f*G | ^ _ 4 } @ 9 } 0 } ( } c > ; , ", +" ] f ^ 3 6 3 c _ } ; 3 )*g*} h*. f%i*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@j*k*H.l*4.G @ 3 ( } 4 ) 3 0 ( } 0 / } 9 $ ", +" ) g f 9 ^ 3 c 4 ( 6 ^ 4 } 4 _ ! m*n*o*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@p*q*z.r*s* .. ] 9 _ 4 } @ 3 4 0 ( } } / 3 # ", +" * 6 m 9 3 3 c } 4 ; ^ } 4 } _ * t*u*v*w*Y#w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@x*y*z*T$s*;. .. - ^ ( } 4 ] } 4 } 4 } } 9 > # ", +" . 6 ^ 3 3 > *.} b ; ^ 4 } 4 _ @ A*B*C*D*E*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@F*p&,.,.;.S ! # 3 ( } _ - 3 4 0 } 4 > } 9 = ", +" ; m ^ 3 f c } 4 ^ f } ( n _ ; G*H*I*J*K*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@L*M*N*O*P*w@w@Q*R*S*4.,.,.>.;.;.-.2 ; 3 ( 0 ; ; } ( } 4 } } > 9 + ", +" j ^ m > Y 3 4 4 3 ; } ( } ( ^ . V&T*r$U*!+w@w@w@w@w@V*w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@W*X*Y*Z*`* =.=+=@=#=$=5.,.,.;.,.,.;. .B 2 6 _ ( } ; 9 _ 4 0 } 4 > c $ [ ", +" @ m 3 3 3 3 _ 0 } ; _ 0 4 } > ] ~ V&%=&=}%*===-=;=>=,='=w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Z w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@w@Z Z ~ ~ ~ ~ ~ ~ ~ { ~ { E { E E =.=.Q -.m$)=!=~%~=]&{=]=)%^=s*,.,.,.,.,.;.;.-., d > } 4 _ ; 3 4 4 } 4 } _ c > , ", +" ] f 3 ^ > ` _ ( } # c ( } 4 _ ; < ~ Q U ./=(=U&_=:=<=[=}=|=[=1=2=3=<=4=5=6=%=4. . . .U S U S S -.-.-.-.-.Q -.=.Q Q =.=.Q Q =.Q E =.=.Q =.Q =.Q =.-.Q -.-.-.-.S -.S S S U . . .,. .,. .,.,.,.,.,.>.,.7=8=9=^=0=^=9=a=s*,.,.,.,.;.,.;.S G ! ; 3 ( } } @ c 4 } 4 0 ( } 3 ^ ", +" 2 f 3 _ c _ } ( 0 ; _ 4 4 0 _ > - 2 . G S .s*b=}%c=d=e=f=g=N.h=i=i=e=@*j=b=s*,.,.;.;.;.;.;.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.;.,.,.,.,.;.,.,.,.,.,.;.,.,.;.;.;.;.;.S =.. < # _ } 4 0 : c 0 4 } 4 } > 3 # ", +" ! f 3 3 3 > } 4 0 ; > _ 4 } 4 _ ; - [ . -. .;.s*/$H$(=k=l=k=k=k=l=l=l=H$/$/=;.;.;.;.;.;.;.;.;.;.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.;.,.,.,.,.,.,.,.,.,.,.,.,.;.;.;.;.;.;.;.;.;.;.;. .;.;.;.;.;.;.;.;.;. .S =., [ - ^ } 4 4 } @ } 4 } 4 } _ } 3 = ", +" f 3 _ 3 > } 4 0 ^ > } 4 0 } _ c # [ { -. . .;.;.;.,.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.>.>.,.;.;.;.;.;.;.;.;.,.,.,.;.;.;.;.;.;.;.;.;.;.;.;.;.;.,.;.;.;.;.;.;.;.;.,.;. .;.;. .;. .;. .;. . . . .U . . . . .U . . . . . . .U U S -.B . [ ) ; _ } 4 } > 6 } 4 0 } 4 ( 3 > * ", +" ; m 3 3 _ c 4 4 > 3 } ( } 4 } > - ! { Q S . .;. .;.;.;.;. .,. .,. .,. .;. .;.;.;.;.;.;.;. .;. .;. . . . . . . . .;. .;. . . .U .U U U U S S S U S S -.S -.-.Q Q -.=.B =.B =.G B G B G B G =.B B =.B =.=.Q Q -.-.-.-.-.-.Q B { . [ ) - m _ 4 4 4 ; ^ 4 4 ( 0 _ } _ $ , ", +" - f 3 > } 4 } 4 } 3 _ 4 0 } ( ^ - ] ! , G Q Q -.S U U U U .U U S U S -.-.-.-.=.=.=.B B B G G G G G G G { G { , . . , . , . 5 . 5 ! 5 [ 5 [ 5 5 * * 5 2 5 : * * * * ) [ 2 ) ] ) ] < [ [ [ e * [ 1 5 ! ! 5 . . . , , , , 5 ! * < @ - # ^ } 4 4 4 _ @ } } 4 4 } 4 _ c > ", +" ] 3 3 _ } } ( 4 0 > _ } ( 0 _ _ 3 ; - ] < [ ! . , ~ G { =.{ G =.G { , , ~ , ! . 5 ! [ [ [ [ 2 2 2 2 ] @ - @ - ] # @ ; # ; # ; ; # ; ; ; ; ; ; 6 ; ; ; ; ; ^ ; ; ; 9 ; ; ^ ; 9 ; ; ; 6 - 6 - - - @ ] - @ | ] - ] | @ | | ; ; ; > c _ _ } 4 4 4 b } ] _ 4 4 } 0 ( c > # ", +" [ ; 3 _ > 4 } 4 0 > 3 ( _ 4 } ( _ _ 3 > ^ ; ; ; - @ ] @ ] 2 2 2 ) 2 ] < ) @ @ - @ - - - # 6 ; 6 ^ ; 9 > f 3 > _ _ _ _ _ _ _ } _ ( _ } _ ( } _ 4 } } _ } _ ( } ( _ ( 3 _ ( _ } _ } c > c > 3 _ 3 _ > c > m _ c _ > } _ _ ( 4 4 4 0 4 0 0 b k 4 4 4 # } 4 } 4 0 } _ > | ", +" f c _ ( } 4 0 4 > # @ # # # # # # # ; 9 > 3 > } c > 3 3 3 > ^ > 3 > ^ > _ 3 _ > } > _ _ _ } ( } ( _ } ( } ( } 4 4 4 ( 0 4 4 4 4 4 b 4 4 4 k 4 4 b 4 4 4 4 4 4 4 4 } 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 4 _ > 3 9 ; # # - = ' - @ ) @ @ ^ } } 4 4 } ( ( _ 9 5 ", +" # c 3 _ _ ( } 4 > * : @ - @ - @ - - = @ ) ) : : * : * : # ^ 9 > > _ } } } ( } 4 } 4 } 4 ( } 4 } 4 4 4 4 0 4 4 4 4 0 4 b 4 b b 4 b 4 b 4 b 4 b 4 b 4 b b 4 b 4 b 4 b 4 b 4 b 4 k 4 k 4 k 4 k 4 4 k ( _ ; f ; ^ c } 4 4 k 0 k k k k k k k k o o b k 4 4 0 } 4 _ c ; ", +" @ '._ _ 4 } 4 0 o k 9 ! . . . ~ . ~ . { 1 ! l ] - ; 9 9 ; ' ) : h @ ' ; > _ ( } 4 } 0 ( 0 4 b 4 b 4 4 b 4 b 4 b 4 b 4 b 4 b 0 k 4 b 4 b 4 b 0 b 0 k k 0 k k b 0 k k k k k 4 k b 4 b 4 4 _ _ > 3 ^ _ 4 0 4 *.; # ] < [ [ 1 1 [ 1 < e ] ] - 6 0 o k 4 } 4 4 _ 4 3 # ", +" [ f c } ( } 4 0 b o - ] j ] ] ] ] ] ] ] < [ [ 1 1 ! . . ! 1 ) 6 3 > 9 @ s l : $ _ ( } 4 4 b 4 b 4 b 4 b 4 4 b 4 b 4 b 4 b 4 b 4 b 4 k 4 b 4 b k k k 0 b k 0 k k 4 k k 0 k b 4 0 ( ^ ^ ^ ( 0 4 _ 6 < ! . ~ ! [ [ ) - j ; 6 ; 9 3 _ _ c ( } _ ( o 4 4 b 4 0 4 _ 3 : ", +" 6 _ } ( 0 } b k b 4 3 ^ ^ 3 ^ ^ ; 6 ; - j - - @ - d | d ] I [ 1 [ < ; 3 _ 9 s 5 ; ( 0 ( 4 4 4 b 4 4 b 4 b 4 4 b 4 4 b 4 4 b 0 b 0 b 4 b 4 k k 0 k 4 k 0 k k b 0 b 0 b 0 b 4 _ _ 4 0 _ ] ! ~ { . ! < d ; - 6 ; 6 m ^ m > } } ( } ( 4 } 4 4 4 o 0 4 4 4 0 _ _ $ ", +" - m _ } ( 0 4 b o 4 _ _ } ( *._ _ c _ 3 ^ f ; f 6 ; - - 6 - ; # 6 | ] ] ] ; c > l * _ ( 0 4 4 4 b 4 4 b ( b 4 4 b 4 4 b 4 4 b 4 4 b 4 4 b 4 b 4 b 4 b 4 b 0 b 0 k 4 b 0 4 k k _ ] ~ { ~ ! 2 d - - 6 ^ 6 9 ^ 3 } > ( ( 4 } 4 4 4 4 4 b 4 4 b o 0 4 b 4 ( 4 _ ; ", +" * m 3 _ 4 ( 0 k o b ( } 4 } ( } 0 _ _ _ _ _ c _ c _ 3 ^ ^ f ; 6 ; ; 6 ; ; 6 ; 6 4 ' * _ ( 0 4 4 0 b ( 4 b _ b 4 ( 0 4 4 0 ( 4 b 4 4 4 b ( b _ b 4 b 4 4 b 4 4 b 4 b 4 b 0 b ^ . { 1 2 ] - 6 ; 6 m ^ _ 3 _ 4 } 4 4 n 4 0 k 4 b 4 b 4 4 b 4 o b 4 k 0 4 n ( _ | ", +" 6 > 4 } 0 4 k b b 4 _ 4 ( n ( } m=n=n=o=*.*.} _ } _ } _ } _ c _ 3 3 3 9 3 3 3 9 4 = # _ ( 0 _ 4 _ 0 _ 0 ( n _ 0 ( _ 0 _ 0 ( _ 0 _ 0 _ 0 4 n 4 0 _ b 4 4 4 b ( b 4 4 b b ^ { e 2 - 6 ^ 3 m _ } _ 4 } 4 0 4 0 4 n 0 n m=n=p=4 b 4 b 4 b 4 o k 0 k 4 4 _ 4 m * ", +" - 3 } ( 0 ( b b o 4 ( _ _ 4 } 0 m=q=r=r=r=q=s=n=m=m=*.p=n _ 4 } 0 ( } ( _ } _ > } 0 ; _ _ _ 0 ( 0 _ 4 ( _ 4 4 _ 0 4 ( 0 _ 4 0 ( 4 _ 4 _ _ 4 _ 4 0 _ 4 0 _ 4 4 _ b _ 4 0 2 ] ; f _ 3 _ } ( _ 4 4 n 0 n p=m=n=n=n=t=u=n=n=m=b 4 4 b 4 b b o 4 0 0 4 4 0 ( ^ . ", +" : 3 _ } 4 0 4 k o 4 _ _ ( _ ( } ( '.'.n=t=v=r=r=r=r=r=s=n=n=m=m=_ 0 4 4 4 4 4 4 } b 0 ^ m _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ *._ n _ ( n _ _ 4 _ 4 0 _ 0 4 _ _ _ _ 3 _ _ } ( } 4 0 0 p=m=n=n=n=s=s=s=u=n=n=m=p=n 0 b 4 b 4 b 4 4 b o 0 k 4 4 0 ( _ ^ , ", +" 5 f c ( _ 4 4 b o b _ ( _ _ ( _ ( } _ } } n '.m=n=v=s=r=r=r=r=s=m=0 4 4 b 4 4 4 4 b 0 ; ^ 3 ^ ^ ^ 3 ^ 3 ^ ^ f 3 > ^ ; ; ; ; - - - 6 ; ^ 9 _ 3 _ _ 3 _ _ _ 4 _ _ 0 > _ 4 _ } } 4 } 0 4 4 m=t=q=q=s=s=n=n=p=n 0 0 0 0 k 4 b 4 4 b ( b b o k 4 4 0 b ( 0 _ ; ", +" l - > *.( 0 4 k b 0 4 4 _ > 3 ( 3 _ ( _ 4 _ } } } n _ m=m=w=n=m=n 4 4 4 4 b 4 b 0 4 @ ; 6 - 6 6 ; 6 ; # | < [ ! [ [ [ [ [ [ [ ! [ ! [ ! 5 ! 5 < - ^ ^ > _ _ _ _ ( _ * b } _ 4 } 4 _ 0 4 0 m=n=m=p=n 0 k 0 4 b 4 k b 4 b ( b 4 b b 4 b ^ _ 0 b _ b _ 4 > # ", +" 5 h = } _ ( } 4 ^ , ^ 4 0 4 } _ _ } ( } ( } ( 4 _ 4 } 4 _ 0 _ 4 } 0 ( 0 4 0 4 4 4 , @ ] ] j @ - d 2 . ! < | # > c _ _ _ } _ _ } > c > 9 # - ] ) ! ~ , ! - ^ ^ 3 _ _ ; = k 4 _ 4 } 4 0 ( 4 4 4 0 0 0 b 4 b 4 4 b 4 4 b 4 4 b b b b # 5 [ _ 4 b 0 b 0 4 ^ # ", +" . - 8 > } } 4 0 ( G [ < ; 4 0 k ( _ 3 _ _ / _ 0 _ } 4 _ 4 ( 0 } 4 _ 4 4 4 4 4 _ , , ) < ] ] [ . . ) ; } ( 4 4 k b k b b k b k b k k b k 0 4 4 _ 9 # ) , B B [ - f > c - 2 k 4 _ 4 } _ 0 4 _ 0 4 4 4 b ( b 4 b 4 b 0 b b b k _ * ! ' ^ _ 0 4 0 4 b 0 ( 6 # ", +" , - w L ( _ } ( } , .=.G [ : ^ } k 0 4 } _ 4 _ _ _ 0 _ ( } ( 0 _ 4 0 4 0 ( ^ B ! 5 ! 1 { ~ [ ^ } b k o o o o o o o o o o o o o o o o o o o o o o k k ( # < , =.~ - ; ^ # 5 _ k _ ( 4 _ 0 4 4 4 _ 0 4 4 b ( 4 0 b b 0 > 5 , @ # > ; ^ 4 } 0 4 b 0 b ^ - - ", +" . ] 7 w / } ( } } 5 >.;.;. .-.G ! - ^ ( 0 0 4 4 _ ( } _ } _ 0 _ 4 0 _ 4 ( @ B 5 . { . =.[ ; _ 0 b o o b o b o b k b k k b k b k k k k b b b b b b b o o k ( *.^ [ =., | 6 ; 5 # 0 4 _ 4 } 4 0 ( b _ b 4 b b k b ^ @ , 5 ) - @ - ] - 6 0 4 k 4 b b _ 6 - - ", +" . ] = y 7 / 4 0 ( - .;.;.,.;.,. .-.B . [ - _ _ 4 0 0 4 4 4 _ 4 4 ( 4 ^ , G , { =.=.{ < 3 } } ( k } _ } _ } > } ( } 4 4 } 0 4 0 ( 4 } 4 0 4 0 4 0 0 4 o k n k 0 > - G =.< - 6 @ ) ( 0 4 4 4 4 0 b b b 0 _ ^ ' 2 2 @ @ ] [ 2 e 2 d ] ; k 4 b b 0 > - 6 | - ", +" . d 2 8 z M - } 4 *.B ;.;.;.;.;.;.;.;. .U -.G ! l ] # 9 _ ( 4 ( > @ , G , =.=.-.-.{ - m } T I O 0 6 ; ; - - - - - - ^ ^ ; ; 3 ^ 3 ^ ^ ; 6 ; 6 ; ; # ^ k 0 - 0 0 k 0 ; , -.. d - ; @ : ; ( 4 b _ ^ @ 5 @ @ ; @ ] @ 2 [ 1 ! [ [ [ [ ] ( o k > ; - 9 g - | i ", +" d ] w y y J d g } ^ B .;.U U . .;.;. .;. . .S =.G . 5 . , G , , , E -.-.-.-.{ j _ V I N N N s%- | | ] < [ < d 2 d ] ] ] - - # d ] | ] ] - ] 6 # ^ 4 } P c } 4 k 0 ^ G U ! ] ] # ; # ] ' @ @ ' # @ # @ ] d ] 1 . ~ { =.Q =.G ) 0 b 4 8 - V Y g g - | i ", +" d @ 8 y x F - T f s = - 5 G G =.Q -.-.S U . . . .U U S -.B B =.=.S -.S S S =.] '.g H N Z Z K 4 ) ] d ] < d < d | - - 6 ; ; f ; 9 f 9 > 3 _ > } _ 4 k 0 j } } } 4 4 0 - -.-.[ 2 ] | - 6 6 ; - ] ] W ] ] [ { G -.=.-.B . * ; _ 0 k # # J c ` c g 6 | J J ", +" d 2 w x y v T 9 6 , -.B ! # ; 3 ; # [ . { =.-.S U .U U U .U U U U U U S -.! ` g I H N N N P 0 - 6 - - 6 ; f 9 ^ _ } _ } } ( 0 } 4 4 } 4 4 4 0 4 4 k 4 - } } } ` } 0 0 * .=.[ < < d 2 2 e 2 2 e ! , =.=.=.~ ] ; _ } } _ c - . - ( F ; ` ` #.6 j | J F ", +" 2 2 8 z y u a j V - # U ;.S B l - ^ _ #._ ; - ! , Q -.S U .U U U U U .=.{ 6 3 | H K H K K T k > 4 4 4 4 0 4 4 4 b k 4 b b 4 b b 4 k b k k k k k k o 4 c 4 4 0 } } } 4 _ -. .1 [ [ [ [ ! . { =.=.G { [ f } ( } ( ^ = ! B -.S .G _ 8 9 #.3 Y g - | h J ", +" e 2 w y x w $ T 3 6 # ;.;.>. .;.U Q 5 ) ; c > ( *.3 - * . { =.-.S .U S { . _ 6 | J | | j V x=b b o b o o k o b o o o o o o o o o o o o o o o o b o o b k 4 4 4 4 4 } 4 4 B ;.=.[ [ ! { -.-.{ [ | 3 _ } > 9 # . B S . .-.S -.U -.> h c 3 Y Y 9 j | F F ", +" w=* w z x w | 9 Y f > Q U S .;.;.;.;.U S B , ) $ 3 _ _ } } ; ] G -.U -.1 ; 4 9 ; V 9 9 x=x=4 o b o o b o o o o b o o o b o o o o o o b o b o b o b o o b b k b 4 b 4 4 4 , .S [ ! ~ =.1 ; c _ > 9 @ . B S .;.;.U -., , ! , Q B ; | 3 3 Y 9 T - J h + ", +" 2 ] 8 y x w | g ; Y } : G G G G =.-.S . . . . .S Q , s ; > } ( 6 . -.{ ; } 0 4 } } } } ( 4 k o 9 / } _ ( } _ / 0 _ 4 4 4 4 4 4 4 4 4 b 4 0 4 0 ( 4 b o b b k o k k 4 k 4 8 .U < 1 [ m > > @ , Q S .;.>. .-.B 8 2 ) ) < [ ! S * J V 3 3 3 9 6 | i h + ", +" w=2 x z y l i j g c } _ [ ! ! ! [ 5 l ! 8 , B -.S . . .S Q * > _ - [ < ( 0 k 0 4 4 4 4 0 0 b b k k b k b k b k b o b k o b o o b o b o b o b o b o o o b o o b o b k k k ) =.Q ] < # 9 * -. .;.;. .-.G l : # ; ; ^ ; - | 2 ~ -.3 | 9 #.3 3 g ; | J + + ", +" e 2 y y x l | j 9 V } 4 ) [ [ ] ) | - # - - - - - : 5 ~ B U .-.; } ; 9 4 k o k 0 0 b 4 4 4 0 o b o o o b o o o b o o o b o b o b o o b o b o b o b o o b b o b o b o k k # * 1 - - ^ B ;.>.S B 5 @ $ ; ^ > 3 _ ( > c ^ j < G =.} | c #.3 Y 9 j | F l h ", +" e 2 8 y y 8 P - V g } 0 ; ) ] - ; ; ^ _ *._ _ _ 3 _ ^ 9 ^ # , U U = *.} 4 b k k k k 0 4 0 4 4 o b 4 k 4 k k 4 k k k 0 b k b k b k b k b k o b k b b o b b b o o b k k k b 3 - ] ; # =.>.S , = - 6 3 _ _ ( } ( 4 } 4 } > - < -.h - - c #.Y Y g - | F 7 l ", +" e 2 w y y l | j 6 V 3 4 } - - 6 9 _ ( } 4 4 4 4 4 0 ( ( _ } ^ @ -.S ; 4 4 4 b o o k k k 0 0 k o b k b k b k k k k k k k k k k k b k k b 4 b 4 b k b b o 4 o b k b o b o 0 3 ; ; ; Q .B 2 # 9 3 _ ( 4 4 4 4 0 b 4 4 4 _ j ! -.$ h Y #.3 Y Y f g i l l + ", +" 2 [ y z y l | T | V 9 } 4 - - ^ 3 } 4 4 4 k 4 b 4 b 0 0 4 0 4 } @ S G 4 4 4 4 k o b o k k k 4 o ( 4 b 0 k b k b b b o b o b o b k k k k k 0 k k 4 b b o 0 k k k k b o 4 _ 3 f 9 , .G ] # f } 4 4 4 0 k 4 b 4 4 b 0 _ _ ] G =.9 F c 3 Y Y g V - | l l l ", +" e 2 x z y l I V j 6 V *.0 ^ - f > 4 } 4 b 4 k k k 0 k k k b 4 4 } 2 U ^ 4 4 0 4 0 b o o b b o o k 4 k b 4 k 4 b 4 k k k 4 k k k k k k 0 k k b 4 b 4 o o k k b o k o 4 *.^ ; 9 ^ -.Q ) ; c } ( 4 b 4 b 0 b 0 b 4 b ( 0 ^ | =.M i # ` #.f Y Y 6 j J l l w ", +" e * w z y h I | T j g c 4 } - 3 3 ( } 4 4 b k 0 k k k k k 0 k 4 4 _ , B _ 0 4 _ 4 4 b o o o b o o b k b k o k k k k k 0 b k 4 k k 4 b 4 b 4 b 4 b 4 o b o k o b k 3 6 6 ; ; 3 5 .* # 3 ( 0 4 4 k k 0 k k k k 4 4 4 _ f ! -.- l 3 c #.3 Y 9 g - J H l 8 ", +" [ [ y z y l | j j g g V ` 4 ; ^ 3 ( 0 4 4 b 0 k k k b 0 b k b k b ( ; U [ _ 4 0 _ _ _ 0 b o o o b o o o o b o b o b o b o o o b o b o b o b o b b o b o k b 4 _ - ] | # f f . S Q @ 3 _ ( } b 4 b 4 b 4 k 0 k b 4 4 _ ; { E - - 9 %.3 $.Y 3 g | J l l w ", +" 1 : w y y l I T | T V g 3 } ; ; 3 _ } 4 b 4 k k k b k k o b k k 4 4 _ * S < 3 4 _ 3 _ _ _ 4 k b o o b o b o o b o o b o o b o o b o o b o o b o b o b 0 ^ # d 1 1 2 - 6 ; . Q .* # 3 } ( } 4 4 4 b 4 b 4 b 4 b 4 4 _ ] Q [ J 9 #.f Y Y Y g 9 - J h l 8 ", +" 1 5 y z y 8 | | +.j j g Y 0 ( 6 3 _ 4 _ 4 b k 0 k k k k 0 k k k b 4 0 > . -.* ; ( 3 ^ 9 f 6 ^ f 0 b o o o b o o o o o b o o b o b o b o k b k 0 0 _ _ ! , { { . ! ] - @ , S .G < 6 9 _ 3 4 0 ( 4 4 k 4 b 4 4 b 4 _ _ ! -.9 h c c #.Y f V f g | I l l M ", +" 1 2 y x y M P | T T T g V ` 0 g ; } 4 0 4 4 b k k k 0 k k k k k 4 b 4 _ ; , S [ ; } ^ # 6 # - - - ^ _ _ ( _ ( 4 4 b ( b _ b _ ( _ _ ^ ] ] 2 ! { G =.-.-.-.=.{ . 1 # ] G -.;.=.[ ] - ; f 3 _ _ 4 0 _ b 4 b 4 b 4 4 _ ; { ~ $ | c 3 #.Y Y f Y ; - i h l 8 ", +" ! [ w z y H h j j j T T V X 4 ` # c } 4 4 b 4 b 0 b k k k k k k k 4 4 4 m - G S , ; c _ # | ] d 2 < < < d ] | @ ] ] ] 2 [ [ ! . { =.=.=.-.-.S S .U S S =.=.! d ) ! B U ;.-.G ! < ] - ; 6 3 3 _ ( 0 _ b 4 b 4 4 0 _ 2 Q | l 3 ` Y Y f Y Y V g - J l u M ", +" . * w z y 8 K | T j T j g V ` 4 f 9 _ 4 4 4 b 4 b 0 k k k 0 b 0 b b 0 4 _ ^ | ! S -.: f *.*.9 # < [ 1 1 [ ! 1 . ! ! . . { =.=.-.-.-.S S U .U .U U .S { < h , G -. . .U =.{ . 1 < ] | - 6 ^ c _ ( 0 ( 0 4 b _ 4 ^ { =.$ i 3 ` m Y V Y f 9 g i J h v , ", +" . * y z y 8 | P j T g T j g Y 0 9 ^ } } 4 4 b 4 b k k k k k k k 0 b ( 4 _ 3 - 2 . Q .G ) 9 ^ *.f 6 2 [ ! ! . . . Z . { =.=.=.=.-.-.-.S -.S S .S =.! : . G , Q . .;. .S Q =.{ . ! [ < ] - f 9 _ } 4 4 4 4 b _ ( ] =.< h ; x=c Y g Y X 3 9 6 - J l F M ", +" * 8 y y M K | T V | T V g V } 0 ; 3 4 n ( 0 b 4 k 0 k k k k k b 4 4 _ _ 3 # ] 1 . =.S U -.[ ) - @ - 6 # ] ] [ 1 ! . { . { { { =.=.E { { { ! [ * , ~ , B Q ;.>.;.;. . .U S Q =.{ . . 1 2 ] ; 6 3 ( } 0 b ( _ 0 _ ! =.$ h c ` *.c %.m Y V Y ; a I v l ~ ", +" : w z z 8 h | j j j T T T T ` 0 3 f _ ( 0 4 4 b 0 b k 0 k 0 k 4 b _ 0 _ ^ - d [ . { =.S U ;.U =.. * * * ) ] @ - - @ - ] d ) ] d ) < [ ! , G G G G Q .>.>.,.,.;.;. . . . .S -.-.{ { ! [ ] - ; ; _ ( _ 4 0 4 _ ; =.[ a ; ` Y #.#.c g c Y g ; | i h v ~ ", +" 2 8 y z M H | P j j T T 6 g &.} 4 f 3 _ 4 4 4 b k k k k b k b 4 4 _ ( f # ] < ! . =.=.-.U . .,.;. .S =.G , . ! 5 . . , , , G , G , G B B Q S .;.>.;.;.,.;.;.;.;.;. . . . .S -.=.{ . 1 < ] - 3 3 4 0 4 4 0 _ [ =.9 F c c %.3 Y V g 9 V 9 g a J l F ", +" 2 8 y y y H | | j P | j T T X c 0 3 9 _ 4 n 4 4 4 b ( b 0 4 4 4 0 _ _ ^ - < 1 ! { =.-.S S U ;. . .,. .,.;.>. . . . .U U U S U . . .;.;.;.,.;.;.;.;.;.;.;.;.;.;.;. .,.;. . .U -.=.E { 1 [ d ; ; _ } ( 0 _ _ ^ { [ J - c c V Y g #.V X 3 V ; | F F u ", +" 2 8 y y M l | P I j j j j g X g } } ; c _ 4 4 4 b 4 4 4 4 4 0 _ 4 _ ^ 6 ] [ ! . { =.S S . . . .,. .;. .;.;.;.,.;.,.;.;.;.,.>.,.;.;.,.;.,.;.;.;.;.;.;.;.;.;.;.;.;.;. .;. . .U -.-.{ . . [ | - m c 4 } 4 4 _ [ =.9 l c ` Y f Y Y V f Y Y 6 6 i J l F ", +" 2 & y z M M j P | +.W j W j T %.X 0 3 ^ } 4 _ 0 ( 0 b _ 0 ( 0 _ _ 3 ; | < [ ~ { =.-.S U U .;. .;. .,.,.;.,.;.,.,.;.,.;.;.;.;.;.;.;.;.;.;.,.;.;.;.;.;.;.;.;. .,.;. .,. . .U U -.Q =.~ 1 < ] 6 ^ > } 0 4 _ ^ { H F g c ` Y &.g Y Y Y Y 9 g - | F l F ", +" ] 8 z y M H J | P T T j j T T g V ` } ; c _ 4 0 _ 4 _ 0 ( _ 4 _ _ 6 - ] [ ! , =.=.-.S U . . .,. .,. . .;. .,.,.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;. .;.;. .;. .U S -.=.~ ! 1 [ ] ; 3 3 4 } 4 *.< E 9 h 9 %.%.Y Y g #.Y V g f V 9 i J l F ", +" [ & y z y N h P j T j j T P j T X V 0 9 f > } 4 0 4 0 ( n _ _ _ ; # ] < ! . { =.=.S S U U . . .,. .;. .,.;.,.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;. .,. .,. .;.;. .U S S =.{ { ! [ ] - 6 3 _ } 4 _ f { ) - Y Y #.Y g Y g Y Y 3 Y Y 6 - | F l u ", +" 2 v z y M M | P | P j j T j j T g g ` } ^ 3 *.4 _ 0 _ _ _ _ ^ ^ - d ] [ ! { { =.=.S S U U . . .;. . .,. .;. .,.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;. .,. .;. .U U U -.=.E { . ! [ | 6 ^ c 4 } 4 _ ) { 9 h Y #.Y Y Y X Y Y Y f V Y V - | F v F ", +" 2 8 y z M l J P | j P j j j ..T g g X 4 6 6 3 _ _ 4 _ _ _ ^ ; - ] ] [ ! . { { =.-.-.S U U U . . . .;. .,. .,. .;.;. .;. .,. .;.;.;.;.;.;.;.;.;.;. .;. .;. .;. . .U U S -.Q =.{ . ! I < 6 ; c _ 4 } ( 6 . | + g c #.c &.Y Y Y V Y c Y 3 9 - | F F F ", +" < 8 z y y M | P j j ..P | P j j j ..+.V } - 3 3 _ m _ _ 3 ^ 6 @ d ] 1 . { { =.=.Q -.S S U U U . . . . .;. . .,. .;.;.;. .,.;. .;. .,. .,. .;. .;. .;. . . .U U U S -.Q =.G { . ! h < - ; f _ 4 } 4 _ e . # h x=c Y X Y g V Y Y Y 3 Y V 6 - | F l F ", +" [ 5 y y y H J j P j j j P ..j P j T j X 0 g - f 3 _ 3 3 f 6 - - 2 1 ! . { { =.=.-.Q S S S S U U U . . . . . . .,. .;. .,. .;. .,. .;.;. .;. . . . .U U U U U S -.-.Q =.G { . [ < ] - 6 3 > } ( } 0 # ! 9 F 9 %.Y #.%.m Y V f Y Y Y Y 3 g - i F l u ", +" e w y z y M | P | P T j T j P j j j T T Y 0 d | f 3 ^ 3 6 - ] ] 2 1 . . { { E =.=.-.Q -.S S S U U U U .U . . . . . . . .U . .U .U . .U U U U U S S S S -.Q Q B G { . ! [ ) | # 6 ^ _ } 4 0 ( _ I - a i %.Y Y Y V Y Y X Y X Y Y Y V 9 - | F + F ", +" < l y z y h K | P j j P j j P j ..j T T T V } . | 6 6 ^ ; 6 - ] 2 [ ! . ~ { { { =.=.Q -.Q S S S S U U U U U U U U U U U U U U U U U U U U S U S S S -.Q -.Q Q G G { . ! < ) ] 6 # g m _ } 4 4 } ( 6 - 9 l Y Y #.V %.X f Y $.X Y Y f Y f 9 - J h 7 F ", +" e & y y y l J P | j P j P P j P j ..P j T j Y - { 1 - 6 - @ | ] e [ ! ! . . { { { { =.E =.Q Q -.Q S -.S S S S S U S D U U S S S S S -.S -.-.Q -.Q Q =.B G G , . ! * < ] - 6 ; 9 ^ c _ } ( 4 4 *.3 ^ > 8 g 9 %.Y X Y X #.X c Y Y m X Y Y g - i J l F ", +" [ l x z y M | P j P | P j P P j P j T j j +.j &.6 E =.N ] - ] ] 2 < [ [ 1 ! ! ! . ~ . { ~ { E =.E E Q Q Q Q Q Q Q -.Q -.Q Q Q -.Q Q Q B E B =.G G . , . ! [ [ < < | # 6 6 ^ c _ _ } 4 4 } } _ 6 _ $ l $ %.%.Y c Y X Y &.%.%.$.Y f X V 9 g - a F F F ", +" [ 8 w z y M I | P | P T P | P j P j T P W j W P j 9 ~ -.-.E ! < ) ] ] ] ) < < [ [ 1 [ ! ! . . . { . { G { G E G E { E { E { G E G , ~ , , . ! ! < [ < < d | - # 6 ; f 3 _ } _ } _ } 3 ; - ] ^ } t 8 V c V Y %.$.V f %.#.#.Y %.f V f Y Y ; - i F l F ", +" 1 s y z y 8 J O j P | P | P j P ..j T W T P T j j P 6 - l G -.-.-.Q { ~ . H [ I ] ] ] ] ] I [ < < [ H ! l ! ! ! ! ! [ ! [ . [ [ [ [ < < < ] | | @ - 6 ; ^ ^ 3 3 > 3 ^ f - ] ] [ 1 1 [ - ^ / i F | c Y g %.Y #.g Y $.c $.Y %.Y Y #.X c #.g - i J l + ", +" [ s y z z M K | P I ..P j j ..j P j P P P P j W j P | O d | ; $ - h M { Q Q -.-.Q E { ~ . H [ h < ) ] ) | @ | | | @ | | - - | j # 6 ; 6 ; 6 ; ^ 9 6 - 6 | < 1 ! . ~ ~ . ! h ] 3 > ( 9 # F h | 9 9 V V %.X f Y Y X Y X ` X Y g g c X c 3 9 - | F F + ", +" 1 s w z z 8 J P | j j j P j P P P j W j P X W j P T ..T P | K H H [ J ; V 9 9 6 | [ ~ G E Q -.-.-.Q =.Q =.E { ~ ~ , ~ . . ~ . . ~ . ~ ~ ~ G { E { E { ~ . ! : - 9 _ } / > $ = i F F J $ c 9 x=&.%.x=Y %.#.%.Y X m X V Y %.%.#.Y #.` #.Y g - i i l q ", +" [ * y z z 8 K | j P j j P j P T j P T P P P j ..j W W T T j T W j j | J I h H H l l h F | # $ $ $ 6 $ - $ - = - ) J = J J J J | - - - $ ; $ 9 9 9 > $ # a = a l l F i J - - V 9 Y c ` $.` %.V m Y Y %.X Y Y X 3 %.V %.m #.#.Y Y Y Y Y 3 ; $ | F J F ", +" ! * y z y 8 J | P P j j j j j ..j P W j P j P P j ..P j T W j j j T T +.T T 6 T | - - - i i h h h 8 h l l l 8 l + 8 l l l l 8 l w l 7 8 l v l u + i t - ; 9 9 Y c c #.` } ` 3 Y s%#.Y %.#.Y $.Y %.Y #.g Y %.m Y Y f Y X Y Y %.Y 3 Y c 9 g - a J F F ", +" ! + y z z M J | j j P j P j ..T P P j W P W j W j P ..j j T j j W T g T V T T T g g +.g g V g g g X g g j V j T - g - g - V ; 9 g 9 V 9 3 V 9 c Y #.` %.#.` #.V } #.c #.c #.` ` #.%.#.c $.g #.V #.Y #.Y X f V %.X ` #.%.V m Y Y X c Y 3 9 - - F h J ", +" ! : w z z y h P j j P j P P | P j j P P j W ..P j W P T P j T j j X T j T T T T g T V T g T g V g &.g V X V g V g V V V Y g g V V g Y V m Y %.Y &.V c c } x=` Y $.%.c %.Y V Y Y Y #.` #.Y $.Y $.Y X ` Y X Y X Y %.#.Y Y %.Y Y $.Y #.c V ; | a J h q ", +" ! * w z z 8 h J j P P P | P j T P j ..P d j ..j W ..j W j j ..W T T T ..T g j T V T g T g g g g g V g g V X g V g g V X V Y Y g T g c X Y x=Y Y %.m Y #.c Y Y Y Y #.Y Y %.%.Y #.#.#.Y %.Y #.Y g #.Y X %.m V f V '.c %.Y g #.%.Y m Y Y 9 6 - | q J + ", +" ! * w z z 8 h | P | P j P P P j ..j T j j P W P j P T W P T j T j X T ..X j T T +.T T V T g T +.T V g X T g V X g g X g Y g &.X Y V %.Y V f V X f V %.X Y x=#.c Y Y $.V Y Y Y Y %.#.V #.Y #.V X Y $.#.Y %.V $.#.x=$.Y X #.Y Y X Y 3 Y 3 9 - - F h F ", +" . * y z z w h I j ..P P P P j P P ..P j P j P j P W T j T j ..g j T T T j +.T +.T g T T T T V T g T g T g T V g V T V X V X Y f V g V X Y Y %.Y X Y *.Y %.Y %.g #.V f V m Y %.X Y #.#.%.V $.Y #.$.V m %.X X Y f V Y &.Y X #.%.3 $.c X 9 V - a J J * ", +" . ) x z z 8 h | j | P j P j O T P P j T j j j ..j T T j ..j T X 6 T W ..T g T T T T T g T T T g T +.+.V X g V g X V g %.g g V X Y Y g Y Y X $.X Y V #.%.c $.Y &.#.Y %.%.%.c %.#.Y Y #.Y #.Y %.Y Y Y Y X Y g Y Y %.%.Y %.Y Y Y Y f %.3 9 9 - i J h l ", +" . [ y z z 8 8 | P P j P j j T T P j g j j ..j j ..j T T T T j T T T j T T T ..T T g T T +.g T V X T T g g V T V T X g V X X V X Y X V Y Y #.` Y Y Y %.Y Y $.%.Y V m Y Y Y Y #.Y %.%.` Y Y #.%.Y m V m X Y %.Y $.Y Y #.X #.%.f x=Y f Y Y g - | F F l ", +" . [ x y z y h a P | ..j P j T T | W j ..P j T j T j ..T ..T X W j ..j X W T T T T X T T g T V X X X g V V &.X Y g X V X %.V Y g Y X Y X %.Y #.#.Y %.#.#.%.Y ` #.Y X %.#.Y %.#.#.%.Y #.$.f V Y $.Y $.Y #.Y X %.X Y $.#.Y %.#.c X Y Y $.3 6 - J F 7 l ", +" . 2 w z z y 8 P | P P j T T P j ..j P T j ..j W ..T W j ..j W T ..T T T X X T T T T T T V V X g g V g g Y X Y V X Y &.Y X Y X Y 6 V Y V Y #.Y %.#.X f g Y Y X X V f %.&.%.#.X Y %.%.%.g %.Y %.X #.V #.f %.Y Y %.X Y #.f Y X V f Y Y Y V 9 | i l F 8 ", +" < w z z y u K j j T P | ..j j P ..j P W j P W j P T W P T T T T T T X W T &.j +.T T T g g T g T g g X T T X g V X V X V %.X V #.X Y g '.Y &.%.Y Y V X #.Y X c $.Y Y X Y $.f %.&.$.$.g %.%.%.Y g m V m V $.#.Y %.$.Y c Y X Y %.Y V f 3 6 - i h + 8 ", +" 2 x z z y 8 a P P | ..P j P j P T ..j P P T P T j j ..T j ..T T X T g W T ..X j T T T T T T X T g g X X T X T g X V g T Y g X Y X X Y g V Y c &.X %.m %.V $.Y $.Y $.#.Y #.Y %.#.g Y $.g Y $.Y #.m Y $.Y f V %.X Y f &.f Y $.Y Y 3 V 9 6 - i F 7 l ", +" ) w z z y u K | ..P j P T T ..T j ..W j ..T P j j j P T T W T T W X j T T W T W +.g T T X g j T X T &.X X T T g g V X T $.g %.Y %.X Y V $.V X f V X V $.Y %.X 3 $.g f %.Y X Y X V #.Y #.%.m X Y X Y f X Y %.%.Y #.&.3 $.V f %.Y m Y c ; - a h l 8 ", +" ] v z z y u a P j | P j j ..P j T j P ..T j W T W j P ..T ..T W T T P T T T T T g T g X g W X T X T T T &.T X g V g X V X g Y X V X f %.Y g Y %.$.%.Y Y $.Y #.Y #.Y Y $.X %.Y #.Y m #.&.#.g x=#.V X Y f #.Y %.#.g c #.X g #.X Y Y f V ; T i F 7 8 ", +" d 7 y z y 8 | | P P T P j P | ..j P T W P j j W ..P j T j ..T j P j T T g X T W X T g T T T T T T X V T X X V V X g X Y $.V X X Y $.Y X %.Y #.X Y X Y $.Y Y $.%.Y $.%.#.#.g %.Y #.Y Y Y #.Y X %.g Y $.X #.%.Y Y m %.c #.Y Y #.X m Y 9 g a i h F , ", +" < v y z A 8 J j | P j j P j ..j j W j T T j T j ..j ..P T W T ..T g T W T j T X T T X X g g X X X 6 g X X g &.X X g X X f X V X Y X Y Y X Y $.Y $.Y X #.V X Y Y #.Y %.Y %.%.Y $.#.%.Y $.#.Y X Y '.V #.#.Y Y '.%.V #.Y $.Y Y #.Y Y f V 9 - J + F 8 ", +" [ v y z y h J | P P j P j j ..j ..j j P j ..P T j T ..T j ..T T j X W T T g X T T T X T g V T T g g T %.T X X g X X &.X $.X V X f ` #.&.%.$.Y Y X $.Y $.#.V X m #.%.$.#.V m #.%.Y #.Y X %.Y #.f &.Y #.%.#.%.#.#.%.X Y m X Y f #.Y Y g ; - J F l , ", +" < 7 y z w 8 | P T j j j j ..P P P T T T T j P j ..g T W T T T W +.T W T T g T W j T g T j 6 X T X X V T $.Y X X T X g &.Y %.X %.%.X V Y Y Y $.#.Y Y X Y Y %.Y $.Y Y ` #.#.Y $.Y ` #.$.%.Y &.f %.Y m ` %.Y %.m ` #.Y g #.Y $.Y #.f Y V ; - J l + M ", +" ] 7 x z y h a P j P j T P T j T j T P T j ..j W T T ..T j ..X T T j j T X T T T g T V T X X g V T X X X g +.X Y X X Y $.X V $.X Y Y X X #.%.Y X %.m %.$.V #.Y #.#.#.` #.X V $.Y &.%.f Y Y Y #.#.` X Y X Y m X #.Y #.Y X #.#.f V Y #.3 g - i h + , ", +" ] h y y y h J P P j P j j P ..j P T P j ..T W j T T j W W j T T T T X T T W T ..g ..X g g T X X X X T T &.g X X X Y V g $.X Y $.#.$.g %.&.f %.Y X c %.Y X %.%.#.Y #.#.x=X #.Y X c $.` %.%.%.Y Y #.#.%.#.X $.` Y #.X c Y #.Y Y *.X c Y ; - i F + ", +" d l x z y M J | O j j j P P | P T j W T T T T ..T j T T ..T j ..T T X X W T T T X g T T T X g X X V g X X g X X V X &.f X V X Y f Y &.g X Y %.%.X Y &.#.Y #.g Y %.#.%.#.&.#.Y #.%.%.f y=Y #.%.#.Y #.#.$.Y Y #.%.#.#.c Y #.m X Y Y Y Y 6 - i h F ~ ", +" ] l y z y h J P T j j j j T T j ..T ..j W j T T j T +.j j T ..j ..g j ..&.T W g T X T X X T T T g X X X V T X &.g X Y X %.X Y X &.X Y $.Y $.#.X c $.X Y X %.Y X Y '.Y $.X Y $.%.Y %.Y #.Y $.%.#.#.c %.c m %.%.#.#.` #.#.#.%.` Y Y m Y ; - i F u ", +" ] q x y y l J j | j P j P ..j j P P T W j ..X j ..T ..X X X T T T T T T T W T T g T X T g g X X $.X X V g X Y X X T X %.Y T g X g %.%.X Y %.m X Y #.#.Y #.Y #.Y $.Y $.#.` $.c $.Y %.%.#.#.Y #.Y #.Y Y #.&.Y %.#.%.#.Y %.#.Y Y Y #.c 3 g - i J F ", +" < h y y y u K j T j T ..T j ..T T j j P P j T ..T j T W T T j P X T T T W j T $.j X T g X X g g X g X X T g X T X ` %.X X Y X $.&.g %.%.m %.c $.Y Y m %.#.$.Y $.Y #.m x=#.%.Y #.#.#.#.#.#.%.#.` #.%.%.c #.%.$.Y Y Y #.#.m X #.c #.m 9 6 | J F h ", +" < F w z y 8 a j j j P j P P T P j j ..P j T j T T ..j T T T T T ..j T g &.g X g T T T T X g T V X g X V X X %.X X $.X X ` $.V %.$.Y %.Y #.Y '.c %.Y #.Y %.#.%.%.#.#.f %.V $.#.#.%.#.%.` #.#.Y Y X #.%.#.` #.Y Y $.*.` Y %.%.#.c #.c 3 9 | F + F ", +" < + 8 y z h J O j j j j P | ..j T P T j j ..j T ..T ..j T W X T T g X T T T T T T X X 6 g T X X g g T X Y %.&.X V V X V $.X Y #.f %.%.$.Y #.$.%.Y X %.Y #.%.X ` Y $.Y #.%.3 #.Y Y #.#.X c #.$.Y #.` %.%.#.#.` #.#.Y Y Y $.Y #.f x=c Y g - F l u ", +" < J w y y 8 J j j j P T j j T T P j j P T ..T j j ..j T T T T X T T X X T g +.T T T T T X g &.X g X &.X g V Y $.Y X $.&.#.Y $.X V Y Y Y Y #.%.*.%.X %.#.Y Y Y %.m %.Y %.#.#.%.X c m $.#.#.c #.%.#.#.%.#.V #.%.#.#.Y $.Y %.f X c X Y f 9 | F + F ", +" d F x z y 8 a P | ..j j P T j T j P T ..T j T P T j W j X T T g T j T X T T g T X T X T X g T T V X g V X X V $.g X Y X X %.Y $.$.Y #.Y Y $.m Y #.Y &.f y=m #.Y %.%.Y %.` %.Y V $.&.#.#.Y %.#.#.#.Y *.` #.Y m Y %.#.Y #.Y $.Y ` *.#.Y g - h v J ", +" < J w z z u K a P O j j T | ..j ..T T j j j ..j ..j j X j ..X X T T ..j T T W X T T T &.X g g V X &.g X g $.g g X Y $.%.Y T m &.%.f x=m Y Y %.X #.#.Y Y #.X #.Y Y $.Y $.&.#.f #.Y g #.#.Y $.` ` #.#.` #.#.%.Y #.#.` #.%.Y X #.c #.Y f 6 - F F h ", +" < | w z y 8 K | j T j P j +.j j j j P P j P j T T j X T T T j ..V T T X ..$.T X g &.X X g g T g g X g X T X &.X &.$.V f X X Y &.%.#.$.Y $.#.Y $.Y Y %.m %.` X Y #.#.%.X ` Y #.#.$.Y Y #.#.#.Y #.#.#.} %.#.Y X Y #.%.` m Y m %.#.m Y 3 9 | F l u ", +" d ) w y y u a P j j j j P | P T P T T T j T T T ..T +.T ..j T T X T T T T g X X T g T X T X g X X V T m $.X V &.X $.%.g X Y $.Y #.#.Y $.X %.m %.c $.Y X Y $.` #.c #.` Y X Y Y #.Y %.$.Y Y #.#.%.` %.#.#.%.%.*.Y #.#.#.Y #.$.Y 3 Y c 3 6 - a 7 t ", +" < ) w z y M a P | P P j j P j T j P T j P T T T j j W T T j X T g T X T T T X T X g X T j X T V X T X V X X V X X Y X X X Y Y X #.%.m Y %.` #.Y #.%.%.#.$.%.%.` ` $.Y #.%.Y $.#.X ` #.#.Y #.#.` #.&.#.#.%.%.c o=Y $.c #.Y *.Y #.` #.c ; | J F u ", +" < ) v y z u J T | P j j j P T j ..j j +.j ..T W T ..T T j ..T X X +.W T g T T g T T X T T g +.g X Y X Y X $.X Y $.V X &.X Y X m X ` $.X ` #.m %.%.Y %.%.X ` #.Y Y %.#.#.Y #.Y #.Y #.Y #.$.Y #.#.%.c V #.` '.#.` Y #.#.#.Y f &.f c c Y 9 | F 7 t ", +" < ) w y A M J P j j P j j ..j T T j j T ..T T j j T g T ..T T T g X T g X T X X T T X X X X X g V X &.X X X X X #.V X X #.#.X Y f %.Y m %.#.Y #.#.%.$.#.#.%.%.Y #.Y $.#.` #.#.` %.c #.#.m ` #.#.#.#.c #.` $.c #.c #.Y c ` %.3 #.Y ` 3 ; a i F u ", +" [ < A z z 8 a | P T j j j j j P j j ..T T T T j W T T X T j T W T T W T T T X g X g X X T V X g +.V g V X g %.X g X Y %.X Y #.Y '.Y $.Y #.#.Y %.#.#.V #.c #.` #.#.#.Y Y #.` #.%.Y #.` #.#.#.%.X #.#.Y #.#.#.Y #.#.` #.#.c #.` #.c c 3 g - F F q ", +" [ | w z y 8 a P T j P j j j ..T P T T T T g T ..T ..T X ..W T T g T X T X g T g V T $.g X T X Y X Y X X &.$.V X X Y X X %.g #.X %.Y m $.Y %.m V %.%.#.#.%.#.` #.%.Y #.%.` #.#.#.Y ` #.#.` Y #.` #.` #.#.%.%.*.` #.%.c #.c #.c Y *.` Y $ - F l u ", +" [ < 8 y z u K | P j j ..T j P T j T P T T P j P j ..T T T X X j X T W T X T X g T X X X T V X X X g $.X Y $.Y X Y &.%.$.Y Y $.Y f #.%.%.%.&.#.X x=$.Y #.Y f Y %.#.%.#.` %.#.%.Y #.'.Y Y #.#.%.#.#.m &.` $.c ` *.$.` Y #.#.#.Y #.c 3 9 j = J 7 q ", +" [ * A y z 8 a j j +.j j ..T | ..j j +.j ..j T j P T ..T X X T T T T T ..g X V T X g X T T T $.T %.X g Y X X Y $.X Y $.%.%.%.#.%.X %.Y $.#.c #.Y Y X %.x=%.#.#.#.%.Y Y #.` #.#.%.Y #.` %.%.m Y %.Y V *.Y Y #.#.` %.#.Y #.#.` c #.c *.V $ - F F u ", +" [ ) A y z A K | ..j T j j ..j P ..T ..T j T X P T ..T P g T X T T T X T X T X X V T g T T X X &.$.X V #.X Y X V X %.Y g #.#.Y $.Y &.` Y $.` Y X #.%.V Y #.Y #.#.c %.Y #.} #.#.%.#.#.$.#.#.#.%.Y #.Y #.Y #.%.#.#.#.Y #.Y c Y #.} #.c 3 - | F 7 q ", +" ! - w y z w a j V j T P T j ..P j P j T T T j ..T P g ..T +.X X T X X T +.T T T X X g X X X g X X V X $.g $.X %.Y %.&.f %.X Y #.X Y Y X Y X ` #.%.%.m %.Y #.#.#.#.$.` #.#.#.Y } #.` ` $.#.Y #.#.Y c #.#.#.` #.#.m ` Y #.c #.#.` *.3 Y ; a a l t ", +" ! - w x z A K j j j T j ..j ..j j +.j j ..T +.j W j +.j T T T g T X j T X T &.T X X j T g X X V X X V X Y g V $.&.#.g %.&.Y X %.V %.#.$.#.$.%.%.$.V %.%.#.Y '.` '.Y #.Y Y #.%.#.%.#.#.#.Y %.#.Y m ` #.#.} #.Y ` #.#.Y ` #.` ` 3 3 #.f $ | J F q ", +" [ ] w z x y a j j j P P j P T P j T T T T ..j T ..j X T X T T j X +.T g g T X X g X X g X g &.X V $.%.$.%.'.X X Y #.&.m $.$.X X #.Y $.%.#.%.#.Y #.$.%.#.#.#.Y #.` %.#.#.%.#.#.Y #.#.X ` #.` *.Y Y *.` $.c #.#.#.` #.` #.Y #.` #.` *.9 - - F F q ", +" ! @ v z z w J j j ..T | ..j T ..T j T P j T j ..j T T T T T X X g T g T X X g g j +.X +.X T V T X g $.m V $.V #.%.m X X %.Y %.%.m #.#.#.#.Y #.#.%.%.#.#.` #.` %.#.#.` %.#.%.X c X } Y #.$.*.` #.#.` #.Y c #.` ` *.` ` #.#.3 ` *.3 c 9 $ | F F u ", +" ! - v x z y a | ..T P j T ..j j j W ..W W T j j T ..T X X T T j T X g T j X X +.g V T T g T X T %.%.X V $.$.X g %.Y X Y X ` #.#.#.%.} Y Y #.#.#.Y #.#.#.x=$.%.%.#.Y #.#.%.` %.` #.#.#.Y #.x=#.#.` } %.#.#.` *.#.c #.` #.` #.c *.` } f ; a J + u ", +" . ] v x z x h | T j j j j j P j ..T T j T T j +.T T X X g T X X T V X X &.g X V g &.X g g &.g %.V Y $.g X c '.V %.X %.Y X ` #.V X m x=#.#.x=#.Y %.#.#.` $.Y #.%.` #.#.#.` $.c #.%.#.` #.#.` #.#.$.#.#.#.` #.#.#.#.` *.` *.c *.` c #.9 ; | u F + ", +" . ] w z z y J j V ..j ..j j ..T ..g T g T ..T T +.j W X T X j X X T X g T T X g X X g X g g &.X &.X X X c $.Y $.$.Y X Y #.#.%.Y %.$.#.%.#.%.#.%.%.#.%.#.$.#.Y &.Y %.m ` Y #.m ` #.Y y=#.%.` #.#.Y #.%.%.#.#.` #.#.` #.` m c #.} 3 3 Y $ | q u + ", +" . @ v x z v a P j j P j P j T ..g T T T T ..T T T T X T T T T T ..g T +.X +.T T X g V T X V $.V $.X %.X %.V f $.%.$.Y %.#.Y Y $.&.Y Y $.Y '.Y %.Y #.#.#.Y y=Y #.#.#.` #.#.#.#.#.Y $.#.Y #.%.#.%.#.` #.#.Y #.Y #.#.} #.#.} %.` *.#.} 3 ; | F 7 F ", +" . @ F y x 8 J j | ..j j ..j P T j W T T T X j X j X P X T X T +.T g &.g T T T X T X &.X X T %.V X $.g %.X X %.$.x=Y #.#.Y #.#.%.%.X #.#.Y #.X #.#.` %.#.#.` #.#.Y #.#.` #.` *.%.#.c #.#.` #.Y %.#.#.x=` #.` #.#.` *.` #.} #.c #.#.3 3 $ | F F + ", +" . j i x z y a j j ..j P T T T j T ..j j ..g T T T T W T X T X T X g X T T X T &.X X g X X X g $.g X Y X %.X ` $.Y #.#.%.X } %.#.$.x=#.m Y #.Y #.#.` ` #.#.#.#.Y *.y=Y %.#.#.x=#.` Y #.#.` #.%.*.` Y $.#.#.#.#.#.c } #.} #.` #.` #.3 f - | u F + ", +" , - J x y 8 l j ..j j j j ..g T ..T j +.T j T T W +.X T g X W T T +.g g &.T g X T T X g &.X $.X X %.g &.$.X %.m m X Y X Y #.Y #.` %.#.X Y Y '.%.` ` #.V X *.` #.#.c %.` y=#.` '.Y #.` *.#.` y=*.Y %.c #.` #.` m ` *.` *.` *.} #.} #.9 ; a h q 7 ", +" 6 + x z w J | j P j P j T T T T T T X j P T g j j g j X T T T T g j X T V X &.g X x=X X X &.X V $.Y $.%.Y &.#.%.Y $.#.V %.Y #.` #.%.#.%.%.Y *.&.c #.&.#.%.&.` #.%.#.` #.#.` '.#.` *.%.#.#.#.Y #.` #.#.#.` p=` #.#.c #.#.` ` *.` ` ; $ | F q + ", +" ] u x y w F j j T j j T T j T ..T T T ..g j ..X X X X T X T X V X T X V X X T g %.X Y $.X Y Y X Y X $.V X X $.Y X #.#.Y #.X #.#.Y #.#.` m %.` #.c %.#.#.` #.` #.` #.%.#.%.#.` ` #.` #.#.%.` ` ` #.#.%.#.Y #.` #.` c *.` c #.c *.#.9 - - F F 7 ", +" j + x z w J | T j ..j P T j W T T ..W T X j T T T T T X &.g X X T T T X T V X X &.X f V %.$.X m %.%.Y $.$.%.Y $.c $.%.*.Y %.Y #.$.#.` %.%.m #.` %.#.Y #.#.#.%.` #.%.#.` #.#.%.#.#.#.` #.` #.#.#.#.Y #.Y #.Y #.#.` *.` #.Y #.c #.c Y ; a F F l ", +" d + x y w F j T T j ..j T T T T j T j T ..g W T W X T W T T T X X T X X g +.V X T X $.&.X f %.Y X $.X Y $.f V '.` m V #.%.#.#.%.Y Y $.Y #.&.` #.Y #.#.#.%.` #.%.X #.` #.#.` %.*.` #.#.` #.` #.` *.#.c %.#.` *.#.` } #.Y Y *.` #.c 3 - | F + 7 ", +" d = y x y u j T T j j T T P j T T T T ..g X T X j T X T X X X T V g &.X X V X X &.X g Y %.&.$.X Y Y $.g X %.f x=%.%.m %.Y '.X Y #.#.#.Y &.c Y ` #.#.#.%.` #.%.#.x=%.m #.Y y=#.%.#.Y } Y *.` ` Y #.` #.#.c c *.` *.#.#.` Y *.` Y #.9 - i F q l ", +" 6 i x z x J | ..j P j +.j T j T T T ..g T T X j ..g T X X T j V X X V X g %.V X V $.V X X Y $.V %.$.V '.X #.V m $.%.` ` #.%.#.` m %.#.%.` #.#.#.Y } #.%.#.c #.#.*.` '.} %.#.#.} #.#.#.$.#.` #.#.m ` *.#.#.*.` ` #.#.c #.} '.} ` *.g - - F J s ", +" d # v y w h j T T j j T T T W j j T W T X T X T g W T &.T X Y X X g X X g X X V X &.X $.g #.Y X %.X &.g V $.X Y Y X m $.Y #.c $.#.#.c #.#.#.Y %.X ` #.y=#.#.Y #.` $.` %.%.#.Y #.#.` *.` #.} #.*.%.Y #.#.%.` Y *.#.` #.` p=Y } ` c 9 $ J q F l ", +" - @ w x y a | T P j j j j ..g T T ..T W T T X X T $.T ..X X X X X T X V X %.V X Y #.X Y g g $.V $.%.%.$.X x=m %.f %.%.Y %.%.%.Y Y #.%.Y $.Y #.X #.%.'.V '.` #.` #.#.y=#.` #.#.%.Y #.#.` #.` *.` #.#.#.` $.c #.` m ` #.` ` 3 #.c ` g # a J i 5 ", +" ] - w x y J T | P T ..j T &.T T W T j +.g T X X X X X W T X V T g X V X V X X m &.X Y X Y %.$.X Y Y $.Y %.X Y X %.#.X %.#.%.Y #.#.` #.#.` #.} #.` #.#.#.#.#.` #.y=#.` %.*.%.Y #.#.*.c #.#.c #.` #.#.#.` #.#.` #.#.#.Y ` #.c #.c c 9 - a J q 8 ", +" 6 ) A y w F j j T T T j T T T W j T X X g T +.T g &.X j T X T X $.g X X V X X X X X g V &.Y X g &.X #.X Y #.'.Y V X Y %.#.Y #.c x=%.%.#.$.#.%.#.#.Y #.#.` %.*.%.%.%.#.c #.#.} #.#.` #.#.#.Y c #.#.` ` #.Y *.#.` *.` } #.` *.` c c 9 - a F i 8 ", +" ] - v w y J j j T T T j W T X j T T g g ..j T T g T X T X X X g X V g X %.$.V f T T ` X X %.$.$.%.V X %.X #.X ` #.'.Y '.Y %.` ` #.Y #.%.#.Y Y %.Y m %.#.#.#.#.` %.` #.*.` #.%.*.` ` #.` #.c %.*.` '.` ` *.` #.} ` ` #.#.#.` *.` ` 9 - i q = 8 ", +" ] - w x 8 J j T T T T g X T X T g ..X T g g ..T X X X X T X X X X X V X m X X %.X X %.Y X Y X %.$.V $.g X Y Y X X Y X #.#.#.` ` %.#.Y #.` m %.#.m ` #.#.` #.#.` #.y=#.#.} ` ` ` #.#.#.` *.#.` c #.` *.` ` } ` s%#.*.` #.` c *.c c 9 - q F i , ", +" W - v w 8 I j T V j j W T P T T X X X T ..T X X g +.T X X g X T &.f X X &.Y %.X Y X X Y X X &.m Y X %.&.%.'.&.#.Y %.%.#.Y X } V #.%.$.#.#.} $.` ` #.#.#.Y #.Y #.#.c #.` $.c ` #.` #.m #.#.` } y=} ` #.} ` #.s%c #.` ` #.#.` Y c } ; - i F t 8 ", +" ] - F 8 8 J T | j j j T X T W T X T T T X j T T X T X X g T X g $.&.X %.Y %.X $.X Y #.X Y X Y %.$.Y $.$.X V Y %.'.%.V m %.` #.#.%.Y #.Y Y #.#.%.m x=` #.` #.$.Y #.s%#.x=#.#.*.` *.` ` #.#.} ` #.#.$.c ` #.` #.c ` *.` } #.#.c } c ; a | u q , ", +" d - + w l J P T T T W g g T T T X X g ..X X T X T X X X g +.g X X V g $.X $.%.V %.&.#.X #.Y $.#.Y $.g m &.X Y #.%.%.$.#.%.Y $.#.` Y %.#.} #.#.%.` #.` #.m s%#.#.x='.` s%#.#.` *.` *.` ` #.` #.y=#.` Y #.#.%.#.} #.c #.p=c ` #.` 3 ; - a F = , ", +" d # + 8 8 J j j T j X T j ..+.T g X ..T T g T g X X T X X V X g X X V Y X X Y $.&.X X Y #.X m Y f g Y %.Y %.#.#.#.X Y #.#.%.c #.%.*.c $.` #.Y #.#.#.#.` #.Y #.%.#.%.#.#.#.#.` #.#.` *.#.#.` ` #.} #.#.#.#.#.Y #.#.` } c #.*.Y ` c 9 a - F t , ", +" d - 7 8 l | j T T T T X T X g j j T X T X T X T T X X g X T T X %.X X X T $.X %.Y %.V $.V g #.X Y #.%.$.f %.#.c #.%.Y Y #.%.%.#.c #.` ` *.#.%.#.` ` #.#.#.#.%.%.c #.` ` #.` #.#.#.#.` #.c ` #.` #.Y $.c #.} $.c #.` *.} ` *.` } c ; - a F a ~ ", +" ] 6 + 8 M J T T g g j X T T g g X T X X T X Y T g T &.X X T V X X g X g T X V X X %.Y X Y m &.f x=#.x=} &.Y $.X Y *.Y $.` %.` ` #.s%*.y=` m ` } #.%.%.#.} n c #.#.#.` } %.` *.` #.x=#.%.#.#.#.} #.#.#.#.#.` c #.*.` #.#.` #.c 3 3 $ - i i = ", +" d - 7 l w I T T j g T j T T T X j g X X g T X g X &.X T T T X X &.g X g &.Y X $.X Y X #.%.%.$.X g &.Y $.Y '.#.Y #.Y #.V #.X #.#.` *.#.#.` } o=` #.#.Y %.#.s%$.#.#.} ` ` #.c ` ` #.` #.#.#.` ` %.m Y c #.#.c #.` $.Y f %.*.` ` *.3 $ - a F a ", +" 2 6 h 8 M h j T T g V W g X X T X X T X X X X X T X X X %.X %.X x=g X X &.X g X $.X g x=m Y X V $.Y m %.Y $.Y m X #.%.Y #.Y #.` #.%.#.%.Y #.Y #.` %.*.` #.#.#.` X #.` #.` } #.'.#.y=#.s%#.#.` #.s%` #.c #.#.#.#.#.#.` ` #.} *.3 c g a i h a ", +" e - 7 7 8 J j T g T T j X T X T g X g g T &.X T $.X g T X T T g g &.Y g g X X X %.V V $.V $.%.$.c '.` $.X Y #.%.Y %.m ` #.m #.#.#.` ` #.#.#.%.#.Y %.` #.` #.} ` #.} ` } #.p=` #.#.` #.` #.#.Y #.#.#.c #.#.Y ` #.` #.#.Y #.#.c } 3 $ | a q = ", +" 2 - = w 8 h j T g g V j g X T T X g T X T T X +.T T g X X V X X V X X X g X &.Y %.X $.Y X X X Y %.%.%.$.#.Y #.f %.%.#.X #.` #.` ` *.#.Y #.` Y #.Y #.Y c *.` } p=c #.} #.` *.#.` ` #.} #.` #.` *.` #.Y #.c #.#.#.` #.` '.#.} ` _ c ; a i F - ", +" 1 6 = w 8 h T T j T g X g T V X X T T X j X &.X V T +.T g T X T &.T X V X %.&.$.Y X f $.%.g #.Y X X &.'.x=X ` Y #.Y Y #.#.` ` #.` #.Y #.%.#.%.} } ` #.#.Y } #.#.} #.#.` p=} x=%.` *.` #.x=#.#.` #.c #.*.s%#.` #.*.` Y #.` 3 #.c c ; - a F = ", +" 1 6 ) w 8 h j j T V T +.T T g T T X j X X T X &.g X X T T g X T g &.#.$.Y X X V X %.X Y #.#.X %.V g $.$.Y $.X #.%.$.c #.#.%.Y #.%.#.#.` %.#.%.` #.*.} ` #.y=c #.%.*.%.#.} ` #.Y #.` } $.#.` ` #.} #.` #.c #.c } #.` #.` #.Y *.Y Y ; - a F a ", +" ! 6 : v 8 h j j T g X T T T T X T X g T V T X X X Y g X &.X g g X X V X T V &.X %.X #.%.#.%.Y #.%.$.%.Y X %.Y Y #.V '.%.Y #.` %.#.#.Y ` $.c #.` #.s%%.#.} ` *.x=} #.#.` ` *.#.#.` ` *.#.%.*.#.#.` #.Y #.} } #.` #.} c ` ` *.c c 9 ; a i i # "}; diff --git a/xgnokii/xpm/Read.xpm b/xgnokii/xpm/Read.xpm new file mode 100644 index 0000000..2db3e37 --- /dev/null +++ b/xgnokii/xpm/Read.xpm @@ -0,0 +1,41 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char * Read_xpm[] = { +"13 19 7 1", +" c None", +". c #000000000000", +"X c #861782078617", +"o c #61859A694924", +"O c #000082070000", +"+ c #C71BC30BC71B", +"@ c #FFFFFBEEFFFF", +" ", +" . ", +" . ", +" .... ", +" .XXXX. ", +" ...... ", +" .oOO.. ", +" .+OO.. ", +" ...... ", +" .X.... ", +" . .@..... ", +" .. .@@+.... ", +" .@.@@+..... ", +" .@@@+.X.... ", +" .@@+..X.... ", +" .++++..... ", +" ....... ", +" ", +" "}; diff --git a/xgnokii/xpm/Reply.xpm b/xgnokii/xpm/Reply.xpm new file mode 100644 index 0000000..a6c1296 --- /dev/null +++ b/xgnokii/xpm/Reply.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char*Reply_xpm[]={ +"16 16 5 1", +"b c #ffa858", +"c c #c3c3c3", +"# c #000080", +"a c #000000", +". c None", +".####.....aaaa..", +".#..#.....a##ab.", +".#..#.....a##ab.", +".###c.....a##ab.", +".#c#c.....a##ab.", +".#.c#.....a##ab.", +".#..#c....a##ab.", +"....a.....a##ab.", +"...aa.....a##ab.", +"..a#aaaaaaa##ab.", +".a###########ab.", +"a############ab.", +".a###########ab.", +"..a#aaaaaaaaaab.", +"...aabbbbbbbbbb.", +"....a....ccc...."}; diff --git a/xgnokii/xpm/Save.xpm b/xgnokii/xpm/Save.xpm new file mode 100644 index 0000000..da91c44 --- /dev/null +++ b/xgnokii/xpm/Save.xpm @@ -0,0 +1,45 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Save. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Save_xpm[] = { + +"20 18 3 1", + +"* c #000000", +"# c #808000", +" c None", + +" ", +" ************** ", +" *#* * * ", +" *#* *** ", +" *#* *#* ", +" *#* *#* ", +" *#* *#* ", +" *#* *#* ", +" *##********##* ", +" *############* ", +" *##*********#* ", +" *##****** *#* ", +" *##****** *#* ", +" *##****** *#* ", +" ************* ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Send.xpm b/xgnokii/xpm/Send.xpm new file mode 100644 index 0000000..cdcf4c8 --- /dev/null +++ b/xgnokii/xpm/Send.xpm @@ -0,0 +1,50 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Send. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Send_xpm[] = { + +"20 19 7 1", + +"* c #000000", +"# c #800000", +"b c #008000", +"c c #00ff00", +"i c #808080", +" c None", +"l c #ffffff", + +" ", +" * ", +" * ", +" **** ", +" *iiii* ", +" ****** ", +" *cbb** ", +" * bb** ", +" ****** ", +" *********** ", +" *lll ***** ", +" *ll ***** ", +" *lll ***** ", +" *ll * ***** ", +" *ll * ****** ", +" * * **** ", +" * ", +" ", +" " +}; diff --git a/xgnokii/xpm/SendSMS.xpm b/xgnokii/xpm/SendSMS.xpm new file mode 100644 index 0000000..cc7d6f1 --- /dev/null +++ b/xgnokii/xpm/SendSMS.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * SendSMS_xpm[] = { +"16 17 4 1", +" c None", +". c black", +"X c white", +"o c gray50", +" ", +" ", +" ............. ", +" .XXXXXXXXXXX.o ", +" ..XXXXXXXXX..o ", +" .X.XXXXXXX.X.o ", +" .XX.XXXXX.XX.o ", +" .XX..XXX..XX.o ", +" .X.XX...XX.X.o ", +" ..XXXXXXXXX..o ", +" .............o ", +" ooooooooooooo ", +" ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Startup.xpm b/xgnokii/xpm/Startup.xpm new file mode 100644 index 0000000..af78ec9 --- /dev/null +++ b/xgnokii/xpm/Startup.xpm @@ -0,0 +1,50 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the icon for Startup Logo. + + Last modification: Sat Jul 24 14:30:37 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *Startup_xpm[] = { + +"20 19 7 1", + +"* c #000000", +"# c #800000", +"b c #008000", +"c c #00ff00", +"i c #808080", +" c None", +"l c #ffffff", + +" ", +" ", +" ********* ", +" *********** ", +" ** ** ", +" ** ", +" ** ", +" * ", +" ********** ", +" ********** ", +" ** ", +" ** ", +" ** ", +" ** ** ", +" *********** ", +" ********* ", +" ", +" ", +" " +}; diff --git a/xgnokii/xpm/Startup_logo.xpm b/xgnokii/xpm/Startup_logo.xpm new file mode 100644 index 0000000..ca707b1 --- /dev/null +++ b/xgnokii/xpm/Startup_logo.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char * Startup_logo_xpm[] = { +"20 19 10 1", +" c None", +". c #000000", +"+ c #808080", +"@ c #00FF00", +"# c #008000", +"$ c #009D00", +"% c #1C5CFF", +"& c #FFFF1E", +"* c #913615", +"= c #0B256B", +" ", +" ", +" . ", +" . ", +" .... ", +" .++++. ... ", +" ...... . ", +" .@##.. ... ", +" . ##.. . ", +" ...... ", +" ...... .......... ", +" ...... .$$$%%%&&. ", +" ...... .$*$%%%%&. ", +" ...... .%*%%%%%%. ", +" ...... .****====. ", +" ...... .***=====. ", +" .... .......... ", +" ", +" "}; diff --git a/xgnokii/xpm/Tool_brush.xpm b/xgnokii/xpm/Tool_brush.xpm new file mode 100644 index 0000000..eb5dea9 --- /dev/null +++ b/xgnokii/xpm/Tool_brush.xpm @@ -0,0 +1,26 @@ +/* XPM */ +static char * Tool_brush_xpm[] = { +"20 19 4 1", +" c None", +". c #000000", +"+ c #949194", +"@ c #FFFFFF", +" ", +" ", +" ", +" .... ", +" . . ", +" . . ", +" .. .+ ", +" .@@...+ ", +" .@ .++ ", +" .@@ .+ ", +" .@ .++ ", +" .@@ .+ ", +" .@ .++ ", +" .. .+ ", +" ....++ ", +" ...++ ", +" ..++ ", +" .++ ", +" "}; diff --git a/xgnokii/xpm/Tool_filled_rectangle.xpm b/xgnokii/xpm/Tool_filled_rectangle.xpm new file mode 100644 index 0000000..ad4a15f --- /dev/null +++ b/xgnokii/xpm/Tool_filled_rectangle.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * Tool_filled_rectangle_xpm[] = { +"20 19 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" .............. ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Tool_line.xpm b/xgnokii/xpm/Tool_line.xpm new file mode 100644 index 0000000..936a666 --- /dev/null +++ b/xgnokii/xpm/Tool_line.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * Tool_line_xpm[] = { +"20 19 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" . ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/Tool_rectangle.xpm b/xgnokii/xpm/Tool_rectangle.xpm new file mode 100644 index 0000000..d60065e --- /dev/null +++ b/xgnokii/xpm/Tool_rectangle.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * Tool_rectangle_xpm[] = { +"20 19 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" .............. ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" . . ", +" .............. ", +" ", +" ", +" ", +" "}; diff --git a/xgnokii/xpm/alarm.xpm b/xgnokii/xpm/alarm.xpm new file mode 100644 index 0000000..efb08be --- /dev/null +++ b/xgnokii/xpm/alarm.xpm @@ -0,0 +1,36 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This icon is used for alarm notification. + + Last modification: Sat Jul 10 21:30:28 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *XPM_alarm[] = { + +"9 9 3 1", + +" c None", +"# c #000000", +"+ c #d0dae8", + +"#########", +"## # ##", +"# # #", +"# # #", +"# ### #", +"# #", +"# #", +"## ##", +"#########" +}; diff --git a/xgnokii/xpm/background.xpm b/xgnokii/xpm/background.xpm new file mode 100644 index 0000000..3f5922e --- /dev/null +++ b/xgnokii/xpm/background.xpm @@ -0,0 +1,247 @@ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the background of the GUI. + + Copyright (C) 1999 Petr Vostøel + + Last modification: Sat Jun 26 07:30:06 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +/* XPM */ +static char *XPM_background[] = { +"261 96 129 2", +" c None", +". c #FFFFFF", +"+ c #FCFCFC", +"@ c #F9F9F9", +"# c #F9F2F2", +"$ c #F4EAEA", +"% c #F3F3F3", +"& c #EEF2F7", +"* c #EEF1F7", +"= c #EDF1F6", +"- c #EDEDED", +"; c #EBEFF5", +"> c #E8EDF4", +", c #E8CECD", +"' c #E6EBF3", +") c #E6E6E6", +"! c #DFE6EF", +"~ c #DEDEDE", +"{ c #DCE4EE", +"] c #D9E1ED", +"^ c #D7DFEB", +"/ c #D6DEEB", +"( c #D6D6D6", +"_ c #D3DCE9", +": c #D2ADAC", +"< c #D1DBE9", +"[ c #D0DAE8", +"} c #CFD9E8", +"| c #CF9A98", +"1 c #CECECE", +"2 c #CDD8E6", +"3 c #CAD5E5", +"4 c #C9C9C9", +"5 c #C7C5C5", +"6 c #C6D2E3", +"7 c #C5CEDB", +"8 c #C2CFE1", +"9 c #C1C1C1", +"0 c #C0C9D6", +"a c #BFCCDF", +"b c #BF7C7B", +"c c #BDC6D3", +"d c #BBC9DD", +"e c #BABABA", +"f c #B8C7DC", +"g c #B8C0CB", +"h c #B7C6DC", +"i c #B6C6DB", +"j c #B4C4DA", +"k c #B3C3DA", +"l c #B3BBC7", +"m c #B2C2D9", +"n c #B2B2B2", +"o c #B10707", +"p c #AF5F5D", +"q c #ACB4BF", +"r c #ABABAB", +"s c #A5ADB8", +"t c #A4A4A4", +"u c #A23C3A", +"v c #9BA3AD", +"w c #9B9B9B", +"x c #949494", +"y c #939AA4", +"z c #8C929C", +"A c #8B8B8B", +"B c #848383", +"C c #7D838B", +"D c #7B7B7B", +"E c #786463", +"F c #757B83", +"G c #757575", +"H c #725655", +"I c #6F7070", +"J c #6F0302", +"K c #6A6A6A", +"L c #686D74", +"M c #656565", +"N c #61666C", +"O c #606161", +"P c #5C5C5C", +"Q c #575B61", +"R c #575758", +"S c #545454", +"T c #505151", +"U c #4E4F4F", +"V c #4C4C4C", +"W c #4B2726", +"X c #484848", +"Y c #446BA4", +"Z c #444444", +"` c #4369A1", +" . c #41669C", +".. c #414449", +"+. c #404040", +"@. c #3D6194", +"#. c #3D3D3D", +"$. c #393939", +"%. c #385886", +"&. c #37393D", +"*. c #353535", +"=. c #34527E", +"-. c #344F69", +";. c #324E78", +">. c #303031", +",. c #2E4970", +"'. c #2D0201", +"). c #2C2C2D", +"!. c #2B4468", +"~. c #292929", +"{. c #273E5E", +"]. c #252525", +"^. c #233755", +"/. c #212121", +"(. c #1F314B", +"_. c #1B2B42", +":. c #1B1B1B", +"<. c #162336", +"[. c #151515", +"}. c #0F1A29", +"|. c #0E0E0E", +"1. c #08121E", +"2. c #080D14", +"3. c #08090B", +"4. c #040506", +"5. c #012343", +"6. c #000000", +"7. c #FFFFFF", +"8. c #000000", +" [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.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.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.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.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.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.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.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.8.8.8.8.8.8.8.8.8.8.8.8. ", +" 8.8.8.8.8.3.Z w e r G [.w e r 8.*.e A 8.8.S r e G [.8.w e G [.r e M A e A A e A 8.8.8.8.8.G e r Z 8.8.8.8.8.8.8.G M G M 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.8.8.8.8.8.8.r e e w *.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.[.G e r Z 8.8.8.8.8.8.8.G M 8.8.8.8.8.8.8.1._.,.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.%.;.!.^._.}.2.8.8.8.8. ", +" 8.8.8.}.(.(.2.8.G . . . . - [.. . . [.M . A 8.w . . . . e 8.. . G G . ~ [.. . G . . G 8.8.8.8.w 1 S S /.8.8.8.8.8.8.8.~ Z ~ Z 8.8.8.8.8.8.8.~ Z 8.8.8.8.8.8.8.8.8.8.8.8.8.. G Z r ~ 8.8.8.8.8.8.8.[.[.8.8.8.8.8.8.8.8.8.8.1 r Z M /.8.8.8.8.8.8.8.r S 8.[.[.8.8.8.8.8.8.1.!.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` ` .@.=.!._.}.4.8.8.8. ", +" 8.8.2._.;. .=.1.8.Z . . G 8.[.+.[.. . . S G . G Z . . Z M . . ).. . G . . +.[.. . D . . G 8.8.8.Z - [.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.8.8.*.. *.8.[.. Z 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.8.8.8.8.8.8.1.=.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` ` =.{.<.3.8.8.8. ", +" 8.8.2.^.=.Y Y Y (.8.8.w . ~ 8.8.8.8.+.. . . G r . Z r . 1 8.Z . . G . . - . A 8.+.. . G . . Z 8.8.8.w w 8.8.8.8.8.G - . A 8.*.. *.. 8.M 1 8.8.e M *.. 8.A - . e 8.Z . e M 8.8.8.+.. 8.8.8.. Z A - . e 8.1 - e *.A - . e 8.8.8.8.*.. I 8.8.8.M 1 8.8.e M *.. [.4 - e *.G - . A 8.8.8.(.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` =.^.1.4.8.8. ", +" 8.3.(.=.Y Y Y Y Y 1.8.8.~ . w G . . . A . A . e e . *.- . w 8.S . . A . . . . /.8.M . . D . . /.8.8.8.~ G 8.8.8.8.G e [.*.. *.T ~ S ~ 8.G r 8.8.- Z S ~ 8./.8.S . 8.M 1 [.8.8.8.8.G 1 8.8.[.. *.:.8.S . 8.M e 8.8./.8.S . 8.8.8.8.8.M - ~ S 8.G r 8.8.- Z +.- 8.M e 8.G e [.*.. *.8.8.1.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.%.=.;.,.!.!.!.!.!.!.,.;.=.%.@.` Y Y Y Y Y Y Y Y @.!.<.3.8.8. ", +" 8.8.}.,.` Y Y Y Y Y Y 8.8.8.. . G Z w . . G . G 1 . - . 8.. . G 8.A . . G . - . . G 8.G . . G . . 8.8.8.8.. Z 8.8.8.8.~ r I G . +.G e G e 8.r G 8.8.. [.G e *.~ . ~ 1 8.G w 8.8.8.8.8.A e 8.8.+.. *.~ . ~ 1 8.G w 8.*.~ . ~ 1 8.8.8.8.8.8.[.w . /.r G 8.8.. [.G e 8.G w 8.~ r I G . +.8.8.8.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.;.{._.}.1.2.4.8.8.8.8.8.8.8.8.4.3.1.}.<.^.,.%.` Y Y Y Y Y Y .,.<.3.8.8. ", +" 8.8._.%.Y Y Y Y Y Y Y Y 1.8.8.- . w 8.S . - r . Z w . . ~ 8.- . A 8.~ . w r . e e . ~ 8.r . 1 r . 1 8.8.8.8.. Z 8.8.8.8.. w G G G [.w G w G 8.1 S 8.Z . 8.w G ~ w 8.G r 8.r G 8.8.8.8.8.e G 8.8.A r ~ w 8.G r 8.r G 8.~ w 8.G r 8.8.8.8.8.8.8.8.. Z 1 S 8.Z . 8.w A 8.r G 8.. w G G G [.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.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.!._.1.3.8.|.+.I A t r n n n n r r t x A I T ].|.4.1.<.{.%.` Y Y Y Y Y @.!.}.8.8. ", +" 8.4.{. .Y Y Y Y Y Y Y %.{.2.8.8.w . . 1 ~ . e e . *.O . . e 8.w . - 1 . - /.e . r M . . Z e . e e . e 8.8.8.8.r r [.[.*.8.~ w [.[.:.8.e G e G 8.. S 8.G 1 8.e G . M [.r G 8.e S 8.8.8.8.8.1 G 8.S - *.. M [.r G 8.e M 8.. M [.r G 8.8.8.8.S [.[.A 1 8.. S 8.G 1 8.e G 8.e M 8.~ w [.[.:.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.8.8.8.8.8.8.}.;.` Y Y Y Y Y Y Y Y Y Y ` ;.(.1.4.4.Z B n 9 9 9 9 e e e n n n r r t t t w w x x D S ].4.2._.,. .Y Y Y Y Y @.^.2.8.8. ", +" 8.3.!.` Y Y Y Y Y Y %.^.2.8.8.8.8.[.w - . ~ w S . . 8.*.. . A 8.[.w . . r /.8.. . G [.. . w . . G . . G 8.8.8.8.*.e . ( S 8.*.( . - M 8.- Z - Z 8.A . ~ 1 e 8.- Z G . e 1 M 8.. Z 8.8.8.8.8.. . . 1 Z 8.G . e 1 M 8.r . G G . e 1 M 8.8.8.8.r . . r /.8.A . ~ 1 e 8.- Z 8.r . G *.( . - M 8.8./.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v &.}.;.` Y Y Y Y Y Y Y Y .,.<.3.8.#.A e 4 5 5 9 9 9 9 e e e n n n r r t t t w w x x A A B D V :.4.}.!.@.Y Y Y Y ` ;.<.8.8. ", +" 8.4.!.Y Y Y Y Y Y Y !.}.8.8.].N N /.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.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.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.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.v > * = ' ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y ).8.}.;.` Y Y Y Y Y Y ` ;.<.4.3.P r 4 4 4 4 5 5 5 9 9 9 e e e n n n r r t t t w w x x A A B B D D P ).4.}.!. .Y Y Y Y @.(.3.[. ", +" 8.8.{.Y Y Y Y Y Y @._.8.8./.I l [ [ v O ~.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.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.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.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.8.8.8.8.8.8.8.8.8.8.8.8.8.2.X g * & & & & & { [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.}.;.` Y Y Y Y Y Y %.(.3.4.M e 1 1 1 4 4 4 5 5 9 9 e e e n r t w w w t t t w w w x x A A B B D D G I P ~.4.<.=.Y Y Y Y ` !.1.8. ", +" 8.8._.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m d * & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ z /.8.<.%.` Y Y Y Y Y ` ,.}.8.V n 1 1 1 4 1 4 4 5 9 e n r r t t w w x x x A x w t w w w x x A A B B D D I K K M U :.2.{.@.Y Y Y Y =.}.8. ", +" |.}.@.Y Y Y Y Y %.<.8.:.F } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < } 3 3 3 / [ [ [ [ [ < < < < < < < < < < < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m k ! & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ y /.8.<.%.Y Y Y Y Y Y @.(.3.:.x 1 1 1 1 1 1 4 5 5 9 n r r t t r w x r ( ) 4 x B w w w x x x A A A B B D D I I M M P P *.3._.%.Y Y Y Y %.}.8. ", +" 8.3.,.Y Y Y Y Y =.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < 6 m m m m m m m k 2 < [ [ ^ } [ [ [ [ [ [ [ [ [ < < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 i m m m m m m m k / & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ v ).8.}.%.Y Y Y Y Y Y %.<.4.S e 1 1 1 1 1 1 5 e n n r r n 4 ~ @ . w x . . . . x G A x x x A A A A B B B D D G K K O P R S X [.1.,.Y Y Y Y @.<.8. ", +" 8._.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 d m m m m m m m m m m m h 2 _ k m m m m m m m m m m k _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8 m m m m m m m k ] & & & & & * [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q &.8.}.%.` Y Y Y Y Y =.}.8.D 4 1 1 1 1 1 4 5 e n r r r n . . . @ 1 A e . - I A M M D B B B B B B B B B D D D G I M O P R T V V /.2.!.Y Y Y Y @.<.8. ", +" |.1.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < d m m m m m m m m m m m m m m j 8 j m m m m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m k ; & & & & & = [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 0 T 8.}.;.` Y Y Y Y Y ;.1.|.w 4 1 4 1 1 4 4 4 e n e ) . 9 x 4 ~ . @ O P x . . % t S X R I G G G G D D D D D D G I K K M P R T V Z +.~.3.{.Y Y Y Y @.}.8. ", +" 8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 6 m m m m m k ] & & & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 L 8.3.!.` Y Y Y Y Y ;.1.:.t 4 4 4 4 4 5 5 9 9 r t % . ) w I O B . . O *.>.t . . . r ].~.R P P O M M K I I I I I I K K O P R T X Z #.$.).|.{.` Y Y Y =.1.|. ", +" [.2.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m m m m m m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] 3 d m k 8 < ^ ' * & & * ' _ [ [ [ [ [ [ [ [ [ [ [ [ [ 2 z |.8.^.` Y Y Y Y Y ;.1./.r 5 4 4 4 4 9 e n r t w r . . I R S #.*.. . D [.|.|.~.9 . - 4.|.Z Z X V U S R P O M M K K K M M P R T X Z #.$.$.).|.{.Y Y Y Y !.3.8. ", +" 8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 m m m m m m m m m j h d f k m m m m m m m m m m m m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 6 2 _ [ [ [ } ] ] } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ q >.8.<. .Y Y Y Y Y =.1.:.r 5 5 5 4 4 9 n n e n x B x . . M *.)./.:.5 . n 4.4.~ w ~ . n 8.4.#.#.#.#.+.Z X V T S P P O O O O P R T X Z #.$.*.*.~.2.!.Y Y Y ` ^.8.8. ", +" 8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m 8 3 [ < < < < 3 h m m m m m m m m m k h h d d 6 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ } [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 3 O 8.1.=.` Y Y Y Y %.}.[.t 9 5 5 5 5 9 n r 4 . @ t M S % . e /.[./.3.B . - 8./.. . . 1 >.8.[.$.$.$.#.#.#.#.Z Z X V T R R P P P R T V Z $.$.*.*.*.].2.,.Y Y Y .<.8. ", +" |.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m k } _ [ [ [ [ [ [ [ [ 6 m m m m m m m m 6 _ < _ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] _ [ [ [ [ [ [ [ < < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] < < ] ] ] ] ] < } a d d d d 3 [ [ [ [ [ [ [ [ [ [ [ [ [ z |.4.{.` Y Y Y Y @.<.4.x 9 9 9 9 5 e n r r . . . . t $.t . . B B - [.+.- n |.8.8.>./.8.8.3.).$.$.$.$.$.$.#.#.#.+.Z X V U S S R S T V Z #.*.*.*.*.>./.1.=.Y Y Y =.1.[. ", +" 8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ k m m m m m m 8 } [ [ [ [ [ [ [ [ [ [ ] d m m m m m m m 2 [ ] ' ; * * * * * * * * * * * * * * * & * ' ] [ [ [ [ [ < ' ; = * * * * * * * * * * * * * * & = ; ! < [ [ ] * & * & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & * * & ! < ' & * * & ] 2 k m m m m 6 [ [ [ [ [ [ [ [ [ [ [ [ c #.8.<. .Y Y Y Y ` ^.8.G 9 9 9 9 9 n r t w A ~ . ) . . e *.( . . . - /.8.8.8.4.8.8.8.8.8.3.).$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V U T T U V Z $.$.*.*.>.>.>.[.<.@.Y Y ` {.8.8. ", +"8.4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 2 m m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m k _ ] * & & & & & & & & & & & & & & & & & & & & = ] [ [ [ < ; & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < h m m m m 6 [ [ [ [ [ [ [ [ [ [ [ 2 F |.3.;.` Y Y Y Y ,.3.U e e 9 9 e n r r ( w G x . % 4 . . 1 Z I 9 I |.8.4.4.4.[.*.).).).>.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.Z Z X V V V *.~./.:./.*.>.>.>.>.|.^.Y Y Y .<.8. ", +"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ] ; & & & & & & & & & & & & & & & & & & & & & & = < [ < ' & & & & & & & & & & & & & & & & & & & & & & & ! [ ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ [ l >.8._. .Y Y Y Y %.}.:.r e e e e n t t - . e P X ) . . ( . . 9 8.8.8.8.4.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z #.:.[.|.4.8.8.3.>.>.).).~.2.,.Y Y Y ;.4.8. ", +"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 8 ' & & & & & & & & * = = = = = = = & & & & & & & & ' [ ] = & & & & & & & & = = = = = = = & & & & & & & & ; < ] * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ [ 2 F |.2.=.Y Y Y Y ` (.8.B e e e e r t w ~ . @ M X *.x . . :.Z x |.8.|.|./.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.*.|.|.|.K B P 8.8.3.>.).).).:.<.@.Y Y ` _.8. ", +"|.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ j m m m m m 2 ' & & & & & & & ' ] ] ] ] ] ] ] ] ' = & & & & & & > [ ! & & & & & & & ; ! ] ] ] ] ] ] ] ' * & & & & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ g *.8.(. .Y Y Y Y ;.3.Z n n n e n t w ( . . . ) R /.].. . I 8.8.8.|.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.>.3.3.$.~ . . + 5 8.8.[.).).).).|.{.Y Y Y =.3.8. ", +"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < j m m m m m 8 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m < ' & & & & & = ] < [ [ [ [ [ [ [ [ < ] = & & & & & > [ ' & & & & & & ' < [ [ [ [ [ [ [ [ < ] ; & & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ [ [ C |.2.=.Y Y Y Y .<.4.w n n n n t w x ) ) n . . % Z |.t 1 >.8.:.:.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.4.*.- . . 1 ~ % G 8.[.).).~.~./.1.@.Y Y ` _.8. ", +"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m d < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m k < ' & & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & & > [ ' & & & & & ; _ [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ 7 ..8._. .Y Y Y Y ;.4.R r r n n t w w x B I V B . . % M [.[.8.3.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.4.n . . M 4.|.4 V 8.[.~.).~.~.~.|.^.` Y Y =.3.8. ", +"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m k < ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ _ ' & & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ [ v :.4.,.Y Y Y Y ` <.4.t r r r r w x ) @ n P $.~.S % . ~ 8.3.3.>.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.8.8.. . I 4.4.8.8.8.4.4.8.].~.~.]./.1.@.Y Y .<.8. ", +"8.@.Y Y Y Y Y 8.8.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m a < [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m 6 < ' & & & & ! [ [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] * & & & = ] ^ * & & & * < [ [ [ [ [ [ [ [ [ [ [ [ [ < ' & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ 2 N 8.}.@.Y Y Y Y =.3.T t t r r t x A ( . . ) D :.|.$.~ >.8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.*.>.*.>.*.>.*.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.8.8.1 . O 4.4.8.8.8.8.:.8.4.].~.].].|.{.Y Y Y !.8. ", +"8.%.Y Y Y Y Y 8.8.7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ _ m m m m m m j < [ [ [ [ [ [ [ [ [ [ [ [ ^ f m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] & & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ / ; & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ [ g *.8.{.` Y Y Y Y (.8.x t t t w A A n w x 1 . . ( X 4.8.8.4.>.$.$.$.$.$.$.$.*.*.*.>.>.>.).).).).).).).).>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.3.8.+.. - >.4.+.I t ( 4 |.8.[.].].].:.}. .Y Y %.}.8. ", +"8.=.Y Y Y Y Y 4.8.g [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < m m m m m m m 6 < [ [ [ [ [ [ [ [ [ [ < d m m m m m m m < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ' & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ y :.2.=.Y Y Y Y @.1.>.w t t t A B n . . . % . . . . T 8.3.).$.$.$.$.$.$.*.*.*.>.>.).).~.~.].].].].].~.~.).).>.>.*.*.*.$.$.$.$.$.$.$.$.).8.8.T - 9 . . + % ) ( M 8.|.].]././.3.;.Y Y ` _.8. ", +"8.!.Y Y Y Y Y 2.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < a m m m m m m m 6 2 [ [ [ [ [ [ [ 2 3 i m m m m m m m k < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & > [ ' & & & & ' [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; / [ [ [ [ [ [ [ [ [ [ [ < ] = & & & & & ! < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ [ K 8.<.@.Y Y Y Y !.4.I w w w w A B ) . . . ) . . . 1 8.8.~.$.$.$.$.$.$.*.*.*.>.).).~.].]./././././././.].].~.).).>.*.*.*.$.$.$.$.$.$.$.$.~.8.8.w . . . ~ e ) ~ I 8.|.].]././.[.(.Y Y Y ,.8. ", +"8.{.` Y Y Y Y }.8.C [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m f 3 } 3 3 2 2 6 f m m m m m m m m m d _ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & > [ [ [ [ [ [ [ [ [ [ [ [ [ [ ^ ; & & & = ] ^ * & & & ; < < < < < < < < < < < ] ' & & & & & & & ! < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 0 +.8.^.` Y Y Y Y _.4.x w w w w B D D n . . % A $.Z >.8.3.$.$.$.$.$.$.*.*.>.>.).~.]././.:.:.:.[.[.[.:.:././.].~.).).>.*.*.$.$.$.$.$.$.$.$.$.[.8./.w T - + @ - A 8.8.|./.]././.:.}. .Y Y @.8.8. ", +"8._. .Y Y Y Y _.8.Q [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < i m m m m m m m m m k f k f k m m m m m m m m m m m 3 < < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & ; < [ [ [ [ [ [ [ [ [ [ [ [ [ ] = & & & = ] ^ * & & & = > ' ' ' ' ' ' ' ' ' ; * & & & & & & & & ] < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ s ].3.;.Y Y Y Y @.1.*.x x x w x D G K P P n . . - Z 8.3.>.$.$.$.$.$.$.*.*.>.).~.]./.:.:.[.[.[.:.[.:.[.[.:.:./.].~.).>.>.*.*.$.$.$.$.$.$.$.$.>.[.8.8.>.~ + @ K 8.8.8.8.[.:././.:.|.;.Y Y ` _.8. ", +"8.}.@.Y Y Y Y {.8.>.2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < } m m m m m m m m m m m m m m m m m m m m m m m m m [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & = ] [ [ [ [ [ [ [ [ [ [ [ [ [ ! & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ; < < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ z |.}.%.Y Y Y Y ;.3.K A x x A G G D n r x #.V 9 . /.8.).$.$.$.$.$.$.*.*.>.).~.]./.:.[.[.[.:.[.[.:.[.[.[.[.:.:./.].~.).>.*.*.$.$.$.$.$.$.$.$.$.>.4.8.~ . . P 8.8.~.S [.8.|././.:.|.^.Y Y Y {.8. ", +" 4.;.Y Y Y Y =.8.8.v [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 m m m m m m m m m m m m m m m m m m m m m m m k < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ' & & & & & ; < [ [ [ [ [ [ [ [ [ [ [ ] * & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & & & ] [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ L 8.<.@.Y Y Y Y {.8.B A A x D I x . . . . . x [./.8.8.>.$.$.$.$.$.$.*.>.).~.]./.:.[.:.[.:.[.[.[.[.:.[.:.[.[.:./.].~.).>.*.*.$.$.$.#.$.$.$.$.$.$.4.8.B - T U w 5 1 9 R 8.|./.:.:.[.<.Y Y Y ;.4. ", +" 8.^.Y Y Y Y Y }.8.N [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 m m m m m m m m m m m m m m m d d m m m m m d < [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & ' < [ [ [ [ [ [ [ [ [ ] ; & & & & & = ] ^ * & & & & & & & & & & & & & & & & & & & & & ; ] [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ U 8.^.` Y Y Y Y _.3.A A A A I K 1 . ~ ~ . . . x 8.8.>.$.$.$.$.$.$.*.*.>.).]./.:.[.[.[.:.[.[.:.[.:.[.[.[.:.[.:.:./.~.).>.*.*.$.$.#.#.#.$.$.$.$.$.:.4.|.~ . + % ) ( 9 M 8.|./.:.:.:.1.@.Y Y @.3.:. ", +" 8.}. .Y Y Y Y {.8.].l [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 k m m m m m m m m m m k j [ ] d m m m m m 6 _ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ! & & & & & & & ; ! ] ] ^ ^ ^ ] ] ' = & & & & & & = ] ^ * & & & = ' ' ' ' ' ' ' ' ' ' * & & & & ' ] < [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ &.8.!.Y Y Y Y @.}.>.B B B A K M - . I *.#.B . 1 8.3.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.:./.].~.).>.*.$.$.#.#.#.$.$.$.$.$.*.4.8.1 . + ( B Z 8.8.8.|./.:.:.[.|.%.Y Y Y }.[. ", +" 8.4.;.Y Y Y Y %.1.8.I [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 6 a k m m m m k d 8 3 _ [ ^ k m m m m m 3 [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > [ ] = & & & & & & & & & = = = = * & & & & & & & & & ; _ ] * & & & ; < [ [ [ [ [ [ [ [ < > & & & & { [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ ).8.;.Y Y Y Y %.1.T D B B B M O 1 . . ( A B . 9 8.3.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.:.[.~.I n ~ + ~ n I ~.[.:./.].~.>.*.*.$.#.+.+.#.#.$.$.$.$.$.3.8.A . I 8.8.8.8.8.|.[.:.:.:.[.|.,.Y Y Y _.|. ", +" 8.(.Y Y Y Y Y ^.8./.s [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 3 } _ < 2 2 < [ [ [ < } m m m m m k < [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < < ' & & & & & & & & & & & & & & & & & & & & & & & ] [ ] * & & & ; < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] < i m m m m 6 [ [ [ [ [ [ [ :.8.%.Y Y Y Y =.2.M D D D B K P G ) . . . . . B 8.|.$.$.$.$.$.$.*.*.>.~.].:.[.:.[.[.:.[.S e $ , : | | | , n R /.].~.).>.*.$.$.+.Z Z #.#.$.$.$.$.$.:.8.+.. w 8.8.8.8.8.8.3.[.:.[.:.|.{.Y Y Y ^.8. ", +" 8.8.%.Y Y Y Y %.}.8.R 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] 2 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < k m m m m m d ^ [ [ < ' & & & & ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ { = & & & > < [ < ' & & & & & & & & & & & & & & & & & & & & & ' < [ ] * & & & * < [ [ [ [ [ [ [ [ _ > & & & & ] [ [ [ [ [ < ' & & & & ] } i m m m m 6 [ [ [ [ [ [ [ 2.8.%.Y Y Y Y ;.4.I G D D G P P T S x 4 9 9 B 8.8.:.$.$.$.$.$.$.*.>.).~./.:.:.[.[.:.[.S 4 , : : | b b p u b 9 P ~.).>.>.*.$.#.Z X Z +.#.$.$.$.$.$.).8.8.~ D 8.).*.>.R $.8.4.:.:.[.|.^.Y Y Y !.8. ", +" 8.^.Y Y Y Y Y !.8.8.F [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ < 8 k k 8 3 [ < [ [ [ [ [ [ [ [ [ < 2 k m m m m m m 3 [ [ [ < ' = = = = ] [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] = = = = ; < [ [ _ ' * = = = = = = = = = = = = = = = = = ; ] < [ [ ] ; = = = ; < [ [ [ [ [ [ [ [ < ; = = = = ] [ [ [ [ [ < ' = = = = ] } d k i i i 6 [ [ [ [ [ [ [ 8.8. .Y Y Y Y ,.8.I I G G R T D I Z *./.|.[.>.8.|.$.$.$.$.$.$.$.*.>.).~./.:.[.:.[.[.).e , | | | | b p u u o b e #.).:.).*.).Z [.[.X Z #.$.$.$.$.$.$.4.8.r . @ - ( 9 r I 8.8.:.[.[.[._.Y Y Y ;.8. ", +" 8.8.%.Y Y Y Y Y _.8.:.z [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ] m m m m m m m 8 6 3 3 6 6 3 3 6 k m m m m m m m f ] [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ < ] ] ] ] ] [ [ [ [ [ < ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] < [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ < ] ] ] ] ] < [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y !.8.I I I G V U ~ % +.>./.3.- 9 4.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.:.[.I , | | | b b p u u o J J : B *.4.:.>.4.Z [.3.V Z #.$.$.$.$.$.$.|.8.9 . + - ( 9 r A 8.8.[.[.[.[._.Y Y Y %.8. ", +" 8.(.` Y Y Y Y %.<.8.).y [ [ [ [ [ [ [ [ [ [ [ [ [ [ < d m m m m m m m m m m m m m m m m m m m m m m m m < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.K K K I X X . % X ).:.[.- ~ 8.4.$.$.$.$.$.$.$.*.>.).]./.:.[.[.[.:.n : b b | # p u u , u J J p e $.4.[.].8./.|.8.U Z #.$.$.$.$.$.$.|.8.w . I x ( |.D x 8.8.[.:.[.[.<.Y Y Y %.8. ", +" 8.8.;.Y Y Y Y Y %.<.8.).z [ [ [ [ [ [ [ [ [ [ [ [ < < m m m m m m m m m m m m m m m m m m m m m m m m 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.M M K K Z Z ~ . . 4 5 ~ . 9 8.4.$.$.$.$.$.$.$.*.>.).~./.:.:.[.:.[.~ b p p p b $ p , | J J J W ) T |.8.8.8.8.8.8.T Z #.$.$.$.$.$.$.[.8.B . +.G ( ).K A 8.8.:.[.[.[.<.Y Y Y .8.8.", +" 8.}.@.Y Y Y Y Y =.<.8.:.F 2 [ [ [ [ [ [ [ [ [ [ ^ d m m m m m m m m m m m m m m m m m m m m m m m 3 _ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P O O M Z #.O % . . . . . T 8.|.$.$.$.$.$.$.$.*.>.).~.]./.:.:.[.[.+ u u u u o b . : J J '.'.'.. M *.:./.>.).$.#.S X #.$.$.$.$.$.$.:.8.B ~ >./.|.8.~.].8.8.[.:.[.[.<.Y Y Y @.8.8.", +" 8.8.(.` Y Y Y Y Y %.<.8.8.R s [ [ [ [ [ [ [ [ [ 2 d m m m m m m m m m m m m m m m m m m m m m h 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.P P P O P $.$.U A e 5 B /.8.8.~.$.$.$.$.$.$.$.*.>.).~.]././.:.:.:.~ u u o J u , : - u J '.'.W - G I K I I I K O S X #.$.$.$.$.$.$.:.8.+.D +.#.8.8.8.8.8.4.[.[.:.[.<.Y Y Y @.8.8.", +" 8.8.{.Y Y Y Y Y Y %._.8.8./.I l [ [ [ [ [ [ [ < 3 3 3 8 h k m m m m m m m m m m m m m m i 2 2 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.Y Y Y Y Y !.8.R R R P P R *.>.)./.[.4.8.8.~.$.$.$.$.$.$.$.$.*.*.>.).~.]./././.:.n p J J u , | J p ' W '.'.E ( A D B B D G K O S X #.$.$.$.$.$.$.:.8.D . @ ) 1 n G O 4.8.[.[.[.[._.Y Y Y %.8.8.", +" 8.3.!.Y Y Y Y Y Y Y !.}.8.8.].N v 2 [ [ [ [ [ [ [ [ } < [ 3 a d d d d d d d d d d d 3 < [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ,.8.R T S R P P R X $.)./.[.:.>.$.$.$.$.$.$.$.$.$.*.*.>.).~.~.].].]./.D : J J J B J '.'.H ].'.'.n 9 X [.B A B D I M S X #.$.$.$.$.$.$.:.8.>.D A r e r x D 8.8.[.:.[.[._.Y Y Y =.8.8.", +" 8.2.!.Y Y Y Y Y Y Y %.(.1.8.8.8.>.Q C v g 7 [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ 8.8.` Y Y Y Y ;.4.T V U T S R R P R T Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.>.>.).).~.~.~.~.#.9 b '.J '.'.'.'.'.'.'.G ) B 3.$.B O S G I M S X #.$.$.$.$.$.$.4.8.+.D e ) 5 r A O 8.8.[.[.:.[.(.Y Y Y !.8.8.", +" 8.3.{.` Y Y Y Y Y Y Y %.{.}.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.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.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.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.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.8.8.8.8.8.8.8.8.` Y Y Y Y =.3.V Z X V U S S S S U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.>.>.~./.:.].>.M 9 b '.'.'.'.'.'.'.G ) 1 R 8.X ).8.8.~.K O S Z #.$.$.$.$.$.$.8.8.~ + % ~ A #.3.8.8.4.[.:.[.|.{.Y Y Y {.8.8.", +" 8.8.(.%.Y Y Y Y Y Y Y Y Y =.{._.}.2.4.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.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.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.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.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.8.` Y Y Y Y Y %.1.+.+.Z Z X V T T T U Z #.$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.*.].3.8.8.4.].$.G 4 n E W '.W M n $ ( 5 I 8.8.8.[.:.8.R P U Z #.$.$.$.$.$.*.8.8.+ @ - ( e w B *.8.3.[.[.:.|.!.Y Y Y (.8.8.", +" 8.8.}.;.` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @.}.~.#.#.+.Z X V V U V Z #.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.~.4.8.4.[.8.|.+.R G n ( & + % - ~ 1 4 5 n O *.T D ].4.R P V Z #.$.$.$.$.$.:.8.|.U V G G B G D *.8.|.[.:.[.|.=.Y Y Y <.8.8.", +" 8.8.3.(.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ` <.|.$.$.$.#.+.Z X V X Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.[.8.|.).$.).>.T X V I x t n e x $.].P e 9 e t t S 4.*.O R X +.#.$.$.$.$.$.4.8.A @ w X 8.8.8.8.8.8.3.[.[.:.1.@.Y Y .2.8.8.", +" 8.8.1.^.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.^.}.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y %.^.}.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.}.^.%.Y Y Y Y Y Y Y Y Y Y ^.4.+.$.$.$.#.#.Z Z Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.|.8.>.+.Z V S P /.4.X x t r w :.8.8.8.S e n t w M $.M P T X #.#.$.$.$.$.).8.8.- @ - ~ t R |.8.8.3.[.:.[.[.<.` Y Y =.4.8.8.", +" |.8.2.(.;. .Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y @._.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y @._.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8._.%.Y Y Y Y Y Y Y Y Y ,.4.~.*.*.$.$.$.#.+.Z Z #.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.:.8./.X U S P O |.8.M w t r I 4.#.B 8.|.A r w x B I M R V Z #.$.$.$.$.$.:.8.+.@ 5 4 ( n x G +.8.3.[.[.:.|.^.Y Y Y !.8.8.8.", +" [.8.4.}.^.;.@. .` Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ^.8.8.8.8.8.'.J o J '.8.8.8.[.. . . G 8.e . 8.~ . . . /.~ . . . ).. . . w [.. . . r e M 8.w w 8.8.8.8.8.8.8.^.Y Y Y Y Y Y ^.8.8.8.8.8.8.8.8.8.8.8.8.*.1 e e 8.[.- [.w . - M [.. *./.- 8.e . 8.8.[.- 8.8.8.8.8.'.J o J '.8.8.8.8.8.^.Y Y Y Y Y Y Y Y Y %.1.:.*.*.*.*.$.$.#.#.+.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.#.$.[.|.X S P O U 4.3.B w t r I 4.:.t >.8.O w x B G K P T X +.#.$.$.$.$.$.:.8.D @ t |.>.K D K ).8.3.[.:.[.|.,.Y Y Y _.8.8.8.", +" 8.8.8.8.1.<.(.{.=.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.1.8.8.8.8.8.J o o o J 8.8.8.+.1 Z G w Z ~ e Z 8.G G 8.8.8.G G 8.Z 1 Z +.[.+.e 8.*.. S ~ A e 8.8.8.8.8.8.8.8.1.%.%.%.%.%.%.1.8.8.8.8.8.8.8.8.8.8.8.8.I r [.M /.+.e w x [.*.r +.. w S e Z ~ e Z 8.+.e 8.8.8.8.8.J o o o J 8.8.8.8.8.1.%.%.%.%.%.@.Y Y Y ` <.|.*.*.*.*.*.$.$.$.#.#.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.V S P M $.8.].A x w t A |.4.G K 8.X A B G K P S V Z #.#.$.$.$.$.:.8.8.>.% ) 4 K $.I M 4.8.|.[.[.:.1.@.Y Y @.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.8.8.8.8.8.8.o o o o o 8.8.8.G ~ e - Z e M w M 8.r S 8.8.8.r S 8.G ~ e e [.G . . ~ G 8.~ 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.8.[.r - G 8.G G . [.x e A G A ~ A G e M w M 8.G G 8.8.8.8.8.o o o o o 8.8.8.8.8.8.8.8.8.8.8.1.%.Y Y Y {.4.~.>.>.*.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V S P O /.8.#.B A x w w #.8.:.].8.R D G K P S V Z +.#.$.$.$.$.).8.8.A P x ~ 4 r A K +.8.8.[.:.[.[._.Y Y Y ;.3.8.8.8.", +" 8.8.1.1.1.1.1.1.1.1.1.1.1.1.8.8.8.8.8.8.J o o o J 8.8.8.r S 8.w w . . . G 8.- /.8.8.8.- /.8.r S 8.8.8.r S /.~ /.8.e S 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.8.8.G 8./.. 8.r S - *.Z r G r S w . B . . . G 8.r S 8.8.8.8.8.J o o o J 8.8.8.8.8.8.1.1.1.1.2.8.}.` Y Y %.2.:.>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z X U R T |.8.|.).I A A A B >.8.8.*.I I M P S V Z +.#.#.$.$.$.$.~.8.+.@ % R *.G A I +.4.8.3.[.[.:.|.,.Y Y Y ^.8.8.8.8.", +" 8.8.}.5.5.5.5.5.5.5.5.5.5.5.1.8.8.8.8.8.'.J o J '.8.8.8.~ . . e ) Z 8.S r /.~ 8.8.8./.~ 8.8.~ . . ~ 8.~ /.8.G A 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.8.8.8.A 1 e G 8.~ /.M - . r *.~ :.*.. ) Z 8.S r 8.~ . . w 8.8.8.'.J o J '.8.8.8.8.8.1.5.5.5.5.5.4.3.=.Y Y ` _.3.).>.>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.+.Z V U S X >.[.3.R D D D D G K M K M P R U X Z +.#.#.$.$.$.$.~.8.8.|.5 - 1 ].8.8.8.8.8.3.[.:.[.[.1.@.Y Y @.}.8.8.8.8.", +" 8.1.5.5.5.5.5.5.5.5.5.5.5.5.2.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.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.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.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.8.8.2.5.5.5.5.5.5.2.8.^.Y Y Y ,.4./.).).).>.>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z X V T R P O O M K K K M M P P S U V Z Z #.#.#.$.$.$.$.).8.8.U /.P ) ( r :.8.8.8.3.[.[.[.:.|.^.Y Y Y ;.4.8.8.8.8.", +" 8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.1.3.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.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.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.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.3.1.5.5.5.5.5.5.5.}.8.}.@.Y Y .}.|.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.+.Z Z X V U T T S S T T U V X Z Z +.#.#.#.$.$.$.$.$.).4.8.+.@ % ( 4 w t D |.8.4.[.[.[.:.[.|.%.Y Y ` _.8.8.8.8.8.", +" 8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.!.Y Y Y !.8./.).).).).).>.>.*.*.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.+.+.+.+.+.+.#.#.#.#.#.#.#.$.$.$.$.$.$.).4.8.>.4 ) - ~ 4 w A I S 8.4.[.:.[.[.|.(.` Y Y %.2.8.8.8.8.8.", +" 8.4.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.<. .Y Y @.}.|.~.~.~.~.).).).>.>.*.*.*.$.*.|.8.8.8.8.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.4.>.) % R S A e w G M X 8.4.[.[.:.[.|.%.Y Y Y ^.8.8.8.8.8.8.", +" 8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.4.3.,.Y Y Y !.4.:.~.~.~.~.~.).).>.>.*.*.*.|.8.8.8.8.8.8.[.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.).4.8.8.>.) - ~ U 8.3.>.X O 4.8.4.[.[.[.|.(.` Y Y %.1.8.8.8.8.8.8.", +" 8.8.1.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.1.8.<. .Y Y .<.3.].].].~.~.~.~.).>.>.*./.8.|.e + + A 8.8.[.*.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.>.) t B ~ ( e #.8.8.8.8.8.8.[.:.[.[.}.%.Y Y Y (.8.8.8.8.8.8.8.", +" 8.4.}.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.4.4.!.Y Y Y =.2.[.].].].].].~.~.).).>.:.8.K % @ @ + w 8.8.8.~.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.|.( % - ~ ( e t D [.8.8.8.8.[.[.[.:.|.{.Y Y Y =.2.8.8.8.8.8.8.8.", +" 8.4.}.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.}.8.}.@.Y Y ` {.4.:.].].].].].].~.~.[.4.8.G - ( |.~ - I |.8.8.4.:.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.$.I n e I D K O |.8.[.:.[.[.:.|.<. .Y Y ` (.8.8.8.8.8.8.8.8.", +" 8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.^.` Y Y .<.3./././././.].].|.4.8.|.$.) - #.).>.- + U 8.8.4.|.|.).$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.4.8.8.8.P t K U M S 4.8.[.[.:.[.[.[.%.Y Y Y ,.8.8.8.8.8.8.8.8.8.", +" 8.4.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.2.;.Y Y Y %.1.|././././././.|.8.M n |.r ~ A 8.V % @ +.- A 8.8.8.|.|.|.|.[.].$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.*.*.>.].[.8.Z B M M +.4.8.4.[.:.[.[.|.!.Y Y Y %.}.8.8.8.8.8.8.8.8.8.", +" 8.8.2.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.-.-.-.-.-.-.-.-.-.-.-.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.1.8.}. .Y Y Y ,.2.[.:././././.|.8.U r r n 4 B 8.w - n e @ r I 9 +.8.8.8.8.8.4.].$.$.$.$.$.$.$.$.$.$.$.$.*.*.*.>.).~.[.8.8.$.V *.8.8.4.[.[.[.:.|.{.` Y Y ` (.8.8.8.8.8.8.8.8.8.8.", +" 8.8.8.1.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.3.8.(.` Y Y Y !.3.[.:.:.:.:.|.8.8.V w r r :.|.( ~ 4 - % D ) @ r U 9 9 r O 8.4.*.$.$.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.3.8.8.8.8.8.3.[.[.:.[.|.(. .Y Y Y !.8.8.8.8.8.8.8.8.8.8.8.", +" 8.8.8.4.1.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.4.3.!.Y Y Y Y {.3.[.:.:.:.:.|.8.8.3.].3.8.Z 9 4 ( ~ ~ n - ) #.@ @ + + - |.4.*.$.$.$.$.$.$.$.*.*.*.>.).).~.]./.:.[.[.3.4.4.4.3.[.[.:.[.|._. .Y Y Y =.1.8.8.8.8.8.8.8.8.8.8.8.", +" 8.8.8.8.3.2.}.}.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.}.8.1.=.Y Y Y ` {.3.[.:.:.:.:.|.8.8.8.8.8.K t r r w 4 ( ~ I M - - /.#.P 8.4.*.$.$.$.*.*.*.*.>.>.).~.]././.:.[.[.[.:.[.[.[.[.[.[.:.[.|._. .Y Y Y @.}.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.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.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.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.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.8.8.8.8.8.}.%.Y Y Y ` {.3.|.[.[.[.[.[.[.[.8.8.D B A ].A r n t 8.].1 ( 4 $.8.4./.>.>.>.>.>.).).).~.].]./.:.:.[.[.:.[.:.[.[.:.[.:.[.:.[.|._. .Y Y Y ._.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.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.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.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.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.8.8.8.<.@.Y Y Y ` !.2.|.:.[.:.[.[.[.8.8.4.).*.|.B A x ].8.8.+.n n r [.8./.~.~.~.~.].].]././.:.:.[.:.[.[.[.[.:.[.[.:.[.[.[.:.[.|.(. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", +" 8.<.@.Y Y Y Y ,.1.|.:.[.:.[.:.[.8.8.8.8.|.P I T 8.8.:./.:.A x ].8.:./././.:.:.:.:.:.[.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.[.|.^. .Y Y Y ` (.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", +" 8.<.@.Y Y Y Y =.<.3.:.[.:.[.[.[.|.|.4.8.8./.|.8.8.U K I I I [.8.[.:.:.[.[.:.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.|.[.!.` Y Y Y .(.8.8.8.8.Z G /.8.8.8.8.8.8.8.8.8.", +" 8.}.=.Y Y Y Y @.^.3.|.:.[.:.[.[.[.[.4.8.8.8.4.8.:.X R S ].8.8.[.[.[.:.[.[.:.[.:.[.:.[.[.:.[.[.:.[.[.[.[.:.[.|._.%.Y Y Y Y @._.8.8.8.*.G . - r /.8.M A 8.8.8.8.8.", +" 8.1.!.` Y Y Y Y ,.<.4.[.[.:.[.:.[.[.|.|.|.|.4.8.8.8.8.8.8.|.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.[.:.[.|.[.{. .Y Y Y Y =.}.8.8.8.:.r . - *.8.8./.~ [.8.[.8.8.8.", +" |.3.^. .Y Y Y Y @.{.1.3.[.[.[.:.[.:.[.:.[.[.4.4.4.4.4.|.[.:.[.[.:.[.[.:.[.[.[.:.[.[.:.[.[.:.[.:.|.|.(.%.Y Y Y Y Y !.1.8.8.8.[.G . ~ 1 *.8.8.S . M M G 8.8.8.", +" /.8.<.=.Y Y Y Y Y %.^.1.3.[.:.[.[.:.[.[.[.[.[.[.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.:.[.[.|.|.(.%.` Y Y Y Y %.(.4.8.8.8.8.w . 1 G . - *.*.- . . 1 [.8.8.8.", +" 8.8.1.{. .Y Y Y Y ` %.{.}.3.|.[.[.:.[.:.[.:.[.:.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.:.[.[.|.1.^.%. .Y Y Y Y ` ,.}.8.8.8.8.8.8.[.1 A 8.G . - 1 . w 8.8.8.8.8.8.", +" [.8.<.;.` Y Y Y Y Y .;.(.}.3.|.[.[.:.[.[.[.:.[.[.:.[.[.:.[.[.:.[.[.[.[.|.|.1._.,.@.Y Y Y Y Y ` =.(.8.8.8.8.8.8.8.8.8.|.8.8.8.w . . e 8.8.8.8.8.8.8.", +" 8.4._.=. .Y Y Y Y Y Y .;.^.<.1.2.|.|.|.[.[.[.[.[.[.[.[.[.|.|.|.1.<.^.,.@.Y Y Y Y Y Y @.=.^.2.8.8.8.8.8.8.8.8.8.8.8.8.8.[.1 . . . M 8.8.8.8.8.8.", +" 8.8.2._.=. .Y Y Y Y Y Y Y Y @.%.,.{.^._._.<.<.<.<._._.(.{.!.=.@.Y Y Y Y Y Y Y Y @.,.<.4.8.8.8.8.8.8.8.8.8.8.8.8.8.>.G 1 . 1 w . . M 8.8.8.8.8.", +" 8.8.3.<.!.%.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y =.{.}.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8./.~ r . 1 [.8.w . . M 8.8.8.8.", +" 8.8.8.}._.,.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{._.2.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.>.*.8.1 G 8.8.8.r . . Z 8.8. ", +" 8.8.4.1._.{.;.@.Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y %.{.(.}.2.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 w 8.8.8. ", +" 8.8.8.4.2.}._.^.!.;.%.%. .@.@.=.{.(._.}.1.3.4.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.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.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.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.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8. "}; diff --git a/xgnokii/xpm/info.xpm b/xgnokii/xpm/info.xpm new file mode 100644 index 0000000..27d9358 --- /dev/null +++ b/xgnokii/xpm/info.xpm @@ -0,0 +1,73 @@ +/* XPM */ +static char *info_xpm[] = { +/* width height num_colors chars_per_pixel */ +" 30 64 2 1", +/* colors */ +". c #000000", +"# c None", +/* pixels */ +"##############################", +"###############....###########", +"###########...........########", +"########...............#######", +"######..................######", +"####.....................#####", +"###......................#####", +"##.......................#####", +"##.......................#####", +"##.......................#####", +"##......................######", +"##.....................#######", +"###..................#########", +"####...............###########", +"######.........###############", +"##############################", +"##############################", +"##############################", +"##############################", +"#####################...######", +"###############..........#####", +"###########..............#####", +"#######..................#####", +"#####....................#####", +"###......................#####", +"##.......................#####", +"#........................#####", +"#........................#####", +"#........................#####", +"##.......................#####", +"###......................#####", +"####.....................#####", +"#####....................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######...................#####", +"######....................####", +"#####.....................####", +"#####.....................####", +"####.......................###", +"###.........................##", +"##...........................#", +"#.............................", +"#.............................", +"#.............................", +"#............................#", +"##..........................##", +"####.......................###", +"########...............#######", +"##############################", +"##############################" +}; diff --git a/xgnokii/xpm/logo.xpm b/xgnokii/xpm/logo.xpm new file mode 100644 index 0000000..d42f05b --- /dev/null +++ b/xgnokii/xpm/logo.xpm @@ -0,0 +1,369 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the logo of the GUI utility. + + Copyright (C) 1999 FIXME: fill this in. + + Last modification: Sat Jun 26 07:38:27 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *XPM_logo[] = { + +"207 105 238 2", + +".. c #040204", +".# c #344244", +".a c #b4c2c4", +".b c #14221c", +".c c #94a2a4", +".d c #1c3224", +".e c #dce2dc", +".f c #3c524c", +".g c #84928c", +".h c #041204", +".i c #a4b2ac", +".j c #6c6e6c", +".k c #141214", +".l c #242224", +".m c #ccd2cc", +".n c #8c8a8c", +".o c #5c6e6c", +".p c #041a0c", +".q c #444244", +".r c #94928c", +".s c #b4b2ac", +".t c #a4a2a4", +".u c #6c7a7c", +".v c #243a34", +".w c #c4c2bc", +".x c #5c625c", +".y c #848284", +".z c #344a4c", +".A c #b4bab5", +".B c #142224", +".C c #041214", +".D c #a4aa9f", +".E c #040a08", +".F c #ccdadc", +".G c #545a58", +".H c #2c3232", +".I c #e4eae9", +".J c #8c9a9c", +".K c #141a19", +".L c #242a2a", +".M c #343a35", +".N c #041a1c", +".O c #949a98", +".P c #5c6a70", +".Q c #74828c", +".R c #4c524c", +".S c #7c7a7c", +".T c #c4cac9", +".U c #3c4240", +".V c #8c9291", +".W c #647674", +".X c #444a49", +".Y c #bcbaba", +".Z c #0c0a0c", +".0 c #5c5a5c", +".1 c #9caaab", +".2 c #acbabb", +".3 c #6c7677", +".4 c #fcf6f8", +".5 c #747a79", +".6 c #1c2224", +".7 c #a4aaac", +".8 c #1c1a1c", +".9 c #243233", +"#. c #848a87", +"## c #646264", +"#a c #0c1214", +"#b c #eceaeb", +"#c c #2c2a2c", +"#d c #3c3a3c", +"#e c #9c9a9d", +"#f c #cccacc", +"#g c #7c827c", +"#h c #bccacc", +"#i c #9ca29f", +"#j c #0c120b", +"#k c #acb2b0", +"#l c #d4d2cc", +"#m c #f4f2f4", +"#n c #0c1a08", +"#o c #142a2c", +"#p c #2c3a3a", +"#q c #fcfafc", +"#r c #dcdadc", +"#s c #545a64", +"#t c #8c929c", +"#u c #4c4a4c", +"#v c #747a84", +"#w c #acaaac", +"#x c #bcc2bf", +"#y c #1c221c", +"#z c #445251", +"#A c #747274", +"#B c #948e94", +"#C c #b4b6bc", +"#D c #5c666c", +"#E c #4c5a5b", +"#F c #3c4a4f", +"#G c #040e14", +"#H c #141e24", +"#I c #343a44", +"#J c #0c1a1c", +"#K c #4c525c", +"#L c #3c424c", +"#M c #bcbec4", +"#N c #848a94", +"#O c #344645", +"#P c #546262", +"#Q c #e4e2e4", +"#R c #6c727c", +"#S c #24262c", +"#T c #646e6c", +"#U c #94969c", +"#V c #b4b6b4", +"#W c #5c6662", +"#X c #84868c", +"#Y c #7c828c", +"#Z c #646e74", +"#0 c #1c2a2c", +"#1 c #2c363c", +"#2 c #242e34", +"#3 c #949aa4", +"#4 c #c4ced4", +"#5 c #444e54", +"#6 c #0c0e14", +"#7 c #eceef4", +"#8 c #d4d6dc", +"#9 c #44565c", +"a. c #4c5a64", +"a# c #f4fafa", +"aa c #d4dada", +"ab c #646a6f", +"ac c #747674", +"ad c #1c3234", +"ae c #84929c", +"af c #0c1a14", +"ag c #040604", +"ah c #748684", +"ai c #04160c", +"aj c #a4b6b4", +"ak c #6c7272", +"al c #141615", +"am c #242623", +"an c #ccd6d4", +"ao c #343634", +"ap c #545654", +"aq c #8c8e8d", +"ar c #ecf6f4", +"as c #949694", +"at c #a4a6a3", +"au c #c4c6c4", +"av c #848684", +"aw c #b4beba", +"ax c #142625", +"ay c #041616", +"az c #040e08", +"aA c #545e5b", +"aB c #2c3634", +"aC c #e4eeec", +"aD c #141e1a", +"aE c #242e2c", +"aF c #343e3c", +"aG c #4c5652", +"aH c #c4cecc", +"aI c #3c4644", +"aJ c #8c9693", +"aK c #444e4c", +"aL c #bcbebc", +"aM c #0c0e0c", +"aN c #5c5e5c", +"aO c #747e7a", +"aP c #1c2627", +"aQ c #a4aeae", +"aR c #1c1e1d", +"aS c #243632", +"aT c #848e8c", +"aU c #0c1615", +"aV c #eceeec", +"aW c #2c2e2e", +"aX c #9c9e9c", +"aY c #cccecc", +"aZ c #7c8683", +"a0 c #9ca6a0", +"a1 c #0c160c", +"a2 c #acb6b4", +"a3 c #d4d6d4", +"a4 c #f4f6f4", +"a5 c #2c3e3a", +"a6 c #fdfdfd", +"a7 c #dcdedd", +"a8 c #acaead", +"a9 c #bcc6c4", +"b. c #1c261c", +"b# c #4c5e54", +"ba c #3c4e51", +"bb c #0c1e1e", +"bc c #64726a", +"bd c #7c868e", +"be c #647278", +"bf c #1c2e2f", +"bg c #14261c", +"bh c #94a6a4", +"bi c #444644", +"bj c #6c7e7c", +"bk c #8c9e9c", +"bl c #7c7e7c", +"bm c #646664", +"bn c #3c3e3c", +"bo c #545e64", +"bp c #8c969c", +"bq c #4c4e4c", +"br c #747e84", +"bs c #a4a6ac", +"bt c #343e44", +"bu c #4c565c", +"bv c #3c464c", +"bw c #848e94", +"bx c #e4e6e4", +"by c #949ea4", +"bz c #748284", +"bA c #34424c", +"bB c #4c6264", +"bC c #dce2e4", +"bD c #849294", +"bE c #04120c", +"bF c #a4b2b4", +"bG c #ccd2d4", +"bH c #343234", +"bI c #545254", +"bJ c #ecf2f4", +"bK c #041a14", +"bL c #949294", +"bM c #b4b2b4", +"bN c #7c8a94", +"bO c #1c2a24", +"bP c #243a3c", +"bQ c #c4c2c4", +"bR c #5c6264", + +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#ara6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaF.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6aLaGaFaLa6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.taFaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6#ibnaP.na6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6asaF#yavbx#ra6a6a6a6a6a6a6a6a6a6a6a6asaFaDavbx#ra6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.Uaf#AauaL#qa6a6a6a6a6a6a6a6a6a6a6.O.#.KacauaL#qa6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.O.MaU#WbQ.Ya#a6a6a6a6a6a6a6a6a6a6a6.O.M#jbmbQaLa#a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.VaB#jbRau.A#ma6a6a6a6a6a6a6a6a6a6a6.VaobEbRau.A#ma6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.V.May.Gau.A#ma6a6a6a6a6a6a6a6a6a6a6.V.M#aaAbQ.A#7a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#..M#6.R#x#V#7a6a6a6a6a6a6a6a6a6a6a6#.#p#j#z#x#V#ma6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aw.Y.Ia6a6a6a6a6a6a6a6a6a6a4.5.9ag.#aL.A#b#qa6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aC.jaEagaG.A#C#Qa6a6a6a6a6a6a6a6a6a6aV.jaEag.R.A#C#Qa6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aVakaI#y#p#TaZ#ibGaaa4a6a6a6a6a6a6a6aCak.U.6#pbcaZa0aYaaa4a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl..............................bQa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4aO.x.X#paBbbaR.L.L.Ubla6a6a6a6a6a6arbl.x#F#paS.KaD.L.Lbn.ya6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y..............................aLa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a#by.Pad.baPa1bEaMaz.E.Eaqa6a6a6a6a6a#by.P.9.baPaUaMazazaz.EaTa6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.1#E#JaUbO.KaM#jazagaMaKa7.4a6a6a6a6.1a.#JaU#0.K#j.k.EagazbqbC.4a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.Ta.aU.CaB#a.Eagag.....b#V#V#qa6a6a6#h.G.N.CaBaU.Eagag.....b.i#V#qa6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6an#9.B#H.#ay..ag.......KbMbMbxa6a6a6.F#9.BaDbtayag.........K.DbM.Ia6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#h#p.N#0aK#Jagagag....aD#VbMaYa6a6a6a9#I.N#0#5#J...E......#ybsbMaYa6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.2#1#J#pbubbag#a.......KbMbM#fa6a6a6.2#1bb#pbubbag#a.......KbybM#fa6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.7btaxbabu#J#Gal.E....aU.s#k.ma6a6a6.1bt.Bbabu#J.Eal.E....#j.O.s.ma6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6bD#I.N#5#E.C#a.Kag....aUbMbM#fa6a6a6.V#pbbaK#9#a#a.Kag....aU.ObM#fa6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.y....ag........................avbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a8.ubt.N.PaG#aalaR.E....a1bMbM#xa6a6.7.ubt.N.P#E.CalaRag....#jaq#k.Ya6a6a6", +"a6a6a6a6a6a6a6a6a6a6bM#Abn.l.......k.qaq#Qa6a6a6a6a6bM.ybl.y.ybl.y.ybl.y.ybl.ybl#Qa6a6#Q.ybl.y.ybl.y.ybl.y.ybl.y.ybl.ybQa6a6#QbLbq.q...........q#AbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#mbQblbI.q.l.............q.qblbM#ma6a6a6a6a6a6a6a6a6a6a6a6a6bl....ag........................av.sbMa6a6a6a6a6.ybl.y.ybl.y.ybl.y.ybl.y.y.ybl.y#la6a6a6a6a6a6#g#EaB.v.3#E#GalaR......#jbM#kbQa6#qbd#EaBbP.3#E.E.KaR......#jaT#V.Aa6a6a6", +"a6a6a6a6a6a6a6#mbl.k......................bn.ta6a6bQ............................aLa6a6bQ..............................blbQ.q........................aR.ta6a6a6a6a6a6a6a6a6a6a6a6a6a6#maqbH..................................aWbL#ma6a6a6a6a6a6a6a6a6a6.y....ag.........................y#kbMa6a6a6a6.t................................a7a6a6a6a6a6#7.3#OaP.faObu.E#HaRag....#jbM.s#xa6#Q.3aIax.faObu.EaR#Hag....#j.g.s.Ya6a6a6", +"a6a6a6a6a6a6#laR............ag.Zag......ag.Zag.l#BaM........agagagagagagag.Zag.E.Y.4a4aL......agag.Zagagagagagag.Eag.Zalagag...........Z.E...........Z.ZbH#la6a6a6a6a6a6a6a6a6a6#m.yaM..............ag.E.Zag.............Z.Z.E..aM###ma6a6a6a6a6a6a6a6bl....ag........................avbMbMa6a6a6a6bn......ag.ZagagagagagagagagagagbIa4.4#qa6a6a6#Qbr.U#JbBakba#a.6aR......a1bMbMaLa6#8br.#aDbB.3ba#a.6aR......a1.VbM.Aa6a6a6", +"a6a6a6a6a6#Q#6........ag.........................Zag............................avbMbMaL....................................ag...E.........................kaYa6a6a6a6a6a6a6a6#laR..........agag..................................agal.ya6a6a6a6a6a6a6.y....ag.........................ybMbMa6a6a6#Q................................avbMbMa2a6a6a6aYbraF.B.W.u.#.Kam.K.......KbM#kaLa6#M.5aF.Bbe.3.#.KamaD.......KaJ.sawa6a6a6", +"a6a6a6a6a6bn........ag..............................agag.........................y#VbMaL....................................ag...............................Z#fa6a6a6a6a6a6#l#6........ag..............................................bI#ma6a6a6a6a6bl....ag........................avbMbMa6a6a6.j.......E......................albM#kbM#ba6a6a6#CaO.9bObjbzaF.Kam.K.......bbMbMbQa6#w#v.9axbjbza5aDamal......#yasbMaLa6a6a6", +"a6a6a6a6.t........ag............................................................av#kbMaL.......................................................................G.Ya6a6a6a6#l.k........ag..................................................bHa4a6a6a6a6.y....ag........................av#kbMa6a6a6.k..............................##bMbM.sa6a6a6a6bs.3aP.9ahaZa5.6aEal......aD.sbM.Ta6#iacax.9aZahaF.6.Lal......aDaJ.sawa6a6a6", +"a6a6a6a6bq.......E...............................................................ybMbMaL.......................................................................ZbMaLa6a6a6bn........ag.......................................................0#ba6a6a6bl....ag........................avbMbMa6a6aX......ag........................atbM#k#fa6a6a6a6.O#ZaU.#bD.uaSam.Hal......aR#kbMaYbJ#U#Z#JbtbD.uaB#S.Hal......aDas#k.wa6a6a6", +"a6a6a6a6........................................................................av#kbMaL........................................................................#ebM.4a6bM....................................................................#ea7a6a6.y....ag.........................ybMbMa6a6.q......ag.......................UbM#kbM#qa6a6a6#q.ObR#J#KbN.3#p.L.Hal......#y.sbMaY#8.ObR#J#KbN.3aB.L.HaU......#y.V.s#Ma6a6a6", +"a6a6a6a7.......E.................................................................ybMbMaL........................................................................avbMaLa6bq.......E............................................................bqbM#qa6bl....ag........................av.sbMa6a7................................aq.sbMbMa6a6a6a6bJ#t#s#Jbubw.o#1aWaE#6....agam#kbM.T#4bp#s#Jbubw.o#paWaW#j.......L.ObM#xa6a6a6", +"a6a6a6bQ..................................#y.l..................................avbM.s#M.........................................................................ybMbMa6..................................#c#y.................................l.s#ka6.y....ag........................av#kbMa6#A.......E......................#ybMbMbMaVa6a6a6a6.Ibw#KaUbo#N.P#p.L.H#a......aEbM#V.mawbw#K#J#sbw#D#p.LaW#6......aE#i.sbQa6a6a6", +"a6a6a6aL................................aqbM#kaq................................av#kbMaL................................##atat##................................av#kbMaL.......E......................al#e#kbM.y................................bMbM#mbl....ag........................avbMbMa6aR...............................jbM#kbMa6a6a6a6a6a7bd#L#a#Zbw#P.9aW.LaM....agaEbM.s#8#kaZ#L.C#Zbw#P#2aW#2aM......aWa0#Va3a6a6a6", +"a6a6a6bQ...............................UbMbM.sbMbI.Z.............................ybMbMaL..............................aobM#kbM#k#d...............................ybMbMaq..............................##.sbMbM#kbq.Z.............................ybMa3bl....ag........................avbMbMa8......ag.......................E#w.sbMa3a6a6a6a6a6aYbz#1#J#Zbda.#0aW#c#G.......L.sa2#r.7br#1aU#Zbd#E#0bH.L#6....ag.L.1bM#ra6a6a6", +"a6a6a6aL...............................0#kbMbMa6bl..ag..........................av.sbMaL...............................GbMbM.s#qbl..ag..........................avbMbMbl..............................av#kbMaua6bl..ag..........................avbMbMbl....ag........................av#kbM.R......ag.......................qbM#kbMa6a6a6a6a6a6#M.u#2#J#R.QaG.6bH#S.E.....E.LbM#Vana0ac#2#J#R#YbuaPaW#S.E.....Eama8#Va7a6a6a6", +"a6a6a6bQ..............................apbMbM.ea6.y....#j.........................ybM#k.w..............................apbM#k#ba6bl.....E.........................y.s#k.y....ag.........................ybM.sbJa6.y....aM........................av#kbM#g....ag.........................ybM#e................................#e#kbM.Ya6a6a6a6a6a6#k#R.6#H.3#v#5.BaW#Sag....agaEbMbM.Tby.3aP#H.u.u#5.6aWaPag....agaE#k.saaa6a6a6", +"a6a6a6aL...............................0bMa8#ma6bl....#6........................avbMbMaL...............................0bMbMa4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................av.s.0.......E......................aWbM.sbM#ma6a6a6a6a6a6#i#RaPaP#v.u#5.6aW.6......agaB.s#V#xbybeaPaP.u#v#5.6aW.6......agao#k.s#ra6a6a6", +"a6a6a6bQ...............................GbMbMaVa6.y....#j.........................y#kbMaL..............................apbMbMa4a6.y....ag........................av#kbM.y....ag.........................ybMbMa6a6.y.....k.........................ybM.s#g....ag.........................y#kal...............................jbM#kbMa6a6a6a6a6a6a6by.Wayadbr.3#5#SaWaR.......EaWbM#VbM.J#Ray#2br.3#5#SaW.6.......E.H.s#Va7a6a6a6", +"a6a6a6aL...............................0.sbMaVa6bl....aM........................avbMbMaL...............................0#kbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....aM........................avbMbMbl....ag........................av.S......ag.......................ZbM.sbMa7a6a6a6a6a6a6a6#t.P.Nbfbr#R.##SaWaR......az#d#k#Ca8#t.P.Nbfbr#R#OaPaWaR.......E.MbM#V#Qa6a6a6", +"a6a6a6bQ..............................apbMbMaVa6.y....aM.........................ybM#k.w..............................apbMbMa#a6.y....ag.........................y.s#k.y....ag.........................y.sbM#qa6.y....#j........................av#kbMbl....ag.........................y.M......ag.......................GbM#kbMa6a6a6a6a6a6a6.4bwbBaybfbr#Ra5#SaE.6......agbi#V#VbsbwbB.Cad.Q#Z.##S#2aR......ag#u.sa2#Qa6a6a6", +"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0.sbM.4a6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#6........................avbMbMbl....ag.........................j................................#ebMbMaLa6a6a6a6a6a6a6#bbw#9.C#Fbr#Z#p.LaWal.......E.0.s#C#ibw#9.C#Fbr#Za5am.Hal.......E.0#k#V#ba6a6a6", +"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL...............................GbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag........................aW.....Mal......................ao#kbMbMa4a6a6a6a6a6a6a6bx#N.z.Cba#v#DaS#SaWal......azbm#V#V.tbN#F.C#F.uab.9#SaWal......azbm.s.2#ma6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................GbMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag..............................aW.........................SbM.sbMa6a6a6a6a6a6a6a6#8#NbA#G#Fbe#P.9.LaW#a.......haca8#V#3#NbA#G#Fbe#P.9.LaW#a.......hac.s#V.4a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag...............................k......................albM#kbM.Ia6a6a6a6a6a6a6a6.TbdbP#Gbvabbu#2.L.L#a......azavbM.AbLbdbP#G.z#Z#K#2.L#c#a......azavbM.A#qa6a6a6", +"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag.......................................................0#kbMbMa6a6a6a6a6a6a6a6a6#Cbd.9.E#O#D#5ax#S.L#j.Eagag#n#B.s#V#t#Y.9.EbA#D#5ax#S#SbE.Eagag#n.r#k.Aa6a6a6a6", +"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag......................................................atbM.s.Ta6a6a6a6a6a6a6a6a6a8.3.9.E.z#9#O#0.l.layag..agbgat#kaQ.V.3.9.Ebv#9#O#o.l.laUag...Ebg.tbM.Aa6a6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.....................................................qbMbMbM.4a6a6a6a6a6a6a6a6a6.cak#2.E.##F.9ay.6b.ai.Eag.EaSa8#VaQbwbe#2ag.#.z.9aU.lb.aiazag.E.9#k#Vawa6a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag....................................................av#kbM#ka6a6a6a6a6a6a6a6a6a6#3#ZaE.E#pbPaDaz.6.d.p.h.E.E#p#k#VawaTbeaEag#pbPaDaz.6.d.p.h.E.Ea5.s#V.ma6a6a6a6", +"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..................................................albM#k.s#ma6a6a6a6a6a6a6a6a6a6aTab#0.EaSbfaz.Z.K.b.E.haz.Eb##Va2a9#.abaP#6aSbfaz.E.Kbg.E.hazaz.Ga2a2#ra6a6a6a6", +"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag...................................................jbMbMbMa6a6a6a6a6a6a6a6a6a6a6braA.B.E#2ax...E#a.h...hazazbc#Va2#xbraA.Bag#2axag.EaUbE...hazaz.o.s#V.ea6a6a6a6", +"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag...................................................ybM.s#fa6a6a6a6a6a6a6a6a6a6a4#Z.X.K.LaPay...Eazag..ag.EaDaZ#V#Va9#Z#F#J#caPbK...Eazag..ag.E#naT#V#Va4a6a6a6a6", +"a6a6a6bQ..............................apbM.saVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag...................................................UbMbMa6a6a6a6a6a6a6a6a6a6a6bJaNbA#J.L#ybE..ag.E....ag.haG.A#V.s#xbR.##J.LaR#G..ag.E....agaiaG.A.s#V#qa6a6a6a6", +"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag....................................................atbMa6a6a6a6a6a6a6a6a6a6a6.Ibo.U.6#0.Kag....ag...Eag#yaO#V.sau.aaAaI#H#0al.E....ag...Eag#ybla2#Vaua6a6a6a6a6", +"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag....................................................##bMaVa6a6a6a6a6a6a6a6a6a6bCaG.9.9aP.k.E........agag#y#i.s.Aa4.Abu.9.9aPalag.........Eag#y.c.s.A#ma6a6a6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag....................................................albMbMa6a6a6a6a6a6a6a6a6a6#8aK#0#0.6aU.E.........Eagb.#i#V#xa6.2baaE#0.B.k.E.........Eag#ya0.s#xa6a6a6a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.......................................................5bM#qa6a6a6a6a6a6a6a6a6bG.#aDaPaDaMaMag.......Eag#y#i.s#xa6.2.UaDaPaD#6aMag.......Eag#y#i.s#xa6a6a6a6a6a6", +"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag......................................................aW.s#fa6a6a6a6a6a6a6a6a6#h#paUax.K#6.E........azag#ya0.s.wa6aj#paUax.KaMaz.........Eag#y#i#V.wa6a6a6a6a6a6", +"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag........................................................#ebMa6a6a6a6a6a6a6a6a6aHaS#Gax.K.E.E.........Eag#y#i#VaLa6bF.H#Gax.Kag.E........azag#ya0.s#xa6a6a6a6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag.........................................................q#k#Qa6a6a6a6a6a6a6a6a3#2#Gax#aag.E........azag#yat#V.ma6.1#2az.6aUag.E.........Eagb.at#VaYa6a6a6a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................................................ZatbMa6a6a6a6a6a6a6a6bCbf.E.B#aag.E.........Eagb..D#VaYa6a0bfaz.B#a...E.........E.Eb..D#k#la6a6a6a6a6a6", +"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av#kbM#qa6bl....#6........................avbMbMbl....ag..........................................................bmbM#ma6a6a6a6a6a6a6aa#0azaD#G...E........azagb..D#k#la6bk#0az#H#Gag.E.........Eagb..D#V.ma6a6a6a6a6a6", +"a6a6a6bQ..............................apbM#k#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM.sa6a6.y....#j.........................y.sbM#g....ag..........................................................al.s.Ya6a6a6a6a6a6a6aa#0#a.B#6ag.E........agagaRat#V.ma6aeaPaU.Baz...E........agagaD.D#V#la6a6a6a6a6a6", +"a6a6a6aL...............................0bMbM#7a6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag............................................................avbM#qa6a6a6a6a6a6#8aPaUbb#G..ag........ag..#y.D.A#la6#taPay#H#Gagag........ag..#yata2#la6a6a6a6a6a6", +"a6a6a6bQ..............................apbM.saVa6.y....aM.........................ybM#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag............................................................aobM.Ta6a6a6a6a6a6#8aP.C#HaMag.E........ag..#ya0a2aYa6bwaP.C#Haz...E........ag..#yata2aYa6a6a6a6a6a6", +"a6a6a6aL...............................GbMbMaVa6bl....#j........................avbMbMaL...............................GbMbM.4a6bl....ag........................avbMbMbl....ag........................avbMbM#qa6bl....#6........................avbMbMbl....ag.........................U....................................aXbMa6a6a6a6a6a6#8.6ay#H#Gagag............#y.D.s.ma6bNaP.C.B.Eagag.............bat.s#la6a6a6a6a6a6", +"a6a6a6bQ..............................apbMbMaVa6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y....ag.........................y.sbMa6a6.y....#j.........................ybMbM#g....ag.........................S.Z..................................bqbM#ba6a6a6a6a6bG.Bay#Hazagag............aDat.saYa6bd.6.C#H#6agag............aDat#kaYa6a6a6a6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................av.sbMbl....ag........................av#kbM#qa6bl....aM........................av#kbMbl....ag........................av.U...8..............................aMatbMa6a6a6a6a6#8.BaU.B#6agag............aDaXbMaYa6#Y.BaU.B.Eagag.............KaX.s.ma6a6a6a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................y.s#k.w..............................apbM.sa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................yaX..bHag...............................jbM#ma6a6a6a6#8#Hay.B.Eagag............a1.O#kaYa6bd.BaU.B#Gagag........ag..a1as.saYa6a6a6a6a6a6", +"a6a6a6aL...............................GbM.s#ma6bl....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................avbMbMbl....ag........................av.sbM#qa6bl....#6........................av.sbMbl....ag........................av.saW...E..............................albMaLa6a6a6a6bG.BaU#H.Eagag........ag..#j.V.s#fa6bN.BaU#H.Eagag........ag..#j.VbMaua6a6a6a6a6a6", +"a6a6a6bQ..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybM#ka6a6.y....#j.........................ybMbM#g....ag.........................ybM.j.....................................ybMa6a6a6a6#8aP#JaD#6agag............azava8.Ya6aTaP#J#Hazag.E............az#g.s.Ya6a6a6a6a6a6", +"a6a6a6aL...............................0bMbMaVa6bl....#j........................avbMbMaL...............................0#kbM#qa6bl....ag........................av.sbMbl....ag........................avbMbM#qa6bl....aM........................av#kbMbl....ag........................av#kbMaR...E...............................qbM#fa6a6a6a3.BaU#J.Eagag............az#g.s.Ya6bD.BaUaf#Gagag............az.y#k.Ya6a6a6a6a6a6", +"a6a6a6bQ..............................apbM#kaVa6.y....aM.........................ybM#k.w..............................apbMbMa4a6.y....ag.........................ybM#k.y....ag.........................ybMbMa6a6.y....#j.........................ybMbM#g....ag.........................ybMbM#g....................................aXbMa6a6a6aa#Jaz#JaM.Eag.............Eak.s.Aa6.J#JazaUaMagag.............Eak.s.Aa6a6a6a6a6a6", +"a6a6a6aL...............................G.sbM#ma6bl....#j........................avbMbMaL...............................G.sbM.4a6bl....ag........................avbMbMbl....ag........................av.s#k#qa6bl....#6........................avbMbMbl....ag........................av.sbMa7....ag...............................0bMaVa6a6aaaU.Caf#Gagag.............Ebm.s.Aa6byaU.C#Jazagag.............Ebm.s.Aa6a6a6a6a6a6", +"a6a6a6aL..............................apbMbM#ba6.y....#6.........................y#kbMaL..............................apbM#ka4a6.y....ag.........................ybM#k.y.....E.........................ybMbMa6a6bl....aM.........................y.sbM#g....ag.........................y#kbMa6aN..ag...............................EbMbMa6a6bC#JafaD.E..ag............agaN.s#V#qbhafaUaD.Eagag............agaN.s#Va6a6a6a6a6a6", +"a6a6a6aL...............................0bM.s#7a6bl....#j........................avbMbMaL...............................0bMbM#qa6bl....ag........................avbMbMbl....ag........................av#kbMa6a6bl....#j........................avbMbMbl....ag........................avbMbMa6aL.....................................jbM#qa6#bbb#J.Bagag..............ag.R#k#Va6.2bb#J.b.E................ag.RbM#V#qa6a6a6a6a6", +"a6a6a6bQ...............................GbMbMaVa6.y....aM.........................y.s#k.w..............................apbMbMa4a6.y....ag........................av.sbMaq....ag........................##bMbM#qa6bI....aM........................av#kbMbl....ag.........................ybMbMa6a6.l...E...............................l#k.Ya6a6aPaUaf.Eagag............ag.X.s#Va4anaxaUaf.Eagag............agbi.s#Va#a6a6a6a6a6", +"a6a6a6aL..............................albMbMaVa6aW....#j........................avbMbMaL...............................0bM#k.4a6bl....ag........................av#kbMaL....ag.........................ZaqbMa6a8......#j........................atbMbMbl....ag........................av#kbMa6a6aX....................................avbMa6a6.U.Caz.E.Eag...............U.sbMa4.IaP.C#G.E.Eag...............UbM#Va4a6a6a6a6a6", +"a6a6a6bQ.................................M.S#VbI......#6.........................y#kbMaL..............................apbMbMa4a6.y....ag.........................ybMbMa6....ag............................#c#d........aM......................al.sbMbM#g....ag........................avbMbMa6a6#maM..ag...............................qbM#la6.5aU.E#Gagag...............H.s#VaVa6#1#aaz.Eagag...............H.s.saVa6a6a6a6a6", +"a6a6a6aL....................................ag.........Z........................avbMbMaL...............................0#kbM#qa6bl....ag.........................y#kbMa6bq....................................ag.....Z.........................qbM#kbMbl....ag........................av.sbMa6a6a6.x....................................bsbMa6a8.BaU.Eag............ag..aW#kbMaVa6.R.6aU#Gag............ag..aW#k#VaVa6a6a6a6a6", +"a6a6a6#l......................................aM.Z.EaM...........................ybM#k.w..............................apbM.sa4a6.y....ag........................avbM.sa6a8......................................aMaM..........................avbMbM#fbl....ag........................avbMbMa6a6a6#Q....ag...............................GbMaVa7.L.E#6ag............ag..b..tbM.ea6#X.L.Eazag............ag..b..tbMa7a6a6a6a6a6", +"a6a6a6a6aM......................................................................av.sbMaL...............................0bM#k.4a6bl....ag........................av#kbMa6a6bn...E............................................................#c#kbMbMaVbl....ag........................av#kbMa6a6a6a6bn...Z..............................albMbM.4.#..aM.Eag...........EagaR.ObMa7a6#M.#...Z.Eag...........EagaR.ObMa7a6a6a6a6a6", +"a6a6a6a6.y.......................................................................y#kbMaL...............................GbMbMa4a6.y....ag.........................ybMbMa6a6#l#6.............................................................E#ebM.s#ka6.y....ag.........................ybMbMa6a6a6a6.t.....................................jbMa4.3....azag........ag.E...K#..sa3a6#m#D..agaM..........agagag.K#..sa3a6a6a6a6a6", +"a6a6a6a6aVaR....................................................................avbMbMaL...............................G.sbM#qa6bl....ag........................avbMbMa6a6a6aY.k.E.......................................................ZaqbM#kbM#Qa6.S....ag........................avbMbMa6a6a6a6a6aR...E..............................#cbM#fbF.....Z..........ag.E.E.K.5#k#la6a6#......Z..........ag.Eag.K.5.s#la6a6a6a6a6", +"a6a6a6a6a6#l#6.Z................................................................av#kbMaL..............................apbM#ka4a6.y....ag.........................y.s#ka6a6a6a6#laRag..................................................alaqbM.sbMaLa6a6.y....ag.........................y.s#ka6a6a6a6a6bl....................................aqbMaV#a...Z.............Eaz#nbma8.Ya6a6awaU...E.............Eaz.K#Wa8aLa6a6a6a6a6", +"a6a6a6a6a6a6aYaWag...............................................................ybMbMaL...............................0bMbM.4a6bl....ag........................avbMbMa6a6a6a6#q#mblaM..............................................bqatbM#kbMaLa6a6a6bl....ag........................avbMbMa6a6a6a6a6a7....ag...............................qbMa7aZazag.............E#j.K.G#kaLa6a6bJaKazag............az#j#naG#k.Ya6a6a6a6a6", +"a6a6a6a6a6a6a6a6.yaM........................al.jap..............................avbM.s#M..............................apbM#ka4a6.y....ag.........................ybMbMa6a6a6a6a6a6a6#m#A#y....................................#y##atbMbMbMbM#fa6a6a6a6bl....ag.........................ybMbMa6a6a6a6a6a6##..ag................................a8bMa4.GaEaU......aU#yafalbn.5.A.Y#qa6a6#V#EaEaU......aU#yala1.Ubl.A.Y#qa6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6as.U#c..........#cao.GaqbMbMao...............................y#kbMa6a6a6a6.s#k.s#kbM#k.s#kbM#k.s#kbMbMbM.4a6a6a6a6a4bM#k.s#kbM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6.4a8.y.Gao#cal.............kaWao.0.5#ebMbMbMbM#k.s#ma6a6a6a6a6a6a6a6a4.s#kbMa8bM#k.s#kbM#k.s#kbM#kbMa6a6a6a6a6a6a6a6a6#k.s#kbM#kbM#k.s#kbM#k.s#kbMa8.sbMbMaVanaT#W.HaB.UaG.x.x.jaJ.s.Y.Ya4a6a6a6.2aT.xaBaB.UaG#PbR.j.V#V.AaLa4a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6.4aL#k.s#kbM#kbMbMbMbM.sbsaMag..ag........................aqbMbMa6a6a6a6bMbMbMbM.sbMbMbMbMbMbMbM.s#kbMa4a6a6a6a6.4bMbMbMbM.sbMbMbMa8bMbMbMbMbMbMa6a6a6a6a6a6a6a6a6a6a6#qa3bMbM#kbM#k.s#kbMa8bM.sbM#kbM.s#kbM#ka3#qa6a6a6a6a6a6a6a6a6a6#qbM#kbMbM.sbMbMbMbMbMbMbM.sbMbMa6a6a6a6a6a6a6a6a6#mbMbM.sbM.sbMbMbM.sbMbMbMbMbM#kbMbMbMa6a4a3a8aTaJas#ia8.Y#xawaL#ba6a6a6a6a6a4aaaQaq.V#e.ta8aL#x.AaL#b#qa6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6#7a7bM.sbM.sbMa7.I##.......Z........................bM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6.4bx#QaubM.sbM#kbM#k#f#Q.I.4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#qaVau#faYa4a4#qa6a6a6a6a6a6a6a6a6a6#qaVau.TaYa4a4#q#qa6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6#Qbq.................................EbM#kbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6.t.qbn.q.q.q.q.qbn.q.q.q.q.qaR...........E........................aWbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6.y.....................................E..........................##.s#k.Ya6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bl.......Z.Z.E.Z.Z.E.Z.Z.E.Z.Z.E.Zag..............................#ebMbM#Qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6.y....ag........................................................aRbM#kbM#qa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bl....ag........................................................akbM.sbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6.y....ag......................................................#c.s#kbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bl.....E.....................................................latbMbMbMa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bl....ag.................................................Z.G.sbM#kbMa7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bl....ag..........................................aW#u.S#kbM#kbMbMa3a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6bQblbl.yap.0ap.G.0ap.G.0ap.G.0apap.0ap.0apav.y#e#k.s#kbM.sbMbM.Ya4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a4bMbMbMbM.sbMbM.sbMbM.sbMbM#kbMbMbMbM#kbMbMbMbMbMa7#ma6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a4a4a4a4a4a4a4a4a4a4a4a4a4#qa#a4a#a4.4a#a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6", +"a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6" +}; diff --git a/xgnokii/xpm/phone.xpm b/xgnokii/xpm/phone.xpm new file mode 100644 index 0000000..9a3e44b --- /dev/null +++ b/xgnokii/xpm/phone.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char * phone_xpm[] = { +"18 10 2 1", +" c #FFFFFFFFFFFF", +". c #000000000000", +" ..............", +" ...............", +".... .. . . . ..", +" .. ...........", +" .. .. . . . ..", +" .. ...........", +" .. .. . . . ..", +" .. ...........", +" ...............", +" .............."}; diff --git a/xgnokii/xpm/quest.xpm b/xgnokii/xpm/quest.xpm new file mode 100644 index 0000000..14f14a7 --- /dev/null +++ b/xgnokii/xpm/quest.xpm @@ -0,0 +1,86 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char *quest_xpm[] = { +/* columns rows colors chars-per-pixel */ +"44 66 2 1", +" c Gray0", +". c None", +/* pixels */ +"................... ...............", +".............. ...........", +"........... ........", +"....... .......", +".... .....", +"... ....... ....", +".... ............. ...", +".... ................ ..", +".... .................. ..", +".... .................... .", +"..... ..................... .", +"..... ...................... ", +"..... ....................... ", +"..... ........................ ", +"..... ........................ ", +"..... ....................... ", +"...... ........................ ", +"...... ........................ ", +"...... ....................... .", +"...... ....................... .", +"...... ...................... ..", +"....... ..................... ..", +"....... .................... ...", +"........................... ....", +".......................... .....", +"......................... ......", +"........................ ........", +"...................... .........", +"..................... ...........", +".................... .............", +"................... ...............", +".................. ................", +"................. ..................", +"................ ...................", +"............... ....................", +".............. .....................", +".............. ......................", +"............. ......................", +"............. ......................", +"............. .....................", +"............. ....................", +"............. ..................", +".............. .................", +".............. .......................", +"............... ..........................", +"............... ............................", +"............................................", +"............................................", +".................. ......................", +"................. .....................", +"............... ....................", +"............... ...................", +".............. ...................", +".............. ..................", +".............. ..................", +".............. ..................", +".............. ..................", +".............. ...................", +"............... ...................", +"............... ....................", +"................ .....................", +".................. ......................", +"............................................", +"............................................", +"............................................", +"............................................", +}; diff --git a/xgnokii/xpm/sim.xpm b/xgnokii/xpm/sim.xpm new file mode 100644 index 0000000..016ae75 --- /dev/null +++ b/xgnokii/xpm/sim.xpm @@ -0,0 +1,27 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char * sim_xpm[] = { +"18 10 2 1", +" c #000000000000", +". c #FFFFFFFFFFFF", +" ", +" ................ ", +" ................ ", +" .. ....... ", +" .. ....... ", +" .. ....... ", +" .. ...... .", +" .............. ..", +" ............. ...", +" ...."}; diff --git a/xgnokii/xpm/sms.xpm b/xgnokii/xpm/sms.xpm new file mode 100644 index 0000000..90937fe --- /dev/null +++ b/xgnokii/xpm/sms.xpm @@ -0,0 +1,159 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Pavel Janík ml. & Hugh Blemings. + + Released under the terms of the GNU GPL, see file COPYING for more details. + + This is the logo of the GUI utility. + + Copyright (C) 1999 Petr Vostøel + + Last modification: Sat Jun 26 07:38:27 CEST 1999 + Modified by Pavel Janík ml. + +*/ + +static char *XPM_sms[] = { + +"26 7 126 2", + +".. c None", +".# c #161616", +".a c #cf9a98", +".b c #d9e1ed", +".c c #b10707", +".d c #ededed", +".e c #bababa", +".f c #ababab", +".g c #385886", +".h c #c2c2c2", +".i c #9b9b9b", +".j c #af5f5d", +".k c #353535", +".l c #dedede", +".m c #8b8b8b", +".n c #757575", +".o c #444444", +".p c #a4a4a4", +".q c #393939", +".r c #e6e6e6", +".s c #f3f3f3", +".t c #6f0302", +".u c #e6ebf3", +".v c #b2b2b2", +".w c #545454", +".x c #ffffff", +".y c #848383", +".z c #233755", +".A c #656565", +".B c #7b7b7b", +".C c #949494", +".D c #2c2c2d", +".E c #6b6b6b", +".F c #0f1a29", +".G c #4c4c4c", +".H c #cecece", +".I c #d6d6d6", +".J c #1f2020", +".K c #b2c2d9", +".L c #5c5c5c", +".M c #d6deeb", +".N c #2b4468", +".O c #162336", +".P c #0e0e0e", +".Q c #f9f9f9", +".R c #000000", +".S c #e8edf4", +".T c #3d6194", +".U c #edf1f6", +".V c #c9c9c9", +".W c #41669c", +".X c #e8cecd", +".Y c #cad5e5", +".Z c #bccade", +".0 c #4369a1", +".1 c #9ca4ae", +".2 c #b5c5db", +".3 c #c5d2e3", +".4 c #324e78", +".5 c #3d3d3d", +".6 c #9299a3", +".7 c #d3dce9", +".8 c #1b2b42", +".9 c #b4bcc8", +"#. c #34527e", +"## c #cdd8e7", +"#a c #2d0201", +"#b c #012343", +"#c c #f4eaea", +"#d c #08121e", +"#e c #8a919d", +"#f c #c2cfe1", +"#g c #bfbfbf", +"#h c #080d14", +"#i c #fcfcfc", +"#j c #c4cedb", +"#k c #bf7c7b", +"#l c #cfd9e8", +"#m c #757b83", +"#n c #b6c6db", +"#o c #f9f2f2", +"#p c #2e4970", +"#q c #d2adac", +"#r c #d7e0eb", +"#s c #7d838b", +"#t c #1f314b", +"#u c #61666c", +"#v c #686d74", +"#w c #08090b", +"#x c #484e56", +"#y c #6f7071", +"#z c #242525", +"#A c #bfcde0", +"#B c #c7c5c5", +"#C c #040506", +"#D c #303031", +"#E c #37393d", +"#F c #273e5e", +"#G c #446ba4", +"#H c #282929", +"#I c #eef2f7", +"#J c #344f69", +"#K c #eef1f7", +"#L c #d1dbe9", +"#M c #565758", +"#N c #a5adb8", +"#O c #606161", +"#P c #786463", +"#Q c #b4c4da", +"#R c #404040", +"#S c #575b61", +"#T c #858b94", +"#U c #dde4ee", +"#V c #ebeff5", +"#W c #4b2726", +"#X c #2b2e34", +"#Y c #414449", +"#Z c #484848", +"#0 c #505050", +"#1 c #725655", +"#2 c #a23c3a", +"#3 c #acb4bf", +"#4 c #bdc6d3", +"#5 c #c0c9d6", +"#6 c #b3c3da", +"#7 c #ffffff", + +"...1#S.#.R.R.R.R.R.R.R.R.R#z#x.R.R.R.R#z#x.#.##x#e..", +".1.D.R.e.x.x.x.x.w.x.x.n#z.J.d.x.n.e.x.x.x.x.w.R#z#e", +"#M.R.R.x.m.R.#.n.o.x.x.l#X.A.x.x.n.x.m.R.#.n.o.R.R#x", +".#.R.R.l.x.e.e.f.#.x.f.x.o.f.f.x.n.l.x.e.e.f.#.R.R.#", +".#.R.R#z.o.n.m.x.n.x.n.l.h.x.A.x.n#z.o.n.m.x.n.R.R.#", +".#.R.R.x.f.o.w.x.n.x.n.n.x.d.R.x.n.x.f.o.w.x.n.R.R#M", +".R.R.R.m.x.x.x.d.k.x.n#z.x.i.R.x.n.m.x.x.x.d.k.R.R.R" +}; diff --git a/xgnokii/xpm/stop.xpm b/xgnokii/xpm/stop.xpm new file mode 100644 index 0000000..a06c82c --- /dev/null +++ b/xgnokii/xpm/stop.xpm @@ -0,0 +1,85 @@ +/* XPM */ +/* + + G N O K I I + + A Linux/Unix toolset and driver for Nokia mobile phones. + + Copyright (C) 1999 Jan Derfinak + + Released under the terms of the GNU GPL, see file COPYING for more details. + +*/ + +static char *stop_xpm[] = { +/* columns rows colors chars-per-pixel */ +"65 65 2 1", +" c Gray0", +". c None", +/* pixels */ +"................... ...................", +".................. ..................", +"................. .................", +"................ ................", +"............... ......................... ...............", +".............. ........................... ..............", +"............. ............................. .............", +"............ ............................... ............", +"........... ................................. ...........", +".......... ................................... ..........", +"......... ..................................... .........", +"........ ....................................... ........", +"....... ......................................... .......", +"...... ........................................... ......", +"..... ............................................. .....", +".... ............................................... ....", +"... ................................................. ...", +".. ................................................... ..", +". ..................................................... .", +" ....................................................... ", +" ......................................................... ", +" ......................................................... ", +" ...... .. .. ... ....... ", +" ...... . . .. ...... ", +" ..... . . .. ...... ", +" ..... . . .. ...... ", +" ..... ..... ..... ..... ..... .. ... ...... ", +" ..... ..... ..... ..... ..... .. .... ...... ", +" ..... ............ ..... ..... .. .... ...... ", +" ..... ............ ..... ..... .. .... ...... ", +" ..... ...... ..... ..... .. .... ...... ", +" ..... ..... ..... ..... .. ...... ", +" ..... ..... ..... ..... .. ...... ", +" ...... ..... ..... ..... .. ...... ", +" ............ ..... ..... ..... .. ....... ", +" ............ ..... ..... ..... .. ............. ", +" ..... ..... ..... ..... ..... .. ............. ", +" ..... ..... ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ..... ..... .. ............. ", +" ..... ...... ..... .. ............. ", +" ...... ........ ...... ... ............. ", +" ......................................................... ", +" ......................................................... ", +" ....................................................... ", +". ..................................................... .", +".. ................................................... ..", +"... ................................................. ...", +".... ............................................... ....", +"..... ............................................. .....", +"...... ........................................... ......", +"....... ......................................... .......", +"........ ....................................... ........", +"......... ..................................... .........", +".......... ................................... ..........", +"........... ................................. ...........", +"............ ............................... ............", +"............. ............................. .............", +".............. ........................... ..............", +"............... ...............", +"................ ................", +"................. .................", +".................. ..................", +"................................................................." +}; -- 1.8.3.1

q c #9A907F", +",q c #988980", +"'q c #847975", +")q c #716D6B", +"!q c #343A36", +"~q c #4E574A", +"{q c #8E8E7F", +"]q c #938B81", +"^q c #958E89", +"/q c #72685F", +"(q c #625C55", +"_q c #54514F", +":q c #474646", +"r c #143028", +",r c #0F0A09", +"'r c #595555", +")r c #86ACA4", +"!r c #5A7667", +"~r c #647357", +"{r c #A3A989", +"]r c #A5A38A", +"^r c #988F7E", +"/r c #8D8076", +"(r c #656662", +"_r c #2F362D", +":r c #61695B", +"s c #0C1F1B", +",s c #293E3B", +"'s c #3E4746", +")s c #2B3F35", +"!s c #27403A", +"~s c #16362E", +"{s c #111911", +"]s c #0D0603", +"^s c #0A0605", +"/s c #454242", +"(s c #587D75", +"_s c #4E6658", +":s c #7F8A71", +"t c #434A49", +",t c #454A4C", +"'t c #414747", +")t c #323F3D", +"!t c #2E413E", +"~t c #253C39", +"{t c #123630", +"]t c #041F14", +"^t c #3B4241", +"/t c #38433B", +"(t c #2A3D33", +"_t c #193832", +":t c #141C16", +"u c #91887A", +",u c #897A72", +"'u c #7D6F6C", +")u c #5C5453", +"!u c #3C3F3C", +"~u c #39403C", +"{u c #343F38", +"]u c #2E3D31", +"^u c #3D473D", +"/u c #575853", +"(u c #5F5B56", +"_u c #615A55", +":u c #635B56", +"v c #2E4033", +",v c #303E32", +"'v c #434A40", +")v c #5D5B56", +"!v c #5E574F", +"~v c #5A5854", +"{v c #555453", +"]v c #50524B", +"^v c #4F524B", +"/v c #454846", +"(v c #454946", +"_v c #414642", +":v c #3D433F", +"w c #5B584F", +",w c #585350", +"'w c #5C5B58", +")w c #595757", +"!w c #575353", +"~w c #565150", +"{w c #514D4A", +"]w c #494B45", +"^w c #444A41", +"/w c #384342", +"(w c #374644", +"_w c #2B3B34", +":w c #233533", +"x c #4A494A", +",x c #474848", +"'x c #3F4140", +")x c #333C36", +"!x c #2C3835", +"~x c #273B3A", +"{x c #293432", +"]x c #283230", +"^x c #223E34", +"/x c #46504B", +"(x c #645D5C", +"_x c #716A68", +":x c #7C7575", +"y c #615C57", +",y c #575652", +"'y c #4E504E", +")y c #434342", +"!y c #303E3E", +"~y c #2A3B3A", +"{y c #293634", +"]y c #252B27", +"^y c #1E2D27", +"/y c #213C33", +"(y c #545853", +"_y c #5F706D", +":y c #757874", +"z c #3C433B", +",z c #39423D", +"'z c #384038", +")z c #605C59", +"!z c #50564E", +"~z c #4B514D", +"{z c #474F4C", +"]z c #404946", +"^z c #394541", +"/z c #32423E", +"(z c #263531", +"_z c #232724", +":z c #1D2D2B", +"A c #8A8176", +",A c #786C66", +"'A c #5F5958", +")A c #3F3C3B", +"!A c #878880", +"~A c #998A7D", +"{A c #928176", +"]A c #786961", +"^A c #5F574F", +"/A c #464942", +"(A c #3C433F", +"_A c #52544F", +":A c #52534D", +"B c #050202", +",B c #3A3935", +"'B c #64777C", +")B c #2E4A3B", +"!B c #708068", +"~B c #B1B89E", +"{B c #A5A895", +"]B c #938D7D", +"^B c #756B65", +"/B c #3F3E3B", +"(B c #41433D", +"_B c #91877C", +":B c #9C7F6F", +"C c #060201", +",C c #343230", +"'C c #4C5A5D", +")C c #39483A", +"!C c #7E876E", +"~C c #ADB89D", +"{C c #A3A495", +"]C c #716A63", +"^C c #3A3D35", +"/C c #50473C", +"(C c #B08375", +"_C c #B27362", +":C c #97685A", +"D c #879395", +",D c #BBBFC0", +"'D c #DAD8D7", +")D c #E8E8E7", +"!D c #EFF1EE", +"~D c #F1F3F0", +"{D c #F1F2F1", +"]D c #EEEEEE", +"^D c #EAEAEA", +"/D c #E7E7E7", +"(D c #E1E1E1", +"_D c #E0E0E0", +":D c #D1D2D1", +"E c #DEDFE1", +",E c #DCDFE2", +"'E c #E8EAEE", +")E c #ECEDF1", +"!E c #EEEEF3", +"~E c #EEEDF3", +"{E c #F0EEF3", +"]E c #EEECF1", +"^E c #EDEDEF", +"/E c #C5C5C5", +"(E c #C4C4C4", +"_E c #D2D2D2", +":E c #C2C2C2", +"F c #6E6E6E", +",F c #4E4E4E", +"'F c #B3B3B3", +")F c #A9A9A9", +"!F c #B9B9B9", +"~F c #494949", +"{F c #575757", +"]F c #919191", +"^F c #3E3E3E", +"/F c #747474", +"(F c #DCDBDF", +"_F c #DDDDE0", +":F c #E7E9EA", +"G c #979599", +",G c #2C3F3C", +"'G c #35443F", +")G c #18362D", +"!G c #151C14", +"~G c #100905", +"{G c #090300", +"]G c #130F0E", +"^G c #32434D", +"/G c #2F464B", +"(G c #4F6054", +"_G c #8F9A81", +":G c #BBC0A0", +"H c #D7D9D8", +",H c #D8DAD9", +"'H c #E8EAE9", +")H c #E9ECEB", +"!H c #E9EBEB", +"~H c #E8EBEA", +"{H c #979797", +"]H c #080808", +"^H c #9A9A9A", +"/H c #8A8A8A", +"(H c #505050", +"_H c #666666", +":H c #7F7F7F", +"I c #5B5B58", +",I c #3E4D45", +"'I c #6F7C73", +")I c #E8E7E5", +"!I c #F8F8F8", +"~I c #F0F0F0", +"{I c #3A3A3A", +"]I c #878787", +"^I c #1A1A1A", +"/I c #333333", +"(I c #141414", +"_I c #252525", +":I c #1B1B1B", +"J c #D8DDDA", +",J c #CECDD2", +"'J c #ADACB2", +")J c #676969", +"!J c #1F2927", +"~J c #3B4C49", +"{J c #3B4542", +"]J c #364442", +"^J c #0F2821", +"/J c #020100", +"(J c #A47887", +"_J c #4F535C", +":J c #596C55", +"K c #465651", +",K c #B1B0AA", +"'K c #FBFDFA", +")K c #FAFAFA", +"!K c #D5D2D6", +"~K c #DBD8DE", +"{K c #E4E1E7", +"]K c #E4E2E7", +"^K c #E5E4E8", +"/K c #E7E6E8", +"(K c #E4E3E4", +"_K c #E6E4E6", +":K c #E5E3E5", +"L c #D9E0DA", +",L c #D1DED3", +"'L c #D0DED2", +")L c #C9DACB", +"!L c #C4D8C7", +"~L c #C1D8C4", +"{L c #BAD4BC", +"]L c #ADD1AF", +"^L c #A7CEA9", +"/L c #A9CCAC", +"(L c #AAC7AC", +"_L c #A8C1A9", +":L c #A5C1A6", +"M c #A5B399", +",M c #B8BBA7", +"'M c #8E8D7D", +")M c #6F7264", +"!M c #5E5F56", +"~M c #445956", +"{M c #BBBBB7", +"]M c #FCFDFA", +"^M c #F8F9F9", +"/M c #D3D2D6", +"(M c #D9D8DD", +"_M c #DDE0E0", +":M c #DCE1DE", +"N c #485D5A", +",N c #C4C4C1", +"'N c #FAFCF9", +")N c #F7F8F7", +"!N c #EFEFEF", +"~N c #CCD0CE", +"{N c #B8CDB9", +"]N c #87B28B", +"^N c #70A673", +"/N c #6CA470", +"(N c #69A16E", +"_N c #63A467", +":N c #5AB460", +"O c #F5F8FA", +",O c #F4F6FA", +"'O c #EAE9ED", +")O c #BEC4C1", +"!O c #929490", +"~O c #433C3A", +"{O c #384240", +"]O c #2C443F", +"^O c #152D29", +"/O c #160E0B", +"(O c #030100", +"_O c #282828", +":O c #8F8C96", +"P c #486772", +",P c #324D54", +"'P c #738269", +")P c #B7BDA9", +"!P c #B4B7A8", +"~P c #686A5B", +"{P c #57584D", +"]P c #454F48", +"^P c #436058", +"/P c #D7DDD6", +"(P c #F6F4F5", +"_P c #AEAEAE", +":P c #D0D2D0", +"