]> git.ipfire.org Git - thirdparty/AWStats.git/commitdiff
This commit was manufactured by cvs2git to create tag 'AWSTATS_1_0'. AWSTATS_1_0
authorcvs2git <admin@example.com>
Wed, 3 Apr 2002 21:01:26 +0000 (21:01 +0000)
committercvs2git <admin@example.com>
Wed, 3 Apr 2002 21:01:26 +0000 (21:01 +0000)
Sprout from master 2001-12-09 20:33:03 UTC eldy 'Provided with an HTML documentation.'
Cherrypick from master 2001-06-15 19:44:04 UTC eldy 'Update icons flag domains (.net and .org are international and no more us flag, add tuvula, biz, museum, coop, info... domains)':
    icon/browser/msie.png
    icon/browser/netscape.png
    icon/clock/hr1.png
    icon/clock/hr10.png
    icon/clock/hr11.png
    icon/clock/hr12.png
    icon/clock/hr2.png
    icon/clock/hr3.png
    icon/clock/hr4.png
    icon/clock/hr5.png
    icon/clock/hr6.png
    icon/clock/hr7.png
    icon/clock/hr8.png
    icon/clock/hr9.png
    icon/cpu/digital.png
    icon/cpu/hp.png
    icon/cpu/ibm.png
    icon/cpu/intel.png
    icon/cpu/java.png
    icon/cpu/mips.png
    icon/cpu/motorola.png
    icon/cpu/sun.png
    icon/cpu/unknown.png
    icon/flags/ad.png
    icon/flags/ae.png
    icon/flags/aero.png
    icon/flags/af.png
    icon/flags/ag.png
    icon/flags/ai.png
    icon/flags/al.png
    icon/flags/am.png
    icon/flags/an.png
    icon/flags/ao.png
    icon/flags/aq.png
    icon/flags/ar.png
    icon/flags/arpa.png
    icon/flags/as.png
    icon/flags/at.png
    icon/flags/au.png
    icon/flags/aw.png
    icon/flags/az.png
    icon/flags/ba.png
    icon/flags/bb.png
    icon/flags/bd.png
    icon/flags/be.png
    icon/flags/bf.png
    icon/flags/bg.png
    icon/flags/bh.png
    icon/flags/bi.png
    icon/flags/biz.png
    icon/flags/bj.png
    icon/flags/bm.png
    icon/flags/bn.png
    icon/flags/bo.png
    icon/flags/br.png
    icon/flags/bs.png
    icon/flags/bt.png
    icon/flags/bv.png
    icon/flags/bw.png
    icon/flags/by.png
    icon/flags/bz.png
    icon/flags/ca.png
    icon/flags/cc.png
    icon/flags/cd.png
    icon/flags/cf.png
    icon/flags/cg.png
    icon/flags/ch.png
    icon/flags/ci.png
    icon/flags/ck.png
    icon/flags/cl.png
    icon/flags/cm.png
    icon/flags/cn.png
    icon/flags/co.png
    icon/flags/coop.png
    icon/flags/cr.png
    icon/flags/cs.png
    icon/flags/cu.png
    icon/flags/cv.png
    icon/flags/cx.png
    icon/flags/cy.png
    icon/flags/cz.png
    icon/flags/de.png
    icon/flags/dj.png
    icon/flags/dk.png
    icon/flags/dm.png
    icon/flags/do.png
    icon/flags/dz.png
    icon/flags/ec.png
    icon/flags/edu.png
    icon/flags/ee.png
    icon/flags/eg.png
    icon/flags/eh.png
    icon/flags/er.png
    icon/flags/es.png
    icon/flags/et.png
    icon/flags/fi.png
    icon/flags/fj.png
    icon/flags/fk.png
    icon/flags/fm.png
    icon/flags/fo.png
    icon/flags/fr.png
    icon/flags/fx.png
    icon/flags/ga.png
    icon/flags/gb.png
    icon/flags/gd.png
    icon/flags/ge.png
    icon/flags/gf.png
    icon/flags/gh.png
    icon/flags/gi.png
    icon/flags/gl.png
    icon/flags/gm.png
    icon/flags/gn.png
    icon/flags/gov.png
    icon/flags/gp.png
    icon/flags/gq.png
    icon/flags/gr.png
    icon/flags/gs.png
    icon/flags/gt.png
    icon/flags/gu.png
    icon/flags/gw.png
    icon/flags/gy.png
    icon/flags/hk.png
    icon/flags/hm.png
    icon/flags/hn.png
    icon/flags/hr.png
    icon/flags/ht.png
    icon/flags/hu.png
    icon/flags/id.png
    icon/flags/ie.png
    icon/flags/il.png
    icon/flags/in.png
    icon/flags/info.png
    icon/flags/int.png
    icon/flags/io.png
    icon/flags/ip.png
    icon/flags/iq.png
    icon/flags/ir.png
    icon/flags/is.png
    icon/flags/it.png
    icon/flags/jm.png
    icon/flags/jo.png
    icon/flags/jp.png
    icon/flags/ke.png
    icon/flags/kg.png
    icon/flags/kh.png
    icon/flags/ki.png
    icon/flags/km.png
    icon/flags/kn.png
    icon/flags/kp.png
    icon/flags/kr.png
    icon/flags/kw.png
    icon/flags/ky.png
    icon/flags/kz.png
    icon/flags/la.png
    icon/flags/lb.png
    icon/flags/lc.png
    icon/flags/li.png
    icon/flags/lk.png
    icon/flags/lr.png
    icon/flags/ls.png
    icon/flags/lt.png
    icon/flags/lu.png
    icon/flags/lv.png
    icon/flags/ly.png
    icon/flags/ma.png
    icon/flags/mc.png
    icon/flags/md.png
    icon/flags/mg.png
    icon/flags/mil.png
    icon/flags/mk.png
    icon/flags/mn.png
    icon/flags/mq.png
    icon/flags/mr.png
    icon/flags/mt.png
    icon/flags/mu.png
    icon/flags/museum.png
    icon/flags/mv.png
    icon/flags/mx.png
    icon/flags/my.png
    icon/flags/na.png
    icon/flags/name.png
    icon/flags/nato.png
    icon/flags/nc.png
    icon/flags/ne.png
    icon/flags/ng.png
    icon/flags/ni.png
    icon/flags/nl.png
    icon/flags/no.png
    icon/flags/np.png
    icon/flags/nt.png
    icon/flags/nu.png
    icon/flags/nz.png
    icon/flags/om.png
    icon/flags/pa.png
    icon/flags/pe.png
    icon/flags/pf.png
    icon/flags/ph.png
    icon/flags/pk.png
    icon/flags/pl.png
    icon/flags/pro.png
    icon/flags/pt.png
    icon/flags/py.png
    icon/flags/qa.png
    icon/flags/ro.png
    icon/flags/ru.png
    icon/flags/rw.png
    icon/flags/sa.png
    icon/flags/sb.png
    icon/flags/se.png
    icon/flags/sg.png
    icon/flags/si.png
    icon/flags/sk.png
    icon/flags/sm.png
    icon/flags/sn.png
    icon/flags/su.png
    icon/flags/sy.png
    icon/flags/sz.png
    icon/flags/tc.png
    icon/flags/td.png
    icon/flags/tf.png
    icon/flags/tg.png
    icon/flags/th.png
    icon/flags/tk.png
    icon/flags/tm.png
    icon/flags/tn.png
    icon/flags/to.png
    icon/flags/tr.png
    icon/flags/tt.png
    icon/flags/tv.png
    icon/flags/tw.png
    icon/flags/tz.png
    icon/flags/ua.png
    icon/flags/ug.png
    icon/flags/uk.png
    icon/flags/um.png
    icon/flags/unknown.png
    icon/flags/us.png
    icon/flags/uy.png
    icon/flags/uz.png
    icon/flags/va.png
    icon/flags/vc.png
    icon/flags/ve.png
    icon/flags/vg.png
    icon/flags/vi.png
    icon/flags/vn.png
    icon/flags/wf.png
    icon/flags/ws.png
    icon/flags/ye.png
    icon/flags/yt.png
    icon/flags/yu.png
    icon/flags/za.png
    icon/flags/ze.png
    icon/flags/zm.png
    icon/flags/zw.png
    icon/os/acorn.png
    icon/os/aix.png
    icon/os/amigaos.png
    icon/os/apple.png
    icon/os/beos.png
    icon/os/bsdi.png
    icon/os/cpm.png
    icon/os/digital.png
    icon/os/dos.png
    icon/os/freebsd.png
    icon/os/hp.png
    icon/os/ibm.png
    icon/os/irix.png
    icon/os/java.png
    icon/os/linux.png
    icon/os/mac.png
    icon/os/netbsd.png
    icon/os/netware.png
    icon/os/next.png
    icon/os/openbsd.png
    icon/os/osf.png
    icon/os/qnx.png
    icon/os/sco.png
    icon/os/sun.png
    icon/os/unknown.png
    icon/os/vms.png
    icon/os/warp.png
    icon/os/webtv.png
    icon/os/windows.png
    icon/other/awstats_logo2.png
    icon/other/barrehh.png
    icon/other/barrehk.png
    icon/other/barrehp.png
    icon/other/barrevh.png
    icon/other/barrevk.png
    icon/other/barrevp.png
    icon/other/barrevu.png
    icon/other/barrevv.png
Cherrypick from master 2002-04-02 21:02:18 UTC eldy 'Added icon for browsers':
    docs/COPYING.TXT
    docs/LICENSE.TXT
    docs/images/awstats.ico
    wwwroot/cgi-bin/lang/awstats-lv.txt
    wwwroot/cgi-bin/lang/awstats-tt-nb.txt
    wwwroot/cgi-bin/lang/awstats-tt-se.txt
    wwwroot/icon/browser/adobe.png
    wwwroot/icon/browser/amaya.png
    wwwroot/icon/browser/da.png
    wwwroot/icon/browser/getright.png
    wwwroot/icon/browser/gozilla.png
    wwwroot/icon/browser/icab.png
    wwwroot/icon/browser/konqueror.png
    wwwroot/icon/browser/mediaplayer.png
    wwwroot/icon/browser/msie_large.png
    wwwroot/icon/browser/netscape_large.png
    wwwroot/icon/browser/omniweb.png
    wwwroot/icon/browser/pdaphone.png
    wwwroot/icon/browser/staroffice.png
    wwwroot/icon/browser/unknown.png
    wwwroot/icon/browser/webtv.png
    wwwroot/icon/browser/webzip.png
    wwwroot/icon/flags/mo.png
Cherrypick from master 2001-06-30 15:33:21 UTC eldy 'Extract languages data in separate language files':
    wwwroot/cgi-bin/lang/awstats-cz.txt
    wwwroot/cgi-bin/lang/awstats-de.txt
    wwwroot/cgi-bin/lang/awstats-dk.txt
    wwwroot/cgi-bin/lang/awstats-en.txt
    wwwroot/cgi-bin/lang/awstats-es.txt
    wwwroot/cgi-bin/lang/awstats-gr.txt
    wwwroot/cgi-bin/lang/awstats-it.txt
    wwwroot/cgi-bin/lang/awstats-kr.txt
    wwwroot/cgi-bin/lang/awstats-pl.txt
    wwwroot/cgi-bin/lang/awstats-pt.txt
    wwwroot/cgi-bin/lang/awstats-tt-en.txt
    wwwroot/cgi-bin/lang/awstats-tt-es.txt
    wwwroot/cgi-bin/lang/awstats-tt-fr.txt
    wwwroot/cgi-bin/lang/awstats-tt-ua.txt
    wwwroot/cgi-bin/lang/awstats-ua.txt
    wwwroot/icon/flags/ba.png
    wwwroot/icon/flags/sn.png
Cherrypick from master 2001-10-20 15:24:24 UTC eldy 'Reference database (robots, os, browsers, search engines, domains) has been extracted in external files.':
    wwwroot/cgi-bin/db/browsers.pl
    wwwroot/cgi-bin/db/operating_systems.pl
    wwwroot/cgi-bin/db/robots.pl
    wwwroot/cgi-bin/db/search_engines.pl
    wwwroot/cgi-bin/lang/awstats-cn.txt
    wwwroot/cgi-bin/lang/awstats-id.txt
    wwwroot/cgi-bin/lang/awstats-tt-hu.txt
    wwwroot/cgi-bin/logresolvemerge.pl
    wwwroot/icon/browser/dreamcast.png
Cherrypick from master 2001-05-05 01:26:05 UTC eldy 'Change tree directory.':
    cgi-bin/awstats.model.conf
    cgi-bin/awstats.pl
    cgi-bin/robotslist.txt
    icon/flags/com.png
    icon/flags/net.png
    icon/flags/org.png
    icon/other/awstats_logo1.png
Cherrypick from master 2001-03-09 23:57:14 UTC eldy 'Add senegal flag':
    flags/mn.png
    flags/mv.png
    flags/sm.png
    flags/sn.png
    os/beos.png
    os/mac.png
Cherrypick from master 2001-06-30 13:59:27 UTC eldy 'Extract languages data in separate language files':
    wwwroot/cgi-bin/lang/awstats-fr.txt
    wwwroot/cgi-bin/lang/awstats-ge.txt
    wwwroot/cgi-bin/lang/awstats-nl.txt
    wwwroot/cgi-bin/lang/awstats-po.txt
    wwwroot/cgi-bin/lang/awstats-sp.txt
Cherrypick from master 2001-09-05 19:22:52 UTC eldy 'Add language for Taiwan':
    wwwroot/cgi-bin/lang/awstats-ru.txt
    wwwroot/cgi-bin/lang/awstats-tt-de.txt
    wwwroot/cgi-bin/lang/awstats-tt-nn.txt
    wwwroot/cgi-bin/lang/awstats-tw.txt
    wwwroot/icon/flags/sv.png
Cherrypick from master 2000-11-10 23:14:54 UTC eldy 'Add New Caledonia flag (.png file)':
    INSTALL.TXT
    README.TXT
    flags/nc.png
Cherrypick from master 2001-06-27 23:25:39 UTC eldy 'Change tree directories':
    wwwroot/cgi-bin/awstats.model.conf
    wwwroot/cgi-bin/awstats.pl
    wwwroot/icon/flags/Thumbs.db
Cherrypick from master 2002-01-16 20:35:45 UTC eldy 'Added portuguese (brazilian) language files.':
    tools/common2combined.pl
    tools/logresolvemerge.pl
    wwwroot/cgi-bin/lang/awstats-br.txt
Cherrypick from master 2002-02-24 15:59:39 UTC eldy 'Added icons for browsers':
    wwwroot/icon/browser/lynx.png
    wwwroot/icon/browser/notavailable.png
    wwwroot/icon/browser/opera.png
Cherrypick from master 2001-07-16 12:05:29 UTC eldy 'Add swedish language':
    wwwroot/cgi-bin/lang/awstats-nn.txt
    wwwroot/cgi-bin/lang/awstats-se.txt
Cherrypick from master 2001-12-19 22:08:28 UTC eldy 'Added no lanugage files':
    wwwroot/cgi-bin/lang/awstats-no.txt
    wwwroot/cgi-bin/lang/awstats-tt-no.txt
Cherrypick from master 2002-03-31 07:12:00 UTC eldy 'Updated documentation.':
    docs/images/awstats_logo4.gif
    docs/images/awstats_logo4.png
Cherrypick from master 2002-04-03 21:01:25 UTC eldy 'Added icon for browsers':
    wwwroot/icon/browser/teleport.png
    wwwroot/icon/browser/webcopier.png
Cherrypick from master 2000-11-11 00:39:02 UTC eldy 'Add example of a config file':
    awstats.model.conf
Cherrypick from master 2001-07-26 20:25:48 UTC eldy 'Add hungarian language':
    wwwroot/cgi-bin/lang/awstats-hu.txt
Cherrypick from master 2001-12-22 20:55:40 UTC eldy 'Added nn and nb language files':
    wwwroot/cgi-bin/lang/awstats-nb.txt
Cherrypick from master 2002-03-05 03:26:07 UTC eldy 'Added a page about security tips in documentation.':
    docs/awstats_security.html
Cherrypick from master 2002-03-31 17:25:56 UTC eldy 'Added doc ins PDF format':
    docs/awstats.pdf
Cherrypick from unlabeled-1.1.1 2000-11-04 03:50:29 UTC eldy '':
    COPYING.TXT
    awstats.pl
    browser/msie.png
    browser/netscape.png
    clock/hr1.png
    clock/hr10.png
    clock/hr11.png
    clock/hr12.png
    clock/hr2.png
    clock/hr3.png
    clock/hr4.png
    clock/hr5.png
    clock/hr6.png
    clock/hr7.png
    clock/hr8.png
    clock/hr9.png
    cpu/digital.png
    cpu/hp.png
    cpu/ibm.png
    cpu/intel.png
    cpu/java.png
    cpu/mips.png
    cpu/motorola.png
    cpu/sun.png
    cpu/unknown.png
    flags/ad.png
    flags/ae.png
    flags/af.png
    flags/ag.png
    flags/ai.png
    flags/al.png
    flags/am.png
    flags/an.png
    flags/ao.png
    flags/aq.png
    flags/ar.png
    flags/arpa.png
    flags/as.png
    flags/at.png
    flags/au.png
    flags/aw.png
    flags/az.png
    flags/ba.png
    flags/bb.png
    flags/bd.png
    flags/be.png
    flags/bf.png
    flags/bg.png
    flags/bh.png
    flags/bi.png
    flags/bj.png
    flags/bm.png
    flags/bn.png
    flags/bo.png
    flags/br.png
    flags/bs.png
    flags/bt.png
    flags/bv.png
    flags/bw.png
    flags/by.png
    flags/bz.png
    flags/ca.png
    flags/cc.png
    flags/cd.png
    flags/cf.png
    flags/cg.png
    flags/ch.png
    flags/ci.png
    flags/ck.png
    flags/cl.png
    flags/cm.png
    flags/cn.png
    flags/co.png
    flags/com.png
    flags/cr.png
    flags/cs.png
    flags/cu.png
    flags/cv.png
    flags/cx.png
    flags/cy.png
    flags/cz.png
    flags/de.png
    flags/dj.png
    flags/dk.png
    flags/dm.png
    flags/do.png
    flags/dz.png
    flags/ec.png
    flags/edu.png
    flags/ee.png
    flags/eg.png
    flags/eh.png
    flags/er.png
    flags/es.png
    flags/et.png
    flags/fi.png
    flags/fj.png
    flags/fk.png
    flags/fm.png
    flags/fo.png
    flags/fr.png
    flags/fx.png
    flags/ga.png
    flags/gb.png
    flags/gd.png
    flags/ge.png
    flags/gf.png
    flags/gh.png
    flags/gi.png
    flags/gl.png
    flags/gm.png
    flags/gn.png
    flags/gov.png
    flags/gp.png
    flags/gq.png
    flags/gr.png
    flags/gs.png
    flags/gt.png
    flags/gu.png
    flags/gw.png
    flags/gy.png
    flags/hk.png
    flags/hm.png
    flags/hn.png
    flags/hr.png
    flags/ht.png
    flags/hu.png
    flags/id.png
    flags/ie.png
    flags/il.png
    flags/in.png
    flags/int.png
    flags/io.png
    flags/ip.png
    flags/iq.png
    flags/ir.png
    flags/is.png
    flags/it.png
    flags/jm.png
    flags/jo.png
    flags/jp.png
    flags/ke.png
    flags/kg.png
    flags/kh.png
    flags/ki.png
    flags/km.png
    flags/kn.png
    flags/kp.png
    flags/kr.png
    flags/kw.png
    flags/ky.png
    flags/kz.png
    flags/la.png
    flags/lb.png
    flags/lc.png
    flags/li.png
    flags/lk.png
    flags/lr.png
    flags/ls.png
    flags/lt.png
    flags/lu.png
    flags/lv.png
    flags/ly.png
    flags/ma.png
    flags/mc.png
    flags/md.png
    flags/mg.png
    flags/mil.png
    flags/mk.png
    flags/mq.png
    flags/mr.png
    flags/mt.png
    flags/mu.png
    flags/mx.png
    flags/my.png
    flags/na.png
    flags/nato.png
    flags/ne.png
    flags/net.png
    flags/ng.png
    flags/ni.png
    flags/nl.png
    flags/no.png
    flags/np.png
    flags/nu.png
    flags/nz.png
    flags/om.png
    flags/org.png
    flags/pa.png
    flags/pe.png
    flags/pf.png
    flags/ph.png
    flags/pk.png
    flags/pl.png
    flags/pt.png
    flags/py.png
    flags/qa.png
    flags/ro.png
    flags/ru.png
    flags/rw.png
    flags/sa.png
    flags/sb.png
    flags/se.png
    flags/sg.png
    flags/si.png
    flags/sk.png
    flags/su.png
    flags/sy.png
    flags/sz.png
    flags/tc.png
    flags/td.png
    flags/tf.png
    flags/tg.png
    flags/th.png
    flags/tk.png
    flags/tm.png
    flags/tn.png
    flags/to.png
    flags/tr.png
    flags/tt.png
    flags/tw.png
    flags/tz.png
    flags/ua.png
    flags/ug.png
    flags/uk.png
    flags/um.png
    flags/unknown.png
    flags/us.png
    flags/uy.png
    flags/uz.png
    flags/va.png
    flags/vc.png
    flags/ve.png
    flags/vg.png
    flags/vi.png
    flags/vn.png
    flags/wf.png
    flags/ws.png
    flags/ye.png
    flags/yt.png
    flags/yu.png
    flags/za.png
    flags/ze.png
    flags/zm.png
    flags/zw.png
    os/acorn.png
    os/aix.png
    os/amigaos.png
    os/apple.png
    os/be.png
    os/bsdi.png
    os/cpm.png
    os/digital.png
    os/dos.png
    os/freebsd.png
    os/hp.png
    os/ibm.png
    os/irix.png
    os/java.png
    os/linux.png
    os/macos.png
    os/netbsd.png
    os/netware.png
    os/next.png
    os/openbsd.png
    os/osf.png
    os/qnx.png
    os/sco.png
    os/sun.png
    os/unknown.png
    os/vms.png
    os/warp.png
    os/webtv.png
    os/windows.png
    other/awstats_logo1.png
    other/awstats_logo2.png
    other/barrehh.png
    other/barrehk.png
    other/barrehp.png
    other/barrevh.png
    other/barrevk.png
    other/barrevp.png
    other/barrevu.png
    other/barrevv.png
    robotslist.txt

674 files changed:
COPYING.TXT [new file with mode: 0644]
INSTALL.TXT [new file with mode: 0644]
README.TXT
awstats.model.conf [new file with mode: 0644]
awstats.pl [new file with mode: 0644]
browser/msie.png [new file with mode: 0644]
browser/netscape.png [new file with mode: 0644]
cgi-bin/awstats.model.conf [new file with mode: 0644]
cgi-bin/awstats.pl [new file with mode: 0644]
cgi-bin/robotslist.txt [new file with mode: 0644]
clock/hr1.png [new file with mode: 0644]
clock/hr10.png [new file with mode: 0644]
clock/hr11.png [new file with mode: 0644]
clock/hr12.png [new file with mode: 0644]
clock/hr2.png [new file with mode: 0644]
clock/hr3.png [new file with mode: 0644]
clock/hr4.png [new file with mode: 0644]
clock/hr5.png [new file with mode: 0644]
clock/hr6.png [new file with mode: 0644]
clock/hr7.png [new file with mode: 0644]
clock/hr8.png [new file with mode: 0644]
clock/hr9.png [new file with mode: 0644]
cpu/digital.png [new file with mode: 0644]
cpu/hp.png [new file with mode: 0644]
cpu/ibm.png [new file with mode: 0644]
cpu/intel.png [new file with mode: 0644]
cpu/java.png [new file with mode: 0644]
cpu/mips.png [new file with mode: 0644]
cpu/motorola.png [new file with mode: 0644]
cpu/sun.png [new file with mode: 0644]
cpu/unknown.png [new file with mode: 0644]
docs/COPYING.TXT [new file with mode: 0644]
docs/LICENSE.TXT [new file with mode: 0644]
docs/awstats.pdf [new file with mode: 0644]
docs/awstats_security.html [new file with mode: 0644]
docs/images/awstats.ico [new file with mode: 0644]
docs/images/awstats_logo4.gif [new file with mode: 0644]
docs/images/awstats_logo4.png [new file with mode: 0644]
flags/ad.png [new file with mode: 0644]
flags/ae.png [new file with mode: 0644]
flags/af.png [new file with mode: 0644]
flags/ag.png [new file with mode: 0644]
flags/ai.png [new file with mode: 0644]
flags/al.png [new file with mode: 0644]
flags/am.png [new file with mode: 0644]
flags/an.png [new file with mode: 0644]
flags/ao.png [new file with mode: 0644]
flags/aq.png [new file with mode: 0644]
flags/ar.png [new file with mode: 0644]
flags/arpa.png [new file with mode: 0644]
flags/as.png [new file with mode: 0644]
flags/at.png [new file with mode: 0644]
flags/au.png [new file with mode: 0644]
flags/aw.png [new file with mode: 0644]
flags/az.png [new file with mode: 0644]
flags/ba.png [new file with mode: 0644]
flags/bb.png [new file with mode: 0644]
flags/bd.png [new file with mode: 0644]
flags/be.png [new file with mode: 0644]
flags/bf.png [new file with mode: 0644]
flags/bg.png [new file with mode: 0644]
flags/bh.png [new file with mode: 0644]
flags/bi.png [new file with mode: 0644]
flags/bj.png [new file with mode: 0644]
flags/bm.png [new file with mode: 0644]
flags/bn.png [new file with mode: 0644]
flags/bo.png [new file with mode: 0644]
flags/br.png [new file with mode: 0644]
flags/bs.png [new file with mode: 0644]
flags/bt.png [new file with mode: 0644]
flags/bv.png [new file with mode: 0644]
flags/bw.png [new file with mode: 0644]
flags/by.png [new file with mode: 0644]
flags/bz.png [new file with mode: 0644]
flags/ca.png [new file with mode: 0644]
flags/cc.png [new file with mode: 0644]
flags/cd.png [new file with mode: 0644]
flags/cf.png [new file with mode: 0644]
flags/cg.png [new file with mode: 0644]
flags/ch.png [new file with mode: 0644]
flags/ci.png [new file with mode: 0644]
flags/ck.png [new file with mode: 0644]
flags/cl.png [new file with mode: 0644]
flags/cm.png [new file with mode: 0644]
flags/cn.png [new file with mode: 0644]
flags/co.png [new file with mode: 0644]
flags/com.png [new file with mode: 0644]
flags/cr.png [new file with mode: 0644]
flags/cs.png [new file with mode: 0644]
flags/cu.png [new file with mode: 0644]
flags/cv.png [new file with mode: 0644]
flags/cx.png [new file with mode: 0644]
flags/cy.png [new file with mode: 0644]
flags/cz.png [new file with mode: 0644]
flags/de.png [new file with mode: 0644]
flags/dj.png [new file with mode: 0644]
flags/dk.png [new file with mode: 0644]
flags/dm.png [new file with mode: 0644]
flags/do.png [new file with mode: 0644]
flags/dz.png [new file with mode: 0644]
flags/ec.png [new file with mode: 0644]
flags/edu.png [new file with mode: 0644]
flags/ee.png [new file with mode: 0644]
flags/eg.png [new file with mode: 0644]
flags/eh.png [new file with mode: 0644]
flags/er.png [new file with mode: 0644]
flags/es.png [new file with mode: 0644]
flags/et.png [new file with mode: 0644]
flags/fi.png [new file with mode: 0644]
flags/fj.png [new file with mode: 0644]
flags/fk.png [new file with mode: 0644]
flags/fm.png [new file with mode: 0644]
flags/fo.png [new file with mode: 0644]
flags/fr.png [new file with mode: 0644]
flags/fx.png [new file with mode: 0644]
flags/ga.png [new file with mode: 0644]
flags/gb.png [new file with mode: 0644]
flags/gd.png [new file with mode: 0644]
flags/ge.png [new file with mode: 0644]
flags/gf.png [new file with mode: 0644]
flags/gh.png [new file with mode: 0644]
flags/gi.png [new file with mode: 0644]
flags/gl.png [new file with mode: 0644]
flags/gm.png [new file with mode: 0644]
flags/gn.png [new file with mode: 0644]
flags/gov.png [new file with mode: 0644]
flags/gp.png [new file with mode: 0644]
flags/gq.png [new file with mode: 0644]
flags/gr.png [new file with mode: 0644]
flags/gs.png [new file with mode: 0644]
flags/gt.png [new file with mode: 0644]
flags/gu.png [new file with mode: 0644]
flags/gw.png [new file with mode: 0644]
flags/gy.png [new file with mode: 0644]
flags/hk.png [new file with mode: 0644]
flags/hm.png [new file with mode: 0644]
flags/hn.png [new file with mode: 0644]
flags/hr.png [new file with mode: 0644]
flags/ht.png [new file with mode: 0644]
flags/hu.png [new file with mode: 0644]
flags/id.png [new file with mode: 0644]
flags/ie.png [new file with mode: 0644]
flags/il.png [new file with mode: 0644]
flags/in.png [new file with mode: 0644]
flags/int.png [new file with mode: 0644]
flags/io.png [new file with mode: 0644]
flags/ip.png [new file with mode: 0644]
flags/iq.png [new file with mode: 0644]
flags/ir.png [new file with mode: 0644]
flags/is.png [new file with mode: 0644]
flags/it.png [new file with mode: 0644]
flags/jm.png [new file with mode: 0644]
flags/jo.png [new file with mode: 0644]
flags/jp.png [new file with mode: 0644]
flags/ke.png [new file with mode: 0644]
flags/kg.png [new file with mode: 0644]
flags/kh.png [new file with mode: 0644]
flags/ki.png [new file with mode: 0644]
flags/km.png [new file with mode: 0644]
flags/kn.png [new file with mode: 0644]
flags/kp.png [new file with mode: 0644]
flags/kr.png [new file with mode: 0644]
flags/kw.png [new file with mode: 0644]
flags/ky.png [new file with mode: 0644]
flags/kz.png [new file with mode: 0644]
flags/la.png [new file with mode: 0644]
flags/lb.png [new file with mode: 0644]
flags/lc.png [new file with mode: 0644]
flags/li.png [new file with mode: 0644]
flags/lk.png [new file with mode: 0644]
flags/lr.png [new file with mode: 0644]
flags/ls.png [new file with mode: 0644]
flags/lt.png [new file with mode: 0644]
flags/lu.png [new file with mode: 0644]
flags/lv.png [new file with mode: 0644]
flags/ly.png [new file with mode: 0644]
flags/ma.png [new file with mode: 0644]
flags/mc.png [new file with mode: 0644]
flags/md.png [new file with mode: 0644]
flags/mg.png [new file with mode: 0644]
flags/mil.png [new file with mode: 0644]
flags/mk.png [new file with mode: 0644]
flags/mn.png [new file with mode: 0644]
flags/mq.png [new file with mode: 0644]
flags/mr.png [new file with mode: 0644]
flags/mt.png [new file with mode: 0644]
flags/mu.png [new file with mode: 0644]
flags/mv.png [new file with mode: 0644]
flags/mx.png [new file with mode: 0644]
flags/my.png [new file with mode: 0644]
flags/na.png [new file with mode: 0644]
flags/nato.png [new file with mode: 0644]
flags/nc.png [new file with mode: 0644]
flags/ne.png [new file with mode: 0644]
flags/net.png [new file with mode: 0644]
flags/ng.png [new file with mode: 0644]
flags/ni.png [new file with mode: 0644]
flags/nl.png [new file with mode: 0644]
flags/no.png [new file with mode: 0644]
flags/np.png [new file with mode: 0644]
flags/nu.png [new file with mode: 0644]
flags/nz.png [new file with mode: 0644]
flags/om.png [new file with mode: 0644]
flags/org.png [new file with mode: 0644]
flags/pa.png [new file with mode: 0644]
flags/pe.png [new file with mode: 0644]
flags/pf.png [new file with mode: 0644]
flags/ph.png [new file with mode: 0644]
flags/pk.png [new file with mode: 0644]
flags/pl.png [new file with mode: 0644]
flags/pt.png [new file with mode: 0644]
flags/py.png [new file with mode: 0644]
flags/qa.png [new file with mode: 0644]
flags/ro.png [new file with mode: 0644]
flags/ru.png [new file with mode: 0644]
flags/rw.png [new file with mode: 0644]
flags/sa.png [new file with mode: 0644]
flags/sb.png [new file with mode: 0644]
flags/se.png [new file with mode: 0644]
flags/sg.png [new file with mode: 0644]
flags/si.png [new file with mode: 0644]
flags/sk.png [new file with mode: 0644]
flags/sm.png [new file with mode: 0644]
flags/sn.png [new file with mode: 0644]
flags/su.png [new file with mode: 0644]
flags/sy.png [new file with mode: 0644]
flags/sz.png [new file with mode: 0644]
flags/tc.png [new file with mode: 0644]
flags/td.png [new file with mode: 0644]
flags/tf.png [new file with mode: 0644]
flags/tg.png [new file with mode: 0644]
flags/th.png [new file with mode: 0644]
flags/tk.png [new file with mode: 0644]
flags/tm.png [new file with mode: 0644]
flags/tn.png [new file with mode: 0644]
flags/to.png [new file with mode: 0644]
flags/tr.png [new file with mode: 0644]
flags/tt.png [new file with mode: 0644]
flags/tw.png [new file with mode: 0644]
flags/tz.png [new file with mode: 0644]
flags/ua.png [new file with mode: 0644]
flags/ug.png [new file with mode: 0644]
flags/uk.png [new file with mode: 0644]
flags/um.png [new file with mode: 0644]
flags/unknown.png [new file with mode: 0644]
flags/us.png [new file with mode: 0644]
flags/uy.png [new file with mode: 0644]
flags/uz.png [new file with mode: 0644]
flags/va.png [new file with mode: 0644]
flags/vc.png [new file with mode: 0644]
flags/ve.png [new file with mode: 0644]
flags/vg.png [new file with mode: 0644]
flags/vi.png [new file with mode: 0644]
flags/vn.png [new file with mode: 0644]
flags/wf.png [new file with mode: 0644]
flags/ws.png [new file with mode: 0644]
flags/ye.png [new file with mode: 0644]
flags/yt.png [new file with mode: 0644]
flags/yu.png [new file with mode: 0644]
flags/za.png [new file with mode: 0644]
flags/ze.png [new file with mode: 0644]
flags/zm.png [new file with mode: 0644]
flags/zw.png [new file with mode: 0644]
icon/browser/msie.png [new file with mode: 0644]
icon/browser/netscape.png [new file with mode: 0644]
icon/clock/hr1.png [new file with mode: 0644]
icon/clock/hr10.png [new file with mode: 0644]
icon/clock/hr11.png [new file with mode: 0644]
icon/clock/hr12.png [new file with mode: 0644]
icon/clock/hr2.png [new file with mode: 0644]
icon/clock/hr3.png [new file with mode: 0644]
icon/clock/hr4.png [new file with mode: 0644]
icon/clock/hr5.png [new file with mode: 0644]
icon/clock/hr6.png [new file with mode: 0644]
icon/clock/hr7.png [new file with mode: 0644]
icon/clock/hr8.png [new file with mode: 0644]
icon/clock/hr9.png [new file with mode: 0644]
icon/cpu/digital.png [new file with mode: 0644]
icon/cpu/hp.png [new file with mode: 0644]
icon/cpu/ibm.png [new file with mode: 0644]
icon/cpu/intel.png [new file with mode: 0644]
icon/cpu/java.png [new file with mode: 0644]
icon/cpu/mips.png [new file with mode: 0644]
icon/cpu/motorola.png [new file with mode: 0644]
icon/cpu/sun.png [new file with mode: 0644]
icon/cpu/unknown.png [new file with mode: 0644]
icon/flags/ad.png [new file with mode: 0644]
icon/flags/ae.png [new file with mode: 0644]
icon/flags/aero.png [new file with mode: 0644]
icon/flags/af.png [new file with mode: 0644]
icon/flags/ag.png [new file with mode: 0644]
icon/flags/ai.png [new file with mode: 0644]
icon/flags/al.png [new file with mode: 0644]
icon/flags/am.png [new file with mode: 0644]
icon/flags/an.png [new file with mode: 0644]
icon/flags/ao.png [new file with mode: 0644]
icon/flags/aq.png [new file with mode: 0644]
icon/flags/ar.png [new file with mode: 0644]
icon/flags/arpa.png [new file with mode: 0644]
icon/flags/as.png [new file with mode: 0644]
icon/flags/at.png [new file with mode: 0644]
icon/flags/au.png [new file with mode: 0644]
icon/flags/aw.png [new file with mode: 0644]
icon/flags/az.png [new file with mode: 0644]
icon/flags/ba.png [new file with mode: 0644]
icon/flags/bb.png [new file with mode: 0644]
icon/flags/bd.png [new file with mode: 0644]
icon/flags/be.png [new file with mode: 0644]
icon/flags/bf.png [new file with mode: 0644]
icon/flags/bg.png [new file with mode: 0644]
icon/flags/bh.png [new file with mode: 0644]
icon/flags/bi.png [new file with mode: 0644]
icon/flags/biz.png [new file with mode: 0644]
icon/flags/bj.png [new file with mode: 0644]
icon/flags/bm.png [new file with mode: 0644]
icon/flags/bn.png [new file with mode: 0644]
icon/flags/bo.png [new file with mode: 0644]
icon/flags/br.png [new file with mode: 0644]
icon/flags/bs.png [new file with mode: 0644]
icon/flags/bt.png [new file with mode: 0644]
icon/flags/bv.png [new file with mode: 0644]
icon/flags/bw.png [new file with mode: 0644]
icon/flags/by.png [new file with mode: 0644]
icon/flags/bz.png [new file with mode: 0644]
icon/flags/ca.png [new file with mode: 0644]
icon/flags/cc.png [new file with mode: 0644]
icon/flags/cd.png [new file with mode: 0644]
icon/flags/cf.png [new file with mode: 0644]
icon/flags/cg.png [new file with mode: 0644]
icon/flags/ch.png [new file with mode: 0644]
icon/flags/ci.png [new file with mode: 0644]
icon/flags/ck.png [new file with mode: 0644]
icon/flags/cl.png [new file with mode: 0644]
icon/flags/cm.png [new file with mode: 0644]
icon/flags/cn.png [new file with mode: 0644]
icon/flags/co.png [new file with mode: 0644]
icon/flags/com.png [new file with mode: 0644]
icon/flags/coop.png [new file with mode: 0644]
icon/flags/cr.png [new file with mode: 0644]
icon/flags/cs.png [new file with mode: 0644]
icon/flags/cu.png [new file with mode: 0644]
icon/flags/cv.png [new file with mode: 0644]
icon/flags/cx.png [new file with mode: 0644]
icon/flags/cy.png [new file with mode: 0644]
icon/flags/cz.png [new file with mode: 0644]
icon/flags/de.png [new file with mode: 0644]
icon/flags/dj.png [new file with mode: 0644]
icon/flags/dk.png [new file with mode: 0644]
icon/flags/dm.png [new file with mode: 0644]
icon/flags/do.png [new file with mode: 0644]
icon/flags/dz.png [new file with mode: 0644]
icon/flags/ec.png [new file with mode: 0644]
icon/flags/edu.png [new file with mode: 0644]
icon/flags/ee.png [new file with mode: 0644]
icon/flags/eg.png [new file with mode: 0644]
icon/flags/eh.png [new file with mode: 0644]
icon/flags/er.png [new file with mode: 0644]
icon/flags/es.png [new file with mode: 0644]
icon/flags/et.png [new file with mode: 0644]
icon/flags/fi.png [new file with mode: 0644]
icon/flags/fj.png [new file with mode: 0644]
icon/flags/fk.png [new file with mode: 0644]
icon/flags/fm.png [new file with mode: 0644]
icon/flags/fo.png [new file with mode: 0644]
icon/flags/fr.png [new file with mode: 0644]
icon/flags/fx.png [new file with mode: 0644]
icon/flags/ga.png [new file with mode: 0644]
icon/flags/gb.png [new file with mode: 0644]
icon/flags/gd.png [new file with mode: 0644]
icon/flags/ge.png [new file with mode: 0644]
icon/flags/gf.png [new file with mode: 0644]
icon/flags/gh.png [new file with mode: 0644]
icon/flags/gi.png [new file with mode: 0644]
icon/flags/gl.png [new file with mode: 0644]
icon/flags/gm.png [new file with mode: 0644]
icon/flags/gn.png [new file with mode: 0644]
icon/flags/gov.png [new file with mode: 0644]
icon/flags/gp.png [new file with mode: 0644]
icon/flags/gq.png [new file with mode: 0644]
icon/flags/gr.png [new file with mode: 0644]
icon/flags/gs.png [new file with mode: 0644]
icon/flags/gt.png [new file with mode: 0644]
icon/flags/gu.png [new file with mode: 0644]
icon/flags/gw.png [new file with mode: 0644]
icon/flags/gy.png [new file with mode: 0644]
icon/flags/hk.png [new file with mode: 0644]
icon/flags/hm.png [new file with mode: 0644]
icon/flags/hn.png [new file with mode: 0644]
icon/flags/hr.png [new file with mode: 0644]
icon/flags/ht.png [new file with mode: 0644]
icon/flags/hu.png [new file with mode: 0644]
icon/flags/id.png [new file with mode: 0644]
icon/flags/ie.png [new file with mode: 0644]
icon/flags/il.png [new file with mode: 0644]
icon/flags/in.png [new file with mode: 0644]
icon/flags/info.png [new file with mode: 0644]
icon/flags/int.png [new file with mode: 0644]
icon/flags/io.png [new file with mode: 0644]
icon/flags/ip.png [new file with mode: 0644]
icon/flags/iq.png [new file with mode: 0644]
icon/flags/ir.png [new file with mode: 0644]
icon/flags/is.png [new file with mode: 0644]
icon/flags/it.png [new file with mode: 0644]
icon/flags/jm.png [new file with mode: 0644]
icon/flags/jo.png [new file with mode: 0644]
icon/flags/jp.png [new file with mode: 0644]
icon/flags/ke.png [new file with mode: 0644]
icon/flags/kg.png [new file with mode: 0644]
icon/flags/kh.png [new file with mode: 0644]
icon/flags/ki.png [new file with mode: 0644]
icon/flags/km.png [new file with mode: 0644]
icon/flags/kn.png [new file with mode: 0644]
icon/flags/kp.png [new file with mode: 0644]
icon/flags/kr.png [new file with mode: 0644]
icon/flags/kw.png [new file with mode: 0644]
icon/flags/ky.png [new file with mode: 0644]
icon/flags/kz.png [new file with mode: 0644]
icon/flags/la.png [new file with mode: 0644]
icon/flags/lb.png [new file with mode: 0644]
icon/flags/lc.png [new file with mode: 0644]
icon/flags/li.png [new file with mode: 0644]
icon/flags/lk.png [new file with mode: 0644]
icon/flags/lr.png [new file with mode: 0644]
icon/flags/ls.png [new file with mode: 0644]
icon/flags/lt.png [new file with mode: 0644]
icon/flags/lu.png [new file with mode: 0644]
icon/flags/lv.png [new file with mode: 0644]
icon/flags/ly.png [new file with mode: 0644]
icon/flags/ma.png [new file with mode: 0644]
icon/flags/mc.png [new file with mode: 0644]
icon/flags/md.png [new file with mode: 0644]
icon/flags/mg.png [new file with mode: 0644]
icon/flags/mil.png [new file with mode: 0644]
icon/flags/mk.png [new file with mode: 0644]
icon/flags/mn.png [new file with mode: 0644]
icon/flags/mq.png [new file with mode: 0644]
icon/flags/mr.png [new file with mode: 0644]
icon/flags/mt.png [new file with mode: 0644]
icon/flags/mu.png [new file with mode: 0644]
icon/flags/museum.png [new file with mode: 0644]
icon/flags/mv.png [new file with mode: 0644]
icon/flags/mx.png [new file with mode: 0644]
icon/flags/my.png [new file with mode: 0644]
icon/flags/na.png [new file with mode: 0644]
icon/flags/name.png [new file with mode: 0644]
icon/flags/nato.png [new file with mode: 0644]
icon/flags/nc.png [new file with mode: 0644]
icon/flags/ne.png [new file with mode: 0644]
icon/flags/net.png [new file with mode: 0644]
icon/flags/ng.png [new file with mode: 0644]
icon/flags/ni.png [new file with mode: 0644]
icon/flags/nl.png [new file with mode: 0644]
icon/flags/no.png [new file with mode: 0644]
icon/flags/np.png [new file with mode: 0644]
icon/flags/nt.png [new file with mode: 0644]
icon/flags/nu.png [new file with mode: 0644]
icon/flags/nz.png [new file with mode: 0644]
icon/flags/om.png [new file with mode: 0644]
icon/flags/org.png [new file with mode: 0644]
icon/flags/pa.png [new file with mode: 0644]
icon/flags/pe.png [new file with mode: 0644]
icon/flags/pf.png [new file with mode: 0644]
icon/flags/ph.png [new file with mode: 0644]
icon/flags/pk.png [new file with mode: 0644]
icon/flags/pl.png [new file with mode: 0644]
icon/flags/pro.png [new file with mode: 0644]
icon/flags/pt.png [new file with mode: 0644]
icon/flags/py.png [new file with mode: 0644]
icon/flags/qa.png [new file with mode: 0644]
icon/flags/ro.png [new file with mode: 0644]
icon/flags/ru.png [new file with mode: 0644]
icon/flags/rw.png [new file with mode: 0644]
icon/flags/sa.png [new file with mode: 0644]
icon/flags/sb.png [new file with mode: 0644]
icon/flags/se.png [new file with mode: 0644]
icon/flags/sg.png [new file with mode: 0644]
icon/flags/si.png [new file with mode: 0644]
icon/flags/sk.png [new file with mode: 0644]
icon/flags/sm.png [new file with mode: 0644]
icon/flags/sn.png [new file with mode: 0644]
icon/flags/su.png [new file with mode: 0644]
icon/flags/sy.png [new file with mode: 0644]
icon/flags/sz.png [new file with mode: 0644]
icon/flags/tc.png [new file with mode: 0644]
icon/flags/td.png [new file with mode: 0644]
icon/flags/tf.png [new file with mode: 0644]
icon/flags/tg.png [new file with mode: 0644]
icon/flags/th.png [new file with mode: 0644]
icon/flags/tk.png [new file with mode: 0644]
icon/flags/tm.png [new file with mode: 0644]
icon/flags/tn.png [new file with mode: 0644]
icon/flags/to.png [new file with mode: 0644]
icon/flags/tr.png [new file with mode: 0644]
icon/flags/tt.png [new file with mode: 0644]
icon/flags/tv.png [new file with mode: 0644]
icon/flags/tw.png [new file with mode: 0644]
icon/flags/tz.png [new file with mode: 0644]
icon/flags/ua.png [new file with mode: 0644]
icon/flags/ug.png [new file with mode: 0644]
icon/flags/uk.png [new file with mode: 0644]
icon/flags/um.png [new file with mode: 0644]
icon/flags/unknown.png [new file with mode: 0644]
icon/flags/us.png [new file with mode: 0644]
icon/flags/uy.png [new file with mode: 0644]
icon/flags/uz.png [new file with mode: 0644]
icon/flags/va.png [new file with mode: 0644]
icon/flags/vc.png [new file with mode: 0644]
icon/flags/ve.png [new file with mode: 0644]
icon/flags/vg.png [new file with mode: 0644]
icon/flags/vi.png [new file with mode: 0644]
icon/flags/vn.png [new file with mode: 0644]
icon/flags/wf.png [new file with mode: 0644]
icon/flags/ws.png [new file with mode: 0644]
icon/flags/ye.png [new file with mode: 0644]
icon/flags/yt.png [new file with mode: 0644]
icon/flags/yu.png [new file with mode: 0644]
icon/flags/za.png [new file with mode: 0644]
icon/flags/ze.png [new file with mode: 0644]
icon/flags/zm.png [new file with mode: 0644]
icon/flags/zw.png [new file with mode: 0644]
icon/os/acorn.png [new file with mode: 0644]
icon/os/aix.png [new file with mode: 0644]
icon/os/amigaos.png [new file with mode: 0644]
icon/os/apple.png [new file with mode: 0644]
icon/os/beos.png [new file with mode: 0644]
icon/os/bsdi.png [new file with mode: 0644]
icon/os/cpm.png [new file with mode: 0644]
icon/os/digital.png [new file with mode: 0644]
icon/os/dos.png [new file with mode: 0644]
icon/os/freebsd.png [new file with mode: 0644]
icon/os/hp.png [new file with mode: 0644]
icon/os/ibm.png [new file with mode: 0644]
icon/os/irix.png [new file with mode: 0644]
icon/os/java.png [new file with mode: 0644]
icon/os/linux.png [new file with mode: 0644]
icon/os/mac.png [new file with mode: 0644]
icon/os/netbsd.png [new file with mode: 0644]
icon/os/netware.png [new file with mode: 0644]
icon/os/next.png [new file with mode: 0644]
icon/os/openbsd.png [new file with mode: 0644]
icon/os/osf.png [new file with mode: 0644]
icon/os/qnx.png [new file with mode: 0644]
icon/os/sco.png [new file with mode: 0644]
icon/os/sun.png [new file with mode: 0644]
icon/os/unknown.png [new file with mode: 0644]
icon/os/vms.png [new file with mode: 0644]
icon/os/warp.png [new file with mode: 0644]
icon/os/webtv.png [new file with mode: 0644]
icon/os/windows.png [new file with mode: 0644]
icon/other/awstats_logo1.png [new file with mode: 0644]
icon/other/awstats_logo2.png [new file with mode: 0644]
icon/other/barrehh.png [new file with mode: 0644]
icon/other/barrehk.png [new file with mode: 0644]
icon/other/barrehp.png [new file with mode: 0644]
icon/other/barrevh.png [new file with mode: 0644]
icon/other/barrevk.png [new file with mode: 0644]
icon/other/barrevp.png [new file with mode: 0644]
icon/other/barrevu.png [new file with mode: 0644]
icon/other/barrevv.png [new file with mode: 0644]
os/acorn.png [new file with mode: 0644]
os/aix.png [new file with mode: 0644]
os/amigaos.png [new file with mode: 0644]
os/apple.png [new file with mode: 0644]
os/be.png [new file with mode: 0644]
os/beos.png [new file with mode: 0644]
os/bsdi.png [new file with mode: 0644]
os/cpm.png [new file with mode: 0644]
os/digital.png [new file with mode: 0644]
os/dos.png [new file with mode: 0644]
os/freebsd.png [new file with mode: 0644]
os/hp.png [new file with mode: 0644]
os/ibm.png [new file with mode: 0644]
os/irix.png [new file with mode: 0644]
os/java.png [new file with mode: 0644]
os/linux.png [new file with mode: 0644]
os/mac.png [new file with mode: 0644]
os/macos.png [new file with mode: 0644]
os/netbsd.png [new file with mode: 0644]
os/netware.png [new file with mode: 0644]
os/next.png [new file with mode: 0644]
os/openbsd.png [new file with mode: 0644]
os/osf.png [new file with mode: 0644]
os/qnx.png [new file with mode: 0644]
os/sco.png [new file with mode: 0644]
os/sun.png [new file with mode: 0644]
os/unknown.png [new file with mode: 0644]
os/vms.png [new file with mode: 0644]
os/warp.png [new file with mode: 0644]
os/webtv.png [new file with mode: 0644]
os/windows.png [new file with mode: 0644]
other/awstats_logo1.png [new file with mode: 0644]
other/awstats_logo2.png [new file with mode: 0644]
other/barrehh.png [new file with mode: 0644]
other/barrehk.png [new file with mode: 0644]
other/barrehp.png [new file with mode: 0644]
other/barrevh.png [new file with mode: 0644]
other/barrevk.png [new file with mode: 0644]
other/barrevp.png [new file with mode: 0644]
other/barrevu.png [new file with mode: 0644]
other/barrevv.png [new file with mode: 0644]
robotslist.txt [new file with mode: 0644]
tools/common2combined.pl [new file with mode: 0644]
tools/logresolvemerge.pl [new file with mode: 0644]
wwwroot/cgi-bin/awstats.model.conf
wwwroot/cgi-bin/awstats.pl
wwwroot/cgi-bin/db/browsers.pl
wwwroot/cgi-bin/db/operating_systems.pl
wwwroot/cgi-bin/db/robots.pl
wwwroot/cgi-bin/db/search_engines.pl
wwwroot/cgi-bin/lang/awstats-br.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-cn.txt
wwwroot/cgi-bin/lang/awstats-cz.txt
wwwroot/cgi-bin/lang/awstats-de.txt
wwwroot/cgi-bin/lang/awstats-dk.txt
wwwroot/cgi-bin/lang/awstats-en.txt
wwwroot/cgi-bin/lang/awstats-es.txt
wwwroot/cgi-bin/lang/awstats-fr.txt
wwwroot/cgi-bin/lang/awstats-ge.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-gr.txt
wwwroot/cgi-bin/lang/awstats-hu.txt
wwwroot/cgi-bin/lang/awstats-id.txt
wwwroot/cgi-bin/lang/awstats-it.txt
wwwroot/cgi-bin/lang/awstats-kr.txt
wwwroot/cgi-bin/lang/awstats-lv.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-nb.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-nl.txt
wwwroot/cgi-bin/lang/awstats-nn.txt
wwwroot/cgi-bin/lang/awstats-no.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-pl.txt
wwwroot/cgi-bin/lang/awstats-po.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-pt.txt
wwwroot/cgi-bin/lang/awstats-ru.txt
wwwroot/cgi-bin/lang/awstats-se.txt
wwwroot/cgi-bin/lang/awstats-sp.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-tt-de.txt
wwwroot/cgi-bin/lang/awstats-tt-en.txt
wwwroot/cgi-bin/lang/awstats-tt-es.txt
wwwroot/cgi-bin/lang/awstats-tt-fr.txt
wwwroot/cgi-bin/lang/awstats-tt-hu.txt
wwwroot/cgi-bin/lang/awstats-tt-nb.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-tt-nn.txt
wwwroot/cgi-bin/lang/awstats-tt-no.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-tt-se.txt [new file with mode: 0644]
wwwroot/cgi-bin/lang/awstats-tt-ua.txt
wwwroot/cgi-bin/lang/awstats-tw.txt
wwwroot/cgi-bin/lang/awstats-ua.txt
wwwroot/cgi-bin/logresolvemerge.pl
wwwroot/icon/browser/adobe.png [new file with mode: 0644]
wwwroot/icon/browser/amaya.png [new file with mode: 0644]
wwwroot/icon/browser/da.png [new file with mode: 0644]
wwwroot/icon/browser/dreamcast.png [new file with mode: 0644]
wwwroot/icon/browser/getright.png [new file with mode: 0644]
wwwroot/icon/browser/gozilla.png [new file with mode: 0644]
wwwroot/icon/browser/icab.png [new file with mode: 0644]
wwwroot/icon/browser/konqueror.png [new file with mode: 0644]
wwwroot/icon/browser/lynx.png [new file with mode: 0644]
wwwroot/icon/browser/mediaplayer.png [new file with mode: 0644]
wwwroot/icon/browser/msie_large.png [new file with mode: 0644]
wwwroot/icon/browser/netscape_large.png [new file with mode: 0644]
wwwroot/icon/browser/notavailable.png [new file with mode: 0644]
wwwroot/icon/browser/omniweb.png [new file with mode: 0644]
wwwroot/icon/browser/opera.png [new file with mode: 0644]
wwwroot/icon/browser/pdaphone.png [new file with mode: 0644]
wwwroot/icon/browser/staroffice.png [new file with mode: 0644]
wwwroot/icon/browser/teleport.png [new file with mode: 0644]
wwwroot/icon/browser/unknown.png [new file with mode: 0644]
wwwroot/icon/browser/webcopier.png [new file with mode: 0644]
wwwroot/icon/browser/webtv.png [new file with mode: 0644]
wwwroot/icon/browser/webzip.png [new file with mode: 0644]
wwwroot/icon/flags/Thumbs.db [new file with mode: 0644]
wwwroot/icon/flags/ba.png
wwwroot/icon/flags/mo.png [new file with mode: 0644]
wwwroot/icon/flags/sn.png
wwwroot/icon/flags/sv.png

diff --git a/COPYING.TXT b/COPYING.TXT
new file mode 100644 (file)
index 0000000..06ad23f
--- /dev/null
@@ -0,0 +1,342 @@
+                   GNU GENERAL PUBLIC LICENSE\r
+                      Version 2, June 1991\r
+\r
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.\r
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+                           Preamble\r
+\r
+  The licenses for most software are designed to take away your\r
+freedom to share and change it.  By contrast, the GNU General Public\r
+License is intended to guarantee your freedom to share and change free\r
+software--to make sure the software is free for all its users.  This\r
+General Public License applies to most of the Free Software\r
+Foundation's software and to any other program whose authors commit to\r
+using it.  (Some other Free Software Foundation software is covered by\r
+the GNU Library General Public License instead.)  You can apply it to\r
+your programs, too.\r
+\r
+  When we speak of free software, we are referring to freedom, not\r
+price.  Our General Public Licenses are designed to make sure that you\r
+have the freedom to distribute copies of free software (and charge for\r
+this service if you wish), that you receive source code or can get it\r
+if you want it, that you can change the software or use pieces of it\r
+in new free programs; and that you know you can do these things.\r
+\r
+  To protect your rights, we need to make restrictions that forbid\r
+anyone to deny you these rights or to ask you to surrender the rights.\r
+These restrictions translate to certain responsibilities for you if you\r
+distribute copies of the software, or if you modify it.\r
+\r
+  For example, if you distribute copies of such a program, whether\r
+gratis or for a fee, you must give the recipients all the rights that\r
+you have.  You must make sure that they, too, receive or can get the\r
+source code.  And you must show them these terms so they know their\r
+rights.\r
+\r
+  We protect your rights with two steps: (1) copyright the software, and\r
+(2) offer you this license which gives you legal permission to copy,\r
+distribute and/or modify the software.\r
+\r
+  Also, for each author's protection and ours, we want to make certain\r
+that everyone understands that there is no warranty for this free\r
+software.  If the software is modified by someone else and passed on, we\r
+want its recipients to know that what they have is not the original, so\r
+that any problems introduced by others will not reflect on the original\r
+authors' reputations.\r
+\r
+  Finally, any free program is threatened constantly by software\r
+patents.  We wish to avoid the danger that redistributors of a free\r
+program will individually obtain patent licenses, in effect making the\r
+program proprietary.  To prevent this, we have made it clear that any\r
+patent must be licensed for everyone's free use or not licensed at all.\r
+\r
+  The precise terms and conditions for copying, distribution and\r
+modification follow.\r
+\f\r
+                   GNU GENERAL PUBLIC LICENSE\r
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+  0. This License applies to any program or other work which contains\r
+a notice placed by the copyright holder saying it may be distributed\r
+under the terms of this General Public License.  The "Program", below,\r
+refers to any such program or work, and a "work based on the Program"\r
+means either the Program or any derivative work under copyright law:\r
+that is to say, a work containing the Program or a portion of it,\r
+either verbatim or with modifications and/or translated into another\r
+language.  (Hereinafter, translation is included without limitation in\r
+the term "modification".)  Each licensee is addressed as "you".\r
+\r
+Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope.  The act of\r
+running the Program is not restricted, and the output from the Program\r
+is covered only if its contents constitute a work based on the\r
+Program (independent of having been made by running the Program).\r
+Whether that is true depends on what the Program does.\r
+\r
+  1. You may copy and distribute verbatim copies of the Program's\r
+source code as you receive it, in any medium, provided that you\r
+conspicuously and appropriately publish on each copy an appropriate\r
+copyright notice and disclaimer of warranty; keep intact all the\r
+notices that refer to this License and to the absence of any warranty;\r
+and give any other recipients of the Program a copy of this License\r
+along with the Program.\r
+\r
+You may charge a fee for the physical act of transferring a copy, and\r
+you may at your option offer warranty protection in exchange for a fee.\r
+\r
+  2. You may modify your copy or copies of the Program or any portion\r
+of it, thus forming a work based on the Program, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+    a) You must cause the modified files to carry prominent notices\r
+    stating that you changed the files and the date of any change.\r
+\r
+    b) You must cause any work that you distribute or publish, that in\r
+    whole or in part contains or is derived from the Program or any\r
+    part thereof, to be licensed as a whole at no charge to all third\r
+    parties under the terms of this License.\r
+\r
+    c) If the modified program normally reads commands interactively\r
+    when run, you must cause it, when started running for such\r
+    interactive use in the most ordinary way, to print or display an\r
+    announcement including an appropriate copyright notice and a\r
+    notice that there is no warranty (or else, saying that you provide\r
+    a warranty) and that users may redistribute the program under\r
+    these conditions, and telling the user how to view a copy of this\r
+    License.  (Exception: if the Program itself is interactive but\r
+    does not normally print such an announcement, your work based on\r
+    the Program is not required to print an announcement.)\r
+\f\r
+These requirements apply to the modified work as a whole.  If\r
+identifiable sections of that work are not derived from the Program,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works.  But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Program, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Program.\r
+\r
+In addition, mere aggregation of another work not based on the Program\r
+with the Program (or with a work based on the Program) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+  3. You may copy and distribute the Program (or a work based on it,\r
+under Section 2) in object code or executable form under the terms of\r
+Sections 1 and 2 above provided that you also do one of the following:\r
+\r
+    a) Accompany it with the complete corresponding machine-readable\r
+    source code, which must be distributed under the terms of Sections\r
+    1 and 2 above on a medium customarily used for software interchange; or,\r
+\r
+    b) Accompany it with a written offer, valid for at least three\r
+    years, to give any third party, for a charge no more than your\r
+    cost of physically performing source distribution, a complete\r
+    machine-readable copy of the corresponding source code, to be\r
+    distributed under the terms of Sections 1 and 2 above on a medium\r
+    customarily used for software interchange; or,\r
+\r
+    c) Accompany it with the information you received as to the offer\r
+    to distribute corresponding source code.  (This alternative is\r
+    allowed only for noncommercial distribution and only if you\r
+    received the program in object code or executable form with such\r
+    an offer, in accord with Subsection b above.)\r
+\r
+The source code for a work means the preferred form of the work for\r
+making modifications to it.  For an executable work, complete source\r
+code means all the source code for all modules it contains, plus any\r
+associated interface definition files, plus the scripts used to\r
+control compilation and installation of the executable.  However, as a\r
+special exception, the source code distributed need not include\r
+anything that is normally distributed (in either source or binary\r
+form) with the major components (compiler, kernel, and so on) of the\r
+operating system on which the executable runs, unless that component\r
+itself accompanies the executable.\r
+\r
+If distribution of executable or object code is made by offering\r
+access to copy from a designated place, then offering equivalent\r
+access to copy the source code from the same place counts as\r
+distribution of the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\f\r
+  4. You may not copy, modify, sublicense, or distribute the Program\r
+except as expressly provided under this License.  Any attempt\r
+otherwise to copy, modify, sublicense or distribute the Program is\r
+void, and will automatically terminate your rights under this License.\r
+However, parties who have received copies, or rights, from you under\r
+this License will not have their licenses terminated so long as such\r
+parties remain in full compliance.\r
+\r
+  5. You are not required to accept this License, since you have not\r
+signed it.  However, nothing else grants you permission to modify or\r
+distribute the Program or its derivative works.  These actions are\r
+prohibited by law if you do not accept this License.  Therefore, by\r
+modifying or distributing the Program (or any work based on the\r
+Program), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Program or works based on it.\r
+\r
+  6. Each time you redistribute the Program (or any work based on the\r
+Program), the recipient automatically receives a license from the\r
+original licensor to copy, distribute or modify the Program subject to\r
+these terms and conditions.  You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties to\r
+this License.\r
+\r
+  7. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License.  If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Program at all.  For example, if a patent\r
+license would not permit royalty-free redistribution of the Program by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Program.\r
+\r
+If any portion of this section is held invalid or unenforceable under\r
+any particular circumstance, the balance of the section is intended to\r
+apply and the section as a whole is intended to apply in other\r
+circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system, which is\r
+implemented by public license practices.  Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\f\r
+  8. If the distribution and/or use of the Program is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Program under this License\r
+may add an explicit geographical distribution limitation excluding\r
+those countries, so that distribution is permitted only in or among\r
+countries not thus excluded.  In such case, this License incorporates\r
+the limitation as if written in the body of this License.\r
+\r
+  9. The Free Software Foundation may publish revised and/or new versions\r
+of the General Public License from time to time.  Such new versions will\r
+be similar in spirit to the present version, but may differ in detail to\r
+address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number.  If the Program\r
+specifies a version number of this License which applies to it and "any\r
+later version", you have the option of following the terms and conditions\r
+either of that version or of any later version published by the Free\r
+Software Foundation.  If the Program does not specify a version number of\r
+this License, you may choose any version ever published by the Free Software\r
+Foundation.\r
+\r
+  10. If you wish to incorporate parts of the Program into other free\r
+programs whose distribution conditions are different, write to the author\r
+to ask for permission.  For software which is copyrighted by the Free\r
+Software Foundation, write to the Free Software Foundation; we sometimes\r
+make exceptions for this.  Our decision will be guided by the two goals\r
+of preserving the free status of all derivatives of our free software and\r
+of promoting the sharing and reuse of software generally.\r
+\r
+                           NO WARRANTY\r
+\r
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\r
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\r
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\r
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\r
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\r
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\r
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\r
+REPAIR OR CORRECTION.\r
+\r
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\r
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\r
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\r
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\r
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\r
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\r
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\r
+POSSIBILITY OF SUCH DAMAGES.\r
+\r
+                    END OF TERMS AND CONDITIONS\r
+\f\r
+           How to Apply These Terms to Your New Programs\r
+\r
+  If you develop a new program, and you want it to be of the greatest\r
+possible use to the public, the best way to achieve this is to make it\r
+free software which everyone can redistribute and change under these terms.\r
+\r
+  To do so, attach the following notices to the program.  It is safest\r
+to attach them to the start of each source file to most effectively\r
+convey the exclusion of warranty; and each file should have at least\r
+the "copyright" line and a pointer to where the full notice is found.\r
+\r
+    <one line to give the program's name and a brief idea of what it does.>\r
+    Copyright (C) 19yy  <name of author>\r
+\r
+    This program is free software; you can redistribute it and/or modify\r
+    it under the terms of the GNU General Public License as published by\r
+    the Free Software Foundation; either version 2 of the License, or\r
+    (at your option) any later version.\r
+\r
+    This program is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+    GNU General Public License for more details.\r
+\r
+    You should have received a copy of the GNU General Public License\r
+    along with this program; if not, write to the Free Software\r
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+\r
+\r
+Also add information on how to contact you by electronic and paper mail.\r
+\r
+If the program is interactive, make it output a short notice like this\r
+when it starts in an interactive mode:\r
+\r
+    Gnomovision version 69, Copyright (C) 19yy name of author\r
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\r
+    This is free software, and you are welcome to redistribute it\r
+    under certain conditions; type `show c' for details.\r
+\r
+The hypothetical commands `show w' and `show c' should show the appropriate\r
+parts of the General Public License.  Of course, the commands you use may\r
+be called something other than `show w' and `show c'; they could even be\r
+mouse-clicks or menu items--whatever suits your program.\r
+\r
+You should also get your employer (if you work as a programmer) or your\r
+school, if any, to sign a "copyright disclaimer" for the program, if\r
+necessary.  Here is a sample; alter the names:\r
+\r
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\r
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.\r
+\r
+  <signature of Ty Coon>, 1 April 1989\r
+  Ty Coon, President of Vice\r
+\r
+This General Public License does not permit incorporating your program into\r
+proprietary programs.  If your program is a subroutine library, you may\r
+consider it more useful to permit linking proprietary applications with the\r
+library.  If this is what you want to do, use the GNU Library General\r
+Public License instead of this License.\r
+\r
+\r
diff --git a/INSTALL.TXT b/INSTALL.TXT
new file mode 100644 (file)
index 0000000..a2837e2
--- /dev/null
@@ -0,0 +1 @@
+Setup instructions are in README.TXT file.
\ No newline at end of file
index 07beb3973e91d9b723237b2d783efbe7667d1679..02d6830d4501bfa99d8707bcdfbc02cd294d8452 100644 (file)
@@ -4,24 +4,27 @@
 ------------------------------------
 
 Advanced Web Statistics (AWStats) is a powerfull web server logfile analyzer
-that shows you all your Web statistics including visitors, pages, hits, hours,
-search engines, keywords used to find your site, broken links, robots and
-more. It works with IIS 5.0+, Apache and other web/wap/proxy server log files.
-
-License: GNU GPL (GNU General Public License. See LICENSE file)
-Version : 3.2
-Release date: 10 December 2001
-Platforms: All (Linux, NT, SCO, BSD, Solaris and other *NIX's, BeOS, OS/2...)
-Author: Laurent Destailleur <eldy@users.sourceforge.net>
-AWStats official web site and latest version: http://awstats.sourceforge.net
+(CGI Perl script) that shows you all your Web statistics including visitors, 
+pages, hits, hours, search engines, keywords used to find your site, broken
+links, robots and more. It works with IIS 5.0+ or Apache webserver log files.
+
+License: GNU GPL (GNU General Public License. See COPYING.TXT)
+Version : 2.22k
+Release date: 10 October 2000
+Platforms: All (Linux, NT, SCO, BSD, Solaris and other *NIX's, OS/2...)
+Author: Laurent Destailleur <laurent.destailleur@wanadoo.fr>
+AWStats web site: http://perso.wanadoo.fr/l.destailleur/awstats.html
+
 I   - Features and requirements of AWStats
       I - 1) Features, what AWStats can show you
       I - 2) Requirements for using AWStats
       I - 3) Files
 II  - How to install and use AWStats
+      II - 1) With Apache server
+      II - 2) With IIS 5.0+
 III - Benchmark
-IV  - About the author, license and support
+IV  - Troubleshouting / FAQ
+V   - About the author, license and support
 
 
 
@@ -29,94 +32,192 @@ I - FEATURES AND REQUIREMENTS
 ------------------------------------
 
 I - 1) Features
-
-    A full log analysis enables AWStats to show you the following information:
-    * Number of VISITS and UNIQUE VISITORS, list of last visitors,
-    * Days of week and rush hours (pages, hits, kb for each day and hour),
-    * Domains/countries of hosts visitors (pages, hits, kb),
-    * Authenticated users,
-    * Most often pages viewed,
-       * File types,
-       * Web compression statistics (for mod_gzip),
-    * Browsers used (pages, hits, kb for each browser),
-    * OS used (pages, hits, kb for each OS),
-    * VISITS OF ROBOTS,
-    * SEARCH ENGINES, KEYPHRASES or KEYWORDS used to find your site,
-    * HTTP errors (Page not found, ...).
-
-    It supports the following features as well:
-       * Can analyze all log formats.
-    * Works from command line or as a CGI,
-    * Update of statistics can be made on demand from the web interface and
-      not only from your scheduler,
-       * Unlimited log file size, support splited log files,
-       * Reverse DNS lookup during analysis,
-    * A lot of options/filters can be defined,
-    * Multi-named web sites supported (virtual servers),
-       * Cross Site Scripting Attacks protection,
-    * Several languages. English, French, Dutch, Spanish, Italian, German,
-      Polish, Greek, Czech, Portuguese, Chinese, Korean...
-    * No need of extra perl libraries,
-       * Look and colors can match your site design,
-    * Help on how AWStats work, tooltips on HTML reporting page,
-    * Easy to install, easy to use (No compilation, no extern databases),
-    * Free (GNU GPL) and distributed with sources (perl script).
-
-
+       
+       A full log analysis enables AWStats to show you the following information:
+       * number of VISITS and UNIQUE VISITORS,
+       * most often pages viewed
+       * ENTRY PAGES
+       * domains/countries of hosts visitors (pages,hits,kb),
+       * rush hours (pages,hits,kb for each hour),
+       * browsers used (pages,hits,kb for each browsed),
+       * OS used (pages,hits,kb for each OS),
+       * VISITS OF ROBOTS,
+       * SEARCH ENGINES and KEYWORDS used to find your site,
+       * HTTP errors,
+
+       It supports the following features as well:
+       * Real-time analysis
+       * Easy to install, easy to use (No compilation, no extern databases, only one .pl file),
+       * Tooltips and explanations for each informations pointed by mouse,
+       * Multi-named web sites supported,
+       * Informations are since the start of your web site and/or month by month,
+       * 4 languages: English, French, Dutch (Thanks to Christtian Langeveld) and Spanish (Thanks to Rodrigo Villarreal) 
+       * Colored graphics,
+       * Distributed with sources (perl script)
+       
 I - 2) Requirements
-
-    To use AWStats CGI script, you need the following requirements:
-    * Your Web server must be able to log web access in "NCSA combined logfile
-      format" like Apache or in "Extended W3C logfile format" like IIS 5.0+
-    * You need to have read (better if read/write) access to your logfile
-      server. If you can have only a read access, for example with IIS that
-      doesn't allow write access on its lofgile, AWStats will automatically
-      work differently, but slower than with read/write access).
-    * To run awstats, from command line, your operating system must be able to
-      run perl scripts (.pl files). To run awstats as a CGI (for real-time
-      statistics), your web server must also be able to run such scripts.
-      If not, you can solve this by downloading last Perl version at:
-      http://www.activestate.com/ActivePerl/ (Win32)
-      http://www.perl.com/pub/language/info/software.html (Unix/Linux/Other)
-
-
+       
+       To use AWStats CGI script, you need the following requirements:
+       * Your Web server must be able to log web access in "Combined logfile
+         format" like Apache or in "Extended W3C logfile format" like IIS 5.0+
+       * Your server must be able to run perl script (.pl files).
+         If not, you can solve this by downloading last Perl version at:
+         http://www.activestate.com/ActivePerl/ (Win32)
+         http://www.perl.com/pub/language/info/software.html (Unix/Linux/Other)
+       * You need to have read (better if read/write) access to your logfile
+         server. If you can only have a read access, for example with IIS that
+         doesn't allow write access on its lofgile, AWStats will automatically
+         work differently, but slower than with read/write access).
+       
 I - 3) Files
-
-    The distribution of AWStats package includes the following files:
-    README.TXT                           This file
-       docs/LICENSE                         GNU General Public Licence
-       docs/*                               AWStats documentation (setup/use/...)
-    wwwroot/cgi-bin/awstats.pl           The main command line/CGI perl script
-    wwwroot/cgi-bin/awstats.model.conf   An example of AWStats configure file
-       wwwroot/cgi-bin/db                   Directory with awstats reference info
-       wwwroot/cgi-bin/lang                 Directory with languages files
-    wwwroot/icon/browser                 Directory with browsers icons
-    wwwroot/icon/clock                   Directory with clocks icons
-    wwwroot/icon/cpu                     Directory with cpu icons
-    wwwroot/icon/flags                   Directory with country flags icons
-    wwwroot/icon/os                      Directory with os icons
-    wwwroot/icon/other                   Directory with all others icons
-
+       
+       The distribution of AWStats include the following files:
+       awstats.pl              The main CGI/command line perl script
+       README.TXT              This file
+       browser                 Directory with browsers icons
+       clock                   Directory with clocks icons
+       cpu                             Directory with cpu icons
+       flags                   Directory with country flags icons
+       os                              Directory with os icons
+       other                   Directory with all others icons
 
 
 II - HOW TO INSTALL AND USE AWSTATS
 -----------------------------------
 
-The documentation available as of the date of this release is included, in
-HTML format, in the docs/ directory.
-You can find a most up-to-date documentation on:
-http://awstats.sourceforge.net
+II - 1) With Apache Server
+
+       * Configure your apache web server to have "combined" log format.
+         You can do so with the following directive:
+         CustomLog /yourlogpath/yourlogfile combined
+         (See your apache manual for more informations).
+         This is an example of what you should get then in your log file:
+         62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 "http://www.from.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
+       
+       * Put awstats.pl file in your cgi-bin directory (or other cgi directory).
+         This directory must be writable by default server user (nobody for Apache
+         with Unix/Linux).
+       
+       * In awstats.pl file, edit the first line "#!/usr/local/bin/perl" to
+         reflect the path were your perl interpreter is installed (Ie: It might
+         be "#!/usr/bin/perl" instead).
+       
+       * In awstats.pl file, modify line "$LogFile=" with full path of your web
+         server log file.
+       
+       * In awstats.pl file, the line "$LogFormat=" must have the value "1" (it
+         means "apache combined log format").
+       
+       * Move all icons directories into a directory readable by your web server
+         (and change "$DirIcons=" value in awstats.pl to reflect this directory).
+       
+       * Before using AWStats from your browser, launch awstats.pl from the
+         command line (the first time, process may be long):
+       > awstats.pl www.myserver.com
+         where www.myserver.com is the URL you use to access your web site.
+       
+         This is to see if AWStats setup is good and because, the first time,
+         the AWStats process is slow (one second for each 570 lines of your
+         logfile with Pentium 300, plus DNS resolution time for each IP address
+         in your logfile).
+         The result, an HTML code page on your screen, means you can now run
+         AWStats from your browser. For example with this URL :
+         htpp://www.myserver.com/cgi-bin/awstats.pl
+
+       * Add something in your crontab (Unix/Linux), or something else, to launch
+         at least once a day, the following command (more often if you have a lot
+         of visitors):
+       > awstats.pl www.myserver.com
+         where www.myserver.com is the URL name you use to access your web site.
+       
+         This is usefull to keep good performances.
+       
+       
+II - 2) With IIS Server
+
+       * Configure IIS to have "Extended W3C log format" with following fields:
+         date time c-ip c-username cs-method cs-uri-sterm cs-status cs-bytes cs-version cs(User-Agent) cs(Referer)
+         This is an example of what you should get:
+         2000-07-19 14:14:14 62.161.78.73 - GET / 200 1234 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.from.com/from.htm
+       
+       * Put awstats.pl file in your cgi-bin directory (or other cgi directory).
+         This directory must be writable by default server user (nobody for Apache
+         with Unix/Linux).
+       
+       * In awstats.pl file, modify line "$LogFile=" with full path of your web
+         server log file.
+       
+       * In awstats.pl file, the line "$LogFormat=" must have the value "2" (it
+         means IIS log format).
+       
+       * Move all icons directories into a readable directory for your web server
+         (And change "$DirIcons=" value in awstats.pl file to reflect this)
+       
+       * Before using AWStats from you're browser, launch awstats.pl from the
+         command line:
+       > awstats.pl www.myserver.com
+         where www.myserver.com is the URL name you use to access your web site.
+       
+         This is to see if AWStats setup is good and because, the first time,
+         the AWStats process is slow (one second for each 570 lines of your
+         logfile with Pentium 300, plus DNS resolution time for each IP address
+         in your logfile).
+         The result, an HTML code page on your screen, means you can now run
+         AWStats from your browser. For example with this URL :
+         htpp://www.myserver.com/cgi-bin/awstats.pl
+
+       * Add something in a task scheduler, or something else, to launch at least
+         once a day, the following command (more often if you have a lot of
+         visitors):
+       > awstats.pl www.myserver.com
+         where www.myserver.com is the URL name you use to access your web site.
+       
+         This is necessary to keep good performances.
+       
+         !!! Warning, with IIS, Windows doesn't let AWStats to purge log file
+         after processing it (AWStats do this to analyze only new logs and
+         increase its speed), so performance won't be as good as with Apache
+         server.
+         It's very important you do this yourself (or let MSII doing it), if you
+         don't want to have very bad performances.
+         The more often you clean your log file, the more faster AWStats will be
+         (See benchmark to known what you can hope).
 
 
 III - BENCHMARK
 -----------------------------------
 
-Tests and results are available in AWStats documentation, in docs/ directory.
+In version 2.21, AWStats processes 570 lines by seconds (Pentium 300Mhz).
+If we consider 9 hits by page and 4 pages for one visits, it means that
+AWStats is able to analyze 7 visits in one second.
+If your site has 40 visits each hour (30000 visits a month), you should launch
+AWStats each hour to be sure to have a processing time less than 20/7 = 2.8
+seconds (with Pentium 300Mhz). In fact, process time is higher because of DNS
+lookup that is time consuming. DNS lookup speed depends on your system,
+network and Internet but not on the log analyzer you use. For this reason,
+DNS lookup is disabled in all log analyzer benchmarks, but you must keep in
+mind that it's the most time consuming part of the process.
+
+
+IV - TROUBLESHOUTING / FAQ
+-----------------------------------
+
+I'M USING WEBANALYZER AND DOESN'T HAVE THE SAME RESULT AS WITH AWSTATS. WHY ?
+> There is some difference between way to analyze logfile, so results are
+> different. For example, some dynamic pages generated by CGI are not
+> understood by WebAnalyzer as pages if CGI prog has not a .cgi extension, so
+> they are not included in WebAnalyzer statistics. Another difference is that
+> WebAnalyzer is not able to detect robots and think its a human visitor.
+> AWStats doesn't count this hits as a visitor but make a separated report for
+> all those robots. There is a lot of other differences I can't list because I
+> don't know all Webanalyzer specifications. I try to keep AWStats way of
+> working understandable and free, so if you have any questions about AWStats
+> process, just ask me.
 
 
-IV - ABOUT THE AUTHOR, LICENSE AND SUPPORT
+V - ABOUT THE AUTHOR, LICENSE AND SUPPORT
 -----------------------------------------
-Copyright (C) 2000-2001 - Laurent Destailleur - eldy@users.sourceforge.net
+Copyright (C) 2000  Laurent Destailleur
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
@@ -130,3 +231,10 @@ GNU General Public License for more details, in COPYING.TXT file.
 If you have not received a copy of this file along with this program, write to
 the Free Software Foundation, Inc.,
 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+
+You can download latest version at the following URL:
+http://perso.wanadoo.fr/l.destailleur/awstats.html
+
+You can send or ask help to:
+laurent.destailleur@wanadoo.fr
diff --git a/awstats.model.conf b/awstats.model.conf
new file mode 100644 (file)
index 0000000..c414393
--- /dev/null
@@ -0,0 +1,179 @@
+# AWStats configure file
+#------------------------------------------------------------------------
+# Copy this file into awstats.www.myserver.mydomain.conf or awstats.conf
+# and edit this new file to setup AWStats.
+# If you don't understand what is a parameter, keep default value.
+#------------------------------------------------------------------------
+
+
+# Main setup section (Required to make AWStats working)
+#------------------------------------------------------------------------
+
+# Web server logfile to analyze, with full path or relative path from
+# awstats.pl directory.
+# Example: "../logs/mycombinedlog.log"
+# Example: "C:/WINNT/system32/LogFiles/W3SVC1/exyymm.log"
+# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex"
+#
+LogFile="/var/log/httpd/mylog.log"
+
+# Put here your log format (it depends on your web server).
+# Possible values:
+# 1 - Apache combined log format
+# 2 - IIS extended W3C log format
+#
+LogFormat=1
+
+# Set this to a directory where you want AWStats to save its working files.
+# Need write permissions by web server.
+# Example: "../data", "C:/HISTORYDIR", ...
+# Default: "." means same directory as awstats.pl
+#
+DirHistory="."
+
+# Relative or absolute web URL of your awstats.pl directory.
+# Usefull only when AWStats is used from command line.
+# Default: "/cgi-bin" means awstats.pl is in "yourwwwroot/cgi-bin"
+#
+DirCgi="/cgi-bin"
+
+# Relative or absolute web URL of all icons subdirectories.
+# Default: "/icon" means you must copy icons directories in "yourwwwroot/icon"
+#
+DirIcons="/icon"
+
+# If host names are already resolved in your logfile, set this to 0 will
+# increase performances.
+# Possible values: 1 or 0
+# Default: 1
+# 
+DNSLookup=1
+
+# If AWStats can purge log after processing it, it will do so. You can however
+# keep an archive file (saved in DirHistory) of all processed log records by
+# setting this to 1 (For example if you want to use another log analyzer).
+# Possible values: 1 or 0
+# Default: 0
+#
+ArchiveLogRecords=0
+
+
+
+# Optionnal setup section (Not required but increase AWStats features)
+#------------------------------------------------------------------------
+
+# Set your primary language.
+# Possible value:
+# 0=English, 1=French, 2=Dutch, 3=Spanish, 4=Italian, 5=German
+# 6=Polish
+# Default: 0
+#
+Lang=0
+
+# Index page name for your web server.
+# Example: "default.htm"
+# Default: "index.html"
+#
+DefaultFile="index.html"
+
+# Put here all possible domain names, addresses or virtual host aliases
+# someone can use to access your site. Try to keep only the minimum number of
+# possible names/adresses to have the best performances.
+# Use space between each value and put a backslash before each dot.
+# Example: "www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+#
+HostAliases="www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+
+# Do not include access to URLs that match following entries.
+# If you don't want to include users homepage in your stats, add "/~".
+# You can also, if you want, add list of not important frame pages (like 
+# menus, etc...) to exclude them from statistics.
+# Use space between each value and put a backslash before each dot.
+# Do not remove default values. 
+# Example: "\.css \.js \.class robots\.txt badpage\.html /~"
+# Default: "\.css \.js \.class robots\.txt"
+#
+SkipFiles="\.css \.js \.class robots\.txt"
+
+# Do not include access from clients that match following IP address
+# You can also put partial host names but this requires that reverse
+# DNS lookup is already done in your server log file.
+# Use space between each value and put a backslash before each dot.
+# Example: "55\.55\.55\.55 222\.222\.222\.222 abcxyz"
+# Default: ""
+#
+SkipHosts=""
+
+# AWStats can detect setup problems or show you important informations to have
+# a better use. Keep this to 1, except if AWStats says you can change it.
+# Possible values: 1 or 0
+# Default: 1
+WarningMessages=1
+
+# Each URL shown in stats page are links you can click.
+# Possible values: 1 or 0
+# Default: 1
+#
+ShowLinksOnUrl=1
+
+# Flags with link to other languages translation are visible.
+# Possible values: 1 or 0
+# Default: 1
+#
+ShowFlagLinks=1
+
+# You can put here HTML code that will be added at the end of AWStats reports.
+# Great to add advert ban.
+# Default: ""
+#
+HTMLEndSection=""
+
+# Value of maximum bar width/heigth for horizontal/vertical graphics bar
+# Default: 260/220
+#
+BarWidth   = 260
+BarHeight  = 220
+# This value can be used to choose maximum number of lines shown for each 
+# particular reporting.
+#
+# Stats by hosts
+MaxNbOfHostsShown = 25
+MinHitHost    = 1
+# Stats by pages
+MaxNbOfPageShown = 25
+MinHitFile    = 1
+# Stats by referers
+MaxNbOfRefererShown = 25
+MinHitRefer   = 1
+# Stats for keywords
+MaxNbOfKeywordsShown = 25
+MinHitKeyword  = 1
+# Stats by robots
+MaxNbOfRobotShown = 25
+MinHitRobot   = 1
+
+# You can set this to use your own logo.
+# Logo file must be in $DirIcons/other directory
+# Default: "awstats_logo1.png"
+#
+Logo="awstats_logo1.png"
+
+# Colors used on AWStats report page.
+# Example: color_name="RRGGBB" # RRGGBB is RedGreenBlue components in Hex
+#
+color_Background="FFFFFF"              # Background color for main page (Default = "FFFFFF")
+color_TableBorder="000000"             # Table border color (Default = "000000")
+color_TableBG="DDDDBB"                 # Background color for table (Default = "DDDDBB")
+color_TableTitle="FFFFFF"              # Table title font color (Default = "FFFFFF")
+color_TableBGTitle="666666"            # Background color for table title (Default = "666666")
+color_TableRowTitle="FFFFFF"   # Table row title font color (Default = "FFFFFF")
+color_TableBGRowTitle="BBBBBB" # Background color for row title (Default = "BBBBBB")
+color_link="4000FF"                            # Color of HTML links (Default = "4000FF")
+color_v="F3F300"                               # Background color for number of visites (Default = "F3F300")
+color_w="FF9933"                               # Background color for number of unique visitors (Default = "FF9933")
+color_p="4477DD"                               # Background color for number of pages (Default = "4477DD")
+color_h="66F0FF"                               # Background color for number of hits (Default = "66F0FF")
+color_k="339944"                               # Background color for number of bytes (Default = "339944")
+color_s="8888DD"                               # Background color for number of search (Default = "8888DD")
+
diff --git a/awstats.pl b/awstats.pl
new file mode 100644 (file)
index 0000000..445f52b
--- /dev/null
@@ -0,0 +1,2236 @@
+#!/usr/local/bin/perl
+#-Description-------------------------------------------
+# Free realtime web server logfile analyzer (in Perl) working as a CGI to show
+# advanced web statistics. For better performances, you should use this script
+# at least once a day (from a scheduler for example).
+# See README.TXT file for setup and benchmark informations
+# See COPYING.TXT file about AWStats GNU General Public License
+#-------------------------------------------------------
+
+#-------------------------------------------------------
+# Setup/Configure section
+#-------------------------------------------------------
+# Warning: If you're under Linux/Unix, don't forget to change first line of this file with path of your perl binary.
+# Warning: With IIS, if your log filename is different each month or day, launch awstats just before the end of month or day.
+#          If you forget it, you will also forget statistics for this month or day.
+$LogFile    = "/var/log/httpd/mylog.log";      # Web server logfile to analyze, with full path (ie with IIS: "C:/WINNT/system32/LogFiles/W3SVC1/exyymm.log")
+$LogFormat  = 1;                       # 1 = Apache combined log format, 2 = IIS extended W3C log format
+$DirIcons   = "/icons";                # Depending on web server, add relative or absolute web URL of all icons subdirectories (Default = "/icons" means you must copy icons directories in "yourwwwroot/icons")
+@HostAliases= ("www.myserver.com","127.0.0.1","x.y.z.w");      # Put here all possible domain names, addresses or virtual hosts someone can use to access your site
+$DefaultFile= "index.html";    # Default page name for your Web server (Default = "index.html")
+$ArchiveLogRecords = 0;                # If AWStats can purge log after processing it, it will do so. You can keep an archive file of processed log records by setting this to 1 (Default = 0)
+$Lang          = 0;                    # Default language: 0 = English, 1 = French, 2 = Dutch, 3 = Spanish (Default = 0)
+$WarningMessages=1;                    # 1 = Show message informations when warning occurs, 0 = Skip message information for warning (Default = 1)
+$Barwidth   = 260;                     # Bar width in pixel, for horizontal graphics bar (Default = 260)
+$Barheight  = 220;                     # Bar height in pixel, for vertical graphics bar (Default = 220)
+$SortDir    = -1;                      # -1 = Sort order from most to less, 1 = reverse order (Default = -1)
+$ShowLinksOnUrl= 1;                    # 1 = Each URL shown in stats are links you can click. Not available for pages generated from command line (Default = 1)
+$VisitTimeOut  = 10000;                # Laps of time to consider a page load as a new visit. 10000 = one hour (Default = 10000)
+$DNSLookup     = 1;                    # 1 = Show name instead of IPAddress, 0 is faster (Default = 1)
+$FullHostName  = 1;                    # 1 = Use name.domaine.zone to refer host clients, 0 = all hosts in same domaine.zone are one host (Default = 1)
+$MaxLengthOfURL= 70;           # Maximum length of URL shown on stats page. This affects only URL visible text, link still work (Default = 70)
+$SponsorLinkVisible = 0;       # 1 = Link to AWStats sponsor, at the bottom, is visible (Default = 0)
+$BenchMark=0;                          # Set this to 1 to get some benchmark informations
+# Stats by hosts
+$MaxNbOfHostsShown = 25;       #
+$MinHitHost    = 1;                    #
+# Stats by pages
+$MaxNbOfPageShown = 25;                #
+$MinHitFile    = 1;                    #
+# Stats by referers
+$MaxNbOfRefererShown = 25;     #
+$MinHitRefer   = 1;                    #
+# Keywords
+$MaxNbOfKeywordsShown = 20;    #
+$MinHitKeyword  = 1;           #
+# Stats by robots
+$MaxNbOfRobotShown = 25;       #
+$MinHitRobot   = 1;                    #
+# Icons and colors
+$Logo="awstats_logo1.png";                     # You can put your own logo, must be in awstats "other" directory (Default = "awstats_logo1.png")
+$color_Background="#FFFFFF";           # Background color for main page (Default = #FFFFFF)
+$color_TableBorder="#000000";          # Table border color (Default = #000000)
+$color_TableBG="#DDDDBB";                      # Background color for table (Default = #DDDDBB)
+$color_TableTitle="#FFFFFF";           # Table title font color (Default = #FFFFFF)
+$color_TableBGTitle="#666666";         # Background color for table title (Default = #666666)
+$color_TableRowTitle="#FFFFFF";                # Table row title font color (Default = #FFFFFF)
+$color_TableBGRowTitle="#BBBBBB";      # Background color for row title (Default = #BBBBBB)
+$color_link="#4000FF";                         # Color of HTML links (Default = #4000FF)
+$color_v="#F3F300";                                    # Background color for number of visites (Default = #F3F300)
+$color_w="#FF9933";                                    # Background color for number of unique visitors (Default = #FF9933)
+$color_p="#4477DD";                                    # Background color for number of pages (Default = #4477DD)
+$color_h="#66F0FF";                                    # Background color for number of hits (Default = #66F0FF)
+$color_k="#339944";                                    # Background color for number of bytes (Default = #339944)
+$color_s="#8888DD";                                    # Background color for number of search (Default = #8888DD)
+$BarImageVertical_v   = "barrevv.png";
+$BarImageHorizontal_v = "barrehv.png";
+$BarImageVertical_u   = "barrevu.png";
+$BarImageHorizontal_u = "barrehu.png";
+$BarImageVertical_p   = "barrevp.png";
+$BarImageHorizontal_p = "barrehp.png";
+$BarImageVertical_h   = "barrevh.png";
+$BarImageHorizontal_h = "barrehh.png";
+$BarImageVertical_k   = "barrevk.png";
+$BarImageHorizontal_k = "barrehk.png";
+#----- End of Setup/Configure section
+
+
+#-------------------------------------------------------
+# Defines
+#-------------------------------------------------------
+$VERSION="2.22k";
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//; $PROG =~ s/\.pl$//; }
+else {
+       $PROG=$0; $PROG =~ s/.*\\//; $PROG =~ s/.*\///; $DIR=$0; $DIR =~ s/$PROG//; $PROG =~ s/\.pl$//;
+       $ShowLinksOnUrl=0;
+       }
+$QueryString = $ENV{"QUERY_STRING"};
+if ($QueryString =~ /lang=0/) { $Lang=0; }
+if ($QueryString =~ /lang=1/) { $Lang=1; }
+if ($QueryString =~ /lang=2/) { $Lang=2; }
+if ($QueryString =~ /lang=3/) { $Lang=3; }
+
+# Do not include access from clients that match following IP address
+@SkipHosts= ("x.y.z.w");
+
+# Do not include access to URLs that match following entries
+@SkipFiles=    ("\\.css","\\.js","\\.class","robots\\.txt",
+                       # If you don't want to include users homepage in your stats, uncomment the following line
+                       # "/~"
+                       # You can also, if you want, add list of not important frames page (like menus, etc...) to exclude them from statistics.
+                       );
+
+# URL with such end signature are not HTML pages
+@NotPageList= (
+                       "\\.gif","\\.jpg","\\.png","\\.bmp",
+                       "\\.zip","\\.arj","\\.gz","\\.z",
+                       "\\.pdf","\\.doc","\\.ppt",
+                       "\\.mp3","\\.wma"
+                       );
+
+# Those addresses are shown with those lib (First column is full relative URL, Second column is text to show instead of URL)
+%Aliases    = (
+                       "/",                                    "<b>HOME PAGE</b>",
+                       "/cgi-bin/awstats.pl",                                  "<b>AWStats stats page</b>",
+                       "/cgi-bin/awstats/awstats.pl",                  "<b>AWStats stats page</b>",
+                       # Put here HTML text you want to see in links instead of URL text.
+                       "/cgi-bin/htsearchlaunch",                              "<b>Recherche sur le site</b>",
+                       "/cgi-bin/awmess/SendMess",                     "<b>Envoi de mails-formulaire via le Web</b>",
+                       "/cgi-bin/awmess/GetMess",                              "<b>Lecture de mails-formulaire via le Web</b>"
+                       );
+
+# ---------- Search URL --------------------
+@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cou=","dd=","domain=","dt=","dw=","geo=","hc=","height=","hl=","hs=","kl=","lang=","loc=","lr=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=");
+# Never put the following exclusion ("Claus=","kw=","keyword=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=") because they are strings that contain keywords we're looking for.
+# yahoo.com      p=
+# altavista.com  q=
+# google.com     q=
+# eureka.com     q=
+# lycos.com      query=
+# hotbot.com     MT=
+# msn.com        MT=
+# infoseek.com   qt=
+# webcrawler searchText=
+# excite         search=
+# netscape.com   search=
+# mamma.com      query=
+# alltheweb.com  query=
+# northernlight.com qr=
+
+
+# ---------- HTTP Code with tooltip --------
+%httpcode = (
+"201", "Partial Content", "202", "Request recorded, will be executed later", "204", "Request executed", "206", "Partial Content",
+"301", "Moved Permanently", "302", "Found",
+"400", "Bad Request", "401", "Unauthorized", "403", "Forbidden", "404", "Not Found", "408", "Request Timeout",
+"500", "Internal Error", "501", "Not implemented", "502", "Received bad response from real server", "503", "Server busy", "504", "Gateway Time-Out", "505", "HTTP version not supported",
+
+"200", "OK", "304", "Not Modified"     # 200 and 304 are not errors
+);
+
+%monthlib =  ( "01","Jan","02","Feb","03","Mar","04","Apr","05","May","06","Jun","07","Jul","08","Aug","09","Sep","10","Oct","11","Nov","12","Dec" );
+%monthnum =  ( "Jan","01","Feb","02","Mar","03","Apr","04","May","05","Jun","06","Jul","07","Aug","08","Sep","09","Oct","10","Nov","11","Dec","12" );
+
+# ---------- Language translation messages --------
+$message[0][0]="Unknown";                                              $message[0][1]="Inconnus";                                                              $message[0][2]="Onbekend";                                                                                                                                                              $message[0][3]="Desconocido";
+$message[1][0]="Unknown (unresolved ip)";              $message[1][1]="Inconnu (IP non résolue)";                              $message[1][2]="Onbekend (Onbekend ip)";                                                                                                                                                $message[1][3]="Dirección IP desconocida";
+$message[2][0]="Other visitors";                               $message[2][1]="Autres visiteurs";                                              $message[2][2]="Andere bezoekers";                                                                                                                                                                                                                                                                                                              $message[2][3]="Otros visitantes";
+$message[3][0]="View details";                                 $message[3][1]="Voir détails";                                                  $message[3][2]="Bekijk details";                                                                                                                                                                                                                                                                                                                $message[3][3]="Vea detalles";
+$message[4][0]="Day";                                                  $message[4][1]="Jour";                                                                  $message[4][2]="Dag";                                                                                                                                                                                                                                                                                                                                   $message[4][3]="Día";
+$message[5][0]="Month";                                                        $message[5][1]="Mois";                                                                  $message[5][2]="Maand";                                                                                                                                                                                                                                                                                                                                 $message[5][3]="Mes";
+$message[6][0]="Year";                                                 $message[6][1]="Année";                                                                 $message[6][2]="Jaar";                                                                                                                                                                                                                                                                                                                                  $message[6][3]="Año";
+$message[7][0]="Statistics of";                                        $message[7][1]="Statistiques du site";                                  $message[7][2]="Statistieken van";                                                                                                                                                                                                                                                                                                              $message[7][3]="Estadísticas del sitio";
+$message[8][0]="First visit";                                  $message[8][1]="Première visite";                                               $message[8][2]="Eerste bezoek";                                                                                                                                                                                                                                                                                                                 $message[8][3]="Primera visita";
+$message[9][0]="Last visit";                                   $message[9][1]="Dernière visite";                                               $message[9][2]="Laatste bezoek";                                                                                                                                                                                                                                                                                                                $message[9][3]="Última visita";
+$message[10][0]="Number of visits";                            $message[10][1]="Nbre visites";                                                 $message[10][2]="Aantal boezoeken";                                                                                                                                                                                                                                                                                                             $message[10][3]="Número de visitas";
+$message[11][0]="Unique visitors";                     $message[11][1]="Nbre visiteurs différents";                    $message[11][2]="Unieke bezoekers";                                                                                                                                                                                                                                                                                                             $message[11][3]="No. de visitantes distintos";
+$message[12][0]="visit";                                               $message[12][1]="visite";                                                               $message[12][2]="bezoek";                                                                                                                                                                                                                                                                                                                               $message[12][3]="visita";
+$message[13][0]="Keyword";                                             $message[13][1]="Mot clé";                                                              $message[13][2]="Trefwoord";                                                                                                                                                                                                                                                                                                                    $message[13][3]="Palabra clave (keyword)";
+$message[14][0]="Search";                                              $message[14][1]="Recherche";                                                    $message[14][2]="Zoek";                                                                                                                                                                                                                                                                                                                                 $message[14][3]="Búsqueda";
+$message[15][0]="Percent";                                             $message[15][1]="Pourcentage";                                                  $message[15][2]="Procent";                                                                                                                                                                                                                                                                                                                              $message[15][3]="Porciento";
+$message[16][0]="Traffic Summary";                             $message[16][1]="Résumé";                                                               $message[16][2]="Opsomming";                                                                                                                                                                                                                                                                                                                    $message[16][3]="Resumen de tráfico";
+$message[17][0]="Domains/Countries";                   $message[17][1]="Domaines/Pays";                                                $message[17][2]="Domeinen/Landen";                                                                                                                                                                                                                                                                                                              $message[17][3]="Dominios/Países";
+$message[18][0]="Visitors";                                            $message[18][1]="Visiteurs";                                                    $message[18][2]="Bezoekers";                                                                                                                                                                                                                                                                                                                    $message[18][3]="Visitantes";
+$message[19][0]="Pages/URL";                                   $message[19][1]="Pages/URL";                                                    $message[19][2]="Pagina's/URL";                                                                                                                                                                                                                                                                                                                 $message[19][3]="Páginas/URLs";
+$message[20][0]="Hours";                                               $message[20][1]="Heures";                                                               $message[20][2]="Uren";                                                                                                                                                                                                                                                                                                                                 $message[20][3]="Horas";
+$message[21][0]="Browsers";                                            $message[21][1]="Navigateurs";                                                  $message[21][2]="Browsers";                                                                                                                                                                                                                                                                                                                             $message[21][3]="Navegadores";
+$message[22][0]="HTTP Errors";                                 $message[22][1]="Erreurs HTTP";                                                 $message[22][2]="HTTP Foutmeldingen";                                                                                                                                                                                                                                                                                                   $message[22][3]="Errores de protocolo HTTP";
+$message[23][0]="Referrers";                                   $message[23][1]="Origine/Referrer";                                             $message[23][2]="Verwijzing";                                                                                                                                                                                                                                                                                                                   $message[23][3]="Referencia de origen";
+$message[24][0]="Search&nbsp;Keywords";                        $message[24][1]="Mots&nbsp;clés&nbsp;de&nbsp;recherche";        $message[24][2]="Zoek&nbsp;trefwoorden";                                                                                                                                                                                                                                                                                    $message[24][3]="Palabra&nbsp;clave&nbsp;de&nbsp;búsqueda";
+$message[25][0]="Visitors domains/countries";  $message[25][1]="Domaines/pays visiteurs";                                      $message[25][2]="Bezoekers domeinen/landen";                                                                                                                                                                                                                                                                        $message[25][3]="Dominios/País de visitantes";
+$message[26][0]="hosts";                                               $message[26][1]="des hôtes";                                                            $message[26][2]="hosts";                                                                                                                                                                                                                                                                                                                        $message[26][3]="servidor";
+$message[27][0]="pages";                                               $message[27][1]="des pages";                                                            $message[27][2]="pagina's";                                                                                                                                                                                                                                                                                                                     $message[27][3]="páginas";
+$message[28][0]="different pages";                             $message[28][1]="pages différentes";                                            $message[28][2]="verschillende pagina's";                                                                                                                                                                                                                                                                                       $message[28][3]="páginas diferentes";
+$message[29][0]="Access";                                              $message[29][1]="Accès";                                                                        $message[29][2]="Toegang";                                                                                                                                                                                                                                                                                                                      $message[29][3]="Acceso";
+$message[30][0]="Other words";                                 $message[30][1]="Autres mots";                                                          $message[30][2]="Andere woorden";                                                                                                                                                                                                                                                                                                       $message[30][3]="Otras palabras";
+$message[31][0]="Used browsers";                               $message[31][1]="Navigateurs utilisés";                                         $message[31][2]="Gebruikte browsers";                                                                                                                                                                                                                                                                                           $message[31][3]="Navegadores utilizados";       
+$message[32][0]="HTTP Error codes";                            $message[32][1]="Codes Erreurs HTTP";                                           $message[32][2]="HTTP foutmelding codes";                                                                                                                                                                                                                                                                                       $message[32][3]="Códigos de Errores de Protocolo HTPP";
+$message[33][0]="Netscape versions<br><img src=\"$DirIcons/browser/netscape.png\">";                   $message[33][1]="Versions de Netscape<br><img src=\"$DirIcons/browser/netscape.png\">";                 $message[33][2]="Netscape versies<br><img src=\"$DirIcons/browser/netscape.png\">";                             $message[33][3]="Versiones de Netscape<br><img src=\"$DirIcons/browser/netscape.png\">";
+$message[34][0]="MS Internet Explorer versions<br><img src=\"$DirIcons/browser/msie.png\">";   $message[34][1]="Versions de MS Internet Explorer<br><img src=\"$DirIcons/browser/msie.png\">"; $message[34][2]="MS Internet Explorer versies<br><img src=\"$DirIcons/browser/msie.png\">";             $message[34][3]="Versiones de MS Internet Explorer<br><img src=\"$DirIcons/browser/msie.png\">";
+$message[35][0]="Used OS";                                                                                                                                             $message[35][1]="Systèmes d'exploitation utilisés";                                                                                             $message[35][2]="Gebruikt OS";                                                                                                                                  $message[35][3]="Sistemas Operativos utilizados";
+$message[36][0]="Connect to site from";                                                                                                                        $message[36][1]="Connexions au site par";                                                                                                               $message[36][2]="Verbinding naar site vanaf";                                                                                                   $message[36][3]="Enlazado al sitio desde";
+$message[37][0]="Origin";                                                                                                                                              $message[37][1]="Origine de la connexion";                                                                                                              $message[37][2]="Herkomst";                                                                                                                                             $message[37][3]="Origen de enlace";
+$message[38][0]="Direct address / Bookmarks";                                                                                                  $message[38][1]="Adresse directe / Bookmarks";                                                                                                  $message[38][2]="Direkt adres / Bookmarks";                                                                                                             $message[38][3]="Dirección directa / Favoritos";
+$message[39][0]="Link from a Newsgroup";                                                                                                               $message[39][1]="Lien depuis un Newsgroup";                                                                                                             $message[39][2]="Link vanuit een nieuwsgroep";                                                                                                  $message[39][3]="Enlace desde Newsgroup";
+$message[40][0]="Link from an Internet Search Engine";                                                                                 $message[40][1]="Lien depuis un moteur de recherche Internet";                                                                  $message[40][2]="Link vanuit een Internet Zoek Machine";                                                                                $message[40][3]="Enlace desde algún motor de búsqueda";
+$message[41][0]="Link from an external page (other web sites except search engines)";                  $message[41][1]="Lien depuis une page externe (autres sites, hors moteurs de recherche)";               $message[41][2]="Link vanuit een externe pagina (andere web sites behalve zoek machines)";              $message[41][3]="Enlace desde página externa (exeptuando motores de búsqueda)";
+$message[42][0]="Link from an internal page (other page on same site)";                                                        $message[42][1]="Lien depuis une page interne (autre page du site)";                                                    $message[42][2]="Link vanuit een interne pagina (andere pagina van dezelfde site)";                             $message[42][3]="Enlace desde página interna (otra página del sitio)";
+$message[43][0]="keywords used on search engines";                                                                                             $message[43][1]="des critères de recherches utilisés";                                                                                  $message[43][2]="gebruikte trefwoorden bij zoek machines";                                                                              $message[43][3]="Palabras clave utilizada por el motor de búsqueda";
+$message[44][0]="Kb";                                                                                                                                                  $message[44][1]="Ko";                                                                                                                                                   $message[44][2]="Kb";                                                                                                                                                   $message[44][3]="Kb";
+$message[45][0]="Unresolved IP Address";                                                                                                               $message[45][1]="Adresses IP des visiteurs non identifiables (IP non résolue)";                                 $message[45][2]="niet vertaald  IP Adres";                                                                                                              $message[45][3]="Dirección IP no identificada";
+$message[46][0]="Unknown OS (Referer field)";                                                                                                  $message[46][1]="OS non reconnus (champ referer brut)";                                                                                 $message[46][2]="Onbekend OS (Referer veld)";                                                                                                   $message[46][3]="Sistema Operativo desconocido (campo de referencia)";
+$message[47][0]="Required but not found URLs (HTTP code 404)";                                                                 $message[47][1]="URLs du site demandées non trouvées (Code HTTP 404)";                                                  $message[47][2]="Verplicht maar niet gvonden URLs (HTTP code 404)";                                                             $message[47][3]="URLs necesarios pero no encontados (código 404 de protocolo HTTP)";
+$message[48][0]="IP Address";                                                                                                                                  $message[48][1]="Adresse IP";                                                                                                                                   $message[48][2]="IP Adres";                                                                                                                                             $message[48][3]="Dirección IP";
+$message[49][0]="Error&nbsp;Hits";                                                                                                                             $message[49][1]="Hits&nbsp;en&nbsp;échec";                                                                                                              $message[49][2]="Fout&nbsp;Hits";                                                                                                                               $message[49][3]="Hits&nbsp;erróneos";
+$message[50][0]="Unknown browsers (Referer field)";                                                                                            $message[50][1]="Navigateurs non reconnus (champ referer brut)";                                                                $message[50][2]="Onbekende browsers (Referer veld)";                                                                                    $message[50][3]="Navegadores desconocidos (campo de referencia)";
+$message[51][0]="Visiting robots";                                                                                                                             $message[51][1]="Robots visiteurs";                                                                                                                             $message[51][2]="Bezoekende robots";                                                                                                                    $message[51][3]="Visitas de Robots";
+$message[52][0]="visits/visitor";                                                                                                                              $message[52][1]="visite/visiteur";                                                                                                                              $message[52][2]="bezoeken/bezoeker";                                                                                                                    $message[52][3]="Visitas/Visitantes";
+$message[53][0]="Robots/Spiders visitors";                                                                                                             $message[53][1]="Visiteurs Robots/Spiders";                                                                                                             $message[53][2]="Robots/Spiders bezoekers";                                                                                                             $message[53][3]="Visitas de Robots/Spiders (arañas de indexación)";
+$message[54][0]="Free realtime logfile analyzer for advanced web statistics";                                  $message[54][1]="Analyseur de log gratuit pour statistiques Web avancées";                                              $message[54][2]="Gratis realtime logbestand analyzer voor geavanceerde web statistieken";               $message[54][3]="Analizador gratuito de 'log' para estadísticas Web avanzadas";
+$message[55][0]="of";                                                                                                                                                  $message[55][1]="sur";                                                                                                                                                  $message[55][2]="van";                                                                                                                                                  $message[55][3]="de";
+
+
+# ---------- Browser lists ----------------
+# ("browser id in lower case", "browser text")
+%BrowsersHash = (
+"netscape","<font color=blue>Netscape</font> <a href=\"$PROG.pl?action=browserdetail&lang=$Lang\">(Versions)</a>",
+"msie","<font color=blue>MS Internet Explorer</font> <a href=\"$PROG.pl?action=browserdetail&lang=$Lang\">(Versions)</a>",
+
+"libwww","LibWWW",
+"wget","Wget",
+"lynx","Lynx",
+"opera","Opera",
+"22acidownload","22AciDownload",
+"aol\\-iweng","AOL-Iweng",
+"amigavoyager","AmigaVoyager",
+"antfresco","ANT Fresco",
+"bpftp","BPFTP",
+"cyberdog","Cyberdog",
+"downloadagent","DownloadAgent",
+"ecatch", "eCatch",
+"emailsiphon","EmailSiphon",
+"friendlyspider","FriendlySpider",
+"getright","GetRight",
+"headdump","HeadDump",
+"hotjava","Sun HotJava",
+"ibrowse","IBrowse",
+"intergo","InterGO",
+"konqueror","Konqueror",
+"linemodebrowser","W3C Line Mode Browser",
+"lotus-notes","Lotus Notes web client",
+"macweb","MacWeb",
+"ncsa_mosaic","NCSA Mosaic",
+"nutscrape", "Nutscrape",
+"mspie","MS Pocket Internet Explorer",
+"msfrontpageexpress","MS FrontPage Express",
+"real","RealAudio or compatible player",
+"teleportpro","TelePortPro",
+"tzgeturl","TZGETURL",
+"viking","Viking",
+"webcapture","Aspirateur Acrobat",
+"webfetcher","WebFetcher",
+"webtv","WebTV browser",
+"webexplorer","IBM-WebExplorer",
+"webmirror","WebMirror",
+"webvcr","WebVCR",
+"webzip","WebZIP"
+);
+
+# ---------- OS lists --------------------
+
+# ("os id in lower case","os text")
+%OSHash      = (
+"win16","Windows 3.xx",
+"win95","Windows 95",
+"win98","Windows 98",
+"winnt","Windows NT / Windows 2000",
+"wince","Windows CE",
+"cp/m","CPM",
+"sunos","Sun Solaris",
+"irix","Irix",
+"macintosh","MacOS",
+"unix","Unknown Unix system",
+"linux","Linux",
+"os/2","Warp OS/2",
+"osf","OSF Unix",
+"crayos","CrayOS",
+"amigaos","AmigaOS",
+"hp-ux","HP Unix",
+"riscos","Acorn RISC OS",
+"aix","Aix",
+"netbsd","NetBSD",
+"bsdi","BSDi",
+"freebsd","FreeBSD",
+"webtv","WebTV"
+);
+
+# ("text that match in log after changing space and plus into underscore","osid")
+%OSAlias     = (
+"windows_98","win98",
+"windows_nt","winnt",
+"win32","winnt",
+"windows_95","win95",
+"windows_31","win16",
+"windows;i;16","win16",
+"windowsce","wince",
+"mac_powerpc","macintosh",
+"mac_ppc","macintosh",
+"mac_68000","macintosh",
+"macweb","macintosh"
+);
+
+
+# ---------- Robot lists ------------
+# List can be found at http://info.webcrawler.com/mak/projects/robots/active.html and the next command show how to generate tab list from this file:
+# cat robotslist.txt | sed 's/:/ /' | awk ' /robot-id/ { name=tolower($2); } /robot-name/ { print "\""name"\", \""$0"\"," } ' | sed 's/robot-name *//g' > file
+# Rem: To avoid bad detection, some robots id were removed from this list:
+#      - Robots with ID of 2 letters only
+#      - Robot called webs
+# Rem: directhit is renamed in direct_hit
+%RobotHash   = (
+"acme.spider", "Acme.Spider",
+"ahoythehomepagefinder", "Ahoy! The Homepage Finder",
+"alkaline", "Alkaline",
+"appie", "Walhello appie",
+"arachnophilia", "Arachnophilia",
+"architext", "ArchitextSpider",
+"aretha", "Aretha",
+"ariadne", "ARIADNE",
+"aspider", "ASpider (Associative Spider)",
+"atn.txt", "ATN Worldwide",
+"atomz", "Atomz.com Search Robot",
+"auresys", "AURESYS",
+"backrub", "BackRub",
+"bigbrother", "Big Brother",
+"bjaaland", "Bjaaland",
+"blackwidow", "BlackWidow",
+"blindekuh", "Die Blinde Kuh",
+"bloodhound", "Bloodhound",
+"brightnet", "bright.net caching robot",
+"bspider", "BSpider",
+"cactvschemistryspider", "CACTVS Chemistry Spider",
+"calif", "Calif",
+"cassandra", "Cassandra",
+"cgireader", "Digimarc Marcspider/CGI",
+"checkbot", "Checkbot",
+"churl", "churl",
+"cmc", "CMC/0.01",
+"collective", "Collective",
+"combine", "Combine System",
+"conceptbot", "Conceptbot",
+"core", "Web Core / Roots",
+"cshkust", "CS-HKUST WISE: WWW Index and Search Engine",
+"cusco", "Cusco",
+"cyberspyder", "CyberSpyder Link Test",
+"deweb", "DeWeb(c) Katalog/Index",
+"dienstspider", "DienstSpider",
+"diibot", "Digital Integrity Robot",
+"direct_hit", "Direct Hit Grabber",
+"dnabot", "DNAbot",
+"download_express", "DownLoad Express",
+"dragonbot", "DragonBot",
+"dwcp", "DWCP (Dridus' Web Cataloging Project)",
+"ebiness", "EbiNess",
+"eit", "EIT Link Verifier Robot",
+"emacs", "Emacs-w3 Search Engine",
+"emcspider", "ananzi",
+"esther", "Esther",
+"evliyacelebi", "Evliya Celebi",
+"nzexplorer", "nzexplorer",
+"fdse", "Fluid Dynamics Search Engine robot",
+"felix", "     Felix IDE",
+"ferret", "Wild Ferret Web Hopper #1, #2, #3",
+"fetchrover", "FetchRover",
+"fido", "fido",
+"finnish", "Hämähäkki",
+"fireball", "KIT-Fireball",
+"fish", "Fish search",
+"fouineur", "Fouineur",
+"francoroute", "Robot Francoroute",
+"freecrawl", "Freecrawl",
+"funnelweb", "FunnelWeb",
+"gazz", "gazz",
+"gcreep", "GCreep",
+"getbot", "GetBot",
+"geturl", "GetURL",
+"golem", "Golem",
+"googlebot", "Googlebot",
+"grapnel", "Grapnel/0.01 Experiment",
+"griffon", "Griffon                                                               ",
+"gromit", "Gromit",
+"gulliver", "Northern Light Gulliver",
+"hambot", "HamBot",
+"harvest", "Harvest",
+"havindex", "havIndex",
+"hometown", "Hometown Spider Pro",
+"wired-digital", "Wired Digital",
+"htdig", "ht://Dig",
+"htmlgobble", "HTMLgobble",
+"hyperdecontextualizer", "Hyper-Decontextualizer",
+"ibm", "IBM_Planetwide",
+"iconoclast", "Popular Iconoclast",
+"ilse", "Ingrid",
+"imagelock", "Imagelock ",
+"incywincy", "IncyWincy",
+"informant", "Informant",
+"infoseek", "InfoSeek Robot 1.0",
+"infoseeksidewinder", "Infoseek Sidewinder",
+"infospider", "InfoSpiders",
+"inspectorwww", "Inspector Web",
+"intelliagent", "IntelliAgent",
+"iron33", "Iron33",
+"israelisearch", "Israeli-search",
+"javabee", "JavaBee",
+"jcrawler", "JCrawler",
+"jeeves", "Jeeves",
+"jobot", "Jobot",
+"joebot", "JoeBot",
+"jubii", "The Jubii Indexing Robot",
+"jumpstation", "JumpStation",
+"katipo", "Katipo",
+"kdd", "KDD-Explorer",
+"kilroy", "Kilroy",
+"ko_yappo_robot", "KO_Yappo_Robot",
+"labelgrabber.txt", "LabelGrabber",
+"larbin", "larbin",
+"legs", "legs",
+"linkscan", "LinkScan",
+"linkwalker", "LinkWalker",
+"lockon", "Lockon",
+"logo_gif", "logo.gif Crawler",
+"lycos", "Lycos",
+"macworm", "Mac WWWWorm",
+"magpie", "Magpie",
+"mediafox", "MediaFox",
+"merzscope", "MerzScope",
+"meshexplorer", "              NEC-MeshExplorer",
+"mindcrawler", "MindCrawler",
+"moget", "moget",
+"momspider", "MOMspider",
+"monster", "Monster",
+"motor", "Motor",
+"muscatferret", "Muscat Ferret",
+"mwdsearch", "Mwd.Search",
+"myweb", "Internet Shinchakubin",
+"netcarta", "NetCarta WebMap Engine",
+"netmechanic", "NetMechanic",
+"netscoop", "NetScoop",
+"newscan-online", "newscan-online",
+"nhse", "NHSE Web Forager",
+"nomad", "Nomad",
+"northstar", "The NorthStar Robot",
+"occam", "Occam",
+"octopus", "HKU WWW Octopus",
+"orb_search", "Orb Search",
+"packrat", "Pack Rat",
+"pageboy", "PageBoy",
+"parasite", "ParaSite",
+"patric", "Patric",
+"perignator", "The Peregrinator",
+"perlcrawler", "PerlCrawler 1.0",
+"phantom", "Phantom",
+"piltdownman", "PiltdownMan",
+"pioneer", "Pioneer",
+"pitkow", "html_analyzer",
+"pjspider", "Portal Juice Spider",
+"pka", "PGP Key Agent",
+"plumtreewebaccessor", "PlumtreeWebAccessor ",
+"poppi", "Poppi",
+"portalb", "PortalB Spider",
+"puu", "GetterroboPlus Puu",
+"python", "The Python Robot",
+"raven", "Raven Search",
+"rbse", "RBSE Spider",
+"resumerobot", "Resume Robot",
+"rhcs", "RoadHouse Crawling System",
+"roadrunner", "Road Runner: The ImageScape Robot",
+"robbie", "Robbie the Robot",
+"robi", "ComputingSite Robi/1.0",
+"roverbot", "Roverbot",
+"safetynetrobot", "SafetyNet Robot",
+"scooter", "Scooter",
+"search_au", "Search.Aus-AU.COM",
+"searchprocess", "SearchProcess",
+"senrigan", "Senrigan",
+"sgscout", "SG-Scout",
+"shaggy", "ShagSeeker",
+"shaihulud", "Shai'Hulud",
+"sift", "Sift",
+"simbot", "Simmany Robot Ver1.0",
+"site-valet", "Site Valet",
+"sitegrabber", "Open Text Index Robot",
+"sitetech", "SiteTech-Rover",
+"slurp", "Inktomi Slurp",
+"smartspider", "Smart Spider",
+"snooper", "Snooper",
+"solbot", "Solbot",
+"spanner", "Spanner",
+"speedy", "Speedy Spider",
+"spider_monkey", "spider_monkey",
+"spiderbot", "SpiderBot",
+"spiderman", "SpiderMan",
+"spry", "Spry Wizard Robot",
+"ssearcher", "Site Searcher",
+"suke", "Suke",
+"sven", "Sven",
+"tach_bw", "TACH Black Widow",
+"tarantula", "Tarantula",
+"tarspider", "tarspider",
+"tcl", "Tcl W3 Robot",
+"techbot", "TechBOT",
+"templeton", "Templeton",
+"titin", "TitIn",
+"titan", "TITAN",
+"tkwww", "The TkWWW Robot",
+"tlspider", "TLSpider",
+"ucsd", "UCSD Crawl",
+"udmsearch", "UdmSearch",
+"urlck", "URL Check",
+"valkyrie", "Valkyrie",
+"victoria", "Victoria",
+"visionsearch", "vision-search",
+"voyager", "Voyager",
+"vwbot", "VWbot",
+"w3index", "The NWI Robot",
+"w3m2", "W3M2",
+"wanderer", "the World Wide Web Wanderer",
+"webbandit", "WebBandit Web Spider",
+"webcatcher", "WebCatcher",
+"webcopy", "WebCopy",
+"webfetcher", "webfetcher",
+"webfoot", "The Webfoot Robot",
+"weblayers", "weblayers",
+"weblinker", "WebLinker",
+"webmirror", "WebMirror",
+"webmoose", "The Web Moose",
+"webquest", "WebQuest",
+"webreader", "Digimarc MarcSpider",
+"webreaper", "WebReaper",
+"websnarf", "Websnarf",
+"webspider", "WebSpider",
+"webvac", "WebVac",
+"webwalk", "webwalk",
+"webwalker", "WebWalker",
+"webwatch", "WebWatch",
+"wget", "Wget",
+"whowhere", "WhoWhere Robot",
+"wmir", "w3mir",
+"wolp", "WebStolperer",
+"wombat", "The Web Wombat ",
+"worm", "The World Wide Web Worm",
+"wwwc", "WWWC Ver 0.2.5",
+"wz101", "WebZinger",
+"xget", "XGET",
+"nederland.zoek", "Nederland.zoek",
+
+# Not declared robots
+"ezresult",    "Ezresult (Not referenced robot)",
+"fast-webcrawler", "Fast-Webcrawler (Not referenced robot)",
+"perman surfer", "Perman surfer (Not referenced robot)",
+"mercator", "Mercator (Not referenced robot)",
+"antibot", "Antibot (Not referenced robot)",
+"daviesbot", "DaviesBot (Not referenced robot)",
+"unlost_web_crawler", "Unlost_Web_Crawler (Not referenced robot)",
+"justview", "JustView (Not referenced robot)",
+# Supposed to be robots
+"webcompass", "webcompass (Not referenced robot)",
+"digout4u", "digout4u (Not referenced robot)",
+"echo", "EchO! (Not referenced robot)",
+"voila", "Voila (Not referenced robot)",
+"boris", "Boris (Not referenced robot)",
+"ultraseek", "Ultraseek (Not referenced robot)",
+"ia_archiver", "ia_archiver (Not referenced robot)",
+# Generic detect ID
+"robot", "Unknown robot (Not referenced robot)"
+);
+
+# ---------- Search engine lists --------------------
+%SearchEnginesHash=(
+"excite\.","Excite",                   "yahoo\.","Yahoo",                      "altavista\.","AltaVista",
+"lycos\.","Lycos",                             "voila\.", "Voila",                     "infoseek\.","Infoseek",                        "google\.","Google",
+"webcrawler\.","WebCrawler",   "lokace\.", "Lokace",           "northernlight\.","NorthernLight",      "hotbot\.","Hotbot",
+"metacrawler\.","MetaCrawler", "go2net\.com","Go2Net (Metamoteur)",    "askjeeves\.","Ask Jeeves",     "ctrouve\.","C'est trouvé",
+"euroseek\.","Euroseek",               "francite\.","Francité",        "\.lbb\.org", "LBB",
+"netscape\.","Netscape",               "nomade\.fr/","Nomade",
+"msn\.dk/","MSN (dk)",                 "msn\.fr/","MSN (fr)",          "msn\.","MSN",                                          "nbci\.com/search","NBCI",
+"mamma\.","Mamma",                             "dejanews\.","DejaNews",        
+"search\.terra\.","Terra",             "snap\.","Snap",
+"netfind\.aol\.com","AOL",             "recherche\.aol\.fr","AOL",             "rechercher\.libertysurf\.fr","Libertysurf",
+"search\.com","Other search engines"
+);
+
+# ---------- Domains --------------------
+%DomainsHash = (
+"localhost","localhost",
+
+"ad","Andorra","ae","United Arab Emirates","af","Afghanistan","ag",
+"Antigua and Barbuda","ai","Anguilla","al","Albania","am",
+"Armenia","an","Netherlands Antilles","ao","Angola","aq",
+"Antarctica","ar","Argentina","arpa","Old style Arpanet","as",
+"American Samoa","at","Austria","au","Australia","aw","Aruba","az",
+"Azerbaidjan","ba","Bosnia-Herzegovina","bb","Barbados","bd",
+"Bangladesh","be","Belgium","bf","Burkina Faso","bg","Bulgaria",
+"bh","Bahrain","bi","Burundi","bj","Benin","bm","Bermuda","bn",
+"Brunei Darussalam","bo","Bolivia","br","Brazil","bs","Bahamas",
+"bt","Bhutan","bv","Bouvet Island","bw","Botswana","by","Belarus",
+"bz","Belize","ca","Canada","cc","Cocos (Keeling) Islands","cf",
+"Central African Republic","cg","Congo","ch","Switzerland","ci",
+"Ivory Coast (Cote D'Ivoire)","ck","Cook Islands","cl","Chile","cm","Cameroon",
+"cn","China","co","Colombia","com","Commercial","cr","Costa Rica",
+"cs","Former Czechoslovakia","cu","Cuba","cv","Cape Verde","cx",
+"Christmas Island","cy","Cyprus","cz","Czech Republic","de","Germany",
+"dj","Djibouti","dk","Denmark","dm","Dominica","do","Dominican Republic",
+"dz","Algeria","ec","Ecuador","edu","USA Educational","ee","Estonia",
+"eg","Egypt","eh","Western Sahara","es","Spain","et","Ethiopia","fi","Finland","fj","Fiji","fk",
+"Falkland Islands","fm","Micronesia","fo","Faroe Islands",
+"fr","France","fx","France (European Territory)","ga","Gabon","gb",
+"Great Britain","gd","Grenada","ge","Georgia","gf","French Guyana","gh","Ghana","gi","Gibraltar",
+"gl","Greenland","gm","Gambia","gn","Guinea","gov","USA Government","gp","Guadeloupe (French)","gq",
+"Equatorial Guinea","gr","Greece","gs","S. Georgia &amp; S. Sandwich Isls.",
+"gt","Guatemala","gu","Guam (USA)","gw","Guinea Bissau","gy","Guyana",
+"hk","Hong Kong","hm","Heard and McDonald Islands","hn","Honduras","hr",
+"Croatia","ht","Haiti","hu","Hungary","id","Indonesia","ie","Ireland","il","Israel",
+"in","India","int","International","io","British Indian Ocean Territory",
+"iq","Iraq","ir","Iran","is","Iceland","it","Italy","jm",
+"Jamaica","jo","Jordan","jp","Japan","ke","Kenya","kg","Kyrgyzstan",
+"kh","Cambodia","ki","Kiribati","km","Comoros","kn","Saint Kitts &amp; Nevis Anguilla",
+"kp","North Korea","kr","South Korea","kw","Kuwait","ky",
+"Cayman Islands","kz","Kazakhstan","la","Laos","lb","Lebanon","lc","Saint Lucia",
+"li","Liechtenstein","lk","Sri Lanka","lr","Liberia","ls","Lesotho","lt","Lithuania",
+"lu","Luxembourg","lv","Latvia","ly","Libya","ma","Morocco","mc","Monaco",
+"md","Moldavia","mg","Madagascar","mh","Marshall Islands","mil","USA Military","mk",
+"Macedonia","ml","Mali","mm","Myanmar","mn","Mongolia","mo","Macau",
+"mp","Northern Mariana Islands","mq","Martinique (French)","mr","Mauritania",
+"ms","Montserrat","mt","Malta","mu","Mauritius","mv","Maldives","mw",
+"Malawi","mx","Mexico","my","Malaysia","mz","Mozambique","na","Namibia","nato","NATO",
+"nc","New Caledonia (French)","ne","Niger","net","Network","nf","Norfolk Island",
+"ng","Nigeria","ni","Nicaragua","nl","Netherlands","no","Norway",
+"np","Nepal","nr","Nauru","nt","Neutral Zone","nu","Niue","nz","New Zealand","om","Oman","org",
+"Non-Profit Organizations","pa","Panama","pe","Peru","pf","Polynesia (French)",
+"pg","Papua New Guinea","ph","Philippines","pk","Pakistan","pl","Poland",
+"pm","Saint Pierre and Miquelon","pn","Pitcairn Island","pr",
+"Puerto Rico","pt","Portugal","pw","Palau","py","Paraguay","qa","Qatar",
+"re","Reunion (French)","ro","Romania","ru","Russian Federation","rw","Rwanda",
+"sa","Saudi Arabia","sb","Solomon Islands","sc","Seychelles","sd",
+"Sudan","se","Sweden","sg","Singapore","sh","Saint Helena","si","Slovenia",
+"sj","Svalbard and Jan Mayen Islands","sk","Slovak Republic","sl","Sierra Leone",
+"sm","San Marino","sn","Senegal","so","Somalia","sr","Suriname","st",
+"Saint Tome and Principe","su","Former USSR","sv","El Salvador","sy","Syria","sz","Swaziland","tc",
+"Turks and Caicos Islands","td","Chad","tf","French Southern Territories","tg","Togo",
+"th","Thailand","tj","Tadjikistan","tk","Tokelau","tm","Turkmenistan","tn","Tunisia",
+"to","Tonga","tp","East Timor","tr","Turkey","tt","Trinidad and Tobago","tv","Tuvalu",
+"tw","Taiwan","tz","Tanzania","ua","Ukraine","ug","Uganda","uk",
+"United Kingdom","um","USA Minor Outlying Islands","us","United States",
+"uy","Uruguay","uz","Uzbekistan","va","Vatican City State","vc",
+"Saint Vincent &amp; Grenadines","ve","Venezuela","vg","Virgin Islands (British)",
+"vi","Virgin Islands (USA)","vn","Vietnam","vu","Vanuatu","wf","Wallis and Futuna Islands",
+"ws","Samoa","ye","Yemen","yt","Mayotte","yu","Yugoslavia","za","South Africa",
+"zm","Zambia","zr","Zaire","zw","Zimbabwe"
+);
+
+
+#-------------------------------------------------------
+# Functions
+#-------------------------------------------------------
+sub html_end {
+       $date=localtime();
+       print "<br><font size=1>$date - <b>Advanced Web Statistics $VERSION</b> - <a href=\"http://perso.wanadoo.fr/l.destailleur/awstats.html\" target=_newawstats>Visit $PROG official web page</a></font>\n";
+       if ($SponsorLinkVisible) {
+               print " - <a href=\"http://www.commission-junction.com/track/track.dll?AID=348418&PID=531902&URL=http%3A%2F%2Fwww%2Ecj%2Ecom\">";
+               print "Visit $PROG sponsor";
+               print "</a><img src=\"http://www.commission-junction.com/banners/tracker.exe?AID=348418&PID=531902&banner=0.gif\" height=1 width=1 border=0>";
+       }
+       print "<br><br>";
+       print "</body>";
+       print "</html>";
+       exit(0);
+}
+
+sub tab_head {
+       print "
+               <TABLE CLASS=TABLEBORDER BORDER=0 CELLPADDING=1 CELLSPACING=0 WIDTH=700>
+               <TR><TD>
+               <TABLE CLASS=TABLEFRAME BORDER=0 CELLPADDING=3 CELLSPACING=0 WIDTH=100%>
+               <TR><TH COLSPAN=2 CLASS=TABLETITLE>$tab_titre</TH></TR>
+               <TR><TD COLSPAN=2>
+               <TABLE CLASS=TABLEDATA BORDER=1 CELLPADDING=2 CELLSPACING=0 WIDTH=100%>
+               ";
+}
+
+sub tab_end {
+       print "</TABLE></TD></TR></TABLE>";
+       print "</TD></TR></TABLE>";
+}
+
+sub UnescapeURL {
+       $_[0] =~ s/\+/ /gi;
+       $_[0] =~ s/%20/ /gi;    #
+       $_[0] =~ s/%22//gi;             #"
+       $_[0] =~ s/%26/ /gi;    #&
+       $_[0] =~ s/%27/ /gi;    #'
+       $_[0] =~ s/%28//gi;             #(
+       $_[0] =~ s/%29//gi;             #)
+       $_[0] =~ s/%2b/ /gi;    #+
+       $_[0] =~ s/%2c/ /gi;    #,
+       $_[0] =~ s/%2d//gi;             #-
+       $_[0] =~ s/%2f/ /gi;    #/
+       $_[0] =~ s/%3c/ /gi;    #<
+       $_[0] =~ s/%3d/ /gi;    #=
+       $_[0] =~ s/%3e/ /gi;    #>
+       $_[0] =~ s/%c9/é/gi;    #é maj
+       $_[0] =~ s/%e8/è/gi;    #è
+       $_[0] =~ s/%e9/é/gi;    #é
+       $_[0] =~ s/%ea/ê/gi;    #ê
+       $_[0] =~ s/%eb/ë/gi;    #ë
+       $_[0] =~ s/%f1/ñ/gi;    #ñ
+       $_[0] =~ s/%f2/ò/gi;    #ò
+       $_[0] =~ s/%f3/ó/gi;    #ó
+       $_[0] =~ s/[0-9]//gi;   #               $_[0] =~ s/^[0-9]*//gi; should be better but not tested yet
+       $_[0] =~ s/\"//gi;
+}
+
+sub error {
+       print "$_[0].<br><br>\n";
+       print "<font color=#880000><b>Setup ($PROG, web server or logfile permissions) may be wrong.</b></font><br>";
+       print "See README.TXT for informations on how to install $PROG.\n";
+    print "</BODY>\n";
+    print "</HTML>\n";
+    die;
+}
+
+sub warning {
+       if ($WarningMessages == 1) {
+       print "$_[0]<br>\n";
+           print "You can now suppress this warning by changing <b>\$WarningMessage=1</b> parameter into <b>\$WarningMessage=0</b> in <b>$PROG.pl</b> file.<br><br>\n";
+       }
+}
+
+sub SkipHost {
+       foreach $Skip (@SkipHosts) { if ($_[0] =~ m/$Skip/) { return 1; } }
+       0; # Not in @SkipHosts
+}
+
+sub SkipFile {
+       foreach $Skip (@SkipFiles) { if ($_[0] =~ m/$Skip/i) { return 1; } }
+       0; # Not inside @SkipFiles
+}
+
+sub Read_History_File {
+if (open(HISTORY,$fic)) {
+       $readdomain=0;$readvisitor=0;$readunknownip=0;$readsider=0;$readtime=0;$readbrowser=0;$readnsver=0;$readmsiever=0;
+       $reados=0;$readrobot=0;$readunknownreferer=0;$readunknownrefererbrowser=0;$readpagerefs=0;$readse=0;
+       $readsearchwords=0;$readerrors=0;$readerrors404=0;
+       $indic1{$_[0]}=0; $indic2{$_[0]}=0; $indic3{$_[0]}=0; $indic4{$_[0]}=0; $indic5{$_[0]}=0;
+       while (<HISTORY>) {
+               $_ =~ s/\n//; $saveline=$_;
+               @felter=split(/ /,$_);
+               if ($felter[0] eq "FirstTime") { $FirstTime=$felter[1]; next; }
+        if (($felter[0] eq "LastTime") && ($LastTime eq 0)) { $LastTime=$felter[1]; next; }
+               if ($felter[0] eq "TotalVisits") { $TotalVisits+=$felter[1]; $indic1{$_[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_DOMAIN") { $readdomain=1; next; }
+               if ($felter[0] eq "END_DOMAIN")   { $readdomain=0; next; }
+               if ($readdomain) {
+                       $domener_p{$felter[0]}+=$felter[1];
+                       $domener_h{$felter[0]}+=$felter[2];
+                       $domener_k{$felter[0]}+=$felter[3];
+                       next; }
+
+        if ($felter[0] eq "BEGIN_VISITOR") { $readvisitor=1; next; }
+        if ($felter[0] eq "END_VISITOR")   { $readvisitor=0; next; }
+        if ($readvisitor) {
+               $hostmachine_p{$felter[0]}+=$felter[1];
+               $hostmachine_h{$felter[0]}+=$felter[2];
+               $hostmachine_k{$felter[0]}+=$felter[3];
+               $hostmachine_l{$felter[0]}=$felter[4];
+               if (($felter[0] ne "Unknown") && ($hostmachine_p{$felter[0]} > 0)) { $indic2{$_[0]}++; }
+               next; }
+        if ($felter[0] eq "BEGIN_UNKNOWNIP") { $readunknownip=1; next; }
+        if ($felter[0] eq "END_UNKNOWNIP")   { $readunknownip=0; next; }
+        if ($readunknownip) {
+               if ($unknownip_l{$felter[0]} eq "") { $unknownip_l{$felter[0]}=$felter[1]; }
+               $indic2{$_[0]}++;
+               next; }
+
+               if ($felter[0] eq "BEGIN_SIDER")  { $readsider=1; next; }
+               if ($felter[0] eq "END_SIDER")    { $readsider=0; next; }
+               if ($readsider) { $sider_p{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_TIME")     { $readtime=1; next; }
+        if ($felter[0] eq "END_TIME")       { $readtime=0; next; }
+        if ($readtime) {
+               $time_p[$felter[0]]+=$felter[1]; $time_h[$felter[0]]+=$felter[2]; $time_k[$felter[0]]+=$felter[3];
+               $indic3{$_[0]}+=$felter[1]; $indic4{$_[0]}+=$felter[2]; $indic5{$_[0]}+=$felter[3];
+               next; }
+
+        if ($felter[0] eq "BEGIN_BROWSER") { $readbrowser=1; next; }
+        if ($felter[0] eq "END_BROWSER") { $readbrowser=0; next; }
+        if ($readbrowser) { $browser{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_NSVER") { $readnsver=1; next; }
+        if ($felter[0] eq "END_NSVER") { $readnsver=0; next; }
+        if ($readnsver) { $nsver[$felter[0]]+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_MSIEVER") { $readmsiever=1; next; }
+        if ($felter[0] eq "END_MSIEVER") { $readmsiever=0; next; }
+        if ($readmsiever) { $msiever[$felter[0]]+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_OS") { $reados=1; next; }
+        if ($felter[0] eq "END_OS") { $reados=0; next; }
+        if ($reados) { $OS{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_ROBOT") { $readrobot=1; next; }
+        if ($felter[0] eq "END_ROBOT") { $readrobot=0; next; }
+        if ($readrobot) { 
+               if ($robot_l{$felter[0]} eq "") { $robot_l{$felter[0]}=$felter[2]; }
+                       $robot{$felter[0]}+=$felter[1];
+                       next; }
+
+        if ($felter[0] eq "BEGIN_UNKNOWNREFERER") { $readunknownreferer=1; next; }
+        if ($felter[0] eq "END_UNKNOWNREFERER")   { $readunknownreferer=0; next; }
+        if ($readunknownreferer) {
+               if ($unknownreferer_l{$felter[0]} eq "") { $unknownreferer_l{$felter[0]}=$felter[1]; }
+               next; }
+        if ($felter[0] eq "BEGIN_UNKNOWNREFERERBROWSER") { $readunknownrefererbrowser=1; next; }
+        if ($felter[0] eq "END_UNKNOWNREFERERBROWSER")   { $readunknownrefererbrowser=0; next; }
+        if ($readunknownrefererbrowser) {
+               if ($unknownrefererbrowser_l{$felter[0]} eq "") { $unknownrefererbrowser_l{$felter[0]}=$felter[1]; }
+               next; }
+
+        if ($felter[0] eq "HitFrom0") { $HitFrom[0]+=$felter[1]; next; }
+        if ($felter[0] eq "HitFrom1") { $HitFrom[1]+=$felter[1]; next; }
+        if ($felter[0] eq "HitFrom2") { $HitFrom[2]+=$felter[1]; next; }
+        if ($felter[0] eq "HitFrom3") { $HitFrom[3]+=$felter[1]; next; }
+        if ($felter[0] eq "HitFrom4") { $HitFrom[4]+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_PAGEREFS") { $readpagerefs=1; next; }
+        if ($felter[0] eq "END_PAGEREFS") { $readpagerefs=0; next; }
+        if ($readpagerefs) { $PageRefs{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_SEREFERRALS") { $readse=1; next; }
+        if ($felter[0] eq "END_SEREFERRALS") { $readse=0; next; }
+        if ($readse) { $SEReferrals{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_SEARCHWORDS") { $readsearchwords=1; next; }
+        if ($felter[0] eq "END_SEARCHWORDS") { $readsearchwords=0; next; }
+        if ($readsearchwords) { $searchwords{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_ERRORS") { $readerrors=1; next; }
+        if ($felter[0] eq "END_ERRORS") { $readerrors=0; next; }
+        if ($readerrors) { $errors{$felter[0]}+=$felter[1]; next; }
+
+        if ($felter[0] eq "BEGIN_SIDER_404") { $readerrors404=1; next; }
+        if ($felter[0] eq "END_SIDER_404") { $readerrors404=0; next; }
+        if ($readerrors404) { $sider404{$felter[0]}+=$felter[1]; next; }
+               }
+       }
+close HISTORY;
+}
+
+
+# For my own test
+if ($ENV{"SERVER_NAME"} eq "athena" || $ARGV[0] eq "athena") {
+$LogFile   = "C:\\WINNT\\system32\\LogFiles\\W3SVC1\\ex";
+#$LogFile   = "C:\\TEMP\\test.log";
+$LogFormat  = 2; }
+if ($ENV{"SERVER_NAME"} eq "chiensderace.com" || $ARGV[0] eq "chiensderace.com") {
+$ArchiveLogRecords = 1;
+@SkipFiles= ("\\.css","\\.js","\\.class","robots\\.txt","/~","accueil\\.htm","sommaire\\.htm","barre\\.htm","menu\\.shtml","menu_","onglet_");
+@HostAliases= ("chiensderaces.com","www.chiensderaces.com");
+$LogFile   = "/export/home/wwwroot/nicoboy/logs/chiensderace_access_log";
+$DirIcons="/icon"; }
+if ($ENV{"SERVER_NAME"} eq "reference" || $ARGV[0] eq "reference") {
+@HostAliases= ("163.84.167.24","163.84.92.240","refoptimia","referenc");
+$LogFile   = "/usr/local/apache/logs/reference.access_log";    }
+if ($ENV{"SERVER_NAME"} eq "www.partenor.com" || $ARGV[0] eq "www.partenor.com") {
+$ArchiveLogRecords = 1;
+@SkipHosts= ("10.0.0.");
+@SkipFiles= ("\\.css","\\.js","\\.class","robots\\.txt","/~","sommaire\\.htm","barre\\.htm","menu_","onglet_");
+@HostAliases= ("ftp.partenor.com");
+$LogFile   = "/var/log/httpd/www.partenor.com-access_log"; }
+
+
+#-------------------------------------------------------
+# MAIN
+#-------------------------------------------------------
+if ($DNSLookup) { use Socket; }
+
+$LocalSite = $ENV{"SERVER_NAME"};if ($LocalSite eq "") { $LocalSite=$ARGV[0] }; $LocalSite =~ tr/A-Z/a-z/;
+$LocalSiteWithoutwww = $LocalSite; $LocalSiteWithoutwww =~ s/www\.//;
+if ($ARGV[0] eq "-h" || $ARGV[0] eq "-?" || $ARGV[0] eq "--help") {
+       print "----- $PROG $VERSION (c) laurent.destailleur\@wanadoo.fr -----\n";
+       print "$PROG is a free Web server logfile analyzer (in Perl) working as CGI to show\n";
+       print "advanced web statistics. Now supports/detects :\n";
+       print " Visits and unique visitors\n";
+       print " Rush hours\n";
+       print " Most often viewed pages\n";
+       @DomainsArray=keys %DomainsHash;
+       print " ".(@DomainsArray)." domains/countries\n";
+       @BrowserArray=keys %BrowsersHash;
+       print " ".(@BrowserArray)." browsers\n";
+       @OSArray=keys %OSHash;
+       print " ".(@OSArray)." Operating Systems\n";
+       @RobotArray=keys %RobotHash;
+       print " ".(@RobotArray)." robots\n";
+       @SearchEnginesArray=keys %SearchEnginesHash;
+       print " ".(@SearchEnginesArray)." search engines to detect referrer\n";
+       print " ".(@SearchEnginesArray)." search engines to detect keywords\n";
+       print "See README.TXT for setup.\n";
+       print "New versions and support at http://perso.wanadoo.fr/l.destailleur/awstats.html\n";
+       exit 0
+       }
+if ($LocalSite eq "") {
+       print "----- $PROG $VERSION (c) laurent.destailleur\@wanadoo.fr -----\n";
+       print "Syntax: $PROG.pl www.myservername   Run $PROG from command line, not as CGI\n";
+       print "        $PROG.pl -h                 Quick features (Read README.TXT for help)\n";
+       print "New versions and support at http://perso.wanadoo.fr/l.destailleur/awstats.html\n";
+       exit 0
+       }
+
+# Send HTTP/HTML Header
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { print("Content-type: text/html\n\n\n"); }
+print "<html>\n";
+print "<head>\n";
+print "<meta http-equiv=\"description\" content=\"$PROG - Advanced Web Statistics of $LocalSite\">\n";
+print "<meta http-equiv=\"keywords\" content=\"$LocalSite, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\">\n";
+print "<meta name=\"robots\" content=\"index,follow\">\n";
+print "<title>$message[7][$Lang] $LocalSite</title>\n";
+print "</head>\n";
+print "<body>\n";
+
+print "<center><br>\n";
+print "<font size=2><b>AWStats</b></font><br>";
+print "<a href=\"http://perso.wanadoo.fr/l.destailleur/awstats.html\" target=_newawstats><img src=$DirIcons/other/$Logo border=0 alt=\"$PROG Official Web Site\"></a><br>\n";
+print "<a href=\"$PROG.pl?lang=0\"><img src=\"$DirIcons\/flags\/us.png\" height=14 border=0></a> &nbsp; <a href=\"$PROG.pl?lang=1\"><img src=\"$DirIcons\/flags\/fr.png\" height=14 border=0></a> &nbsp; <a href=\"$PROG.pl?lang=2\"><img src=\"$DirIcons\/flags\/nl.png\" height=14  border=0></a> &nbsp; <a href=\"$PROG.pl?lang=3\"><img src=\"$DirIcons\/flags\/es.png\" height=14 border=0></a><br>\n";
+print "<font size=1>$message[54][$Lang]</font><br>\n";
+print "<font name=Arial size=-2>\n";
+print "<BR><BR>\n";
+print "<STYLE TYPE=text/css>\n
+<!--
+       BODY { font-align: font-family: arial, verdana, helvetica, sans-serif; font-size: 10px; background-color:$color_Background; }
+       TD,TH { font-family: arial, verdana, helvetica, sans-serif; font-size: 10px; }
+       A {     font-family: arial, verdana helvetica, sans-serif;      font-size: 10px; font-style: normal; color: $color_link; }
+       DIV { text-align: justify; }
+       .TABLEBORDER { background-color:$color_TableBorder; }
+       .TABLEFRAME { background-color:$color_TableBG; }
+       .TABLEDATA { background-color:$color_Background; }
+       .TABLETITLE { font-family: verdana, arial, helvetica, sans-serif; font-size: 14px; font-weight:bold; color: $color_TableTitle; background-color:$color_TableBGTitle; }
+       .classTooltip { position:absolute; top:0px; left:0px; z-index:2; width: 280; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color:#FFFFE6; padding:10px 10px; border: 1px solid black; }
+//-->
+</STYLE>\n
+";
+
+# INIT
+#------------------------------------------
+($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime(time);
+if ($year < 100) { $year+=2000; } else { $year+=1900; }
+$smallyear=$year;$smallyear =~ s/^..//;
+$month++;if ($month < 10) { $month  = "0$month"; }
+foreach $Host (@SkipHosts)  { if ($Host eq "") { die "Error: undefined SkipHosts. Put a value.\n";  } }
+foreach $Host (@SkipFiles)  { if ($Host eq "") { die "Error: undefined SkipFiles. Put a value.\n";  } }
+foreach $HostAlias (@HostAliases) { if ($HostAlias eq "") { die "Error: undefined HostAliases. Put a value.\n"; } }
+$FirstTime=0;$LastTime=0;$TotalVisits=0;$TotalUnique=0;$TotalDifferentPages=0;$TotalDifferentKeywords=0;$TotalKeywords=0;
+for ($ix=0; $ix<5; $ix++) {    $HitFrom[$ix]=0; }
+
+
+#------------------------------------------
+# READING CURRENT MONTH HISTORY FILE
+#------------------------------------------
+$fic="$DIR$PROG$month$year.txt";
+&Read_History_File($month);
+
+
+#------------------------------------------
+# PROCESSING CURRENT LOG
+#------------------------------------------
+if ($BenchMark == 1) {
+       ($secbench,$minbench,$hourbench,$daybench,$monthbench,$yearbench,$wdaybench,$ydaybench,$isdstbench) = localtime(time);
+       print "Start of processing log file: $hourbench:$minbench:$secbench<br>";
+       }
+# Try with $LogFile (If not found try $LogFile$smallyear$month.log and then $LogFile$smallyear$month$day.log)
+$OpenFileError=1;     if (open(LOG,"$LogFile")) { $OpenFileError=0; }
+if ($OpenFileError) { if (open(LOG,"$LogFile$smallyear$month.log")) { $LogFile="$LogFile$smallyear$month.log"; $OpenFileError=0; } }
+if ($OpenFileError) { if (open(LOG,"$LogFile$smallyear$month$day.log")) { $LogFile="$LogFile$smallyear$month$day.log"; $OpenFileError=0; } }
+if ($OpenFileError) { error("Error: Couldn't open server log file <b>$LogFile</b>: $!"); }
+while (<LOG>)
+{
+       # Get log line
+       #-------------
+       $line=$_;
+       $_ =~ s/\n//;   # Needed because IIS log file end with CRLF and perl read lines until LF
+       $_ =~ s/\" / /g; $_ =~ s/ \"/ /g; $_ =~ s/\"$//;        # Suppress "
+       if ($LogFormat == 2) {
+               if (/^#/) { next; }             # ISS writes such comments, we forget line
+               @felter=split(/ /,$_);
+               # Change order of ISS parameters to be like Apache
+               $savedate=$felter[0];$savetime=$felter[1];
+               $felter[0]=$felter[2];
+               $felter[1]="-";
+               $felter[2]=$felter[3];
+               @datep=split(/-/,$savedate);                            #Day:MM:YY:Hour:Min:Sec
+               $felter[3]="[$datep[2]/$datep[1]/$datep[0]:$savetime";
+               $felter[11]=$felter[9];
+               $felter[9]=$felter[7];
+               $felter[7]=$felter[8];
+               $felter[8]=$felter[6];
+               $felter[6]=$felter[5];
+               $felter[5]=$felter[4];
+               $felter[4]="+0000]";
+               #print "$felter[0] $felter[1] $felter[2] $felter[3] $felter[4] $felter[5] $felter[6] $felter[7] $felter[8] $felter[9] $felter[10] $felter[11]<br>";
+       }
+       else {
+               $_ =~ s/ GET .* .* HTTP\// GET BAD_URL HTTP\//;         # Change ' GET x y z HTTP/' into ' GET x%20y%20z HTTP/'
+               @felter=split(/ /,$_);
+       }
+
+       # Check filters (here, log is in apache combined format, even with IIS)
+       #----------------------------------------------------------------------
+       if ($felter[5] eq 'HEAD') { next; }                             # Keep only GET, POST, OPTIONS but not HEAD
+       if ($felter[11] eq "")    { next; }                             # Apache sometines forget some fields, ISS sometimes write blank lines
+       if ($felter[6] =~ /^RC=/) { next; }                             # A strange log record we need to forget
+
+       $felter[3] =~ s/\//:/g;
+       $felter[3] =~ s/\[//;
+       @dateparts=split(/:/,$felter[3]);                               # Split DD:Month:YYYY:HH:MM:SS
+       if ( $monthnum{$dateparts[1]} ) { $dateparts[1]=$monthnum{$dateparts[1]}; }     # Change lib month in num month if necessary
+       $timeconnexion=$dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5];     # YYYYMMDDHHMMSS
+       if ($timeconnexion <= $LastTime) { next; }              # Skip if not a new line
+
+       if (&SkipHost($felter[0])) { next; }                    # Skip with some client host IP address
+       if (&SkipFile($felter[6])) { next; }                    # Skip with some URL
+       if (($felter[8] != 200) && ($felter[8] != 304)) {               # Stop if HTTP server return code != 200 and 304
+               if ($felter[8] =~ /^[\d][\d][\d]$/) {                           # Keep error code
+                       $errors{$felter[8]}++;
+                       if ($felter[8] == 404) { $sider404{$felter[6]}++; }
+                       next;
+                       }
+               print "Log file <b>$LogFile</b> doesn't seem to have good format. Suspect line is<br>";
+               print "<font color=#888888><i>$line</i></font><br>";
+               print "<br><b>LogFormat</b> parameter is <b>$LogFormat</b>, this means each line in your log file need to have ";
+               if ($LogFormat == 2) {
+                               print "<b>\"MSIE Extended W3C log format\"</b> like this:<br>";
+                               print "<font color=#888888><i>date time c-ip c-username cs-method cs-uri-sterm cs-status cs-bytes cs-version cs(User-Agent) cs(Referer)</i></font><br>"
+                       }
+               else {
+                               print "<b>\"combined log format\"</b> like this:<br>";
+                               print "<font color=#888888><i>62.161.78.73 - - [19/Jul/2000:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"</i></font><br>";
+               }
+               error("<br>");
+       }
+
+       # Record is approved. Start of line process
+       if ($LogFormat == 1) {
+               # To correct bad format of some old apache log (field 10 is twice in line)
+#              if ($felter[10] =~ /^$felter[11],/) {
+#                   for ($ix=12; $ix<=$#felter; $ix++) { $felter[$ix-1] = $felter[$ix]; }
+#                   }
+               # Define $UserAgent in one string (no ' ') like "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)"
+               for ($ix=12; $ix<=$#felter; $ix++) {
+                       $felter[11] .= "_"; $felter[11] .= $felter[$ix];
+               }
+       }
+
+       $felter[11] =~ s/\+/_/g;
+       $UserAgent = $felter[11];
+       $UserAgent =~ tr/A-Z/a-z/;
+
+       # Robot ? If yes, we stop here
+       #-----------------------------
+       $foundrobot=0;
+       if (!$TmpHashNotRobot{$UserAgent}) {    # TmpHashNotRobot is a temporary hash table to increase speed
+               foreach $bot (keys %RobotHash) { if ($UserAgent =~ /$bot/) { $robot{$bot}++; $robot_l{$bot}=$timeconnexion ; $foundrobot=1; last; }     }
+               if ($foundrobot == 1) { next; }
+               $TmpHashNotRobot{$UserAgent}=1;         # Last time, we won't search if robot or not. We know it's not.
+       }
+
+       # Canonize and clean target URL and referrer URL
+       $felter[6] =~ s/\/$DefaultFile$/\//;    # Replace default page name with / only
+       $felter[6] =~ s/\?.*//;                                 # Trunc CGI parameters in URL get
+       $felter[6] =~ s/\/\//\//g;                              # Because some targeted url were taped with 2 / (Ex: //rep//file.htm)
+
+       # Check if page or not
+       $PageBool=1;
+       foreach $cursor (@NotPageList) { if ($felter[6] =~ /$cursor$/) { $PageBool=0; last; } }
+       
+       # Analyze: Date - Hour - Pages - Hits - Kilo
+       #-------------------------------------------
+       if ($FirstTime eq 0) { $FirstTime=$dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5]; }
+       if ($PageBool) {
+               $time_p[$dateparts[3]]++; $indic3{$month}++;            #Count accesses per hour (page)
+               $sider_p{$felter[6]}++;                                                         #Count accesses per page (page)
+               }
+       $time_h[$dateparts[3]]++; $indic4{$month}++;                    #Count accesses per hour (hit)
+       $time_k[$dateparts[3]]+=$felter[9]; $indic5{$month}++;  #Count accesses per hour (kb)
+       $sider_h{$felter[6]}++;                                                                 #Count accesses per page (hit)
+       $sider_k{$felter[6]}+=$felter[9];                                               #Count accesses per page (kb)
+
+       # Analyze: IP-address
+       #--------------------
+       $found=0;
+       $Host=$felter[0];
+       if ($Host =~ /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/) {
+               # Doing DNS lookup
+           if ($DNSLookup) {
+                       $new=$TmpHashDNSLookup{$Host};  # TmpHashDNSLookup is a temporary hash table to increase speed
+                       if (!$new) {    # if $new undefined, $Host not yet resolved
+                               $new=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);       # This is very slow may took 20 seconds
+                               if ($new eq "") {       $new="ip"; }
+                               $TmpHashDNSLookup{$Host}=$new;
+                       }
+
+                       # Here $Host is still xxx.xxx.xxx.xxx and $new is name or "ip" if reverse failed)
+                       if ($new ne "ip") { $Host=$new; }
+               }
+           # If we're not doing lookup or if it failed, we still have an IP address in $Host
+           if (!$DNSLookup || $new eq "ip") {
+                         if ($PageBool) {
+                                       if (int($timeconnexion) > int($unknownip_l{$Host}+$VisitTimeOut)) { $TotalVisits++; $indic1{$month}++; }
+                                       if ($unknownip_l{$Host} eq "") { $indic2{$month}++; }
+                                       $unknownip_l{$Host}=$timeconnexion;             # Table of (all IP if !DNSLookup) or (all unknown IP) else
+                                       $hostmachine_p{"Unknown"}++;
+                                       $domener_p{"ip"}++;
+                         }
+                         $hostmachine_h{"Unknown"}++;
+                         $domener_h{"ip"}++;
+                         $hostmachine_k{"Unknown"}+=$felter[9];
+                         $domener_k{"ip"}+=$felter[9];
+                         $found=1;
+             }
+    }
+
+       # Here, $Host = hostname or xxx.xxx.xxx.xxx
+       if (!$found) {                                  # If not processed yet ($Host = hostname)
+               $Host =~ tr/A-Z/a-z/;
+               $_ = $Host;
+
+               # Count hostmachine
+               if (!$FullHostName) { s/^[\w\-]+\.//; };
+               if ($PageBool) {
+                       if (int($timeconnexion) > int($hostmachine_l{$_}+$VisitTimeOut)) { $TotalVisits++; $indic1{$month}++; }
+                       if ($hostmachine_l{$_} eq "") { $indic2{$month}++; }
+                       $hostmachine_p{$_}++;
+                       $hostmachine_l{$_}=$timeconnexion;
+                       }
+               $hostmachine_h{$_}++;
+               $hostmachine_k{$_}+=$felter[9];
+
+               # Count top-level domain
+               if (/\./) { /\.([\w]+)$/; $_=$1; };
+               if ($DomainsHash{$_}) {
+                        if ($PageBool) { $domener_p{$_}++; }
+                        $domener_h{$_}++;
+                        $domener_k{$_}+=$felter[9];
+                        }
+               else {
+                        if ($PageBool) { $domener_p{"ip"}++; }
+                        $domener_h{"ip"}++;
+                        $domener_k{"ip"}+=$felter[9];
+               }
+       }
+
+       # Analyze: Browser
+       #-----------------
+       $found=0;
+
+       # IE ? (For higher speed, we start whith IE, the most often used. This avoid other tests if found)
+       if ($UserAgent =~ /msie/ && !($UserAgent =~ /webtv/)) {
+               $browser{"msie"}++;
+               $UserAgent =~ /msie_(\d)\./;  # $1 now contains major version no
+               $msiever[$1]++;
+               $found=1;
+       }
+
+       # Netscape ?
+       if (!$found) {
+               if ($UserAgent =~ /mozilla/ && !($UserAgent =~ /compatible/)) {
+               $browser{"netscape"}++;
+               $UserAgent =~ /\/(\d)\./;  # $1 now contains major version no
+               $nsver[$1]++;
+               $found=1;
+               }
+       }
+
+       # Other ?
+       if (!$found) {
+               foreach $key (keys %BrowsersHash) {
+               if ($UserAgent =~ /$key/) { $browser{$key}++; $found=1; last; }
+               }
+       }
+
+       # Unknown browser ?
+       if (!$found) { $browser{"Unknown"}++; $unknownrefererbrowser_l{$felter[11]}=$timeconnexion; }
+
+       # Analyze: OS
+       #------------
+       $found=0;
+       if (!$TmpHashOS{$UserAgent}) {
+               # OSHash list ?
+               foreach $key (keys %OSHash) {
+                       if ($UserAgent =~ /$key/) { $OS{$key}++; $found=1; $TmpHashOS{$UserAgent}=$key; last; }
+               }
+               # OSAlias list ?
+               if (!$found) {
+                       foreach $key (keys %OSAlias) {
+                               if ($UserAgent =~ /$key/) { $OS{$OSAlias{$key}}++; $found=1; $TmpHashOS{$UserAgent}=$OSAlias{$key}; last; }
+                       }
+               }
+               # Unknown OS ?
+               if (!$found) { $OS{"Unknown"}++; $unknownreferer_l{$felter[11]}=$timeconnexion; }
+       }
+       else {
+               $OS{$TmpHashOS{$UserAgent}}++;  
+       }
+       
+       # Analyze: Referrer
+       #------------------
+       $found=0;
+
+       # Direct ?
+       if ($felter[10] eq "-") { $HitFrom[0]++; $found=1; }
+    
+       # HTML link ?
+       if (!$found) {
+               if ($felter[10] =~ /^http/)     {
+                       $internal_link=0;
+                       if (($felter[10] =~ /^http:\/\/www.$LocalSiteWithoutwww/i) || ($felter[10] =~ /^http:\/\/$LocalSiteWithoutwww/i)) { $internal_link=1; }
+                       else {
+                               foreach $HostAlias (@HostAliases) {
+                                       if ($felter[10] =~ /^http:\/\/$HostAlias/) { $internal_link=1; last; }
+                                       }
+                       }
+
+                       if ($internal_link) {
+                           # Intern (This hit came from another page of the site)
+                           $HitFrom[4]++;
+                               $found=1;
+                       }
+                       else {
+                           # Extern (This hit came from an external web site)
+                               @refurl=split(/\?/,$felter[10]);
+                               $refurl[0] =~ tr/A-Z/a-z/;
+                           foreach $key (keys %SearchEnginesHash) {
+                                       if ($refurl[0] =~ /$key/) {
+                                               # This hit came from a search engine
+                                               $HitFrom[2]++;
+                                               $SEReferrals{$key}++;
+                                               # Extract keywords
+                                               $refurl[1] =~ tr/A-Z/a-z/;
+                                               @paramlist=split(/&/,$refurl[1]);
+                                               foreach $param (@paramlist) {
+                                                       $keep=1;
+                                                       &UnescapeURL($param);                           # Change xxx=aaa+bbb/ccc+ddd%20eee'fff into xxx=aaa bbb ccc ddd eee fff
+                                                       foreach $paramtoexclude (@WordsToCleanSearchUrl) {
+                                                               if ($param =~ /.*$paramtoexclude.*/i) { $keep=0; last; } # Not the param with search criteria
+                                                       }
+                                                       if ($keep == 0) { next; }                       # Do not keep this URL parameter because is in exclude list
+                                                       # Ok. xxx=aaa bbb ccc ddd eee fff is a search parameter line
+                                                       $param =~ s/.*=//g;                                     # Cut chars xxx=
+                                                       @wordlist=split(/ /,$param);            # Split aaa bbb ccc ddd eee fff into a wordlist array
+                                                       foreach $word (@wordlist) {
+                                                               if ((length $word) > 2) { $searchwords{$word}++; }      # Keep word only if word length is 3 or more
+                                                       }
+                                               }
+                                               $found=1;
+                                               last;
+                                       }
+                               }
+                               if (!$found) {
+                                       # This hit came from a site other than a search engine
+                                       $HitFrom[3]++;
+                                       $PageRefs{$felter[10]}++;
+                                       $found=1;
+                               }
+                       }
+               }
+       }
+    
+       # News link ?
+       if (!$found) {
+               if ($felter[10] =~ /^news/) {
+                       $HitFrom[1]++;
+                       $found=1;
+               }
+       }
+
+}
+close LOG;
+if ($BenchMark == 1) {
+       ($secbench,$minbench,$hourbench,$daybench,$monthbench,$yearbench,$wdaybench,$ydaybench,$isdstbench) = localtime(time);
+       print "End of processing log file: $hourbench:$minbench:$secbench<br>";
+       }
+if ($dateparts[0]) { $LastTime = $dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5]; }
+
+
+#---------------------------
+# SAVING NEW CURRENT MONTH
+#---------------------------
+
+open(HISTORYTMP,">$DIR$PROG$month$year.tmp.$$") || error("Couldn't open file $DIR$PROG$month$year.tmp.$$: $!");
+
+print HISTORYTMP "FirstTime $FirstTime\n";
+print HISTORYTMP "LastTime $LastTime\n";
+
+print HISTORYTMP "TotalVisits $TotalVisits\n";
+
+print HISTORYTMP "BEGIN_DOMAIN\n";
+foreach $key (keys %domener_h) {
+       $page=$domener_p{$key};$kilo=$domener_k{$key};
+       if ($page == "") {$page=0;}
+       if ($kilo == "") {$kilo=0;}
+       print HISTORYTMP "$key $page $domener_h{$key} $kilo\n"; next;
+       }
+print HISTORYTMP "END_DOMAIN\n";
+
+print HISTORYTMP "BEGIN_VISITOR\n";
+foreach $key (keys %hostmachine_h) {
+       $page=$hostmachine_p{$key};$kilo=$hostmachine_k{$key};
+       if ($page == "") {$page=0;}
+       if ($kilo == "") {$kilo=0;}
+       print HISTORYTMP "$key $page $hostmachine_h{$key} $kilo $hostmachine_l{$key}\n"; next;
+       }
+print HISTORYTMP "END_VISITOR\n";
+
+print HISTORYTMP "BEGIN_UNKNOWNIP\n";
+foreach $key (keys %unknownip_l) { print HISTORYTMP "$key $unknownip_l{$key}\n"; next; }
+print HISTORYTMP "END_UNKNOWNIP\n";
+
+print HISTORYTMP "BEGIN_SIDER\n";
+foreach $key (keys %sider_p) { print HISTORYTMP "$key $sider_p{$key}\n"; next; }
+print HISTORYTMP "END_SIDER\n";
+
+print HISTORYTMP "BEGIN_TIME\n";
+for ($ix=0; $ix<=23; $ix++) { print HISTORYTMP "$ix $time_p[$ix] $time_h[$ix] $time_k[$ix]\n"; next; }
+print HISTORYTMP "END_TIME\n";
+
+print HISTORYTMP "BEGIN_BROWSER\n";
+foreach $key (keys %browser) { print HISTORYTMP "$key $browser{$key}\n"; next; }
+print HISTORYTMP "END_BROWSER\n";
+print HISTORYTMP "BEGIN_NSVER\n";
+for ($i=1; $i<=$#nsver; $i++) { print HISTORYTMP "$i $nsver[$i]\n"; next; }
+print HISTORYTMP "END_NSVER\n";
+print HISTORYTMP "BEGIN_MSIEVER\n";
+for ($i=1; $i<=$#msiever; $i++) { print HISTORYTMP "$i $msiever[$i]\n"; next; }
+print HISTORYTMP "END_MSIEVER\n";
+print HISTORYTMP "BEGIN_OS\n";
+foreach $key (keys %OS) { print HISTORYTMP "$key $OS{$key}\n"; next; }
+print HISTORYTMP "END_OS\n";
+
+print HISTORYTMP "BEGIN_ROBOT\n";
+foreach $key (keys %robot) { print HISTORYTMP "$key $robot{$key} $robot_l{$key}\n"; next; }
+print HISTORYTMP "END_ROBOT\n";
+
+print HISTORYTMP "BEGIN_UNKNOWNREFERER\n";
+foreach $key (keys %unknownreferer_l) { print HISTORYTMP "$key $unknownreferer_l{$key}\n"; next; }
+print HISTORYTMP "END_UNKNOWNREFERER\n";
+print HISTORYTMP "BEGIN_UNKNOWNREFERERBROWSER\n";
+foreach $key (keys %unknownrefererbrowser_l) { print HISTORYTMP "$key $unknownrefererbrowser_l{$key}\n"; next; }
+print HISTORYTMP "END_UNKNOWNREFERERBROWSER\n";
+
+print HISTORYTMP "HitFrom0 $HitFrom[0]\n";
+print HISTORYTMP "HitFrom1 $HitFrom[1]\n";
+print HISTORYTMP "HitFrom2 $HitFrom[2]\n";
+print HISTORYTMP "HitFrom3 $HitFrom[3]\n";
+print HISTORYTMP "HitFrom4 $HitFrom[4]\n";
+
+print HISTORYTMP "BEGIN_SEREFERRALS\n";
+foreach $key (keys %SEReferrals) { print HISTORYTMP "$key $SEReferrals{$key}\n"; next; }
+print HISTORYTMP "END_SEREFERRALS\n";
+
+print HISTORYTMP "BEGIN_PAGEREFS\n";
+foreach $key (keys %PageRefs) { print HISTORYTMP "$key $PageRefs{$key}\n"; next; }
+print HISTORYTMP "END_PAGEREFS\n";
+
+print HISTORYTMP "BEGIN_SEARCHWORDS\n";
+foreach $key (keys %searchwords) { print HISTORYTMP "$key $searchwords{$key}\n"; next; }
+print HISTORYTMP "END_SEARCHWORDS\n";
+
+print HISTORYTMP "BEGIN_ERRORS\n";
+foreach $key (keys %errors) { print HISTORYTMP "$key $errors{$key}\n"; next; }
+print HISTORYTMP "END_ERRORS\n";
+
+print HISTORYTMP "BEGIN_SIDER_404\n";
+foreach $key (keys %sider404) { print HISTORYTMP "$key $sider404{$key}\n"; next; }
+print HISTORYTMP "END_SIDER_404\n";
+
+close(HISTORYTMP);
+
+
+# Archive LOG file into ARCHIVELOG
+if ($ArchiveLogRecords == 1) {
+       if ($BenchMark == 1) { print "Start of archiving log records: ";print localtime(); print "<br>"; }
+       open(LOG,"+<$LogFile") || error("Error: Enable to archive log records of $LogFile into $DIR$PROG$month$year.log because source can't be opened for read and write: $!<br>\n");
+       open(ARCHIVELOG,">>$DIR$PROG$month$year.log") || error("Error: Couldn't open file $DIR$PROG$month$year.log to archive current log: $!");
+       while (<LOG>) { print ARCHIVELOG $_; }
+       close(ARCHIVELOG);
+       if ($BenchMark == 1) { print "End of archiving log records: ";print localtime(); print "<br>"; }
+       }
+else {
+       open(LOG,"+<$LogFile");
+}
+# Rename HISTORYTMP file into HISTORYTXT and purge LOG if ok
+if (rename "$DIR$PROG$month$year.tmp.$$", "$DIR$PROG$month$year.txt") {
+       truncate(LOG,0) || warning("Warning: $PROG couldn't purge logfile <b>$LogFile</b>.<br>\nBe aware of purging this file sometimes to keep good performances. Think to launch $PROG just before this to save in AWStats history text file all informations logfile contains.");
+       }
+close(LOG);
+chmod 438,"$DIR$PROG$month$year.txt"; chmod 438,"$DIR$PROG$month$year.log";
+
+
+#----------------------------------
+# READING OLD HISTORY FILES TO ADD
+#----------------------------------
+
+# Loop on each old month files
+for ($ix=($month-1); $ix>=1; $ix--) {
+       $monthix=$ix;if ($monthix < 10) { $monthix  = "0$monthix"; }
+       $fic="$DIR$PROG$monthix$year.txt";
+       &Read_History_File($monthix);
+}
+
+
+#---------------------------------------------------------------------
+# SHOW STATISTICS
+#---------------------------------------------------------------------
+
+if ($QueryString =~ /unknownip/) {
+       print "<a name=\"UNKOWNIP\"></a>";
+       $tab_titre=$message[45][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH align=left>$message[48][$Lang]</TH><TH align=center>$message[9][$Lang]</TH>\n";
+       @sortunknownip=sort { $SortDir*$unknownip_l{$a} <=> $SortDir*$unknownip_l{$b} } keys (%unknownip_l);
+       foreach $key (@sortunknownip) {
+               $yearcon=substr($unknownip_l{$key},0,4);
+               $monthcon=substr($unknownip_l{$key},4,2);
+               $daycon=substr($unknownip_l{$key},6,2);
+               $hourcon=substr($unknownip_l{$key},8,2);
+               $mincon=substr($unknownip_l{$key},10,2);
+               if ($Lang == 1) { print "<tr align=left><td>$key</td><td align=center>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr align=left><td>$key</td><td align=center>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /unknownrefererbrowser/) {
+       print "<a name=\"UNKOWNREFERERBROWSER\"></a>";
+       $tab_titre=$message[50][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH align=left>Referer</TH><TH align=center>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownrefererbrowser=sort { $SortDir*$unknownrefererbrowser_l{$a} <=> $SortDir*$unknownrefererbrowser_l{$b} } keys (%unknownrefererbrowser_l);
+       foreach $key (@sortunknownrefererbrowser) {
+               $yearcon=substr($unknownrefererbrowser_l{$key},0,4);
+               $monthcon=substr($unknownrefererbrowser_l{$key},4,2);
+               $daycon=substr($unknownrefererbrowser_l{$key},6,2);
+               $hourcon=substr($unknownrefererbrowser_l{$key},8,2);
+               $mincon=substr($unknownrefererbrowser_l{$key},10,2);
+               if ($Lang == 1) { print "<tr align=left><td>$key</td><td align=center>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr align=left><td>$key</td><td align=center>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /unknownreferer/) {
+       print "<a name=\"UNKOWNREFERER\"></a>";
+       $tab_titre=$message[46][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH align=left>Referer</TH><TH align=center>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownreferer=sort { $SortDir*$unknownreferer_l{$a} <=> $SortDir*$unknownreferer_l{$b} } keys (%unknownreferer_l);
+       foreach $key (@sortunknownreferer) {
+               $yearcon=substr($unknownreferer_l{$key},0,4);
+               $monthcon=substr($unknownreferer_l{$key},4,2);
+               $daycon=substr($unknownreferer_l{$key},6,2);
+               $hourcon=substr($unknownreferer_l{$key},8,2);
+               $mincon=substr($unknownreferer_l{$key},10,2);
+               if ($Lang == 1) { print "<tr align=left><td>$key</td><td align=center>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr align=left><td>$key</td><td align=center>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /notfounderror/) {
+       print "<a name=\"NOTFOUNDERROR\"></a>";
+       $tab_titre=$message[47][$Lang];
+       &tab_head;
+       print "<TR bgcolor=$color_TableBGRowTitle align=center><TH align=left>URL</TH><TH bgcolor=$color_h>$message[49][$Lang]</TH></TR>\n";
+       @sortsider404=sort { $SortDir*$sider404{$a} <=> $SortDir*$sider404{$b} } keys (%sider404);
+       foreach $key (@sortsider404) {
+               print "<tr align=center><td align=left>$key</td><td>$sider404{$key}</td></tr>";
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /browserdetail/) {
+       print "<a name=\"BROWSERDETAIL\"></a>";
+
+       print "<a name=\"NETSCAPE\"></a><BR>";
+       $tab_titre=$message[33][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left>Version</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#nsver; $i++) {
+               if ($nsver[$i] gt 0) {
+                       $h=$nsver[$i]; $p=int($nsver[$i]/$browser{"netscape"}*1000)/10; $p="$p&nbsp;%";
+               }
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
+               }
+               print "<TR align=center><TD align=left>Mozilla/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+       }
+       &tab_end;
+
+       print "<a name=\"MSIE\"></a><BR>";
+       $tab_titre=$message[34][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left>Version</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#msiever; $i++) {
+               if ($msiever[$i] gt 0) {
+                       $h=$msiever[$i]; $p=int($msiever[$i]/$browser{"msie"}*1000)/10; $p="$p&nbsp;%";
+               }
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
+               }
+               print "<TR align=center><TD align=left>MSIE/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+       }
+       &tab_end;
+
+       &html_end;
+       exit(0);
+       }
+
+
+if ($BenchMark == 1) { print "Start of sorting: ";print localtime();print "<br>"; }
+@RobotArray=keys %RobotHash;
+@SearchEnginesArray=keys %SearchEnginesHash;
+@sortdomains_h=sort { $SortDir*$domener_h{$a} <=> $SortDir*$domener_h{$b} } keys (%domener_h);
+@sortdomains_k=sort { $SortDir*$domener_k{$a} <=> $SortDir*$domener_k{$b} } keys (%domener_k);
+@sorthosts_h=sort { $SortDir*$hostmachine_h{$a} <=> $SortDir*$hostmachine_h{$b} } keys (%hostmachine_h);
+@sortsiders=sort { $SortDir*$sider_p{$a} <=> $SortDir*$sider_p{$b} } keys (%sider_p);
+@sortbrowsers=sort { $SortDir*$browser{$a} <=> $SortDir*$browser{$b} } keys (%browser);
+@sortos=sort { $SortDir*$OS{$a} <=> $SortDir*$OS{$b} } keys (%OS);
+@sortsereferrals=sort { $SortDir*$SEReferrals{$a} <=> $SortDir*$SEReferrals{$b} } keys (%SEReferrals);
+@sortpagerefs=sort { $SortDir*$PageRefs{$a} <=> $SortDir*$PageRefs{$b} } keys (%PageRefs);
+@sortsearchwords=sort { $SortDir*$searchwords{$a} <=> $SortDir*$searchwords{$b} } keys (%searchwords);
+@sorterrors=sort { $SortDir*$errors{$a} <=> $SortDir*$errors{$b} } keys (%errors);
+if ($BenchMark == 1) { print "End of sorting: ";print localtime(); print "<br>"; }
+
+# English tooltips
+if (($Lang == 0) || ($Lang == 2)) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       We count a new visits for each new <b>incoming visitor</b> viewing a page and who was not connected during last <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Number of client hosts (<b>IP address</b>) who came to visit the site (and to see at list one <b>page</b>).<br>
+       This number is about the number of <b>different physical persons</b> who had reached the site one day.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Number of time a <b>page</b> of the site is <b>viewed</b> (Sum for all visitors, all visits).<br>
+       This counter differs from \"hits\" because it counts only HTML pages and not images and other files.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Number of time a <b>page, image, file</b> of the site is <b>viewed</b> or <b>downloaded</b> by someone.<br>
+       This counter is given for indication, \"pages\" counter is often prefered.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       Number of <b>kilobytes</b> downloaded by visitors.<br>
+       It\'s the amount of data caused by download of all <b>pages</b>, <b>images</b> and <b>files</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       $PROG is able to recognize access to the site after a <b>search</b> from the <b>".(@SearchEnginesArray)." most popular Internet Search Engines</b> (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       List of all <b>external pages</b> that own a link followed to access the site (Only the <b>$MaxNbOfRefererShown</b> most often used external pages are shown.\n
+       Links used from the result of a search engine are not included here because they are included on line above this one.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       This tab shows list of most often used <b>keywords</b> to find your site from Internet Search Engines web sites
+       (Search from <b>".(@SearchEnginesArray)."</b> search engines among the most popular are recognized, like Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Robots are <b>automatic computer visitors</b> scanning your web site to index it, to collect statistics on Internet Web sites or to see if your site is online.<br>
+       $PROG is able to recognize <b>".(@RobotArray)."</b> robots</b>.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       No description for this error.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       Request was understood by server but will be processed later.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       Server has processed the request but there is no document to send.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Partial content.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       Requested document was moved and is now at another address given in awnswer.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       No description for this error.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Syntax error, server didn\'t understand request.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Try to reach an <b>URL where identification with login/password was required</b>.<br>
+       A too important number can show you someone making brute cracking of your site (hoping to enter a secured area by trying different logins/password).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Try to reach an <b>URL not configured to be reachable, even with an identification</b> (for example, an URL of a directory not defined as \"browsable\".).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Try to reach a <b>non existing URL</b>. So it means an invalid link somewhere or a typing error made by visitor who tape a direct URL.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       Server has taken a <b>too long time</b> to respond to request. It might be a CGI script so slow that server need to kill this job or a overcharged web server.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Internal error. This error is often caused by a CGI program that had finished abnormally (coredump for example).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Unknown requested action.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Code returned by a HTTP server that works as a proxy or gateway when real targeted server doesn\'t answer successfully to the client request.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Internal server error.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway Time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       HTTP Version Not Supported.
+       </DIV>
+       ";
+}
+
+# French tooltips
+if ($Lang == 1) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       On considère une nouvelle visite pour <b>chaque arrivée</b> d un visiteur consultant une page et ne s étant pas connecté dans les dernières <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Nombre de hotes (<b>adresse IP</b>) utilisés pour accéder au site (et voir au moins une <b>page</b>).<br>
+       Ce chiffre reflète le nombre de <b>personnes physiques</b> différentes ayant un jour accédé au site.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Nombre de fois qu une <b>page</b> du site est <b>vue</b> (Cumul de tout visiteur, toute visite).<br>
+       Ce compteur différe des \"hits\" car il ne comptabilise que les pages HTML et non les images ou autres fichiers.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Nombre de fois qu une <b>page, image, fichier</b> du site est <b>vu</b> ou <b>téléchargé</b> par un visiteur.<br>
+       Ce compteur est donné à titre indicatif, le compteur \"pages\" etant préféré.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       Nombre de <b>kilo octets</b> téléchargé lors des visites du site.<br>
+       Il s agit aussi bien du volume de données du au chargement des <b>pages</b> et <b>images</b> que des <b>fichiers</b> téléchargés.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       $PROG est capable de reconnaitre l acces au site issu d une <b>recherche</b> depuis les <b>".(@SearchEnginesArray)." moteurs de recherche Internet</b> les plus connus (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Liste des <b>pages de sites externes</b> contenant un lien suivi pour accéder à ce site (Seules les <b>$MaxNbOfRefererShown</b> pages externes les plus utilisées sont affichées).\n
+       Les liens issus du résultat d un moteur de recherche connu n apparaissent pas ici, car comptabilisés à part sur la ligne juste au-dessus.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Ce tableau offre la liste des <b>mots</b> les plus souvent utilisés pour retrouver et accéder au site depuis
+       un moteur de recherche Internet (Les recherches depuis <b>".(@SearchEnginesArray)."</b> moteurs de recherche parmi les pluspopulaires sont reconnues, comme Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Les robots sont des <b>automates visiteurs</b> scannant le site dans le but de l indexer, d obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.<br>
+       $PROG reconnait <b>".(@RobotArray)."</b> robots</b>.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       Contenu partiel renvoyé.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       La requête a été enregistrée par le serveur mais sera exécutée plus tard.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       Le serveur a traité la demande mais il n existe aucun document à renvoyer.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Contenu partiel renvoyé.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       Le document réclamé a été déplacé et se trouve maintenant à une autre adresse mentionnée dans la réponse.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       Aucun descriptif pour cette erreur.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Erreur de syntaxe, le serveur n a pas compris la requête.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Tentatives d accès à une <b>URL nécessitant identification avec un login/mot de passe invalide</b>.<br>
+       Un nombre trop élévé peut mettre en évidence une tentative de crackage brute du site (par accès répété de différents logins/mots de passe).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Tentatives d accès à une <b>URL non configurée pour etre accessible, même avec une identification</b> (par exemple, une URL d un répertoire non défini comme étant \"listable\").
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Tentatives d accès à une <b>URL inexistante</b>. Il s agit donc d un lien invalide sur le site ou d une faute de frappe d un visiteur qui a saisie une mauvaise URL directement.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       Le serveur mis un <b>temps trop important</b> pour répondre à la requête. Il peut s agir d un script CGI trop lent sur le serveur forcé d abandonner le traitement ou d une saturation du site.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Erreur interne au serveur. Cette erreur est le plus souvant renvoyé lors de l arrêt anormal d un script CGI (par exemple suite à un coredump du CGI).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Le serveur ne prend pas en charge l action demandée.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Code renvoyé par un serveur HTTP qui fonctionne comme proxy ou gateway lorsque le serveur réel consulté ne réagit pas avec succès à la demande du client.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Erreur interne au serveur.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway Time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       Version HTTP non supporté.
+       </DIV>
+       ";
+}
+
+# Spannish tooltips
+if ($Lang == 3) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       Se considera un nueva vista por <b>cada nuevo visitante</b> que consulte una página y que no haya accesado el sitio en los últimos <b>".($VisitTimeOut/10000*60)." mins.</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Número de Servidores (<b>direcciones IP</b>) que entran a un sitio (y que por lo menos visitan una <b>página</b>).<br>
+       Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accesado al sitio en un día.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Número de ocasiones que una <b>página</b> del sitio ha sido <b>vista</b> (La suma de todos los visitantes incluyendo múltiples visitas).<br>
+       Este contador se distingue de \"hits\" porque cuenta sólo las páginas HTML y no los gráficos u otros archivos o ficheros.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       El número de ocasiones que una <b>página, imagen, archivo o fichero</b> de un sitio es <b>visto</b> o <b>descargado</b> por un visitante.<br>
+       Este contador sirve de referencia, pero el contador de \"páginas\" representa un dato mercadotécnico generalmente más útil y por lo tanto se recomienda.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       El número de <b>kilo bytes</b> descargados por los visitantes del sitio.<br>
+       Se refiere al volumen de datos descargados por todas las <b>páginas</b>, <b>imágenes</b> y <b>archivos o ficheros</b> medidos en kilo bytes.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       El programa $PROG es capaz de reconocer una visita a su sitio luego de cada <b>búsqueda</b> desde cualquiera de los <b>".(@SearchEnginesArray)." motores de búsqueda y directorios Internet</b> más populares (Yahoo, Altavista, Lycos, Google, Terra, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Lista de <b>páginas de sitios externos</b> utilizadas para acceder o enlazarse con su sitio (Sólo las <b>$MaxNbOfRefererShown</b> páginas más utilizadas se encuentras enumeradas).\n
+       Los enlaces utilizados por los motores de búsqueda o directorios son excluidos porque ya han sido contabilizados en el rubro anterior.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Esta tabla muestra la lista de las <b>palabras clave</b> más utilizadas en los motores de búsqueda y directorios Internet para encontrar su sitio.
+       (El programa $PROG reconoce palabras clave usadas en los <b>".(@SearchEnginesArray)."</b> motores de búsqueda más populares, tales como Yahoo, Altavista, Lycos, Google, Voila, Terra etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Los Robots son <b>visitantes automáticos</b> que escanean o viajan por su sitio para indexarlo, o jerarquizarlo, para recopilar estadísticas de sitios Web, o para verificar si su sitio se encuentra conectado a la Red.<br>
+       El programa $PROG reconoce hasta <b>".(@RobotArray)."</b> Robots</b>.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       Error sin descripción.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       La solicitud ha sido computada pero el servidor la procesará más tarde.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       El servidor ha procesado la solicitud pero no existen documentos para enviar.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Contenido parcial.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       El documento solicitado ha sido reubicado y se encuentra en un URL proporcionado en la misma respuesta.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       Error sin descripción.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Error de sintaxis, el servidor no ha comprendido su solicitud.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Número de intentos por acceder un <b>URL que exige una combinación usuario/contraseña que ha sido invalida.</b>.<br>
+       Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Número de intentos por acceder un <b>URL configurado para no ser accesible, aún con una combinación usuario/contraseña</b> (p.e., un URL previamente definido como \"no navegable\").
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Número de intentos por acceder un <b>URL inexistente</b>. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       El servidor ha tomado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Solicitud desconocida por el servidor.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Código retornado por un servidor de protocolo HTTP el cual funge como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Error interno del servidor.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       Versión de protocolo HTTP no soportada.
+       </DIV>
+       ";
+}
+
+print "
+<SCRIPT JavaScript>
+       function ShowTooltip(fArg)
+       {
+               var tooltipOBJ = eval(\"document.all['tt\" + fArg + \"']\");
+               var tooltipOffsetTop = tooltipOBJ.scrollHeight + 35;
+               var testTop = (document.body.scrollTop + event.clientY) - tooltipOffsetTop;
+               var testLeft = event.clientX - 310;
+               var tooltipAbsLft = (testLeft < 0) ? 10 : testLeft;
+               var tooltipAbsTop = (testTop < document.body.scrollTop) ? document.body.scrollTop + 10 : testTop;
+               tooltipOBJ.style.posLeft = tooltipAbsLft; tooltipOBJ.style.posTop = tooltipAbsTop;
+               tooltipOBJ.style.visibility = \"visible\";
+       }
+       function HideTooltip(fArg)
+       {
+               var tooltipOBJ = eval(\"document.all['tt\" + fArg + \"']\");
+               tooltipOBJ.style.visibility = \"hidden\";
+       }
+</SCRIPT>
+
+";
+
+
+# SUMMARY
+#---------------------------------------------------------------------
+$tab_titre="$message[7][$Lang] $LocalSite";
+&tab_head;
+
+# TotalUnique
+foreach $key (keys %hostmachine_p) { if (($key ne "Unknown") && ($hostmachine_p{$key} > 0)) { $TotalUnique++; } }
+foreach $key (keys %unknownip_l) { $TotalUnique++; }
+# TotalDifferentPages
+$TotalDifferentPages=@sortsiders;
+# TotalPages TotalHits TotalBytes
+for ($ix=0; $ix<=23; $ix++) { $TotalPages+=$time_p[$ix]; $TotalHits+=$time_h[$ix]; $TotalBytes+=$time_k[$ix]; }
+# TotalDifferentKeywords
+$TotalDifferentKeywords=@sortsearchwords;
+# TotalKeywords
+foreach $key (keys %searchwords) { $TotalKeywords+=$searchwords{$key}; }
+# TotalErrors
+foreach $key (keys %errors) { $TotalErrors+=$errors{$key}; }
+# Ratio
+if ($TotalUnique > 0) { $RatioHosts=int($TotalVisits/$TotalUnique*100)/100; }
+if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024/$TotalVisits)*100)/100; }
+
+print "<TR align=center><TD><b>$message[8][$Lang]</b></TD><TD colspan=3 rowspan=2>$message[6][$Lang] $year</TD><TD><b>$message[9][$Lang]</b></TD></TR>";
+$yearcon=substr($FirstTime,0,4);$monthcon=substr($FirstTime,4,2);$daycon=substr($FirstTime,6,2);$hourcon=substr($FirstTime,8,2);$mincon=substr($FirstTime,10,2);
+print "<TR align=center><TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD>";
+$yearcon=substr($LastTime,0,4);$monthcon=substr($LastTime,4,2);$daycon=substr($LastTime,6,2);$hourcon=substr($LastTime,8,2);$mincon=substr($LastTime,10,2);
+print "<TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD></TR>";
+print "<TR align=center>";
+print "<TD width=20% bgcolor=$color_v onmouseover=\"ShowTooltip(1);\" onmouseout=\"HideTooltip(1);\">$message[10][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_w onmouseover=\"ShowTooltip(2);\" onmouseout=\"HideTooltip(2);\">$message[11][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_p onmouseover=\"ShowTooltip(3);\" onmouseout=\"HideTooltip(3);\">Pages</TD>";
+print "<TD width=20% bgcolor=$color_h onmouseover=\"ShowTooltip(4);\" onmouseout=\"HideTooltip(4);\">Hits</TD>";
+print "<TD width=20% bgcolor=$color_k onmouseover=\"ShowTooltip(5);\" onmouseout=\"HideTooltip(5);\">$message[44][$Lang]</TD></TR>";
+$kilo=int($TotalBytes/1024*100)/100;
+print "<TR align=center><TD><b>$TotalVisits</b><br>&nbsp;</TD><TD><b>$TotalUnique</b><br>($RatioHosts&nbsp;$message[52][$Lang])</TD><TD><b>$TotalPages</b><br>($RatioPages&nbsp;pages/$message[12][$Lang])</TD><TD><b>$TotalHits</b><br>($RatioHits&nbsp;hits/$message[12][$Lang])</TD><TD><b>$kilo $message[44][$Lang]</b><br>($RatioBytes&nbsp;$message[44][$Lang]/$message[12][$Lang])</TD></TR>\n";
+print "<TR valign=bottom><TD colspan=5 align=center>";
+print "<TABLE>";
+print "<TR valign=bottom>";
+$max_v=1;$max_u=1;$max_p=1;$max_h=1;$max_k=1;
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       if ($indic1{$monthix} > $max_v) { $max_v=$indic1{$monthix}; }
+       if ($indic2{$monthix} > $max_v) { $max_v=$indic2{$monthix}; }
+       if ($indic3{$monthix} > $max_p) { $max_p=$indic3{$monthix}; }
+       if ($indic4{$monthix} > $max_h) { $max_h=$indic4{$monthix}; }
+       if ($indic5{$monthix} > $max_k) { $max_k=$indic5{$monthix}; }
+}
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       $bredde_v=$indic1{$monthix}/$max_v*$Barheight/2;
+       $bredde_u=$indic2{$monthix}/$max_v*$Barheight/2;
+       $bredde_p=$indic3{$monthix}/$max_h*$Barheight/2;
+       $bredde_h=$indic4{$monthix}/$max_h*$Barheight/2;
+       $bredde_k=$indic5{$monthix}/$max_k*$Barheight/2;
+       $kilo=int(($indic5{$monthix}/1024)*100)/100;
+       print "<TD align=center>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=8 ALT=\"Visits: $indic1{$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_u\" HEIGHT=$bredde_u WIDTH=8 ALT=\"Visitors: $indic2{$monthix}\">";
+       print "&nbsp;";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=8 ALT=\"Pages: $indic3{$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=8 ALT=\"Hits: $indic4{$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=8 ALT=\"$message[44][$Lang]: $kilo\">";
+       print "</TD>\n";
+}
+print "</TR><TR>";
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       print "<TD align=center>$monthlib{$monthix}</TD>";
+}
+print "</TR></TABLE>";
+print "</TD></TR>";
+&tab_end;
+
+
+# MENU
+#---------------------------------------------------------------------
+print "<br>";
+
+print "<table width=100%><tr align=center><td>";
+print " <a href=\"#DOMAINS\"><font size=1>[$message[17][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#VISITOR\"><font size=1>[$message[18][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#ROBOTS\"><font size=1>[$message[53][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#PAGE\"><font size=1>[$message[19][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#HOUR\"><font size=1>[$message[20][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#BROWSER\"><font size=1>[$message[21][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#REFERER\"><font size=1>[$message[23][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#SEARCHWORDS\"><font size=1>[$message[24][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#ERRORS\"><font size=1>[$message[22][$Lang]]</font></a> &nbsp;";
+print "</td></tr></table>";
+
+print "<br><hr width=96%>";
+
+
+# BY COUNTRY/DOMAIN
+#---------------------------
+print "<a name=\"DOMAINS\"></a><BR>";
+$tab_titre="$message[25][$Lang]";
+&tab_head;
+print "<TR align=center BGCOLOR=$color_TableBGRowTitle><TH colspan=2>$message[17][$Lang]</TH><TH>Code</TH><TH bgcolor=$color_p>Pages</TH><TH bgcolor=$color_h>Hits</TH><TH bgcolor=$color_k>$message[44][$Lang]</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max_h=$domener_h{$sortdomains_h[0]}; }
+else            { $max_h=$domener_h{$sortdomains_h[$#sortdomains_h]}; }
+if ($SortDir<0) { $max_k=$domener_k{$sortdomains_k[0]}; }
+else            { $max_k=$domener_k{$sortdomains_k[$#sortdomains_k]}; }
+foreach $key (@sortdomains_h) {
+        if ($max_h > 0) { $bredde_p=$Barwidth*$domener_p{$key}/$max_h+1; }     # use max_h to enable to compare pages with hits
+        if ($max_h > 0) { $bredde_h=$Barwidth*$domener_h{$key}/$max_h+1; }
+        if ($max_k > 0) { $bredde_k=$Barwidth*$domener_k{$key}/$max_k+1; }
+               $page=$domener_p{$key};if ($page eq "") { $page=0; }
+        $kilo=int(($domener_k{$key}/1024)*100)/100;
+               if ($key eq "ip") {
+                       print "<TR align=center><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD align=left>$message[0][$Lang]</TD><TD align=center>$key</TD>";
+               }
+               else {
+                       print "<TR align=center><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD align=left>$DomainsHash{$key}</TD><TD align=center>$key</TD>";
+               }
+        print "<TD>$page</TD><TD>$domener_h{$key}</TD><TD>$kilo</TD>";
+        print "<TD align=left>";
+        print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"Pages: $domener_p{$key}\"><br>\n";
+        print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"Hits: $domener_h{$key}\"><br>\n";
+        print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$message[44][$Lang]: $kilo\">";
+        print "</TD></TR>\n";
+}
+&tab_end;
+
+
+# BY HOST/VISITOR
+#--------------------------
+print "<a name=\"VISITOR\"></a>";
+$tab_titre="TOP $MaxNbOfHostsShown $message[55][$Lang] ".(@sorthosts_h)." $message[26][$Lang] ($TotalUnique $message[11][$Lang])";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH align=left>$message[18][$Lang]</TH><TH bgcolor=$color_p>Pages</TH><TH bgcolor=$color_h>Hits</TH><TH bgcolor=$color_k>$message[44][$Lang]</TH><TH>$message[9][$Lang]</TH></TR>\n";
+$count=0;$total_p=0;$total_h=0;$total_k=0;
+foreach $key (@sorthosts_h)
+{
+  if ($hostmachine_h{$key}>=$MinHitHost) {
+       $page=$hostmachine_p{$key};if ($page eq "") { $page=0; }
+    $kilo=int(($hostmachine_k{$key}/1024)*100)/100;
+       if ($key eq "Unknown") {
+               print "<TR align=center><TD align=left><a href=\"$PROG.pl?action=unknownip&lang=$Lang\">$message[1][$Lang]</a></TD><TD>$page</TD><TD>$hostmachine_h{$key}</TD><TD>$kilo</TD><TD><a href=\"$PROG.pl?action=unknownip&lang=$Lang\">$message[3][$Lang]</a></TD></TR>\n";
+               }
+       else {
+               $yearcon=substr($hostmachine_l{$key},0,4);
+               $monthcon=substr($hostmachine_l{$key},4,2);
+               $daycon=substr($hostmachine_l{$key},6,2);
+               $hourcon=substr($hostmachine_l{$key},8,2);
+               $mincon=substr($hostmachine_l{$key},10,2);
+               print "<tr align=center><td align=left>$key</td><TD>$page</TD><TD>$hostmachine_h{$key}</TD><TD>$kilo</TD>";
+               if ($Lang != 0) { print "<td align=center>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<td align=center>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+
+    $total_p += $hostmachine_p{$key};
+    $total_h += $hostmachine_h{$key};
+    $total_k += $hostmachine_k{$key};
+  }
+  $count++;
+  if (!(($SortDir<0 && $count<$MaxNbOfHostsShown) || ($SortDir>0 && $#sorthosts_h-$MaxNbOfHostsShown < $count))) { last; }
+}
+$rest_p=$TotalPages-$total_p;
+$rest_h=$TotalHits-$total_h;
+$rest_k=int((($TotalBytes-$total_k)/1024)*100)/100;
+if ($rest_p > 0) { print "<TR align=center><TD align=left><font color=blue>$message[2][$Lang]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>$rest_k</TD><TD>&nbsp;</TD></TR>\n"; }    # All other visitors (known or not)
+&tab_end;
+
+
+# BY ROBOTS
+#----------------------------
+print "<a name=\"ROBOTS\"></a><BR>";
+$tab_titre=$message[53][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle onmouseover=\"ShowTooltip(16);\" onmouseout=\"HideTooltip(16);\"><TH align=left>Robot</TH><TH align=center bgcolor=$color_h width=80>Hits</TH><TH>$message[9][$Lang]</TH></TR>\n";
+@sortrobot=sort { $SortDir*$robot{$a} <=> $SortDir*$robot{$b} } keys (%robot);
+foreach $key (@sortrobot) {
+       $yearcon=substr($robot_l{$key},0,4);
+       $monthcon=substr($robot_l{$key},4,2);
+       $daycon=substr($robot_l{$key},6,2);
+       $hourcon=substr($robot_l{$key},8,2);
+       $mincon=substr($robot_l{$key},10,2);
+       if ($Lang != 0) { print "<tr align=left><td>$RobotHash{$key}</td><td align=center>$robot{$key}</td><td align=center>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+       else { print "<tr align=left><td>$RobotHash{$key}</td><td align=center>$robot{$key}</td><td align=center>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+}
+&tab_end;
+
+
+# BY PAGE
+#-------------------------
+print "<a name=\"PAGE\"></a><BR>";
+$tab_titre="TOP $MaxNbOfPageShown $message[55][$Lang] $TotalDifferentPages $message[27][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Page-URL</TH><TH bgcolor=$color_p align=center>&nbsp;$message[29][$Lang]&nbsp;</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max=$sider_p{$sortsiders[0]}; }
+else            { $max=$sider_p{$sortsiders[$#sortsiders]}; }
+$count=0;
+foreach $key (@sortsiders) {
+       if ((($SortDir<0 && $count<$MaxNbOfPageShown) || ($SortDir>0 && $#sortsiders-$MaxNbOfPageShown<$count)) && $sider_p{$key}>=$MinHitFile) {
+       print "<TR><TD>";
+               $nompage=$Aliases{$key};
+               if ($nompage eq "") { $nompage=$key; }
+               $nompage=substr($nompage,0,$MaxLengthOfURL);
+           if ($ShowLinksOnUrl) { print "<A HREF=\"$key\">$nompage</A>"; }
+           else                 { print "$nompage"; }
+           $bredde=$Barwidth*$sider_p{$key}/$max+1;
+               print "</TD><TD align=center>$sider_p{$key}</TD><TD><IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde HEIGHT=8 ALT=\"Pages: $sider_p{$key}\"></TD></TR>\n";
+       }
+       $count++;
+}
+&tab_end;
+
+
+# BY HOUR
+#----------------------------
+print "<a name=\"HOUR\"></a><BR>";
+$tab_titre="$message[20][$Lang]";
+&tab_head;
+
+print "<TR><TD align=center><TABLE><TR>\n";
+$max_p=0;$max_h=0;$max_k=0;
+for ($ix=0; $ix<=23; $ix++) {
+  print "<TH width=16>$ix</TH>";
+  if ($time_p[$ix]>$max_p) { $max_p=$time_p[$ix]; }
+  if ($time_h[$ix]>$max_h) { $max_h=$time_h[$ix]; }
+  if ($time_k[$ix]>$max_k) { $max_k=$time_k[$ix]; }
+}
+print "</TR>\n";
+
+print "<TR>\n";
+for ($ix=0; $ix<=23; $ix++) {
+       $hr=$ix+1;
+       if ($ix>11) { $hr=$ix-11; }
+       print "<TH><IMG SRC=\"$DirIcons\/clock\/hr$hr.png\" width=10></TH>";
+}
+print "</TR>\n";
+
+print "\n<TR VALIGN=BOTTOM>\n";
+for ($ix=0; $ix<=23; $ix++) {
+  if ($max_h > 0) { $bredde_p=$Barheight*$time_p[$ix]/$max_h+1; }
+  if ($max_h > 0) { $bredde_h=$Barheight*$time_h[$ix]/$max_h+1; }
+  if ($max_k > 0) { $bredde_k=$Barheight*$time_k[$ix]/$max_k+1; }
+  $kilo=int(($time_k[$ix]/1024)*100)/100;
+  print "<TD>";
+  print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=6 ALT=\"Pages: $time_p[$ix]\">";
+  print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"Hits: $time_h[$ix]\">";
+  print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$message[44][$Lang]: $kilo\">";
+  print "</TD>\n";
+}
+print "</TR></TABLE></TD></TR>\n";
+
+&tab_end;
+
+
+# BY BROWSER
+#----------------------------
+print "<a name=\"BROWSER\"></a><BR>";
+$tab_titre="$message[31][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left>Browser</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortbrowsers) {
+       $p=int($browser{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR align=center><TD align=left><a href=\"$PROG.pl?action=unknownrefererbrowser&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$browser{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       }
+       else {
+               print "<TR align=center><TD align=left>$BrowsersHash{$key}</TD><TD>$browser{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       }
+}
+&tab_end;
+
+
+# BY OS
+#----------------------------
+print "<a name=\"OS\"></a><BR>";
+$tab_titre=$message[35][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left colspan=2>OS</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortos) {
+       $p=int($OS{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR align=center><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD align=left><a href=\"$PROG.pl?action=unknownreferer&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$OS{$key}&nbsp;</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
+               }
+       else {
+               $nameicon = $OSHash{$key}; $nameicon =~ s/\ .*//; $nameicon =~ tr/A-Z/a-z/;
+               print "<TR align=center><TD><IMG SRC=\"$DirIcons\/os\/$nameicon.png\"></TD><TD align=left>$OSHash{$key}</TD><TD>$OS{$key}</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
+       }
+}
+&tab_end;
+
+
+# BY REFERENCE
+#---------------------------
+print "<a name=\"REFERER\"></a><BR>";
+$tab_titre="$message[36][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left>$message[37][$Lang]</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+if ($TotalHits > 0) { $_=int($HitFrom[0]/$TotalHits*1000)/10; }
+print "<TR align=center><TD align=left><b>$message[38][$Lang]:</b></TD><TD>$HitFrom[0]</TD><TD>$_&nbsp;%</TD></TR>\n";
+if ($TotalHits > 0) { $_=int($HitFrom[1]/$TotalHits*1000)/10; }
+print "<TR align=center><TD align=left><b>$message[39][$Lang]:</b></TD><TD>$HitFrom[1]</TD><TD>$_&nbsp;%</TD></TR>\n";
+#------- Referrals by search engine
+if ($TotalHits > 0) { $_=int($HitFrom[2]/$TotalHits*1000)/10; }
+print "<TR align=center onmouseover=\"ShowTooltip(13);\" onmouseout=\"HideTooltip(13);\"><TD align=left><b>$message[40][$Lang] :</b><br>";
+print "<TABLE>\n";
+foreach $SE (@sortsereferrals) {
+    print "<TR><TD align=left>- $SearchEnginesHash{$SE} </TD><TD align=right>$SEReferrals{\"$SE\"}</TD></TR>\n";
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$HitFrom[2]</TD><TD valign=top>$_&nbsp;%</TD></TR>\n";
+#------- Referrals by external HTML link
+if ($TotalHits > 0) { $_=(int($HitFrom[3]/$TotalHits*1000)/10); }
+print "<TR align=center onmouseover=\"ShowTooltip(14);\" onmouseout=\"HideTooltip(14);\"><TD align=left><b>$message[41][$Lang] :</b><br>";
+print "<TABLE>\n";
+$count=0;
+foreach $from (@sortpagerefs) {
+       if (!(($SortDir<0 && $count<$MaxNbOfRefererShown) || ($SortDir>0 && $#sortpagerefs-$MaxNbOfRefererShown < $count))) { last; }
+       if ($PageRefs{$from}>=$MinHitRefer) {
+
+               # Show source
+               $lien=$from;
+               $lien =~ s/\"//g;
+               $lien=substr($lien,0,$MaxLengthOfURL);
+               if ($ShowLinksOnUrl && ($lien =~ /(ftp|http):\/\//)) {
+                   print "<TR align=center><TD align=left>- <A HREF=$from>$lien</A></TD> <TD>$PageRefs{$from}</TD></TR>\n";
+               } else {
+                       print "<TR align=center><TD align=left>- $lien </TD><TD>$PageRefs{$from}</TD></TR>\n";
+               }
+
+               $count++;
+       }
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$HitFrom[3]</TD><TD valign=top>$_&nbsp;%</TD></TR>\n";
+
+if ($TotalHits > 0) { $_=(int($HitFrom[4]/$TotalHits*1000)/10); }
+print "<TR align=center><TD align=left><b>$message[42][$Lang] :</b></TD><TD>$HitFrom[4]</TD><TD>$_&nbsp;%</TD></TR>\n";
+&tab_end;
+
+
+# BY SEARCHWORDS
+#----------------------------
+print "<a name=\"SEARCHWORDS\"></a><BR>";
+$tab_titre="TOP $MaxNbOfKeywordsShown $message[55][$Lang] $TotalDifferentKeywords $message[43][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle align=center onmouseover=\"ShowTooltip(15);\" onmouseout=\"HideTooltip(15);\"><TH align=left>$message[13][$Lang]</TH><TH bgcolor=$color_s width=40>$message[14][$Lang]</TH><TH bgcolor=$color_s width=40>$message[15][$Lang]</TH></TR>\n";
+$count=0;
+foreach $key (@sortsearchwords) {
+       if ( $count>=$MaxNbOfKeywordsShown ) { last; }
+       $p=int($searchwords{$key}/$TotalKeywords*1000)/10;
+       print "<TR align=center><TD align=left>$key</TD><TD>$searchwords{$key}</TD>";
+       print "<TD>$p&nbsp;%</TD></TR>\n";
+       $count++;
+}
+$count=0;$rest=0;
+foreach $key (@sortsearchwords) {
+       if ( $count<$MaxNbOfKeywordsShown ) { $count++; next; }
+       $rest=$rest+$searchwords{$key};
+}
+if ($rest >0) {
+       if ($TotalKeywords > 0) { $p=int($rest/$TotalKeywords*1000)/10; }
+       print "<TR align=center><TD align=left><font color=blue>$message[30][$Lang]</TD><TD>$rest</TD>";
+       print "<TD>$p&nbsp;%</TD></TR>\n";
+       }
+&tab_end;
+
+
+# BY ERRORS
+#----------------------------
+print "<a name=\"ERRORS\"></a><BR>";
+$tab_titre=$message[32][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle align=center><TH align=left colspan=2>$message[32][$Lang]</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sorterrors) {
+       $p=int($errors{$key}/$TotalErrors*1000)/10;
+       if ($httpcode{$key}) { print "<TR align=center onmouseover=\"ShowTooltip($key);\" onmouseout=\"HideTooltip($key);\">"; }
+       else { print "<TR align=center>"; }
+       if ($key == 404) { print "<TD><a href=\"$PROG.pl?action=notfounderror&lang=$Lang\">$key</a></TD>"; }
+       else { print "<TD>$key</TD>"; }
+       if ($httpcode{$key}) { print "<TD align=left>$httpcode{$key}</TD><TD>$errors{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+       else { print "<TD align=left>Unknown error</TD><TD>$errors{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+}
+&tab_end;
+
+
+&html_end;
diff --git a/browser/msie.png b/browser/msie.png
new file mode 100644 (file)
index 0000000..0ff2362
Binary files /dev/null and b/browser/msie.png differ
diff --git a/browser/netscape.png b/browser/netscape.png
new file mode 100644 (file)
index 0000000..7bd913a
Binary files /dev/null and b/browser/netscape.png differ
diff --git a/cgi-bin/awstats.model.conf b/cgi-bin/awstats.model.conf
new file mode 100644 (file)
index 0000000..ba598d5
--- /dev/null
@@ -0,0 +1,238 @@
+# AWStats configure file
+#------------------------------------------------------------------------
+# Copy this file into awstats.www.myserver.mydomain.conf or awstats.conf
+# and edit this new file to setup AWStats (This config file must be in
+# same directory than awstats.pl).
+# If you don't understand what is a parameter, keep default value.
+#------------------------------------------------------------------------
+
+
+# Main setup section (Required to make AWStats working)
+#------------------------------------------------------------------------
+
+# "LogFile" contains the web server logfile name to analyze.
+# You can use a full path...
+# Example: "/var/logs/httpd/myserver_access.log"
+# or relative path from awstats.pl directory...
+# Example: "../logs/mycombinedlog.log"
+# You can also use %YY %MM %DD or %HH in file name, AWStats will
+# replace those tags with current year month day or hour.
+# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY%MM%DD.log"
+#
+LogFile="/var/log/httpd/mylog.log"
+
+# Put here your log format (it depends on your web server).
+# Possible values:
+# 1 - Apache combined log format
+# 2 - IIS extended W3C log format
+#
+LogFormat=1
+
+# If hostnames are already resolved in your logfile, set "DNSLookup" to 0 will
+# increase performances.
+# Possible values: 1 or 0
+# Default: 1
+# 
+DNSLookup=1
+
+# Set "DirData" to a directory where you want AWStats to save its database and
+# working files into.
+# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser"
+# feature (see next parameter), you need write permissions by webserver user
+# on this directory.
+# Example: "/tmp"
+# Example: "../data"
+# Example: "C:/awstats_working_dir"
+# Default: "."          (means same directory as awstats.pl)
+DirData="."
+
+# When this parameter is set to 1, AWStats add a button on report page to
+# allow to "update" statistics from a web browser. Warning, when "update" is
+# made from a browser, AWStats is runned as a CGI by the web server user
+# defined in your web server (user "nobody" by default with Apache, "IE_USER"
+# with IIS), so the "DirData" directory and all already existing history files
+# (awstatsMMYYYY[.xxx].txt) must be writable by this user. Change permissions
+# if required.
+# Warning: Process is long so you might experience "time out" browser errors
+# if you don't launch AWStats enough frequently.
+# When set to 0, update is only made when AWStats is runned from the command
+# line interface (or a task scheduler)
+# Possible values: 1 or 0
+# Default: 1
+#
+# THIS PARAMETER IS NOT YET USED !!!!!!!!!!!!!!!!!
+AllowToUpdateStatsFromBrowser=1
+
+# AWStats can purge log after processing it. By this way, the next time you
+# launch AWStats, log file will be smaller and processing time will be better.
+# IMPORTANT !!!
+# AWStats is able to detect new lines in log file, to process only them, so
+# you can launch AWStats as soon as you want, even with this parameter to 0.
+# With 0, no purge is mage, so you must have a scheduled task or a web server
+# that made this purge frequently.
+# With 1, the purge of the log file is made when awstats is runned, so you
+# must have a scheduler/crontab job to launch Awstats (that purge your log
+# file) frequently.
+# This parameter doesn't work with IIS (This web server doesn't let its log
+# file to be purged).
+# Possible values: 1 or 0
+# Default: 0   (but if you can, set this to 1 to increase speed)
+#
+PurgeLogFile=0
+
+# When PurgeLogFile is setup to 1, AWStats will clean your log file after
+# processing it. You can however keep an archive file (saved in "DirData") of
+# all processed log records by setting this to 1 (For example if you want to
+# use another log analyzer).
+# This parameter is not used if PurgeLogFile=0
+# Possible values: 1 or 0
+# Default: 0
+#
+ArchiveLogRecords=0
+
+# Relative or absolute web URL of your awstats.pl directory.
+# This parameter is used only when AWStats is runned from command line.
+# Default: "/cgi-bin"   (means awstats.pl is in "/mywwwroot/cgi-bin")
+#
+DirCgi="/cgi-bin"
+
+# Relative or absolute web URL of all icons subdirectories.
+# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon")
+#
+DirIcons="/icon"
+
+
+
+# Optionnal setup section (Not required but increase AWStats features)
+#------------------------------------------------------------------------
+
+# Set your primary language.
+# Possible value:
+# 0=English, 1=French, 2=Dutch, 3=Spanish, 4=Italian, 5=German
+# 6=Polish, 7=Greek, 8=Czech, 9=Portuguese
+# Default: 0
+#
+Lang=0
+
+# Index page name for your web server.
+# Example: "default.htm"
+# Default: "index.html"
+#
+DefaultFile="index.html"
+
+# Put here all possible domain names, addresses or virtual host aliases
+# someone can use to access your site. Try to keep only the minimum number of
+# possible names/adresses to have the best performances.
+# Use space between each value and put a backslash before each dot.
+# This parameter is used to analyze referer field in log file and to help
+# AWStats to know if a referer URL is a local URL of same site or an URL of
+# another site.
+# Example: "www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+#
+HostAliases="www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+
+# Do not include access to URLs that match following entries.
+# If you don't want to include users homepage in your stats, add "/~".
+# You can also, if you want, add list of not important frame pages (like 
+# menus, etc...) to exclude them from statistics.
+# Use space between each value and put a backslash before each dot.
+# Do not remove default values. 
+# Example: "\.css \.js \.class robots\.txt dir/badpage\.html /~"
+# Default: "\.css \.js \.class robots\.txt"
+#
+SkipFiles="\.css \.js \.class robots\.txt"
+
+# Do not include access from clients that match following IP address.
+# You can also put partial host names but this requires that reverse DNS
+# lookup is already done in your server log file.
+# Use space between each value and put a backslash before each dot.
+# Example: "55\.55\.55\.55 222\.222\.222\.222 abcxyz"
+# Default: ""
+#
+SkipHosts=""
+
+# AWStats can detect setup problems or show you important informations to have
+# a better use. Keep this to 1, except if AWStats says you can change it.
+# Possible values: 1 or 0
+# Default: 1
+WarningMessages=1
+
+# Each URL shown in stats page are links you can click.
+# Possible values: 1 or 0
+# Default: 1
+#
+ShowLinksOnUrl=1
+
+# Flags with link to other languages translation are visible.
+# Possible values: 1 or 0
+# Default: 1
+#
+ShowFlagLinks=1
+
+# Search engines keywords reported are full search string or separate keywords
+# Possible values:
+# 0 - Search keywords reported are full search string (ie: "town maps")
+# 1 - Search keywords reported are separated words (ie: "town" and "maps")
+# Default: 0
+#
+SplitSearchString=0
+
+# You can put here HTML code that will be added at the end of AWStats reports.
+# Great to add advert ban.
+# Default: ""
+#
+HTMLEndSection=""
+
+# Value of maximum bar width/heigth for horizontal/vertical graphics bar
+# Default: 260/220
+#
+BarWidth   = 260
+BarHeight  = 220
+# This value can be used to choose maximum number of lines shown for each 
+# particular reporting.
+#
+# Stats by domains
+MaxNbOfDomain = 25
+# Stats by hosts
+MaxNbOfHostsShown = 25
+MinHitHost    = 1
+# Stats by robots
+MaxNbOfRobotShown = 25
+MinHitRobot   = 1
+# Stats by pages
+MaxNbOfPageShown = 25
+MinHitFile    = 1
+# Stats by referers
+MaxNbOfRefererShown = 25
+MinHitRefer   = 1
+# Stats for keywords
+MaxNbOfKeywordsShown = 25
+MinHitKeyword  = 1
+
+# You can set this to use your own logo.
+# Logo file must be in $DirIcons/other directory
+# Default: "awstats_logo1.png"
+#
+Logo="awstats_logo1.png"
+
+# Colors used on AWStats report page.
+# Example: color_name="RRGGBB" # RRGGBB is RedGreenBlue components in Hex
+#
+color_Background="FFFFFF"              # Background color for main page (Default = "FFFFFF")
+color_TableBorder="000000"             # Table border color (Default = "000000")
+color_TableBG="DDDDBB"                 # Background color for table (Default = "DDDDBB")
+color_TableTitle="FFFFFF"              # Table title font color (Default = "FFFFFF")
+color_TableBGTitle="666666"            # Background color for table title (Default = "666666")
+color_TableRowTitle="FFFFFF"   # Table row title font color (Default = "FFFFFF")
+color_TableBGRowTitle="BBBBBB" # Background color for row title (Default = "BBBBBB")
+color_text="000000"                            # Color of main body text (Default = "000000")
+color_titletext="000000"               # Color of text title within colored Title Rows (Default = "000000")
+color_link="4000FF"                            # Color of HTML links (Default = "4000FF")
+color_hover="4000FF"                   # Color of HTML on-mouseover links (Default = "4000FF") 
+color_v="F3F300"                               # Background color for number of visites (Default = "F3F300")
+color_w="FF9933"                               # Background color for number of unique visitors (Default = "FF9933")
+color_p="4477DD"                               # Background color for number of pages (Default = "4477DD")
+color_h="66F0FF"                               # Background color for number of hits (Default = "66F0FF")
+color_k="339944"                               # Background color for number of bytes (Default = "339944")
+color_s="8888DD"                               # Background color for number of search (Default = "8888DD")
diff --git a/cgi-bin/awstats.pl b/cgi-bin/awstats.pl
new file mode 100644 (file)
index 0000000..a53a3de
--- /dev/null
@@ -0,0 +1,3577 @@
+#!/usr/bin/perl
+# With some other Unix Os, first line might be
+#!/usr/local/bin/perl
+# With Apache for Windows and ActiverPerl, first line might be
+#!c:/program files/activeperl/bin/perl
+# use diagnostics;
+# use strict;
+#-Description-------------------------------------------
+# Free realtime web server logfile analyzer (Perl script) working from
+# command line or as a CGI to show advanced web statistics.
+# For better performances, you must use this script as often as necessary
+# (from a scheduler for example).
+# See README.TXT file for setup and benchmark informations.
+# See COPYING.TXT file about AWStats GNU General Public License.
+#-------------------------------------------------------
+
+
+#-------------------------------------------------------
+# Defines
+#-------------------------------------------------------
+
+# ---------- Init variables --------
+($ArchiveFileName, $ArchiveLogRecords, $BarHeight, $BarWidth,
+$DIR, $DNSLookup, $DefaultFile, $DirCgi, $DirConfig, $DirData,
+$DirIcons, $Extension, $FileConfig, $FileSuffix, $FirstTime,
+$HTMLEndSection, $Host, $HostAlias, $LastTime, $LocalSite,
+$LocalSiteIsInHostAliases, $LocalSiteWithoutwww, $LogFile,
+$LogFormat, $Logo, $MaxNbOfHostsShown, $MaxNbOfKeywordsShown,
+$MaxNbOfPageShown, $MaxNbOfRefererShown, $MaxNbOfRobotShown, $MinHitFile,
+$MinHitHost, $MinHitKeyword, $MinHitRefer, $MinHitRobot, $MonthRequired,
+$NewDNSLookup, $NowNewLinePhase, $OpenFileError, $PROG, $PageBool, $PurgeLogFile,
+$QueryString, $RatioBytes, $RatioHits, $RatioHosts, $RatioPages, 
+$ShowFlagLinks, $ShowLinksOnURL, $ShowLinksOnUrl, $TotalBytes,
+$TotalDifferentKeywords, $TotalDifferentPages, $TotalErrors, $TotalHits,
+$TotalHosts, $TotalKeywords, $TotalPages, $TotalUnique, $TotalVisits, $UserAgent,
+$WarningMessages, $YearRequired, 
+$allok, $beginmonth, $bredde, $bredde_h, $bredde_k, $bredde_p, $bredde_u,
+$bredde_v, $color_Background, $color_TableBG, $color_TableBGRowTitle,
+$color_TableBGTitle, $color_TableBorder, $color_TableRowTitle,
+$color_TableTitle, $color_h, $color_k, $color_link, $color_p, $color_s, $color_v,
+$color_w, $count, $date, $daycon, $endmonth, $found, $foundrobot,
+$h, $hourcon, $hr, $internal_link, $ix, $keep, $key, $kilo, $lien, $line,
+$max, $max_h, $max_k, $max_p, $max_v, $mincon, $monthcon, $monthfile, $monthix,
+$monthtoprocess, $nameicon, $new, $nompage, $nowday, $nowisdst, $nowmin, $nowmonth,
+$nowsec, $nowsmallyear, $nowwday, $nowyday, $nowyear, $p, $page, $param,
+$paramtoexclude, $rest, $rest_h, $rest_k, $rest_p,
+$savetime, $savetmp, $tab_titre, $timeconnexion, $total_h, $total_k, $total_p,
+$word, $yearcon, $yearfile, $yearmonthfile, $yeartoprocess) = ();
+# ---------- Init arrays --------
+%DayBytes = %DayHits = %DayPage = %DayUnique = %DayVisits =
+%FirstTime = %HistoryFileAlreadyRead = %LastTime =
+%MonthBytes = %MonthHits = %MonthPage = %MonthUnique = %MonthVisits =
+%_browser_h = %_domener_h = %_domener_k = %_domener_p =
+%_errors_h = %_hostmachine_h = %_hostmachine_k = %_hostmachine_l = %_hostmachine_p =
+%_keywords = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l = %_se_referrals_h =
+%_sider404_h = %_sider_h = %_sider_k = %_sider_p = %_unknownip_l = %_unknownreferer_l =
+%_unknownrefererbrowser_l = %listofyears = %monthlib = %monthnum = ();
+# ---------- Init hash arrays --------
+@BrowserArray = @DomainsArray = @HostAliases = @OSArray =
+@PageCode = @RobotArray = @SearchEnginesArray = @SkipFiles =
+@SkipHosts = @_from_h = @_msiever_h = @_nsver_h = @_time_h =
+@_time_k = @_time_p = @datep = @dateparts = @felter = @field = @filearray = @message =
+@paramlist = @refurl = @sortbrowsers = @sortdomains_h = @sortdomains_k =
+@sortdomains_p = @sorterrors = @sorthosts_p = @sortos = @sortpagerefs = @sortrobot =
+@sortsearchwords = @sortsereferrals = @sortsider404 = @sortsiders = @sortunknownip =
+@sortunknownreferer = @sortunknownrefererbrowser = @wordlist = ();
+
+$VERSION="2.5 (build 1)";
+$Lang=0;
+
+# Default value
+$SortDir       = -1;           # -1 = Sort order from most to less, 1 = reverse order (Default = -1)
+$VisitTimeOut  = 10000;                # Laps of time to consider a page load as a new visit. 10000 = one hour (Default = 10000)
+$FullHostName  = 1;                    # 1 = Use name.domain.zone to refer host clients, 0 = all hosts in same domain.zone are one host (Default = 1, 0 never tested)
+$MaxLengthOfURL= 70;           # Maximum length of URL shown on stats page. This affects only URL visible text, link still work (Default = 70)
+$BenchMark     = 0;                    # Set this to 1 to get some benchmark informations: a second counter since 1970 (Default = 0)
+# Images for graphics
+$BarImageVertical_v   = "barrevv.png";
+$BarImageHorizontal_v = "barrehv.png";
+$BarImageVertical_u   = "barrevu.png";
+$BarImageHorizontal_u = "barrehu.png";
+$BarImageVertical_p   = "barrevp.png";
+$BarImageHorizontal_p = "barrehp.png";
+$BarImageVertical_h   = "barrevh.png";
+$BarImageHorizontal_h = "barrehh.png";
+$BarImageVertical_k   = "barrevk.png";
+$BarImageHorizontal_k = "barrehk.png";
+
+# URL with such end signature are kind of URL we only need to count as hits
+@NotPageList= (
+                       "\\.gif","\\.jpg","\\.png","\\.bmp",
+#                      "\\.zip","\\.arj","\\.gz","\\.z",
+#                      "\\.pdf","\\.doc","\\.ppt","\\.rtf","\\.txt",
+#                      "\\.mp3","\\.wma"
+                       );
+
+# Those addresses are shown with those lib (First column is full relative URL, Second column is text to show instead of URL)
+%Aliases    = (
+                       "/",                                    "<b>HOME PAGE</b>",
+                       "/cgi-bin/awstats.pl",                                  "<b>AWStats stats page</b>",
+                       "/cgi-bin/awstats/awstats.pl",                  "<b>AWStats stats page</b>",
+                       # Following the same example, you can put here HTML text you want to see in links instead of URL text.
+                       "/YourRelativeUrl",                                             "<b>Your HTML text</b>",
+                       "/YourRelativeUrl",                                             "<b>Your HTML text</b>"
+                       );
+
+
+# Search engines names database (update the 10th january 2001)
+%SearchEnginesHash=(
+# Most common search engines
+"yahoo\.","Yahoo",
+"altavista\.","AltaVista",
+"msn\.","MSN",
+"voila\.", "Voila",
+"lycos\.","Lycos",
+"search\.terra\.","Terra",
+"google\.","Google",
+"alltheweb\.com","AllTheWeb",
+"netscape\.","Netscape",
+"northernlight\.","NorthernLight",
+"dmoz\.org","DMOZ",
+"search\.aol\.co","AOL",
+# Others
+"hotbot\.","Hotbot",
+"webcrawler\.","WebCrawler",
+"metacrawler\.","MetaCrawler (Metamoteur)",
+"go2net\.com","Go2Net (Metamoteur)",
+"go\.com","Go.com",
+"euroseek\.","Euroseek",
+"excite\.","Excite",
+"lokace\.", "Lokace",
+"spray\.","Spray",
+"netfind\.aol\.com","AOL",
+"recherche\.aol\.fr","AOL",
+"nbci\.com/search","NBCI",
+"askjeeves\.","Ask Jeeves",
+"mamma\.","Mamma",
+"dejanews\.","DejaNews",
+"search\.dogpile\.com","Dogpile",
+"ilse\.","Ilse","vindex\.","Vindex\.nl",       # Minor dutch search engines
+"nomade\.fr/","Nomade", "ctrouve\.","C'est trouvé", "francite\.","Francité", "\.lbb\.org", "LBB", "rechercher\.libertysurf\.fr", "Libertysurf",        # Minor french search engines
+"fireball\.de","Fireball", "suche\.web\.de","Web.de", "meta\.ger","MetaGer",   # Minor german search engines
+"search\..*com","Other search engines"
+);
+
+# Search engines known URLs database (update the 10th january 2001)
+%SearchEngineKnownUrl=(
+# Most common search engines
+"yahoo\.","p=",
+"altavista\.","q=",
+"msn\.","q=",
+"voila\.","kw=",
+"lycos\.","query=",
+"google\.","q=",
+"alltheweb\.","query=",
+"netscape\.","search=",
+"northernlight\.","qr=",
+"dmoz\.org","search=",
+"search\.aol\.co","query=",
+# Others
+"hotbot\.","mt=",
+"webcrawler","searchText=",
+"metacrawler\.","general=",
+"go2net\.com","general=",
+"go\.com","qt=",
+"euroseek\.","query=",
+"excite\.","search=",
+"spray\.","string=",
+"francite\.","name=",
+"nbci\.com/search","keyword=",
+"askjeeves\.","ask=",
+"mamma\.","query=",
+"search\.dogpile\.com", "q=",
+"ilse\.","search_for=", "vindex\.","in=",
+"nomade\.fr/","s=",
+"fireball\.de","q=", "suche\.web\.de","su="
+);
+@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cfg=","cou=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hs=","kl=","lang=","loc=","lr=","matchmode=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=");
+# Never put the following exclusion ("ask=","claus=","general=","kw=","keyword=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=","string=","su=") because they are strings that contain keywords we're looking for.
+
+# HTTP codes with tooltip
+%httpcode = (
+"201", "Partial Content", "202", "Request recorded, will be executed later", "204", "Request executed", "206", "Partial Content",
+"301", "Moved Permanently", "302", "Found",
+"400", "Bad Request", "401", "Unauthorized", "403", "Forbidden", "404", "Not Found", "408", "Request Timeout",
+"500", "Internal Error", "501", "Not implemented", "502", "Received bad response from real server", "503", "Server busy", "504", "Gateway Time-Out", "505", "HTTP version not supported",
+
+"200", "OK", "304", "Not Modified"     # 200 and 304 are not errors
+);
+
+# Browser lists ("browser id in lower case", "browser text")
+%BrowsersHash = (
+"netscape","defined_later",
+"msie","defined_later",
+
+"libwww","LibWWW",
+"wget","Wget",
+"lynx","Lynx",
+"opera","Opera",
+"22acidownload","22AciDownload",
+"aol\\-iweng","AOL-Iweng",
+"amigavoyager","AmigaVoyager",
+"antfresco","ANT Fresco",
+"bpftp","BPFTP",
+"cyberdog","Cyberdog",
+"dreamcast","Dreamcast",
+"downloadagent","DownloadAgent",
+"ecatch", "eCatch",
+"emailsiphon","EmailSiphon",
+"friendlyspider","FriendlySpider",
+"getright","GetRight",
+"headdump","HeadDump",
+"hotjava","Sun HotJava",
+"ibrowse","IBrowse",
+"icab","iCab",
+"intergo","InterGO",
+"konqueror","Konqueror",
+"linemodebrowser","W3C Line Mode Browser",
+"lotus-notes","Lotus Notes web client",
+"macweb","MacWeb",
+"ncsa_mosaic","NCSA Mosaic",
+"netpositive","NetPositive",
+"nutscrape", "Nutscrape",
+"mspie","MS Pocket Internet Explorer",
+"msfrontpageexpress","MS FrontPage Express",
+"omniweb","OmniWeb",
+"real","RealAudio or compatible player",
+"teleport","TelePort Pro (Site grabber)",
+"tzgeturl","TZGETURL",
+"viking","Viking",
+"webcapture","Acrobat (Site grabber)",
+"webfetcher","WebFetcher",
+"webtv","WebTV browser",
+"webexplorer","IBM-WebExplorer",
+"webmirror","WebMirror",
+"webvcr","WebVCR",
+"webzip","WebZIP"
+);
+
+# OS lists ("os detector in lower case","os text")
+%OSHash      = (
+"win2000","Windows 2000",
+"winnt","Windows NT",
+"win98","Windows 98",
+"win95","Windows 95",
+"win16","Windows 3.xx",
+"wince","Windows CE",
+"beos","BeOS",
+"macintosh","Mac OS",
+"unix","Unknown Unix system",
+"linux","Linux",
+"os/2","Warp OS/2",
+"amigaos","AmigaOS",
+"sunos","Sun Solaris",
+"irix","Irix",
+"osf","OSF Unix",
+"hp-ux","HP Unix",
+"aix","Aix",
+"netbsd","NetBSD",
+"bsdi","BSDi",
+"freebsd","FreeBSD",
+"webtv","WebTV",
+"cp/m","CPM",
+"crayos","CrayOS",
+"riscos","Acorn RISC OS"
+);
+
+# OS AliasHash ("text that match in log after changing ' ' or '+' into '_' ","osid")
+%OSAliasHash   = (
+"windows_nt_5","win2000",
+"windows_nt","winnt",
+"windows-nt","winnt",
+"win32","winnt",
+"windows_98","win98",
+"windows_95","win95",
+"windows_3","win16",                   # This works for windows_31 and windows_3.1
+"windows;i;16","win16",
+"windowsce","wince",
+"mac_p","macintosh",                   # This works for mac_ppc and mac_powerpc
+"mac_68","macintosh",                  # This works for mac_6800 and mac_68k
+"macppc","macintosh",
+"macweb","macintosh"
+);
+
+# Robots list
+# List can be found at http://info.webcrawler.com/mak/projects/robots/active.html and the next command show how to generate tab list from this file:
+# cat robotslist.txt | sed 's/:/ /' | awk ' /robot-id/ { name=tolower($2); } /robot-name/ { print "\""name"\", \""$0"\"," } ' | sed 's/robot-name *//g' > file
+# Rem: To avoid bad detection, some robots id were removed from this list:
+#      - Robots with ID of 2 letters only
+#      - Robot called "webs"
+# Rem: directhit is changed in direct_hit (its real id)
+%RobotHash   = (
+"acme.spider", "Acme.Spider",
+"ahoythehomepagefinder", "Ahoy! The Homepage Finder",
+"alkaline", "Alkaline",
+"appie", "Walhello appie",
+"arachnophilia", "Arachnophilia",
+"architext", "ArchitextSpider",
+"aretha", "Aretha",
+"ariadne", "ARIADNE",
+"aspider", "ASpider (Associative Spider)",
+"atn.txt", "ATN Worldwide",
+"atomz", "Atomz.com Search Robot",
+"auresys", "AURESYS",
+"backrub", "BackRub",
+"bigbrother", "Big Brother",
+"bjaaland", "Bjaaland",
+"blackwidow", "BlackWidow",
+"blindekuh", "Die Blinde Kuh",
+"bloodhound", "Bloodhound",
+"brightnet", "bright.net caching robot",
+"bspider", "BSpider",
+"cactvschemistryspider", "CACTVS Chemistry Spider",
+"calif", "Calif",
+"cassandra", "Cassandra",
+"cgireader", "Digimarc Marcspider/CGI",
+"checkbot", "Checkbot",
+"churl", "churl",
+"cmc", "CMC/0.01",
+"collective", "Collective",
+"combine", "Combine System",
+"conceptbot", "Conceptbot",
+"core", "Web Core / Roots",
+"cshkust", "CS-HKUST WISE: WWW Index and Search Engine",
+"cusco", "Cusco",
+"cyberspyder", "CyberSpyder Link Test",
+"deweb", "DeWeb(c) Katalog/Index",
+"dienstspider", "DienstSpider",
+"diibot", "Digital Integrity Robot",
+"direct_hit", "Direct Hit Grabber",
+"dnabot", "DNAbot",
+"download_express", "DownLoad Express",
+"dragonbot", "DragonBot",
+"dwcp", "DWCP (Dridus' Web Cataloging Project)",
+"ebiness", "EbiNess",
+"eit", "EIT Link Verifier Robot",
+"emacs", "Emacs-w3 Search Engine",
+"emcspider", "ananzi",
+"esther", "Esther",
+"evliyacelebi", "Evliya Celebi",
+"fdse", "Fluid Dynamics Search Engine robot",
+"felix", "     Felix IDE",
+"ferret", "Wild Ferret Web Hopper #1, #2, #3",
+"fetchrover", "FetchRover",
+"fido", "fido",
+"finnish", "Hämähäkki",
+"fireball", "KIT-Fireball",
+"fish", "Fish search",
+"fouineur", "Fouineur",
+"francoroute", "Robot Francoroute",
+"freecrawl", "Freecrawl",
+"funnelweb", "FunnelWeb",
+"gazz", "gazz",
+"gcreep", "GCreep",
+"getbot", "GetBot",
+"geturl", "GetURL",
+"golem", "Golem",
+"googlebot", "Googlebot",
+"grapnel", "Grapnel/0.01 Experiment",
+"griffon", "Griffon",
+"gromit", "Gromit",
+"gulliver", "Northern Light Gulliver",
+"hambot", "HamBot",
+"harvest", "Harvest",
+"havindex", "havIndex",
+"hometown", "Hometown Spider Pro",
+"wired-digital", "Wired Digital",
+"htdig", "ht://Dig",
+"htmlgobble", "HTMLgobble",
+"hyperdecontextualizer", "Hyper-Decontextualizer",
+"ibm", "IBM_Planetwide",
+"iconoclast", "Popular Iconoclast",
+"ilse", "Ingrid",
+"imagelock", "Imagelock ",
+"incywincy", "IncyWincy",
+"informant", "Informant",
+"infoseek", "InfoSeek Robot 1.0",
+"infoseeksidewinder", "Infoseek Sidewinder",
+"infospider", "InfoSpiders",
+"inspectorwww", "Inspector Web",
+"intelliagent", "IntelliAgent",
+"iron33", "Iron33",
+"israelisearch", "Israeli-search",
+"javabee", "JavaBee",
+"jcrawler", "JCrawler",
+"jeeves", "Jeeves",
+"jobot", "Jobot",
+"joebot", "JoeBot",
+"jubii", "The Jubii Indexing Robot",
+"jumpstation", "JumpStation",
+"katipo", "Katipo",
+"kdd", "KDD-Explorer",
+"kilroy", "Kilroy",
+"ko_yappo_robot", "KO_Yappo_Robot",
+"labelgrabber.txt", "LabelGrabber",
+"larbin", "larbin",
+"legs", "legs",
+"linkscan", "LinkScan",
+"linkwalker", "LinkWalker",
+"lockon", "Lockon",
+"logo_gif", "logo.gif Crawler",
+"lycos", "Lycos",
+"macworm", "Mac WWWWorm",
+"magpie", "Magpie",
+"mediafox", "MediaFox",
+"merzscope", "MerzScope",
+"meshexplorer", "NEC-MeshExplorer",
+"mindcrawler", "MindCrawler",
+"moget", "moget",
+"momspider", "MOMspider",
+"monster", "Monster",
+"motor", "Motor",
+"muscatferret", "Muscat Ferret",
+"mwdsearch", "Mwd.Search",
+"myweb", "Internet Shinchakubin",
+"netcarta", "NetCarta WebMap Engine",
+"netmechanic", "NetMechanic",
+"netscoop", "NetScoop",
+"newscan-online", "newscan-online",
+"nhse", "NHSE Web Forager",
+"nomad", "Nomad",
+"northstar", "The NorthStar Robot",
+"nzexplorer", "nzexplorer",
+"occam", "Occam",
+"octopus", "HKU WWW Octopus",
+"orb_search", "Orb Search",
+"packrat", "Pack Rat",
+"pageboy", "PageBoy",
+"parasite", "ParaSite",
+"patric", "Patric",
+"perignator", "The Peregrinator",
+"perlcrawler", "PerlCrawler 1.0",
+"phantom", "Phantom",
+"piltdownman", "PiltdownMan",
+"pioneer", "Pioneer",
+"pitkow", "html_analyzer",
+"pjspider", "Portal Juice Spider",
+"pka", "PGP Key Agent",
+"plumtreewebaccessor", "PlumtreeWebAccessor",
+"poppi", "Poppi",
+"portalb", "PortalB Spider",
+"puu", "GetterroboPlus Puu",
+"python", "The Python Robot",
+"raven", "Raven Search",
+"rbse", "RBSE Spider",
+"resumerobot", "Resume Robot",
+"rhcs", "RoadHouse Crawling System",
+"roadrunner", "Road Runner: The ImageScape Robot",
+"robbie", "Robbie the Robot",
+"robi", "ComputingSite Robi/1.0",
+"roverbot", "Roverbot",
+"safetynetrobot", "SafetyNet Robot",
+"scooter", "Scooter",
+"search_au", "Search.Aus-AU.COM",
+"searchprocess", "SearchProcess",
+"senrigan", "Senrigan",
+"sgscout", "SG-Scout",
+"shaggy", "ShagSeeker",
+"shaihulud", "Shai'Hulud",
+"sift", "Sift",
+"simbot", "Simmany Robot Ver1.0",
+"site-valet", "Site Valet",
+"sitegrabber", "Open Text Index Robot",
+"sitetech", "SiteTech-Rover",
+"slurp", "Inktomi Slurp",
+"smartspider", "Smart Spider",
+"snooper", "Snooper",
+"solbot", "Solbot",
+"spanner", "Spanner",
+"speedy", "Speedy Spider",
+"spider_monkey", "spider_monkey",
+"spiderbot", "SpiderBot",
+"spiderman", "SpiderMan",
+"spry", "Spry Wizard Robot",
+"ssearcher", "Site Searcher",
+"suke", "Suke",
+"sven", "Sven",
+"tach_bw", "TACH Black Widow",
+"tarantula", "Tarantula",
+"tarspider", "tarspider",
+"tcl", "Tcl W3 Robot",
+"techbot", "TechBOT",
+"templeton", "Templeton",
+"titin", "TitIn",
+"titan", "TITAN",
+"tkwww", "The TkWWW Robot",
+"tlspider", "TLSpider",
+"ucsd", "UCSD Crawl",
+"udmsearch", "UdmSearch",
+"urlck", "URL Check",
+"valkyrie", "Valkyrie",
+"victoria", "Victoria",
+"visionsearch", "vision-search",
+"voyager", "Voyager",
+"vwbot", "VWbot",
+"w3index", "The NWI Robot",
+"w3m2", "W3M2",
+"wanderer", "the World Wide Web Wanderer",
+"webbandit", "WebBandit Web Spider",
+"webcatcher", "WebCatcher",
+"webcopy", "WebCopy",
+"webfetcher", "webfetcher",
+"webfoot", "The Webfoot Robot",
+"weblayers", "Weblayers",
+"weblinker", "WebLinker",
+"webmirror", "WebMirror",
+"webmoose", "The Web Moose",
+"webquest", "WebQuest",
+"webreader", "Digimarc MarcSpider",
+"webreaper", "WebReaper",
+"websnarf", "Websnarf",
+"webspider", "WebSpider",
+"webvac", "WebVac",
+"webwalk", "webwalk",
+"webwalker", "WebWalker",
+"webwatch", "WebWatch",
+"wget", "Wget",
+"whowhere", "WhoWhere Robot",
+"wmir", "w3mir",
+"wolp", "WebStolperer",
+"wombat", "The Web Wombat ",
+"worm", "The World Wide Web Worm",
+"wwwc", "WWWC Ver 0.2.5",
+"wz101", "WebZinger",
+"xget", "XGET",
+"nederland.zoek", "Nederland.zoek",
+
+# Not declared robots
+"antibot", "Antibot (Not referenced robot)",
+"daviesbot", "DaviesBot (Not referenced robot)",
+"ezresult",    "Ezresult (Not referenced robot)",
+"fast-webcrawler", "Fast-Webcrawler (Not referenced robot)",
+"jennybot", "JennyBot (Not referenced robot)",
+"justview", "JustView (Not referenced robot)",
+"mercator", "Mercator (Not referenced robot)",
+#"msiecrawler", "MSIECrawler (Not referenced robot)",  MSIECrawler seems to be a grabber not a robot
+"perman surfer", "Perman surfer (Not referenced robot)",
+"unlost_web_crawler", "Unlost_Web_Crawler (Not referenced robot)",
+"webbase", "WebBase (Not referenced robot)",
+# Supposed to be robots
+"webcompass", "webcompass (Not referenced robot)",
+"digout4u", "digout4u (Not referenced robot)",
+"echo", "EchO! (Not referenced robot)",
+"voila", "Voila (Not referenced robot)",
+"boris", "Boris (Not referenced robot)",
+"ultraseek", "Ultraseek (Not referenced robot)",
+"ia_archiver", "ia_archiver (Not referenced robot)",
+# Generic ID
+"robot", "Unknown robot (Not referenced robot)"
+);
+
+# Domains list
+%DomainsHash = (
+"localhost","localhost",
+
+"ad","Andorra","ae","United Arab Emirates","af","Afghanistan","ag",
+"Antigua and Barbuda","ai","Anguilla","al","Albania","am",
+"Armenia","an","Netherlands Antilles","ao","Angola","aq",
+"Antarctica","ar","Argentina","arpa","Old style Arpanet","as",
+"American Samoa","at","Austria","au","Australia","aw","Aruba","az",
+"Azerbaidjan","ba","Bosnia-Herzegovina","bb","Barbados","bd",
+"Bangladesh","be","Belgium","bf","Burkina Faso","bg","Bulgaria",
+"bh","Bahrain","bi","Burundi","bj","Benin","bm","Bermuda","bn",
+"Brunei Darussalam","bo","Bolivia","br","Brazil","bs","Bahamas",
+"bt","Bhutan","bv","Bouvet Island","bw","Botswana","by","Belarus",
+"bz","Belize","ca","Canada","cc","Cocos (Keeling) Islands","cf",
+"Central African Republic","cg","Congo","ch","Switzerland","ci",
+"Ivory Coast (Cote D'Ivoire)","ck","Cook Islands","cl","Chile","cm","Cameroon",
+"cn","China","co","Colombia","com","Commercial","cr","Costa Rica",
+"cs","Former Czechoslovakia","cu","Cuba","cv","Cape Verde","cx",
+"Christmas Island","cy","Cyprus","cz","Czech Republic","de","Germany",
+"dj","Djibouti","dk","Denmark","dm","Dominica","do","Dominican Republic",
+"dz","Algeria","ec","Ecuador","edu","USA Educational","ee","Estonia",
+"eg","Egypt","eh","Western Sahara","es","Spain","et","Ethiopia","fi","Finland","fj","Fiji","fk",
+"Falkland Islands","fm","Micronesia","fo","Faroe Islands",
+"fr","France","fx","France (European Territory)","ga","Gabon","gb",
+"Great Britain","gd","Grenada","ge","Georgia","gf","French Guyana","gh","Ghana","gi","Gibraltar",
+"gl","Greenland","gm","Gambia","gn","Guinea","gov","USA Government","gp","Guadeloupe (French)","gq",
+"Equatorial Guinea","gr","Greece","gs","S. Georgia &amp; S. Sandwich Isls.",
+"gt","Guatemala","gu","Guam (USA)","gw","Guinea Bissau","gy","Guyana",
+"hk","Hong Kong","hm","Heard and McDonald Islands","hn","Honduras","hr",
+"Croatia","ht","Haiti","hu","Hungary","id","Indonesia","ie","Ireland","il","Israel",
+"in","India","int","International","io","British Indian Ocean Territory",
+"iq","Iraq","ir","Iran","is","Iceland","it","Italy","jm",
+"Jamaica","jo","Jordan","jp","Japan","ke","Kenya","kg","Kyrgyzstan",
+"kh","Cambodia","ki","Kiribati","km","Comoros","kn","Saint Kitts &amp; Nevis Anguilla",
+"kp","North Korea","kr","South Korea","kw","Kuwait","ky",
+"Cayman Islands","kz","Kazakhstan","la","Laos","lb","Lebanon","lc","Saint Lucia",
+"li","Liechtenstein","lk","Sri Lanka","lr","Liberia","ls","Lesotho","lt","Lithuania",
+"lu","Luxembourg","lv","Latvia","ly","Libya","ma","Morocco","mc","Monaco",
+"md","Moldavia","mg","Madagascar","mh","Marshall Islands","mil","USA Military","mk",
+"Macedonia","ml","Mali","mm","Myanmar","mn","Mongolia","mo","Macau",
+"mp","Northern Mariana Islands","mq","Martinique (French)","mr","Mauritania",
+"ms","Montserrat","mt","Malta","mu","Mauritius","mv","Maldives","mw",
+"Malawi","mx","Mexico","my","Malaysia","mz","Mozambique","na","Namibia","nato","NATO",
+"nc","New Caledonia (French)","ne","Niger","net","Network","nf","Norfolk Island",
+"ng","Nigeria","ni","Nicaragua","nl","Netherlands","no","Norway",
+"np","Nepal","nr","Nauru","nt","Neutral Zone","nu","Niue","nz","New Zealand","om","Oman","org",
+"Non-Profit Organizations","pa","Panama","pe","Peru","pf","Polynesia (French)",
+"pg","Papua New Guinea","ph","Philippines","pk","Pakistan","pl","Poland",
+"pm","Saint Pierre and Miquelon","pn","Pitcairn Island","pr",
+"Puerto Rico","pt","Portugal","pw","Palau","py","Paraguay","qa","Qatar",
+"re","Reunion (French)","ro","Romania","ru","Russian Federation","rw","Rwanda",
+"sa","Saudi Arabia","sb","Solomon Islands","sc","Seychelles","sd",
+"Sudan","se","Sweden","sg","Singapore","sh","Saint Helena","si","Slovenia",
+"sj","Svalbard and Jan Mayen Islands","sk","Slovak Republic","sl","Sierra Leone",
+"sm","San Marino","sn","Senegal","so","Somalia","sr","Suriname","st",
+"Saint Tome and Principe","su","Former USSR","sv","El Salvador","sy","Syria","sz","Swaziland","tc",
+"Turks and Caicos Islands","td","Chad","tf","French Southern Territories","tg","Togo",
+"th","Thailand","tj","Tadjikistan","tk","Tokelau","tm","Turkmenistan","tn","Tunisia",
+"to","Tonga","tp","East Timor","tr","Turkey","tt","Trinidad and Tobago","tv","Tuvalu",
+"tw","Taiwan","tz","Tanzania","ua","Ukraine","ug","Uganda","uk",
+"United Kingdom","um","USA Minor Outlying Islands","us","United States",
+"uy","Uruguay","uz","Uzbekistan","va","Vatican City State","vc",
+"Saint Vincent &amp; Grenadines","ve","Venezuela","vg","Virgin Islands (British)",
+"vi","Virgin Islands (USA)","vn","Vietnam","vu","Vanuatu","wf","Wallis and Futuna Islands",
+"ws","Samoa","ye","Yemen","yt","Mayotte","yu","Yugoslavia","za","South Africa",
+"zm","Zambia","zr","Zaire","zw","Zimbabwe"
+);
+
+# ---------- Translation tables --------
+# English
+$message[0][0]="Unknown";
+$message[1][0]="Unknown (unresolved ip)";
+$message[2][0]="Others";
+$message[3][0]="View details";
+$message[4][0]="Day";
+$message[5][0]="Month";
+$message[6][0]="Year";
+$message[7][0]="Statistics of";
+$message[8][0]="First visit";
+$message[9][0]="Last visit";
+$message[10][0]="Number of visits";
+$message[11][0]="Unique visitors";
+$message[12][0]="Visit";
+$message[13][0]="Keyword";
+$message[14][0]="Search";
+$message[15][0]="Percent";
+$message[16][0]="Traffic Summary";
+$message[17][0]="Domains/Countries";
+$message[18][0]="Visitors";
+$message[19][0]="Pages/URL";
+$message[20][0]="Hours (Server time)";
+$message[21][0]="Browsers";
+$message[22][0]="HTTP Errors";
+$message[23][0]="Referrers";
+$message[24][0]="Search&nbsp;Keywords";
+$message[25][0]="Visitors domains/countries";
+$message[26][0]="hosts";
+$message[27][0]="pages";
+$message[28][0]="different pages";
+$message[29][0]="Access";
+$message[30][0]="Other words";
+$message[31][0]="Used browsers";
+$message[32][0]="HTTP Error codes";
+$message[33][0]="Netscape versions";
+$message[34][0]="MS Internet Explorer versions";
+$message[35][0]="Used OS";
+$message[36][0]="Connect to site from";
+$message[37][0]="Origin";
+$message[38][0]="Direct address / Bookmarks";
+$message[39][0]="Link from a Newsgroup";
+$message[40][0]="Link from an Internet Search Engine";
+$message[41][0]="Link from an external page (other web sites except search engines)";
+$message[42][0]="Link from an internal page (other page on same site)";
+$message[43][0]="keywords used on search engines";
+$message[44][0]="Kb";
+$message[45][0]="Unresolved IP Address";
+$message[46][0]="Unknown OS (Referer field)";
+$message[47][0]="Required but not found URLs (HTTP code 404)";
+$message[48][0]="IP Address";
+$message[49][0]="Error&nbsp;Hits";
+$message[50][0]="Unknown browsers (Referer field)";
+$message[51][0]="Visiting robots";
+$message[52][0]="visits/visitor";
+$message[53][0]="Robots/Spiders visitors";
+$message[54][0]="Free realtime logfile analyzer for advanced web statistics";
+$message[55][0]="of";
+$message[56][0]="Pages";
+$message[57][0]="Hits";
+$message[58][0]="Versions";
+$message[59][0]="OS";
+$message[60][0]="Jan";
+$message[61][0]="Feb";
+$message[62][0]="Mar";
+$message[63][0]="Apr";
+$message[64][0]="May";
+$message[65][0]="Jun";
+$message[66][0]="Jul";
+$message[67][0]="Aug";
+$message[68][0]="Sep";
+$message[69][0]="Oct";
+$message[70][0]="Nov";
+$message[71][0]="Dec";
+$message[72][0]="English us.png";
+$message[73][0]="Day statistics";
+
+# French
+$message[0][1]="Inconnus";
+$message[1][1]="Inconnu (IP non résolue)";
+$message[2][1]="Autres";
+$message[3][1]="Voir détails";
+$message[4][1]="Jour";
+$message[5][1]="Mois";
+$message[6][1]="Année";
+$message[7][1]="Statistiques du site";
+$message[8][1]="Première visite";
+$message[9][1]="Dernière visite";
+$message[10][1]="Visites";
+$message[11][1]="Visiteurs différents";
+$message[12][1]="Visite";
+$message[13][1]="Mot clé";
+$message[14][1]="Recherche";
+$message[15][1]="Pourcentage";
+$message[16][1]="Résumé";
+$message[17][1]="Domaines/Pays";
+$message[18][1]="Visiteurs";
+$message[19][1]="Pages/URL";
+$message[20][1]="Heures (Heures du serveur)";
+$message[21][1]="Navigateurs";
+$message[22][1]="Erreurs HTTP";
+$message[23][1]="Origine/Referrer";
+$message[24][1]="Mots&nbsp;clés&nbsp;de&nbsp;recherche";
+$message[25][1]="Domaines/pays visiteurs";
+$message[26][1]="des hôtes";
+$message[27][1]="des pages";
+$message[28][1]="pages différentes";
+$message[29][1]="Accès";
+$message[30][1]="Autres mots";
+$message[31][1]="Navigateurs utilisés";
+$message[32][1]="Codes Erreurs HTTP";
+$message[33][1]="Versions de Netscape";
+$message[34][1]="Versions de MS Internet Explorer";
+$message[35][1]="Systèmes d'exploitation utilisés";
+$message[36][1]="Connexions au site par";
+$message[37][1]="Origine de la connexion";
+$message[38][1]="Adresse directe / Bookmarks";
+$message[39][1]="Lien depuis un Newsgroup";
+$message[40][1]="Lien depuis un moteur de recherche Internet";
+$message[41][1]="Lien depuis une page externe (autres sites, hors moteurs de recherche)";
+$message[42][1]="Lien depuis une page interne (autre page du site)";
+$message[43][1]="des critères de recherches utilisés";
+$message[44][1]="Ko";
+$message[45][1]="Adresses IP des visiteurs non identifiables (IP non résolue)";
+$message[46][1]="OS non reconnus (champ referer brut)";
+$message[47][1]="URLs du site demandées non trouvées (Code HTTP 404)";
+$message[48][1]="Adresse IP";
+$message[49][1]="Hits&nbsp;en&nbsp;échec";
+$message[50][1]="Navigateurs non reconnus (champ referer brut)";
+$message[51][1]="Robots visiteurs";
+$message[52][1]="visite/visiteur";
+$message[53][1]="Visiteurs Robots/Spiders";
+$message[54][1]="Analyseur de log gratuit pour statistiques Web avancées";
+$message[55][1]="sur";
+$message[56][1]="Pages";
+$message[57][1]="Hits";
+$message[58][1]="Versions";
+$message[59][1]="OS";
+$message[60][1]="Jan";
+$message[61][1]="Fév";
+$message[62][1]="Mar";
+$message[63][1]="Avr";
+$message[64][1]="Mai";
+$message[65][1]="Juin";
+$message[66][1]="Juil";
+$message[67][1]="Août";
+$message[68][1]="Sep";
+$message[69][1]="Oct";
+$message[70][1]="Nov";
+$message[71][1]="Déc";
+$message[72][1]="French fr.png";
+$message[73][1]="Statistiques par jour";
+
+# Dutch
+$message[0][2]="Onbekend";
+$message[1][2]="Onbekend (Onbekend ip)";
+$message[2][2]="Andere";
+$message[3][2]="Bekijk details";
+$message[4][2]="Dag";
+$message[5][2]="Maand";
+$message[6][2]="Jaar";
+$message[7][2]="Statistieken van";
+$message[8][2]="Eerste bezoek";
+$message[9][2]="Laatste bezoek";
+$message[10][2]="Aantal boezoeken";
+$message[11][2]="Unieke bezoekers";
+$message[12][2]="Bezoek";
+$message[13][2]="Trefwoord";
+$message[14][2]="Zoek";
+$message[15][2]="Procent";
+$message[16][2]="Opsomming";
+$message[17][2]="Domeinen/Landen";
+$message[18][2]="Bezoekers";
+$message[19][2]="Pagina's/URL";
+$message[20][2]="Uren";
+$message[21][2]="Browsers";
+$message[22][2]="HTTP Foutmeldingen";
+$message[23][2]="Verwijzing";
+$message[24][2]="Zoek&nbsp;trefwoorden";
+$message[25][2]="Bezoekers domeinen/landen";
+$message[26][2]="hosts";
+$message[27][2]="pagina's";
+$message[28][2]="verschillende pagina's";
+$message[29][2]="Toegang";
+$message[30][2]="Andere woorden";
+$message[31][2]="Gebruikte browsers";
+$message[32][2]="HTTP foutmelding codes";
+$message[33][2]="Netscape versies";
+$message[34][2]="MS Internet Explorer versies";
+$message[35][2]="Gebruikt OS";
+$message[36][2]="Verbinding naar site vanaf";
+$message[37][2]="Herkomst";
+$message[38][2]="Direkt adres / Bookmarks";
+$message[39][2]="Link vanuit een nieuwsgroep";
+$message[40][2]="Link vanuit een Internet Zoek Machine";
+$message[41][2]="Link vanuit een externe pagina (andere web sites behalve zoek machines)";
+$message[42][2]="Link vanuit een interne pagina (andere pagina van dezelfde site)";
+$message[43][2]="gebruikte trefwoorden bij zoek machines";
+$message[44][2]="Kb";
+$message[45][2]="niet vertaald  IP Adres";
+$message[46][2]="Onbekend OS (Referer veld)";
+$message[47][2]="Verplicht maar niet gvonden URLs (HTTP code 404)";
+$message[48][2]="IP Adres";
+$message[49][2]="Fout&nbsp;Hits";
+$message[50][2]="Onbekende browsers (Referer veld)";
+$message[51][2]="Bezoekende robots";
+$message[52][2]="bezoeken/bezoeker";
+$message[53][2]="Robots/Spiders bezoekers";
+$message[54][2]="Gratis realtime logbestand analyzer voor geavanceerde web statistieken";
+$message[55][2]="van";
+$message[56][2]="Pagina's";
+$message[57][2]="Hits";
+$message[58][2]="Versies";
+$message[59][2]="OS";
+$message[60][2]="Jan";
+$message[61][2]="Feb";
+$message[62][2]="Mar";
+$message[63][2]="Apr";
+$message[64][2]="May";
+$message[65][2]="Jun";
+$message[66][2]="Jul";
+$message[67][2]="Aug";
+$message[68][2]="Sep";
+$message[69][2]="Oct";
+$message[70][2]="Nov";
+$message[71][2]="Dec";
+$message[72][2]="Dutch nl.png";
+$message[73][2]="Dag statistieken";
+
+# Spanish
+$message[0][3]="Desconocido";
+$message[1][3]="Dirección IP desconocida";
+$message[2][3]="Otros";
+$message[3][3]="Vea detalles";
+$message[4][3]="Día";
+$message[5][3]="Mes";
+$message[6][3]="Año";
+$message[7][3]="Estadísticas del sitio";
+$message[8][3]="Primera visita";
+$message[9][3]="Última visita";
+$message[10][3]="Número de visitas";
+$message[11][3]="Visitantes distintos";
+$message[12][3]="Visita";
+$message[13][3]="Palabra clave (keyword)";
+$message[14][3]="Búsquedas";
+$message[15][3]="Porciento";
+$message[16][3]="Resumen de tráfico";
+$message[17][3]="Dominios/Países";
+$message[18][3]="Visitantes";
+$message[19][3]="Páginas/URLs";
+$message[20][3]="Horas";
+$message[21][3]="Navegadores";
+$message[22][3]="Errores";
+$message[23][3]="Enlaces (Links)";
+$message[24][3]="Palabra&nbsp;clave&nbsp;de&nbsp;búsqueda";
+$message[25][3]="Dominios/Países de visitantes";
+$message[26][3]="servidores";
+$message[27][3]="páginas";
+$message[28][3]="páginas diferentes";
+$message[29][3]="Acceso";
+$message[30][3]="Otras palabras";
+$message[31][3]="Navegadores utilizados";
+$message[32][3]="Códigos de Errores de Protocolo HTTP";
+$message[33][3]="Versiones de Netscape";
+$message[34][3]="Versiones de MS Internet Explorer";
+$message[35][3]="Sistemas Operativos utilizados";
+$message[36][3]="Enlaces (links) al sitio";
+$message[37][3]="Origen de enlace";
+$message[38][3]="Dirección directa / Favoritos";
+$message[39][3]="Enlaces desde Newsgroups";
+$message[40][3]="Enlaces desde algún motor de búsqueda";
+$message[41][3]="Enlaces desde páginas externas (exeptuando motores de búsqueda)";
+$message[42][3]="Enlaces desde páginas internas (otras páginas del sitio)";
+$message[43][3]="Palabras clave utilizada por el motor de búsqueda";
+$message[44][3]="Kb";
+$message[45][3]="Dirección IP no identificada";
+$message[46][3]="Sistema Operativo desconocido (campo de referencia)";
+$message[47][3]="URLs necesarios pero no encontados (código 404 de protocolo HTTP)";
+$message[48][3]="Dirección IP";
+$message[49][3]="Hits&nbsp;erróneos";
+$message[50][3]="Navegadores desconocidos (campo de referencia)";
+$message[51][3]="Visitas de Robots";
+$message[52][3]="Visitas/Visitante";
+$message[53][3]="Visitas de Robots/Spiders (indexadores)";
+$message[54][3]="Analizador gratuito de 'log' para estadísticas Web avanzadas";
+$message[55][3]="de";
+$message[56][3]="Páginas";
+$message[57][3]="Hits";
+$message[58][3]="Versiones";
+$message[59][3]="Sistema Operativo";
+$message[60][3]="Ene";
+$message[61][3]="Feb";
+$message[62][3]="Mar";
+$message[63][3]="Abr";
+$message[64][3]="May";
+$message[65][3]="Jun";
+$message[66][3]="Jul";
+$message[67][3]="Ago";
+$message[68][3]="Sep";
+$message[69][3]="Oct";
+$message[70][3]="Nov";
+$message[71][3]="Dic";
+$message[72][3]="Spanish es.png";
+$message[73][3]="Dia estadísticas";
+
+# Italian
+$message[0][4]="Sconosciuto";
+$message[1][4]="Sconosciuto (ip non risolto)";
+$message[2][4]="Altri";
+$message[3][4]="Vedi dettagli";
+$message[4][4]="Giorno";
+$message[5][4]="Mese";
+$message[6][4]="Anno";
+$message[7][4]="Statistiche di";
+$message[8][4]="Prima visita";
+$message[9][4]="Ultima visita";
+$message[10][4]="Visite";
+$message[11][4]="Visitatori diverse";
+$message[12][4]="Visite";
+$message[13][4]="Parole chiave";
+$message[14][4]="Ricerche";
+$message[15][4]="Percentuali";
+$message[16][4]="Riassunto del traffico";
+$message[17][4]="Domini/Nazioni";
+$message[18][4]="Visitatori";
+$message[19][4]="Pagine/URL";
+$message[20][4]="Ore";
+$message[21][4]="Browsers";
+$message[22][4]="Errori HTTP";
+$message[23][4]="Origine/Riferimenti";
+$message[24][4]="Ricerche&nbsp;Parole chiave";
+$message[25][4]="Visitatori per domini/nazioni";
+$message[26][4]="hosts";
+$message[27][4]="pagine";
+$message[28][4]="pagine diverse";
+$message[29][4]="Accessi";
+$message[30][4]="Altre parole";
+$message[31][4]="Browser usati";
+$message[32][4]="Codici di errori HTTP";
+$message[33][4]="Netscape versione";
+$message[34][4]="MS Internet Explorer versione";
+$message[35][4]="Sistemi operativi usati";
+$message[36][4]="Connesso al sito da";
+$message[37][4]="Origine";
+$message[38][4]="Indirizzo diretto / segnalibro";
+$message[39][4]="Link da un  Newsgroup";
+$message[40][4]="Link da un motore di ricerca";
+$message[41][4]="Link da una pagina esterna (altri siti eccetto i motori di ricerca)";
+$message[42][4]="Link da una pagina interna (altre pagine dello stesso sito)";
+$message[43][4]="Parole chiave usate dai motori di ricerca";
+$message[44][4]="Kb";
+$message[45][4]="Indirizzi IP non risolti";
+$message[46][4]="Sistemi operativi non conosciuti (Campo di riferimento)";
+$message[47][4]="Richiesto un URL ma non trovato (HTTP codice 404)";
+$message[48][4]="Indirizzo IP";
+$message[49][4]="Errori&nbsp;Punteggio";
+$message[50][4]="Browser sconosciuti (Campo di riferimento)";
+$message[51][4]="Visite di robots";
+$message[52][4]="visite/visitatori";
+$message[53][4]="Visite di Robots/Spiders";
+$message[54][4]="Analizzatore gratuito in tempo reale dei file di log per statistiche avanzate";
+$message[55][4]="it";
+$message[56][4]="Pagine";
+$message[57][4]="Hits";
+$message[58][4]="Versioni";
+$message[59][4]="Sistema Operativo";
+$message[60][4]="Genn";
+$message[61][4]="Febb";
+$message[62][4]="Mar";
+$message[63][4]="Apr";
+$message[64][4]="Magg";
+$message[65][4]="Giu";
+$message[66][4]="Lug";
+$message[67][4]="Ago";
+$message[68][4]="Sep";
+$message[69][4]="Oct";
+$message[70][4]="Nov";
+$message[71][4]="Dic";
+$message[72][4]="Italian it.png";
+$message[73][4]="Giorno statistiche";
+
+# German
+$message[0][5]="Unbekannt";
+$message[1][5]="IP konnte nicht aufgeloest werden";
+$message[2][5]="Sonstige";
+$message[3][5]="Details";
+$message[4][5]="Tag";
+$message[5][5]="Monat";
+$message[6][5]="Jahr";
+$message[7][5]="Statistik ueber";
+$message[8][5]="Erster Besuch";
+$message[9][5]="Letzter Besuch";
+$message[10][5]="Anzahl der Besucher";
+$message[11][5]="Verschiedene Besucher";
+$message[12][5]="Besuch";
+$message[13][5]="Suchbegriffe";
+$message[14][5]="Haeufigkeit";
+$message[15][5]="Prozent";
+$message[16][5]="Verkehr Gesamt";
+$message[17][5]="Laender";
+$message[18][5]="Besucher";
+$message[19][5]="Besuchte Seiten";
+$message[20][5]="Durchschn. Tagesverlauf";
+$message[21][5]="Browser";
+$message[22][5]="HTTP Status";
+$message[23][5]="Referrer";
+$message[24][5]="Suchbegriffe";
+$message[25][5]="Laender aus denen die Besucher kamen";
+$message[26][5]="Hosts";
+$message[27][5]="Seiten";
+$message[28][5]="Unterschiedliche Seiten";
+$message[29][5]="Zugriffe";
+$message[30][5]="Weitere Suchbegriffe";
+$message[31][5]="Verwendete Browser";
+$message[32][5]="HTTP Status Meldungen";
+$message[33][5]="Netscape Versionen";
+$message[34][5]="MS Internet Explorer Versionen";
+$message[35][5]="Betriebssysteme";
+$message[36][5]="Woher die Besucher kamen";
+$message[37][5]="Ursprung";
+$message[38][5]="Direkter Zugriff / Bookmarks";
+$message[39][5]="Link von einer Newsgroup";
+$message[40][5]="Link von einer Suchmaschine";
+$message[41][5]="Link von einer ext. Seite (nicht Suchmaschine!)";
+$message[42][5]="Link von einer Seite innerhalb der Web Site";
+$message[43][5]="Suchbegriffen (Suchmaschinen)";
+$message[44][5]="Kb";
+$message[45][5]="Unaufgeloeste IP Adresse";
+$message[46][5]="Unbekanntes Betriebssystem [Referer]";
+$message[47][5]="Nicht auffindbare Seiten [Error 404]";
+$message[48][5]="IP Addresse";
+$message[49][5]="Fehler / Hits";
+$message[50][5]="Unbekannter Browser [Referer]";
+$message[51][5]="Besuche von Robots / Spider";
+$message[52][5]="Besuche / Besucher";
+$message[53][5]="Besuche von Robots / Spider";
+$message[54][5]="Programm zur erweiterten Echtzeitanalyse von Log-Dateien";
+$message[55][5]="von";
+$message[56][5]="Seiten";
+$message[57][5]="Hits";
+$message[58][5]="Ausführungen";
+$message[59][5]="Unbekanntes Betriebssystem";
+$message[60][5]="Jan";
+$message[61][5]="Feb";
+$message[62][5]="Mar";
+$message[63][5]="Abr";
+$message[64][5]="Mai";
+$message[65][5]="Jun";
+$message[66][5]="Juli";
+$message[67][5]="Aug";
+$message[68][5]="Sep";
+$message[69][5]="Oct";
+$message[70][5]="Nov";
+$message[71][5]="Dez";
+$message[72][5]="German de.png";
+$message[73][5]="Tag statistik";
+
+# Polish
+$PageCode[6]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-2\">";
+$message[0][6]="Nieznany";
+$message[1][6]="Nieznany (brak odwzorowania IP w DNS)";
+$message[2][6]="Inni";
+$message[3][6]="Szczegó³y...";
+$message[4][6]="Dzieñ";
+$message[5][6]="Miesi±c";
+$message[6][6]="Rok";
+$message[7][6]="Statystyki";
+$message[8][6]="Pierwsza wizyta";
+$message[9][6]="Ostatnia wizyta";
+$message[10][6]="Ilo¶æ wizyt";
+$message[11][6]="Unikalnych go¶ci";
+$message[12][6]="wizyt";
+$message[13][6]="S³owo kluczowe";
+$message[14][6]="Szukanych";
+$message[15][6]="Procent";
+$message[16][6]="Podsumowanie";
+$message[17][6]="Domeny/Kraje";
+$message[18][6]="Go¶cie";
+$message[19][6]="Stron/URL-i";
+$message[20][6]="Rozk³ad godzinny";
+$message[21][6]="Przegl±darki";
+$message[22][6]="B³êdy HTTP";
+$message[23][6]="Referenci";
+$message[24][6]="Wyszukiwarki&nbsp;-&nbsp;s³owa&nbsp;kluczowe";
+$message[25][6]="Domeny/narodowo¶æ Internautów";
+$message[26][6]="hosty";
+$message[27][6]="strony";
+$message[28][6]="ró¿nych stron";
+$message[29][6]="Dostêp";
+$message[30][6]="Inne s³owa";
+$message[31][6]="Przegl±darki";
+$message[32][6]="Kody b³êdów HTTP";
+$message[33][6]="Wersje Netscape'a";
+$message[34][6]="Wersje MS IE";
+$message[35][6]="Systemy operacyjne";
+$message[36][6]="¬ród³a po³±czeñ";
+$message[37][6]="Pochodzenie";
+$message[38][6]="Dostêp bezpo¶redni lub z Ulubionych/Bookmarków";
+$message[39][6]="Link z grupy dyskusyjnej";
+$message[40][6]="Link z zagranicznej wyszukiwarki internetowej";
+$message[41][6]="Link zewnêtrzny";
+$message[42][6]="Link wewnêtrzny (z serwera na którym jest strona)";
+$message[43][6]="S³owa kluczowe u¿yte w wyszukiwarkach internetowcyh";
+$message[44][6]="Kb";
+$message[45][6]="Nieznany (brak odwzorowania IP w DNS)";
+$message[46][6]="Nieznany system operacyjny";
+$message[47][6]="Nie znaleziony (B³±d HTTP 404)";
+$message[48][6]="Adres IP";
+$message[49][6]="Ilo¶æ&nbsp;b³êdów";
+$message[50][6]="Nieznane przegl±darki";
+$message[51][6]="Roboty sieciowe";
+$message[52][6]="wizyt/go¶ci";
+$message[53][6]="Roboty sieciowe";
+$message[54][6]="Darmowy analizator logów on-line";
+$message[55][6]="z";
+$message[56][6]="Strony";
+$message[57][6]="¯±dania";
+$message[58][6]="Wersje";
+$message[59][6]="Systemy operacyjne";
+$message[60][6]="Styczeñ";
+$message[61][6]="Luty";
+$message[62][6]="Marzec";
+$message[63][6]="Kwiecieñ";
+$message[64][6]="Maj";
+$message[65][6]="Czerwiec";
+$message[66][6]="Lipiec";
+$message[67][6]="Sierpieñ";
+$message[68][6]="Wrzesieñ";
+$message[69][6]="Pa¼dziernik";
+$message[70][6]="Listopad";
+$message[71][6]="Grudzieñ";
+$message[72][6]="Polish pl.png";
+$message[73][6]="Dzieñ Statystyki";
+
+# Greek (simos@hellug.gr)
+$PageCode[7]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-7\">";
+$message[0][7]="¶ãíùóôï";
+$message[1][7]="¶ãíùóôï (ìç áíáãíùñéóìÝíç ip)";
+$message[2][7]="¶ëëïé";
+$message[3][7]="ÅìöÜíéóç ëåðôïìåñéþí";
+$message[4][7]="ÇìÝñá";
+$message[5][7]="ÌÞíáò";
+$message[6][7]="¸ôïò";
+$message[7][7]="ÓôáôéóôéêÜ ôïõ";
+$message[8][7]="Ðñþôç åðßóêåøç";
+$message[9][7]="Ôåëåõôáßá åðßóêåøç";
+$message[10][7]="Áñéèìüò åðéóêÝøåùí";
+$message[11][7]="Ìïíáäéêïß åðéóêÝðôåò";
+$message[12][7]="Åðßóêåøç";
+$message[13][7]="ËÝîç-êëåéäß";
+$message[14][7]="ÁíáæÞôçóç";
+$message[15][7]="Ðïóïóôü";
+$message[16][7]="Ðåñßëçøç Êõêëïöïñßáò";
+$message[17][7]="ÅðéèÝìáôá/×þñåò";
+$message[18][7]="ÅðéóêÝðôåò";
+$message[19][7]="Óåëßäåò/URL";
+$message[20][7]="¿ñåò";
+$message[21][7]="ÖõëëïìåôñçôÝò";
+$message[22][7]="ÓöÜëìáôá HTTP";
+$message[23][7]="ÐáñáðÝìðôåò";
+$message[24][7]="ËåêôéêÜ&nbsp;ÁíáæÞôçóçò";
+$message[25][7]="ÅðéèÝìáôá/÷þñåò åðéóêåðôþí";
+$message[26][7]="óõóôÞìáôá";
+$message[27][7]="óåëßäåò";
+$message[28][7]="äéáöïñåôéêÝò óåëßäåò";
+$message[29][7]="Ðñüóâáóç";
+$message[30][7]="¶ëëá ëåêôéêÜ";
+$message[31][7]="ÖõëëïìåôñçôÝò óå ÷ñÞóç";
+$message[32][7]="Êùäéêïß óöáëìÜôùí HTTP";
+$message[33][7]="Åêäüóåéò Netscape";
+$message[34][7]="Åêäüóåéò MS Internet Explorer";
+$message[35][7]="ËåéôïõñãéêÜ óå ÷ñÞóç";
+$message[36][7]="Óýíäåóç óôï ôüðï áðü";
+$message[37][7]="ÐñïÝëåõóç";
+$message[38][7]="Åõèýò óýíäåóìïò / ÁãáðçìÝíá";
+$message[39][7]="Óýíäåóìïò áðü ÏìÜäá ÓõæçôÞóåùí";
+$message[40][7]="Óýíäåóìïò áðü Ìç÷áíÞ ÁíáæÞôçóçò ôïõ Internet";
+$message[41][7]="Óýíäåóìïò áðü åîùôåñéêÞ óåëßäá (Üëëïé äéêôõáêïß ôüðïé åêôüò ìç÷áíþí áíáæÞôçóçò)";
+$message[42][7]="Óýíäåóìïò áðü åóùôåñéêÞ óåëßäá (Üëëç óåëßäá óôïí ßäéï äéêôõáêü ôüðï)";
+$message[43][7]="ëåêôéêÜ ðïõ ÷ñçóéìïðïéÞèçêáí óå ìç÷áíÝò áíáæÞôçóçò";
+$message[44][7]="Kb";
+$message[45][7]="Äéåõèýíóåéò IP ðïõ äåí áíáãíùñßóôçêáí";
+$message[46][7]="¶ãíùóôï ëåéôïõñãéêü óýóôçìá (Ðåäßï ðáñÜðåìøçò)";
+$message[47][7]="Áðáéôïýìåíá áëëÜ ÷ùñßò íá âñåèïýí URL (Êþäéêáò HTTP 404)";
+$message[48][7]="Äéåýèõíóç IP";
+$message[49][7]="ÓõìâÜíôá&nbsp;ÓöáëìÜôùí";
+$message[50][7]="¶ãíùóôïé öõëëïìåôñçôÝò (Ðåäßï ðáñÜðåìøçò)";
+$message[51][7]="Ñïìðüô åðéóêÝðôåò";
+$message[52][7]="åðéóêÝøåéò/åðéóêÝðôç";
+$message[53][7]="ÅðéóêÝðôåò Ñïìðüô/ÁñÜ÷íåò";
+$message[54][7]="Åëåýèåñïò áíáëõôÞò êáôáãñáöþí ðñáãìáôéêïý ÷ñüíïõ ãéá ðñïçãìÝíá óôáôéóôéêÜ êßíçóçò WWW";
+$message[55][7]="áðü";
+$message[56][7]="Óåëßäåò";
+$message[57][7]="Åðéôõ÷ßåò";
+$message[58][7]="Åêäüóåéò";
+$message[59][7]="Ë/Ó";
+$message[60][7]="Éáí";
+$message[61][7]="Öåâ";
+$message[62][7]="ÌÜñ";
+$message[63][7]="Áðñ";
+$message[64][7]="ÌÜú";
+$message[65][7]="Éïýí";
+$message[66][7]="Éïýë";
+$message[67][7]="Áýã";
+$message[68][7]="Óåð";
+$message[69][7]="Ïêô";
+$message[70][7]="ÍïÝ";
+$message[71][7]="Äåê";
+$message[72][7]="Greek gr.png";
+$message[73][7]="Daily statistics";
+
+# Czech (js@fsid.cvut.cz)
+$PageCode[8]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-2\">";
+$message[0][8]="Neznámý";
+$message[1][8]="Neznámý (nepøelo¾ená IP)";
+$message[2][8]="Ostatní";
+$message[3][8]="Prohlédnout detaily";
+$message[4][8]="Den";
+$message[5][8]="Mìsíc";
+$message[6][8]="Rok";
+$message[8][8]="Statistika pro";
+$message[8][8]="První náv¹tìva";
+$message[9][8]="Poslední náv¹tìva";
+$message[10][8]="Poèet náv¹tìv";
+$message[11][8]="Unikátní náv¹tìvy";
+$message[12][8]="Náv¹tìva";
+$message[13][8]="Výrazy";
+$message[14][8]="Hledání";
+$message[15][8]="Procenta";
+$message[16][8]="Provoz celkem";
+$message[17][8]="Domény / zemì";
+$message[18][8]="Náv¹tìvy";
+$message[19][8]="Stránky/URL";
+$message[20][8]="Hodiny";
+$message[21][8]="Browsery (prohlí¾eèe)";
+$message[22][8]="HTTP Chyby";
+$message[23][8]="Reference";
+$message[24][8]="Hledané výrazy";
+$message[25][8]="Náv¹tìvy domény/zemì";
+$message[26][8]="hosts";
+$message[27][8]="stránek";
+$message[28][8]="rùzné stránky";
+$message[29][8]="Pøistup";
+$message[30][8]="Jiná slova";
+$message[31][8]="Pou¾ité browsery (prohlí¾eèe)";
+$message[32][8]="Chybové kódy HTTP ";
+$message[33][8]="Verze Netscape";
+$message[34][8]="Verze MS Internet Explorer";
+$message[35][8]="Pou¾itý OS";
+$message[36][8]="Konekce z";
+$message[37][8]="Pùvod";
+$message[38][8]="Pøímá adresa / Oblíbené (Bookmark)";
+$message[39][8]="Odkaz z Newsgroup";
+$message[40][8]="Odkaz z Internetového vyhledávaèe";
+$message[41][8]="Odkaz z jiné stránky (jiné stránky ne¾ vyhledávaèe)";
+$message[42][8]="Odkaz z vlastní stránky (jiná stránka na serveru)";
+$message[43][8]="výrazy pou¾ité ve vyhledávaèi";
+$message[44][8]="Kb";
+$message[45][8]="Nepøelo¾ená IP adresa";
+$message[46][8]="Neznámy OS (polo¾ka Referer)";
+$message[47][8]="Po¾adované, ale nenalezené URL (HTTP 404)";
+$message[48][8]="IP Addresa";
+$message[49][8]="Chyba&nbsp;Dotazù";
+$message[50][8]="neznámý browser (prohlí¾eè) (polo¾ka Referer)";
+$message[51][8]="Náv¹tìvnost robotù";
+$message[52][8]="náv¹tìv/náv¹tìvníka";
+$message[53][8]="Roboti";
+$message[54][8]="Volnì ¹iøitelný nástroj pro analýzu web statistik";
+$message[55][8]="z";
+$message[56][8]="Stránek";
+$message[57][8]="Hity";
+$message[58][8]="Verze";
+$message[59][8]="OS";
+$message[60][8]="Led";
+$message[61][8]="Úno";
+$message[62][8]="Bøe";
+$message[63][8]="Dub";
+$message[64][8]="Kvì";
+$message[65][8]="Èer";
+$message[66][8]="Èvc";
+$message[67][8]="Srp";
+$message[68][8]="Záø";
+$message[69][8]="Øíj";
+$message[70][8]="Lis";
+$message[71][8]="Pro";
+$message[72][8]="Czech cz.png";
+$message[73][8]="Daily statistics";
+
+# Portuguese
+$message[0][9]="Desconhecido";
+$message[1][9]="Desconhecido (ip não resolvido)";
+$message[2][9]="Outros visitantes";
+$message[3][9]="Ver detalhes";
+$message[4][9]="Dia";
+$message[5][9]="Mês";
+$message[6][9]="Ano";
+$message[9][9]="Estatísticas de";
+$message[8][9]="Primeira visita";
+$message[9][9]="Última visita";
+$message[10][9]="Numero de visitas";
+$message[11][9]="Visitantes únicos";
+$message[12][9]="Visita";
+$message[13][9]="Palavra chave";
+$message[14][9]="Pesquisa";
+$message[15][9]="Por cento";
+$message[16][9]="Resumo de Tráfego";
+$message[17][9]="Domínios/Países";
+$message[18][9]="Visitantes";
+$message[19][9]="Páginas/URL";
+$message[20][9]="Horas";
+$message[21][9]="Browsers";
+$message[22][9]="Erros HTTP";
+$message[23][9]="Referencias";
+$message[24][9]="Busca&nbsp;Palavras";
+$message[25][9]="Visitas domínios/países";
+$message[26][9]="hosts";
+$message[27][9]="páginas";
+$message[28][9]="paginas diferentes";
+$message[29][9]="Acesso";
+$message[30][9]="Outras palavras";
+$message[31][9]="Browsers usados";
+$message[32][9]="Erros HTTP";
+$message[33][9]="Versões Netscape";
+$message[34][9]="Versões MS Internet Explorer";
+$message[35][9]="SO Usados";
+$message[36][9]="Connectado a partir de";
+$message[37][9]="Origem";
+$message[38][9]="Endereço directo / Favoritos";
+$message[39][9]="Link de um  Newsgroup";
+$message[40][9]="Link de um Motor de Busca";
+$message[41][9]="Link de uma página externa (outros sites que não motores de busca)";
+$message[42][9]="Link de uma página interna (outras páginas no mesmo site)";
+$message[43][9]="palavras usadas em motores de busca";
+$message[44][9]="Kb";
+$message[45][9]="Endereço IP não resolvido";
+$message[46][9]="SO Desconhecido (Campo Referer)";
+$message[47][9]="URLs solicitadas e não encontradas (HTTP code 404)";
+$message[48][9]="Endereço IP";
+$message[49][9]="Erro&nbsp;Hits";
+$message[50][9]="Browsers Desconhecidos(Campo Referer)";
+$message[51][9]="Motores Visitantes";
+$message[52][9]="visitas/visitante";
+$message[53][9]="Motores/Spiders visitantes";
+$message[54][9]="Ferramenta de Análise de ficheiros de log em realtime para estatísticas avançadas";
+$message[55][9]="de";
+$message[56][9]="Páginas";
+$message[57][9]="Hits";
+$message[58][9]="Versões";
+$message[59][9]="SO";
+$message[60][9]="Jan";
+$message[61][9]="Fev";
+$message[62][9]="Mar";
+$message[63][9]="Abr";
+$message[64][9]="Mai";
+$message[65][9]="Jun";
+$message[66][9]="Jul";
+$message[67][9]="Ago";
+$message[68][9]="Set";
+$message[69][9]="Out";
+$message[70][9]="Nov";
+$message[71][9]="Dez";
+$message[72][9]="Portuguese pt.png";
+$message[73][9]="Daily statistics";
+
+
+
+#-------------------------------------------------------
+# Functions
+#-------------------------------------------------------
+
+sub html_head {
+       print "<html>\n";
+       print "<head>\n";
+       if ($PageCode[$Lang] ne "") { print "$PageCode[$Lang]\n"; }             # If not defined, iso-8859-1 is used in major countries
+       print "<meta http-equiv=\"description\" content=\"$PROG - Advanced Web Statistics for $LocalSite\">\n";
+       print "<meta http-equiv=\"keywords\" content=\"$LocalSite, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\">\n";
+       print "<meta name=\"robots\" content=\"index,follow\">\n";
+       print "<title>$message[7][$Lang] $LocalSite</title>\n";
+       print "<STYLE TYPE=text/css>
+<!--
+       BODY { font-family: arial, verdana, helvetica, sans-serif; font-size:12px; background-color:$color_Background; }
+       TH { font-family: arial, verdana, helvetica, sans-serif; font-size:10px; text-align:center; color:$color_titletext}
+       TD { font-family: arial, verdana, helvetica, sans-serif; font-size:10px; text-align:center; color:$color_text}
+       TD.LEFT { font-family: arial, verdana, helvetica, sans-serif; font-size:10px; text-align:left; color:$color_text }
+       A {     font-family: arial, verdana helvetica, sans-serif; font-size:10px; font-style:normal; color:$color_link; }
+       A:hover { color:$color_hover; }
+       DIV { text-align:justify; }
+       .TABLEBORDER { background-color:$color_TableBorder; }
+       .TABLEFRAME { background-color:$color_TableBG; }
+       .TABLEDATA { background-color:$color_Background; }
+       .TABLETITLE { font-family: verdana, arial, helvetica, sans-serif; font-size:14px; font-weight:bold; color:$color_TableTitle; background-color:$color_TableBGTitle; }
+       .classTooltip { position:absolute; top:0px; left:0px; z-index:2; width:280; visibility:hidden; font:8pt MS Comic Sans,arial,sans-serif; background-color:#FFFFE6; padding:10px 10px; border:1px solid black; }
+//-->
+</STYLE>\n
+";
+       print "</head>\n";
+       print "\n";
+       print "<body>\n";
+       print "<center><br>\n";
+       print "<font size=2><b>AWStats</b></font><br>\n\n";
+}
+
+
+sub html_end {
+       $date=localtime();
+       print "<CENTER><br><font size=1>$date - <b>Advanced Web Statistics $VERSION</b> - <a href=\"http://awstats.sourceforge.net\" target=_newawstats>Created by $PROG</a></font><br>\n";
+       print "<br>\n";
+       print "$HTMLEndSection\n";
+       print "</body>";
+       print "</html>";
+}
+
+sub tab_head {
+       print "
+               <TABLE CLASS=TABLEBORDER BORDER=0 CELLPADDING=1 CELLSPACING=0 WIDTH=600>
+               <TR><TD>
+               <TABLE CLASS=TABLEFRAME BORDER=0 CELLPADDING=3 CELLSPACING=0 WIDTH=100%>
+               <TR><TH COLSPAN=2 CLASS=TABLETITLE>$tab_titre</TH></TR>
+               <TR><TD COLSPAN=2>
+               <TABLE CLASS=TABLEDATA BORDER=1 CELLPADDING=2 CELLSPACING=0 WIDTH=100%>
+               ";
+}
+
+sub tab_end {
+       print "</TABLE></TD></TR></TABLE>";
+       print "</TD></TR></TABLE>\n\n";
+}
+
+sub UnescapeURLParam {
+       $_[0] =~ s/\+/ /gi;
+       $_[0] =~ s/%20/ /gi;    #
+       $_[0] =~ s/%22//gi;             #"
+       $_[0] =~ s/%26/ /gi;    #&
+       $_[0] =~ s/%27/ /gi;    #'
+       $_[0] =~ s/%28//gi;             #(
+       $_[0] =~ s/%29//gi;             #)
+       $_[0] =~ s/%2b/ /gi;    #+
+       $_[0] =~ s/%2c/ /gi;    #,
+       $_[0] =~ s/%2d/-/gi;    #-
+       $_[0] =~ s/%2e/\./gi;   #.
+       $_[0] =~ s/%2f/ /gi;    #/
+       $_[0] =~ s/%3a/:/gi;    #:
+       $_[0] =~ s/%3b/;/gi;    #;
+       $_[0] =~ s/%3c/ /gi;    #<
+       $_[0] =~ s/%3d/ /gi;    #=
+       $_[0] =~ s/%3e/ /gi;    #>
+       $_[0] =~ s/%3f/?/gi;    #?
+       $_[0] =~ s/%c9/é/gi;    #é maj
+       $_[0] =~ s/%e0/à/gi;    #à
+       $_[0] =~ s/%e7/ç/gi;    #ç
+       $_[0] =~ s/%e8/è/gi;    #è
+       $_[0] =~ s/%e9/é/gi;    #é
+       $_[0] =~ s/%ea/ê/gi;    #ê
+       $_[0] =~ s/%eb/ë/gi;    #ë
+       $_[0] =~ s/%ee/î/gi;    #î
+       $_[0] =~ s/%f1/ñ/gi;    #ñ
+       $_[0] =~ s/%f2/ò/gi;    #ò
+       $_[0] =~ s/%f3/ó/gi;    #ó
+       $_[0] =~ s/\"//gi;
+}
+
+sub error {
+       print "<font color=#880000>$_[0].</font><br>\n";
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "<br><b>\n"; }
+       print "Setup ($FileConfig file, web server or logfile permissions) may be wrong.\n";
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "</b><br>\n"; }
+       print "See README.TXT for informations on how to setup $PROG.\n";
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "</BODY>\n</HTML>\n"; }
+    die;
+}
+
+sub warning {
+       if ($WarningMessages == 1) {
+       print "$_[0]<br>\n";
+#              print "You can now remove this warning by changing <b>\$WarningMessages=1</b> parameter into <b>\$WarningMessages=0</b> in $PROG config file (<b>$FileConfig</b>).<br><br>\n"; }
+       }
+}
+
+sub debug {
+       if ($Debug) { print "DEBUG: $_[0]<br>\n"; }
+       0;
+}
+
+sub SkipHost {
+       foreach $Skip (@SkipHosts) { if ($_[0] =~ /$Skip/i) { return 1; } }
+       0; # Not in @SkipHosts
+}
+
+sub SkipFile {
+       foreach $Skip (@SkipFiles) { if ($_[0] =~ /$Skip/i) { return 1; } }
+       0; # Not inside @SkipFiles
+}
+
+sub Read_Config_File {
+       $FileConfig="";$DirConfig=$DIR;if (($DirConfig ne "") && (!($DirConfig =~ /\/$/)) && (!($DirConfig =~ /\\$/)) ) { $DirConfig .= "/"; }
+       if (open(CONFIG,"$DirConfig$PROG.$LocalSite.conf")) { $FileConfig="$DirConfig$PROG.$LocalSite.conf"; $FileSuffix=".$LocalSite"; }
+       if ($FileConfig eq "") { if (open(CONFIG,"$DirConfig$PROG.conf"))  { $FileConfig="$DirConfig$PROG.conf"; $FileSuffix=""; } }
+       if ($FileConfig eq "") { $FileConfig="$PROG.conf"; error("Error: Couldn't open config file \"$PROG.$LocalSite.conf\" nor \"$PROG.conf\" : $!"); }
+       &debug("Call to Read_Config_File. FileConfig=\"$FileConfig\"");
+       while (<CONFIG>) {
+               chomp $_; s/\r//;
+               $_ =~ s/#.*//;                                                          # Remove comments
+               $_ =~ tr/\t /  /s;                                                      # Change all blanks into " "
+               $_ =~ s/=/§/; @felter=split(/§/,$_);            # Change first "=" into "§" to split
+               $param=$felter[0]; $value=$felter[1];
+               $value =~ s/^ *//; $value =~ s/ *$//;
+               $value =~ s/^\"//; $value =~ s/\"$//;
+               # Read main section
+               if ($param =~ /^LogFile/) {
+                       $LogFile=$value;
+                       # Replace %YYYY %YY %MM %DD %HH with current value
+                       $LogFile =~ s/%YYYY/$nowyear/g;
+                       $LogFile =~ s/%YY/$nowsmallyear/g;
+                       $LogFile =~ s/%MM/$nowmonth/g;
+                       $LogFile =~ s/%DD/$nowday/g;
+                       $LogFile =~ s/%HH/$nowhour/g;
+                       next;
+                       }
+               if ($param =~ /^LogFormat/)            { $LogFormat=$value; next; }
+               if ($param =~ /^AllowToUpdateStatsFromBrowser/  { $AllowToUpdateStatsFromBrowser=$value; next; }
+               if ($param =~ /^HostAliases/) {
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $HostAliases[$i]=$elem; $i++; }
+                       next;
+                       }
+               if ($param =~ /^SkipFiles/) {
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $SkipFiles[$i]=$elem; $i++; }
+                       next;
+                       }
+               if ($param =~ /^SkipHosts/) {
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $SkipHosts[$i]=$elem; $i++; }
+                       next;
+                       }
+               if ($param =~ /^DirData/)               { $DirData=$value; next; }
+               if ($param =~ /^DirCgi/)                { $DirCgi=$value; next; }
+               if ($param =~ /^DirIcons/)              { $DirIcons=$value; next; }
+               if ($param =~ /^DNSLookup/)             { $DNSLookup=$value; next; }
+               if ($param =~ /^PurgeLogFile/)          { $PurgeLogFile=$value; next; }
+               if ($param =~ /^ArchiveLogRecords/)     { $ArchiveLogRecords=$value; next; }
+               # Read optional section
+               if ($param =~ /^Lang/)                  { $Lang=$value; next; }
+               if ($param =~ /^DefaultFile/)           { $DefaultFile=$value; next; }
+               if ($param =~ /^WarningMessages/)       { $WarningMessages=$value; next; }
+               if ($param =~ /^ShowLinksOnUrl/)        { $ShowLinksOnUrl=$value; next; }
+               if ($param =~ /^ShowFlagLinks/)         { $ShowFlagLinks=$value; next; }
+               if ($param =~ /^HTMLEndSection/)        { $HTMLEndSection=$value; next; }
+               if ($param =~ /^BarWidth/)              { $BarWidth=$value; next; }
+               if ($param =~ /^BarHeight/)             { $BarHeight=$value; next; }
+               if ($param =~ /^MaxNbOfDomain/)         { $MaxNbOfDomain=$value; next; }
+               if ($param =~ /^MaxNbOfHostsShown/)     { $MaxNbOfHostsShown=$value; next; }
+               if ($param =~ /^MinHitHost/)            { $MinHitHost=$value; next; }
+               if ($param =~ /^MaxNbOfRobotShown/)     { $MaxNbOfRobotShown=$value; next; }
+               if ($param =~ /^MinHitRobot/)           { $MinHitRobot=$value; next; }
+               if ($param =~ /^MaxNbOfPageShown/)      { $MaxNbOfPageShown=$value; next; }
+               if ($param =~ /^MinHitFile/)            { $MinHitFile=$value; next; }
+               if ($param =~ /^MaxNbOfRefererShown/)   { $MaxNbOfRefererShown=$value; next; }
+               if ($param =~ /^MinHitRefer/)           { $MinHitRefer=$value; next; }
+               if ($param =~ /^MaxNbOfKeywordsShown/)  { $MaxNbOfKeywordsShown=$value; next; }
+               if ($param =~ /^MinHitKeyword/)         { $MinHitKeyword=$value; next; }
+               if ($param =~ /^SplitSearchString/)     { $SplitSearchString=$value; next; }
+               if ($param =~ /^Logo/)                  { $Logo=$value; next; }
+               if ($param =~ /^color_Background/)      { $color_Background=$value; next; }
+               if ($param =~ /^color_TableTitle/)      { $color_TableTitle=$value; next; }
+               if ($param =~ /^color_TableBGTitle/)    { $color_TableBGTitle=$value; next; }
+               if ($param =~ /^color_TableRowTitle/)   { $color_TableRowTitle=$value; next; }
+               if ($param =~ /^color_TableBGRowTitle/) { $color_TableBGRowTitle=$value; next; }
+               if ($param =~ /^color_TableBorder/)     { $color_TableBorder=$value; next; }
+               if ($param =~ /^color_TableBG/)         { $color_TableBG=$value; next; }
+               if ($param =~ /^color_link/)            { $color_link=$value; next; }
+               if ($param =~ /^color_hover/)           { $color_hover=$value; next; }
+               if ($param =~ /^color_text/)            { $color_text=$value; next; }
+               if ($param =~ /^color_titletext/)       { $color_titletext=$value; next; }
+               if ($param =~ /^color_v/)               { $color_v=$value; next; }
+               if ($param =~ /^color_w/)               { $color_w=$value; next; }
+               if ($param =~ /^color_p/)               { $color_p=$value; next; }
+               if ($param =~ /^color_h/)               { $color_h=$value; next; }
+               if ($param =~ /^color_k/)               { $color_k=$value; next; }
+               if ($param =~ /^color_s/)               { $color_s=$value; next; }
+       }
+       close CONFIG;
+}
+
+sub Check_Config {
+       &debug("Call to Check_Config");
+       # Main section
+       if (! ($LogFormat =~ /[1-2]/))            { error("Error: LogFormat parameter is wrong. Value is '$LogFormat' (should be 1 or 2)"); }
+       if (! ($DNSLookup =~ /[0-1]/))            { error("Error: DNSLookup parameter is wrong. Value is '$DNSLookup' (should be 0 or 1)"); }
+       # Optional section
+       if (! ($AllowToUpdateStatsFromBrowser) =~ /[0-1]/)) { $AllowToUpdateStatsFromBrowser=1; }
+       if (! ($PurgeLogFile =~ /[0-1]/))         { $PurgeLogFile=0; }
+       if (! ($ArchiveLogRecords =~ /[0-1]/))    { $ArchiveLogRecords=1; }
+       if (! ($Lang =~ /[0-9]/))                 { $Lang=0; }
+       if ($DefaultFile eq "")                   { $DefaultFile="index.html"; }
+       if (! ($WarningMessages =~ /[0-1]/))      { $WarningMessages=1; }
+       if (! ($ShowLinksOnURL =~ /[0-1]/))       { $ShowLinksOnURL=1; }
+       if (! ($ShowFlagLinks =~ /[0-1]/))        { $ShowFlagLinks=1; }
+       if (! ($BarWidth =~ /[\d]/))              { $BarWidth=260; }
+       if (! ($BarHeight =~ /[\d]/))             { $BarHeight=220; }
+       if (! ($MaxNbOfDomain =~ /[\d]/))         { $MaxNbOfDomain=25; }
+       if (! ($MaxNbOfHostsShown =~ /[\d]/))     { $MaxNbOfHostsShown=25; }
+       if (! ($MinHitHost =~ /[\d]/))            { $MinHitHost=1; }
+       if (! ($MaxNbOfRobotShown =~ /[\d]/))     { $MaxNbOfRobotShown=25; }
+       if (! ($MinHitRobot =~ /[\d]/))           { $MinHitRobot=1; }
+       if (! ($MaxNbOfPageShown =~ /[\d]/))      { $MaxNbOfPageShown=25; }
+       if (! ($MinHitFile =~ /[\d]/))            { $MinHitFile=1; }
+       if (! ($MaxNbOfRefererShown =~ /[\d]/))   { $MaxNbOfRefererShown=25; }
+       if (! ($MinHitRefer =~ /[\d]/))           { $MinHitRefer=1; }
+       if (! ($MaxNbOfKeywordsShown =~ /[\d]/))  { $MaxNbOfKeywordsShown=25; }
+       if (! ($MinHitKeyword =~ /[\d]/))         { $MinHitKeyword=1; }
+       if (! ($SplitSearchString =~ /[0-1]/))    { $SplitSearchString=0; }
+       if ($Logo eq "")                          { $Logo="awstats_logo1.png"; }
+       if (! ($color_Background =~ /[\d]/))      { $color_Background="#FFFFFF";        }
+       if (! ($color_TableBorder =~ /[\d]/))     { $color_TableBorder="#000000"; }
+       if (! ($color_TableBG =~ /[\d]/))         { $color_TableBG="#DDDDBB"; }
+       if (! ($color_TableTitle =~ /[\d]/))      { $color_TableTitle="#FFFFFF"; }
+       if (! ($color_TableBGTitle =~ /[\d]/))    { $color_TableBGTitle="#666666"; }
+       if (! ($color_TableRowTitle =~ /[\d]/))   { $color_TableRowTitle="#FFFFFF"; }
+       if (! ($color_TableBGRowTitle =~ /[\d]/)) { $color_TableBGRowTitle="#BBBBBB"; }
+       if (! ($color_link =~ /[\d]/))            { $color_link="#4000FF"; }
+       if (! ($color_hover =~ /[\d]/))           { $color_hover="#4000FF"; }
+       if (! ($color_text =~ /[\d]/))            { $color_text="#000000"; }
+       if (! ($color_titletext =~ /[\d]/))       { $color_titletext="#000000"; }
+       if (! ($color_v =~ /[\d]/))               { $color_v="#F3F300"; }
+       if (! ($color_w =~ /[\d]/))               { $color_w="#FF9933"; }
+       if (! ($color_p =~ /[\d]/))               { $color_p="#4477DD"; }
+       if (! ($color_h =~ /[\d]/))               { $color_h="#66F0FF"; }
+       if (! ($color_k =~ /[\d]/))               { $color_k="#339944"; }
+       if (! ($color_s =~ /[\d]/))               { $color_s="#8888DD"; }
+}
+
+sub Read_History_File {
+       &debug("Call to Read_History_File ($_[0],$_[1],$_[2])");
+       if ($HistoryFileAlreadyRead{"$_[0]$_[1]"}) { return 0; }                        # Protect code to invoke function only once for each month/year
+       $HistoryFileAlreadyRead{"$_[0]$_[1]"}=1;                                                        # Protect code to invoke function only once for each month/year
+       if (! -s "$DirData/$PROG$_[1]$_[0]$FileSuffix.txt") { return 0; }       # If file not exists, return
+       open(HISTORY,"$DirData/$PROG$_[1]$_[0]$FileSuffix.txt") || error("Error: Couldn't open for read file \"$DirData/$PROG$_[1]$_[0]$FileSuffix.txt\" : $!");        # Month before Year kept for backward compatibility
+       $readdomain=0;$readvisitor=0;$readunknownip=0;$readsider=0;$readtime=0;$readbrowser=0;$readnsver=0;$readmsiever=0;
+       $reados=0;$readrobot=0;$readunknownreferer=0;$readunknownrefererbrowser=0;$readpagerefs=0;$readse=0;
+       $readsearchwords=0;$readerrors=0;$readerrors404=0; $readday=0;
+       while (<HISTORY>) {
+               chomp $_; s/\r//;
+               @field=split(/ /,$_);
+               if ($field[0] eq "FirstTime")       { $FirstTime{$_[0].$_[1]}=$field[1]; next; }
+           if ($field[0] eq "LastTime")        { if ($LastTime{$_[0].$_[1]} < $field[1]) { $LastTime{$_[0].$_[1]}=$field[1]; }; next; }
+               if ($field[0] eq "TotalVisits")     { $MonthVisits{$_[0].$_[1]}+=$field[1]; next; }
+           if ($field[0] eq "BEGIN_VISITOR")   { $readvisitor=1; next; }
+           if ($field[0] eq "END_VISITOR")     { $readvisitor=0; next; }
+           if ($field[0] eq "BEGIN_UNKNOWNIP") { $readunknownip=1; next; }
+           if ($field[0] eq "END_UNKNOWNIP")   { $readunknownip=0; next; }
+           if ($field[0] eq "BEGIN_TIME")      { $readtime=1; next; }
+           if ($field[0] eq "END_TIME")        { $readtime=0; next; }
+           if ($field[0] eq "BEGIN_DAY")       { $readday=1; next; }
+           if ($field[0] eq "END_DAY")         { $readday=0; next; }
+       
+           if ($readvisitor) {
+               if (($field[0] ne "Unknown") && ($field[1] > 0)) { $MonthUnique{$_[0].$_[1]}++; }
+               }
+           if ($readunknownip) {
+               $MonthUnique{$_[0].$_[1]}++;
+                       }
+           if ($readtime) {
+               $MonthPage{$_[0].$_[1]}+=$field[1]; $MonthHits{$_[0].$_[1]}+=$field[2]; $MonthBytes{$_[0].$_[1]}+=$field[3];
+                       }
+               if ($readday)
+               {
+                       $DayPage{$field[0]}+=$field[1]; $DayHits{$field[0]}+=$field[2]; $DayBytes{$field[0]}+=$field[3]; $DayVisits{$field[0]}+=$field[4]; $DayUnique{$field[0]}+=$field[5];
+               }       
+       
+               # If $_[2] == 0, it means we don't need second part of history file.
+               if ($_[2]) {
+               if ($field[0] eq "BEGIN_DOMAIN") { $readdomain=1; next; }
+                       if ($field[0] eq "END_DOMAIN")   { $readdomain=0; next; }
+                       if ($field[0] eq "BEGIN_SIDER")  { $readsider=1; next; }
+                       if ($field[0] eq "END_SIDER")    { $readsider=0; next; }
+               if ($field[0] eq "BEGIN_BROWSER") { $readbrowser=1; next; }
+               if ($field[0] eq "END_BROWSER") { $readbrowser=0; next; }
+               if ($field[0] eq "BEGIN_NSVER") { $readnsver=1; next; }
+               if ($field[0] eq "END_NSVER") { $readnsver=0; next; }
+               if ($field[0] eq "BEGIN_MSIEVER") { $readmsiever=1; next; }
+               if ($field[0] eq "END_MSIEVER") { $readmsiever=0; next; }
+               if ($field[0] eq "BEGIN_OS") { $reados=1; next; }
+               if ($field[0] eq "END_OS") { $reados=0; next; }
+               if ($field[0] eq "BEGIN_ROBOT") { $readrobot=1; next; }
+               if ($field[0] eq "END_ROBOT") { $readrobot=0; next; }
+               if ($field[0] eq "BEGIN_UNKNOWNREFERER") { $readunknownreferer=1; next; }
+               if ($field[0] eq "END_UNKNOWNREFERER")   { $readunknownreferer=0; next; }
+               if ($field[0] eq "BEGIN_UNKNOWNREFERERBROWSER") { $readunknownrefererbrowser=1; next; }
+               if ($field[0] eq "END_UNKNOWNREFERERBROWSER")   { $readunknownrefererbrowser=0; next; }
+               if ($field[0] eq "BEGIN_PAGEREFS") { $readpagerefs=1; next; }
+               if ($field[0] eq "END_PAGEREFS") { $readpagerefs=0; next; }
+               if ($field[0] eq "BEGIN_SEREFERRALS") { $readse=1; next; }
+               if ($field[0] eq "END_SEREFERRALS") { $readse=0; next; }
+               if ($field[0] eq "BEGIN_SEARCHWORDS") { $readsearchwords=1; next; }
+               if ($field[0] eq "END_SEARCHWORDS") { $readsearchwords=0; next; }
+               if ($field[0] eq "BEGIN_ERRORS") { $readerrors=1; next; }
+               if ($field[0] eq "END_ERRORS") { $readerrors=0; next; }
+               if ($field[0] eq "BEGIN_SIDER_404") { $readerrors404=1; next; }
+               if ($field[0] eq "END_SIDER_404") { $readerrors404=0; next; }
+                       if ($field[0] eq "BEGIN_DAY")       { $readday=1; next; }
+               if ($field[0] eq "END_DAY")         { $readday=0; next; }
+       
+               if ($readvisitor) {
+                       $_hostmachine_p{$field[0]}+=$field[1];
+                       $_hostmachine_h{$field[0]}+=$field[2];
+                       $_hostmachine_k{$field[0]}+=$field[3];
+                       if ($_hostmachine_l{$field[0]} eq "") { $_hostmachine_l{$field[0]}=$field[4]; }
+                       next; }
+               if ($readunknownreferer) {
+                       if ($_unknownreferer_l{$field[0]} eq "") { $_unknownreferer_l{$field[0]}=$field[1]; }
+                       next; }
+                       if ($readdomain) {
+                               $_domener_p{$field[0]}+=$field[1];
+                               $_domener_h{$field[0]}+=$field[2];
+                               $_domener_k{$field[0]}+=$field[3];
+                               next; }
+               if ($readunknownip) {
+                       if ($_unknownip_l{$field[0]} eq "") { $_unknownip_l{$field[0]}=$field[1]; }
+                       next; }
+                       if ($readsider) { $_sider_p{$field[0]}+=$field[1]; next; }
+               if ($readtime) {
+                       $_time_p[$field[0]]+=$field[1]; $_time_h[$field[0]]+=$field[2]; $_time_k[$field[0]]+=$field[3];
+                       next; }
+               if ($readbrowser) { $_browser_h{$field[0]}+=$field[1]; next; }
+               if ($readnsver) { $_nsver_h[$field[0]]+=$field[1]; next; }
+               if ($readmsiever) { $_msiever_h[$field[0]]+=$field[1]; next; }
+               if ($reados) { $_os_h{$field[0]}+=$field[1]; next; }
+               if ($readrobot) {
+                               $_robot_h{$field[0]}+=$field[1];
+                       if ($_robot_l{$field[0]} eq "") { $_robot_l{$field[0]}=$field[2]; }
+                               next; }
+               if ($readunknownrefererbrowser) {
+                       if ($_unknownrefererbrowser_l{$field[0]} eq "") { $_unknownrefererbrowser_l{$field[0]}=$field[1]; }
+                       next; }
+               if ($field[0] eq "HitFrom0") { $_from_h[0]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom1") { $_from_h[1]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom2") { $_from_h[2]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom3") { $_from_h[3]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom4") { $_from_h[4]+=$field[1]; next; }
+               if ($readpagerefs) { $_pagesrefs_h{$field[0]}+=$field[1]; next; }
+               if ($readse) { $_se_referrals_h{$field[0]}+=$field[1]; next; }
+               if ($readsearchwords) { $_keywords{$field[0]}+=$field[1]; next; }
+               if ($readerrors) { $_errors_h{$field[0]}+=$field[1]; next; }
+               if ($readerrors404) { $_sider404_h{$field[0]}+=$field[1]; $_referer404_h{$field[0]}=$field[2]; next; }
+       
+                       }
+               }
+       close HISTORY;
+}
+
+sub Save_History_File {
+       &debug("Call to Save_History_File ($_[0],$_[1])");
+       open(HISTORYTMP,">$DirData/$PROG$_[1]$_[0]$FileSuffix.tmp.$$") || error("Error: Couldn't open file \"$DirData/$PROG$_[1]$_[0]$FileSuffix.tmp.$$\" : $!");       # Month before Year kept for backward compatibility
+
+       print HISTORYTMP "FirstTime $FirstTime{$_[0].$_[1]}\n";
+       print HISTORYTMP "LastTime $LastTime{$_[0].$_[1]}\n";
+       print HISTORYTMP "TotalVisits $MonthVisits{$_[0].$_[1]}\n";
+
+       print HISTORYTMP "BEGIN_DOMAIN\n";
+       foreach $key (keys %_domener_h) {
+               $page=$_domener_p{$key};$kilo=$_domener_k{$key};
+               if ($page == "") {$page=0;}
+               if ($kilo == "") {$kilo=0;}
+               print HISTORYTMP "$key $page $_domener_h{$key} $kilo\n"; next;
+               }
+       print HISTORYTMP "END_DOMAIN\n";
+
+       print HISTORYTMP "BEGIN_VISITOR\n";
+       foreach $key (keys %_hostmachine_h) {
+               $page=$_hostmachine_p{$key};$kilo=$_hostmachine_k{$key};
+               if ($page == "") {$page=0;}
+               if ($kilo == "") {$kilo=0;}
+               print HISTORYTMP "$key $page $_hostmachine_h{$key} $kilo $_hostmachine_l{$key}\n"; next;
+               }
+       print HISTORYTMP "END_VISITOR\n";
+
+       print HISTORYTMP "BEGIN_UNKNOWNIP\n";
+       foreach $key (keys %_unknownip_l) { print HISTORYTMP "$key $_unknownip_l{$key}\n"; next; }
+       print HISTORYTMP "END_UNKNOWNIP\n";
+
+       print HISTORYTMP "BEGIN_SIDER\n";
+       foreach $key (keys %_sider_p) { print HISTORYTMP "$key $_sider_p{$key}\n"; next; }
+       print HISTORYTMP "END_SIDER\n";
+
+       print HISTORYTMP "BEGIN_TIME\n";
+       for ($ix=0; $ix<=23; $ix++) { print HISTORYTMP "$ix $_time_p[$ix] $_time_h[$ix] $_time_k[$ix]\n"; next; }
+       print HISTORYTMP "END_TIME\n";
+
+       print HISTORYTMP "BEGIN_DAY\n";
+    foreach $key (keys %DayPages) {
+        if ($key =~ /^$_[0]$_[1]/) {   # Found a day entry of the good month
+               print HISTORYTMP "$key $DayPages{$key} $DayHits{$key} $DayBytes{$key} $DayVisits{$key} $DayUnique{$key}\n"; next;
+               }
+        }
+    print HISTORYTMP "END_DAY\n";
+
+       print HISTORYTMP "BEGIN_BROWSER\n";
+       foreach $key (keys %_browser_h) { print HISTORYTMP "$key $_browser_h{$key}\n"; next; }
+       print HISTORYTMP "END_BROWSER\n";
+       print HISTORYTMP "BEGIN_NSVER\n";
+       for ($i=1; $i<=$#_nsver_h; $i++) { print HISTORYTMP "$i $_nsver_h[$i]\n"; next; }
+       print HISTORYTMP "END_NSVER\n";
+       print HISTORYTMP "BEGIN_MSIEVER\n";
+       for ($i=1; $i<=$#_msiever_h; $i++) { print HISTORYTMP "$i $_msiever_h[$i]\n"; next; }
+       print HISTORYTMP "END_MSIEVER\n";
+       print HISTORYTMP "BEGIN_OS\n";
+       foreach $key (keys %_os_h) { print HISTORYTMP "$key $_os_h{$key}\n"; next; }
+       print HISTORYTMP "END_OS\n";
+
+       print HISTORYTMP "BEGIN_ROBOT\n";
+       foreach $key (keys %_robot_h) { print HISTORYTMP "$key $_robot_h{$key} $_robot_l{$key}\n"; next; }
+       print HISTORYTMP "END_ROBOT\n";
+
+       print HISTORYTMP "BEGIN_UNKNOWNREFERER\n";
+       foreach $key (keys %_unknownreferer_l) { print HISTORYTMP "$key $_unknownreferer_l{$key}\n"; next; }
+       print HISTORYTMP "END_UNKNOWNREFERER\n";
+       print HISTORYTMP "BEGIN_UNKNOWNREFERERBROWSER\n";
+       foreach $key (keys %_unknownrefererbrowser_l) { print HISTORYTMP "$key $_unknownrefererbrowser_l{$key}\n"; next; }
+       print HISTORYTMP "END_UNKNOWNREFERERBROWSER\n";
+
+       print HISTORYTMP "HitFrom0 $_from_h[0]\n";
+       print HISTORYTMP "HitFrom1 $_from_h[1]\n";
+       print HISTORYTMP "HitFrom2 $_from_h[2]\n";
+       print HISTORYTMP "HitFrom3 $_from_h[3]\n";
+       print HISTORYTMP "HitFrom4 $_from_h[4]\n";
+
+       print HISTORYTMP "BEGIN_SEREFERRALS\n";
+       foreach $key (keys %_se_referrals_h) { print HISTORYTMP "$key $_se_referrals_h{$key}\n"; next; }
+       print HISTORYTMP "END_SEREFERRALS\n";
+
+       print HISTORYTMP "BEGIN_PAGEREFS\n";
+       foreach $key (keys %_pagesrefs_h) { print HISTORYTMP "$key $_pagesrefs_h{$key}\n"; next; }
+       print HISTORYTMP "END_PAGEREFS\n";
+
+       print HISTORYTMP "BEGIN_SEARCHWORDS\n";
+       foreach $key (keys %_keywords) { if ($_keywords{$key}) { print HISTORYTMP "$key $_keywords{$key}\n"; } next; }
+       print HISTORYTMP "END_SEARCHWORDS\n";
+
+       print HISTORYTMP "BEGIN_ERRORS\n";
+       foreach $key (keys %_errors_h) { print HISTORYTMP "$key $_errors_h{$key}\n"; next; }
+       print HISTORYTMP "END_ERRORS\n";
+
+       print HISTORYTMP "BEGIN_SIDER_404\n";
+       foreach $key (keys %_sider404_h) { print HISTORYTMP "$key $_sider404_h{$key} $_referer404_h{$key}\n"; next; }
+       print HISTORYTMP "END_SIDER_404\n";
+
+       close(HISTORYTMP);
+}
+
+sub Init_HashArray {
+       reset _;                # Delete all hash arrays with name beginning by _
+}
+
+
+
+#-------------------------------------------------------
+# MAIN
+#-------------------------------------------------------
+if ($ENV{"GATEWAY_INTERFACE"} ne "") {
+       print("Content-type: text/html\n\n\n");
+       $QueryString = $ENV{"QUERY_STRING"};
+       if ($QueryString =~ /site=/) { $LocalSite=$QueryString; $LocalSite =~ s/.*site=//; $LocalSite =~ s/&.*//; $LocalSite =~ s/ .*//; }
+       else { $LocalSite = $ENV{"SERVER_NAME"}; }
+}
+else {
+       if ($ARGV[0] eq "-h") { $LocalSite = $ARGV[1]; }        # Kept for backward compatibility but useless
+       $QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
+       if ($QueryString =~ /site=/) { $LocalSite=$QueryString; $LocalSite =~ s/.*site=//; $LocalSite =~ s/&.*//; $LocalSite =~ s/ .*//; }
+}
+$QueryString =~ s/<script.*$//i;                                               # This is to avoid 'Cross Site Scripting attacks'
+if ($QueryString =~ /debug=/) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
+($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
+$LocalSite =~ tr/A-Z/a-z/;
+$LocalSiteWithoutwww = $LocalSite; $LocalSiteWithoutwww =~ s/www\.//;
+if (($ENV{"GATEWAY_INTERFACE"} eq "") && ($LocalSite eq "")) {
+       print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
+       print "$PROG is a free web server logfile analyzer (in Perl) to show you advanced\n";
+       print "web statistics. Distributed under GNU General Public Licence.\n";
+       print "\n";
+       print "Syntax: $PROG.$Extension site=www.host.com\n";
+       print "  This runs $PROG in command line to update statistics of www.host.com web\n";
+       print "  site, from the log file defined in config file, and create an HTML report.\n";
+       print "  First, $PROG tries to read $PROG.www.host.com.conf as the config file,\n";
+       print "  if not found, it will read $PROG.conf\n";
+       print "  See README.TXT file to know how to create the config file.\n";
+       print "\n";
+       print "Advanced options:\n";
+       print "  lang=X              to generate a report page in language number X\n";
+       print "  month=MM year=YYYY  to show a report for an old month=MM, year=YYYY\n";
+       print "  Warning : Those 'date' options doesn't allow you to process old log file.\n";
+       print "  It only allows you to see a report of old already processed data for an old\n";
+       print "  month/year instead of current month/year. To update stats from a log file,\n";
+       print "  use standard syntax. Be care to process log files in chronological order.\n";
+       print "\n";
+       print "Now supports/detects:\n";
+       print "  Number of visits and unique visitors\n";
+       print "  Rush hours\n";
+       print "  Most often viewed pages\n";
+       @DomainsArray=keys %DomainsHash;
+       print "  ".(@DomainsArray)." domains/countries\n";
+       @BrowserArray=keys %BrowsersHash;
+       print "  ".(@BrowserArray)." browsers\n";
+       @OSArray=keys %OSHash;
+       print "  ".(@OSArray)." Operating Systems\n";
+       @RobotArray=keys %RobotHash;
+       print "  ".(@RobotArray)." robots\n";
+       @SearchEnginesArray=keys %SearchEnginesHash;
+       print "  ".(@SearchEnginesArray)." search engines (and keywords or keyphrases used from them)\n";
+       print "  All HTTP errors\n";
+       print "New versions and support at http://awstats.sourceforge.net\n";
+       exit 0;
+       }
+
+# Get current time
+($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday,$nowyday,$nowisdst) = localtime(time);
+if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; }
+$nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//;
+if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; }
+if ($nowday < 10) { $nowday = "0$nowday"; }
+
+# Read config file
+&Read_Config_File;
+if ($QueryString =~ /lang=/) { $Lang=$QueryString; $Lang =~ s/.*lang=//; $Lang =~ s/&.*//;  $Lang =~ s/ .*//; }
+
+# Check and correct bad parameters
+&Check_Config; 
+
+# Print html header
+&html_head;
+
+# Init other parameters
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { $DirCgi=""; }
+if (($DirCgi ne "") && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= "/"; }
+if ($DirData eq "" || $DirData eq ".") { $DirData=$DIR; }      # If not defined or choosed to "." value then DirData is current dir
+if ($DirData eq "")  { $DirData="."; }                                         # If current dir not defined then we put it to "."
+$DirData =~ s/\/$//;
+if ($DNSLookup) { use Socket; }
+$NewDNSLookup=$DNSLookup;
+%monthlib =  ( "01","$message[60][$Lang]","02","$message[61][$Lang]","03","$message[62][$Lang]","04","$message[63][$Lang]","05","$message[64][$Lang]","06","$message[65][$Lang]","07","$message[66][$Lang]","08","$message[67][$Lang]","09","$message[68][$Lang]","10","$message[69][$Lang]","11","$message[70][$Lang]","12","$message[71][$Lang]" );
+# monthnum must be in english because it's used to translate log date in log files which are always in english
+%monthnum =  ( "Jan","01","Feb","02","Mar","03","Apr","04","May","05","Jun","06","Jul","07","Aug","08","Sep","09","Oct","10","Nov","11","Dec","12" );
+
+# Check year and month parameters
+if ($QueryString =~ /year=/)   { $YearRequired=$QueryString; $YearRequired =~ s/.*year=//; $YearRequired =~ s/&.*//;  $YearRequired =~ s/ .*//; }
+if ($YearRequired !~ /^[\d][\d][\d][\d]$/) { $YearRequired=$nowyear; }
+if ($QueryString =~ /month=/)  { $MonthRequired=$QueryString; $MonthRequired =~ s/.*month=//; $MonthRequired =~ s/&.*//; $MonthRequired =~ s/ .*//; }
+if ($MonthRequired ne "year" && $MonthRequired !~ /^[\d][\d]$/) { $MonthRequired=$nowmonth; }
+
+$BrowsersHash{"netscape"}="<font color=blue>Netscape</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">($message[58][$Lang])</a>";
+$BrowsersHash{"msie"}="<font color=blue>MS Internet Explorer</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">($message[58][$Lang])</a>";
+
+if (@HostAliases == 0) {
+       warning("Warning: HostAliases parameter is not defined, $PROG will choose \"$LocalSite localhost 127.0.0.1\".");
+       $HostAliases[0]=$LocalSite; $HostAliases[1]="localhost"; $HostAliases[2]="127.0.0.1";
+       }
+
+$LocalSiteIsInHostAliases=0;
+foreach $elem (@HostAliases) { if ($elem eq $LocalSite) { $LocalSiteIsInHostAliases=1; last; } }
+if ($LocalSiteIsInHostAliases == 0) { $HostAliases[@HostAliases]=$LocalSite; }
+if (@SkipFiles == 0) {
+       $SkipFiles[0]="\.css";$SkipFiles[1]="\.js";$SkipFiles[2]="\.class";$SkipFiles[3]="robots\.txt";
+       }
+$FirstTime=0;$LastTime=0;$TotalVisits=0;$TotalHosts=0;$TotalUnique=0;$TotalDifferentPages=0;$TotalDifferentKeywords=0;$TotalKeywords=0;
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix;if ($monthix < 10) { $monthix  = "0$monthix"; }
+       $FirstTime{$YearRequired.$monthix}=0;$LastTime{$YearRequired.$monthix}=0;
+       $MonthVisits{$YearRequired.$monthix}=0;$MonthUnique{$YearRequired.$monthix}=0;$MonthPage{$YearRequired.$monthix}=0;$MonthHits{$YearRequired.$monthix}=0;$MonthBytes{$YearRequired.$monthix}=0;
+       }
+for ($ix=0; $ix<5; $ix++) {    $_from_h[$ix]=0; }
+
+
+print "<a href=\"http://awstats.sourceforge.net\" target=_newawstats><img src=$DirIcons/other/$Logo border=0 alt=\"$PROG Official Web Site\" title=\"$PROG Official Web Site\"></a><br>\n";
+if ($ShowFlagLinks == 1) {
+       my $sp = '';
+       for (0..5) {            # Only flags for 5 major languages
+               if ($Lang != $_) {
+                       my ($lng, $flg) = split(/\s+/, $message[72][$_]);
+                       print "$sp<a href=\"$DirCgi$PROG.$Extension?site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$_\"><img src=\"$DirIcons\/flags\/$flg\" height=14 border=0 alt=\"$lng\" title=\"$lng\"></a>\n";
+                       $sp = '&nbsp;';
+               }
+       }
+       print "<br>";
+}
+#print "<b><font face=\"verdana\" size=1><a href=\"$HomeURL\">HomePage</a> &#149\; <a href=\"javascript:history.back()\">Back</a></font></b><br>\n";
+print "<font size=1>$message[54][$Lang]</font><br>\n";
+print "<BR><BR>\n";
+
+
+# No realtime (no log processing) if not current month or full current year asked
+if (($YearRequired == $nowyear) && ($MonthRequired eq "year" || $MonthRequired == $nowmonth)) {
+
+       #------------------------------------------
+       # READING THE LAST PROCESSED HISTORY FILE
+       #------------------------------------------
+
+       # Search last file
+       opendir(DIR,"$DirData");
+       @filearray = sort readdir DIR;
+       close DIR;
+       $yearmonthmax=0;
+       foreach $i (0..$#filearray) {
+               if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.txt$/) {
+                       $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+                       $yearfile=$yearmonthfile; $yearfile =~ s/^..//;
+                       $monthfile=$yearmonthfile; $monthfile =~ s/....$//;
+                       $yearmonthfile="$yearfile$monthfile";   # year and month have been inversed
+                       if ($yearmonthfile > $yearmonthmax) { $yearmonthmax=$yearmonthfile; }
+               }
+       };
+
+       $monthtoprocess=0;$yeartoprocess=0;
+       if ($yearmonthmax) {    # We found last history file
+               $yeartoprocess=$yearmonthmax; $monthtoprocess=$yearmonthmax;
+               $yeartoprocess =~ s/..$//; $monthtoprocess =~ s/^....//;
+               # We read LastTime in this last history file.
+               &Read_History_File($yeartoprocess,$monthtoprocess,1);
+       }
+
+       #------------------------------------------
+       # PROCESSING CURRENT LOG
+       #------------------------------------------
+
+       if ($BenchMark) { print "Start of processing log file: ".time."<br>\n"; }
+       # Try with $LogFile
+       # If not found try $LogFile$nowsmallyear$nowmonth.log
+       # If still not found, try $LogFile$nowsmallyear$nowmonth$nowday.log
+       $OpenFileError=1;     if (open(LOG,"$LogFile")) { $OpenFileError=0; }
+       if ($OpenFileError) { if (open(LOG,"$LogFileWithoutLog$nowsmallyear$nowmonth.log"))        { $LogFile="$LogFileWithoutLog$nowsmallyear$nowmonth.log"; $OpenFileError=0; } }
+       if ($OpenFileError) { if (open(LOG,"$LogFileWithoutLog$nowsmallyear$nowmonth$nowday.log")) { $LogFile="$LogFileWithoutLog$nowsmallyear$nowmonth$nowday.log"; $OpenFileError=0; } }
+       if ($OpenFileError) { error("Error: Couldn't open server log file \"$LogFile\" : $!"); }
+       $CheckFormatNotDone=1;$NowNewLinePhase=0;
+       while (<LOG>)
+       {
+               $savedline=$_;
+               chomp $_; s/\r//;
+               $_ =~ s/\" / /g; $_ =~ s/ \"/ /g; $_ =~ s/\"$//;        # Suppress "
+               if (/^$/) { next; }                                                                     # Ignore blank line (With ISS: happens sometimes, with Apache: possible when editing log file)
+               if ($LogFormat == 2) {
+                       if (/^#/) { next; }                                                             # ISS writes such comments, we forget line
+                       @felter=split(/ /,$_);
+                       $savetime=$felter[1];
+                       @datep=split(/-/,$felter[0]);                                   # YYYY-MM-DD
+                       # Change order of ISS parameters to be like Apache
+                       if ($#felter == 10) {                                                   # Log with no virtual_host_name in it (11 fields)
+                               $felter[11]=$felter[9];
+                       }
+                       else {                                                                                  # Log with virtual_host_name in it (12 fields)
+                               $savetmp=$felter[10];
+                               $felter[10]=$felter[11];
+                               $felter[11]=$savetmp;
+                       }
+                       $felter[0]=$felter[2];
+                       $felter[1]="-";
+                       $felter[2]=$felter[3];
+                       $felter[3]="[$datep[2]/$datep[1]/$datep[0]:$savetime";
+                       $felter[9]=$felter[7];
+                       $felter[7]=$felter[8];
+                       $felter[8]=$felter[6];
+                       $felter[6]=$felter[5];
+                       $felter[5]=$felter[4];
+                       $felter[4]="+0000]";
+                       #print "$#felter: $felter[0] $felter[1] $felter[2] $felter[3] $felter[4] $felter[5] $felter[6] $felter[7] $felter[8] $felter[9] $felter[10] $felter[11]<br>";
+               }
+               else {
+                       #$_ =~ s/ GET .* .* HTTP\// GET BAD_URL HTTP\//;
+                       if ($_ =~ / GET .* .* HTTP\//) { $_corrupted++; next; }
+                       @felter=split(/ /,$_);
+               }
+#              $felter[1]=$felter[0]; shift @felter;                           # This is for test when log format is "hostname ip_adress ...   "
+
+               # Check filters (here, log is in apache combined format, even with IIS)
+               #----------------------------------------------------------------------
+               if ($felter[5] ne 'GET' && $felter[5] ne 'POST') {
+                       if ($felter[5] ne 'HEAD' && $felter[5] ne 'OPTIONS') { $_corrupted++; }
+                       next; }                                                                                 # Keep only GET, POST but not HEAD, OPTIONS
+               if ($felter[6] =~ /^RC=/) { $_corrupted++; next; }      # A strange log record we need to forget
+
+               $felter[3] =~ s/^\[//;
+               $felter[3] =~ tr/\//:/;
+               @dateparts=split(/:/,$felter[3]);                               # Split DD:Month:YYYY:HH:MM:SS
+               if ( $monthnum{$dateparts[1]} ) { $dateparts[1]=$monthnum{$dateparts[1]}; }     # Change lib month in num month if necessary
+               $timeconnexion=$dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5];     # YYYYMMDDHHMMSS
+
+               # Check format of record if not already done
+               #-------------------------------------------
+               if ($CheckFormatNotDone) {
+                       $GoodFormat=1;
+                       if (($felter[8] !~ /^[\d][\d][\d]$/) && ($felter[8] !~ /^[\d]$/)) { $GoodFormat=0; }    # Bad format (Second test avoid error when using MS IndexServer that returns non standard HTTP code)
+                       if ($felter[10] eq "")    { $GoodFormat=0; }                                                                                    # Bad format (Not enough fields)
+                       # Insert here other tests
+                       # ...
+                       if ($GoodFormat == 0) {
+                               print "Log file <b>$LogFile</b> doesn't seem to have good format. Suspect line is<br>";
+                               print "<font color=#888888><i>$savedline</i></font><br>";
+                               print "<br><b>LogFormat</b> parameter is <b>$LogFormat</b>, this means each line in your log file need to have ";
+                               if ($LogFormat == 2) {
+                                               print "<b>\"MSIE Extended W3C log format\"</b> like this:<br>";
+                                               print "<font color=#888888><i>date time c-ip c-username cs-method cs-uri-sterm sc-status cs-bytes cs-version cs(User-Agent) cs(Referer)</i></font><br>";
+                                       }
+                               else {
+                                               print "<b>\"combined log format\"</b> like this:<br>";
+                                               print "<font color=#888888><i>111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"</i></font><br>";
+                               }
+                               error("<br>");  # Exit with format error
+                       }
+                       $CheckFormatNotDone=0;  # No more format test
+               }
+
+               # Skip if not a new line
+               #-----------------------
+               if ($NowNewLinePhase) {
+                       if ($timeconnexion < $LastTime{$yeartoprocess.$monthtoprocess}) { next; }       # Should not happen, kept in case of parasite old lines
+                       }
+               else {
+                       if ($timeconnexion <= $LastTime{$yeartoprocess.$monthtoprocess}) { next; }      # Already processed
+                       $NowNewLinePhase=1;     # This will stop comparison "<=" between timeconnexion and LastTime (we should have only new lines now)
+                       }
+
+               if (&SkipFile($felter[6])) { next; }                    # Skip with some URL
+               if (&SkipHost($felter[0])) { next; }                    # Skip with some client host IP address
+
+               # Record is approved. We found a new line. Is it in a new month section ?
+               #------------------------------------------------------------------------
+               if ((($dateparts[1] > $monthtoprocess) && ($dateparts[2] >= $yeartoprocess)) || ($dateparts[2] > $yeartoprocess)) {
+                       # Yes, a new month to process
+                       if ($monthtoprocess > 0) {
+                               &Save_History_File($yeartoprocess,$monthtoprocess);             # We save data of current processed month
+                               &Init_HashArray;                                                                                # Start init for next one
+                               }
+                       $monthtoprocess=$dateparts[1];$yeartoprocess=$dateparts[2];
+                       &Read_History_File($yeartoprocess,$monthtoprocess,1);           # This should be useless (file must not exist)
+                       }
+
+               # Check return code
+               #------------------
+               if (($felter[8] != 200) && ($felter[8] != 304)) {               # Stop if HTTP server return code != 200 and 304
+                       if ($felter[8] =~ /^[\d][\d][\d]$/) {                           # Keep error code and next
+                               $_errors_h{$felter[8]}++;
+                               if ($felter[8] == 404) { $_sider404_h{$felter[6]}++; $_referer404_h{$felter[6]}=$felter[10]; }
+                               next;
+                               }
+                       else {                                                                                          # Bad format record (should not happen but when using MSIndex server), next
+                               $_corrupted++; next;
+                               }
+               }
+
+               if ($LogFormat == 1) {
+                       # To correct bad format of some old apache log (field 10 is twice in line)
+                       # if ($felter[10] =~ /^$felter[11],/) { for ($ix=12; $ix<=$#felter; $ix++) { $felter[$ix-1] = $felter[$ix]; } }
+                       # Define $UserAgent in one string (no ' ') like "Mozilla/4.0_(compatible;_MSIE_4.01;_Windows_98)"
+                       for ($ix=12; $ix<=$#felter; $ix++) {
+                               $felter[11] .= "_"; $felter[11] .= $felter[$ix];
+                       }
+               }
+
+               $felter[11] =~ tr/\+/_/;
+               $UserAgent = $felter[11];
+               $UserAgent =~ tr/A-Z/a-z/;
+
+               # Robot ? If yes, we stop here
+               #-----------------------------
+               $foundrobot=0;
+               if (!$TmpHashNotRobot{$UserAgent}) {    # TmpHashNotRobot is a temporary hash table to increase speed
+                       foreach $bot (keys %RobotHash) { if ($UserAgent =~ /$bot/) { $_robot_h{$bot}++; $_robot_l{$bot}=$timeconnexion ; $foundrobot=1; last; } }
+                       if ($foundrobot == 1) { next; }
+                       $TmpHashNotRobot{$UserAgent}=1;         # Last time, we won't search if robot or not. We know it's not.
+               }
+
+               # Canonize and clean target URL and referrer URL
+               $felter[6] =~ s/\/$DefaultFile$/\//;    # Replace default page name with / only
+               $felter[6] =~ s/\?.*//;                                 # Trunc CGI parameters in URL get
+               $felter[6] =~ s/\/\//\//g;                              # Because some targeted url were taped with 2 / (Ex: //rep//file.htm)
+
+               # Check if page or not
+               $PageBool=1;
+               foreach $cursor (@NotPageList) { if ($felter[6] =~ /$cursor$/i) { $PageBool=0; last; } }
+
+               # Analyze: Date - Hour - Pages - Hits - Kilo
+               #-------------------------------------------
+               if ($FirstTime{$yeartoprocess.$monthtoprocess} == 0) { $FirstTime{$yeartoprocess.$monthtoprocess}=$timeconnexion; }
+               $LastTime{$yeartoprocess.$monthtoprocess} = $timeconnexion;
+               if ($PageBool) {
+                       $_time_p[$dateparts[3]]++; $MonthPage{$yeartoprocess.$monthtoprocess}++;        #Count accesses per hour (page)
+                       $_sider_p{$felter[6]}++;                                                                        #Count accesses per page (page)
+                       }
+               $_time_h[$dateparts[3]]++; $MonthHits{$yeartoprocess.$monthtoprocess}++;                #Count accesses per hour (hit)
+               $_time_k[$dateparts[3]]+=$felter[9]; $MonthBytes{$yeartoprocess.$monthtoprocess}+=$felter[9];   #Count accesses per hour (kb)
+               $_sider_h{$felter[6]}++;                                                                                #Count accesses per page (hit)
+               $_sider_k{$felter[6]}+=$felter[9];                                                              #Count accesses per page (kb)
+
+               # Analyze: IP-address
+               #--------------------
+               $found=0;
+               $Host=$felter[0];
+               if ($Host =~ /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/) {
+                       # Doing DNS lookup
+                   if ($NewDNSLookup) {
+                               $new=$TmpHashDNSLookup{$Host};  # TmpHashDNSLookup is a temporary hash table to increase speed
+                               if (!$new) {            # if $new undefined, $Host not yet resolved
+                                       if ($BenchMark) { print "Start of reverse DNS lookup for $Host: ".time."<br>\n"; }
+                                       $new=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);       # This is very slow may took 20 seconds
+                                       if ($BenchMark) { print "End of reverse DNS lookup for $Host: ".time."<br>\n"; }
+                                       if ($new eq "") {       $new="ip"; }
+                                       $TmpHashDNSLookup{$Host}=$new;
+                               }
+
+                               # Here $Host is still xxx.xxx.xxx.xxx and $new is name or "ip" if reverse failed)
+                               if ($new ne "ip") { $Host=$new; }
+                       }
+                   # If we're not doing lookup or if it failed, we still have an IP address in $Host
+                   if (!$NewDNSLookup || $new eq "ip") {
+                                 if ($PageBool) {
+                                               if (int($timeconnexion) > int($_unknownip_l{$Host}+$VisitTimeOut)) { $MonthVisits{$yeartoprocess.$monthtoprocess}++; }
+                                               if ($_unknownip_l{$Host} eq "") { $MonthUnique{$yeartoprocess.$monthtoprocess}++; }
+                                               $_unknownip_l{$Host}=$timeconnexion;            # Table of (all IP if !NewDNSLookup) or (all unknown IP) else
+                                               $_hostmachine_p{"Unknown"}++;
+                                               $_domener_p{"ip"}++;
+                                 }
+                                 $_hostmachine_h{"Unknown"}++;
+                                 $_domener_h{"ip"}++;
+                                 $_hostmachine_k{"Unknown"}+=$felter[9];
+                                 $_domener_k{"ip"}+=$felter[9];
+                                 $found=1;
+                     }
+           }
+               else { if ($Host =~ /[a-z]/) { $NewDNSLookup=0; } }     # Hosts seems to be already resolved
+
+               # Here, $Host = hostname or xxx.xxx.xxx.xxx
+               if (!$found) {                          # If not processed yet ($Host = hostname)
+                       $Host =~ tr/A-Z/a-z/;
+                       $_ = $Host;
+
+                       # Count hostmachine
+                       if (!$FullHostName) { s/^[\w\-]+\.//; };
+                       if ($PageBool) {
+                               if (int($timeconnexion) > int($_hostmachine_l{$_}+$VisitTimeOut)) { $MonthVisits{$yeartoprocess.$monthtoprocess}++; }
+                               if ($_hostmachine_l{$_} eq "") { $MonthUnique{$yeartoprocess.$monthtoprocess}++; }
+                               $_hostmachine_p{$_}++;
+                               $_hostmachine_l{$_}=$timeconnexion;
+                               }
+                       $_hostmachine_h{$_}++;
+                       $_hostmachine_k{$_}+=$felter[9];
+
+                       # Count top-level domain
+                       if (/\./) { /\.([\w]+)$/; $_=$1; };
+                       if ($DomainsHash{$_}) {
+                                if ($PageBool) { $_domener_p{$_}++; }
+                                $_domener_h{$_}++;
+                                $_domener_k{$_}+=$felter[9];
+                                }
+                       else {
+                                if ($PageBool) { $_domener_p{"ip"}++; }
+                                $_domener_h{"ip"}++;
+                                $_domener_k{"ip"}+=$felter[9];
+                       }
+               }
+
+               # Analyze: Browser
+               #-----------------
+               $found=0;
+
+               # IE ? (For higher speed, we start whith IE, the most often used. This avoid other tests if found)
+               if ($UserAgent =~ /msie/) {
+                       if (($UserAgent !~ /webtv/) && ($UserAgent !~ /omniweb/)) {
+                               $_browser_h{"msie"}++;
+                               $UserAgent =~ /msie_(\d)\./;  # $1 now contains major version no
+                               $_msiever_h[$1]++;
+                               $found=1;
+                       }
+               }
+
+               # Netscape ?
+               if (!$found) {
+                       if ($UserAgent =~ /mozilla/ && $UserAgent !~ /compatible/) {
+                       $_browser_h{"netscape"}++;
+                       $UserAgent =~ /\/(\d)\./;  # $1 now contains major version no
+                       $_nsver_h[$1]++;
+                       $found=1;
+                       }
+               }
+
+               # Other ?
+               if (!$found) {
+                       foreach $key (keys %BrowsersHash) {
+                       if ($UserAgent =~ /$key/) { $_browser_h{$key}++; $found=1; last; }
+                       }
+               }
+
+               # Unknown browser ?
+               if (!$found) { $_browser_h{"Unknown"}++; $_unknownrefererbrowser_l{$felter[11]}=$timeconnexion; }
+
+               # Analyze: OS
+               #------------
+               $found=0;
+               if (!$TmpHashOS{$UserAgent}) {
+                       # OSHash list ?
+                       foreach $key (keys %OSHash) {
+                               if ($UserAgent =~ /$key/) { $_os_h{$key}++; $found=1; $TmpHashOS{$UserAgent}=$key; last; }
+                       }
+                       # OSAliasHash list ?
+                       if (!$found) {
+                               foreach $key (keys %OSAliasHash) {
+                                       if ($UserAgent =~ /$key/) { $_os_h{$OSAliasHash{$key}}++; $found=1; $TmpHashOS{$UserAgent}=$OSAliasHash{$key}; last; }
+                               }
+                       }
+                       # Unknown OS ?
+                       if (!$found) { $_os_h{"Unknown"}++; $_unknownreferer_l{$felter[11]}=$timeconnexion; }
+               }
+               else {
+                       $_os_h{$TmpHashOS{$UserAgent}}++;
+               }
+
+               # Analyze: Referer
+               #-----------------
+               $found=0;
+
+               # Direct ?
+               if ($felter[10] eq "-") { $_from_h[0]++; $found=1; }
+
+               # HTML link ?
+               if (!$found) {
+                       if ($felter[10] =~ /^http/)     {
+                               $internal_link=0;
+                               if ($felter[10] =~ /^http(s|):\/\/(www.|)$LocalSiteWithoutwww/i) { $internal_link=1; }
+                               else {
+                                       foreach $HostAlias (@HostAliases) {
+                                               if ($felter[10] =~ /^http(s|):\/\/$HostAlias/i) { $internal_link=1; last; }
+                                               }
+                               }
+
+                               if ($internal_link) {
+                                   # Intern (This hit came from another page of the site)
+                                   $_from_h[4]++;
+                                       $found=1;
+                               }
+                               else {
+                                   # Extern (This hit came from an external web site)
+                                       @refurl=split(/\?/,$felter[10]);
+                                       $refurl[0] =~ tr/A-Z/a-z/;
+                                   foreach $key (keys %SearchEnginesHash) {
+                                               if ($refurl[0] =~ /$key/) {
+                                                       # This hit came from the search engine $key
+                                                       $_from_h[2]++;
+                                                       $_se_referrals_h{$key}++;
+                                                       $found=1;
+                                                       # Extract keywords
+                                                       $refurl[1] =~ tr/A-Z/a-z/;                              # Full param string in lowcase
+                                                       @paramlist=split(/&/,$refurl[1]);
+                                                       if ($SearchEngineKnownUrl{$key}) {              # Search engine with known URL syntax
+                                                               foreach $param (@paramlist) {
+                                                                       if ($param =~ /^$SearchEngineKnownUrl{$key}/) { # We found good parameter
+                                                                               &UnescapeURLParam($param);                      # Change [ xxx=cache:www+aaa+bbb/ccc+ddd%20eee'fff ] into [ xxx=cache:www aaa bbb ccc ddd eee fff ]
+                                                                               # Ok, "xxx=cache:www aaa bbb ccc ddd eee fff" is a search parameter line
+                                                                               $param =~ s/.*=//;                                      # Cut "xxx="
+                                                                               $param =~ s/^cache:[^ ]* //;
+                                                                               $param =~ s/^related:[^ ]* //;
+                                                                               if ($SplitSearchString) {
+                                                                                       @wordlist=split(/ /,$param);    # Split aaa bbb ccc ddd eee fff into a wordlist array
+                                                                                       foreach $word (@wordlist) {
+                                                                                               if ((length $word) > 0) { $_keywords{$word}++; }
+                                                                                       }
+                                                                               }
+                                                                               else {
+                                                                                       $param =~ s/^ *//; $param =~ s/ *$//; $param =~ tr/ / /s;
+                                                                                       if ((length $param) > 0) { $param =~ tr/ /+/; $_keywords{$param}++; }
+                                                                               }
+                                                                               last;
+                                                                       }
+                                                               }
+                                                       }
+                                                       else {                                                                  # Search engine with unknown URL syntax
+                                                               foreach $param (@paramlist) {
+                                                                       &UnescapeURLParam($param);              # Change [ xxx=cache:www+aaa+bbb/ccc+ddd%20eee'fff ] into [ xxx=cache:www aaa bbb ccc ddd eee fff ]
+                                                                       $keep=1;
+                                                                       foreach $paramtoexclude (@WordsToCleanSearchUrl) {
+                                                                               if ($param =~ /.*$paramtoexclude.*/) { $keep=0; last; } # Not the param with search criteria
+                                                                       }
+                                                                       if ($keep == 0) { next; }                       # Do not keep this URL parameter because is in exclude list
+                                                                       # Ok, "xxx=cache:www aaa bbb ccc ddd eee fff" is a search parameter line
+                                                                       $param =~ s/.*=//;                                      # Cut "xxx="
+                                                                       $param =~ s/^cache:[^ ]* //;
+                                                                       $param =~ s/^related:[^ ]* //;
+                                                                       if ($SplitSearchString) {
+                                                                               @wordlist=split(/ /,$param);    # Split aaa bbb ccc ddd eee fff into a wordlist array
+                                                                               foreach $word (@wordlist) {
+                                                                                       if ((length $word) > 2) { $_keywords{$word}++; }        # Keep word only if word length is 3 or more
+                                                                               }
+                                                                       }
+                                                                       else {
+                                                                               $param =~ s/^ *//; $param =~ s/ *$//; $param =~ tr/ / /s;
+                                                                               if ((length $param) > 2) { $param =~ tr/ /+/; $_keywords{$param}++; }
+                                                                       }
+                                                               }
+                                                       }
+                                                       last;
+                                               }
+                                       }
+                                       if (!$found) {
+                                               # This hit came from a site other than a search engine
+                                               $_from_h[3]++;
+                                               if ($felter[10] =~ /http:\/\/[^\/]*\/$/) { $felter[10] =~ s/\/$//; }    # To make htpp://www.mysite.com and http://www.mysite.com/ as same referer
+                                               $_pagesrefs_h{$felter[10]}++;
+                                               $found=1;
+                                       }
+                               }
+                       }
+               }
+
+               # News link ?
+               if (!$found) {
+                       if ($felter[10] =~ /^news/) {
+                               $_from_h[1]++;
+                               $found=1;
+                       }
+               }
+
+       }
+       close LOG;
+       if ($BenchMark) { print "End of processing log file: ".time."<br>\n"; }
+
+       # DNSLookup warning
+       if ($DNSLookup && !$NewDNSLookup) { warning("Warning: <b>$PROG</b> has detected that hosts names are already resolved in your logfile <b>$LogFile</b>.<br>\nIf this is true, you should change your setup DNSLookup=1 into DNSLookup=0 to increase $PROG speed."); }
+
+       # Save for month $monthtoprocess
+       if ($monthtoprocess) {  # If monthtoprocess is still 0, it means there was no history files and we found no valid lines in log file
+               &Save_History_File($yeartoprocess,$monthtoprocess);             # We save data for this month
+               if (($MonthRequired ne "year") && ($monthtoprocess != $MonthRequired)) { &Init_HashArray; }     # Not a desired month, so we clean data
+       }
+
+       # Archive LOG file into ARCHIVELOG
+       if (($PurgeLogFile == 1) && ($ArchiveLogRecords == 1)) {
+               if ($BenchMark) { print "Start of archiving log file: ".time."<br>\n"; }
+               $ArchiveFileName="$DirData/${PROG}_archive$FileSuffix.log";
+               open(LOG,"+<$LogFile") || error("Error: Enable to archive log records of \"$LogFile\" into \"$ArchiveFileName\" because source can't be opened for read and write: $!<br>\n");
+               open(ARCHIVELOG,">>$ArchiveFileName") || error("Error: Couldn't open file \"$ArchiveFileName\" to archive current log: $!");
+               while (<LOG>) { print ARCHIVELOG $_; }
+               close(ARCHIVELOG);
+               chmod 438,"$ArchiveFileName";
+               if ($BenchMark) { print "End of archiving log file: ".time."<br>\n"; }
+       }
+       else {
+               open(LOG,"+<$LogFile");
+       }
+
+       # Rename all HISTORYTMP files into HISTORYTXT
+       $allok=1;
+       opendir(DIR,"$DirData");
+       @filearray = sort readdir DIR;
+       close DIR;
+       foreach $i (0..$#filearray) {
+               if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.tmp\..*$/) {
+                       $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+                       if (-s "$DirData/$PROG$yearmonthfile$FileSuffix.tmp.$$") {      # Rename only files for this session and with size > 0
+                               if (rename("$DirData/$PROG$yearmonthfile$FileSuffix.tmp.$$", "$DirData/$PROG$yearmonthfile$FileSuffix.txt")==0) {
+                                       $allok=0;       # At least one error in renaming working files
+                                       last;
+                               }
+                               chmod 438,"$DirData/$PROG$yearmonthfile$FileSuffix.txt";
+                       }
+               }
+       }
+
+       # Purge Log file if all renaming are ok and option is on
+       if (($allok > 0) && ($PurgeLogFile == 1)) {
+               truncate(LOG,0) || warning("Warning: <b>$PROG</b> couldn't purge logfile \"<b>$LogFile</b>\".<br>\nChange your logfile permissions to allow write for your web server<br>\nor change PurgeLofFile=1 into PurgeLogFile=0 in configure file<br>\n(and think to purge sometines your logile. Launch $PROG just before this to save in $PROG history text files all informations logfile contains).");
+       }
+       close(LOG);
+
+}
+
+
+# Get list of all possible years
+opendir(DIR,"$DirData");
+@filearray = sort readdir DIR;
+close DIR;
+foreach $i (0..$#filearray) {
+       if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.txt$/) {
+               $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+               $yearfile=$yearmonthfile; $yearfile =~ s/^..//;
+               $listofyears{$yearfile}=1;
+       }
+}
+
+
+# Here, first part of data for all processed month (old and current) are still in memory
+# If a month was already processed, then $HistoryFileAlreadyRead{"MMYYYY"} value is 1
+
+
+#-------------------------------------------------------------------------------
+# READING NOW ALL NOT ALREADY READ HISTORY FILES FOR ALL MONTHS OF REQUIRED YEAR 
+#-------------------------------------------------------------------------------
+
+# Loop on each month of year but only existing and not already read will be read by Read_History_File function
+for ($ix=12; $ix>=1; $ix--) {  
+       $monthix=$ix+0; if ($monthix < 10) { $monthix  = "0$monthix"; } # Good trick to change $monthix into "MM" format
+       if ($MonthRequired eq "year" || $monthix == $MonthRequired) {
+               &Read_History_File($YearRequired,$monthix,1);   # Read full history file
+       }
+       else {
+               &Read_History_File($YearRequired,$monthix,0);   # Read first part of history file is enough
+       }
+}
+
+
+
+#---------------------------------------------------------------------
+# SHOW STATISTICS
+#---------------------------------------------------------------------
+if ($QueryString =~ /action=unknownip/) {
+       print "<CENTER><a name=\"UNKOWNIP\"></a>";
+       $tab_titre=$message[45][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle color=#770000><TH>$message[48][$Lang]</TH><TH>$message[9][$Lang]</TH>\n";
+       @sortunknownip=sort { $SortDir*$_unknownip_l{$a} <=> $SortDir*$_unknownip_l{$b} } keys (%_unknownip_l);
+       foreach $key (@sortunknownip) {
+               $yearcon=substr($_unknownip_l{$key},0,4);
+               $monthcon=substr($_unknownip_l{$key},4,2);
+               $daycon=substr($_unknownip_l{$key},6,2);
+               $hourcon=substr($_unknownip_l{$key},8,2);
+               $mincon=substr($_unknownip_l{$key},10,2);
+               if ($Lang == 1) { print "<tr><td>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=unknownrefererbrowser/) {
+       print "<CENTER><a name=\"UNKOWNREFERERBROWSER\"></a>";
+       $tab_titre=$message[50][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Referer</TH><TH>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownrefererbrowser=sort { $SortDir*$_unknownrefererbrowser_l{$a} <=> $SortDir*$_unknownrefererbrowser_l{$b} } keys (%_unknownrefererbrowser_l);
+       foreach $key (@sortunknownrefererbrowser) {
+               $yearcon=substr($_unknownrefererbrowser_l{$key},0,4);
+               $monthcon=substr($_unknownrefererbrowser_l{$key},4,2);
+               $daycon=substr($_unknownrefererbrowser_l{$key},6,2);
+               $hourcon=substr($_unknownrefererbrowser_l{$key},8,2);
+               $mincon=substr($_unknownrefererbrowser_l{$key},10,2);
+               $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
+               if ($Lang == 1) { print "<tr><td CLASS=LEFT>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td CLASS=LEFT>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=unknownreferer/) {
+       print "<CENTER><a name=\"UNKOWNREFERER\"></a>";
+       $tab_titre=$message[46][$Lang];
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Referer</TH><TH>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownreferer=sort { $SortDir*$_unknownreferer_l{$a} <=> $SortDir*$_unknownreferer_l{$b} } keys (%_unknownreferer_l);
+       foreach $key (@sortunknownreferer) {
+               $yearcon=substr($_unknownreferer_l{$key},0,4);
+               $monthcon=substr($_unknownreferer_l{$key},4,2);
+               $daycon=substr($_unknownreferer_l{$key},6,2);
+               $hourcon=substr($_unknownreferer_l{$key},8,2);
+               $mincon=substr($_unknownreferer_l{$key},10,2);
+               $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
+               if ($Lang == 1) { print "<tr><td CLASS=LEFT>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td CLASS=LEFT>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=notfounderror/) {
+       print "<CENTER><a name=\"NOTFOUNDERROR\"></a>";
+       $tab_titre=$message[47][$Lang];
+       &tab_head;
+       print "<TR bgcolor=$color_TableBGRowTitle><TH>URL</TH><TH bgcolor=$color_h>$message[49][$Lang]</TH><TH>$message[23][$Lang]</TH></TR>\n";
+       @sortsider404=sort { $SortDir*$_sider404_h{$a} <=> $SortDir*$_sider404_h{$b} } keys (%_sider404_h);
+       foreach $key (@sortsider404) {
+               $url=$key; $url =~ s/<script.*$//gi;                                                    # This is to avoid 'Cross Site Scripting attacks'
+               $referer=$_referer404_h{$key}; $referer =~ s/<script.*$//gi;    # This is to avoid 'Cross Site Scripting attacks'
+               print "<tr><td CLASS=LEFT>$url</td><td>$_sider404_h{$key}</td><td>$referer&nbsp;</td></tr>";
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=browserdetail/) {
+       print "<CENTER><a name=\"BROWSERDETAIL\"></a>";
+
+       print "<a name=\"NETSCAPE\"></a><BR>";
+       $tab_titre=$message[33][$Lang]."<br><img src=\"$DirIcons/browser/netscape.png\">";
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Version</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#_nsver_h; $i++) {
+               if ($_nsver_h[$i] gt 0) {
+                       $h=$_nsver_h[$i]; $p=int($_nsver_h[$i]/$_browser_h{"netscape"}*1000)/10; $p="$p&nbsp;%";
+               }
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
+               }
+               print "<TR><TD CLASS=LEFT>Mozilla/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+       }
+       &tab_end;
+
+       print "<a name=\"MSIE\"></a><BR>";
+       $tab_titre=$message[34][$Lang]."<br><img src=\"$DirIcons/browser/msie.png\">";
+       &tab_head;
+       print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Version</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#_msiever_h; $i++) {
+               if ($_msiever_h[$i] gt 0) {
+                       $h=$_msiever_h[$i]; $p=int($_msiever_h[$i]/$_browser_h{"msie"}*1000)/10; $p="$p&nbsp;%";
+               }
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
+               }
+               print "<TR><TD CLASS=LEFT>MSIE/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+       }
+       &tab_end;
+
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=info/) {
+       # Not yet available
+       print "<CENTER><a name=\"INFO\"></a>";
+
+       &html_end;
+       exit(0);
+       }
+
+if ($BenchMark) { print "Start of sorting hash arrays: ".time."<br>\n"; }
+@RobotArray=keys %RobotHash;
+@SearchEnginesArray=keys %SearchEnginesHash;
+@sortdomains_p=sort { $SortDir*$_domener_p{$a} <=> $SortDir*$_domener_p{$b} } keys (%_domener_p);
+@sortdomains_h=sort { $SortDir*$_domener_h{$a} <=> $SortDir*$_domener_h{$b} } keys (%_domener_h);
+@sortdomains_k=sort { $SortDir*$_domener_k{$a} <=> $SortDir*$_domener_k{$b} } keys (%_domener_k);
+@sorthosts_p=sort { $SortDir*$_hostmachine_p{$a} <=> $SortDir*$_hostmachine_p{$b} } keys (%_hostmachine_p);
+@sortsiders=sort { $SortDir*$_sider_p{$a} <=> $SortDir*$_sider_p{$b} } keys (%_sider_p);
+@sortbrowsers=sort { $SortDir*$_browser_h{$a} <=> $SortDir*$_browser_h{$b} } keys (%_browser_h);
+@sortos=sort { $SortDir*$_os_h{$a} <=> $SortDir*$_os_h{$b} } keys (%_os_h);
+@sortsereferrals=sort { $SortDir*$_se_referrals_h{$a} <=> $SortDir*$_se_referrals_h{$b} } keys (%_se_referrals_h);
+@sortpagerefs=sort { $SortDir*$_pagesrefs_h{$a} <=> $SortDir*$_pagesrefs_h{$b} } keys (%_pagesrefs_h);
+@sortsearchwords=sort { $SortDir*$_keywords{$a} <=> $SortDir*$_keywords{$b} } keys (%_keywords);
+@sorterrors=sort { $SortDir*$_errors_h{$a} <=> $SortDir*$_errors_h{$b} } keys (%_errors_h);
+if ($BenchMark) { print "End of sorting hash arrays: ".time."<br>\n"; }
+
+# English tooltips
+if (($Lang != 1) && ($Lang != 2) && ($Lang != 3) && ($Lang != 6)) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       A new visits is defined as each new <b>incoming visitor</b> (viewing or browsing a page) who was not connected to your site during last <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Number of client hosts (<b>IP address</b>) who came to visit the site (and who viewed at least one <b>page</b>).<br>
+       This data refers to the number of <b>different physical persons</b> who had reached the site in any one day.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Number of times a <b>page</b> of the site is <b>viewed</b> (Sum for all visitors for all visits).<br>
+       This piece of data differs from \"hits\" in that it counts only HTML pages as oppose to images and other files.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Number of times a <b>page, image, file</b> of the site is <b>viewed</b> or <b>downloaded</b> by someone.<br>
+       This piece of data is provided as a reference only, since the number of \"pages\" viewed is often prefered for marketing purposes.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       This piece of information refers to the amount of data downloaded by all <b>pages</b>, <b>images</b> and <b>files</b> within your site measured in KBs.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       $PROG recognizes each access to your site after a <b>search</b> from the <b>".(@SearchEnginesArray)." most popular Internet Search Engines and Directories</b> (such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       List of all <b>external pages</b> which were used to link (or eneter) to your site (Only the <b>$MaxNbOfRefererShown</b> most often used external pages are shown.\n
+       Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       This table shows the list of the most frequently <b>keywords</b> utilized to find your site from Internet Search Engines and Directories.
+       (Keywords from the <b>".(@SearchEnginesArray)."</b> most popular Search Engines and Directories are recognized by $PROG, such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Robots (sometimes refer to Spiders) are <b>automatic computer visitors</b> used by many search engines that scan your web site to (1) index it and rank it, (2) collect statistics on Internet Web sites and/or (3) see if your site is still online.<br>
+       $PROG is able to recognize up to <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       No description for this error.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       Request was understood by server but will be processed later.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       Server has processed the request but there is no document to send.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Partial content.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       Requested document was moved and is now at another address given in awnswer.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       No description for this error.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Syntax error, server didn\'t understand request.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Tried to reach an <b>URL where a login/password pair was required</b>.<br>
+       A high number within this item could mean that someone (such as a hacker) is attempting to crack, or enter into your site (hoping to enter a secured area by trying different login/password pairs, for instance).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Tried to reach an <b>URL not configured to be reachable, even with an login/password pair</b> (for example, an URL within a directory not defined as \"browsable\".).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Tried to reach a <b>non existing URL</b>. This error often means that there is an invalid link somewhere in your site or that a visitor mistyped a certain URL.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       Server has taken <b>too much time</b> to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Internal error. This error is often caused by a CGI program that had finished abnormally (coredump for example).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Unknown requested action.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Code returned by a HTTP server that works as a proxy or gateway when a real, targeted server doesn\'t answer successfully to the client\'s request.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Internal server error.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway Time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       HTTP Version Not Supported.
+       </DIV>
+       ";
+}
+
+# French tooltips
+if ($Lang == 1) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       On considère une nouvelle visite pour <b>chaque arrivée</b> d un visiteur consultant une page et ne s étant pas connecté dans les dernières <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Nombre de hotes (<b>adresse IP</b>) utilisés pour accéder au site (et voir au moins une <b>page</b>).<br>
+       Ce chiffre reflète le nombre de <b>personnes physiques</b> différentes ayant un jour accédé au site.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Nombre de fois qu une <b>page</b> du site est <b>vue</b> (Cumul de tout visiteur, toute visite).<br>
+       Ce compteur différe des \"hits\" car il ne comptabilise que les pages HTML et non les images ou autres fichiers.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Nombre de fois qu une <b>page, image, fichier</b> du site est <b>vu</b> ou <b>téléchargé</b> par un visiteur.<br>
+       Ce compteur est donné à titre indicatif, le compteur \"pages\" etant préféré.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       Nombre de <b>kilo octets</b> téléchargé lors des visites du site.<br>
+       Il s agit aussi bien du volume de données du au chargement des <b>pages</b> et <b>images</b> que des <b>fichiers</b> téléchargés.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       $PROG est capable de reconnaitre l acces au site issu d une <b>recherche</b> depuis les <b>".(@SearchEnginesArray)." moteurs de recherche Internet</b> les plus connus (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Liste des <b>pages de sites externes</b> contenant un lien suivi pour accéder à ce site (Seules les <b>$MaxNbOfRefererShown</b> pages externes les plus utilisées sont affichées).\n
+       Les liens issus du résultat d un moteur de recherche connu n apparaissent pas ici, car comptabilisés à part sur la ligne juste au-dessus.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Ce tableau offre la liste des <b>mots</b> les plus souvent utilisés pour retrouver et accéder au site depuis
+       un moteur de recherche Internet (Les recherches depuis <b>".(@SearchEnginesArray)."</b> moteurs de recherche parmi les pluspopulaires sont reconnues, comme Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Les robots sont des <b>automates visiteurs</b> scannant le site dans le but de l indexer, d obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.<br>
+       $PROG reconnait <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       Contenu partiel renvoyé.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       La requête a été enregistrée par le serveur mais sera exécutée plus tard.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       Le serveur a traité la demande mais il n existe aucun document à renvoyer.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Contenu partiel renvoyé.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       Le document réclamé a été déplacé et se trouve maintenant à une autre adresse mentionnée dans la réponse.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       Aucun descriptif pour cette erreur.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Erreur de syntaxe, le serveur n a pas compris la requête.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Tentatives d accès à une <b>URL nécessitant identification avec un login/mot de passe invalide</b>.<br>
+       Un nombre trop élévé peut mettre en évidence une tentative de crackage brute du site (par accès répété de différents logins/mots de passe).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Tentatives d accès à une <b>URL non configurée pour etre accessible, même avec une identification</b> (par exemple, une URL d un répertoire non défini comme étant \"listable\").
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Tentatives d accès à une <b>URL inexistante</b>. Il s agit donc d un lien invalide sur le site ou d une faute de frappe d un visiteur qui a saisie une mauvaise URL directement.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       Le serveur mis un <b>temps trop important</b> pour répondre à la requête. Il peut s agir d un script CGI trop lent sur le serveur forcé d abandonner le traitement ou d une saturation du site.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Erreur interne au serveur. Cette erreur est le plus souvant renvoyé lors de l arrêt anormal d un script CGI (par exemple suite à un coredump du CGI).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Le serveur ne prend pas en charge l action demandée.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Code renvoyé par un serveur HTTP qui fonctionne comme proxy ou gateway lorsque le serveur réel consulté ne réagit pas avec succès à la demande du client.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Erreur interne au serveur.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway Time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       Version HTTP non supporté.
+       </DIV>
+       ";
+}
+
+# Dutch tooltips
+if ($Lang == 2) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       Een nieuw bezoek is elke <b>binnenkomende bezoeker</b> (die een pagina bekijkt) die de laatste <b>".($VisitTimeOut/10000*60)." mn</b> niet met uw site verbonden was.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Number of client hosts (<b>IP address</b>) who came to visit the site (and who viewed at least one <b>page</b>).<br>
+       This data refers to the number of <b>different physical persons</b> who had reached the site in any one day.
+       Aantal client hosts (<b>IP adres</b>) die de site bezochten (en minimaal een <b>pagina</b> bekeken).<br>
+       Dit geeft aan hoeveel <b>verschillende fysieke personen</b> de site op een bepaalde dag bezocht hebben.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Aantal malen dat een <b>pagina</b> van de site <b>bekeken</b> is (Som voor alle bezoekers voor alle bezoeken).<br>
+       Dit onderdeel verschilt van \"hits\" in het feit dat het alleen HTML pagina\'s telt, in tegenstelling tot plaatjes en andere bestanden.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Aantal malen dat een <b>pagina</b>, <b>plaatje</b> of <b>bestand</b> op de site door iemand is <b>bekeken</b> of <b>gedownload</b>.<br>
+       Dit onderdeel is alleen als referentie gegeven, omdat het aantal bekeken \"pagina\'s\" voor marketingdoeleinden de voorkeur heeft.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       Aantal door uw bezoekers gedownloade <b>kilobytes</b>.<br>
+       Dit onderdeel geeft de hoeveelheid gedownloade gegevens in alle <b>pagina\'s</b>, <b>plaatjes</b> en <b>bestanden</b> van uw site, gemeten in KBs.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       Dit programma, $PROG, herkent elke benadering van uw site na een <b>zoekopdracht</b> van de <b>".(@SearchEnginesArray)." meest populaire Internet zoekmachines</b> (zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Lijst van alle <b>externe pagina\'s</b> die zijn gebruikt om naar uw site te linken (of deze te benaderen) (Alleen de <b>$MaxNbOfRefererShown</b> meest gebruikte externe pagina\'s zijn getoond.\n
+       Links gebruikt door de resultaten van zoekmachines worden hiet niet getoond omdat deze al zijn opgenomen in de vorige regel van deze tabel.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Deze tabel toont de lijst van <b>keywords</b> die het meest zijn gebruikt om uw site te vindein in Internet zoekmachines.
+       (Keywords van de <b>".(@SearchEnginesArray)."</b> meest populaire zoekmachines worden door $PROG herkend, zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Robots (soms Spiders genoemd) zijn <b>automatische bezoekcomputers</b> die door veel zoekmachines worden gebruikt om uw site te scannen om (1) deze te indexeren, (2) statistieken over Internet sites te verzamelen en/of (3) te kijken of site nog steeds on-line is.<br>
+       Dit programma, $PROG, is in staat maximaal <b>".(@RobotArray)."</b> robots te herkennen</b>.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       Geen beschrijving voor deze foutmelding.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       De server heeft het verzoek begrepen, maar zal deze later behandelen.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       De server heeft het verzoek verwerkt, maar er is geen document om te verzenden.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Gedeeltelijke inhoud.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       Het aangevraagde document is verplaatst en is nu op een andere locatie die in het antwoord gegeven is.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       Geen beschrijving voor deze foutmelding.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       \"Taalfout\", de server begreep het verzoek niet.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Er is gepoogd een <b>URL waarvoor een usernaam/wachtwoord noodzakelijk is</b> te benaderen.<br>
+       Een hoog aantal van deze meldingen kan betekenen dat iemand (zoals een hacker) probeert uw site te kraken, of uw site binnen te komen (pogend een beveiligd onderdeel van uw site te benaderen door verschillende usernamen/wachtwoorden te proberen, bijvoorbeeld).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Er is gepoogd een <b>URL die is ingesteld om niet benaderbaar te zijn, zelfs met usernaam/wachtwoord</b> te benaderen (bijvoorbeeld, een URL in een directory die niet \"doorbladerbaar\" is).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Er is gepoogd een <b>niet bestaande URL</b> te benaderen. Deze fout betekent vaak dat er een ongeldige link in uw site zit of dat een bezoeker een URL foutief heeft ingevoerd.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       De server heeft er <b>te lang</b> over gedaan om een antwoord op een aanvraag te geven. Het kan een CGI script zijn dat zo traag is dat de server hem heeft moeten afbreken of een overbelaste web server.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Interne fout. Deze error wordt vaak veroorzaakt door een CGI programma dat abnormaal is beeindigd (een core dump, bijvoorbeeld).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Onbekende actie aangevraagd.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Melding die door een proxy of gateway HTTP server wordt gegeven als een echte doelserver niet succesvol op de aanvraag van een client antwoordt.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Interne server fout.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       HTTP versie niet ondersteund.
+       </DIV>
+       ";
+}
+
+
+# Spanish tooltips
+if ($Lang == 3) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       Se considera un nueva vista por <b>cada nuevo visitante</b> que consulte una página y que no haya accesado el sitio en los últimos <b>".($VisitTimeOut/10000*60)." mins.</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Número de Servidores (<b>direcciones IP</b>) que entran a un sitio (y que por lo menos visitan una <b>página</b>).<br>
+       Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accesado al sitio en un día.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       Número de ocasiones que una <b>página</b> del sitio ha sido <b>vista</b> (La suma de todos los visitantes incluyendo múltiples visitas).<br>
+       Este contador se distingue de \"hits\" porque cuenta sólo las páginas HTML y no los gráficos u otros archivos o ficheros.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       El número de ocasiones que una <b>página, imagen, archivo o fichero</b> de un sitio es <b>visto</b> o <b>descargado</b> por un visitante.<br>
+       Este contador sirve de referencia, pero el contador de \"páginas\" representa un dato mercadotécnico generalmente más útil y por lo tanto se recomienda.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       El número de <b>kilo bytes</b> descargados por los visitantes del sitio.<br>
+       Se refiere al volumen de datos descargados por todas las <b>páginas</b>, <b>imágenes</b> y <b>archivos o ficheros</b> medidos en kilo bytes.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       El programa $PROG es capaz de reconocer una visita a su sitio luego de cada <b>búsqueda</b> desde cualquiera de los <b>".(@SearchEnginesArray)." motores de búsqueda y directorios Internet</b> más populares (Yahoo, Altavista, Lycos, Google, Terra, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Lista de <b>páginas de sitios externos</b> utilizadas para acceder o enlazarse con su sitio (Sólo las <b>$MaxNbOfRefererShown</b> páginas más utilizadas se encuentras enumeradas).\n
+       Los enlaces utilizados por los motores de búsqueda o directorios son excluidos porque ya han sido contabilizados en el rubro anterior.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Esta tabla muestra la lista de las <b>palabras clave</b> más utilizadas en los motores de búsqueda y directorios Internet para encontrar su sitio.
+       (El programa $PROG reconoce palabras clave usadas en los <b>".(@SearchEnginesArray)."</b> motores de búsqueda más populares, tales como Yahoo, Altavista, Lycos, Google, Voila, Terra etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Los Robots son <b>visitantes automáticos</b> que escanean o viajan por su sitio para indexarlo, o jerarquizarlo, para recopilar estadísticas de sitios Web, o para verificar si su sitio se encuentra conectado a la Red.<br>
+       El programa $PROG reconoce hasta <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\">
+       Error sin descripción.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\">
+       La solicitud ha sido computada pero el servidor la procesará más tarde.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\">
+       El servidor ha procesado la solicitud pero no existen documentos para enviar.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\">
+       Contenido parcial.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\">
+       El documento solicitado ha sido reubicado y se encuentra en un URL proporcionado en la misma respuesta.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\">
+       Error sin descripción.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\">
+       Error de sintaxis, el servidor no ha comprendido su solicitud.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\">
+       Número de intentos por acceder un <b>URL que exige una combinación usuario/contraseña que ha sido invalida.</b>.<br>
+       Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\">
+       Número de intentos por acceder un <b>URL configurado para no ser accesible, aún con una combinación usuario/contraseña</b> (p.e., un URL previamente definido como \"no navegable\").
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\">
+       Número de intentos por acceder un <b>URL inexistente</b>. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\">
+       El servidor ha tomado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado.
+       </DIV>
+
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\">
+       Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\">
+       Solicitud desconocida por el servidor.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\">
+       Código retornado por un servidor de protocolo HTTP el cual funge como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\">
+       Error interno del servidor.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\">
+       Gateway time-out.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\">
+       Versión de protocolo HTTP no soportada.
+       </DIV>
+       ";
+}
+
+# Polish tooltips
+if ($Lang == 6) {
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt1\">
+       Wizyty ka¿dego <b>nowego go¶cia</b>, który ogl±da³ stronê i nie ³±czy³ siê z ni± przez ostatnie <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt2\">
+       Adres numeryczny hosta klienta (<b>tzw. adres IP</b>) odwiedzaj±cego tê stronê.<br>
+       Ten numer mo¿e byæ identyczny dla <B>kilku ró¿nych Internautów</B> którzy odwiedzili stronê tego samego dnia.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt3\">
+       ¦rednia liczba obejrzanych <B>stron</B> przypadaj±ca na jednego Internautê. (Suma go¶ci, wszystkich wizyt).<br>
+       Ten licznik ró¿ni siê od kolumny z prawej, gdy¿ zlicza on tylko strony html (bez obrazków i innych plików).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt4\">
+       Liczba wszystkich <b>stron, obrazków, d¼wiêków, plików</b>, które zosta³y <b>obejrzane</b> lub <b>¶ci±gniête</b> przez kogo¶.<br>
+       Warto¶æ jest jedynie orientacyjna, zaleca siê spogl±daæ na licznik \"strony\".
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt5\">
+       Liczba <b>kilobajtów</b> ¶ci±gniêtych przez Internautów.<br>
+       Jest to suma wszystkich ¶ci±gniêtych danych <B>(strony html, obrazki, d¼wiêki)</B>.
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt13\">
+       $PROG rozró¿nia dostêp do stron <b>z zagranicznych wyszukiwarek</b> dziêki <b>".(@SearchEnginesArray)." najpopularniejszym przegl±darkom internetowym</b> (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt14\">
+       Lista wszystkich <b>stron spoza serwera</b> z których trafiono na ten serwer (wy¶wietlanych jest <b>$MaxNbOfRefererShown</b> stron z których najczê¶ciej siê odwo³ywano.\n
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt15\">
+       Ta kolumna pokazuje listê najczê¶ciej u¿ywanych <b>s³ów kluczowych</b>, dziêki którym znaleziono t± stronê w wyszukiwarkach.
+       ($PROG rozró¿nia zapytania s³ów kluczowych z <b>".(@SearchEnginesArray)."</b> najpopularniejszych wyszukiwarek, takich jak Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt16\">
+       Roboty s± <b>programami sieciowymi</b> skanuj±cymi strony w celu zebrania/aktualizacji danych (np. s³owa kluczowe do wyszukiwarek), lub sprawdzaj±cymi czy strona nadal istnieje w sieci.<br>
+       $PROG rozró¿nia obecnie <b>".(@RobotArray)."</b> robów.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"classTooltip\" ID=\"tt201\"> Zlecenie POST zosta³o zrealizowane pomy¶lnie. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt202\"> ¯±danie zosta³o odebrane poprawnie, lecz jeszcze siê nie zakoñczy³o. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt203\"> Zwrócona informacja na temat obiektu jest nieaktualna. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt204\"> Serwer przetworzy³ ¿±danie, lecz nie posiada ¿adnych danych do wys³ania. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt206\"> Czê¶ciowa zawarto¶æ.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt301\"> Dokument zosta³ przeniesiony pod inny adres.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt302\"> Dokument zosta³ czasowo przeniesiony pod iiny adres.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt303\"> W celu pobrania dokumentu konieczne jest sprawdzenie innego URL-a. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt400\"> Zlecenie by³o b³êdne, lub niemo¿liwe do zrealizowania przez serwer.<BR>B³±d powstaje wtedy, kiedy serwer WWW otrzymuje do wykonania instrukcjê, której nie rozumie.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt401\"> B³±d autoryzacji. Strona wymaga podania has³a i loginu - b³±d pokazuje siê wtedy, gdy które¶ z tych danych siê nie zgadza lub zosta³y podane niew³a¶ciwiwe.<BR>Je¶li liczba ta jest du¿a, jest to sygna³ dla webmastera, i¿ kto¶ próbuje z³amaæ has³o do strony nim zabezpieczonej.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt403\"> B³±d wystêpuje wtedy, gdy katalog/strona do którego siê odwo³ywano nie ma ustawionych w³a¶ciwych praw dostêpu, lub prawa te nie pozwalaj± na obejrzenie zawarto¶ci katalogu/strony.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt404\"> Spróbuj wpisaæ <b>nie istniej±cy adres URL</b> (np. adres tej strony ze skasowan± jedn± literk±). Znaczy to, ¿e posiadasz gdzie¶ na swoich stronach b³êdny link, lub link odnosz±cy siê do nieistniej±cej strony.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt405\"> Metoda wskazana w <B>nag³ówku ¿±dania</B> jest niedozwolona przy odnoszeniu siê do zasobu, na który wskazuje. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt406\"> Zasób identyfikowany przez ¿±danie jest generuje odpowiedzi zawieraj±ce charakterystyczn± zawarto¶æ nie akceptowaln± wed³ug nag³ówka ¿±dania. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt407\"> Kod podobny do Error 401 (brak autoryzacji), lecz nakazuje on, i¿ musisz dokonaæ wpierw <B>autoryzacji na serwerze proxy</B> (serwer proxy wysy³a wtedy do strony nag³ówek <B>Proxy-Authentificate</B>, dziêki któremu autoryzacja jest mo¿liwa). </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\"> Przegl±darka nie wys³a³a ¿±dañ do serwera w czasie jego oczekiwania. Mo¿esz powtórzyæ ¿±danie bez jego modyfikacji w czasie pó¼niejszym. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt409\"> ¯±danie nie mog³o zostaæ spe³nione, poniewa¿ wyst±pi³ konflikt stanu ¿±danego obiektu. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt410\"> Dosyæ ciekawy b³±d - jeszcze siê z nim nie spotka³em. B³±d jest wy¶wietlany, gdy <B>trwale uzuniêto stronê</B> i jej autorzy chc± o tym fakcie poinformowaæ (zazwyczaj praktykuje siê kasacjê konta bez uprzedzenia :). Oznacza to, i¿ inni webmasterzy powinni usun±æ na swoich stronach odwo³ania do strony z Error410. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt411\"> Serwer odrzuci³ ¿adanie poniewa¿ nie zawiera³o ono nag³ówka <B>Content-Length</B>. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt412\"> Jeden lub wiêcej <B>warunków</B> przes³anych w <b>nag³ówku ¿±dania</b> nie spe³ni³ warunków i zosta³ odrzucony (np. gdy wa¿no¶æ strony okre¶lona w nag³ówku <B>Expiration</B> wygas³a). </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt413\"> Serwer odrzuci³ ¿±danie poniewa¿ dane wejsciowe s± zbyt du¿e ni¿ mo¿na je obs³u¿yæ (np. przy próbie wys³ania przez formularz pliku o du¿ej objêto¶ci). Serwer zakoñczy po³±czenie w celu ochrony klienta.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt414\"> Serwer odrzuci³ ¿±danie, poniewa¿ <B>URI</B> zasobu jest d³u¿sze ni¿ serwer mo¿e zinterpretowaæ.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt415\"> Serwer odrzuci³ ¿±danie, poniewa¿ ¿±danie jest w formacie nie obs³ugiwanym przez serwer.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt408\"> Serwer czeka³ <b>zbyt d³ugo</b> na odpowied¼. Prawdopodobnie skrypt CGI pracuje zbyt wolno (ma za du¿o danych do przetworzenia). </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt500\"> B³±d wewnêtrzny. Ten b³±d czêsto pojawia siê, gdy aplikacja CGI nie zakoñczy³a siê normalnie (podobno ka¿dy program zawiera przynajmniej jeden b³±d...:-). </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt501\"> Serwer nie umo¿liwia obs³ugi mechanizmu. </DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt502\"> Serwer jest chwilowo przeci±¿ony i nie mo¿e obs³u¿yæ zlecenia.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt503\"> Serwer zdecydowa³ siê przerwaæ oczekiwanie na inny zasób lub us³ugê, i z tego powodu nie móg³ obs³u¿yæ zlecenia.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt504\"> Serwer docelowy nie otrzyma³ odpowiedzi od serwera proxy, lub bramki.</DIV>
+       <DIV CLASS=\"classTooltip\" ID=\"tt505\"> Nie obs³ugiwana wesja protoko³u HTTP. </DIV>
+       ";
+}
+
+
+print "
+<SCRIPT JavaScript>
+       function ShowTooltip(fArg)
+       {
+               var tooltipOBJ = eval(\"document.all['tt\" + fArg + \"']\");
+               var tooltipOffsetTop = tooltipOBJ.scrollHeight + 35;
+               var testTop = (document.body.scrollTop + event.clientY) - tooltipOffsetTop;
+               var testLeft = event.clientX - 310;
+               var tooltipAbsLft = (testLeft < 0) ? 10 : testLeft;
+               var tooltipAbsTop = (testTop < document.body.scrollTop) ? document.body.scrollTop + 10 : testTop;
+               tooltipOBJ.style.posLeft = tooltipAbsLft; tooltipOBJ.style.posTop = tooltipAbsTop;
+               tooltipOBJ.style.visibility = \"visible\";
+       }
+       function HideTooltip(fArg)
+       {
+               var tooltipOBJ = eval(\"document.all['tt\" + fArg + \"']\");
+               tooltipOBJ.style.visibility = \"hidden\";
+       }
+</SCRIPT>
+
+";
+
+
+# SUMMARY
+#---------------------------------------------------------------------
+print "<CENTER><a name=\"SUMMARY\"></a><BR>";
+$tab_titre="$message[7][$Lang] $LocalSite";
+&tab_head;
+
+# FirstTime LastTime TotalVisits
+$beginmonth=$MonthRequired;$endmonth=$MonthRequired;
+if ($MonthRequired eq "year") { $beginmonth=1;$endmonth=12; }
+for ($monthix=$beginmonth; $monthix<=$endmonth; $monthix++) {
+       $monthix=$monthix+0; if ($monthix < 10) { $monthix  = "0$monthix"; }    # Good trick to change $month into "MM" format
+       if ($FirstTime{$YearRequired.$monthix} > 0 && ($FirstTime == 0 || $FirstTime > $FirstTime{$YearRequired.$monthix})) { $FirstTime = $FirstTime{$YearRequired.$monthix}; }
+       if ($LastTime  < $LastTime{$YearRequired.$monthix}) { $LastTime = $LastTime{$YearRequired.$monthix}; }
+       $TotalVisits+=$MonthVisits{$YearRequired.$monthix};
+}
+# TotalUnique TotalHosts
+foreach $key (keys %_hostmachine_p) { if ($key ne "Unknown") { if ($_hostmachine_p{$key} > 0) { $TotalUnique++; }; $TotalHosts++; } }
+foreach $key (keys %_unknownip_l) { $TotalUnique++; $TotalHosts++; }           # TODO: Put + @xxx instead of foreach
+# TotalDifferentPages
+$TotalDifferentPages=@sortsiders;
+# TotalPages TotalHits TotalBytes
+for ($ix=0; $ix<=23; $ix++) { $TotalPages+=$_time_p[$ix]; $TotalHits+=$_time_h[$ix]; $TotalBytes+=$_time_k[$ix]; }
+# TotalDifferentKeywords
+$TotalDifferentKeywords=@sortsearchwords;
+# TotalKeywords
+foreach $key (keys %_keywords) { $TotalKeywords+=$_keywords{$key}; }
+# TotalErrors
+foreach $key (keys %_errors_h) { $TotalErrors+=$_errors_h{$key}; }
+# Ratio
+if ($TotalUnique > 0) { $RatioHosts=int($TotalVisits/$TotalUnique*100)/100; }
+if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/$TotalVisits)/100; }
+
+print "<TR><TD><b>$message[8][$Lang]</b></TD>";
+if ($MonthRequired eq "year") { print "<TD colspan=3 rowspan=2><font style=\"font: 10pt arial,verdana,helvetica\"><b>$message[6][$Lang] $YearRequired</b></font><br>"; }
+else { print "<TD colspan=3 rowspan=2><font style=\"font: 10pt arial,verdana,helvetica\"><b>$message[5][$Lang] $monthlib{$MonthRequired} $YearRequired</b></font><br>"; }
+# Show links for possible years
+foreach $key (keys %listofyears) {
+       print "<a href=\"$DirCgi$PROG.$Extension?site=$LocalSite&year=$key&month=year&lang=$Lang\">$message[6][$Lang] $key</a> ";
+}
+print "</TD>";
+print "<TD><b>$message[9][$Lang]</b></TD></TR>";
+
+$yearcon=substr($FirstTime,0,4);$monthcon=substr($FirstTime,4,2);$daycon=substr($FirstTime,6,2);$hourcon=substr($FirstTime,8,2);$mincon=substr($FirstTime,10,2);
+if ($FirstTime != 0) { print "<TR><TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD>"; }
+else { print "<TR><TD>NA</TD>"; }
+$yearcon=substr($LastTime,0,4);$monthcon=substr($LastTime,4,2);$daycon=substr($LastTime,6,2);$hourcon=substr($LastTime,8,2);$mincon=substr($LastTime,10,2);
+if ($LastTime != 0) { print "<TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD></TR>"; }
+else { print "<TD>NA</TD></TR>\n"; }
+print "<TR>";
+print "<TD width=20% bgcolor=$color_v onmouseover=\"ShowTooltip(1);\" onmouseout=\"HideTooltip(1);\">$message[10][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_w onmouseover=\"ShowTooltip(2);\" onmouseout=\"HideTooltip(2);\">$message[11][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_p onmouseover=\"ShowTooltip(3);\" onmouseout=\"HideTooltip(3);\">$message[56][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_h onmouseover=\"ShowTooltip(4);\" onmouseout=\"HideTooltip(4);\">$message[57][$Lang]</TD>";
+print "<TD width=20% bgcolor=$color_k onmouseover=\"ShowTooltip(5);\" onmouseout=\"HideTooltip(5);\">$message[44][$Lang]</TD></TR>";
+$kilo=int($TotalBytes/1024*100)/100;
+print "<TR><TD><b>$TotalVisits</b><br>&nbsp;</TD><TD><b>$TotalUnique</b><br>($RatioHosts&nbsp;$message[52][$Lang])</TD><TD><b>$TotalPages</b><br>($RatioPages&nbsp;".lc $message[56][$Lang]."/".lc $message[12][$Lang].")</TD>";
+print "<TD><b>$TotalHits</b><br>($RatioHits&nbsp;".lc $message[57][$Lang]."/".lc $message[12][$Lang].")</TD><TD><b>$kilo $message[44][$Lang]</b><br>($RatioBytes&nbsp;$message[44][$Lang]/".lc $message[12][$Lang].")</TD></TR>\n";
+print "<TR valign=bottom><TD colspan=5>";
+print "<TABLE>";
+print "<TR valign=bottom>";
+$max_v=1;$max_p=1;$max_h=1;$max_k=1;
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       if ($MonthVisits{$YearRequired.$monthix} > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; }
+       if ($MonthUnique{$YearRequired.$monthix} > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; }
+       if ($MonthPage{$YearRequired.$monthix} > $max_p)   { $max_p=$MonthPage{$YearRequired.$monthix}; }
+       if ($MonthHits{$YearRequired.$monthix} > $max_h)   { $max_h=$MonthHits{$YearRequired.$monthix}; }
+       if ($MonthBytes{$YearRequired.$monthix} > $max_k)  { $max_k=$MonthBytes{$YearRequired.$monthix}; }
+}
+
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       $bredde_v=$MonthVisits{$YearRequired.$monthix}/$max_v*$BarHeight/2;
+       $bredde_u=$MonthUnique{$YearRequired.$monthix}/$max_v*$BarHeight/2;
+       $bredde_p=$MonthPage{$YearRequired.$monthix}/$max_h*$BarHeight/2;
+       $bredde_h=$MonthHits{$YearRequired.$monthix}/$max_h*$BarHeight/2;
+       $bredde_k=$MonthBytes{$YearRequired.$monthix}/$max_k*$BarHeight/2;
+       $kilo=int(($MonthBytes{$YearRequired.$monthix}/1024)*100)/100;
+       print "<TD>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=8 ALT=\"$message[10][$Lang]: $MonthVisits{$YearRequired.$monthix}\" title=\"$message[10][$Lang]: $MonthVisits{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_u\" HEIGHT=$bredde_u WIDTH=8 ALT=\"$message[11][$Lang]: $MonthUnique{$YearRequired.$monthix}\" title=\"$message[11][$Lang]: $MonthUnique{$YearRequired.$monthix}\">";
+       print "&nbsp;";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=8 ALT=\"$message[56][$Lang]: $MonthPage{$YearRequired.$monthix}\" title=\"$message[56][$Lang]: $MonthPage{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=8 ALT=\"$message[57][$Lang]: $MonthHits{$YearRequired.$monthix}\" title=\"$message[57][$Lang]: $MonthHits{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=8 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD>\n";
+}
+
+print "</TR><TR>";
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       print "<TD valign=center><a href=\"$DirCgi$PROG.$Extension?site=$LocalSite&year=$YearRequired&month=$monthix&lang=$Lang\">$monthlib{$monthix}</a></TD>";
+}
+
+print "</TR></TABLE>";
+print "</TD></TR>";
+&tab_end;
+
+
+# MENU
+#---------------------------------------------------------------------
+print "<CENTER><a name=\"MENU\"></a><BR>";
+
+print "<table><tr><td>";
+print " <a href=\"#DOMAINS\"><font size=1>[$message[17][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#VISITOR\"><font size=1>[$message[18][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#ROBOTS\"><font size=1>[$message[53][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#PAGE\"><font size=1>[$message[19][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#HOUR\"><font size=1>[$message[20][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#BROWSER\"><font size=1>[$message[21][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#REFERER\"><font size=1>[$message[23][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#SEARCHWORDS\"><font size=1>[$message[24][$Lang]]</font></a> &nbsp;";
+print " <a href=\"#ERRORS\"><font size=1>[$message[22][$Lang]]</font></a> &nbsp;";
+print "</td></tr></table>\n";
+
+print "<br><hr width=96%>\n\n";
+
+
+# BY COUNTRY/DOMAIN
+#---------------------------
+print "<CENTER><a name=\"DOMAINS\"></a><BR>";
+$tab_titre="$message[25][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH colspan=2>$message[17][$Lang]</TH><TH>Code</TH><TH bgcolor=$color_p>$message[56][$Lang]</TH><TH bgcolor=$color_h>$message[57][$Lang]</TH><TH bgcolor=$color_k>$message[44][$Lang]</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max_h=$_domener_h{$sortdomains_h[0]}; }
+else            { $max_h=$_domener_h{$sortdomains_h[$#sortdomains_h]}; }
+if ($SortDir<0) { $max_k=$_domener_k{$sortdomains_k[0]}; }
+else            { $max_k=$_domener_k{$sortdomains_k[$#sortdomains_k]}; }
+$count=0;$total_p=0;$total_h=0;$total_k=0;
+foreach $key (@sortdomains_p) {
+       if ($max_h > 0) { $bredde_p=$BarWidth*$_domener_p{$key}/$max_h+1; }     # use max_h to enable to compare pages with hits
+       if ($max_h > 0) { $bredde_h=$BarWidth*$_domener_h{$key}/$max_h+1; }
+       if ($max_k > 0) { $bredde_k=$BarWidth*$_domener_k{$key}/$max_k+1; }
+       $kilo=int(($_domener_k{$key}/1024)*100)/100;
+       if ($key eq "ip") {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=LEFT>$message[0][$Lang]</TD><TD>$key</TD>";
+       }
+       else {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=LEFT>$DomainsHash{$key}</TD><TD>$key</TD>";
+       }
+       print "<TD>$_domener_p{$key}</TD><TD>$_domener_h{$key}</TD><TD>$kilo</TD>";
+       print "<TD CLASS=LEFT>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$message[56][$Lang]: $_domener_p{$key}\" title=\"$message[56][$Lang]: $_domener_p{$key}\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$message[57][$Lang]: $_domener_h{$key}\" title=\"$message[57][$Lang]: $_domener_h{$key}\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD></TR>\n";
+       $total_p += $_domener_p{$key};
+       $total_h += $_domener_h{$key};
+       $total_k += $_domener_k{$key};
+       $count++;
+       if ($count >= $MaxNbOfDomain) { last; }
+}
+$rest_p=$TotalPages-$total_p;
+$rest_h=$TotalHits-$total_h;
+$rest_k=int((($TotalBytes-$total_k)/1024)*100)/100;
+if ($rest_p > 0) {     # All other domains (known or not)
+       print "<TR><TD colspan=3 CLASS=LEFT><font color=blue>$message[2][$Lang]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>$rest_k</TD>\n";
+       print "<TD CLASS=LEFT>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$message[56][$Lang]: $_rest_p\" title=\"$message[56][$Lang]: $_rest_p\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$message[57][$Lang]: $_rest_h\" title=\"$message[57][$Lang]: $_rest_h\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$message[44][$Lang]: $_rest_k\" title=\"$message[44][$Lang]: $_rest_k\">";
+       print "</TD></TR>\n";
+       }
+&tab_end;
+
+
+# BY HOST/VISITOR
+#--------------------------
+print "<CENTER><a name=\"VISITOR\"></a><BR>";
+$tab_titre="TOP $MaxNbOfHostsShown $message[55][$Lang] $TotalHosts $message[26][$Lang] ($TotalUnique $message[11][$Lang])";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH>$message[18][$Lang]</TH><TH bgcolor=$color_p>$message[56][$Lang]</TH><TH bgcolor=$color_h>$message[57][$Lang]</TH><TH bgcolor=$color_k>$message[44][$Lang]</TH><TH>$message[9][$Lang]</TH></TR>\n";
+$count=0;$total_p=0;$total_h=0;$total_k=0;
+foreach $key (@sorthosts_p)
+{
+       if ($_hostmachine_h{$key}>=$MinHitHost) {
+               $kilo=int(($_hostmachine_k{$key}/1024)*100)/100;
+               if ($key eq "Unknown") {
+                       print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownip&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[1][$Lang]</a></TD><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD><TD><a href=\"$DirCgi$PROG.$Extension?action=unknownip&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[3][$Lang]</a></TD></TR>\n";
+                       }
+               else {
+                       $yearcon=substr($_hostmachine_l{$key},0,4);
+                       $monthcon=substr($_hostmachine_l{$key},4,2);
+                       $daycon=substr($_hostmachine_l{$key},6,2);
+                       $hourcon=substr($_hostmachine_l{$key},8,2);
+                       $mincon=substr($_hostmachine_l{$key},10,2);
+                       print "<tr><td CLASS=LEFT>$key</td><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD>";
+                       if ($daycon ne "") {
+                               if ($Lang != 0) { print "<td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+                               else { print "<td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+                       }
+                       else {
+                               print "<td>-</td>";
+                       }
+               }
+               $total_p += $_hostmachine_p{$key};
+               $total_h += $_hostmachine_h{$key};
+               $total_k += $_hostmachine_k{$key};
+       }
+       $count++;
+       if (!(($SortDir<0 && $count<$MaxNbOfHostsShown) || ($SortDir>0 && $#sorthosts_p-$MaxNbOfHostsShown < $count))) { last; }
+}
+$rest_p=$TotalPages-$total_p;
+$rest_h=$TotalHits-$total_h;
+$rest_k=int((($TotalBytes-$total_k)/1024)*100)/100;
+if ($rest_p > 0) { print "<TR><TD CLASS=LEFT><font color=blue>$message[2][$Lang]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>$rest_k</TD><TD>&nbsp;</TD></TR>\n"; } # All other visitors (known or not)
+&tab_end;
+
+
+# BY ROBOTS
+#----------------------------
+print "<CENTER><a name=\"ROBOTS\"></a><BR>";
+$tab_titre=$message[53][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle onmouseover=\"ShowTooltip(16);\" onmouseout=\"HideTooltip(16);\"><TH>Robot</TH><TH bgcolor=$color_h width=80>Hits</TH><TH>$message[9][$Lang]</TH></TR>\n";
+@sortrobot=sort { $SortDir*$_robot_h{$a} <=> $SortDir*$_robot_h{$b} } keys (%_robot_h);
+foreach $key (@sortrobot) {
+       $yearcon=substr($_robot_l{$key},0,4);
+       $monthcon=substr($_robot_l{$key},4,2);
+       $daycon=substr($_robot_l{$key},6,2);
+       $hourcon=substr($_robot_l{$key},8,2);
+       $mincon=substr($_robot_l{$key},10,2);
+       if ($Lang != 0) { print "<tr><td CLASS=LEFT>$RobotHash{$key}</td><td>$_robot_h{$key}</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+       else { print "<tr><td CLASS=LEFT>$RobotHash{$key}</td><td>$_robot_h{$key}</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+}
+&tab_end;
+
+
+# BY PAGE
+#-------------------------
+print "<CENTER><a name=\"PAGE\"></a><BR>";
+$tab_titre="TOP $MaxNbOfPageShown $message[55][$Lang] $TotalDifferentPages $message[27][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Page-URL</TH><TH bgcolor=$color_p>&nbsp;$message[29][$Lang]&nbsp;</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max=$_sider_p{$sortsiders[0]}; }
+else            { $max=$_sider_p{$sortsiders[$#sortsiders]}; }
+$count=0;
+foreach $key (@sortsiders) {
+       if ((($SortDir<0 && $count<$MaxNbOfPageShown) || ($SortDir>0 && $#sortsiders-$MaxNbOfPageShown<$count)) && $_sider_p{$key}>=$MinHitFile) {
+       print "<TR><TD CLASS=LEFT>";
+               $nompage=$Aliases{$key};
+               if ($nompage eq "") { $nompage=$key; }
+               $nompage=substr($nompage,0,$MaxLengthOfURL);
+           if ($ShowLinksOnUrl) { print "<A HREF=\"$key\">$nompage</A>"; }
+           else                 { print "$nompage"; }
+           $bredde=$BarWidth*$_sider_p{$key}/$max+1;
+               print "</TD><TD>$_sider_p{$key}</TD><TD CLASS=LEFT><IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde HEIGHT=8 ALT=\"$message[56][$Lang]: $_sider_p{$key}\" title=\"$message[56][$Lang]: $_sider_p{$key}\"></TD></TR>\n";
+       }
+       $count++;
+}
+&tab_end;
+
+
+# BY HOUR
+#----------------------------
+print "<CENTER><a name=\"HOUR\"></a><BR>";
+$tab_titre="$message[20][$Lang]";
+&tab_head;
+
+print "<TR><TD><TABLE><TR>\n";
+$max_p=0;$max_h=0;$max_k=0;
+for ($ix=0; $ix<=23; $ix++) {
+  print "<TH width=16>$ix</TH>";
+  if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; }
+  if ($_time_h[$ix]>$max_h) { $max_h=$_time_h[$ix]; }
+  if ($_time_k[$ix]>$max_k) { $max_k=$_time_k[$ix]; }
+}
+print "</TR>\n";
+
+print "<TR>\n";
+for ($ix=1; $ix<=24; $ix++) {
+       $hr=$ix; if ($hr>12) { $hr=$hr-12; }
+       print "<TH><IMG SRC=\"$DirIcons\/clock\/hr$hr.png\" width=10></TH>";
+}
+print "</TR>\n";
+
+print "\n<TR VALIGN=BOTTOM>\n";
+for ($ix=0; $ix<=23; $ix++) {
+       $bredde_p=0;$bredde_h=0;$bredde_k=0;
+       if ($max_h > 0) { $bredde_p=($BarHeight*$_time_p[$ix]/$max_h)+1; }
+       if ($max_h > 0) { $bredde_h=($BarHeight*$_time_h[$ix]/$max_h)+1; }
+       if ($max_k > 0) { $bredde_k=($BarHeight*$_time_k[$ix]/$max_k)+1; }
+       $kilo=int(($_time_k[$ix]/1024)*100)/100;
+       print "<TD>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=6 ALT=\"$message[56][$Lang]: $_time_p[$ix]\" title=\"$message[56][$Lang]: $_time_p[$ix]\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"$message[57][$Lang]: $_time_h[$ix]\" title=\"$message[57][$Lang]: $_time_h[$ix]\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD>\n";
+}
+print "</TR></TABLE></TD></TR>\n";
+
+&tab_end;
+
+
+# BY BROWSER
+#----------------------------
+print "<CENTER><a name=\"BROWSER\"></a><BR>";
+$tab_titre="$message[31][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH>Browser</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortbrowsers) {
+       $p=int($_browser_h{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownrefererbrowser&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       }
+       else {
+               print "<TR><TD CLASS=LEFT>$BrowsersHash{$key}</TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       }
+}
+&tab_end;
+
+
+# BY OS
+#----------------------------
+print "<CENTER><a name=\"OS\"></a><BR>";
+$tab_titre=$message[35][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH colspan=2>OS</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortos) {
+       $p=int($_os_h{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownreferer&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_os_h{$key}&nbsp;</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
+               }
+       else {
+               $nameicon = $OSHash{$key}; $nameicon =~ s/\ .*//; $nameicon =~ tr/A-Z/a-z/;
+               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/$nameicon.png\"></TD><TD CLASS=LEFT>$OSHash{$key}</TD><TD>$_os_h{$key}</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
+       }
+}
+&tab_end;
+
+
+# BY REFERENCE
+#---------------------------
+print "<CENTER><a name=\"REFERER\"></a><BR>";
+$tab_titre="$message[36][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH>$message[37][$Lang]</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+if ($TotalHits > 0) { $_=int($_from_h[0]/$TotalHits*1000)/10; }
+print "<TR><TD CLASS=LEFT><b>$message[38][$Lang]:</b></TD><TD>$_from_h[0]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+if ($TotalHits > 0) { $_=int($_from_h[1]/$TotalHits*1000)/10; }
+print "<TR><TD CLASS=LEFT><b>$message[39][$Lang]:</b></TD><TD>$_from_h[1]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+#------- Referrals by search engine
+if ($TotalHits > 0) { $_=int($_from_h[2]/$TotalHits*1000)/10; }
+print "<TR onmouseover=\"ShowTooltip(13);\" onmouseout=\"HideTooltip(13);\"><TD CLASS=LEFT><b>$message[40][$Lang] :</b><br>\n";
+print "<TABLE>\n";
+foreach $se (@sortsereferrals) {
+       print "<TR><TD CLASS=LEFT>- $SearchEnginesHash{$se} </TD><TD align=right>$_se_referrals_h{\"$se\"}</TD></TR>\n";
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$_from_h[2]&nbsp;</TD><TD valign=top>$_&nbsp;%</TD>\n</TR>\n";
+#------- Referrals by external HTML link
+if ($TotalHits > 0) { $_=(int($_from_h[3]/$TotalHits*1000)/10); }
+print "<TR onmouseover=\"ShowTooltip(14);\" onmouseout=\"HideTooltip(14);\"><TD CLASS=LEFT><b>$message[41][$Lang] :</b><br>\n";
+print "<TABLE>\n";
+$count=0;
+foreach $from (@sortpagerefs) {
+       if (!(($SortDir<0 && $count<$MaxNbOfRefererShown) || ($SortDir>0 && $#sortpagerefs-$MaxNbOfRefererShown < $count))) { last; }
+       if ($_pagesrefs_h{$from}>=$MinHitRefer) {
+
+               # Show source
+               $lien=$from; $lien=substr($lien,0,$MaxLengthOfURL);
+               if ($ShowLinksOnUrl && ($from =~ /^http(s|):\/\//)) {
+                   print "<TR><TD CLASS=LEFT>- <A HREF=$from>$lien</A></TD> <TD>$_pagesrefs_h{$from}</TD></TR>\n";
+               } else {
+                       print "<TR><TD CLASS=LEFT>- $lien </TD><TD>$_pagesrefs_h{$from}</TD></TR>\n";
+               }
+
+               $count++;
+       }
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$_from_h[3]&nbsp;</TD><TD valign=top>$_&nbsp;%</TD>\n</TR>\n";
+
+if ($TotalHits > 0) { $_=(int($_from_h[4]/$TotalHits*1000)/10); }
+print "<TR><TD CLASS=LEFT><b>$message[42][$Lang] :</b></TD><TD>$_from_h[4]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+&tab_end;
+
+
+# BY SEARCHWORDS
+#----------------------------
+print "<CENTER><a name=\"SEARCHWORDS\"></a><BR>";
+$tab_titre="TOP $MaxNbOfKeywordsShown $message[55][$Lang] $TotalDifferentKeywords $message[43][$Lang]";
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle onmouseover=\"ShowTooltip(15);\" onmouseout=\"HideTooltip(15);\"><TH>$message[13][$Lang]</TH><TH bgcolor=$color_s width=40>$message[14][$Lang]</TH><TH bgcolor=$color_s width=40>$message[15][$Lang]</TH></TR>\n";
+$count=0;
+foreach $key (@sortsearchwords) {
+       if ( $count>=$MaxNbOfKeywordsShown ) { last; }
+       $p=int($_keywords{$key}/$TotalKeywords*1000)/10;
+       $mot = $key; $mot =~ s/\+/ /g;  # Showing $key without +
+       print "<TR><TD CLASS=LEFT>$mot</TD><TD>$_keywords{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       $count++;
+}
+$count=0;$rest=0;
+foreach $key (@sortsearchwords) {
+       if ( $count<$MaxNbOfKeywordsShown ) { $count++; next; }
+       $rest=$rest+$_keywords{$key};
+}
+if ($rest >0) {
+       if ($TotalKeywords > 0) { $p=int($rest/$TotalKeywords*1000)/10; }
+       print "<TR><TD CLASS=LEFT><font color=blue>$message[30][$Lang]</TD><TD>$rest</TD>";
+       print "<TD>$p&nbsp;%</TD></TR>\n";
+       }
+&tab_end;
+
+
+# BY ERRORS
+#----------------------------
+print "<CENTER><a name=\"ERRORS\"></a><BR>";
+$tab_titre=$message[32][$Lang];
+&tab_head;
+print "<TR BGCOLOR=$color_TableBGRowTitle><TH colspan=2>$message[32][$Lang]</TH><TH bgcolor=$color_h width=40>Hits</TH><TH bgcolor=$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sorterrors) {
+       $p=int($_errors_h{$key}/$TotalErrors*1000)/10;
+       if ($httpcode{$key}) { print "<TR onmouseover=\"ShowTooltip($key);\" onmouseout=\"HideTooltip($key);\">"; }
+       else { print "<TR>"; }
+       if ($key == 404) { print "<TD><a href=\"$DirCgi$PROG.$Extension?action=notfounderror&site=$LocalSite&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$key</a></TD>"; }
+       else { print "<TD>$key</TD>"; }
+       if ($httpcode{$key}) { print "<TD CLASS=LEFT>$httpcode{$key}</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+       else { print "<TD CLASS=LEFT>Unknown error</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+}
+&tab_end;
+
+&html_end;
+
+0;     # Do not remove this line
diff --git a/cgi-bin/robotslist.txt b/cgi-bin/robotslist.txt
new file mode 100644 (file)
index 0000000..747867c
--- /dev/null
@@ -0,0 +1,6430 @@
+robot-id:                       Acme.Spider
+robot-name:                     Acme.Spider
+robot-cover-url:                http://www.acme.com/java/software/Acme.Spider.html
+robot-details-url:              http://www.acme.com/java/software/Acme.Spider.html
+robot-owner-name:               Jef Poskanzer - ACME Laboratories
+robot-owner-url:                http://www.acme.com/
+robot-owner-email:              jef@acme.com
+robot-status:                   active
+robot-purpose:                  indexing maintenance statistics
+robot-type:                     standalone
+robot-platform:                 java
+robot-availability:             source
+robot-exclusion:                yes
+robot-exclusion-useragent:      Due to a deficiency in Java it's not currently possible to set the User-Agent.
+robot-noindex:                  no
+robot-host:                     *
+robot-from:                     no
+robot-useragent:                Due to a deficiency in Java it's not currently possible to set the User-Agent.
+robot-language:                 java
+robot-description:              A Java utility class for writing your own robots.
+robot-history:                  
+robot-environment:              
+modified-date:                  Wed, 04 Dec 1996 21:30:11 GMT
+modified-by:                    Jef Poskanzer
+
+robot-id:           ahoythehomepagefinder
+robot-name:         Ahoy! The Homepage Finder
+robot-cover-url:    http://www.cs.washington.edu/research/ahoy/
+robot-details-url:  http://www.cs.washington.edu/research/ahoy/doc/home.html
+robot-owner-name:   Marc Langheinrich
+robot-owner-url:    http://www.cs.washington.edu/homes/marclang
+robot-owner-email:  marclang@cs.washington.edu
+robot-status:       active
+robot-purpose:      maintenance
+robot-type:         standalone
+robot-platform:     UNIX
+robot-availability: none
+robot-exclusion:    yes
+robot-exclusion-useragent: ahoy
+robot-noindex:      no
+robot-host:         cs.washington.edu
+robot-from:         no
+robot-useragent:    'Ahoy! The Homepage Finder'
+robot-language:     Perl 5 
+robot-description:  Ahoy! is an ongoing research project at the
+                    University of Washington for finding personal Homepages.
+robot-history:      Research project at the University of Washington in 
+                    1995/1996 
+robot-environment:  research
+modified-date:      Fri June 28 14:00:00 1996
+modified-by:        Marc Langheinrich
+
+robot-id: Alkaline
+robot-name: Alkaline
+robot-cover-url: http://www.vestris.com/alkaline
+robot-details-url: http://www.vestris.com/alkaline
+robot-owner-name: Daniel Doubrovkine
+robot-owner-url: http://cuiwww.unige.ch/~doubrov5 
+robot-owner-email: dblock@vestris.com
+robot-status: development active
+robot-purpose: indexing
+robot-type: standalone     
+robot-platform: unix windows95 windowsNT
+robot-availability: binary      
+robot-exclusion: yes
+robot-exclusion-useragent: AlkalineBOT 
+robot-noindex: yes
+robot-host: *
+robot-from: no
+robot-useragent: AlkalineBOT
+robot-language: c++
+robot-description: Unix/NT internet/intranet search engine
+robot-history: Vestris Inc. search engine designed at the University of
+ Geneva 
+robot-environment: commercial research 
+modified-date: Thu Dec 10 14:01:13 MET 1998
+modified-by: Daniel Doubrovkine <dblock@vestris.com>
+
+robot-id: appie
+robot-name: Walhello appie
+robot-cover-url: www.walhello.com
+robot-details-url: www.walhello.com/aboutgl.html
+robot-owner-name: Aimo Pieterse
+robot-owner-url: www.walhello.com
+robot-owner-email: aimo@walhello.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windows98
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: appie
+robot-noindex: yes
+robot-host: 213.10.10.116, 213.10.10.117, 213.10.10.118
+robot-from: yes
+robot-useragent: appie/1.1
+robot-language: Visual C++
+robot-description: The appie-spider is used to collect and index web pages for
+ the Walhello search engine
+robot-history: The spider was built in march/april 2000
+robot-environment: commercial
+modified-date: Thu, 20 Jul 2000 22:38:00 GMT
+modified-by: Aimo Pieterse
+
+robot-id:           arachnophilia
+robot-name:         Arachnophilia
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Vince Taluskie
+robot-owner-url:    http://www.ph.utexas.edu/people/vince.html
+robot-owner-email:  taluskie@utpapa.ph.utexas.edu
+robot-status:       
+robot-purpose:      
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         halsoft.com
+robot-from:         
+robot-useragent:    Arachnophilia
+robot-language:     
+robot-description:  The purpose (undertaken by HaL Software) of this run was to
+       collect approximately 10k html documents for testing
+       automatic abstract generation
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           architext
+robot-name:         ArchitextSpider
+robot-cover-url:    http://www.excite.com/
+robot-details-url:
+robot-owner-name:   Architext Software
+robot-owner-url:    http://www.atext.com/spider.html
+robot-owner-email:  spider@atext.com
+robot-status:       
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *.atext.com
+robot-from:         yes
+robot-useragent:    ArchitextSpider
+robot-language:     perl 5 and c
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       and to generate statistics. The ArchitextSpider collects
+       information for the Excite and WebCrawler search engines.
+robot-history:      
+robot-environment:
+modified-date:      Tue Oct  3 01:10:26 1995
+modified-by:
+
+robot-id:           aretha
+robot-name:         Aretha
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Dave Weiner
+robot-owner-url:    http://www.hotwired.com/Staff/userland/ 
+robot-owner-email:  davew@well.com
+robot-status:       
+robot-purpose:      
+robot-type:         
+robot-platform:     Macintosh
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  A crude robot built on top of Netscape and Userland
+       Frontier, a scripting system for Macs
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: ariadne
+robot-name: ARIADNE
+robot-cover-url: (forthcoming)
+robot-details-url: (forthcoming)
+robot-owner-name: Mr. Matthias H. Gross
+robot-owner-url: http://www.lrz-muenchen.de/~gross/
+robot-owner-email: Gross@dbs.informatik.uni-muenchen.de
+robot-status: development
+robot-purpose: statistics, development of focused crawling strategies
+robot-type: standalone
+robot-platform: java
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: ariadne
+robot-noindex: no
+robot-host: dbs.informatik.uni-muenchen.de
+robot-from: no
+robot-useragent: Due to a deficiency in Java it's not currently possible
+ to set the User-Agent.
+robot-language: java
+robot-description: The ARIADNE robot is a prototype of a environment for
+ testing focused crawling strategies.
+robot-history: This robot is part of a research project at the
+ University of Munich (LMU), started in 2000.
+robot-environment: research
+modified-date: Mo, 13 Mar 2000 14:00:00 GMT
+modified-by: Mr. Matthias H. Gross
+
+robot-id:           aspider
+robot-name:         ASpider (Associative Spider)
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Fred Johansen
+robot-owner-url:    http://www.pvv.ntnu.no/~fredj/
+robot-owner-email:  fredj@pvv.ntnu.no
+robot-status:       retired
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     unix
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         nova.pvv.unit.no
+robot-from:         yes
+robot-useragent:    ASpider/0.09
+robot-language:     perl4
+robot-description:  ASpider is a CGI script that searches the web for keywords given by the user through a form.
+robot-history:      
+robot-environment:  hobby
+modified-date:      
+modified-by:
+
+robot-id: atn.txt
+robot-name: ATN Worldwide
+robot-details-url:
+robot-cover-url:
+robot-owner-name: All That Net
+robot-owner-url: http://www.allthatnet.com
+robot-owner-email: info@allthatnet.com
+robot-status: active
+robot-purpose: indexing
+robot-type:
+robot-platform:
+robot-availability:
+robot-exclusion: yes
+robot-exclusion-useragent: ATN_Worldwide
+robot-noindex:
+robot-nofollow:
+robot-host: www.allthatnet.com
+robot-from:
+robot-useragent: ATN_Worldwide
+robot-language:
+robot-description: The ATN robot is used to build the database for the
+ AllThatNet search service operated by All That Net.  The robot runs weekly,
+ and visits sites in a random order.
+robot-history:
+robot-environment:
+modified-date: July 09, 2000 17:43 GMT
+
+robot-id: atomz
+robot-name: Atomz.com Search Robot
+robot-cover-url: http://www.atomz.com/help/
+robot-details-url: http://www.atomz.com/
+robot-owner-name: Mike Thompson
+robot-owner-url: http://www.atomz.com/
+robot-owner-email: mike@atomz.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: service
+robot-exclusion: yes
+robot-exclusion-useragent: Atomz
+robot-noindex: yes
+robot-host: www.atomz.com
+robot-from: no
+robot-useragent: Atomz/1.0
+robot-language: c
+robot-description: Robot used for web site search service.
+robot-history: Developed for Atomz.com, launched in 1999.
+robot-environment: service
+modified-date: Tue Jul 13 03:50:06 GMT 1999
+modified-by: Mike Thompson
+
+robot-id: auresys
+robot-name: AURESYS
+robot-cover-url: http://crrm.univ-mrs.fr
+robot-details-url: http://crrm.univ-mrs.fr      
+robot-owner-name: Mannina Bruno 
+robot-owner-url: ftp://crrm.univ-mrs.fr/pub/CVetud/Etudiants/Mannina/CVbruno.htm        
+robot-owner-email: mannina@crrm.univ-mrs.fr     
+robot-status: robot actively in use
+robot-purpose: indexing,statistics
+robot-type: Standalone
+robot-platform: Aix, Unix
+robot-availability: Protected by Password
+robot-exclusion: Yes
+robot-exclusion-useragent:  
+robot-noindex: no
+robot-host: crrm.univ-mrs.fr, 192.134.99.192
+robot-from: Yes
+robot-useragent: AURESYS/1.0
+robot-language: Perl 5.001m
+robot-description: The AURESYS is used to build a personnal database for 
+ somebody who search information. The database is structured to be 
+ analysed. AURESYS can found new server by IP incremental. It generate 
+ statistics... 
+robot-history: This robot finds its roots in a research project at the 
+ University of Marseille in 1995-1996
+robot-environment: used for Research
+modified-date: Mon, 1 Jul 1996 14:30:00 GMT 
+modified-by: Mannina Bruno
+
+robot-id:           backrub
+robot-name:         BackRub
+robot-cover-url:
+robot-details-url:
+robot-owner-name:   Larry Page
+robot-owner-url:    http://backrub.stanford.edu/
+robot-owner-email:  page@leland.stanford.edu
+robot-status:
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *.stanford.edu
+robot-from:         yes
+robot-useragent:    BackRub/*.*
+robot-language:     Java.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Wed Feb 21 02:57:42 1996.
+modified-by:
+
+robot-id: bigbrother
+robot-name: Big Brother
+robot-cover-url: http://pauillac.inria.fr/~fpottier/mac-soft.html.en
+robot-details-url:
+robot-owner-name: Francois Pottier
+robot-owner-url: http://pauillac.inria.fr/~fpottier/
+robot-owner-email: Francois.Pottier@inria.fr
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: mac
+robot-availability: binary
+robot-exclusion: no
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: *
+robot-from: not as of 1.0
+robot-useragent: Big Brother
+robot-language: c++
+robot-description: Macintosh-hosted link validation tool.
+robot-history:
+robot-environment: shareware
+modified-date: Thu Sep 19 18:01:46 MET DST 1996
+modified-by: Francois Pottier
+
+robot-id: bjaaland
+robot-name: Bjaaland
+robot-cover-url: http://www.textuality.com
+robot-details-url: http://www.textuality.com
+robot-owner-name: Tim Bray
+robot-owner-url: http://www.textuality.com
+robot-owner-email: tbray@textuality.com
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Bjaaland
+robot-noindex: no
+robot-host: barry.bitmovers.net
+robot-from: no
+robot-useragent: Bjaaland/0.5
+robot-language: perl5
+robot-description: Crawls sites listed in the ODP (see http://dmoz.org)
+robot-history: None, yet
+robot-environment: service
+modified-date: Monday, 19 July 1999, 13:46:00 PDT
+modified-by: tbray@textuality.com
+
+robot-id:           blackwidow
+robot-name:         BlackWidow
+robot-cover-url:    http://140.190.65.12/~khooghee/index.html
+robot-details-url:
+robot-owner-name:   Kevin Hoogheem
+robot-owner-url:
+robot-owner-email:  khooghee@marys.smumn.edu
+robot-status:
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         140.190.65.*
+robot-from:         yes
+robot-useragent:    BlackWidow
+robot-language:     C, C++.
+robot-description:  Started as a research project and now is used to find links
+       for a random link generator.  Also is used to research the
+       growth of specific sites.
+robot-history:
+robot-environment:
+modified-date:      Fri Feb  9 00:11:22 1996.
+modified-by:
+
+robot-id: blindekuh
+robot-name: Die Blinde Kuh
+robot-cover-url: http://www.blinde-kuh.de/
+robot-details-url: http://www.blinde-kuh.de/robot.html (german language)
+robot-owner-name: Stefan R. Mueller
+robot-owner-url: http://www.rrz.uni-hamburg.de/philsem/stefan_mueller/
+robot-owner-email:maschinist@blinde-kuh.de
+robot-status: development
+robot-purpose: indexing
+robot-type: browser
+robot-platform: unix
+robot-availability: none
+robot-exclusion: no
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: minerva.sozialwiss.uni-hamburg.de
+robot-from: yes
+robot-useragent: Die Blinde Kuh
+robot-language: perl5
+robot-description: The robot is use for indixing and proofing the
+ registered urls in the german language search-engine for kids.
+ Its a none-comercial one-woman-project of Birgit Bachmann
+ living in Hamburg, Germany.
+robot-history: The robot was developed by Stefan R. Mueller
+ to help by the manual proof of registered Links.
+robot-environment: hobby
+modified-date: Mon Jul 22 1998
+modified-by: Stefan R. Mueller
+
+robot-id:Bloodhound
+robot-name:Bloodhound
+robot-cover-url:http://web.ukonline.co.uk/genius/bloodhound.htm
+robot-details-url:http://web.ukonline.co.uk/genius/bloodhound.htm
+robot-owner-name:Dean Smart
+robot-owner-url:http://web.ukonline.co.uk/genius/bloodhound.htm
+robot-owner-email:genius@ukonline.co.uk
+robot-status:active
+robot-purpose:Web Site Download
+robot-type:standalone
+robot-platform:Windows95, WindowsNT, Windows98, Windows2000
+robot-availability:Executible
+robot-exclusion:No
+robot-exclusion-useragent:Ukonline
+robot-noindex:No
+robot-host:*
+robot-from:No
+robot-useragent:None
+robot-language:Perl5
+robot-description:Bloodhound will download an whole web site depending on the
+ number of links to follow specified by the user.
+robot-history:First version was released on the 1 july 2000
+robot-environment:Commercial
+modified-date:1 july 2000
+modified-by:Dean Smart
+
+robot-id: brightnet
+robot-name: bright.net caching robot
+robot-cover-url:
+robot-details-url:
+robot-owner-name:
+robot-owner-url:
+robot-owner-email:
+robot-status: active 
+robot-purpose: caching 
+robot-type:
+robot-platform: 
+robot-availability: none
+robot-exclusion: no
+robot-noindex:
+robot-host: 209.143.1.46
+robot-from: no
+robot-useragent: Mozilla/3.01 (compatible;)
+robot-language:
+robot-description:
+robot-history:
+robot-environment:
+modified-date: Fri Nov 13 14:08:01 EST 1998
+modified-by: brian d foy <comdog@computerdog.com>
+
+robot-id: bspider
+robot-name: BSpider
+robot-cover-url: not yet
+robot-details-url: not yet
+robot-owner-name: Yo Okumura
+robot-owner-url: not yet
+robot-owner-email: okumura@rsl.crl.fujixerox.co.jp
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: bspider
+robot-noindex: yes
+robot-host: 210.159.73.34, 210.159.73.35
+robot-from: yes
+robot-useragent: BSpider/1.0 libwww-perl/0.40
+robot-language: perl
+robot-description: BSpider is crawling inside of Japanese domain for indexing.
+robot-history: Starts Apr 1997 in a research project at Fuji Xerox Corp.
+ Research Lab.
+robot-environment: research
+modified-date: Mon, 21 Apr 1997 18:00:00 JST
+modified-by: Yo Okumura
+
+robot-id:           cactvschemistryspider
+robot-name:         CACTVS Chemistry Spider
+robot-cover-url:    http://schiele.organik.uni-erlangen.de/cactvs/spider.html
+robot-details-url:
+robot-owner-name:   W. D. Ihlenfeldt
+robot-owner-url:    http://schiele.organik.uni-erlangen.de/cactvs/
+robot-owner-email:  wdi@eros.ccc.uni-erlangen.de
+robot-status:
+robot-purpose:      indexing.
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         utamaro.organik.uni-erlangen.de
+robot-from:         no
+robot-useragent:    CACTVS Chemistry Spider
+robot-language:     TCL, C
+robot-description:  Locates chemical structures in Chemical MIME formats on WWW
+       and FTP servers and downloads them into database searchable
+       with structure queries (substructure, fullstructure,
+       formula, properties etc.)
+robot-history:
+robot-environment:
+modified-date:      Sat Mar 30 00:55:40 1996.
+modified-by:
+
+robot-id: calif
+robot-name: Calif
+robot-details-url: http://www.tnps.dp.ua/calif/details.html
+robot-cover-url: http://www.tnps.dp.ua/calif/
+robot-owner-name: Alexander Kosarev
+robot-owner-url: http://www.tnps.dp.ua/~dark/
+robot-owner-email: kosarev@tnps.net
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: calif
+robot-noindex: yes
+robot-host: cobra.tnps.dp.ua
+robot-from: yes
+robot-useragent: Calif/0.6 (kosarev@tnps.net; http://www.tnps.dp.ua)
+robot-language: c++
+robot-description: Used to build searchable index
+robot-history: In development stage
+robot-environment: research
+modified-date: Sun, 6 Jun 1999 13:25:33 GMT
+
+robot-id: cassandra
+robot-name: Cassandra
+robot-cover-url: http://post.mipt.rssi.ru/~billy/search/
+robot-details-url: http://post.mipt.rssi.ru/~billy/search/
+robot-owner-name: Mr. Oleg Bilibin
+robot-owner-url:        http://post.mipt.rssi.ru/~billy/
+robot-owner-email: billy168@aha.ru
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: crossplatform
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: www.aha.ru
+robot-from: no
+robot-useragent:
+robot-language: java
+robot-description: Cassandra search robot is used to create and maintain indexed database for widespread Information Retrieval System
+robot-history: Master of Science degree project at Moscow Institute of Physics and Technology
+robot-environment: research
+modified-date: Wed, 3 Jun 1998 12:00:00 GMT
+
+robot-id: cgireader
+robot-name: Digimarc Marcspider/CGI
+robot-cover-url: http://www.digimarc.com/prod_fam.html
+robot-details-url: http://www.digimarc.com/prod_fam.html
+robot-owner-name: Digimarc Corporation
+robot-owner-url: http://www.digimarc.com
+robot-owner-email: wmreader@digimarc.com
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host: 206.102.3.*
+robot-from:
+robot-useragent: Digimarc CGIReader/1.0
+robot-language: c++
+robot-description: Similar to Digimarc Marcspider, Marcspider/CGI examines
+    image files for watermarks but more focused on CGI Urls.
+    In order to not waste internet bandwidth with yet another crawler,
+    we have contracted with one of the major crawlers/seach engines
+    to provide us with a list of specific CGI URLs of interest to us.
+    If an URL is to a page of interest (via CGI), then we access the
+    page to get the image URLs from it, but we do not crawl to
+    any other pages.
+robot-history: First operation in December 1997
+robot-environment: service
+modified-date: Fri, 5 Dec 1997 12:00:00 GMT
+modified-by: Dan Ramos
+
+robot-id:           checkbot
+robot-name:         Checkbot
+robot-cover-url:    http://www.xs4all.nl/~graaff/checkbot/
+robot-details-url:
+robot-owner-name:   Hans de Graaff
+robot-owner-url:    http://www.xs4all.nl/~graaff/checkbot/
+robot-owner-email:  graaff@xs4all.nl
+robot-status:       active
+robot-purpose:      maintenance
+robot-type:         standalone
+robot-platform:     unix,WindowsNT
+robot-availability: source
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         no
+robot-useragent:    Checkbot/x.xx LWP/5.x
+robot-language:     perl 5
+robot-description:  Checkbot checks links in a
+       given set of pages on one or more servers. It reports links
+       which returned an error code
+robot-history:      
+robot-environment:  hobby
+modified-date:      Tue Jun 25 07:44:00 1996
+modified-by:        Hans de Graaff
+
+robot-id:           churl
+robot-name:         churl
+robot-cover-url:    http://www-personal.engin.umich.edu/~yunke/scripts/churl/
+robot-details-url:
+robot-owner-name:   Justin Yunke
+robot-owner-url:    http://www-personal.engin.umich.edu/~yunke/
+robot-owner-email:  yunke@umich.edu
+robot-status:       
+robot-purpose:      maintenance
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  A URL checking robot, which stays within one step of the
+       local server
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: cmc
+robot-name: CMC/0.01
+robot-details-url: http://www2.next.ne.jp/cgi-bin/music/help.cgi?phase=robot
+robot-cover-url: http://www2.next.ne.jp/music/
+robot-owner-name: Shinobu Kubota.
+robot-owner-url: http://www2.next.ne.jp/cgi-bin/music/help.cgi?phase=profile
+robot-owner-email: shinobu@po.next.ne.jp
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: CMC/0.01
+robot-noindex: no
+robot-host: haruna.next.ne.jp, 203.183.218.4
+robot-from: yes
+robot-useragent: CMC/0.01
+robot-language: perl5
+robot-description: This CMC/0.01 robot collects the information
+                   of the page that was registered to the music
+                   specialty searching service.
+robot-history: This CMC/0.01 robot was made for the computer
+               music center on November 4, 1997.
+robot-environment: hobby
+modified-date: Sat, 23 May 1998 17:22:00 GMT
+
+robot-id:Collective
+robot-name:Collective
+robot-cover-url:http://web.ukonline.co.uk/genius/collective.htm
+robot-details-url:http://web.ukonline.co.uk/genius/collective.htm
+robot-owner-name:Dean Smart
+robot-owner-url:http://web.ukonline.co.uk/genius/collective.htm
+robot-owner-email:genius@ukonline.co.uk
+robot-status:development
+robot-purpose:Collective is a highly configurable program designed to interrogate
+ online search engines and online databases, it will ignore web pages
+ that lie about there content, and dead url's, it can be super strict, it searches each web page
+ it finds for your search terms to ensure those terms are present, any positive urls are added to
+ a html file for your to view at any time even before the program has finished.
+ Collective can wonder the web for days if required.
+robot-type:standalone
+robot-platform:Windows95, WindowsNT, Windows98, Windows2000
+robot-availability:Executible
+robot-exclusion:No
+robot-exclusion-useragent:
+robot-noindex:No
+robot-host:*
+robot-from:No
+robot-useragent:LWP
+robot-language:Perl5 (With Visual Basic front-end)
+robot-description:Collective is the most cleverest Internet search engine,
+ With all found url?s guaranteed to have your search terms.
+robot-history:Develpment started on August, 03, 2000
+robot-environment:Commercial
+modified-date:August, 03, 2000
+modified-by:Dean Smart
+
+robot-id: combine
+robot-name: Combine System
+robot-cover-url: http://www.ub2.lu.se/~tsao/combine.ps
+robot-details-url: http://www.ub2.lu.se/~tsao/combine.ps
+robot-owner-name: Yong Cao
+robot-owner-url: http://www.ub2.lu.se/
+robot-owner-email: tsao@munin.ub2.lu.se
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: combine
+robot-noindex: no
+robot-host: *.ub2.lu.se
+robot-from: yes
+robot-useragent: combine/0.0
+robot-language: c, perl5
+robot-description: An open, distributed, and efficient harvester.
+robot-history: A complete re-design of the NWI robot (w3index) for DESIRE project. 
+robot-environment: research
+modified-date: Tue, 04 Mar 1997 16:11:40 GMT
+modified-by: Yong Cao
+
+robot-id: conceptbot
+robot-name: Conceptbot
+robot-cover-url: http://www.aptltd.com/~sifry/conceptbot/tech.html
+robot-details-url: http://www.aptltd.com/~sifry/conceptbot
+robot-owner-name: David L. Sifry
+robot-owner-url: http://www.aptltd.com/~sifry
+robot-owner-email: david@sifry.com
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: conceptbot
+robot-noindex: yes
+robot-host: router.sifry.com
+robot-from: yes
+robot-useragent: conceptbot/0.3
+robot-language: perl5
+robot-description:The Conceptbot spider is used to research
+ concept-based search indexing techniques.  It uses a breadth first seach
+ to spread out the number of hits on a single site over time.  The spider
+ runs at irregular intervals and is still under construction.
+robot-history: This spider began as a research project at Sifry
+ Consulting in April 1996.
+robot-environment: research
+modified-date: Mon, 9 Sep 1996 15:31:07 GMT
+modified-by: David L. Sifry <david@sifry.com>
+
+robot-id:           core
+robot-name:         Web Core / Roots
+robot-cover-url:    http://www.di.uminho.pt/wc
+robot-details-url:
+robot-owner-name:   Jorge Portugal Andrade
+robot-owner-url:    http://www.di.uminho.pt/~cbm
+robot-owner-email:  wc@di.uminho.pt
+robot-status:
+robot-purpose:      indexing, maintenance
+robot-type:
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         shiva.di.uminho.pt, from www.di.uminho.pt
+robot-from:         no
+robot-useragent:    root/0.1
+robot-language:     perl
+robot-description:  Parallel robot developed in Minho Univeristy in Portugal to
+       catalog relations among URLs and to support a special
+       navigation aid.
+robot-history:      First versions since October 1995.
+robot-environment:
+modified-date:      Wed Jan 10 23:19:08 1996.
+modified-by:
+
+robot-id:           cshkust
+robot-name:         CS-HKUST WISE: WWW Index and Search Engine
+robot-cover-url:    http://www.cs.ust.hk/IndexServer/
+robot-details-url:
+robot-owner-name:   Budi Yuwono
+robot-owner-url:    http://www.cis.ohio-state.edu/~yuwono-b/
+robot-owner-email:  yuwono-b@cs.ust.hk
+robot-status:       
+robot-purpose:      
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         dbx.cs.ust.hk
+robot-from:         yes
+robot-useragent:    CS-HKUST-IndexServer/1.0
+robot-language:     c
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       and validate HTML. Part of an on-going research project on
+       Internet Resource Discovery at Department of Computer
+       Science, Hong Kong University of Science and Technology
+       (CS-HKUST)
+robot-history:      
+robot-environment:
+modified-date:      Tue Jun 20 02:39:16 1995
+modified-by:
+
+robot-id: cusco
+robot-name: Cusco
+robot-cover-url: http://www.cusco.pt/
+robot-details-url: http://www.cusco.pt/
+robot-owner-name: Filipe Costa Clerigo
+robot-owner-url: http://www.viatecla.pt/
+robot-owner-email: clerigo@viatecla.pt
+robot-status: active
+robot-purpose: indexing
+robot-type: standlone
+robot-platform: any
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: cusco
+robot-noindex: yes
+robot-host: *.cusco.pt, *.viatecla.pt
+robot-from: yes
+robot-useragent: Cusco/3.2
+robot-language: Java
+robot-description: The Cusco robot is part of the CUCE indexing sistem. It
+ gathers information from several sources: HTTP, Databases or filesystem. At
+ this moment, it's universe is the .pt domain and the information it gathers
+ is available at the Portuguese search engine Cusco http://www.cusco.pt/.
+robot-history: The Cusco search engine started in the company ViaTecla as a
+ project to demonstrate our development capabilities and to fill the need of
+ a portuguese-specific search engine. Now, we are developping new
+ functionalities that cannot be found in any other on-line search engines.
+robot-environment:service, research
+modified-date: Mon, 21 Jun 1999 14:00:00 GMT
+modified-by: Filipe Costa Clerigo
+
+robot-id: cyberspyder
+robot-name: CyberSpyder Link Test
+robot-cover-url: http://www.cyberspyder.com/cslnkts1.html
+robot-details-url: http://www.cyberspyder.com/cslnkts1.html
+robot-owner-name: Tom Aman
+robot-owner-url: http://www.cyberspyder.com/
+robot-owner-email: amant@cyberspyder.com
+robot-status: active
+robot-purpose: link validation, some html validation
+robot-type: standalone
+robot-platform: windows 3.1x, windows95, windowsNT
+robot-availability: binary
+robot-exclusion: user configurable
+robot-exclusion-useragent: cyberspyder
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: CyberSpyder/2.1
+robot-language: Microsoft Visual Basic 4.0
+robot-description: CyberSpyder Link Test is intended to be used as a site
+ management tool to validate that HTTP links on a page are functional and to
+ produce various analysis reports to assist in managing a site.
+robot-history: The original robot was created to fill a widely seen need
+ for a easy to use link checking program.
+robot-environment: commercial
+modified-date: Tue, 31 Mar 1998 01:02:00 GMT
+modified-by: Tom Aman
+
+robot-id:           deweb
+robot-name:         DeWeb(c) Katalog/Index
+robot-cover-url:    http://deweb.orbit.de/
+robot-details-url:
+robot-owner-name:   Marc Mielke
+robot-owner-url:    http://www.orbit.de/
+robot-owner-email:  dewebmaster@orbit.de
+robot-status:       
+robot-purpose:      indexing, mirroring, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         deweb.orbit.de
+robot-from:         yes
+robot-useragent:    Deweb/1.01
+robot-language:     perl 4
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       perform mirroring, and generate statistics. Uses combination
+       of Informix(tm) Database and WN 1.11 serversoftware for
+       indexing/ressource discovery, fulltext search, text
+       excerpts.
+robot-history:      
+robot-environment:
+modified-date:      Wed Jan 10 08:23:00 1996
+modified-by:
+
+robot-id: dienstspider
+robot-name: DienstSpider
+robot-cover-url: http://sappho.csi.forth.gr:22000/
+robot-details-url:
+robot-owner-name: Antonis Sidiropoulos 
+robot-owner-url: http://www.csi.forth.gr/~asidirop
+robot-owner-email: asidirop@csi.forth.gr
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone 
+robot-platform: unix
+robot-availability: none
+robot-exclusion:
+robot-exclusion-useragent:
+robot-noindex:
+robot-host: sappho.csi.forth.gr 
+robot-from:
+robot-useragent: dienstspider/1.0  
+robot-language: C
+robot-description: Indexing and searching the NCSTRL(Networked Computer Science Technical Report Library) and ERCIM Collection
+robot-history: The version 1.0 was the developer's master thesis project
+robot-environment: research
+modified-date: Fri, 4 Dec 1998 0:0:0 GMT
+modified-by: asidirop@csi.forth.gr
+
+robot-id: diibot
+robot-name: Digital Integrity Robot
+robot-cover-url: http://www.digital-integrity.com/robotinfo.html
+robot-details-url: http://www.digital-integrity.com/robotinfo.html
+robot-owner-name: Digital Integrity, Inc.
+robot-owner-url: 
+robot-owner-email: robot@digital-integrity.com
+robot-status: Production
+robot-purpose: WWW Indexing
+robot-type:
+robot-platform: unix
+robot-availability: none
+robot-exclusion: Conforms to robots.txt convention
+robot-exclusion-useragent: DIIbot
+robot-noindex: Yes
+robot-host: digital-integrity.com
+robot-from:
+robot-useragent: DIIbot
+robot-language: Java/C
+robot-description:
+robot-history: 
+robot-environment:
+modified-date:
+modified-by:
+
+robot-id: directhit
+robot-name: Direct Hit Grabber
+robot-cover-url: www.directhit.com
+robot-details-url: http://www.directhit.com/about/company/spider.html
+robot-status: active
+robot-description: Direct Hit Grabber indexes documents and
+ collects Web statistics for the Direct Hit Search Engine (available at
+ www.directhit.com and our partners' sites)
+robot-purpose: Indexing and statistics
+robot-type: standalone
+robot-platform: unix
+robot-language: C++
+robot-owner-name: Direct Hit Technologies, Inc.
+robot-owner-url: www.directhit.com
+robot-owner-email: DirectHitGrabber@directhit.com
+robot-exclusion: yes
+robot-exclusion-useragent: grabber
+robot-noindex: yes
+robot-host: *.directhit.com
+robot-from: yes
+robot-useragent: grabber
+robot-environment: service
+modified-by: grabber@directhit.com
+
+robot-id: dnabot
+robot-name: DNAbot
+robot-cover-url: http://xx.dnainc.co.jp/dnabot/
+robot-details-url: http://xx.dnainc.co.jp/dnabot/
+robot-owner-name: Tom Tanaka
+robot-owner-url: http://xx.dnainc.co.jp
+robot-owner-email: tomatell@xx.dnainc.co.jp
+robot-status: development       
+robot-purpose: indexing 
+robot-type: standalone          
+robot-platform: unix, windows, windows95, windowsNT, mac
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: xx.dnainc.co.jp
+robot-from: yes 
+robot-useragent: DNAbot/1.0
+robot-language: java 
+robot-description: A search robot in 100 java, with its own built-in
+ database engine and web server . Currently in Japanese.
+robot-history: Developed by DNA, Inc.(Niigata City, Japan) in 1998.
+robot-environment: commercial
+modified-date: Mon, 4 Jan 1999 14:30:00 GMT
+modified-by: Tom Tanaka
+
+robot-id: download_express
+robot-name: DownLoad Express
+robot-cover-url: http://www.jacksonville.net/~dlxpress
+robot-details-url: http://www.jacksonville.net/~dlxpress
+robot-owner-name: DownLoad Express Inc
+robot-owner-url: http://www.jacksonville.net/~dlxpress
+robot-owner-email: dlxpress@mediaone.net
+robot-status: active
+robot-purpose: graphic download
+robot-type: standalone
+robot-platform: win95/98/NT
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: downloadexpress
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent:
+robot-language: visual basic
+robot-description: automatically downloads graphics from the web
+robot-history:
+robot-environment: commerical
+modified-date: Wed, 05 May 1998
+modified-by: DownLoad Express Inc
+
+robot-id: dragonbot
+robot-name: DragonBot
+robot-cover-url: http://www.paczone.com/
+robot-details-url:
+robot-owner-name: Paul Law
+robot-owner-url:
+robot-owner-email: admin@paczone.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: DragonBot
+robot-noindex: no
+robot-host: *.paczone.com
+robot-from: no
+robot-useragent: DragonBot/1.0 libwww/5.0
+robot-language: C++
+robot-description: Collects web pages related to East Asia
+robot-history:
+robot-environment: service
+modified-date: Mon, 11 Aug 1997 00:00:00 GMT
+modified-by:
+
+robot-id: dwcp
+robot-name: DWCP (Dridus' Web Cataloging Project)
+robot-cover-url: http://www.dridus.com/~rmm/dwcp.php3
+robot-details-url: http://www.dridus.com/~rmm/dwcp.php3
+robot-owner-name: Ross Mellgren (Dridus Norwind)
+robot-owner-url: http://www.dridus.com/~rmm
+robot-owner-email: rmm@dridus.com
+robot-status: development
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: java
+robot-availability: source, binary, data
+robot-exclusion: yes
+robot-exclusion-useragent: dwcp
+robot-noindex: no
+robot-host: *.dridus.com
+robot-from: dridus@dridus.com
+robot-useragent: DWCP/2.0
+robot-language: java
+robot-description: The DWCP robot is used to gather information for
+ Dridus' Web Cataloging Project, which is intended to catalog domains and
+ urls (no content).
+robot-history: Developed from scratch by Dridus Norwind.
+robot-environment: hobby
+modified-date: Sat, 10 Jul 1999 00:05:40 GMT
+modified-by: Ross Mellgren
+
+robot-id: ebiness
+robot-name: EbiNess
+robot-cover-url: http://www.carisbrook.co.uk/ebiness/
+robot-details-url: http://www.carisbrook.co.uk/ebiness/tech/
+robot-owner-name: Mike Davis
+robot-owner-url: http://www.carisbrook.co.uk/mike/
+robot-owner-email: mdavis@kieser.net
+robot-status: development
+robot-purpose: statistics
+robot-type: standalone
+robot-platform: unix(Linux)
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: ebiness
+robot-noindex: no
+robot-host:
+robot-from: no
+robot-useragent: EbiNess/0.01a
+robot-language: c++
+robot-description: Used to build a url relationship database, to be 
+ viewed in 3D
+robot-history: Dreamed it up over some beers
+robot-environment: hobby
+modified-date: Mon, 29 May 2000 01:37:00 GMT
+modified-by: Mike Davis
+
+robot-id:           eit
+robot-name:         EIT Link Verifier Robot
+robot-cover-url:    http://wsk.eit.com/wsk/dist/doc/admin/webtest/verify_links.html
+robot-details-url:
+robot-owner-name:   Jim McGuire
+robot-owner-url:    http://www.eit.com/people/mcguire.html
+robot-owner-email:  mcguire@eit.COM
+robot-status:       
+robot-purpose:      maintenance
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         
+robot-useragent:    EIT-Link-Verifier-Robot/0.2
+robot-language:     
+robot-description:  Combination of an HTML form and a CGI script that verifies
+       links from a given starting point (with some controls to
+       prevent it going off-site or limitless)
+robot-history:      Announced on 12 July 1994
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           emacs
+robot-name:         Emacs-w3 Search Engine
+robot-cover-url:    http://www.cs.indiana.edu/elisp/w3/docs.html
+robot-details-url:
+robot-owner-name:   William M. Perry
+robot-owner-url:    http://www.cs.indiana.edu/hyplan/wmperry.html
+robot-owner-email:  wmperry@spry.com
+robot-status:       retired
+robot-purpose:      indexing
+robot-type:         browser
+robot-platform:     
+robot-availability: 
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         yes
+robot-useragent:    Emacs-w3/v[0-9\.]+
+robot-language:     lisp
+robot-description:  Its purpose is to generate a Resource Discovery database
+       This code has not been looked at in a while, but will be
+       spruced up for the Emacs-w3 2.2.0 release sometime this
+       month. It will honor the /robots.txt file at that
+       time.
+robot-history:      
+robot-environment:
+modified-date:      Fri May 5 16:09:18 1995
+modified-by:
+
+robot-id:           emcspider
+robot-name:         ananzi
+robot-cover-url:    http://www.empirical.com/
+robot-details-url:
+robot-owner-name:   Hunter Payne
+robot-owner-url:    http://www.psc.edu/~hpayne/
+robot-owner-email:  hpayne@u-media.com
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         bilbo.internal.empirical.com
+robot-from:         yes
+robot-useragent:    EMC Spider
+robot-language:     java This spider is still in the development stages but, it
+       will be hitting sites while I finish debugging it.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Wed May 29 14:47:01 1996.
+modified-by:
+
+robot-id: esther
+robot-name: Esther
+robot-details-url: http://search.falconsoft.com/
+robot-cover-url: http://search.falconsoft.com/
+robot-owner-name: Tim Gustafson
+robot-owner-url: http://www.falconsoft.com/
+robot-owner-email:      tim@falconsoft.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix (FreeBSD 2.2.8)
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: esther
+robot-noindex: no
+robot-host: *.falconsoft.com
+robot-from: yes
+robot-useragent: esther
+robot-language: perl5
+robot-description: This crawler is used to build the search database at
+ http://search.falconsoft.com/
+robot-history: Developed by FalconSoft.
+robot-environment: service
+modified-date: Tue, 22 Dec 1998 00:22:00 PST
+
+robot-id: evliyacelebi
+robot-name: Evliya Celebi
+robot-cover-url: http://ilker.ulak.net.tr/EvliyaCelebi
+robot-details-url: http://ilker.ulak.net.tr/EvliyaCelebi
+robot-owner-name: Ilker TEMIR
+robot-owner-url: http://ilker.ulak.net.tr
+robot-owner-email: ilker@ulak.net.tr
+robot-status: development
+robot-purpose: indexing turkish content
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: N/A
+robot-noindex: no
+robot-nofollow: no
+robot-host: 193.140.83.*
+robot-from: ilker@ulak.net.tr
+robot-useragent: Evliya Celebi v0.151 - http://ilker.ulak.net.tr
+robot-language: perl5
+robot-history:
+robot-description: crawles pages under ".tr" domain or having turkish character
+ encoding (iso-8859-9 or windows-1254)
+robot-environment: hobby
+modified-date: Fri Mar 31 15:03:12 GMT 2000
+
+robot-id:           nzexplorer
+robot-name:         nzexplorer
+robot-cover-url:    http://nzexplorer.co.nz/
+robot-details-url:
+robot-owner-name:   Paul Bourke
+robot-owner-url:    http://bourke.gen.nz/paul.html
+robot-owner-email:  paul@bourke.gen.nz
+robot-status:       active
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:     UNIX
+robot-availability: source (commercial)
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         bitz.co.nz
+robot-from:         no
+robot-useragent:    explorersearch
+robot-language:     c++
+robot-history:      Started in 1995 to provide a comprehensive index
+                    to WWW pages within New Zealand. Now also used in
+                    Malaysia and other countries.
+robot-environment:  service
+modified-date:      Tues, 25 Jun 1996
+modified-by:        Paul Bourke
+
+robot-id:fdse
+robot-name:Fluid Dynamics Search Engine robot
+robot-cover-url:http://www.xav.com/scripts/search/
+robot-details-url:http://www.xav.com/scripts/search/
+robot-owner-name:Zoltan Milosevic
+robot-owner-url:http://www.xav.com/
+robot-owner-email:zoltanm@nickname.net
+robot-status:active
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:unix;windows
+robot-availability:source;data
+robot-exclusion:yes
+robot-exclusion-useragent:FDSE
+robot-noindex:yes
+robot-host:yes
+robot-from:*
+robot-useragent:Mozilla/4.0 (compatible: FDSE robot)
+robot-language:perl5
+robot-description:Crawls remote sites as part of a shareware search engine
+ program
+robot-history:Developed in late 1998 over three pots of coffee
+robot-environment:commercial
+modified-date:Fri, 21 Jan 2000 10:15:49 GMT
+modified-by:Zoltan Milosevic
+
+robot-id:      felix
+robot-name:    Felix IDE
+robot-cover-url:       http://www.pentone.com
+robot-details-url:     http://www.pentone.com
+robot-owner-name:      The Pentone Group, Inc.
+robot-owner-url:       http://www.pentone.com
+robot-owner-email:     felix@pentone.com
+robot-status:  active
+robot-purpose: indexing, statistics
+robot-type:    standalone
+robot-platform:        windows95, windowsNT
+robot-availability:    binary
+robot-exclusion:       yes
+robot-exclusion-useragent:     FELIX IDE
+robot-noindex: yes
+robot-host:    *
+robot-from:    yes
+robot-useragent:       FelixIDE/1.0
+robot-language:        visual basic
+robot-description:     Felix IDE is a retail personal search spider sold by
+  The Pentone Group, Inc.
+  It supports the proprietary exclusion "Frequency: ??????????" in the
+  robots.txt file. Question marks represent an integer
+  indicating number of milliseconds to delay between document requests. This
+  is called VDRF(tm) or Variable Document Retrieval Frequency. Note that
+  users can re-define the useragent name.
+robot-history: This robot began as an in-house tool for the lucrative Felix
+  IDS (Information Discovery Service) and has gone retail.
+robot-environment:     service, commercial, research
+modified-date: Fri, 11 Apr 1997 19:08:02 GMT
+modified-by:   Kerry B. Rogers
+
+robot-id:           ferret
+robot-name:         Wild Ferret Web Hopper #1, #2, #3
+robot-cover-url:    http://www.greenearth.com/
+robot-details-url:
+robot-owner-name:   Greg Boswell
+robot-owner-url:    http://www.greenearth.com/
+robot-owner-email:  ghbos@postoffice.worldnet.att.net
+robot-status:
+robot-purpose:      indexing maintenance statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    Hazel's Ferret Web hopper, 
+robot-language:     C++, Visual Basic, Java
+robot-description:  The wild ferret web hopper's are designed as specific agents
+       to retrieve data from all available sources on the internet.
+       They work in an onion format hopping from spot to spot one
+       level at a time over the internet. The information is
+       gathered into different relational databases, known as
+       "Hazel's Horde". The information is publicly available and
+       will be free for the browsing at www.greenearth.com.
+       Effective date of the data posting is to be
+       announced.
+robot-history:
+robot-environment:
+modified-date:      Mon Feb 19 00:28:37 1996.
+modified-by:
+
+robot-id: fetchrover
+robot-name: FetchRover
+robot-cover-url: http://www.engsoftware.com/fetch.htm
+robot-details-url: http://www.engsoftware.com/spiders/
+robot-owner-name: Dr. Kenneth R. Wadland
+robot-owner-url: http://www.engsoftware.com/
+robot-owner-email: ken@engsoftware.com
+robot-status: active
+robot-purpose: maintenance, statistics
+robot-type: standalone
+robot-platform: Windows/NT, Windows/95, Solaris SPARC
+robot-availability: binary, source
+robot-exclusion: yes
+robot-exclusion-useragent: ESI
+robot-noindex: N/A
+robot-host: *
+robot-from: yes
+robot-useragent: ESIRover v1.0
+robot-language: C++
+robot-description: FetchRover fetches Web Pages.  
+   It is an automated page-fetching engine. FetchRover can be
+   used stand-alone or as the front-end to a full-featured Spider.
+   Its database can use any ODBC compliant database server, including
+   Microsoft Access, Oracle, Sybase SQL Server, FoxPro, etc.
+robot-history:  Used as the front-end to SmartSpider (another Spider 
+   product sold by Engineeering Software, Inc.)
+robot-environment: commercial, service
+modified-date: Thu, 03 Apr 1997 21:49:50 EST
+modified-by: Ken Wadland
+
+robot-id: fido
+robot-name: fido
+robot-cover-url: http://www.planetsearch.com/
+robot-details-url: http://www.planetsearch.com/info/fido.html
+robot-owner-name: Steve DeJarnett
+robot-owner-url: http://www.planetsearch.com/staff/steved.html
+robot-owner-email: fido@planetsearch.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: fido
+robot-noindex: no
+robot-host: fido.planetsearch.com, *.planetsearch.com, 206.64.113.*
+robot-from: yes
+robot-useragent: fido/0.9 Harvest/1.4.pl2
+robot-language: c, perl5
+robot-description: fido is used to gather documents for the search engine 
+                   provided in the PlanetSearch service, which is operated by
+                   the Philips Multimedia Center.  The robots runs on an
+                   ongoing basis.
+robot-history: fido was originally based on the Harvest Gatherer, but has since
+               evolved into a new creature.  It still uses some support code
+               from Harvest.
+robot-environment: service
+modified-date: Sat, 2 Nov 1996 00:08:18 GMT
+modified-by: Steve DeJarnett
+
+robot-id:           finnish
+robot-name:         Hämähäkki
+robot-cover-url:    http://www.fi/search.html
+robot-details-url:  http://www.fi/www/spider.html
+robot-owner-name:   Timo Metsälä
+robot-owner-url:    http://www.fi/~timo/
+robot-owner-email:  Timo.Metsala@www.fi
+robot-status:       active
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     UNIX
+robot-availability: no
+robot-exclusion:    yes
+robot-exclusion-useragent:  Hämähäkki
+robot-noindex:      no
+robot-host:         *.www.fi
+robot-from:         yes
+robot-useragent:    Hämähäkki/0.2
+robot-language:     C
+robot-description:  Its purpose is to generate a Resource Discovery
+       database from the Finnish (top-level domain .fi) www servers.
+       The resulting database is used by the search engine 
+       at http://www.fi/search.html.
+robot-history:      (The name Hämähäkki is just Finnish for spider.)
+robot-environment:
+modified-date:      1996-06-25   
+modified-by:        Jaakko.Hyvatti@www.fi
+
+robot-id: fireball
+robot-name: KIT-Fireball
+robot-cover-url: http://www.fireball.de
+robot-details-url: http://www.fireball.de/technik.html (in German)
+robot-owner-name: Gruner + Jahr Electronic Media Service GmbH
+robot-owner-url: http://www.ems.guj.de
+robot-owner-email:info@fireball.de
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: KIT-Fireball
+robot-noindex: yes
+robot-host: *.fireball.de
+robot-from: yes
+robot-useragent: KIT-Fireball/2.0 libwww/5.0a
+robot-language: c
+robot-description: The Fireball robots gather web documents in German
+ language for the database of the Fireball search service.
+robot-history: The robot was developed by Benhui Chen in a research
+ project at the Technical University of Berlin in 1996 and was
+ re-implemented by its developer in 1997 for the present owner.
+robot-environment: service 
+modified-date: Mon Feb 23 11:26:08 1998
+modified-by: Detlev Kalb
+
+robot-id:           fish
+robot-name:         Fish search
+robot-cover-url:    http://www.win.tue.nl/bin/fish-search
+robot-details-url:
+robot-owner-name:   Paul De Bra
+robot-owner-url:    http://www.win.tue.nl/win/cs/is/debra/
+robot-owner-email:  debra@win.tue.nl
+robot-status:       
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     
+robot-availability: binary
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         www.win.tue.nl
+robot-from:         no
+robot-useragent:    Fish-Search-Robot
+robot-language:     c
+robot-description:  Its purpose is to discover resources on the fly a version
+       exists that is integrated into the T&uuml;bingen Mosaic
+       2.4.2 browser (also written in C)
+robot-history:      Originated as an addition to Mosaic for X
+robot-environment:
+modified-date:      Mon May 8 09:31:19 1995
+modified-by:
+
+robot-id: fouineur
+robot-name: Fouineur
+robot-cover-url: http://fouineur.9bit.qc.ca/
+robot-details-url: http://fouineur.9bit.qc.ca/informations.html
+robot-owner-name: Joel Vandal
+robot-owner-url: http://www.9bit.qc.ca/~jvandal/
+robot-owner-email: jvandal@9bit.qc.ca
+robot-status: development
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: unix, windows 
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: fouineur
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: Mozilla/2.0 (compatible fouineur v2.0; fouineur.9bit.qc.ca)
+robot-language: perl5
+robot-description: This robot build automaticaly a database that is used
+                   by our own search engine. This robot auto-detect the
+                   language (french, english & spanish) used in the HTML
+                   page. Each database record generated by this robot
+                   include: date, url, title, total words, title, size
+                   and de-htmlized text. Also support server-side and
+                   client-side IMAGEMAP.
+robot-history: No robots does all thing that we need for our usage.
+robot-environment: service
+modified-date: Thu, 9 Jan 1997 22:57:28 EST
+modified-by: jvandal@9bit.qc.ca
+
+robot-id:           francoroute
+robot-name:         Robot Francoroute
+robot-cover-url:
+robot-details-url:
+robot-owner-name:   Marc-Antoine Parent
+robot-owner-url:    http://www.crim.ca/~maparent
+robot-owner-email:  maparent@crim.ca
+robot-status:
+robot-purpose:      indexing, mirroring, statistics
+robot-type:         browser
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         zorro.crim.ca
+robot-from:         yes
+robot-useragent:    Robot du CRIM 1.0a
+robot-language:     perl5, sqlplus
+robot-description:  Part of the RISQ's Francoroute project for researching
+       francophone. Uses the Accept-Language tag and reduces demand
+       accordingly
+robot-history:
+robot-environment:
+modified-date:      Wed Jan 10 23:56:22 1996.
+modified-by:
+
+robot-id: freecrawl
+robot-name: Freecrawl
+robot-cover-url: http://euroseek.net/
+robot-owner-name: Jesper Ekhall
+robot-owner-email: ekhall@freeside.net
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Freecrawl
+robot-noindex: no
+robot-host: *.freeside.net
+robot-from: yes
+robot-useragent: Freecrawl
+robot-language: c
+robot-description: The Freecrawl robot is used to build a database for the
+  EuroSeek service.
+robot-environment: service
+
+robot-id:           funnelweb
+robot-name:         FunnelWeb
+robot-cover-url:    http://funnelweb.net.au
+robot-details-url:
+robot-owner-name:   David Eagles
+robot-owner-url:    http://www.pc.com.au
+robot-owner-email:  eaglesd@pc.com.au
+robot-status:       
+robot-purpose:      indexing, statisitics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         earth.planets.com.au
+robot-from:         yes
+robot-useragent:    FunnelWeb-1.0
+robot-language:     c and c++
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       and generate statistics. Localised South Pacific Discovery
+       and Search Engine, plus distributed operation under
+       development.
+robot-history:      
+robot-environment:
+modified-date:      Mon Nov 27 21:30:11 1995
+modified-by:
+
+robot-id: gazz
+robot-name: gazz
+robot-cover-url: http://gazz.nttrd.com/
+robot-details-url: http://gazz.nttrd.com/
+robot-owner-name: NTT Cyberspace Laboratories
+robot-owner-url: http://gazz.nttrd.com/
+robot-owner-email: gazz@nttrd.com
+robot-status: development
+robot-purpose: statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: gazz
+robot-noindex: yes
+robot-host: *.nttrd.com, *.infobee.ne.jp
+robot-from: yes
+robot-useragent: gazz/1.0
+robot-language: c
+robot-description: This robot is used for research purposes.
+robot-history: Its root is TITAN project in NTT.
+robot-environment: research
+modified-date: Wed, 09 Jun 1999 10:43:18 GMT
+modified-by: noto@isl.ntt.co.jp
+
+robot-id: gcreep
+robot-name: GCreep
+robot-cover-url: http://www.instrumentpolen.se/gcreep/index.html
+robot-details-url: http://www.instrumentpolen.se/gcreep/index.html
+robot-owner-name: Instrumentpolen AB
+robot-owner-url: http://www.instrumentpolen.se/ip-kontor/eng/index.html
+robot-owner-email: anders@instrumentpolen.se
+robot-status: development
+robot-purpose: indexing
+robot-type: browser+standalone
+robot-platform: linux+mysql
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: gcreep
+robot-noindex: yes
+robot-host: mbx.instrumentpolen.se
+robot-from: yes
+robot-useragent: gcreep/1.0
+robot-language: c
+robot-description: Indexing robot to learn SQL
+robot-history: Spare time project begun late '96, maybe early '97
+robot-environment: hobby
+modified-date: Fri, 23 Jan 1998 16:09:00 MET
+modified-by: Anders Hedstrom
+
+robot-id:           getbot
+robot-name:         GetBot
+robot-cover-url:    http://www.blacktop.com.zav/bots 
+robot-details-url:
+robot-owner-name:   Alex Zavatone
+robot-owner-url:    http://www.blacktop.com/zav
+robot-owner-email:  zav@macromedia.com
+robot-status:
+robot-purpose:      maintenance
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no.
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         no
+robot-useragent:    ???
+robot-language:     Shockwave/Director.
+robot-description:  GetBot's purpose is to index all the sites it can find that
+       contain Shockwave movies.  It is the first bot or spider
+       written in Shockwave.  The bot was originally written at
+       Macromedia on a hungover Sunday as a proof of concept. -
+       Alex Zavatone 3/29/96
+robot-history:
+robot-environment:
+modified-date:      Fri Mar 29 20:06:12 1996.
+modified-by:
+
+robot-id:           geturl
+robot-name:         GetURL
+robot-cover-url:    http://Snark.apana.org.au/James/GetURL/
+robot-details-url:
+robot-owner-name:   James Burton
+robot-owner-url:    http://Snark.apana.org.au/James/
+robot-owner-email:  James@Snark.apana.org.au
+robot-status:       
+robot-purpose:      maintenance, mirroring
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         no
+robot-useragent:    GetURL.rexx v1.05
+robot-language:     ARexx (Amiga REXX)
+robot-description:  Its purpose is to validate links, perform mirroring, and
+       copy document trees. Designed as a tool for retrieving web
+       pages in batch mode without the encumbrance of a browser.
+       Can be used to describe a set of pages to fetch, and to
+       maintain an archive or mirror. Is not run by a central site
+       and accessed by clients - is run by the end user or archive
+       maintainer
+robot-history:      
+robot-environment:
+modified-date:      Tue May 9 15:13:12 1995            
+modified-by:
+
+robot-id: golem
+robot-name: Golem
+robot-cover-url: http://www.quibble.com/golem/
+robot-details-url: http://www.quibble.com/golem/
+robot-owner-name: Geoff Duncan
+robot-owner-url: http://www.quibble.com/geoff/
+robot-owner-email: geoff@quibble.com
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: mac
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: golem
+robot-noindex: no
+robot-host: *.quibble.com
+robot-from: yes
+robot-useragent: Golem/1.1
+robot-language: HyperTalk/AppleScript/C++
+robot-description: Golem generates status reports on collections of URLs
+  supplied by clients. Designed to assist with editorial updates of
+  Web-related sites or products.
+robot-history: Personal project turned into a contract service for private
+  clients.
+robot-environment: service,research
+modified-date: Wed, 16 Apr 1997 20:50:00 GMT
+modified-by: Geoff Duncan
+
+robot-id: googlebot
+robot-name: Googlebot
+robot-cover-url: http://googlebot.com/ 
+robot-details-url: http://googlebot.com/
+robot-owner-name: Google Inc.
+robot-owner-url: http://google.com/
+robot-owner-email: googlebot@googlebot.com 
+robot-status: active
+robot-purpose: indexing statistics 
+robot-type: standalone 
+robot-platform:
+robot-availability:
+robot-exclusion: yes
+robot-exclusion-useragent: Googlebot
+robot-noindex: yes
+robot-host: *.googlebot.com
+robot-from: yes 
+robot-useragent: Googlebot/2.0 beta (googlebot(at)googlebot.com)
+robot-language: Python
+robot-description:
+robot-history: Used to be called backrub and run from stanford.edu
+robot-environment: service
+modified-date: Wed, 29 Sep 1999 18:36:25 -0700
+modified-by:  Amit Patel <amitp@google.com>
+
+robot-id: grapnel
+robot-name: Grapnel/0.01 Experiment
+robot-cover-url: varies
+robot-details-url: mailto:v93_kat@ce.kth.se
+robot-owner-name: Philip Kallerman
+robot-owner-url: v93_kat@ce.kth.se
+robot-owner-email: v93_kat@ce.kth.se
+robot-status: Experimental
+robot-purpose: Indexing
+robot-type:
+robot-platform: WinNT
+robot-availability: None, yet
+robot-exclusion: Yes
+robot-exclusion-useragent: No
+robot-noindex: No
+robot-host: varies
+robot-from: Varies
+robot-useragent:
+robot-language: Perl
+robot-description: Resource Discovery Experimentation
+robot-history: None, hoping to make some
+robot-environment:
+modified-date:
+modified-by: 7 Feb 1997
+
+robot-id:griffon
+robot-name:Griffon                                                               
+robot-cover-url:http://navi.ocn.ne.jp/                                           
+robot-details-url:http://navi.ocn.ne.jp/griffon/                                 
+robot-owner-name:NTT Communications Corporate Users Business Division            
+robot-owner-url:http://navi.ocn.ne.jp/                                           
+robot-owner-email:griffon@super.navi.ocn.ne.jp                                   
+robot-status:active                                                              
+robot-purpose:indexing                                                           
+robot-type:standalone                                                            
+robot-platform:unix                                                              
+robot-availability:none                                                          
+robot-exclusion:yes                                                              
+robot-exclusion-useragent:griffon                                                
+robot-noindex:yes                                                                
+robot-nofollow:yes                                                              
+robot-host:*.navi.ocn.ne.jp                                                      
+robot-from:yes                                                                   
+robot-useragent:griffon/1.0                                                      
+robot-language:c                                                                 
+robot-description:The Griffon robot is used to build database for the OCN navi   
+       search service operated by NTT Communications Corporation.
+       It mainly gathers pages written in Japanese.            
+robot-history:Its root is TITAN project in NTT.                                  
+robot-environment:service                                                        
+modified-date:Mon,25 Jan 2000 15:25:30 GMT                                       
+modified-by:toka@navi.ocn.ne.jp
+
+robot-id: gromit
+robot-name: Gromit
+robot-cover-url: http://www.austlii.edu.au/
+robot-details-url: http://www2.austlii.edu.au/~dan/gromit/
+robot-owner-name: Daniel Austin
+robot-owner-url: http://www2.austlii.edu.au/~dan/
+robot-owner-email: dan@austlii.edu.au
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Gromit
+robot-noindex: no
+robot-host: *.austlii.edu.au
+robot-from: yes
+robot-useragent: Gromit/1.0
+robot-language: perl5
+robot-description: Gromit is a Targetted Web Spider that indexes legal
+ sites contained in the AustLII legal links database.
+robot-history: This robot is based on the Perl5 LWP::RobotUA module.
+robot-environment: research
+modified-date: Wed, 11 Jun 1997 03:58:40 GMT
+modified-by: Daniel Austin
+
+robot-id: gulliver
+robot-name: Northern Light Gulliver
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Mike Mulligan
+robot-owner-url:
+robot-owner-email: crawler@northernlight.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: gulliver
+robot-noindex: yes
+robot-host: scooby.northernlight.com, taz.northernlight.com,
+  gulliver.northernlight.com
+robot-from: yes
+robot-useragent: Gulliver/1.1
+robot-language: c
+robot-description: Gulliver is a robot to be used to collect
+  web pages for indexing and subsequent searching of the index.
+robot-history: Oct 1996: development; Dec 1996-Jan 1997: crawl & debug;
+  Mar 1997: crawl again;
+robot-environment: service
+modified-date: Wed, 21 Apr 1999 16:00:00 GMT
+modified-by: Mike Mulligan
+
+robot-id: hambot
+robot-name: HamBot
+robot-cover-url: http://www.hamrad.com/search.html
+robot-details-url: http://www.hamrad.com/
+robot-owner-name: John Dykstra
+robot-owner-url:
+robot-owner-email: john@futureone.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix, Windows95
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: hambot
+robot-noindex: yes
+robot-host: *.hamrad.com
+robot-from:
+robot-useragent:
+robot-language: perl5, C++
+robot-description: Two HamBot robots are used (stand alone & browser based)
+ to aid in building the database for HamRad Search - The Search Engine for
+ Search Engines.  The robota are run intermittently and perform nearly
+ identical functions.
+robot-history: A non commercial (hobby?) project to aid in building and
+ maintaining the database for the the HamRad search engine.
+robot-environment: service
+modified-date: Fri, 17 Apr 1998 21:44:00 GMT
+modified-by: JD
+
+robot-id:           harvest
+robot-name:         Harvest
+robot-cover-url:    http://harvest.cs.colorado.edu
+robot-details-url:
+robot-owner-name:   
+robot-owner-url:    
+robot-owner-email:  
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         bruno.cs.colorado.edu
+robot-from:         yes
+robot-useragent:    yes
+robot-language:     
+robot-description:  Harvest's motivation is to index community- or topic-
+       specific collections, rather than to locate and index all
+       HTML objects that can be found.  Also, Harvest allows users
+       to control the enumeration several ways, including stop
+       lists and depth and count limits.  Therefore, Harvest
+       provides a much more controlled way of indexing the Web than
+       is typical of robots. Pauses 1 second between requests (by
+       default).
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: havindex
+robot-name: havIndex
+robot-cover-url: http://www.hav.com/
+robot-details-url: http://www.hav.com/
+robot-owner-name: hav.Software and Horace A. (Kicker) Vallas
+robot-owner-url: http://www.hav.com/
+robot-owner-email: havIndex@hav.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Java VM 1.1
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: havIndex
+robot-noindex: yes
+robot-host: *
+robot-from: no
+robot-useragent: havIndex/X.xx[bxx]
+robot-language: Java
+robot-description: havIndex allows individuals to build searchable word
+ index of (user specified) lists of URLs.  havIndex does not crawl -
+ rather it requires  one or more user supplied lists of URLs to be
+ indexed.  havIndex does (optionally) save urls parsed from indexed
+  pages.
+robot-history: Developed to answer client requests for URL specific
+ index capabilities.
+robot-environment: commercial, service
+modified-date: 6-27-98
+modified-by: Horace A. (Kicker) Vallas
+
+robot-id:           hi
+robot-name:         HI (HTML Index) Search
+robot-cover-url:    http://cs6.cs.ait.ac.th:21870/pa.html
+robot-details-url:
+robot-owner-name:   Razzakul Haider Chowdhury
+robot-owner-url:    http://cs6.cs.ait.ac.th:21870/index.html
+robot-owner-email:  a94385@cs.ait.ac.th
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         yes
+robot-useragent:    AITCSRobot/1.1
+robot-language:     perl 5
+robot-description:  Its purpose is to generate a Resource Discovery database.
+       This Robot traverses the net and creates a searchable
+       database of Web pages. It stores the title string of the
+       HTML document and the absolute url. A search engine provides
+       the boolean AND & OR query models with or without filtering
+       the stop list of words. Feature is kept for the Web page
+       owners to add the url to the searchable database.
+robot-history:      
+robot-environment:
+modified-date:      Wed Oct  4 06:54:31 1995
+modified-by:
+
+robot-id: hometown
+robot-name: Hometown Spider Pro
+robot-cover-url: http://www.hometownsingles.com
+robot-details-url: http://www.hometownsingles.com
+robot-owner-name: Bob Brown
+robot-owner-url: http://www.hometownsingles.com
+robot-owner-email: admin@hometownsingles.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: *
+robot-noindex: yes
+robot-host: 63.195.193.17
+robot-from: no
+robot-useragent: Hometown Spider Pro
+robot-language: delphi
+robot-description: The Hometown Spider Pro is used to maintain the indexes
+ for Hometown Singles.
+robot-history: Innerprise URL Spider Pro
+robot-environment: commercial
+modified-date: Tue, 28 Mar 2000 16:00:00 GMT
+modified-by: Hometown Singles
+
+robot-id: wired-digital
+robot-name: Wired Digital
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Bowen Dwelle
+robot-owner-url:
+robot-owner-email: bowen@hotwired.com
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: hotwired
+robot-noindex: no
+robot-host: gossip.hotwired.com
+robot-from: yes
+robot-useragent: wired-digital-newsbot/1.5
+robot-language: perl-5.004
+robot-description: this is a test
+robot-history:
+robot-environment: research
+modified-date: Thu, 30 Oct 1997
+modified-by: bowen@hotwired.com
+
+robot-id:           htdig
+robot-name:         ht://Dig
+robot-cover-url:    http://www.htdig.org/
+robot-details-url:  http://www.htdig.org/howitworks.html
+robot-owner-name:   Andrew Scherpbier
+robot-owner-url:    http://www.htdig.org/author.html
+robot-owner-email:  andrew@contigo.com
+robot-owner-name2:  Geoff Hutchison 
+robot-owner-url2:   http://wso.williams.edu/~ghutchis/
+robot-owner-email2: ghutchis@wso.williams.edu
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     unix
+robot-availability: source
+robot-exclusion:    yes
+robot-exclusion-useragent: htdig
+robot-noindex:      yes
+robot-host:         *
+robot-from:         no
+robot-useragent:    htdig/3.1.0b2
+robot-language:     C,C++.
+robot-history:This robot was originally developed for use at San Diego
+ State University.
+robot-environment:
+modified-date:Tue, 3 Nov 1998 10:09:02 EST 
+modified-by: Geoff Hutchison <Geoffrey.R.Hutchison@williams.edu>
+
+robot-id:           htmlgobble
+robot-name:         HTMLgobble
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Andreas Ley
+robot-owner-url:    
+robot-owner-email:  ley@rz.uni-karlsruhe.de
+robot-status:       
+robot-purpose:      mirror
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         tp70.rz.uni-karlsruhe.de
+robot-from:         yes
+robot-useragent:    HTMLgobble v2.2
+robot-language:     
+robot-description:  A mirroring robot. Configured to stay within a directory,
+       sleeps between requests, and the next version will use HEAD
+       to check if the entire document needs to be
+       retrieved
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           hyperdecontextualizer
+robot-name:         Hyper-Decontextualizer
+robot-cover-url:    http://www.tricon.net/Comm/synapse/spider/
+robot-details-url:
+robot-owner-name:   Cliff Hall
+robot-owner-url:    http://kpt1.tricon.net/cgi-bin/cliff.cgi
+robot-owner-email:  cliff@tricon.net
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         no
+robot-useragent:    no
+robot-language:     Perl 5 Takes an input sentence and marks up each word with
+       an appropriate hyper-text link.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Mon May  6 17:41:29 1996.
+modified-by:
+
+robot-id:           ibm
+robot-name:         IBM_Planetwide
+robot-cover-url:    http://www.ibm.com/%7ewebmaster/
+robot-details-url:
+robot-owner-name:   Ed Costello
+robot-owner-url:    http://www.ibm.com/%7ewebmaster/
+robot-owner-email:  epc@www.ibm.com"
+robot-status:
+robot-purpose:      indexing, maintenance, mirroring
+robot-type:         standalone and
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         www.ibm.com www2.ibm.com
+robot-from:         yes
+robot-useragent:    IBM_Planetwide, 
+robot-language:     Perl5
+robot-description:  Restricted to IBM owned or related domains.
+robot-history:
+robot-environment:
+modified-date:      Mon Jan 22 22:09:19 1996.
+modified-by:
+
+robot-id: iconoclast
+robot-name: Popular Iconoclast
+robot-cover-url: http://gestalt.sewanee.edu/ic/
+robot-details-url: http://gestalt.sewanee.edu/ic/info.html
+robot-owner-name: Chris Cappuccio
+robot-owner-url: http://sefl.satelnet.org/~ccappuc/
+robot-owner-email: chris@gestalt.sewanee.edu
+robot-status: development
+robot-purpose: statistics 
+robot-type: standalone
+robot-platform: unix (OpenBSD)
+robot-availability: source
+robot-exclusion: no 
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: gestalt.sewanee.edu
+robot-from: yes 
+robot-useragent: gestaltIconoclast/1.0 libwww-FM/2.17
+robot-language: c,perl5
+robot-description: This guy likes statistics
+robot-history: This robot has a history in mathematics and english
+robot-environment: research
+modified-date: Wed, 5 Mar 1997 17:35:16 CST
+modified-by: chris@gestalt.sewanee.edu
+
+robot-id: Ilse
+robot-name: Ingrid
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Ilse c.v.
+robot-owner-url: http://www.ilse.nl/
+robot-owner-email: ilse@ilse.nl
+robot-status: Running
+robot-purpose: Indexing
+robot-type: Web Indexer
+robot-platform: UNIX
+robot-availability: Commercial as part of search engine package
+robot-exclusion: Yes
+robot-exclusion-useragent: INGRID/0.1
+robot-noindex: Yes
+robot-host: bart.ilse.nl
+robot-from: Yes
+robot-useragent: INGRID/0.1
+robot-language: C
+robot-description:  
+robot-history:
+robot-environment:
+modified-date: 06/13/1997
+modified-by: Ilse
+
+robot-id: imagelock
+robot-name: Imagelock 
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Ken Belanger  
+robot-owner-url:
+robot-owner-email: belanger@imagelock.com
+robot-status: development
+robot-purpose: maintenance      
+robot-type:
+robot-platform: windows95
+robot-availability: none
+robot-exclusion: no
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: 209.111.133.*
+robot-from: no
+robot-useragent: Mozilla 3.01 PBWF (Win95)
+robot-language:
+robot-description: searches for image links
+robot-history:
+robot-environment: service
+modified-date: Tue, 11 Aug 1998 17:28:52 GMT
+modified-by: brian@smithrenaud.com
+
+robot-id:           incywincy
+robot-name:         IncyWincy
+robot-cover-url:    http://osiris.sunderland.ac.uk/sst-scripts/simon.html
+robot-details-url:
+robot-owner-name:   Simon Stobart
+robot-owner-url:    http://osiris.sunderland.ac.uk/sst-scripts/simon.html
+robot-owner-email:  simon.stobart@sunderland.ac.uk
+robot-status:
+robot-purpose:
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         osiris.sunderland.ac.uk
+robot-from:         yes
+robot-useragent:    IncyWincy/1.0b1
+robot-language:     C++
+robot-description:  Various Research projects at the University of
+       Sunderland
+robot-history:
+robot-environment:
+modified-date:      Fri Jan 19 21:50:32 1996.
+modified-by:
+
+robot-id: informant
+robot-name: Informant
+robot-cover-url: http://informant.dartmouth.edu/
+robot-details-url: http://informant.dartmouth.edu/about.html
+robot-owner-name: Bob Gray
+robot-owner-name2: Aditya Bhasin
+robot-owner-name3: Katsuhiro Moizumi
+robot-owner-name4: Dr. George V. Cybenko
+robot-owner-url: http://informant.dartmouth.edu/
+robot-owner-email: info_adm@cosmo.dartmouth.edu
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: no
+robot-exclusion-useragent: Informant
+robot-noindex: no
+robot-host: informant.dartmouth.edu
+robot-from: yes
+robot-useragent: Informant
+robot-language: c, c++
+robot-description: The Informant robot continually checks the Web pages
+ that are relevant to user queries.  Users are notified of any new or
+ updated pages.  The robot runs daily, but the number of hits per site
+ per day should be quite small, and these hits should be randomly
+ distributed over several hours.  Since the robot does not actually 
+ follow links (aside from those returned from the major search engines 
+ such as Lycos), it does not fall victim to the common looping problems.
+ The robot will support the Robot Exclusion Standard by early December, 1996.
+robot-history: The robot is part of a research project at Dartmouth College.  
+ The robot may become part of a commercial service (at which time it may be 
+ subsumed by some other, existing robot).
+robot-environment: research, service
+modified-date: Sun, 3 Nov 1996 11:55:00 GMT
+modified-by: Bob Gray
+
+robot-id:           infoseek
+robot-name:         InfoSeek Robot 1.0
+robot-cover-url:    http://www.infoseek.com
+robot-details-url:
+robot-owner-name:   Steve Kirsch
+robot-owner-url:    http://www.infoseek.com
+robot-owner-email:  stk@infoseek.com
+robot-status:       
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         corp-gw.infoseek.com
+robot-from:         yes
+robot-useragent:    InfoSeek Robot 1.0
+robot-language:     python
+robot-description:  Its purpose is to generate a Resource Discovery database.
+       Collects WWW pages for both InfoSeek's free WWW search and
+       commercial search. Uses a unique proprietary algorithm to
+       identify the most popular and interesting WWW pages. Very
+       fast, but never has more than one request per site
+       outstanding at any given time. Has been refined for more
+       than a year.
+robot-history:      
+robot-environment:
+modified-date:      Sun May 28 01:35:48 1995
+modified-by:
+
+robot-id:           infoseeksidewinder
+robot-name:         Infoseek Sidewinder
+robot-cover-url:    http://www.infoseek.com/
+robot-details-url:
+robot-owner-name:   Mike Agostino
+robot-owner-url:    http://www.infoseek.com/
+robot-owner-email:  mna@infoseek.com
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    Infoseek Sidewinder
+robot-language:     C Collects WWW pages for both InfoSeek's free WWW search
+       services. Uses a unique, incremental, very fast proprietary
+       algorithm to find WWW pages. 
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Sat Apr 27 01:20:15 1996.
+modified-by:
+
+robot-id: infospider
+robot-name: InfoSpiders
+robot-cover-url: http://www-cse.ucsd.edu/users/fil/agents/agents.html
+robot-owner-name: Filippo Menczer
+robot-owner-url: http://www-cse.ucsd.edu/users/fil/
+robot-owner-email: fil@cs.ucsd.edu
+robot-status: development
+robot-purpose: search
+robot-type: standalone
+robot-platform: unix, mac
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: InfoSpiders
+robot-noindex: no
+robot-host: *.ucsd.edu
+robot-from: yes
+robot-useragent: InfoSpiders/0.1
+robot-language: c, perl5
+robot-description: application of artificial life algorithm to adaptive
+ distributed information retrieval
+robot-history: UC San Diego, Computer Science Dept. PhD research project
+ (1995-97) under supervision of Prof. Rik Belew
+robot-environment: research
+modified-date: Mon, 16 Sep 1996 14:08:00 PDT
+
+robot-id:  inspectorwww
+robot-name:  Inspector Web
+robot-cover-url:  http://www.greenpac.com/inspector/
+robot-details-url:  http://www.greenpac.com/inspector/ourrobot.html
+robot-owner-name:  Doug Green
+robot-owner-url:  http://www.greenpac.com
+robot-owner-email:  doug@greenpac.com
+robot-status:  active:  robot significantly developed, but still undergoing fixes
+robot-purpose:  maintentance:  link validation, html validation, image size
+ validation, etc
+robot-type:  standalone
+robot-platform: unix
+robot-availability:  free service and more extensive commercial service
+robot-exclusion:  yes
+robot-exclusion-useragent:  inspectorwww
+robot-noindex:  no
+robot-host:  www.corpsite.com, www.greenpac.com, 38.234.171.*
+robot-from:  yes
+robot-useragent:  inspectorwww/1.0 http://www.greenpac.com/inspectorwww.html
+robot-language:  c
+robot-description:  Provide inspection reports which give advise to WWW
+ site owners on missing links, images resize problems, syntax errors, etc.
+robot-history:  development started in Mar 1997
+robot-environment:  commercial
+modified-date:  Tue Jun 17 09:24:58 EST 1997
+modified-by:  Doug Green
+
+robot-id:           intelliagent
+robot-name:         IntelliAgent
+robot-cover-url:    http://www.geocities.com/SiliconValley/3086/iagent.html
+robot-details-url:
+robot-owner-name:   David Reilly
+robot-owner-url:    http://www.geocities.com/SiliconValley/3086/index.html
+robot-owner-email:  s1523@sand.it.bond.edu.au
+robot-status:       development
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         sand.it.bond.edu.au
+robot-from:         no
+robot-useragent:    'IAGENT/1.0'
+robot-language:     C
+robot-description:  IntelliAgent is still in development. Indeed, it is very far
+       from completion. I'm planning to limit the depth at which it
+       will probe, so hopefully IAgent won't cause anyone much of a
+       problem. At the end of its completion, I hope to publish
+       both the raw data and original source code.
+robot-history:
+robot-environment:
+modified-date:      Fri May 31 02:10:39 1996.
+modified-by:
+
+robot-id:iron33
+robot-name:Iron33
+robot-cover-url:http://verno.ueda.info.waseda.ac.jp/iron33/
+robot-details-url:http://verno.ueda.info.waseda.ac.jp/iron33/history.html
+robot-owner-name:Takashi Watanabe
+robot-owner-url:http://www.ueda.info.waseda.ac.jp/~watanabe/
+robot-owner-email:watanabe@ueda.info.waseda.ac.jp
+robot-status:active
+robot-purpose:indexing, statistics
+robot-type:standalone
+robot-platform:unix
+robot-availability:source
+robot-exclusion:yes
+robot-exclusion-useragent:Iron33
+robot-noindex:no
+robot-host:*.folon.ueda.info.waseda.ac.jp, 133.9.215.*
+robot-from:yes
+robot-useragent:Iron33/0.0
+robot-language:c
+robot-description:The robot "Iron33" is used to build the
+                  database for the WWW search engine "Verno".
+robot-history:
+robot-environment:research
+modified-date:Fri, 20 Mar 1998 18:34 JST
+modified-by:Watanabe Takashi
+
+robot-id:           israelisearch
+robot-name:         Israeli-search
+robot-cover-url:    http://www.idc.ac.il/Sandbag/
+robot-details-url:
+robot-owner-name:   Etamar Laron
+robot-owner-url:    http://www.xpert.com/~etamar/
+robot-owner-email:  etamar@xpert.co
+robot-status:
+robot-purpose:      indexing.
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         dylan.ius.cs.cmu.edu
+robot-from:         no
+robot-useragent:    IsraeliSearch/1.0
+robot-language:     C A complete software designed to collect information in a
+       distributed workload and supports context queries. Intended
+       to be a complete updated resource for Israeli sites and
+       information related to Israel or Israeli
+       Society.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Tue Apr 23 19:23:55 1996.
+modified-by:
+
+robot-id: javabee
+robot-name: JavaBee
+robot-cover-url: http://www.javabee.com
+robot-details-url:
+robot-owner-name:ObjectBox
+robot-owner-url:http://www.objectbox.com/
+robot-owner-email:info@objectbox.com
+robot-status:Active
+robot-purpose:Stealing Java Code
+robot-type:standalone
+robot-platform:Java
+robot-availability:binary
+robot-exclusion:no
+robot-exclusion-useragent:
+robot-noindex:no
+robot-host:*
+robot-from:no
+robot-useragent:JavaBee
+robot-language:Java
+robot-description:This robot is used to grab java applets and run them
+ locally overriding the security implemented
+robot-history:
+robot-environment:commercial
+modified-date:
+modified-by:
+
+robot-id: jcrawler
+robot-name: JCrawler
+robot-cover-url: http://www.nihongo.org/jcrawler/
+robot-details-url:
+robot-owner-name: Benjamin Franz
+robot-owner-url: http://www.nihongo.org/snowhare/
+robot-owner-email: snowhare@netimages.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: jcrawler
+robot-noindex: yes
+robot-host: db.netimages.com
+robot-from: yes
+robot-useragent: JCrawler/0.2
+robot-language: perl5
+robot-description: JCrawler is currently used to build the Vietnam topic
+                   specific WWW index for VietGATE
+                   <URL:http://www.vietgate.net/>. It schedules visits
+                   randomly, but will not visit a site more than once
+                   every two minutes. It uses a subject matter relevance
+                   pruning algorithm to determine what pages to crawl
+                   and index and will not generally index pages with
+                   no Vietnam related content. Uses Unicode internally,
+                   and detects and converts several different Vietnamese
+                   character encodings.
+robot-history:
+robot-environment: service
+modified-date: Wed, 08 Oct 1997 00:09:52 GMT
+modified-by: Benjamin Franz
+
+robot-id: jeeves
+robot-name: Jeeves
+robot-cover-url: http://www-students.doc.ic.ac.uk/~lglb/Jeeves/
+robot-details-url:
+robot-owner-name: Leon Brocard
+robot-owner-url: http://www-students.doc.ic.ac.uk/~lglb/
+robot-owner-email: lglb@doc.ic.ac.uk
+robot-status: development
+robot-purpose: indexing maintenance statistics
+robot-type: standalone
+robot-platform: UNIX
+robot-availability: none
+robot-exclusion: no
+robot-exclusion-useragent: jeeves
+robot-noindex: no
+robot-host: *.doc.ic.ac.uk
+robot-from: yes
+robot-useragent: Jeeves v0.05alpha (PERL, LWP, lglb@doc.ic.ac.uk)
+robot-language: perl5
+robot-description: Jeeves is basically a web-mirroring robot built as a
+ final-year degree project. It will have many nice features and is
+ already web-friendly. Still in development.
+robot-history: Still short (0.05alpha)
+robot-environment: research
+modified-date: Wed, 23 Apr 1997 17:26:50 GMT
+modified-by: Leon Brocard
+
+robot-id:           jobot
+robot-name:         Jobot
+robot-cover-url:    http://www.micrognosis.com/~ajack/jobot/jobot.html
+robot-details-url:
+robot-owner-name:   Adam Jack
+robot-owner-url:    http://www.micrognosis.com/~ajack/index.html
+robot-owner-email:  ajack@corp.micrognosis.com
+robot-status:       inactive
+robot-purpose:      standalone
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         supernova.micrognosis.com
+robot-from:         yes
+robot-useragent:    Jobot/0.1alpha libwww-perl/4.0
+robot-language:     perl 4
+robot-description:  Its purpose is to generate a Resource Discovery database.
+       Intended to seek out sites of potential "career interest".
+       Hence - Job Robot.
+robot-history:      
+robot-environment:
+modified-date:      Tue Jan  9 18:55:55 1996
+modified-by:
+
+robot-id:           joebot
+robot-name:         JoeBot
+robot-cover-url:
+robot-details-url:
+robot-owner-name:   Ray Waldin
+robot-owner-url:    http://www.primenet.com/~rwaldin
+robot-owner-email:  rwaldin@primenet.com
+robot-status:
+robot-purpose:
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    JoeBot/x.x, 
+robot-language:     java JoeBot is a generic web crawler implemented as a
+       collection of Java classes which can be used in a variety of
+       applications, including resource discovery, link validation,
+       mirroring, etc.  It currently limits itself to one visit per
+       host per minute.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Sun May 19 08:13:06 1996.
+modified-by:
+
+robot-id:           jubii
+robot-name:         The Jubii Indexing Robot
+robot-cover-url:    http://www.jubii.dk/robot/default.htm
+robot-details-url:
+robot-owner-name:   Jakob Faarvang
+robot-owner-url:    http://www.cybernet.dk/staff/jakob/
+robot-owner-email:  jakob@jubii.dk
+robot-status:       
+robot-purpose:      indexing, maintainance
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         any host in the cybernet.dk domain
+robot-from:         yes
+robot-useragent:    JubiiRobot/version#
+robot-language:     visual basic 4.0
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       and validate links. Used for indexing the .dk top-level
+       domain as well as other Danish sites for aDanish web
+       database, as well as link validation.
+robot-history:      Will be in constant operation from Spring
+       1996
+robot-environment:
+modified-date:      Sat Jan  6 20:58:44 1996
+modified-by:
+
+robot-id:           jumpstation
+robot-name:         JumpStation
+robot-cover-url:    http://js.stir.ac.uk/jsbin/jsii
+robot-details-url:
+robot-owner-name:   Jonathon Fletcher
+robot-owner-url:    http://www.stir.ac.uk/~jf1
+robot-owner-email:  j.fletcher@stirling.ac.uk 
+robot-status:       retired
+robot-purpose:      indexing
+robot-type:
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *.stir.ac.uk
+robot-from:         yes
+robot-useragent:    jumpstation
+robot-language:     perl, C, c++
+robot-description:
+robot-history:      Originated as a weekend project in 1993.
+robot-environment:
+modified-date:      Tue May 16 00:57:42 1995.
+modified-by:
+
+robot-id:           katipo
+robot-name:         Katipo
+robot-cover-url:    http://www.vuw.ac.nz/~newbery/Katipo.html
+robot-details-url:  http://www.vuw.ac.nz/~newbery/Katipo/Katipo-doc.html
+robot-owner-name:   Michael Newbery
+robot-owner-url:    http://www.vuw.ac.nz/~newbery
+robot-owner-email:  Michael.Newbery@vuw.ac.nz
+robot-status:       active
+robot-purpose:      maintenance
+robot-type:         standalone
+robot-platform:     Macintosh
+robot-availability: binary
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         yes
+robot-useragent:    Katipo/1.0
+robot-language:     c
+robot-description:  Watches all the pages you have previously visited
+       and tells you when they have changed.
+robot-history:      
+robot-environment:  commercial (free)
+modified-date:      Tue, 25 Jun 96 11:40:07 +1200
+modified-by:        Michael Newbery
+
+robot-id:               kdd
+robot-name:             KDD-Explorer
+robot-cover-url:        http://mlc.kddvw.kcom.or.jp/CLINKS/html/clinks.html
+robot-details-url:      not available
+robot-owner-name:       Kazunori Matsumoto
+robot-owner-url:        not available
+robot-owner-email:      matsu@lab.kdd.co.jp
+robot-status:           development (to be avtive in June 1997)
+robot-purpose:          indexing
+robot-type:             standalone
+robot-platform:         unix
+robot-availability:     none
+robot-exclusion:        yes
+robot-exclusion-useragent:KDD-Explorer
+robot-noindex:          no
+robot-host:             mlc.kddvw.kcom.or.jp
+robot-from:             yes
+robot-useragent:        KDD-Explorer/0.1
+robot-language:         c
+robot-description:      KDD-Explorer is used for indexing valuable documents
+                which will be retrieved via an experimental cross-language
+                search engine, CLINKS.
+robot-history:          This robot was designed in Knowledge-bases Information
+                        processing Laboratory, KDD R&D Laboratories, 1996-1997
+robot-environment:      research
+modified-date:          Mon, 2 June 1997 18:00:00 JST
+modified-by:            Kazunori Matsumoto
+
+robot-id:kilroy
+robot-name:Kilroy
+robot-cover-url:http://purl.org/kilroy
+robot-details-url:http://purl.org/kilroy
+robot-owner-name:OCLC
+robot-owner-url:http://www.oclc.org
+robot-owner-email:kilroy@oclc.org
+robot-status:active
+robot-purpose:indexing,statistics
+robot-type:standalone
+robot-platform:unix,windowsNT
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:*
+robot-noindex:no
+robot-host:*.oclc.org
+robot-from:no
+robot-useragent:yes
+robot-language:java
+robot-description:Used to collect data for several projects. 
+ Runs constantly and visits site no faster than once every 90 seconds.
+robot-history:none
+robot-environment:research,service
+modified-date:Thursday, 24 Apr 1997 20:00:00 GMT
+modified-by:tkac
+
+robot-id: ko_yappo_robot
+robot-name: KO_Yappo_Robot
+robot-cover-url: http://yappo.com/info/robot.html
+robot-details-url: http://yappo.com/
+robot-owner-name: Kazuhiro Osawa
+robot-owner-url: http://yappo.com/
+robot-owner-email: office_KO@yappo.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: ko_yappo_robot
+robot-noindex: yes
+robot-host: yappo.com,209.25.40.1
+robot-from: yes
+robot-useragent: KO_Yappo_Robot/1.0.4(http://yappo.com/info/robot.html)
+robot-language: perl
+robot-description: The KO_Yappo_Robot robot is used to build the database
+           for the Yappo search service by k,osawa
+           (part of AOL).
+           The robot runs random day, and visits sites in a random order.
+robot-history: The robot is hobby of k,osawa
+           at the Tokyo in 1997
+robot-environment: hobby
+modified-date: Fri, 18 Jul 1996 12:34:21 GMT
+modified-by: KO
+
+robot-id: labelgrabber.txt
+robot-name: LabelGrabber
+robot-cover-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm
+robot-details-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm
+robot-owner-name: Kyle Jamieson
+robot-owner-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm
+robot-owner-email: jamieson@mit.edu
+robot-status: active
+robot-purpose: Grabs PICS labels from web pages, submits them to a label bueau
+robot-type: standalone
+robot-platform: windows, windows95, windowsNT, unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: label-grabber
+robot-noindex: no
+robot-host: head.w3.org
+robot-from: no
+robot-useragent: LabelGrab/1.1
+robot-language: java
+robot-description: The label grabber searches for PICS labels and submits
+ them to a label bureau
+robot-history: N/A
+robot-environment: research
+modified-date: Wed, 28 Jan 1998 17:32:52 GMT
+modified-by: jamieson@mit.edu
+
+robot-id: larbin
+robot-name: larbin
+robot-cover-url: http://para.inria.fr/~ailleret/larbin/index-eng.html
+robot-owner-name: Sebastien Ailleret
+robot-owner-url: http://para.inria.fr/~ailleret/
+robot-owner-email: sebastien.ailleret@inria.fr
+robot-status: active
+robot-purpose: Your imagination is the only limit
+robot-type: standalone
+robot-platform: Linux
+robot-availability: source (GPL), mail me for customization
+robot-exclusion: yes
+robot-exclusion-useragent: larbin
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: larbin (+mail)
+robot-language: c++
+robot-description: Parcourir le web, telle est ma passion
+robot-history: french research group (INRIA Verso)
+robot-environment: hobby
+modified-date: 2000-3-28
+modified-by: Sebastien Ailleret
+
+robot-id: legs
+robot-name: legs
+robot-cover-url: http://www.MagPortal.com/
+robot-details-url:
+robot-owner-name: Bill Dimm
+robot-owner-url: http://www.HotNeuron.com/
+robot-owner-email: admin@magportal.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: linux
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: legs
+robot-noindex: no
+robot-host:
+robot-from: yes
+robot-useragent: legs
+robot-language: perl5
+robot-description: The legs robot is used to build the magazine article
+ database for MagPortal.com.
+robot-history:
+robot-environment: service
+modified-date: Wed, 22 Mar 2000 14:10:49 GMT
+modified-by: Bill Dimm
+
+robot-id:linkscan
+robot-name:LinkScan
+robot-cover-url:http://www.elsop.com/
+robot-details-url:http://www.elsop.com/linkscan/overview.html
+robot-owner-name:Electronic Software Publishing Corp. (Elsop)
+robot-owner-url:http://www.elsop.com/
+robot-owner-email:sales@elsop.com
+robot-status:Robot actively in use
+robot-purpose:Link checker, SiteMapper, and HTML Validator
+robot-type:Standalone
+robot-platform:Unix, Linux, Windows 98/NT
+robot-availability:Program is shareware
+robot-exclusion:No
+robot-exclusion-useragent:
+robot-noindex:Yes
+robot-host:*
+robot-from:
+robot-useragent:LinkScan Server/5.5 | LinkScan Workstation/5.5
+robot-language:perl5
+robot-description:LinkScan checks links, validates HTML and creates site maps
+robot-history: First developed by Elsop in January,1997
+robot-environment:Commercial
+modified-date:Fri, 3 September 1999 17:00:00 PDT
+modified-by: Kenneth R. Churilla
+
+robot-id: linkwalker
+robot-name: LinkWalker
+robot-cover-url: http://www.seventwentyfour.com
+robot-details-url: http://www.seventwentyfour.com/tech.html
+robot-owner-name: Roy Bryant
+robot-owner-url: 
+robot-owner-email: rbryant@seventwentyfour.com
+robot-status: active
+robot-purpose: maintenance, statistics
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: linkwalker
+robot-noindex: yes
+robot-host: *.seventwentyfour.com
+robot-from: yes
+robot-useragent: LinkWalker
+robot-language: c++
+robot-description: LinkWalker generates a database of links.
+ We send reports of bad ones to webmasters.
+robot-history: Constructed late 1997 through April 1998.
+ In full service April 1998.
+robot-environment: service
+modified-date: Wed, 22 Apr 1998
+modified-by: Roy Bryant
+
+robot-id:lockon
+robot-name:Lockon
+robot-cover-url:
+robot-details-url:
+robot-owner-name:Seiji Sasazuka & Takahiro Ohmori
+robot-owner-url:
+robot-owner-email:search@rsch.tuis.ac.jp
+robot-status:active
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:UNIX
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:Lockon
+robot-noindex:yes
+robot-host:*.hitech.tuis.ac.jp
+robot-from:yes
+robot-useragent:Lockon/xxxxx
+robot-language:perl5 
+robot-description:This robot gathers only HTML document.
+robot-history:This robot was developed in the Tokyo university of information sciences in 1998.
+robot-environment:research
+modified-date:Tue. 10 Nov 1998 20:00:00 GMT
+modified-by:Seiji Sasazuka & Takahiro Ohmori
+
+robot-id:logo_gif
+robot-name: logo.gif Crawler
+robot-cover-url: http://www.inm.de/projects/logogif.html
+robot-details-url:
+robot-owner-name: Sevo Stille
+robot-owner-url: http://www.inm.de/people/sevo
+robot-owner-email: sevo@inm.de
+robot-status: under development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: logo_gif_crawler
+robot-noindex: no
+robot-host: *.inm.de
+robot-from: yes
+robot-useragent: logo.gif crawler
+robot-language: perl
+robot-description: meta-indexing engine for corporate logo graphics
+ The robot runs at irregular intervals and will only pull a start page and
+ its associated /.*logo\.gif/i (if any). It will be terminated once a
+ statistically
+ significant number of samples has been collected.
+robot-history: logo.gif is part of the design diploma of Markus Weisbeck,
+ and tries to analyze the abundance of the logo metaphor in WWW
+ corporate design.
+ The crawler and image database were written by Sevo Stille and Peter
+ Frank of the Institut für Neue Medien, respectively.
+robot-environment: research, statistics
+modified-date: 25.5.97
+modified-by: Sevo Stille
+
+robot-id:           lycos
+robot-name:         Lycos
+robot-cover-url:    http://lycos.cs.cmu.edu/
+robot-details-url:
+robot-owner-name:   Dr. Michael L. Mauldin
+robot-owner-url:    http://fuzine.mt.cs.cmu.edu/mlm/home.html
+robot-owner-email:  fuzzy@cmu.edu
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         fuzine.mt.cs.cmu.edu, lycos.com
+robot-from:         
+robot-useragent:    Lycos/x.x
+robot-language:     
+robot-description:  This is a research program in providing information
+       retrieval and discovery in the WWW, using a finite memory
+       model of the web to guide intelligent, directed searches for
+       specific  information needs
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           macworm
+robot-name:         Mac WWWWorm
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Sebastien Lemieux
+robot-owner-url:    
+robot-owner-email:  lemieuse@ERE.UMontreal.CA
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     Macintosh
+robot-availability: none
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     hypercard
+robot-description:  a French Keyword-searching robot for the Mac The author has
+       decided not to release this robot to the
+       public
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: magpie
+robot-name: Magpie
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Keith Jones
+robot-owner-url: 
+robot-owner-email: Keith.Jones@blueberry.co.uk
+robot-status: development
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability:
+robot-exclusion: no
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: *.blueberry.co.uk, 194.70.52.*, 193.131.167.144
+robot-from: no
+robot-useragent: Magpie/1.0
+robot-language: perl5
+robot-description: Used to obtain information from a specified list of web pages for local indexing. Runs every two hours, and visits only a small number of sites.
+robot-history: Part of a research project. Alpha testing from 10 July 1996, Beta testing from 10 September.
+robot-environment: research
+modified-date: Wed, 10 Oct 1996 13:15:00 GMT
+modified-by: Keith Jones
+
+robot-id: mediafox
+robot-name: MediaFox
+robot-cover-url: none
+robot-details-url: none
+robot-owner-name: Lars Eilebrecht   
+robot-owner-url: http://www.home.unix-ag.org/sfx/
+robot-owner-email: sfx@uni-media.de
+robot-status: development
+robot-purpose: indexing and maintenance
+robot-type: standalone
+robot-platform: (Java)
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: mediafox
+robot-noindex: yes
+robot-host: 141.99.*.*
+robot-from: yes
+robot-useragent: MediaFox/x.y
+robot-language: Java
+robot-description: The robot is used to index meta information of a
+                   specified set of documents and update a database
+                   accordingly.
+robot-history: Project at the University of Siegen
+robot-environment: research
+modified-date: Fri Aug 14 03:37:56 CEST 1998
+modified-by: Lars Eilebrecht
+
+robot-id:merzscope
+robot-name:MerzScope
+robot-cover-url:http://www.merzcom.com
+robot-details-url:http://www.merzcom.com
+robot-owner-name:(Client based robot)
+robot-owner-url:(Client based robot)
+robot-owner-email:
+robot-status:actively in use
+robot-purpose:WebMapping
+robot-type:standalone
+robot-platform:        (Java Based) unix,windows95,windowsNT,os2,mac etc ..
+robot-availability:binary
+robot-exclusion: yes
+robot-exclusion-useragent: MerzScope
+robot-noindex: no
+robot-host:(Client Based)
+robot-from:
+robot-useragent: MerzScope
+robot-language:        java
+robot-description: Robot is part of a Web-Mapping package called MerzScope,
+        to be used mainly by consultants, and web masters to create and
+        publish maps, on and of the World wide web.
+robot-history: 
+robot-environment:
+modified-date: Fri, 13 March 1997 16:31:00
+modified-by: Philip Lenir, MerzScope lead developper
+
+robot-id:              meshexplorer
+robot-name:            NEC-MeshExplorer
+robot-cover-url:       http://netplaza.biglobe.or.jp/
+robot-details-url:     http://netplaza.biglobe.or.jp/keyword.html
+robot-owner-name:      web search service maintenance group
+robot-owner-url:       http://netplaza.biglobe.or.jp/keyword.html
+robot-owner-email:     web-dir@mxa.meshnet.or.jp
+robot-status:          active
+robot-purpose:         indexing
+robot-type:            standalone
+robot-platform:                unix
+robot-availability:    none
+robot-exclusion:       yes
+robot-exclusion-useragent:     NEC-MeshExplorer
+robot-noindex:         no
+robot-host:            meshsv300.tk.mesh.ad.jp
+robot-from:            yes
+robot-useragent:       NEC-MeshExplorer
+robot-language:                c
+robot-description:     The NEC-MeshExplorer robot is used to build database for the NETPLAZA
+ search service operated by NEC Corporation. The robot searches URLs
+ around sites in japan(JP domain).
+ The robot runs every day, and visits sites in a random order.
+robot-history: Prototype version of this robot was developed in C&C Research
+ Laboratories, NEC Corporation. Current robot (Version 1.0) is based
+ on the prototype and has more functions.
+robot-environment:     research
+modified-date:         Jan 1, 1997
+modified-by:           Nobuya Kubo, Hajime Takano
+
+robot-id: MindCrawler
+robot-name: MindCrawler
+robot-cover-url: http://www.mindpass.com/_technology_faq.htm
+robot-details-url:
+robot-owner-name: Mindpass
+robot-owner-url: http://www.mindpass.com/
+robot-owner-email: support@mindpass.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: linux
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: MindCrawler
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: MindCrawler
+robot-language: c++
+robot-description: 
+robot-history:
+robot-environment:
+modified-date: Tue Mar 28 11:30:09 CEST 2000
+modified-by:
+
+robot-id:moget
+robot-name:moget
+robot-cover-url:
+robot-details-url:
+robot-owner-name:NTT-ME Infomation Xing,Inc
+robot-owner-url:http://www.nttx.co.jp
+robot-owner-email:moget@goo.ne.jp
+robot-status:active
+robot-purpose:indexing,statistics
+robot-type:standalone
+robot-platform:unix
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:moget
+robot-noindex:yes
+robot-host:*.goo.ne.jp
+robot-from:yes
+robot-useragent:moget/1.0
+robot-language:c
+robot-description: This robot is used to build the database for the search service operated by goo
+robot-history:
+robot-environment:service
+modified-date:Thu, 30 Mar 2000 18:40:37 GMT
+modified-by:moget@goo.ne.jp
+
+robot-id:           momspider
+robot-name:         MOMspider
+robot-cover-url:    http://www.ics.uci.edu/WebSoft/MOMspider/
+robot-details-url:
+robot-owner-name:   Roy T. Fielding
+robot-owner-url:    http://www.ics.uci.edu/dir/grad/Software/fielding
+robot-owner-email:  fielding@ics.uci.edu
+robot-status:       active
+robot-purpose:      maintenance, statistics
+robot-type:         standalone
+robot-platform:     UNIX
+robot-availability: source
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         yes
+robot-useragent:    MOMspider/1.00 libwww-perl/0.40
+robot-language:     perl 4
+robot-description:  to validate links, and generate statistics. It's usually run
+       from anywhere
+robot-history:      Originated as a research project at the University of
+       California, Irvine, in 1993. Presented at the First
+       International WWW Conference in Geneva, 1994.
+robot-environment:
+modified-date:      Sat May 6 08:11:58 1995    
+modified-by:        fielding@ics.uci.edu
+
+robot-id:           monster
+robot-name:         Monster
+robot-cover-url:    http://www.neva.ru/monster.list/russian.www.html
+robot-details-url:  
+robot-owner-name:   Dmitry Dicky
+robot-owner-url:    http://wild.stu.neva.ru/
+robot-owner-email:  diwil@wild.stu.neva.ru
+robot-status:       active
+robot-purpose:      maintenance, mirroring
+robot-type:         standalone
+robot-platform:     UNIX (Linux)
+robot-availability: binary
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         wild.stu.neva.ru
+robot-from:         
+robot-useragent:    Monster/vX.X.X -$TYPE ($OSTYPE)
+robot-language:     C
+robot-description:  The Monster has two parts - Web searcher and Web analyzer.
+       Searcher is intended to perform the list of WWW sites of 
+       desired domain (for example it can perform list of all 
+       WWW sites of mit.edu, com, org, etc... domain)
+       In the User-agent field $TYPE is set to 'Mapper' for Web searcher
+       and 'StAlone' for Web analyzer. 
+robot-history:      Now the full (I suppose) list of ex-USSR sites is produced.
+robot-environment:  
+modified-date:      Tue Jun 25 10:03:36 1996
+modified-by:
+
+robot-id: motor
+robot-name: Motor
+robot-cover-url: http://www.cybercon.de/Motor/index.html
+robot-details-url:
+robot-owner-name: Mr. Oliver Runge, Mr. Michael Goeckel
+robot-owner-url: http://www.cybercon.de/index.html
+robot-owner-email: Motor@cybercon.technopark.gmd.de
+robot-status: developement
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: mac
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: Motor
+robot-noindex: no
+robot-host: Michael.cybercon.technopark.gmd.de
+robot-from: yes
+robot-useragent: Motor/0.2
+robot-language: 4th dimension
+robot-description: The Motor robot is used to build the database for the 
+ www.webindex.de search service operated by CyberCon. The robot ios under 
+ development - it runs in random intervals and visits site in a priority 
+ driven order (.de/.ch/.at first, root and robots.txt first)
+robot-history: 
+robot-environment: service
+modified-date: Wed, 3 Jul 1996 15:30:00 +0100
+modified-by: Michael Goeckel (Michael@cybercon.technopark.gmd.de)
+
+robot-id: muscatferret
+robot-name: Muscat Ferret
+robot-cover-url: http://www.muscat.co.uk/euroferret/
+robot-details-url:
+robot-owner-name: Olly Betts
+robot-owner-url: http://www.muscat.co.uk/~olly/
+robot-owner-email: olly@muscat.co.uk
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: MuscatFerret
+robot-noindex: yes
+robot-host: 193.114.89.*, 194.168.54.11
+robot-from: yes
+robot-useragent: MuscatFerret/<version>
+robot-language: c, perl5
+robot-description: Used to build the database for the EuroFerret
+ <URL:http://www.muscat.co.uk/euroferret/>
+robot-history:
+robot-environment: service
+modified-date: Tue, 21 May 1997 17:11:00 GMT
+modified-by: olly@muscat.co.uk
+
+robot-id: mwdsearch
+robot-name: Mwd.Search
+robot-cover-url: (none)
+robot-details-url: (none)
+robot-owner-name: Antti Westerberg
+robot-owner-url: (none)
+robot-owner-email: Antti.Westerberg@mwd.sci.fi
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix (Linux)
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: MwdSearch
+robot-noindex: yes
+robot-host: *.fifi.net
+robot-from: no
+robot-useragent: MwdSearch/0.1
+robot-language: perl5, c
+robot-description: Robot for indexing finnish (toplevel domain .fi)
+                   webpages for search engine called Fifi.
+                   Visits sites in random order.
+robot-history: (none)
+robot-environment: service (+ commercial)mwd.sci.fi>
+modified-date: Mon, 26 May 1997 15:55:02 EEST
+modified-by: Antti.Westerberg@mwd.sci.fi
+
+robot-id: myweb
+robot-name: Internet Shinchakubin
+robot-cover-url: http://naragw.sharp.co.jp/myweb/home/
+robot-details-url:
+robot-owner-name: SHARP Corp.
+robot-owner-url: http://naragw.sharp.co.jp/myweb/home/
+robot-owner-email: shinchakubin-request@isl.nara.sharp.co.jp
+robot-status: active
+robot-purpose: find new links and changed pages
+robot-type: standalone
+robot-platform: Windows98
+robot-availability: binary as bundled software
+robot-exclusion: yes
+robot-exclusion-useragent: sharp-info-agent
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: User-Agent: Mozilla/4.0 (compatible; sharp-info-agent v1.0; )
+robot-language: Java
+robot-description: makes a list of new links and changed pages based
+      on  user's frequently clicked pages in the past 31 days.
+      client may run this software one or few times every day, manually or
+      specified time.
+robot-history: shipped for SHARP's PC users since Feb 2000
+robot-environment: commercial
+modified-date: Fri, 30 Jun 2000 19:02:52 JST
+modified-by: Katsuo Doi <doi@isl.nara.sharp.co.jp>
+
+robot-id:           netcarta
+robot-name:         NetCarta WebMap Engine
+robot-cover-url:    http://www.netcarta.com/
+robot-details-url:
+robot-owner-name:   NetCarta WebMap Engine
+robot-owner-url:    http://www.netcarta.com/
+robot-owner-email:  info@netcarta.com
+robot-status:
+robot-purpose:      indexing, maintenance, mirroring, statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    NetCarta CyberPilot Pro
+robot-language:     C++.
+robot-description:  The NetCarta WebMap Engine is a general purpose, commercial
+       spider. Packaged with a full GUI in the CyberPilo Pro
+       product, it acts as a personal spider to work with a browser
+       to facilitiate context-based navigation.  The WebMapper
+       product uses the robot to manage a site (site copy, site
+       diff, and extensive link management facilities).  All
+       versions can create publishable NetCarta WebMaps, which
+       capture the crawled information.  If the robot sees a
+       published map, it will return the published map rather than
+       continuing its crawl. Since this is a personal spider, it
+       will be launched from multiple domains. This robot tends to
+       focus on a particular site.  No instance of the robot should
+       have more than one outstanding request out to any given site
+       at a time. The User-agent field contains a coded ID
+       identifying the instance of the spider; specific users can
+       be blocked via robots.txt using this ID.
+robot-history:
+robot-environment:
+modified-date:      Sun Feb 18 02:02:49 1996.
+modified-by:
+
+robot-id:  netmechanic
+robot-name:  NetMechanic
+robot-cover-url: http://www.netmechanic.com
+robot-details-url: http://www.netmechanic.com/faq.html
+robot-owner-name: Tom Dahm
+robot-owner-url:  http://iquest.com/~tdahm
+robot-owner-email: tdahm@iquest.com
+robot-status: development
+robot-purpose: Link and HTML validation
+robot-type: standalone with web gateway
+robot-platform: UNIX
+robot-availability: via web page
+robot-exclusion: Yes
+robot-exclusion-useragent: WebMechanic
+robot-noindex: no
+robot-host: 206.26.168.18
+robot-from: no
+robot-useragent: NetMechanic
+robot-language: C
+robot-description:  NetMechanic is a link validation and
+ HTML validation robot run using a web page interface.
+robot-history:
+robot-environment:
+modified-date: Sat, 17 Aug 1996 12:00:00 GMT
+modified-by:
+
+robot-id: netscoop
+robot-name: NetScoop
+robot-cover-url: http://www-a2k.is.tokushima-u.ac.jp/search/index.html
+robot-owner-name: Kenji Kita
+robot-owner-url: http://www-a2k.is.tokushima-u.ac.jp/member/kita/index.html
+robot-owner-email: kita@is.tokushima-u.ac.jp
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: UNIX
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: NetScoop
+robot-host: alpha.is.tokushima-u.ac.jp, beta.is.tokushima-u.ac.jp
+robot-useragent: NetScoop/1.0 libwww/5.0a
+robot-language: C
+robot-description: The NetScoop robot is used to build the database
+                   for the NetScoop search engine.
+robot-history: The robot has been used in the research project
+               at the Faculty of Engineering, Tokushima University, Japan.,
+               since Dec. 1996.
+robot-environment: research
+modified-date: Fri, 10 Jan 1997.
+modified-by: Kenji Kita
+
+robot-id: newscan-online
+robot-name: newscan-online
+robot-cover-url: http://www.newscan-online.de/
+robot-details-url: http://www.newscan-online.de/info.html
+robot-owner-name: Axel Mueller
+robot-owner-url:
+robot-owner-email: mueller@newscan-online.de
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Linux
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: newscan-online
+robot-noindex: no
+robot-host: *newscan-online.de
+robot-from: yes
+robot-useragent: newscan-online/1.1
+robot-language: perl
+robot-description: The newscan-online robot is used to build a database for
+ the newscan-online news search service operated by smart information
+ services. The robot runs daily and visits predefined sites in a random order.
+robot-history: This robot finds its roots in a prereleased software for
+ news filtering for Lotus Notes in 1995.
+robot-environment: service
+modified-date: Fri, 9 Apr 1999 11:45:00 GMT
+modified-by: Axel Mueller
+
+robot-id:           nhse
+robot-name:         NHSE Web Forager
+robot-cover-url:    http://nhse.mcs.anl.gov/
+robot-details-url:
+robot-owner-name:   Robert Olson
+robot-owner-url:    http://www.mcs.anl.gov/people/olson/
+robot-owner-email:  olson@mcs.anl.gov
+robot-status:       
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *.mcs.anl.gov
+robot-from:         yes
+robot-useragent:    NHSEWalker/3.0
+robot-language:     perl 5
+robot-description:  to generate a Resource Discovery database
+robot-history:      
+robot-environment:
+modified-date:      Fri May 5 15:47:55 1995
+modified-by:
+
+robot-id:           nomad
+robot-name:         Nomad
+robot-cover-url:    http://www.cs.colostate.edu/~sonnen/projects/nomad.html
+robot-details-url:
+robot-owner-name:   Richard Sonnen
+robot-owner-url:    http://www.cs.colostate.edu/~sonnen/
+robot-owner-email:  sonnen@cs.colostat.edu
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *.cs.colostate.edu
+robot-from:         no
+robot-useragent:    Nomad-V2.x
+robot-language:     Perl 4
+robot-description:
+robot-history:      Developed in 1995 at Colorado State University.
+robot-environment:
+modified-date:      Sat Jan 27 21:02:20 1996.
+modified-by:
+
+robot-id:           northstar
+robot-name:         The NorthStar Robot
+robot-cover-url:    http://comics.scs.unr.edu:7000/top.html
+robot-details-url:
+robot-owner-name:   Fred Barrie
+robot-owner-url:    
+robot-owner-email:  barrie@unr.edu
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         frognot.utdallas.edu, utdallas.edu, cnidir.org
+robot-from:         yes
+robot-useragent:    NorthStar
+robot-language:     
+robot-description:  Recent runs (26 April 94) will concentrate on textual
+       analysis of the Web versus GopherSpace (from the Veronica
+       data) as well as indexing.
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: occam
+robot-name: Occam
+robot-cover-url: http://www.cs.washington.edu/research/projects/ai/www/occam/
+robot-details-url:
+robot-owner-name: Marc Friedman
+robot-owner-url: http://www.cs.washington.edu/homes/friedman/
+robot-owner-email: friedman@cs.washington.edu
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Occam
+robot-noindex: no
+robot-host: gentian.cs.washington.edu, sekiu.cs.washington.edu, saxifrage.cs.washington.edu
+robot-from: yes
+robot-useragent: Occam/1.0
+robot-language: CommonLisp, perl4
+robot-description: The robot takes high-level queries, breaks them down into
+                multiple web requests, and answers them by combining disparate
+                data gathered in one minute from numerous web sites, or from
+                the robots cache.  Currently the only user is me.
+robot-history: The robot is a descendant of Rodney,
+               an earlier project at the University of Washington.
+robot-environment: research
+modified-date: Thu, 21 Nov 1996 20:30 GMT
+modified-by: friedman@cs.washington.edu (Marc Friedman)
+
+robot-id:           octopus
+robot-name:         HKU WWW Octopus
+robot-cover-url:    http://phoenix.cs.hku.hk:1234/~jax/w3rui.shtml
+robot-details-url:
+robot-owner-name:   Law Kwok Tung , Lee Tak Yeung , Lo Chun Wing
+robot-owner-url:    http://phoenix.cs.hku.hk:1234/~jax
+robot-owner-email:  jax@cs.hku.hk
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no.
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         phoenix.cs.hku.hk
+robot-from:         yes
+robot-useragent:    HKU WWW Robot, 
+robot-language:     Perl 5, C, Java.
+robot-description:  HKU Octopus is an ongoing project for resource discovery in
+       the Hong Kong and China WWW domain . It is a research
+       project conducted by three undergraduate at the University
+       of Hong Kong
+robot-history:
+robot-environment:
+modified-date:      Thu Mar  7 14:21:55 1996.
+modified-by:
+
+robot-id: orb_search
+robot-name: Orb Search
+robot-cover-url: http://orbsearch.home.ml.org
+robot-details-url: http://orbsearch.home.ml.org
+robot-owner-name: Matt Weber
+robot-owner-url: http://www.weberworld.com
+robot-owner-email: webernet@geocities.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: Orbsearch/1.0
+robot-noindex: yes
+robot-host: cow.dyn.ml.org, *.dyn.ml.org
+robot-from: yes
+robot-useragent: Orbsearch/1.0
+robot-language: Perl5
+robot-description: Orbsearch builds the database for Orb Search Engine.
+  It runs when requested.
+robot-history: This robot was started as a hobby.
+robot-environment: hobby
+modified-date: Sun, 31 Aug 1997 02:28:52 GMT
+modified-by: Matt Weber
+
+robot-id: packrat
+robot-name: Pack Rat
+robot-cover-url: http://web.cps.msu.edu/~dexterte/isl/packrat.html
+robot-details-url: 
+robot-owner-name: Terry Dexter
+robot-owner-url: http://web.cps.msu.edu/~dexterte
+robot-owner-email: dexterte@cps.msu.edu
+robot-status: development
+robot-purpose: both maintenance and mirroring
+robot-type: standalone
+robot-platform: unix
+robot-availability:  at the moment, none...source when developed.
+robot-exclusion: yes 
+robot-exclusion-useragent: packrat or *
+robot-noindex: no, not yet
+robot-host: cps.msu.edu
+robot-from: 
+robot-useragent: PackRat/1.0
+robot-language: perl with libwww-5.0
+robot-description: Used for local maintenance and for gathering 
+       web pages so
+       that local statisistical info can be used in artificial intelligence programs.
+         Funded by NEMOnline.
+robot-history: In the making...
+robot-environment: research
+modified-date: Tue, 20 Aug 1996 15:45:11
+modified-by: Terry Dexter
+
+robot-id:pageboy
+robot-name:PageBoy
+robot-cover-url:http://www.webdocs.org/
+robot-details-url:http://www.webdocs.org/ 
+robot-owner-name:Chihiro Kuroda 
+robot-owner-url:http://www.webdocs.org/
+robot-owner-email:pageboy@webdocs.org
+robot-status:development
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:unix
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:pageboy
+robot-noindex:yes
+robot-nofollow:yes
+robot-host:*.webdocs.org
+robot-from:yes
+robot-useragent:PageBoy/1.0
+robot-language:c
+robot-description:The robot visits at regular intervals.
+robot-history:none
+robot-environment:service
+modified-date:Fri, 21 Oct 1999 17:28:52 GMT
+modified-by:webdocs
+
+robot-id: parasite
+robot-name: ParaSite
+robot-cover-url: http://www.ianett.com/parasite/
+robot-details-url: http://www.ianett.com/parasite/
+robot-owner-name: iaNett.com
+robot-owner-url: http://www.ianett.com/
+robot-owner-email: parasite@ianett.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: ParaSite
+robot-noindex: yes
+robot-nofollow: yes
+robot-host: *.ianett.com
+robot-from: yes
+robot-useragent: ParaSite/0.21 (http://www.ianett.com/parasite/)
+robot-language: c++
+robot-description: Builds index for ianett.com search database. Runs
+ continiously.
+robot-history: Second generation of ianett.com spidering technology,
+ originally called Sven.
+robot-environment: service
+modified-date: July 28, 2000
+modified-by: Marty Anstey
+
+robot-id:               patric
+robot-name:             Patric
+robot-cover-url:        http://www.nwnet.net/technical/ITR/index.html
+robot-details-url:      http://www.nwnet.net/technical/ITR/index.html
+robot-owner-name:       toney@nwnet.net
+robot-owner-url:        http://www.nwnet.net/company/staff/toney
+robot-owner-email:      webmaster@nwnet.net
+robot-status:           development
+robot-purpose:          statistics
+robot-type:             standalone
+robot-platform:         unix
+robot-availability:     data
+robot-exclusion:        yes
+robot-exclusion-useragent: patric       
+robot-noindex:          yes     
+robot-host:             *.nwnet.net     
+robot-from:             no
+robot-useragent:        Patric/0.01a            
+robot-language:         perl
+robot-description:      (contained at http://www.nwnet.net/technical/ITR/index.html )
+robot-history:          (contained at http://www.nwnet.net/technical/ITR/index.html )
+robot-environment:      service 
+modified-date:          Thurs, 15 Aug 1996
+modified-by:            toney@nwnet.net
+
+robot-id:           perignator
+robot-name:         The Peregrinator
+robot-cover-url:    http://www.maths.usyd.edu.au:8000/jimr/pe/Peregrinator.html
+robot-details-url:
+robot-owner-name:   Jim Richardson
+robot-owner-url:    http://www.maths.usyd.edu.au:8000/jimr.html
+robot-owner-email:  jimr@maths.su.oz.au
+robot-status:       
+robot-purpose:      
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         yes
+robot-useragent:    Peregrinator-Mathematics/0.7
+robot-language:     perl 4
+robot-description:  This robot is being used to generate an index of documents
+       on Web sites connected with mathematics and statistics. It
+       ignores off-site links, so does not stray from a list of
+       servers specified initially.
+robot-history:      commenced operation in August 1994
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: perlcrawler
+robot-name: PerlCrawler 1.0
+robot-cover-url: http://perlsearch.hypermart.net/
+robot-details-url: http://www.xav.com/scripts/xavatoria/index.html
+robot-owner-name: Matt McKenzie 
+robot-owner-url: http://perlsearch.hypermart.net/
+robot-owner-email: webmaster@perlsearch.hypermart.net
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: perlcrawler
+robot-noindex: yes
+robot-host: server5.hypermart.net
+robot-from: yes
+robot-useragent: PerlCrawler/1.0 Xavatoria/2.0
+robot-language: perl5
+robot-description: The PerlCrawler robot is designed to index and build
+ a database of pages relating to the Perl programming language.
+robot-history: Originated in modified form on 25 June 1998
+robot-environment: hobby
+modified-date: Fri, 18 Dec 1998 23:37:40 GMT
+modified-by: Matt McKenzie
+
+robot-id:           phantom
+robot-name:         Phantom
+robot-cover-url:    http://www.maxum.com/phantom/
+robot-details-url:
+robot-owner-name:   Larry Burke
+robot-owner-url:    http://www.aktiv.com/
+robot-owner-email:  lburke@aktiv.com
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     Macintosh
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    Duppies
+robot-language:
+robot-description:  Designed to allow webmasters to provide a searchable index
+       of their own site as well as to other sites, perhaps with
+       similar content.
+robot-history:
+robot-environment:
+modified-date:      Fri Jan 19 05:08:15 1996.
+modified-by:
+
+robot-id: piltdownman
+robot-name: PiltdownMan
+robot-cover-url: http://profitnet.bizland.com/
+robot-details-url: http://profitnet.bizland.com/piltdownman.html
+robot-owner-name: Daniel Vilà
+robot-owner-url: http://profitnet.bizland.com/aboutus.html
+robot-owner-email: profitnet@myezmail.com
+robot-status: active
+robot-purpose: statistics
+robot-type: standalone
+robot-platform: windows95, windows98, windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: piltdownman
+robot-noindex: no
+robot-nofollow: no
+robot-host: 62.36.128.*, 194.133.59.*, 212.106.215.*
+robot-from: no
+robot-useragent: PiltdownMan/1.0 profitnet@myezmail.com
+robot-language: c++
+robot-description: The PiltdownMan robot is used to get a
+                   list of links from the search engines
+                   in our database. These links are
+                   followed, and the page that they refer
+                   is downloaded to get some statistics
+                   from them.
+                   The robot runs once a month, more or
+                   less, and visits the first 10 pages
+                   listed in every search engine, for a
+                   group of keywords.
+robot-history: To maintain a database of search engines,
+               we needed an automated tool. That's why
+               we began the creation of this robot.
+robot-environment: service
+modified-date: Mon, 13 Dec 1999 21:50:32 GMT
+modified-by: Daniel Vilà
+
+robot-id:           pioneer
+robot-name:         Pioneer
+robot-cover-url:    http://sequent.uncfsu.edu/~micah/pioneer.html
+robot-details-url:
+robot-owner-name:   Micah A. Williams
+robot-owner-url:    http://sequent.uncfsu.edu/~micah/
+robot-owner-email:  micah@sequent.uncfsu.edu
+robot-status:
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *.uncfsu.edu or flyer.ncsc.org
+robot-from:         yes
+robot-useragent:    Pioneer
+robot-language:     C.
+robot-description:  Pioneer is part of an undergraduate research
+       project.
+robot-history:
+robot-environment:
+modified-date:      Mon Feb  5 02:49:32 1996.
+modified-by:
+
+robot-id:           pitkow
+robot-name:         html_analyzer
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   James E. Pitkow
+robot-owner-url:    
+robot-owner-email:  pitkow@aries.colorado.edu
+robot-status:       
+robot-purpose:      maintainance
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  to check validity of Web servers. I'm not sure if it has
+       ever been run remotely.
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: pjspider
+robot-name: Portal Juice Spider
+robot-cover-url: http://www.portaljuice.com
+robot-details-url: http://www.portaljuice.com/pjspider.html
+robot-owner-name: Nextopia Software Corporation
+robot-owner-url: http://www.portaljuice.com
+robot-owner-email: pjspider@portaljuice.com
+robot-status: active
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: pjspider
+robot-noindex: yes
+robot-host: *.portaljuice.com, *.nextopia.com
+robot-from: yes
+robot-useragent: PortalJuice.com/4.0
+robot-language: C/C++
+robot-description: Indexing web documents for Portal Juice vertical portal
+ search engine
+robot-history: Indexing the web since 1998 for the purposes of offering our
+ commerical Portal Juice search engine services.
+robot-environment: service
+modified-date: Wed Jun 23 17:00:00 EST 1999
+modified-by: pjspider@portaljuice.com
+
+robot-id:           pka
+robot-name:         PGP Key Agent
+robot-cover-url:    http://www.starnet.it/pgp
+robot-details-url:
+robot-owner-name:   Massimiliano Pucciarelli
+robot-owner-url:    http://www.starnet.it/puma
+robot-owner-email:  puma@comm2000.it
+robot-status:       Active
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     UNIX, Windows NT
+robot-availability: none
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         salerno.starnet.it
+robot-from:         yes
+robot-useragent:    PGP-KA/1.2
+robot-language:     Perl 5
+robot-description:  This program search the pgp public key for the 
+                    specified user.
+robot-history:      Originated as a research project at Salerno 
+                    University in 1995.
+robot-environment:  Research
+modified-date:      June 27 1996.
+modified-by:        Massimiliano Pucciarelli
+
+robot-id: plumtreewebaccessor
+robot-name: PlumtreeWebAccessor 
+robot-cover-url:
+robot-details-url: http://www.plumtree.com/
+robot-owner-name: Joseph A. Stanko 
+robot-owner-url:
+robot-owner-email: josephs@plumtree.com
+robot-status: development
+robot-purpose: indexing for the Plumtree Server
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: PlumtreeWebAccessor
+robot-noindex: yes
+robot-host:
+robot-from: yes
+robot-useragent: PlumtreeWebAccessor/0.9
+robot-language: c++
+robot-description: The Plumtree Web Accessor is a component that
+ customers can add to the
+        Plumtree Server to index documents on the World Wide Web.
+robot-history:
+robot-environment: commercial
+modified-date: Thu, 17 Dec 1998
+modified-by: Joseph A. Stanko <josephs@plumtree.com>
+
+robot-id: poppi
+robot-name: Poppi
+robot-cover-url: http://members.tripod.com/poppisearch
+robot-details-url: http://members.tripod.com/poppisearch
+robot-owner-name: Antonio Provenzano
+robot-owner-url: Antonio Provenzano
+robot-owner-email:
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix/linux
+robot-availability: none
+robot-exclusion:
+robot-exclusion-useragent:
+robot-noindex: yes
+robot-host:=20
+robot-from:
+robot-useragent: Poppi/1.0
+robot-language: C
+robot-description: Poppi is a crawler to index the web that runs weekly 
+ gathering and indexing hypertextual, multimedia and executable file 
+ formats
+robot-history: Created by Antonio Provenzano in the april of 2000, has 
+ been acquired from Tomi Officine Multimediali srl and it is next to 
+ release as service and commercial
+robot-environment: service
+modified-date: Mon, 22 May 2000 15:47:30 GMT
+modified-by: Antonio Provenzano
+
+robot-id: portalb
+robot-name: PortalB Spider
+robot-cover-url: http://www.portalb.com/
+robot-details-url:
+robot-owner-name: PortalB Spider Bug List
+robot-owner-url:
+robot-owner-email: spider@portalb.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: PortalBSpider
+robot-noindex: yes
+robot-nofollow: yes
+robot-host: spider1.portalb.com, spider2.portalb.com, etc.
+robot-from: no
+robot-useragent: PortalBSpider/1.0 (spider@portalb.com)
+robot-language: C++
+robot-description: The PortalB Spider indexes selected sites for
+ high-quality business information.
+robot-history:
+robot-environment: service
+
+robot-id: Puu
+robot-name: GetterroboPlus Puu
+robot-details-url: http://marunaka.homing.net/straight/getter/
+robot-cover-url: http://marunaka.homing.net/straight/
+robot-owner-name: marunaka
+robot-owner-url: http://marunaka.homing.net
+robot-owner-email: marunaka@homing.net
+robot-status: active: robot actively in use
+robot-purpose: Purpose of the robot. One or more of:
+  - gathering: gather data of original standerd TAG for Puu contains the
+ information of the sites registered my Search Engin.
+  - maintenance: link validation
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes (Puu patrols only registered url in my Search Engine)
+robot-exclusion-useragent:  Getterrobo-Plus
+robot-noindex:  no
+robot-host: straight FLASH!! Getterrobo-Plus, *.homing.net
+robot-from: yes
+robot-useragent: straight FLASH!! GetterroboPlus 1.5
+robot-language: perl5
+robot-description:
+  Puu robot is used to gater data from registered site in Search Engin
+ "straight FLASH!!" for building anouncement page of state of renewal of
+ registered site in "straight FLASH!!".
+ Robot runs everyday.
+robot-history:
+  This robot patorols based registered sites in Search Engin "straight FLASH!!"
+robot-environment: hobby
+modified-date: Fri, 26 Jun 1998
+
+robot-id:           python
+robot-name:         The Python Robot
+robot-cover-url:    http://www.python.org/
+robot-details-url:  
+robot-owner-name:   Guido van Rossum
+robot-owner-url:    http://www.python.org/~guido/
+robot-owner-email:  guido@python.org
+robot-status:       retired
+robot-purpose:      
+robot-type:         
+robot-platform:     
+robot-availability: none
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: raven 
+robot-name: Raven Search
+robot-cover-url: http://ravensearch.tripod.com
+robot-details-url: http://ravensearch.tripod.com
+robot-owner-name: Raven Group
+robot-owner-url: http://ravensearch.tripod.com
+robot-owner-email: ravensearch@hotmail.com
+robot-status: Development: robot under development
+robot-purpose: Indexing: gather content for commercial query engine.
+robot-type: Standalone: a separate program
+robot-platform: Unix, Windows98, WindowsNT, Windows2000
+robot-availability: None
+robot-exclusion: Yes
+robot-exclusion-useragent: Raven
+robot-noindex: Yes
+robot-nofollow: Yes
+robot-host: 192.168.1.*
+robot-from: Yes
+robot-useragent: Raven-v2
+robot-language: Perl-5
+robot-description: Raven was written for the express purpose of indexing the web.
+ It can parallel process hundreds of URLS's at a time. It runs on a sporadic basis 
+ as testing continues. It is really several programs running concurrently.
+ It takes four computers to run Raven Search. Scalable in sets of four.
+robot-history: This robot is new. First active on March 25, 2000.
+robot-environment: Commercial: is a commercial product. Possibly GNU later ;-)
+modified-date: Fri, 25 Mar 2000 17:28:52 GMT
+modified-by: Raven Group
+
+robot-id:           rbse
+robot-name:         RBSE Spider
+robot-cover-url:    http://rbse.jsc.nasa.gov/eichmann/urlsearch.html
+robot-details-url:
+robot-owner-name:   David Eichmann
+robot-owner-url:    http://rbse.jsc.nasa.gov/eichmann/home.html
+robot-owner-email:  eichmann@rbse.jsc.nasa.gov
+robot-status:       active
+robot-purpose:      indexing, statistics
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         rbse.jsc.nasa.gov (192.88.42.10)
+robot-from:         
+robot-useragent:    
+robot-language:     C, oracle, wais
+robot-description:  Developed and operated as part of the NASA-funded Repository
+       Based Software Engineering Program at the Research Institute
+       for Computing and Information Systems, University of Houston
+       - Clear Lake.
+robot-history:      
+robot-environment:
+modified-date:      Thu May 18 04:47:02 1995
+modified-by:
+
+robot-id:           resumerobot
+robot-name:         Resume Robot
+robot-cover-url:    http://www.onramp.net/proquest/resume/robot/robot.html
+robot-details-url:
+robot-owner-name:   James Stakelum
+robot-owner-url:    http://www.onramp.net/proquest/resume/java/resume.html
+robot-owner-email:  proquest@onramp.net
+robot-status:
+robot-purpose:      indexing.
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    Resume Robot
+robot-language:     C++.
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Tue Mar 12 15:52:25 1996.
+modified-by:
+
+robot-id: rhcs
+robot-name: RoadHouse Crawling System
+robot-cover-url: http://stage.perceval.be (under developpement)
+robot-details-url:
+robot-owner-name: Gregoire Welraeds, Emmanuel Bergmans
+robot-owner-url: http://www.perceval.be
+robot-owner-email: helpdesk@perceval.be
+robot-status: development
+robot-purpose1: indexing
+robot-purpose2: maintenance
+robot-purpose3: statistics
+robot-type: standalone
+robot-platform1: unix (FreeBSD & Linux)
+robot-availability: none
+robot-exclusion: no (under development)
+robot-exclusion-useragent: RHCS
+robot-noindex: no (under development)
+robot-host: stage.perceval.be
+robot-from: no
+robot-useragent: RHCS/1.0a
+robot-language: c
+robot-description: robot used tp build the database for the RoadHouse search service project operated by Perceval  
+robot-history: The need of this robot find its roots in the actual RoadHouse directory not maintenained since 1997
+robot-environment: service
+modified-date: Fri, 26 Feb 1999 12:00:00 GMT
+modified-by: Gregoire Welraeds
+
+robot-id: roadrunner
+robot-name: Road Runner: The ImageScape Robot
+robot-owner-name: LIM Group
+robot-owner-email: lim@cs.leidenuniv.nl
+robot-status: development/active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: UNIX
+robot-exclusion: yes
+robot-exclusion-useragent: roadrunner
+robot-useragent: Road Runner: ImageScape Robot (lim@cs.leidenuniv.nl)
+robot-language: C, perl5
+robot-description: Create Image/Text index for WWW
+robot-history: ImageScape Project
+robot-environment: commercial service
+modified-date: Dec. 1st, 1996
+
+robot-id: robbie
+robot-name: Robbie the Robot
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Robert H. Pollack
+robot-owner-url:
+robot-owner-email: robert.h.pollack@lmco.com
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix, windows95, windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Robbie
+robot-noindex: no
+robot-host: *.lmco.com
+robot-from: yes
+robot-useragent: Robbie/0.1
+robot-language: java
+robot-description: Used to define document collections for the DISCO system.
+                   Robbie is still under development and runs several
+                   times a day, but usually only for ten minutes or so.
+                   Sites are visited in the order in which references
+                   are found, but no host is visited more than once in
+                   any two-minute period.
+robot-history: The DISCO system is a resource-discovery component in
+               the OLLA system, which is a prototype system, developed
+               under DARPA funding, to support computer-based education
+               and training.
+robot-environment: research
+modified-date: Wed,  5 Feb 1997 19:00:00 GMT
+modified-by:
+
+
+robot-id: robi
+robot-name: ComputingSite Robi/1.0
+robot-cover-url: http://www.computingsite.com/robi/
+robot-details-url: http://www.computingsite.com/robi/
+robot-owner-name: Tecor Communications S.L.
+robot-owner-url: http://www.tecor.com/
+robot-owner-email: robi@computingsite.com
+robot-status: Active
+robot-purpose: indexing,maintenance
+robot-type: standalone
+robot-platform: UNIX
+robot-availability:
+robot-exclusion: yes
+robot-exclusion-useragent: robi
+robot-noindex: no
+robot-host: robi.computingsite.com
+robot-from:
+robot-useragent: ComputingSite Robi/1.0 (robi@computingsite.com)
+robot-language: python
+robot-description: Intelligent agent used to build the ComputingSite Search
+ Directory.
+robot-history: It was born on August 1997.
+robot-environment: service
+modified-date: Wed, 13 May 1998 17:28:52 GMT
+modified-by: Jorge Alegre
+
+robot-id:           roverbot
+robot-name:         Roverbot
+robot-cover-url:    http://www.roverbot.com/
+robot-details-url:
+robot-owner-name:   GlobalMedia Design (Andrew Cowan & Brian
+       Clark)
+robot-owner-url:    http://www.radzone.org/gmd/
+robot-owner-email:  gmd@spyder.net
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         roverbot.com
+robot-from:         yes
+robot-useragent:    Roverbot
+robot-language:     perl5
+robot-description:  Targeted email gatherer utilizing user-defined seed points
+       and interacting with both the webserver and MX servers of
+       remote sites.
+robot-history:
+robot-environment:
+modified-date:      Tue Jun 18 19:16:31 1996.
+modified-by:
+
+robot-id:           safetynetrobot
+robot-name:         SafetyNet Robot
+robot-cover-url:    http://www.urlabs.com/
+robot-details-url:
+robot-owner-name:   Michael L. Nelson
+robot-owner-url:    http://www.urlabs.com/
+robot-owner-email:  m.l.nelson@urlabs.com
+robot-status:
+robot-purpose:      indexing.
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no.
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *.urlabs.com
+robot-from:         yes
+robot-useragent:    SafetyNet Robot 0.1, 
+robot-language:     Perl 5
+robot-description:  Finds URLs for K-12 content management.
+robot-history:
+robot-environment:
+modified-date:      Sat Mar 23 20:12:39 1996.
+modified-by:
+
+robot-id: scooter
+robot-name: Scooter
+robot-cover-url: http://www.altavista.com/
+robot-details-url: http://www.altavista.com/av/content/addurl.htm
+robot-owner-name: AltaVista
+robot-owner-url: http://www.altavista.com/
+robot-owner-email: scooter@pa.dec.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Scooter
+robot-noindex: yes
+robot-host: *.av.pa-x.dec.com
+robot-from: yes
+robot-useragent: Scooter/2.0 G.R.A.B. V1.1.0
+robot-language: c
+robot-description: Scooter is AltaVista's prime index agent.
+robot-history: Version 2 of Scooter/1.0 developed by Louis Monier of WRL.
+robot-environment: service
+modified-date: Wed, 13 Jan 1999 17:18:59 GMT
+modified-by: steves@avs.dec.com
+
+robot-id: search_au
+robot-name: Search.Aus-AU.COM
+robot-details-url: http://Search.Aus-AU.COM/
+robot-cover-url: http://Search.Aus-AU.COM/
+robot-owner-name: Dez Blanchfield
+robot-owner-url: not currently available
+robot-owner-email: dez@geko.com
+robot-status: - development: robot under development
+robot-purpose: - indexing: gather content for an indexing service
+robot-type: - standalone: a separate program
+robot-platform: - mac - unix - windows95 - windowsNT
+robot-availability: - none
+robot-exclusion: yes
+robot-exclusion-useragent: Search-AU
+robot-noindex: yes
+robot-host: Search.Aus-AU.COM, 203.55.124.29, 203.2.239.29
+robot-from: no
+robot-useragent: not available
+robot-language: c, perl, sql
+robot-description: Search-AU is a development tool I have built
+ to investigate the power of a search engine and web crawler
+ to give me access to a database of web content ( html / url's )
+ and address's etc from which I hope to build more accurate stats
+ about the .au zone's web content.
+ the robot started crawling from http://www.geko.net.au/ on
+ march 1st, 1998 and after nine days had 70mb of compressed ascii
+ in a database to work with. i hope to run a refresh of the crawl
+ every month initially, and soon every week bandwidth and cpu allowing.
+ if the project warrants further development, i will turn it into
+ an australian ( .au ) zone search engine and make it commercially
+ available for advertising to cover the costs which are starting
+ to mount up. --dez (980313 - black friday!)
+robot-environment: - hobby: written as a hobby
+modified-date: Fri Mar 13 10:03:32 EST 1998
+
+robot-id: searchprocess
+robot-name: SearchProcess
+robot-cover-url: http://www.searchprocess.com
+robot-details-url: http://www.intelligence-process.com
+robot-owner-name: Mannina Bruno
+robot-owner-url: http://www.intelligence-process.com
+robot-owner-email: bruno@intelligence-process.com
+robot-status: active
+robot-purpose: Statistic
+robot-type: browser
+robot-platform: linux
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: searchprocess
+robot-noindex: yes
+robot-host: searchprocess.com
+robot-from: yes
+robot-useragent: searchprocess/0.9
+robot-language: perl
+robot-description: An intelligent Agent Online. SearchProcess is used to
+ provide structured information to user.
+robot-history: This is the son of Auresys
+robot-environment: Service freeware
+modified-date: Thus, 22 Dec 1999
+modified-by: Mannina Bruno
+
+robot-id:           senrigan
+robot-name:         Senrigan
+robot-cover-url:    http://www.info.waseda.ac.jp/search-e.html
+robot-details-url:
+robot-owner-name:   TAMURA Kent
+robot-owner-url:    http://www.info.waseda.ac.jp/muraoka/members/kent/
+robot-owner-email:  kent@muraoka.info.waseda.ac.jp
+robot-status:       active
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     Java
+robot-availability: none
+robot-exclusion:    yes
+robot-exclusion-useragent:Senrigan
+robot-noindex:      yes
+robot-host:         aniki.olu.info.waseda.ac.jp
+robot-from:         yes
+robot-useragent:    Senrigan/xxxxxx
+robot-language:     Java
+robot-description:  This robot now gets HTMLs from only jp domain.
+robot-history:      It has been running since Dec 1994
+robot-environment:  research
+modified-date:      Mon Jul  1 07:30:00 GMT 1996
+modified-by:        TAMURA Kent
+
+robot-id:           sgscout
+robot-name:         SG-Scout
+robot-cover-url:    http://www-swiss.ai.mit.edu/~ptbb/SG-Scout/SG-Scout.html
+robot-details-url:
+robot-owner-name:   Peter Beebee
+robot-owner-url:    http://www-swiss.ai.mit.edu/~ptbb/personal/index.html
+robot-owner-email:  ptbb@ai.mit.edu, beebee@parc.xerox.com
+robot-status:       active
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         beta.xerox.com
+robot-from:         yes
+robot-useragent:    SG-Scout
+robot-language:     
+robot-description:  Does a "server-oriented" breadth-first search in a
+       round-robin fashion, with multiple processes.
+robot-history:      Run since 27 June 1994, for an internal XEROX research
+       project
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:shaggy
+robot-name:ShagSeeker
+robot-cover-url:http://www.shagseek.com
+robot-details-url:
+robot-owner-name:Joseph Reynolds
+robot-owner-url:http://www.shagseek.com
+robot-owner-email:joe.reynolds@shagseek.com
+robot-status:active
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:unix
+robot-availability:data
+robot-exclusion:yes
+robot-exclusion-useragent:Shagseeker
+robot-noindex:yes
+robot-host:shagseek.com
+robot-from:
+robot-useragent:Shagseeker at http://www.shagseek.com /1.0
+robot-language:perl5
+robot-description:Shagseeker is the gatherer for the Shagseek.com search 
+ engine and goes out weekly.
+robot-history:none yet
+robot-environment:service
+modified-date:Mon 17 Jan 2000 10:00:00 EST
+modified-by:Joseph Reynolds
+
+robot-id: shaihulud
+robot-name: Shai'Hulud
+robot-cover-url: 
+robot-details-url:
+robot-owner-name: Dimitri Khaoustov
+robot-owner-url:
+robot-owner-email: shawdow@usa.net
+robot-status: active
+robot-purpose: mirroring
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: no
+robot-exclusion-useragent: 
+robot-noindex: no
+robot-host: *.rdtex.ru
+robot-from:
+robot-useragent: Shai'Hulud
+robot-language: C
+robot-description: Used to build mirrors for internal use
+robot-history: This robot finds its roots in a research project at RDTeX 
+        Perspective Projects Group in 1996
+robot-environment: research
+modified-date: Mon, 5 Aug 1996 14:35:08 GMT
+modified-by: Dimitri Khaoustov
+
+robot-id: sift
+robot-name: Sift
+robot-cover-url: http://www.worthy.com/
+robot-details-url: http://www.worthy.com/
+robot-owner-name: Bob Worthy    
+robot-owner-url: http://www.worthy.com/~bworthy  
+robot-owner-email: bworthy@worthy.com
+robot-status: development, active  
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: sift
+robot-noindex: yes
+robot-host: www.worthy.com
+robot-from:
+robot-useragent: libwww-perl-5.41
+robot-language: perl
+robot-description: Subject directed (via key phrase list) indexing.
+robot-history: Libwww of course, implementation using MySQL August, 1999.
+ Indexing Search and Rescue sites.
+robot-environment: research, service
+modified-date: Sat, 16 Oct 1999 19:40:00 GMT
+modified-by: Bob Worthy
+
+robot-id: simbot
+robot-name: Simmany Robot Ver1.0
+robot-cover-url: http://simmany.hnc.net/
+robot-details-url: http://simmany.hnc.net/irman1.html
+robot-owner-name: Youngsik, Lee(\ e@L?5=D\ f)
+robot-owner-url:
+robot-owner-email: ailove@hnc.co.kr
+robot-status: development & active
+robot-purpose: indexing, maintenance, statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: SimBot
+robot-noindex: no 
+robot-host: sansam.hnc.net
+robot-from: no
+robot-useragent: SimBot/1.0
+robot-language: C
+robot-description: The Simmany Robot is used to build the Map(DB) for
+ the simmany service operated by HNC(Hangul & Computer Co., Ltd.). The
+ robot runs weekly, and visits sites that have a useful korean
+ information in a defined order.
+robot-history: This robot is a part of simmany service and simmini
+ products. The simmini is the Web products that make use of the indexing
+ and retrieving modules of simmany.
+robot-environment: service, commercial
+modified-date: Thu, 19 Sep 1996 07:02:26 GMT
+modified-by: Youngsik, Lee
+
+robot-id: site-valet
+robot-name: Site Valet
+robot-cover-url: http://valet.webthing.com/
+robot-details-url: http://valet.webthing.com/
+robot-owner-name: Nick Kew
+robot-owner-url:
+robot-owner-email: nick@webthing.com
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: data
+robot-exclusion: yes
+robot-exclusion-useragent: Site Valet
+robot-noindex: no
+robot-host: valet.webthing.com,valet.*
+robot-from: yes
+robot-useragent: Site Valet
+robot-language: perl
+robot-description: a deluxe site monitoring and analysis service
+robot-history: builds on cg-eye, the WDG Validator, and the Link Valet
+robot-environment: service
+modified-date: Tue, 27 June 2000
+modified-by: nick@webthing.com
+
+robot-id: sitegrabber
+robot-name: Open Text Index Robot
+robot-cover-url: http://index.opentext.net/main/faq.html
+robot-details-url: http://index.opentext.net/OTI_Robot.html
+robot-owner-name: John Faichney
+robot-owner-url:
+robot-owner-email: faichney@opentext.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: UNIX
+robot-availability: inquire to markk@opentext.com (Mark Kraatz)
+robot-exclusion: yes
+robot-exclusion-useragent: Open Text Site Crawler
+robot-noindex: no
+robot-host: *.opentext.com
+robot-from: yes
+robot-useragent: Open Text Site Crawler V1.0
+robot-language: perl/C
+robot-description: This robot is run by Open Text Corporation to produce the
+ data for the Open Text Index
+robot-history: Started in May/95 to replace existing Open Text robot which
+ was based on libwww
+robot-environment: commercial
+modified-date: Fri Jul 25 11:46:56 EDT 1997
+modified-by: John Faichney
+
+robot-id:           sitetech
+robot-name:         SiteTech-Rover
+robot-cover-url:    http://www.sitetech.com/
+robot-details-url:
+robot-owner-name:   Anil Peres-da-Silva
+robot-owner-url:    http://www.sitetech.com
+robot-owner-email:  adasilva@sitetech.com
+robot-status:
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    SiteTech-Rover
+robot-language:     C++.
+robot-description:  Originated as part of a suite of Internet Products to
+        organize, search & navigate Intranet sites and to validate
+        links in HTML documents.
+robot-history: This robot originally went by the name of LiberTech-Rover
+robot-environment:
+modified-date:      Fri Aug 9 17:06:56 1996.
+modified-by: Anil Peres-da-Silva
+
+robot-id: slurp
+robot-name: Inktomi Slurp
+robot-cover-url: http://www.inktomi.com/
+robot-details-url: http://www.inktomi.com/slurp.html
+robot-owner-name: Inktomi Corporation
+robot-owner-url: http://www.inktomi.com/
+robot-owner-email: slurp@inktomi.com
+robot-status: active
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: slurp
+robot-noindex: yes
+robot-host: *.inktomi.com
+robot-from: yes
+robot-useragent: Slurp/2.0
+robot-language: C/C++
+robot-description: Indexing documents for the HotBot search engine
+               (www.hotbot.com), collecting Web statistics
+robot-history: Switch from Slurp/1.0 to Slurp/2.0 November 1996
+robot-environment: service
+modified-date: Fri Feb 28 13:57:43 PST 1997
+modified-by: slurp@inktomi.com
+
+robot-id: smartspider
+robot-name: Smart Spider
+robot-cover-url: http://www.travel-finder.com
+robot-details-url: http://www.engsoftware.com/robots.htm
+robot-owner-name: Ken Wadland
+robot-owner-url: http://www.engsoftware.com
+robot-owner-email: ken@engsoftware.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windows95, windowsNT
+robot-availability: data, binary, source
+robot-exclusion: Yes
+robot-exclusion-useragent: ESI
+robot-noindex: Yes
+robot-host: 207.16.241.*
+robot-from: Yes
+robot-useragent: ESISmartSpider/2.0
+robot-language: C++
+robot-description:  Classifies sites using a Knowledge Base.   Robot collects 
+        web pages which are then parsed and feed to the Knowledge Base.  The
+ Knowledge Base classifies the sites into any of hundreds of     categories
+ based on the vocabulary used.  Currently used by:       //www.travel-finder.com
+ (Travel and Tourist Info) and   //www.golightway.com (Christian Sites).
+ Several options exist to        control whether sites are discovered and/or
+ classified fully        automatically, full manually    or somewhere in between.
+robot-history: Feb '96 -- Product design begun.  May '96 -- First data
+ results         published by Travel-Finder.  Oct '96 -- Generalized and announced
+ and a   product for other sites.  Jan '97 -- First data results published by
+        GoLightWay.
+robot-environment: service, commercial
+modified-date: Mon, 13 Jan 1997 10:41:00 EST
+modified-by: Ken Wadland
+
+robot-id: snooper
+robot-name: Snooper
+robot-cover-url: http://darsun.sit.qc.ca
+robot-details-url:
+robot-owner-name: Isabelle A. Melnick
+robot-owner-url:
+robot-owner-email: melnicki@sit.ca
+robot-status: part under development and part active
+robot-purpose:
+robot-type:
+robot-platform:
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: snooper
+robot-noindex:
+robot-host:
+robot-from:
+robot-useragent: Snooper/b97_01
+robot-language:
+robot-description:
+robot-history:
+robot-environment:
+modified-date:
+modified-by:
+
+robot-id: solbot
+robot-name: Solbot
+robot-cover-url: http://kvasir.sol.no/
+robot-details-url:
+robot-owner-name: Frank Tore Johansen
+robot-owner-url:
+robot-owner-email: ftj@sys.sol.no
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: solbot
+robot-noindex: yes
+robot-host: robot*.sol.no
+robot-from:
+robot-useragent: Solbot/1.0 LWP/5.07
+robot-language: perl, c
+robot-description: Builds data for the Kvasir search service.  Only searches
+ sites which ends with one of the following domains: "no", "se", "dk", "is", "fi"robot-history: This robot is the result of a 3 years old late night hack when
+ the Verity robot (of that time) was unable to index sites with iso8859
+ characters (in URL and other places), and we just _had_ to have something up and going the next day...
+robot-environment: service
+modified-date: Tue Apr  7 16:25:05 MET DST 1998
+modified-by: Frank Tore Johansen <ftj@sys.sol.no>
+
+robot-id: spanner
+robot-name: Spanner
+robot-cover-url: http://www.kluge.net/NES/spanner/
+robot-details-url: http://www.kluge.net/NES/spanner/
+robot-owner-name: Theo Van Dinter
+robot-owner-url: http://www.kluge.net/~felicity/
+robot-owner-email: felicity@kluge.net
+robot-status: development
+robot-purpose: indexing,maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: Spanner
+robot-noindex: yes
+robot-host: *.kluge.net
+robot-from: yes
+robot-useragent: Spanner/1.0 (Linux 2.0.27 i586)
+robot-language: perl
+robot-description: Used to index/check links on an intranet.
+robot-history: Pet project of the author since beginning of 1996.
+robot-environment: hobby
+modified-date: Mon, 06 Jan 1997 00:00:00 GMT
+modified-by: felicity@kluge.net
+
+robot-id:speedy
+robot-name:Speedy Spider
+robot-cover-url:http://www.entireweb.com/
+robot-details-url:http://www.entireweb.com/speedy.html
+robot-owner-name:WorldLight.com AB
+robot-owner-url:http://www.worldlight.com
+robot-owner-email:speedy@worldlight.com
+robot-status:active
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:Windows
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:speedy
+robot-noindex:yes
+robot-host:router-00.sverige.net, 193.15.210.29, *.entireweb.com,
+ *.worldlight.com
+robot-from:yes
+robot-useragent:Speedy Spider ( http://www.entireweb.com/speedy.html )
+robot-language:C, C++
+robot-description:Speedy Spider is used to build the database
+           for the Entireweb.com search service operated by WorldLight.com
+           (part of WorldLight Network).
+           The robot runs constantly, and visits sites in a random order.
+robot-history:This robot is a part of the highly advanced search engine
+ Entireweb.com, that was developed in Halmstad, Sweden during 1998-2000.
+robot-environment:service, commercial
+modified-date:Mon, 17 July 2000 11:05:03 GMT
+modified-by:Marcus Andersson
+
+robot-id: spider_monkey
+robot-name: spider_monkey
+robot-cover-url: http://www.mobrien.com/add_site.html
+robot-details-url: http://www.mobrien.com/add_site.html
+robot-owner-name: MPRM Group Limited
+robot-owner-url: http://www.mobrien.com
+robot-owner-email: mprm@ionsys.com
+robot-status: robot actively in use
+robot-purpose: gather content for a free indexing service
+robot-type: FDSE robot
+robot-platform: unix
+robot-availability: bulk data gathered by robot available
+robot-exclusion: yes
+robot-exclusion-useragent: spider_monkey
+robot-noindex: yes
+robot-host: snowball.ionsys.com
+robot-from: yes
+robot-useragent: mouse.house/7.1
+robot-language: perl5
+robot-description: Robot runs every 30 days for a full index and weekly =
+ on a list of accumulated visitor requests
+robot-history: This robot is under development and currently active
+robot-environment: written as an employee / guest service
+modified-date: Mon, 22 May 2000 12:28:52 GMT
+modified-by: MPRM Group Limited
+
+robot-id: spiderbot
+robot-name: SpiderBot
+robot-cover-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/cover.htm
+robot-details-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/details.htm
+robot-owner-name: Ignacio Cruzado Nu.o
+robot-owner-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/icruzadn.htm
+robot-owner-email: spidrboticruzado@solaria.emp.ubu.es
+robot-status: active
+robot-purpose: indexing, mirroring
+robot-type: standalone, browser
+robot-platform: unix, windows, windows95, windowsNT
+robot-availability: source, binary, data
+robot-exclusion: yes
+robot-exclusion-useragent: SpiderBot/1.0
+robot-noindex: yes
+robot-host: *
+robot-from: yes
+robot-useragent: SpiderBot/1.0
+robot-language: C++, Tcl
+robot-description: Recovers Web Pages and saves them on your hard disk.  Then it reindexes them.
+robot-history: This Robot belongs to Ignacio Cruzado Nu.o End of Studies Thesis "Recuperador p.ginas Web", to get the titulation of "Management Tecnical Informatics Engineer" in the  for the Burgos University in Spain.
+robot-environment: research
+modified-date: Sun, 27 Jun 1999 09:00:00 GMT
+modified-by: Ignacio Cruzado Nu.o
+
+robot-id:spiderman
+robot-name:SpiderMan
+robot-cover-url:http://www.comp.nus.edu.sg/~leunghok
+robot-details-url:http://www.comp.nus.edu.sg/~leunghok/honproj.html
+robot-owner-name:Leung Hok Peng , The School Of Computing Nus , Singapore
+robot-owner-url:http://www.comp.nus.edu.sg/~leunghok
+robot-owner-email:leunghok@comp.nus.edu.sg
+robot-status:development & active
+robot-purpose:user searching using IR technique
+robot-type:stand alone
+robot-platform:Java 1.2
+robot-availability:binary&source
+robot-exclusion:no
+robot-exclusion-useragent:nil
+robot-noindex:no
+robot-host:NA
+robot-from:NA
+robot-useragent:SpiderMan 1.0
+robot-language:java
+robot-description:It is used for any user to search the web given a query string
+robot-history:Originated from The Center for Natural Product Research and The
+ School of computing National University Of Singapore
+robot-environment:research
+modified-date:08/08/1999
+modified-by:Leung Hok Peng and Dr Hsu Wynne
+
+robot-id:           spry
+robot-name:         Spry Wizard Robot
+robot-cover-url:    http://www.spry.com/wizard/index.html
+robot-details-url:
+robot-owner-name:   spry
+robot-owner-url:    ttp://www.spry.com/index.html
+robot-owner-email:  info@spry.com
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         wizard.spry.com or tiger.spry.com
+robot-from:         no
+robot-useragent:    no
+robot-language:     
+robot-description:  Its purpose is to generate a Resource Discovery database
+       Spry is refusing to give any comments about this
+       robot
+robot-history:      
+robot-environment:
+modified-date:      Tue Jul 11 09:29:45 GMT 1995
+modified-by:
+
+robot-id: ssearcher
+robot-name: Site Searcher
+robot-cover-url: www.satacoy.com
+robot-details-url: www.satacoy.com
+robot-owner-name: Zackware
+robot-owner-url: www.satacoy.com
+robot-owner-email: zackware@hotmail.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: winows95, windows98, windowsNT
+robot-availability: binary
+robot-exclusion: no
+robot-exclusion-useragent:
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: ssearcher100
+robot-language: C++
+robot-description: Site Searcher scans web sites for specific file types.
+ (JPG, MP3, MPG, etc)
+robot-history:  Released 4/4/1999
+robot-environment: hobby
+modified-date: 04/26/1999
+
+robot-id: suke
+robot-name: Suke
+robot-cover-url: http://www.kensaku.org/
+robot-details-url: http://www.kensaku.org/
+robot-owner-name: Yosuke Kuroda
+robot-owner-url: http://www.kensaku.org/yk/
+robot-owner-email: robot@kensaku.org
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: FreeBSD3.*
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: suke
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: suke/*.*
+robot-language: c
+robot-description: This robot visits mainly sites in japan.
+robot-history: since 1999
+robot-environment: service
+
+robot-id: sven
+robot-name: Sven
+robot-cover-url: 
+robot-details-url: http://marty.weathercity.com/sven/
+robot-owner-name: Marty Anstey
+robot-owner-url: http://marty.weathercity.com/
+robot-owner-email: rhondle@home.com
+robot-status: Active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Windows
+robot-availability: none
+robot-exclusion: no
+robot-exclusion-useragent: 
+robot-noindex: no
+robot-host: 24.113.12.29
+robot-from: no
+robot-useragent:
+robot-language: VB5
+robot-description: Used to gather sites for netbreach.com. Runs constantly.
+robot-history: Developed as an experiment in web indexing.
+robot-environment: hobby, service
+modified-date: Tue, 3 Mar 1999 08:15:00 PST
+modified-by: Marty Anstey
+
+robot-id: tach_bw
+robot-name: TACH Black Widow
+robot-cover-url: http://theautochannel.com/~mjenn/bw.html
+robot-details-url: http://theautochannel.com/~mjenn/bw-syntax.html
+robot-owner-name: Michael Jennings
+robot-owner-url: http://www.spd.louisville.edu/~mejenn01/
+robot-owner-email: mjenn@theautochannel.com
+robot-status: development
+robot-purpose: maintenance: link validation
+robot-type: standalone
+robot-platform: UNIX, Linux
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: tach_bw
+robot-noindex: no
+robot-host: *.theautochannel.com
+robot-from: yes
+robot-useragent: Mozilla/3.0 (Black Widow v1.1.0; Linux 2.0.27; Dec 31 1997 12:25:00
+robot-language: C/C++
+robot-description: Exhaustively recurses a single site to check for broken links
+robot-history: Corporate application begun in 1996 for The Auto Channel
+robot-environment: commercial
+modified-date: Thu, Jan 23 1997 23:09:00 GMT
+modified-by: Michael Jennings
+
+robot-id:tarantula
+robot-name: Tarantula
+robot-cover-url: http://www.nathan.de/nathan/software.html#TARANTULA
+robot-details-url: http://www.nathan.de/
+robot-owner-name: Markus Hoevener
+robot-owner-url:
+robot-owner-email: Markus.Hoevener@evision.de
+robot-status: development
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: yes
+robot-noindex: yes
+robot-host: yes
+robot-from: no
+robot-useragent: Tarantula/1.0
+robot-language: C
+robot-description: Tarantual gathers information for german search engine Nathanrobot-history: Started February 1997
+robot-environment: service
+modified-date: Mon, 29 Dec 1997 15:30:00 GMT
+modified-by: Markus Hoevener
+
+robot-id:           tarspider
+robot-name:         tarspider
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Olaf Schreck
+robot-owner-url:    http://www.chemie.fu-berlin.de/user/chakl/ChaklHome.html
+robot-owner-email:  chakl@fu-berlin.de
+robot-status:       
+robot-purpose:      mirroring
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         chakl@fu-berlin.de
+robot-useragent:    tarspider
+robot-language:     
+robot-description:  
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           tcl
+robot-name:         Tcl W3 Robot
+robot-cover-url:    http://hplyot.obspm.fr/~dl/robo.html
+robot-details-url:
+robot-owner-name:   Laurent Demailly
+robot-owner-url:    http://hplyot.obspm.fr/~dl/
+robot-owner-email:  dl@hplyot.obspm.fr
+robot-status:       
+robot-purpose:      maintenance, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         hplyot.obspm.fr
+robot-from:         yes
+robot-useragent:    dlw3robot/x.y (in TclX by http://hplyot.obspm.fr/~dl/)
+robot-language:     tcl
+robot-description:  Its purpose is to validate links, and generate
+       statistics.
+robot-history:      
+robot-environment:
+modified-date:      Tue May 23 17:51:39 1995
+modified-by:
+
+robot-id: techbot
+robot-name: TechBOT
+robot-cover-url: http://www.techaid.net/
+robot-details-url: http://www.echaid.net/TechBOT/
+robot-owner-name: TechAID Internet Services
+robot-owner-url: http://www.techaid.net/
+robot-owner-email: techbot@techaid.net
+robot-status: active
+robot-purpose:statistics, maintenance
+robot-type: standalone
+robot-platform: Unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: TechBOT
+robot-noindex: yes
+robot-host: techaid.net
+robot-from: yes
+robot-useragent: TechBOT
+robot-language: perl5
+robot-description: TechBOT is constantly upgraded. Currently he is used for
+ Link Validation, Load Time, HTML Validation and much much more.
+robot-history: TechBOT started his life as a Page Change Detection robot,
+ but has taken on many new and exciting roles.
+robot-environment: service
+modified-date: Sat, 18 Dec 1998 14:26:00 EST
+modified-by: techbot@techaid.net
+
+robot-id: templeton
+robot-name: Templeton
+robot-cover-url: http://www.bmtmicro.com/catalog/tton/
+robot-details-url: http://www.bmtmicro.com/catalog/tton/
+robot-owner-name: Neal Krawetz
+robot-owner-url: http://www.cs.tamu.edu/people/nealk/
+robot-owner-email: nealk@net66.com
+robot-status: active
+robot-purpose: mirroring, mapping, automating web applications
+robot-type: standalone
+robot-platform: OS/2, Linux, SunOS, Solaris
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: templeton
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: Templeton/{version} for {platform}
+robot-language: C
+robot-description: Templeton is a very configurable robots for mirroring, mapping, and automating applications on retrieved documents.
+robot-history: This robot was originally created as a test-of-concept.
+robot-environment: service, commercial, research, hobby
+modified-date: Sun, 6 Apr 1997 10:00:00 GMT
+modified-by: Neal Krawetz
+
+robot-id: titin
+robot-name: TitIn
+robot-cover-url: http://www.foi.hr/~dpavlin/titin/
+robot-details-url: http://www.foi.hr/~dpavlin/titin/tehnical.htm
+robot-owner-name: Dobrica Pavlinusic
+robot-owner-url: http://www.foi.hr/~dpavlin/
+robot-owner-email: dpavlin@foi.hr
+robot-status: development
+robot-purpose: indexing, statistics
+robot-type: standalone
+robot-platform: unix
+robot-availability: data, source on request
+robot-exclusion: yes
+robot-exclusion-useragent: titin
+robot-noindex: no
+robot-host: barok.foi.hr
+robot-from: no
+robot-useragent: TitIn/0.2
+robot-language: perl5, c
+robot-description:
+        The TitIn is used to index all titles of Web server in
+        .hr domain.
+robot-history:
+        It was done as result of desperate need for central index of
+        Croatian web servers in December 1996.
+robot-environment: research
+modified-date: Thu, 12 Dec 1996 16:06:42 MET
+modified-by: Dobrica Pavlinusic
+
+robot-id:           titan
+robot-name:         TITAN
+robot-cover-url:    http://isserv.tas.ntt.jp/chisho/titan-e.html
+robot-details-url:  http://isserv.tas.ntt.jp/chisho/titan-help/eng/titan-help-e.html
+robot-owner-name:   Yoshihiko HAYASHI
+robot-owner-url:    
+robot-owner-email:  hayashi@nttnly.isl.ntt.jp
+robot-status:       active
+robot-purpose:      indexing
+robot-type:         standalone
+robot-platform:     SunOS 4.1.4
+robot-availability: no
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         nlptitan.isl.ntt.jp
+robot-from:         yes
+robot-useragent:    TITAN/0.1
+robot-language:     perl 4
+robot-description:  Its purpose is to generate a Resource Discovery
+    database, and copy document trees. Our primary goal is to develop
+    an advanced method for indexing the WWW documents. Uses libwww-perl
+robot-history:      
+robot-environment:
+modified-date:      Mon Jun 24 17:20:44 PDT 1996
+modified-by:        Yoshihiko HAYASHI
+
+robot-id:           tkwww
+robot-name:         The TkWWW Robot
+robot-cover-url:    http://fang.cs.sunyit.edu/Robots/tkwww.html
+robot-details-url:
+robot-owner-name:   Scott Spetka
+robot-owner-url:    http://fang.cs.sunyit.edu/scott/scott.html
+robot-owner-email:  scott@cs.sunyit.edu
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  It is designed to search Web neighborhoods to find pages
+       that may be logically related. The Robot returns a list of
+       links that looks like a hot list. The search can be by key
+       word or all links at a distance of one or two hops may be
+       returned. The TkWWW Robot is described in a paper presented
+       at the WWW94 Conference in Chicago.
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: tlspider
+robot-name:TLSpider
+robot-cover-url: n/a
+robot-details-url: n/a
+robot-owner-name: topiclink.com
+robot-owner-url: topiclink.com
+robot-owner-email: tlspider@outtel.com
+robot-status: not activated
+robot-purpose: to get web sites and add them to the topiclink future directory
+robot-type:development: robot under development
+robot-platform:linux
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:topiclink
+robot-noindex:no
+robot-host: tlspider.topiclink.com (not avalible yet)
+robot-from:no
+robot-useragent:TLSpider/1.1
+robot-language:perl5
+robot-description:This robot runs 2 days a week getting information for
+ TopicLink.com
+robot-history:This robot was created to server for the internet search engine
+ TopicLink.com
+robot-environment:service
+modified-date:September,10,1999 17:28 GMT
+modified-by: TopicLink Spider Team
+
+robot-id:           ucsd
+robot-name:         UCSD Crawl
+robot-cover-url:    http://www.mib.org/~ucsdcrawl
+robot-details-url:
+robot-owner-name:   Adam Tilghman
+robot-owner-url:    http://www.mib.org/~atilghma
+robot-owner-email:  atilghma@mib.org
+robot-status:
+robot-purpose:      indexing, statistics
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         nuthaus.mib.org scilib.ucsd.edu
+robot-from:         yes
+robot-useragent:    UCSD-Crawler
+robot-language:     Perl 4
+robot-description:  Should hit ONLY within UC San Diego - trying to count
+       servers here.
+robot-history:
+robot-environment:
+modified-date:      Sat Jan 27 09:21:40 1996.
+modified-by:
+
+robot-id: udmsearch
+robot-name: UdmSearch
+robot-details-url: http://mysearch.udm.net/
+robot-cover-url: http://mysearch.udm.net/
+robot-owner-name: Alexander Barkov
+robot-owner-url: http://mysearch.udm.net/
+robot-owner-email: bar@izhcom.ru
+robot-status: active
+robot-purpose: indexing, validation
+robot-type: standalone
+robot-platform: unix
+robot-availability: source, binary
+robot-exclusion: yes
+robot-exclusion-useragent: UdmSearch
+robot-noindex: yes
+robot-host: *
+robot-from: no
+robot-useragent: UdmSearch/2.1.1
+robot-language: c
+robot-description: UdmSearch is a free web search engine software for
+ intranet/small domain internet servers
+robot-history: Developed since 1998, origin purpose is a search engine
+ over republic of Udmurtia http://search.udm.net
+robot-environment: hobby
+modified-date: Mon, 6 Sep 1999 10:28:52 GMT
+
+robot-id:                   urlck
+robot-name:                 URL Check
+robot-cover-url:            http://www.cutternet.com/products/webcheck.html
+robot-details-url:          http://www.cutternet.com/products/urlck.html
+robot-owner-name:           Dave Finnegan
+robot-owner-url:            http://www.cutternet.com
+robot-owner-email:          dave@cutternet.com
+robot-status:               active
+robot-purpose:              maintenance
+robot-type:                 standalone
+robot-platform:             unix
+robot-availability:         binary
+robot-exclusion:            yes
+robot-exclusion-useragent:  urlck
+robot-noindex:              no
+robot-host:                 *
+robot-from:                 yes
+robot-useragent:            urlck/1.2.3
+robot-language:             c
+robot-description:          The robot is used to manage, maintain, and modify
+                            web sites.  It builds a database detailing the
+                            site, builds HTML reports describing the site, and
+                            can be used to up-load pages to the site or to
+                            modify existing pages and URLs within the site.  It
+                            can also be used to mirror whole or partial sites.
+                            It supports HTTP, File, FTP, and Mailto schemes.
+robot-history:              Originally designed to validate URLs.
+robot-environment:          commercial
+modified-date:              July 9, 1997
+modified-by:                Dave Finnegan
+
+robot-id: us
+robot-name: URL Spider Pro
+robot-cover-url: http://www.innerprise.net
+robot-details-url: http://www.innerprise.net/us.htm
+robot-owner-name: Innerprise
+robot-owner-url: http://www.innerprise.net
+robot-owner-email: greg@innerprise.net
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Windows9x/NT
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: *
+robot-noindex: yes
+robot-host: *
+robot-from: no
+robot-useragent: URL Spider Pro
+robot-language: delphi
+robot-description: Used for building a database of web pages.
+robot-history: Project started July 1998.
+robot-environment: commercial
+modified-date: Mon, 12 Jul 1999 17:50:30 GMT
+modified-by: Innerprise
+
+robot-id: valkyrie
+robot-name: Valkyrie
+robot-cover-url: http://kichijiro.c.u-tokyo.ac.jp/odin/
+robot-details-url: http://kichijiro.c.u-tokyo.ac.jp/odin/robot.html
+robot-owner-name: Masanori Harada
+robot-owner-url: http://www.graco.c.u-tokyo.ac.jp/~harada/
+robot-owner-email: harada@graco.c.u-tokyo.ac.jp
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Valkyrie libwww-perl
+robot-noindex: no
+robot-host: *.c.u-tokyo.ac.jp
+robot-from: yes
+robot-useragent: Valkyrie/1.0 libwww-perl/0.40
+robot-language: perl4
+robot-description: used to collect resources from Japanese Web sites for ODIN search engine.
+robot-history: This robot has been used since Oct. 1995 for author's research.
+robot-environment: service research
+modified-date: Thu Mar 20 19:09:56 JST 1997
+modified-by: harada@graco.c.u-tokyo.ac.jp
+
+robot-id: victoria
+robot-name: Victoria
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Adrian Howard
+robot-owner-url:
+robot-owner-email: adrianh@oneworld.co.uk
+robot-status: development
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Victoria
+robot-noindex: yes
+robot-host:
+robot-from:
+robot-useragent: Victoria/1.0
+robot-language: perl,c
+robot-description: Victoria is part of a groupware produced
+ by Victoria Real Ltd. (voice: +44 [0]1273 774469,
+ fax: +44 [0]1273 779960 email: victoria@pavilion.co.uk).
+ Victoria is used to monitor changes in W3 documents,
+ both intranet and internet based.
+ Contact Victoria Real for more information.
+robot-history:
+robot-environment: commercial
+modified-date: Fri, 22 Nov 1996 16:45 GMT
+modified-by: victoria@pavilion.co.uk
+
+robot-id:           visionsearch
+robot-name:         vision-search
+robot-cover-url:    http://www.ius.cs.cmu.edu/cgi-bin/vision-search
+robot-details-url:
+robot-owner-name:   Henry A. Rowley
+robot-owner-url:    http://www.cs.cmu.edu/~har
+robot-owner-email:  har@cs.cmu.edu
+robot-status:
+robot-purpose:      indexing.
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         dylan.ius.cs.cmu.edu
+robot-from:         no
+robot-useragent:    vision-search/3.0'
+robot-language:     Perl 5
+robot-description:  Intended to be an index of computer vision pages, containing
+       all pages within <em>n</em> links (for some small
+       <em>n</em>) of the Vision Home Page
+robot-history:
+robot-environment:
+modified-date:      Fri Mar  8 16:03:04 1996
+modified-by:
+
+robot-id: voyager
+robot-name: Voyager
+robot-cover-url: http://www.lisa.co.jp/voyager/
+robot-details-url:
+robot-owner-name: Voyager Staff
+robot-owner-url: http://www.lisa.co.jp/voyager/
+robot-owner-email: voyager@lisa.co.jp
+robot-status: development
+robot-purpose: indexing, maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Voyager 
+robot-noindex: no
+robot-host: *.lisa.co.jp
+robot-from: yes
+robot-useragent: Voyager/0.0
+robot-language: perl5 
+robot-description: This robot is used to build the database for the
+                   Lisa Search service.  The robot manually launch  
+                   and visits sites in a random order.
+robot-history:
+robot-environment: service
+modified-date: Mon, 30 Nov 1998 08:00:00 GMT
+modified-by: Hideyuki Ezaki
+
+robot-id: vwbot
+robot-name: VWbot
+robot-cover-url: http://vancouver-webpages.com/VWbot/
+robot-details-url: http://vancouver-webpages.com/VWbot/aboutK.shtml
+robot-owner-name: Andrew Daviel
+robot-owner-url:  http://vancouver-webpages.com/~admin/
+robot-owner-email: andrew@vancouver-webpages.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: VWbot_K
+robot-noindex: yes
+robot-host: vancouver-webpages.com
+robot-from: yes
+robot-useragent: VWbot_K/4.2
+robot-language: perl4
+robot-description: Used to index BC sites for the searchBC database. Runs daily.
+robot-history: Originally written fall 1995. Actively maintained.
+robot-environment: service commercial research
+modified-date: Tue, 4 Mar 1997 20:00:00 GMT
+modified-by: Andrew Daviel
+
+robot-id:             w3index
+robot-name:           The NWI Robot
+robot-cover-url:            http://www.ub2.lu.se/NNC/projects/NWI/the_nwi_robot.html
+robot-owner-name:     Sigfrid Lundberg, Lund university, Sweden
+robot-owner-url:      http://nwi.ub2.lu.se/~siglun
+robot-owner-email:    siglun@munin.ub2.lu.se
+robot-status:         active
+robot-purpose:        discovery,statistics
+robot-type:           standalone
+robot-platform:       UNIX
+robot-availability:   none (at the moment)
+robot-exclusion:      yes
+robot-noindex:        No
+robot-host:   nwi.ub2.lu.se, mars.dtv.dk and a few others
+robot-from:   yes
+robot-useragent:      w3index
+robot-language:       perl5
+robot-description:    A resource discovery robot, used primarily for
+       the indexing of the Scandinavian Web
+robot-history:        It is about a year or so old.
+       Written by Anders Ard\96, Mattias Borrell, 
+       HÂkan Ard\96 and myself.
+robot-environment: service,research
+modified-date:        Wed Jun 26 13:58:04 MET DST 1996
+modified-by:          Sigfrid Lundberg
+
+robot-id:           w3m2
+robot-name:         W3M2
+robot-cover-url:    http://tronche.com/W3M2
+robot-details-url:
+robot-owner-name:   Christophe Tronche
+robot-owner-url:    http://tronche.com/
+robot-owner-email:  tronche@lri.fr
+robot-status:       
+robot-purpose:      indexing, maintenance, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         yes
+robot-useragent:    W3M2/x.xxx
+robot-language:     Perl 4, Perl 5, and C++
+robot-description:  to generate a Resource Discovery database, validate links,
+       validate HTML, and generate statistics
+robot-history:      
+robot-environment:
+modified-date:      Fri May 5 17:48:48 1995
+modified-by:
+
+robot-id:           wanderer
+robot-name:         the World Wide Web Wanderer
+robot-cover-url:    http://www.mit.edu/people/mkgray/net/
+robot-details-url:
+robot-owner-name:   Matthew Gray
+robot-owner-url:    http://www.mit.edu:8001/people/mkgray/mkgray.html
+robot-owner-email:  mkgray@mit.edu
+robot-status:       active
+robot-purpose:      statistics
+robot-type:         standalone
+robot-platform:     unix
+robot-availability: data
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *.mit.edu
+robot-from:         
+robot-useragent:    WWWWanderer v3.0
+robot-language:     perl4
+robot-description:  Run initially in June 1993, its aim is to measure
+                    the growth in the web.
+robot-history:      
+robot-environment:  research
+modified-date:      
+modified-by:
+
+robot-id:webbandit
+robot-name:WebBandit Web Spider
+robot-cover-url:http://pw2.netcom.com/~wooger/
+robot-details-url:http://pw2.netcom.com/~wooger/
+robot-owner-name:Jerry Walsh
+robot-owner-url:http://pw2.netcom.com/~wooger/
+robot-owner-email:wooger@ix.netcom.com
+robot-status:active
+robot-purpose:Resource Gathering / Server Benchmarking
+robot-type:standalone application
+robot-platform:Intel - windows95
+robot-availability:source, binary
+robot-exclusion:no
+robot-exclusion-useragent:WebBandit/1.0
+robot-noindex:no
+robot-host:ix.netcom.com
+robot-from:no
+robot-useragent:WebBandit/1.0
+robot-language:C++
+robot-description:multithreaded, hyperlink-following,
+ resource finding webspider 
+robot-history:Inspired by reading of
+ Internet Programming book by Jamsa/Cope 
+robot-environment:commercial 
+modified-date:11/21/96
+modified-by:Jerry Walsh
+
+robot-id: webcatcher
+robot-name: WebCatcher
+robot-cover-url: http://oscar.lang.nagoya-u.ac.jp
+robot-details-url:
+robot-owner-name: Reiji SUZUKI
+robot-owner-url: http://oscar.lang.nagoya-u.ac.jp/~reiji/index.html
+robot-owner-email: reiji@infonia.ne.jp
+robot-owner-name2: Masatoshi SUGIURA
+robot-owner-url2: http://oscar.lang.nagoya-u.ac.jp/~sugiura/index.html
+robot-owner-email2: sugiura@lang.nagoya-u.ac.jp
+robot-status: development
+robot-purpose: indexing  
+robot-type: standalone   
+robot-platform: unix, windows, mac
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: webcatcher
+robot-noindex: no
+robot-host: oscar.lang.nagoya-u.ac.jp
+robot-from: no
+robot-useragent: WebCatcher/1.0
+robot-language: perl5
+robot-description: WebCatcher gathers web pages
+                   that Japanese collage students want to visit.
+robot-history: This robot finds its roots in a research project 
+           at Nagoya University in 1998.
+robot-environment: research
+modified-date: Fri, 16 Oct 1998 17:28:52 JST
+modified-by: "Reiji SUZUKI" <reiji@infonia.ne.jp>
+
+robot-id:           webcopy
+robot-name:         WebCopy
+robot-cover-url:    http://www.inf.utfsm.cl/~vparada/webcopy.html
+robot-details-url:
+robot-owner-name:   Victor Parada
+robot-owner-url:    http://www.inf.utfsm.cl/~vparada/
+robot-owner-email:  vparada@inf.utfsm.cl
+robot-status:       
+robot-purpose:      mirroring
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         *
+robot-from:         no
+robot-useragent:    WebCopy/(version)
+robot-language:     perl 4 or perl 5
+robot-description:  Its purpose is to perform mirroring. WebCopy can retrieve
+       files recursively using HTTP protocol.It can be used as a
+       delayed browser or as a mirroring tool. It cannot jump from
+       one site to another.
+robot-history:      
+robot-environment:
+modified-date:      Sun Jul 2 15:27:04 1995
+modified-by:
+
+robot-id:           webfetcher
+robot-name:         webfetcher
+robot-cover-url:    http://www.ontv.com/
+robot-details-url:
+robot-owner-name:
+robot-owner-url:    http://www.ontv.com/
+robot-owner-email:  webfetch@ontv.com
+robot-status:
+robot-purpose:      mirroring
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         *
+robot-from:         yes
+robot-useragent:    WebFetcher/0.8, 
+robot-language:     C++
+robot-description:  don't wait! OnTV's WebFetcher mirrors whole sites down to
+       your hard disk on a TV-like schedule. Catch w3
+       documentation. Catch discovery.com without waiting! A fully
+       operational web robot for NT/95 today, most UNIX soon, MAC
+       tomorrow.
+robot-history:
+robot-environment:
+modified-date:      Sat Jan 27 10:31:43 1996.
+modified-by:
+
+robot-id:           webfoot
+robot-name:         The Webfoot Robot
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Lee McLoughlin
+robot-owner-url:    http://web.doc.ic.ac.uk/f?/lmjm
+robot-owner-email:  L.McLoughlin@doc.ic.ac.uk
+robot-status:       
+robot-purpose:      
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         phoenix.doc.ic.ac.uk
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  
+robot-history:      First spotted in Mid February 1994
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           weblayers
+robot-name:         weblayers
+robot-cover-url:    http://www.univ-paris8.fr/~loic/weblayers/
+robot-details-url:
+robot-owner-name:   Loic Dachary
+robot-owner-url:    http://www.univ-paris8.fr/~loic/
+robot-owner-email:  loic@afp.com
+robot-status:       
+robot-purpose:      maintainance
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    weblayers/0.0
+robot-language:     perl 5
+robot-description:  Its purpose is to validate, cache and maintain links. It is
+       designed to maintain the cache generated by the emacs emacs
+       w3 mode (N*tscape replacement) and to support annotated
+       documents (keep them in sync with the original document via
+       diff/patch).
+robot-history:      
+robot-environment:
+modified-date:      Fri Jun 23 16:30:42 FRE 1995
+modified-by:
+
+robot-id:           weblinker
+robot-name:         WebLinker
+robot-cover-url:    http://www.cern.ch/WebLinker/
+robot-details-url:
+robot-owner-name:   James Casey
+robot-owner-url:    http://www.maths.tcd.ie/hyplan/jcasey/jcasey.html
+robot-owner-email:  jcasey@maths.tcd.ie
+robot-status:       
+robot-purpose:      maintenance
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      
+robot-host:         
+robot-from:         
+robot-useragent:    WebLinker/0.0 libwww-perl/0.1
+robot-language:     
+robot-description:  it traverses a section of web, doing URN->URL conversion.
+        It will be used as a post-processing tool on documents created
+       by automatic converters such as LaTeX2HTML or WebMaker. At
+       the moment it works at full speed, but is restricted to
+       localsites. External GETs will be added, but these will be
+       running slowly. WebLinker is meant to be run locally, so if
+       you see it elsewhere let the author know!
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id:           webmirror
+robot-name:         WebMirror
+robot-cover-url:    http://www.winsite.com/pc/win95/netutil/wbmiror1.zip
+robot-details-url:
+robot-owner-name:   Sui Fung Chan
+robot-owner-url:    http://www.geocities.com/NapaVally/1208
+robot-owner-email:  sfchan@mailhost.net
+robot-status:
+robot-purpose:      mirroring
+robot-type:         standalone
+robot-platform:     Windows95
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         no
+robot-useragent:    no
+robot-language:     C++
+robot-description:  It download web pages to hard drive for off-line
+       browsing.
+robot-history:
+robot-environment:
+modified-date:      Mon Apr 29 08:52:25 1996.
+modified-by:
+
+robot-id: webmoose
+robot-name: The Web Moose
+robot-cover-url: 
+robot-details-url: http://www.nwlink.com/~mikeblas/webmoose/
+robot-owner-name: Mike Blaszczak
+robot-owner-url: http://www.nwlink.com/~mikeblas/
+robot-owner-email: mikeblas@nwlink.com
+robot-status: development
+robot-purpose: statistics, maintenance
+robot-type: standalone
+robot-platform: Windows NT
+robot-availability: data
+robot-exclusion: no
+robot-exclusion-useragent: WebMoose
+robot-noindex: no
+robot-host: msn.com
+robot-from: no
+robot-useragent: WebMoose/0.0.0000
+robot-language: C++
+robot-description: This robot collects statistics and verifies links.
+ It 
+ builds an graph of its visit path.
+robot-history: This robot is under development.
+ It will support ROBOTS.TXT soon.
+robot-environment: hobby
+modified-date: Fri, 30 Aug 1996 00:00:00 GMT
+modified-by: Mike Blaszczak
+
+robot-id:webquest
+robot-name:WebQuest
+robot-cover-url:
+robot-details-url:
+robot-owner-name:TaeYoung Choi
+robot-owner-url:http://www.cosmocyber.co.kr:8080/~cty/index.html
+robot-owner-email:cty@cosmonet.co.kr
+robot-status:development
+robot-purpose:indexing
+robot-type:standalone
+robot-platform:unix
+robot-availability:none
+robot-exclusion:yes
+robot-exclusion-useragent:webquest
+robot-noindex:no
+robot-host:210.121.146.2, 210.113.104.1, 210.113.104.2
+robot-from:yes
+robot-useragent:WebQuest/1.0
+robot-language:perl5
+robot-description:WebQuest will be used to build the databases for various web
+ search service sites which will be in service by early 1998. Until the end of
+ Jan. 1998, WebQuest will run from time to time. Since then, it will run
+ daily(for few hours and very slowly).
+robot-history:The developent of WebQuest was motivated by the need for a
+ customized robot in various projects of COSMO Information & Communication Co.,
+ Ltd. in Korea.
+robot-environment:service  
+modified-date:Tue, 30 Dec 1997 09:27:20 GMT
+modified-by:TaeYoung Choi
+
+robot-id: webreader
+robot-name: Digimarc MarcSpider
+robot-cover-url: http://www.digimarc.com/prod_fam.html
+robot-details-url: http://www.digimarc.com/prod_fam.html
+robot-owner-name: Digimarc Corporation
+robot-owner-url: http://www.digimarc.com
+robot-owner-email: wmreader@digimarc.com
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: windowsNT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent:
+robot-noindex:
+robot-host: 206.102.3.*
+robot-from: yes
+robot-useragent: Digimarc WebReader/1.2
+robot-language: c++
+robot-description: Examines image files for watermarks. 
+ In order to not waste internet bandwidth with yet
+ another crawler, we have contracted with one of the major crawlers/seach
+ engines to provide us with a list of specific URLs of interest to us.  If an
+ URL is to an image, we may read the image, but we do not crawl to any other
+ URLs.  If an URL is to a page of interest (ususally due to CGI), then we
+ access the page to get the image URLs from it, but we do not crawl to any
+ other pages.
+robot-history: First operation in August 1997.
+robot-environment: service
+modified-date: Mon, 20 Oct 1997 16:44:29 GMT
+modified-by: Brian MacIntosh
+
+robot-id: webreaper
+robot-name: WebReaper
+robot-cover-url: http://www.otway.com/webreaper
+robot-details-url:
+robot-owner-name: Mark Otway
+robot-owner-url: http://www.otway.com
+robot-owner-email: webreaper@otway.com
+robot-status: active
+robot-purpose: indexing/offline browsing
+robot-type: standalone
+robot-platform: windows95, windowsNT
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: webreaper
+robot-noindex: no
+robot-host: *
+robot-from: no
+robot-useragent: WebReaper [webreaper@otway.com]
+robot-language: c++
+robot-description: Freeware app which downloads and saves sites locally for
+ offline browsing.
+robot-history: Written for personal use, and then distributed to the public
+ as freeware.
+robot-environment: hobby
+modified-date: Thu, 25 Mar 1999 15:00:00 GMT
+modified-by: Mark Otway
+
+robot-id:                       webs
+robot-name:                     webs
+robot-cover-url:                http://webdew.rnet.or.jp/
+robot-details-url:              http://webdew.rnet.or.jp/service/shank/NAVI/SEARCH/info2.html#robot
+robot-owner-name:               Recruit Co.Ltd,
+robot-owner-url:                
+robot-owner-email:              dew@wwwadmin.rnet.or.jp
+robot-status:                   active
+robot-purpose:                  statistics
+robot-type:                     standalone
+robot-platform:                 unix
+robot-availability:             none
+robot-exclusion:                yes
+robot-exclusion-useragent:      webs
+robot-noindex:                  no
+robot-host:                     lemon.recruit.co.jp
+robot-from:                     yes
+robot-useragent:                webs@recruit.co.jp
+robot-language:                 perl5
+robot-description:              The webs robot is used to gather WWW servers'
+                                top pages last modified date data. Collected
+                                statistics reflects the priority of WWW server
+                                data collection for webdew indexing service.
+                                Indexing in webdew is done by manually.
+robot-history:
+robot-environment:              service
+modified-date:                  Fri,  6 Sep 1996 10:00:00 GMT
+modified-by:
+
+robot-id:           websnarf
+robot-name:         Websnarf
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Charlie Stross
+robot-owner-url:    
+robot-owner-email:  charles@fma.com
+robot-status:       retired
+robot-purpose:      
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: webspider
+robot-name: WebSpider
+robot-details-url: http://www.csi.uottawa.ca/~u610468
+robot-cover-url:
+robot-owner-name: Nicolas Fraiji
+robot-owner-email: u610468@csi.uottawa.ca
+robot-status: active, under further enhancement.
+robot-purpose: maintenance, link diagnostics
+robot-type: standalone
+robot-exclusion: yes
+robot-noindex: no
+robot-exclusion-useragent: webspider
+robot-host: several
+robot-from: Yes
+robot-language: Perl4
+robot-history: developped as a course project at the University of
+     Ottawa, Canada in 1996.
+robot-environment: Educational use and Research
+
+robot-id:           webvac
+robot-name:         WebVac
+robot-cover-url:    http://www.federated.com/~tim/webvac.html
+robot-details-url:
+robot-owner-name:   Tim Jensen
+robot-owner-url:    http://www.federated.com/~tim
+robot-owner-email:  tim@federated.com
+robot-status:
+robot-purpose:      mirroring
+robot-type:         standalone
+robot-platform:
+robot-availability:
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         no
+robot-useragent:    webvac/1.0
+robot-language:     C++
+robot-description:
+robot-history:
+robot-environment:
+modified-date:      Mon May 13 03:19:17 1996.
+modified-by:
+
+robot-id:           webwalk
+robot-name:         webwalk
+robot-cover-url:    
+robot-details-url:
+robot-owner-name:   Rich Testardi
+robot-owner-url:    
+robot-owner-email:  
+robot-status:       retired
+robot-purpose:      indexing, maintentance, mirroring, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    yes
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         yes
+robot-useragent:    webwalk
+robot-language:     c
+robot-description:  Its purpose is to generate a Resource Discovery database,
+       validate links, validate HTML, perform mirroring, copy
+       document trees, and generate statistics. Webwalk is easily
+       extensible to perform virtually any maintenance function
+       which involves web traversal, in a way much like the '-exec'
+       option of the find(1) command. Webwalk is usually used
+       behind the HP firewall
+robot-history:      
+robot-environment:
+modified-date:      Wed Nov 15 09:51:59 PST 1995
+modified-by:
+
+robot-id: webwalker
+robot-name: WebWalker
+robot-cover-url:
+robot-details-url:
+robot-owner-name: Fah-Chun Cheong
+robot-owner-url: http://www.cs.berkeley.edu/~fccheong/
+robot-owner-email: fccheong@cs.berkeley.edu
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: WebWalker
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: WebWalker/1.10
+robot-language: perl4
+robot-description: WebWalker performs WWW traversal for individual
+                   sites and tests for the integrity of all hyperlinks
+                   to external sites. 
+robot-history: A Web maintenance robot for expository purposes,
+               first published in the book "Internet Agents: Spiders,
+               Wanderers, Brokers, and Bots" by the robot's author.
+robot-environment: hobby
+modified-date: Thu, 25 Jul 1996 16:00:52 PDT
+modified-by: Fah-Chun Cheong
+
+robot-id:           webwatch
+robot-name:         WebWatch
+robot-cover-url:    http://www.specter.com/users/janos/specter
+robot-details-url:
+robot-owner-name:   Joseph Janos
+robot-owner-url:    http://www.specter.com/users/janos/specter
+robot-owner-email:  janos@specter.com
+robot-status:       
+robot-purpose:      maintainance, statistics
+robot-type:         standalone
+robot-platform:     
+robot-availability: 
+robot-exclusion:    no
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         
+robot-from:         no
+robot-useragent:    WebWatch
+robot-language:     c++
+robot-description:  Its purpose is to validate HTML, and generate statistics.
+       Check URLs modified since a given date.
+robot-history:      
+robot-environment:
+modified-date:      Wed Jul 26 13:36:32 1995
+modified-by:
+
+robot-id: wget
+robot-name: Wget
+robot-cover-url: ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/
+robot-details-url:
+robot-owner-name: Hrvoje Niksic
+robot-owner-url:
+robot-owner-email: hniksic@srce.hr
+robot-status: development
+robot-purpose: mirroring, maintenance
+robot-type: standalone
+robot-platform: unix
+robot-availability: source
+robot-exclusion: yes
+robot-exclusion-useragent: wget
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: Wget/1.4.0
+robot-language: C
+robot-description:
+  Wget is a utility for retrieving files using HTTP and FTP protocols.
+  It works non-interactively, and can retrieve HTML pages and FTP
+  trees recursively.  It can be used for mirroring Web pages and FTP
+  sites, or for traversing the Web gathering data.  It is run by the
+  end user or archive maintainer.
+robot-history:
+robot-environment: hobby, research
+modified-date: Mon, 11 Nov 1996 06:00:44 MET
+modified-by: Hrvoje Niksic
+
+robot-id: whowhere
+robot-name: WhoWhere Robot
+robot-cover-url: http://www.whowhere.com
+robot-details-url: 
+robot-owner-name: Rupesh Kapoor
+robot-owner-url: 
+robot-owner-email: rupesh@whowhere.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: Sun Unix
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: whowhere
+robot-noindex: no
+robot-host: spica.whowhere.com
+robot-from: no
+robot-useragent: 
+robot-language: C/Perl
+robot-description: Gathers data for email directory from web pages
+robot-history: 
+robot-environment: commercial
+modified-date: 
+modified-by:
+
+robot-id:           wmir
+robot-name:         w3mir
+robot-cover-url:    http://www.ifi.uio.no/~janl/w3mir.html
+robot-details-url:
+robot-owner-name:   Nicolai Langfeldt
+robot-owner-url:    http://www.ifi.uio.no/~janl/w3mir.html
+robot-owner-email:  w3mir-core@usit.uio.no
+robot-status:
+robot-purpose:      mirroring.
+robot-type:         standalone
+robot-platform:     UNIX, WindowsNT
+robot-availability:
+robot-exclusion:    no.
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:
+robot-from:         yes
+robot-useragent:    w3mir
+robot-language:     Perl
+robot-description:  W3mir uses the If-Modified-Since HTTP header and recurses
+       only the directory and subdirectories of it's start
+       document.  Known to work on U*ixes and Windows
+       NT.
+robot-history:
+robot-environment:
+modified-date:      Wed Apr 24 13:23:42 1996.
+modified-by:
+
+robot-id: wolp
+robot-name: WebStolperer
+robot-cover-url: http://www.suchfibel.de/maschinisten
+robot-details-url: http://www.suchfibel.de/maschinisten/text/werkzeuge.htm (in German)
+robot-owner-name: Marius Dahler
+robot-owner-url: http://www.suchfibel.de/maschinisten
+robot-owner-email: mda@suchfibel.de
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix, NT
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: WOLP
+robot-noindex: yes
+robot-host: www.suchfibel.de
+robot-from: yes
+robot-useragent: WOLP/1.0 mda/1.0
+robot-language: perl5
+robot-description: The robot gathers information about specified
+ web-projects and generates knowledge bases in Javascript or an own
+ format
+robot-environment: hobby
+modified-date: 22 Jul 1998
+modified-by: Marius Dahler
+
+robot-id:           wombat
+robot-name:         The Web Wombat 
+robot-cover-url:    http://www.intercom.com.au/wombat/
+robot-details-url:
+robot-owner-name:   Internet Communications
+robot-owner-url:    http://www.intercom.com.au/
+robot-owner-email:  phill@intercom.com.au
+robot-status:
+robot-purpose:      indexing, statistics.
+robot-type:
+robot-platform:
+robot-availability:
+robot-exclusion:    no.
+robot-exclusion-useragent:
+robot-noindex:
+robot-host:         qwerty.intercom.com.au
+robot-from:         no
+robot-useragent:    no
+robot-language:     IBM Rexx/VisualAge C++ under OS/2.
+robot-description:  The robot is the basis of the Web Wombat search engine
+       (Australian/New Zealand content ONLY).
+robot-history:
+robot-environment:
+modified-date:      Thu Feb 29 00:39:49 1996.
+modified-by:
+
+robot-id:           worm
+robot-name:         The World Wide Web Worm
+robot-cover-url:    http://www.cs.colorado.edu/home/mcbryan/WWWW.html
+robot-details-url:
+robot-owner-name:   Oliver McBryan
+robot-owner-url:    http://www.cs.colorado.edu/home/mcbryan/Home.html
+robot-owner-email:  mcbryan@piper.cs.colorado.edu
+robot-status:       
+robot-purpose:      indexing
+robot-type:         
+robot-platform:     
+robot-availability: 
+robot-exclusion:    
+robot-exclusion-useragent:
+robot-noindex:      no
+robot-host:         piper.cs.colorado.edu
+robot-from:         
+robot-useragent:    
+robot-language:     
+robot-description:  indexing robot, actually has quite flexible search
+       options
+robot-history:      
+robot-environment:
+modified-date:      
+modified-by:
+
+robot-id: wwwc
+robot-name: WWWC Ver 0.2.5
+robot-cover-url: http://www.kinet.or.jp/naka/tomo/wwwc.html
+robot-details-url:
+robot-owner-name: Tomoaki Nakashima.
+robot-owner-url: http://www.kinet.or.jp/naka/tomo/
+robot-owner-email: naka@kinet.or.jp
+robot-status: active
+robot-purpose: maintenance
+robot-type: standalone
+robot-platform: windows, windows95, windowsNT
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: WWWC
+robot-noindex: no
+robot-host:
+robot-from: yes
+robot-useragent: WWWC/0.25 (Win95)
+robot-language: c
+robot-description:
+robot-history: 1997
+robot-environment: hobby
+modified-date: Tuesday, 18 Feb 1997 06:02:47 GMT
+modified-by: Tomoaki Nakashima (naka@kinet.or.jp)
+
+robot-id: wz101
+robot-name: WebZinger
+robot-details-url: http://www.imaginon.com/wzindex.html
+robot-cover-url: http://www.imaginon.com
+robot-owner-name: ImaginOn, Inc
+robot-owner-url: http://www.imaginon.com
+robot-owner-email: info@imaginon.com
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: windows95, windowsNT 4, mac, solaris, unix
+robot-availability: binary
+robot-exclusion: no
+robot-exclusion-useragent: none
+robot-noindex: no
+robot-host: http://www.imaginon.com/wzindex.html *
+robot-from: no
+robot-useragent: none
+robot-language: java
+robot-description: commercial Web Bot that accepts plain text queries, uses
+ webcrawler, lycos or excite to get URLs, then visits sites.  If the user's
+ filter parameters are met, downloads one picture and a paragraph of test.
+ Playsback slide show format of one text paragraph plus image from each site.
+robot-history: developed by ImaginOn in 1996 and 1997
+robot-environment: commercial
+modified-date: Wed, 11 Sep 1997 02:00:00 GMT
+modified-by: schwartz@imaginon.com
+
+robot-id: xget
+robot-name: XGET
+robot-cover-url: http://www2.117.ne.jp/~moremore/x68000/soft/soft.html
+robot-details-url: http://www2.117.ne.jp/~moremore/x68000/soft/soft.html
+robot-owner-name: Hiroyuki Shigenaga
+robot-owner-url: http://www2.117.ne.jp/~moremore/
+robot-owner-email: shige@mh1.117.ne.jp
+robot-status: active
+robot-purpose: mirroring
+robot-type: standalone
+robot-platform: X68000, X68030
+robot-availability: binary
+robot-exclusion: yes
+robot-exclusion-useragent: XGET
+robot-noindex: no
+robot-host: *
+robot-from: yes
+robot-useragent: XGET/0.7
+robot-language: c
+robot-description: Its purpose is to retrieve updated files.It is run by the end userrobot-history: 1997
+robot-environment: hobby
+modified-date: Fri, 07 May 1998 17:00:00 GMT
+modified-by: Hiroyuki Shigenaga
+
+robot-id: Nederland.zoek
+robot-name: Nederland.zoek
+robot-cover-url: http://www.nederland.net/
+robot-details-url: 
+robot-owner-name: System Operator Nederland.net
+robot-owner-url: 
+robot-owner-email: zoek@nederland.net
+robot-status: active
+robot-purpose: indexing
+robot-type: standalone
+robot-platform: unix (Linux)
+robot-availability: none
+robot-exclusion: yes
+robot-exclusion-useragent: Nederland.zoek
+robot-noindex: no
+robot-host: 193.67.110.*
+robot-from: yes
+robot-useragent: Nederland.zoek
+robot-language: c
+robot-description: This robot indexes all .nl sites for the search-engine of Nederland.net
+robot-history: Developed at Computel Standby in Apeldoorn, The Netherlands
+robot-environment: service
+modified-date: Sat, 8 Feb 1997 01:10:00 CET
+modified-by: Sander Steffann <sander@nederland.net>
+
diff --git a/clock/hr1.png b/clock/hr1.png
new file mode 100644 (file)
index 0000000..f829d37
Binary files /dev/null and b/clock/hr1.png differ
diff --git a/clock/hr10.png b/clock/hr10.png
new file mode 100644 (file)
index 0000000..d8300ee
Binary files /dev/null and b/clock/hr10.png differ
diff --git a/clock/hr11.png b/clock/hr11.png
new file mode 100644 (file)
index 0000000..e2c1294
Binary files /dev/null and b/clock/hr11.png differ
diff --git a/clock/hr12.png b/clock/hr12.png
new file mode 100644 (file)
index 0000000..51dedf5
Binary files /dev/null and b/clock/hr12.png differ
diff --git a/clock/hr2.png b/clock/hr2.png
new file mode 100644 (file)
index 0000000..6ed7457
Binary files /dev/null and b/clock/hr2.png differ
diff --git a/clock/hr3.png b/clock/hr3.png
new file mode 100644 (file)
index 0000000..624558d
Binary files /dev/null and b/clock/hr3.png differ
diff --git a/clock/hr4.png b/clock/hr4.png
new file mode 100644 (file)
index 0000000..c312f79
Binary files /dev/null and b/clock/hr4.png differ
diff --git a/clock/hr5.png b/clock/hr5.png
new file mode 100644 (file)
index 0000000..f223807
Binary files /dev/null and b/clock/hr5.png differ
diff --git a/clock/hr6.png b/clock/hr6.png
new file mode 100644 (file)
index 0000000..9a97b31
Binary files /dev/null and b/clock/hr6.png differ
diff --git a/clock/hr7.png b/clock/hr7.png
new file mode 100644 (file)
index 0000000..67e8b52
Binary files /dev/null and b/clock/hr7.png differ
diff --git a/clock/hr8.png b/clock/hr8.png
new file mode 100644 (file)
index 0000000..7ec6f6f
Binary files /dev/null and b/clock/hr8.png differ
diff --git a/clock/hr9.png b/clock/hr9.png
new file mode 100644 (file)
index 0000000..8e7516c
Binary files /dev/null and b/clock/hr9.png differ
diff --git a/cpu/digital.png b/cpu/digital.png
new file mode 100644 (file)
index 0000000..48f3546
Binary files /dev/null and b/cpu/digital.png differ
diff --git a/cpu/hp.png b/cpu/hp.png
new file mode 100644 (file)
index 0000000..8b4fa8c
Binary files /dev/null and b/cpu/hp.png differ
diff --git a/cpu/ibm.png b/cpu/ibm.png
new file mode 100644 (file)
index 0000000..0743233
Binary files /dev/null and b/cpu/ibm.png differ
diff --git a/cpu/intel.png b/cpu/intel.png
new file mode 100644 (file)
index 0000000..84ca8ba
Binary files /dev/null and b/cpu/intel.png differ
diff --git a/cpu/java.png b/cpu/java.png
new file mode 100644 (file)
index 0000000..d9830fc
Binary files /dev/null and b/cpu/java.png differ
diff --git a/cpu/mips.png b/cpu/mips.png
new file mode 100644 (file)
index 0000000..46125a2
Binary files /dev/null and b/cpu/mips.png differ
diff --git a/cpu/motorola.png b/cpu/motorola.png
new file mode 100644 (file)
index 0000000..dc3615c
Binary files /dev/null and b/cpu/motorola.png differ
diff --git a/cpu/sun.png b/cpu/sun.png
new file mode 100644 (file)
index 0000000..276f1a2
Binary files /dev/null and b/cpu/sun.png differ
diff --git a/cpu/unknown.png b/cpu/unknown.png
new file mode 100644 (file)
index 0000000..69b2d1d
Binary files /dev/null and b/cpu/unknown.png differ
diff --git a/docs/COPYING.TXT b/docs/COPYING.TXT
new file mode 100644 (file)
index 0000000..1ee439e
--- /dev/null
@@ -0,0 +1,341 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your 
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
diff --git a/docs/LICENSE.TXT b/docs/LICENSE.TXT
new file mode 100644 (file)
index 0000000..1ee439e
--- /dev/null
@@ -0,0 +1,341 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your 
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
diff --git a/docs/awstats.pdf b/docs/awstats.pdf
new file mode 100644 (file)
index 0000000..9a40977
Binary files /dev/null and b/docs/awstats.pdf differ
diff --git a/docs/awstats_security.html b/docs/awstats_security.html
new file mode 100644 (file)
index 0000000..209e89e
--- /dev/null
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta name="description" content="AWStats Documentation - Security page">
+<meta name="keywords" content="awstats, awstat, security, tips">
+<meta name="robots" content="index,follow">
+<meta name="title" content="AWStats Documentation - Security page">
+<title>AWStats Documentation - Security page</title>
+<link rel="stylesheet" href="styles.css" type="text/css">
+</head>
+
+<body topmargin=10 leftmargin=5>
+
+
+<table style="font: 10pt arial,helvetica,verdana" cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF width=100%>
+
+<!-- Large -->
+<tr style="font: 10pt arial,helvetica,verdana">
+<td bgcolor=#9999cc align=center><a href="/"><img src="images/awstats_logo1.png" border=0></a></td>
+<td bgcolor=#9999cc align=center>
+<br>
+<font style="font: 16pt Times;" color=#EEEEFF><b>AWStats logfile analyzer 4.0 Documentation</b></font><br>
+<br>
+</td>
+<td bgcolor=#9999cc align=center>
+&nbsp;
+</td>
+</tr>
+
+</table>
+
+
+<br><br><font style="font: 26px Times;">Little tips about Security</font><br><br>
+
+A lot of AWStats users have several web site to manage. This is particularly true for web hosting providers.
+The most common things you would like to do is to prevent user xxx (having a site www.xxx.com) to see
+statistics of user yyy (having a site www.yyy.com).<br>
+<br>
+This is example of possible way of working:<br>
+<br>
+<u>1) HIGHLY SECURED</u><br>
+<b>Policy</b>:<br>
+All statistics pages for a config/domain file are built in static html files using <b>-output -staticlinks</b> option.<br>
+There is no CGI use of AWStats and static built pages are stored in a web protected <b>realm</b> to
+be securely viewed by correct allowed users only (or sent by mails).<br>
+<b>+</b>: Highly secured.<br>
+<b>-</b>: Statistics are static, No way to have dynamic update/view.<br>
+<b>Note</b>: With this policy, AWStats database files can have their own permissions.
+So, set all AWStats database files built by the update process for config/domain1 to have read/write for <i>user1</i>
+(or an admin user) and NO read and/or NO write for any other users.
+If AWStats database files for config/domain1 are read protected, only allowed users can see statistics for config/domain1.<br>
+If AWStats database files for config/domain1 are write protected, only allowed users can update statistics for config/domain1.<br>
+This is a very good choice for web hosting providers with important customers.<br>
+<br>
+<u>2) MEDIUM SECURED</u><br>
+<b>Policy</b>: Statistics pages for a config/domain file can be read dynamically from a browser (with AWStats working as a CGI).<br>
+Use of <b>awstatsusers</b> file to list config/domain a particular user can see/update.<br>
+awstats.pl file must be saved in a web protected <b>realm</b> to allow awstats to get the username when running as CGI.<br>
+<b>+</b>: Statistics are dynamic.<br>
+<b>-</b>: AWStats database files must be readable by anonymous web server user, so if an experimented user can have an access to
+the server (telnet, ftp), he will be able to install and run a hacked version of AWStats that does not check permissions into the <b>awstatsusers</b>.<br>
+<b>Note</b>: With this policy, you must first create a text file called <b>awstatsusers</b>. This file is a text file
+with several records that contains two fields separated by a "<b>;</b>".
+First field is the user name allowed to read statistics from a browser.<br>
+Second field is a list (separated by comma "<b>,</b>") of all visible config/domain allowed for this user.<br>
+<u>Example of <b>awstatsusers</b> file:</u><br><i>
+user1;*<br>
+user2;www.domain2.com<br>
+user3;www.domain3a.com,www.domain3b.com<br>
+</i>
+<u>Example of directives you can add into Apache to have awstats.pl in a web protected realm:</u><br><i>
+&lt;Files "awstats.pl"&gt;<br>
+AuthUserFile /path/to/.passwd<br>
+AuthGroupFile /path/to/.group<br>
+AuthName "Restricted Area For Customers"<br>
+AuthType Basic<br>
+require valid-user<br>
+&lt;/Files&gt;
+</i><br>
+<br>
+Save the <b>awstatsusers</b> file in the <b>DirData</b> directory (directory where AWStats save its database) and put on this file "read only"
+permissions for everyone.<br>
+<br>
+<u>3) LOW SECURED</u><br>
+<b>Policy</b>: Same as 2 with no use of <b>awstatsusers</b>.<br>
+<b>+</b>: Setup is very easy (No need of particular setup). Statistics are dynamic.<br>
+<b>-</b>: No way to prevent stats for config/domain to be seen by a user that known the
+config/domain name and the url syntax to see stats of a particular config/domain.<br>
+<b>Note</b>: This is the most common way of working for all users that have only one hosts
+and no restricted accounts to manage.<br>
+
+
+
+
+
+<br>
+
+
+<br>
+<hr>
+
+<script language=javascript>
+       var lastmod = new Date(document.lastModified);
+       if (lastmod.getDate() > 0) {
+               if (lastmod.getDate()<10) zerod="0"
+               else zerod="";
+               if (lastmod.getMonth()<9) zerom="0"
+               else zerom=""
+               year2kok=lastmod.getYear();
+               if (year2kok<100) year2kok+=2000;
+               if ((year2kok>=100) && (year2kok < 1970)) year2kok+=1900;
+               document.writeln("Last revision: "+year2kok+"-"+zerom+(lastmod.getMonth()+1)+"-"+zerod+lastmod.getDate());
+       }
+</script>
+
+</body>
+</html>
diff --git a/docs/images/awstats.ico b/docs/images/awstats.ico
new file mode 100644 (file)
index 0000000..9bc5025
Binary files /dev/null and b/docs/images/awstats.ico differ
diff --git a/docs/images/awstats_logo4.gif b/docs/images/awstats_logo4.gif
new file mode 100644 (file)
index 0000000..e94f52b
Binary files /dev/null and b/docs/images/awstats_logo4.gif differ
diff --git a/docs/images/awstats_logo4.png b/docs/images/awstats_logo4.png
new file mode 100644 (file)
index 0000000..e6f6968
Binary files /dev/null and b/docs/images/awstats_logo4.png differ
diff --git a/flags/ad.png b/flags/ad.png
new file mode 100644 (file)
index 0000000..f676f64
Binary files /dev/null and b/flags/ad.png differ
diff --git a/flags/ae.png b/flags/ae.png
new file mode 100644 (file)
index 0000000..c6952aa
Binary files /dev/null and b/flags/ae.png differ
diff --git a/flags/af.png b/flags/af.png
new file mode 100644 (file)
index 0000000..582fc06
Binary files /dev/null and b/flags/af.png differ
diff --git a/flags/ag.png b/flags/ag.png
new file mode 100644 (file)
index 0000000..fbf917c
Binary files /dev/null and b/flags/ag.png differ
diff --git a/flags/ai.png b/flags/ai.png
new file mode 100644 (file)
index 0000000..badcd96
Binary files /dev/null and b/flags/ai.png differ
diff --git a/flags/al.png b/flags/al.png
new file mode 100644 (file)
index 0000000..2ff7780
Binary files /dev/null and b/flags/al.png differ
diff --git a/flags/am.png b/flags/am.png
new file mode 100644 (file)
index 0000000..c8e056b
Binary files /dev/null and b/flags/am.png differ
diff --git a/flags/an.png b/flags/an.png
new file mode 100644 (file)
index 0000000..6b0f085
Binary files /dev/null and b/flags/an.png differ
diff --git a/flags/ao.png b/flags/ao.png
new file mode 100644 (file)
index 0000000..127796d
Binary files /dev/null and b/flags/ao.png differ
diff --git a/flags/aq.png b/flags/aq.png
new file mode 100644 (file)
index 0000000..dc6b1ab
Binary files /dev/null and b/flags/aq.png differ
diff --git a/flags/ar.png b/flags/ar.png
new file mode 100644 (file)
index 0000000..755b40e
Binary files /dev/null and b/flags/ar.png differ
diff --git a/flags/arpa.png b/flags/arpa.png
new file mode 100644 (file)
index 0000000..4502b8d
Binary files /dev/null and b/flags/arpa.png differ
diff --git a/flags/as.png b/flags/as.png
new file mode 100644 (file)
index 0000000..614d01d
Binary files /dev/null and b/flags/as.png differ
diff --git a/flags/at.png b/flags/at.png
new file mode 100644 (file)
index 0000000..7982808
Binary files /dev/null and b/flags/at.png differ
diff --git a/flags/au.png b/flags/au.png
new file mode 100644 (file)
index 0000000..595bff6
Binary files /dev/null and b/flags/au.png differ
diff --git a/flags/aw.png b/flags/aw.png
new file mode 100644 (file)
index 0000000..4aa502c
Binary files /dev/null and b/flags/aw.png differ
diff --git a/flags/az.png b/flags/az.png
new file mode 100644 (file)
index 0000000..d07d9b4
Binary files /dev/null and b/flags/az.png differ
diff --git a/flags/ba.png b/flags/ba.png
new file mode 100644 (file)
index 0000000..e361d18
Binary files /dev/null and b/flags/ba.png differ
diff --git a/flags/bb.png b/flags/bb.png
new file mode 100644 (file)
index 0000000..88e4e67
Binary files /dev/null and b/flags/bb.png differ
diff --git a/flags/bd.png b/flags/bd.png
new file mode 100644 (file)
index 0000000..b49714a
Binary files /dev/null and b/flags/bd.png differ
diff --git a/flags/be.png b/flags/be.png
new file mode 100644 (file)
index 0000000..872f562
Binary files /dev/null and b/flags/be.png differ
diff --git a/flags/bf.png b/flags/bf.png
new file mode 100644 (file)
index 0000000..9151366
Binary files /dev/null and b/flags/bf.png differ
diff --git a/flags/bg.png b/flags/bg.png
new file mode 100644 (file)
index 0000000..2c1f46b
Binary files /dev/null and b/flags/bg.png differ
diff --git a/flags/bh.png b/flags/bh.png
new file mode 100644 (file)
index 0000000..1b0d04d
Binary files /dev/null and b/flags/bh.png differ
diff --git a/flags/bi.png b/flags/bi.png
new file mode 100644 (file)
index 0000000..518e030
Binary files /dev/null and b/flags/bi.png differ
diff --git a/flags/bj.png b/flags/bj.png
new file mode 100644 (file)
index 0000000..6473bf1
Binary files /dev/null and b/flags/bj.png differ
diff --git a/flags/bm.png b/flags/bm.png
new file mode 100644 (file)
index 0000000..9ea8c4f
Binary files /dev/null and b/flags/bm.png differ
diff --git a/flags/bn.png b/flags/bn.png
new file mode 100644 (file)
index 0000000..2585a38
Binary files /dev/null and b/flags/bn.png differ
diff --git a/flags/bo.png b/flags/bo.png
new file mode 100644 (file)
index 0000000..27025ca
Binary files /dev/null and b/flags/bo.png differ
diff --git a/flags/br.png b/flags/br.png
new file mode 100644 (file)
index 0000000..f94d2e2
Binary files /dev/null and b/flags/br.png differ
diff --git a/flags/bs.png b/flags/bs.png
new file mode 100644 (file)
index 0000000..0eaa50d
Binary files /dev/null and b/flags/bs.png differ
diff --git a/flags/bt.png b/flags/bt.png
new file mode 100644 (file)
index 0000000..e12aa33
Binary files /dev/null and b/flags/bt.png differ
diff --git a/flags/bv.png b/flags/bv.png
new file mode 100644 (file)
index 0000000..e75a6c8
Binary files /dev/null and b/flags/bv.png differ
diff --git a/flags/bw.png b/flags/bw.png
new file mode 100644 (file)
index 0000000..c224fcd
Binary files /dev/null and b/flags/bw.png differ
diff --git a/flags/by.png b/flags/by.png
new file mode 100644 (file)
index 0000000..ee41b30
Binary files /dev/null and b/flags/by.png differ
diff --git a/flags/bz.png b/flags/bz.png
new file mode 100644 (file)
index 0000000..378ec4a
Binary files /dev/null and b/flags/bz.png differ
diff --git a/flags/ca.png b/flags/ca.png
new file mode 100644 (file)
index 0000000..38a5ae6
Binary files /dev/null and b/flags/ca.png differ
diff --git a/flags/cc.png b/flags/cc.png
new file mode 100644 (file)
index 0000000..0050bab
Binary files /dev/null and b/flags/cc.png differ
diff --git a/flags/cd.png b/flags/cd.png
new file mode 100644 (file)
index 0000000..f50b0ae
Binary files /dev/null and b/flags/cd.png differ
diff --git a/flags/cf.png b/flags/cf.png
new file mode 100644 (file)
index 0000000..fcca6fd
Binary files /dev/null and b/flags/cf.png differ
diff --git a/flags/cg.png b/flags/cg.png
new file mode 100644 (file)
index 0000000..14ada0a
Binary files /dev/null and b/flags/cg.png differ
diff --git a/flags/ch.png b/flags/ch.png
new file mode 100644 (file)
index 0000000..681c706
Binary files /dev/null and b/flags/ch.png differ
diff --git a/flags/ci.png b/flags/ci.png
new file mode 100644 (file)
index 0000000..53a7ccd
Binary files /dev/null and b/flags/ci.png differ
diff --git a/flags/ck.png b/flags/ck.png
new file mode 100644 (file)
index 0000000..18b5fe1
Binary files /dev/null and b/flags/ck.png differ
diff --git a/flags/cl.png b/flags/cl.png
new file mode 100644 (file)
index 0000000..98992c6
Binary files /dev/null and b/flags/cl.png differ
diff --git a/flags/cm.png b/flags/cm.png
new file mode 100644 (file)
index 0000000..4ab7c60
Binary files /dev/null and b/flags/cm.png differ
diff --git a/flags/cn.png b/flags/cn.png
new file mode 100644 (file)
index 0000000..f83bbe1
Binary files /dev/null and b/flags/cn.png differ
diff --git a/flags/co.png b/flags/co.png
new file mode 100644 (file)
index 0000000..9c1d3cc
Binary files /dev/null and b/flags/co.png differ
diff --git a/flags/com.png b/flags/com.png
new file mode 100644 (file)
index 0000000..78d0951
Binary files /dev/null and b/flags/com.png differ
diff --git a/flags/cr.png b/flags/cr.png
new file mode 100644 (file)
index 0000000..a3d8933
Binary files /dev/null and b/flags/cr.png differ
diff --git a/flags/cs.png b/flags/cs.png
new file mode 100644 (file)
index 0000000..8ca1fb6
Binary files /dev/null and b/flags/cs.png differ
diff --git a/flags/cu.png b/flags/cu.png
new file mode 100644 (file)
index 0000000..16b2b3a
Binary files /dev/null and b/flags/cu.png differ
diff --git a/flags/cv.png b/flags/cv.png
new file mode 100644 (file)
index 0000000..9de2cb6
Binary files /dev/null and b/flags/cv.png differ
diff --git a/flags/cx.png b/flags/cx.png
new file mode 100644 (file)
index 0000000..d4273dd
Binary files /dev/null and b/flags/cx.png differ
diff --git a/flags/cy.png b/flags/cy.png
new file mode 100644 (file)
index 0000000..57fcca7
Binary files /dev/null and b/flags/cy.png differ
diff --git a/flags/cz.png b/flags/cz.png
new file mode 100644 (file)
index 0000000..8ca1fb6
Binary files /dev/null and b/flags/cz.png differ
diff --git a/flags/de.png b/flags/de.png
new file mode 100644 (file)
index 0000000..ff85c66
Binary files /dev/null and b/flags/de.png differ
diff --git a/flags/dj.png b/flags/dj.png
new file mode 100644 (file)
index 0000000..bb98a86
Binary files /dev/null and b/flags/dj.png differ
diff --git a/flags/dk.png b/flags/dk.png
new file mode 100644 (file)
index 0000000..7986a0f
Binary files /dev/null and b/flags/dk.png differ
diff --git a/flags/dm.png b/flags/dm.png
new file mode 100644 (file)
index 0000000..34e4fb3
Binary files /dev/null and b/flags/dm.png differ
diff --git a/flags/do.png b/flags/do.png
new file mode 100644 (file)
index 0000000..e0c37d6
Binary files /dev/null and b/flags/do.png differ
diff --git a/flags/dz.png b/flags/dz.png
new file mode 100644 (file)
index 0000000..6454fa8
Binary files /dev/null and b/flags/dz.png differ
diff --git a/flags/ec.png b/flags/ec.png
new file mode 100644 (file)
index 0000000..3dc0528
Binary files /dev/null and b/flags/ec.png differ
diff --git a/flags/edu.png b/flags/edu.png
new file mode 100644 (file)
index 0000000..78d0951
Binary files /dev/null and b/flags/edu.png differ
diff --git a/flags/ee.png b/flags/ee.png
new file mode 100644 (file)
index 0000000..80763f0
Binary files /dev/null and b/flags/ee.png differ
diff --git a/flags/eg.png b/flags/eg.png
new file mode 100644 (file)
index 0000000..71947de
Binary files /dev/null and b/flags/eg.png differ
diff --git a/flags/eh.png b/flags/eh.png
new file mode 100644 (file)
index 0000000..d518ea5
Binary files /dev/null and b/flags/eh.png differ
diff --git a/flags/er.png b/flags/er.png
new file mode 100644 (file)
index 0000000..b21bb88
Binary files /dev/null and b/flags/er.png differ
diff --git a/flags/es.png b/flags/es.png
new file mode 100644 (file)
index 0000000..09a7531
Binary files /dev/null and b/flags/es.png differ
diff --git a/flags/et.png b/flags/et.png
new file mode 100644 (file)
index 0000000..dc8f7f0
Binary files /dev/null and b/flags/et.png differ
diff --git a/flags/fi.png b/flags/fi.png
new file mode 100644 (file)
index 0000000..2a5ffe1
Binary files /dev/null and b/flags/fi.png differ
diff --git a/flags/fj.png b/flags/fj.png
new file mode 100644 (file)
index 0000000..91b022c
Binary files /dev/null and b/flags/fj.png differ
diff --git a/flags/fk.png b/flags/fk.png
new file mode 100644 (file)
index 0000000..08e7110
Binary files /dev/null and b/flags/fk.png differ
diff --git a/flags/fm.png b/flags/fm.png
new file mode 100644 (file)
index 0000000..6364ebd
Binary files /dev/null and b/flags/fm.png differ
diff --git a/flags/fo.png b/flags/fo.png
new file mode 100644 (file)
index 0000000..7228cad
Binary files /dev/null and b/flags/fo.png differ
diff --git a/flags/fr.png b/flags/fr.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/flags/fr.png differ
diff --git a/flags/fx.png b/flags/fx.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/flags/fx.png differ
diff --git a/flags/ga.png b/flags/ga.png
new file mode 100644 (file)
index 0000000..5208c02
Binary files /dev/null and b/flags/ga.png differ
diff --git a/flags/gb.png b/flags/gb.png
new file mode 100644 (file)
index 0000000..2b8cdde
Binary files /dev/null and b/flags/gb.png differ
diff --git a/flags/gd.png b/flags/gd.png
new file mode 100644 (file)
index 0000000..318dcdc
Binary files /dev/null and b/flags/gd.png differ
diff --git a/flags/ge.png b/flags/ge.png
new file mode 100644 (file)
index 0000000..0907b86
Binary files /dev/null and b/flags/ge.png differ
diff --git a/flags/gf.png b/flags/gf.png
new file mode 100644 (file)
index 0000000..4ac9c2c
Binary files /dev/null and b/flags/gf.png differ
diff --git a/flags/gh.png b/flags/gh.png
new file mode 100644 (file)
index 0000000..0b4e4f1
Binary files /dev/null and b/flags/gh.png differ
diff --git a/flags/gi.png b/flags/gi.png
new file mode 100644 (file)
index 0000000..023a4f7
Binary files /dev/null and b/flags/gi.png differ
diff --git a/flags/gl.png b/flags/gl.png
new file mode 100644 (file)
index 0000000..2b4a291
Binary files /dev/null and b/flags/gl.png differ
diff --git a/flags/gm.png b/flags/gm.png
new file mode 100644 (file)
index 0000000..75c58fb
Binary files /dev/null and b/flags/gm.png differ
diff --git a/flags/gn.png b/flags/gn.png
new file mode 100644 (file)
index 0000000..55b87f6
Binary files /dev/null and b/flags/gn.png differ
diff --git a/flags/gov.png b/flags/gov.png
new file mode 100644 (file)
index 0000000..a293ebd
Binary files /dev/null and b/flags/gov.png differ
diff --git a/flags/gp.png b/flags/gp.png
new file mode 100644 (file)
index 0000000..89ece94
Binary files /dev/null and b/flags/gp.png differ
diff --git a/flags/gq.png b/flags/gq.png
new file mode 100644 (file)
index 0000000..a2ff841
Binary files /dev/null and b/flags/gq.png differ
diff --git a/flags/gr.png b/flags/gr.png
new file mode 100644 (file)
index 0000000..ddd9f17
Binary files /dev/null and b/flags/gr.png differ
diff --git a/flags/gs.png b/flags/gs.png
new file mode 100644 (file)
index 0000000..5f779ec
Binary files /dev/null and b/flags/gs.png differ
diff --git a/flags/gt.png b/flags/gt.png
new file mode 100644 (file)
index 0000000..455820b
Binary files /dev/null and b/flags/gt.png differ
diff --git a/flags/gu.png b/flags/gu.png
new file mode 100644 (file)
index 0000000..0ea9ba6
Binary files /dev/null and b/flags/gu.png differ
diff --git a/flags/gw.png b/flags/gw.png
new file mode 100644 (file)
index 0000000..12f71fc
Binary files /dev/null and b/flags/gw.png differ
diff --git a/flags/gy.png b/flags/gy.png
new file mode 100644 (file)
index 0000000..e006994
Binary files /dev/null and b/flags/gy.png differ
diff --git a/flags/hk.png b/flags/hk.png
new file mode 100644 (file)
index 0000000..a2b12f0
Binary files /dev/null and b/flags/hk.png differ
diff --git a/flags/hm.png b/flags/hm.png
new file mode 100644 (file)
index 0000000..06e0ec6
Binary files /dev/null and b/flags/hm.png differ
diff --git a/flags/hn.png b/flags/hn.png
new file mode 100644 (file)
index 0000000..292c1b1
Binary files /dev/null and b/flags/hn.png differ
diff --git a/flags/hr.png b/flags/hr.png
new file mode 100644 (file)
index 0000000..e3bb792
Binary files /dev/null and b/flags/hr.png differ
diff --git a/flags/ht.png b/flags/ht.png
new file mode 100644 (file)
index 0000000..237e758
Binary files /dev/null and b/flags/ht.png differ
diff --git a/flags/hu.png b/flags/hu.png
new file mode 100644 (file)
index 0000000..1e2b5f5
Binary files /dev/null and b/flags/hu.png differ
diff --git a/flags/id.png b/flags/id.png
new file mode 100644 (file)
index 0000000..3fb4905
Binary files /dev/null and b/flags/id.png differ
diff --git a/flags/ie.png b/flags/ie.png
new file mode 100644 (file)
index 0000000..9029a23
Binary files /dev/null and b/flags/ie.png differ
diff --git a/flags/il.png b/flags/il.png
new file mode 100644 (file)
index 0000000..deacbf4
Binary files /dev/null and b/flags/il.png differ
diff --git a/flags/in.png b/flags/in.png
new file mode 100644 (file)
index 0000000..fca700e
Binary files /dev/null and b/flags/in.png differ
diff --git a/flags/int.png b/flags/int.png
new file mode 100644 (file)
index 0000000..2f1a781
Binary files /dev/null and b/flags/int.png differ
diff --git a/flags/io.png b/flags/io.png
new file mode 100644 (file)
index 0000000..a64095c
Binary files /dev/null and b/flags/io.png differ
diff --git a/flags/ip.png b/flags/ip.png
new file mode 100644 (file)
index 0000000..883082b
Binary files /dev/null and b/flags/ip.png differ
diff --git a/flags/iq.png b/flags/iq.png
new file mode 100644 (file)
index 0000000..5225164
Binary files /dev/null and b/flags/iq.png differ
diff --git a/flags/ir.png b/flags/ir.png
new file mode 100644 (file)
index 0000000..51da41e
Binary files /dev/null and b/flags/ir.png differ
diff --git a/flags/is.png b/flags/is.png
new file mode 100644 (file)
index 0000000..d91c583
Binary files /dev/null and b/flags/is.png differ
diff --git a/flags/it.png b/flags/it.png
new file mode 100644 (file)
index 0000000..879296f
Binary files /dev/null and b/flags/it.png differ
diff --git a/flags/jm.png b/flags/jm.png
new file mode 100644 (file)
index 0000000..980f613
Binary files /dev/null and b/flags/jm.png differ
diff --git a/flags/jo.png b/flags/jo.png
new file mode 100644 (file)
index 0000000..90f6cc5
Binary files /dev/null and b/flags/jo.png differ
diff --git a/flags/jp.png b/flags/jp.png
new file mode 100644 (file)
index 0000000..8655f75
Binary files /dev/null and b/flags/jp.png differ
diff --git a/flags/ke.png b/flags/ke.png
new file mode 100644 (file)
index 0000000..a4eb346
Binary files /dev/null and b/flags/ke.png differ
diff --git a/flags/kg.png b/flags/kg.png
new file mode 100644 (file)
index 0000000..c765f83
Binary files /dev/null and b/flags/kg.png differ
diff --git a/flags/kh.png b/flags/kh.png
new file mode 100644 (file)
index 0000000..d43f060
Binary files /dev/null and b/flags/kh.png differ
diff --git a/flags/ki.png b/flags/ki.png
new file mode 100644 (file)
index 0000000..2de8785
Binary files /dev/null and b/flags/ki.png differ
diff --git a/flags/km.png b/flags/km.png
new file mode 100644 (file)
index 0000000..335526d
Binary files /dev/null and b/flags/km.png differ
diff --git a/flags/kn.png b/flags/kn.png
new file mode 100644 (file)
index 0000000..be2d801
Binary files /dev/null and b/flags/kn.png differ
diff --git a/flags/kp.png b/flags/kp.png
new file mode 100644 (file)
index 0000000..2430525
Binary files /dev/null and b/flags/kp.png differ
diff --git a/flags/kr.png b/flags/kr.png
new file mode 100644 (file)
index 0000000..48098aa
Binary files /dev/null and b/flags/kr.png differ
diff --git a/flags/kw.png b/flags/kw.png
new file mode 100644 (file)
index 0000000..94fc856
Binary files /dev/null and b/flags/kw.png differ
diff --git a/flags/ky.png b/flags/ky.png
new file mode 100644 (file)
index 0000000..e278582
Binary files /dev/null and b/flags/ky.png differ
diff --git a/flags/kz.png b/flags/kz.png
new file mode 100644 (file)
index 0000000..b158cd9
Binary files /dev/null and b/flags/kz.png differ
diff --git a/flags/la.png b/flags/la.png
new file mode 100644 (file)
index 0000000..7550211
Binary files /dev/null and b/flags/la.png differ
diff --git a/flags/lb.png b/flags/lb.png
new file mode 100644 (file)
index 0000000..2996d75
Binary files /dev/null and b/flags/lb.png differ
diff --git a/flags/lc.png b/flags/lc.png
new file mode 100644 (file)
index 0000000..d6ae67b
Binary files /dev/null and b/flags/lc.png differ
diff --git a/flags/li.png b/flags/li.png
new file mode 100644 (file)
index 0000000..1a601d9
Binary files /dev/null and b/flags/li.png differ
diff --git a/flags/lk.png b/flags/lk.png
new file mode 100644 (file)
index 0000000..1517840
Binary files /dev/null and b/flags/lk.png differ
diff --git a/flags/lr.png b/flags/lr.png
new file mode 100644 (file)
index 0000000..4cd00f3
Binary files /dev/null and b/flags/lr.png differ
diff --git a/flags/ls.png b/flags/ls.png
new file mode 100644 (file)
index 0000000..8fff881
Binary files /dev/null and b/flags/ls.png differ
diff --git a/flags/lt.png b/flags/lt.png
new file mode 100644 (file)
index 0000000..edbb143
Binary files /dev/null and b/flags/lt.png differ
diff --git a/flags/lu.png b/flags/lu.png
new file mode 100644 (file)
index 0000000..9b6e836
Binary files /dev/null and b/flags/lu.png differ
diff --git a/flags/lv.png b/flags/lv.png
new file mode 100644 (file)
index 0000000..90fdf8f
Binary files /dev/null and b/flags/lv.png differ
diff --git a/flags/ly.png b/flags/ly.png
new file mode 100644 (file)
index 0000000..07653b6
Binary files /dev/null and b/flags/ly.png differ
diff --git a/flags/ma.png b/flags/ma.png
new file mode 100644 (file)
index 0000000..5e43d7c
Binary files /dev/null and b/flags/ma.png differ
diff --git a/flags/mc.png b/flags/mc.png
new file mode 100644 (file)
index 0000000..71c462a
Binary files /dev/null and b/flags/mc.png differ
diff --git a/flags/md.png b/flags/md.png
new file mode 100644 (file)
index 0000000..8f7357b
Binary files /dev/null and b/flags/md.png differ
diff --git a/flags/mg.png b/flags/mg.png
new file mode 100644 (file)
index 0000000..d614548
Binary files /dev/null and b/flags/mg.png differ
diff --git a/flags/mil.png b/flags/mil.png
new file mode 100644 (file)
index 0000000..898a255
Binary files /dev/null and b/flags/mil.png differ
diff --git a/flags/mk.png b/flags/mk.png
new file mode 100644 (file)
index 0000000..3cecc6c
Binary files /dev/null and b/flags/mk.png differ
diff --git a/flags/mn.png b/flags/mn.png
new file mode 100644 (file)
index 0000000..407510f
Binary files /dev/null and b/flags/mn.png differ
diff --git a/flags/mq.png b/flags/mq.png
new file mode 100644 (file)
index 0000000..053f950
Binary files /dev/null and b/flags/mq.png differ
diff --git a/flags/mr.png b/flags/mr.png
new file mode 100644 (file)
index 0000000..4e8e04e
Binary files /dev/null and b/flags/mr.png differ
diff --git a/flags/mt.png b/flags/mt.png
new file mode 100644 (file)
index 0000000..83e20a0
Binary files /dev/null and b/flags/mt.png differ
diff --git a/flags/mu.png b/flags/mu.png
new file mode 100644 (file)
index 0000000..e51da3d
Binary files /dev/null and b/flags/mu.png differ
diff --git a/flags/mv.png b/flags/mv.png
new file mode 100644 (file)
index 0000000..449b944
Binary files /dev/null and b/flags/mv.png differ
diff --git a/flags/mx.png b/flags/mx.png
new file mode 100644 (file)
index 0000000..ebd2b79
Binary files /dev/null and b/flags/mx.png differ
diff --git a/flags/my.png b/flags/my.png
new file mode 100644 (file)
index 0000000..1cb6139
Binary files /dev/null and b/flags/my.png differ
diff --git a/flags/na.png b/flags/na.png
new file mode 100644 (file)
index 0000000..c1d5687
Binary files /dev/null and b/flags/na.png differ
diff --git a/flags/nato.png b/flags/nato.png
new file mode 100644 (file)
index 0000000..bd90ac8
Binary files /dev/null and b/flags/nato.png differ
diff --git a/flags/nc.png b/flags/nc.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/flags/nc.png differ
diff --git a/flags/ne.png b/flags/ne.png
new file mode 100644 (file)
index 0000000..6c42be5
Binary files /dev/null and b/flags/ne.png differ
diff --git a/flags/net.png b/flags/net.png
new file mode 100644 (file)
index 0000000..3fad7ca
Binary files /dev/null and b/flags/net.png differ
diff --git a/flags/ng.png b/flags/ng.png
new file mode 100644 (file)
index 0000000..4e39270
Binary files /dev/null and b/flags/ng.png differ
diff --git a/flags/ni.png b/flags/ni.png
new file mode 100644 (file)
index 0000000..ab154d4
Binary files /dev/null and b/flags/ni.png differ
diff --git a/flags/nl.png b/flags/nl.png
new file mode 100644 (file)
index 0000000..4195ae9
Binary files /dev/null and b/flags/nl.png differ
diff --git a/flags/no.png b/flags/no.png
new file mode 100644 (file)
index 0000000..76cea41
Binary files /dev/null and b/flags/no.png differ
diff --git a/flags/np.png b/flags/np.png
new file mode 100644 (file)
index 0000000..1efd2df
Binary files /dev/null and b/flags/np.png differ
diff --git a/flags/nu.png b/flags/nu.png
new file mode 100644 (file)
index 0000000..9d2d75c
Binary files /dev/null and b/flags/nu.png differ
diff --git a/flags/nz.png b/flags/nz.png
new file mode 100644 (file)
index 0000000..9bdd98d
Binary files /dev/null and b/flags/nz.png differ
diff --git a/flags/om.png b/flags/om.png
new file mode 100644 (file)
index 0000000..5588510
Binary files /dev/null and b/flags/om.png differ
diff --git a/flags/org.png b/flags/org.png
new file mode 100644 (file)
index 0000000..3fad7ca
Binary files /dev/null and b/flags/org.png differ
diff --git a/flags/pa.png b/flags/pa.png
new file mode 100644 (file)
index 0000000..cc4ae8d
Binary files /dev/null and b/flags/pa.png differ
diff --git a/flags/pe.png b/flags/pe.png
new file mode 100644 (file)
index 0000000..e799dce
Binary files /dev/null and b/flags/pe.png differ
diff --git a/flags/pf.png b/flags/pf.png
new file mode 100644 (file)
index 0000000..4f60b16
Binary files /dev/null and b/flags/pf.png differ
diff --git a/flags/ph.png b/flags/ph.png
new file mode 100644 (file)
index 0000000..d252607
Binary files /dev/null and b/flags/ph.png differ
diff --git a/flags/pk.png b/flags/pk.png
new file mode 100644 (file)
index 0000000..bc0ad13
Binary files /dev/null and b/flags/pk.png differ
diff --git a/flags/pl.png b/flags/pl.png
new file mode 100644 (file)
index 0000000..a6e3c56
Binary files /dev/null and b/flags/pl.png differ
diff --git a/flags/pt.png b/flags/pt.png
new file mode 100644 (file)
index 0000000..06b747f
Binary files /dev/null and b/flags/pt.png differ
diff --git a/flags/py.png b/flags/py.png
new file mode 100644 (file)
index 0000000..63afcaf
Binary files /dev/null and b/flags/py.png differ
diff --git a/flags/qa.png b/flags/qa.png
new file mode 100644 (file)
index 0000000..ea078df
Binary files /dev/null and b/flags/qa.png differ
diff --git a/flags/ro.png b/flags/ro.png
new file mode 100644 (file)
index 0000000..26ea38a
Binary files /dev/null and b/flags/ro.png differ
diff --git a/flags/ru.png b/flags/ru.png
new file mode 100644 (file)
index 0000000..a5b1a15
Binary files /dev/null and b/flags/ru.png differ
diff --git a/flags/rw.png b/flags/rw.png
new file mode 100644 (file)
index 0000000..ce8dc85
Binary files /dev/null and b/flags/rw.png differ
diff --git a/flags/sa.png b/flags/sa.png
new file mode 100644 (file)
index 0000000..15d1995
Binary files /dev/null and b/flags/sa.png differ
diff --git a/flags/sb.png b/flags/sb.png
new file mode 100644 (file)
index 0000000..5249207
Binary files /dev/null and b/flags/sb.png differ
diff --git a/flags/se.png b/flags/se.png
new file mode 100644 (file)
index 0000000..35aeb7b
Binary files /dev/null and b/flags/se.png differ
diff --git a/flags/sg.png b/flags/sg.png
new file mode 100644 (file)
index 0000000..1ba1eeb
Binary files /dev/null and b/flags/sg.png differ
diff --git a/flags/si.png b/flags/si.png
new file mode 100644 (file)
index 0000000..6bab773
Binary files /dev/null and b/flags/si.png differ
diff --git a/flags/sk.png b/flags/sk.png
new file mode 100644 (file)
index 0000000..98645d1
Binary files /dev/null and b/flags/sk.png differ
diff --git a/flags/sm.png b/flags/sm.png
new file mode 100644 (file)
index 0000000..ce75b61
Binary files /dev/null and b/flags/sm.png differ
diff --git a/flags/sn.png b/flags/sn.png
new file mode 100644 (file)
index 0000000..8ef6581
Binary files /dev/null and b/flags/sn.png differ
diff --git a/flags/su.png b/flags/su.png
new file mode 100644 (file)
index 0000000..0b1b499
Binary files /dev/null and b/flags/su.png differ
diff --git a/flags/sy.png b/flags/sy.png
new file mode 100644 (file)
index 0000000..abb980d
Binary files /dev/null and b/flags/sy.png differ
diff --git a/flags/sz.png b/flags/sz.png
new file mode 100644 (file)
index 0000000..e4a33b0
Binary files /dev/null and b/flags/sz.png differ
diff --git a/flags/tc.png b/flags/tc.png
new file mode 100644 (file)
index 0000000..bf9d43d
Binary files /dev/null and b/flags/tc.png differ
diff --git a/flags/td.png b/flags/td.png
new file mode 100644 (file)
index 0000000..de0df6d
Binary files /dev/null and b/flags/td.png differ
diff --git a/flags/tf.png b/flags/tf.png
new file mode 100644 (file)
index 0000000..85c5591
Binary files /dev/null and b/flags/tf.png differ
diff --git a/flags/tg.png b/flags/tg.png
new file mode 100644 (file)
index 0000000..b9f6101
Binary files /dev/null and b/flags/tg.png differ
diff --git a/flags/th.png b/flags/th.png
new file mode 100644 (file)
index 0000000..2e8a282
Binary files /dev/null and b/flags/th.png differ
diff --git a/flags/tk.png b/flags/tk.png
new file mode 100644 (file)
index 0000000..ab79b28
Binary files /dev/null and b/flags/tk.png differ
diff --git a/flags/tm.png b/flags/tm.png
new file mode 100644 (file)
index 0000000..344049a
Binary files /dev/null and b/flags/tm.png differ
diff --git a/flags/tn.png b/flags/tn.png
new file mode 100644 (file)
index 0000000..23ed954
Binary files /dev/null and b/flags/tn.png differ
diff --git a/flags/to.png b/flags/to.png
new file mode 100644 (file)
index 0000000..3289128
Binary files /dev/null and b/flags/to.png differ
diff --git a/flags/tr.png b/flags/tr.png
new file mode 100644 (file)
index 0000000..175d81a
Binary files /dev/null and b/flags/tr.png differ
diff --git a/flags/tt.png b/flags/tt.png
new file mode 100644 (file)
index 0000000..f5dc69e
Binary files /dev/null and b/flags/tt.png differ
diff --git a/flags/tw.png b/flags/tw.png
new file mode 100644 (file)
index 0000000..106d664
Binary files /dev/null and b/flags/tw.png differ
diff --git a/flags/tz.png b/flags/tz.png
new file mode 100644 (file)
index 0000000..a08c6f4
Binary files /dev/null and b/flags/tz.png differ
diff --git a/flags/ua.png b/flags/ua.png
new file mode 100644 (file)
index 0000000..aa20c83
Binary files /dev/null and b/flags/ua.png differ
diff --git a/flags/ug.png b/flags/ug.png
new file mode 100644 (file)
index 0000000..b86caaa
Binary files /dev/null and b/flags/ug.png differ
diff --git a/flags/uk.png b/flags/uk.png
new file mode 100644 (file)
index 0000000..b83c204
Binary files /dev/null and b/flags/uk.png differ
diff --git a/flags/um.png b/flags/um.png
new file mode 100644 (file)
index 0000000..94ab2b6
Binary files /dev/null and b/flags/um.png differ
diff --git a/flags/unknown.png b/flags/unknown.png
new file mode 100644 (file)
index 0000000..85e4c4c
Binary files /dev/null and b/flags/unknown.png differ
diff --git a/flags/us.png b/flags/us.png
new file mode 100644 (file)
index 0000000..865e458
Binary files /dev/null and b/flags/us.png differ
diff --git a/flags/uy.png b/flags/uy.png
new file mode 100644 (file)
index 0000000..4eb24e0
Binary files /dev/null and b/flags/uy.png differ
diff --git a/flags/uz.png b/flags/uz.png
new file mode 100644 (file)
index 0000000..56e95a8
Binary files /dev/null and b/flags/uz.png differ
diff --git a/flags/va.png b/flags/va.png
new file mode 100644 (file)
index 0000000..7bc573f
Binary files /dev/null and b/flags/va.png differ
diff --git a/flags/vc.png b/flags/vc.png
new file mode 100644 (file)
index 0000000..042d5ab
Binary files /dev/null and b/flags/vc.png differ
diff --git a/flags/ve.png b/flags/ve.png
new file mode 100644 (file)
index 0000000..bb14a3f
Binary files /dev/null and b/flags/ve.png differ
diff --git a/flags/vg.png b/flags/vg.png
new file mode 100644 (file)
index 0000000..b95d418
Binary files /dev/null and b/flags/vg.png differ
diff --git a/flags/vi.png b/flags/vi.png
new file mode 100644 (file)
index 0000000..ceb9deb
Binary files /dev/null and b/flags/vi.png differ
diff --git a/flags/vn.png b/flags/vn.png
new file mode 100644 (file)
index 0000000..7db2375
Binary files /dev/null and b/flags/vn.png differ
diff --git a/flags/wf.png b/flags/wf.png
new file mode 100644 (file)
index 0000000..205bebf
Binary files /dev/null and b/flags/wf.png differ
diff --git a/flags/ws.png b/flags/ws.png
new file mode 100644 (file)
index 0000000..dc53af1
Binary files /dev/null and b/flags/ws.png differ
diff --git a/flags/ye.png b/flags/ye.png
new file mode 100644 (file)
index 0000000..70c3618
Binary files /dev/null and b/flags/ye.png differ
diff --git a/flags/yt.png b/flags/yt.png
new file mode 100644 (file)
index 0000000..f007cfd
Binary files /dev/null and b/flags/yt.png differ
diff --git a/flags/yu.png b/flags/yu.png
new file mode 100644 (file)
index 0000000..b741ead
Binary files /dev/null and b/flags/yu.png differ
diff --git a/flags/za.png b/flags/za.png
new file mode 100644 (file)
index 0000000..b4e1131
Binary files /dev/null and b/flags/za.png differ
diff --git a/flags/ze.png b/flags/ze.png
new file mode 100644 (file)
index 0000000..6955a4e
Binary files /dev/null and b/flags/ze.png differ
diff --git a/flags/zm.png b/flags/zm.png
new file mode 100644 (file)
index 0000000..a489499
Binary files /dev/null and b/flags/zm.png differ
diff --git a/flags/zw.png b/flags/zw.png
new file mode 100644 (file)
index 0000000..78ad9d2
Binary files /dev/null and b/flags/zw.png differ
diff --git a/icon/browser/msie.png b/icon/browser/msie.png
new file mode 100644 (file)
index 0000000..0ff2362
Binary files /dev/null and b/icon/browser/msie.png differ
diff --git a/icon/browser/netscape.png b/icon/browser/netscape.png
new file mode 100644 (file)
index 0000000..7bd913a
Binary files /dev/null and b/icon/browser/netscape.png differ
diff --git a/icon/clock/hr1.png b/icon/clock/hr1.png
new file mode 100644 (file)
index 0000000..f829d37
Binary files /dev/null and b/icon/clock/hr1.png differ
diff --git a/icon/clock/hr10.png b/icon/clock/hr10.png
new file mode 100644 (file)
index 0000000..d8300ee
Binary files /dev/null and b/icon/clock/hr10.png differ
diff --git a/icon/clock/hr11.png b/icon/clock/hr11.png
new file mode 100644 (file)
index 0000000..e2c1294
Binary files /dev/null and b/icon/clock/hr11.png differ
diff --git a/icon/clock/hr12.png b/icon/clock/hr12.png
new file mode 100644 (file)
index 0000000..51dedf5
Binary files /dev/null and b/icon/clock/hr12.png differ
diff --git a/icon/clock/hr2.png b/icon/clock/hr2.png
new file mode 100644 (file)
index 0000000..6ed7457
Binary files /dev/null and b/icon/clock/hr2.png differ
diff --git a/icon/clock/hr3.png b/icon/clock/hr3.png
new file mode 100644 (file)
index 0000000..624558d
Binary files /dev/null and b/icon/clock/hr3.png differ
diff --git a/icon/clock/hr4.png b/icon/clock/hr4.png
new file mode 100644 (file)
index 0000000..c312f79
Binary files /dev/null and b/icon/clock/hr4.png differ
diff --git a/icon/clock/hr5.png b/icon/clock/hr5.png
new file mode 100644 (file)
index 0000000..f223807
Binary files /dev/null and b/icon/clock/hr5.png differ
diff --git a/icon/clock/hr6.png b/icon/clock/hr6.png
new file mode 100644 (file)
index 0000000..9a97b31
Binary files /dev/null and b/icon/clock/hr6.png differ
diff --git a/icon/clock/hr7.png b/icon/clock/hr7.png
new file mode 100644 (file)
index 0000000..67e8b52
Binary files /dev/null and b/icon/clock/hr7.png differ
diff --git a/icon/clock/hr8.png b/icon/clock/hr8.png
new file mode 100644 (file)
index 0000000..7ec6f6f
Binary files /dev/null and b/icon/clock/hr8.png differ
diff --git a/icon/clock/hr9.png b/icon/clock/hr9.png
new file mode 100644 (file)
index 0000000..8e7516c
Binary files /dev/null and b/icon/clock/hr9.png differ
diff --git a/icon/cpu/digital.png b/icon/cpu/digital.png
new file mode 100644 (file)
index 0000000..48f3546
Binary files /dev/null and b/icon/cpu/digital.png differ
diff --git a/icon/cpu/hp.png b/icon/cpu/hp.png
new file mode 100644 (file)
index 0000000..8b4fa8c
Binary files /dev/null and b/icon/cpu/hp.png differ
diff --git a/icon/cpu/ibm.png b/icon/cpu/ibm.png
new file mode 100644 (file)
index 0000000..0743233
Binary files /dev/null and b/icon/cpu/ibm.png differ
diff --git a/icon/cpu/intel.png b/icon/cpu/intel.png
new file mode 100644 (file)
index 0000000..84ca8ba
Binary files /dev/null and b/icon/cpu/intel.png differ
diff --git a/icon/cpu/java.png b/icon/cpu/java.png
new file mode 100644 (file)
index 0000000..d9830fc
Binary files /dev/null and b/icon/cpu/java.png differ
diff --git a/icon/cpu/mips.png b/icon/cpu/mips.png
new file mode 100644 (file)
index 0000000..46125a2
Binary files /dev/null and b/icon/cpu/mips.png differ
diff --git a/icon/cpu/motorola.png b/icon/cpu/motorola.png
new file mode 100644 (file)
index 0000000..dc3615c
Binary files /dev/null and b/icon/cpu/motorola.png differ
diff --git a/icon/cpu/sun.png b/icon/cpu/sun.png
new file mode 100644 (file)
index 0000000..276f1a2
Binary files /dev/null and b/icon/cpu/sun.png differ
diff --git a/icon/cpu/unknown.png b/icon/cpu/unknown.png
new file mode 100644 (file)
index 0000000..69b2d1d
Binary files /dev/null and b/icon/cpu/unknown.png differ
diff --git a/icon/flags/ad.png b/icon/flags/ad.png
new file mode 100644 (file)
index 0000000..f676f64
Binary files /dev/null and b/icon/flags/ad.png differ
diff --git a/icon/flags/ae.png b/icon/flags/ae.png
new file mode 100644 (file)
index 0000000..c6952aa
Binary files /dev/null and b/icon/flags/ae.png differ
diff --git a/icon/flags/aero.png b/icon/flags/aero.png
new file mode 100644 (file)
index 0000000..0d37472
Binary files /dev/null and b/icon/flags/aero.png differ
diff --git a/icon/flags/af.png b/icon/flags/af.png
new file mode 100644 (file)
index 0000000..582fc06
Binary files /dev/null and b/icon/flags/af.png differ
diff --git a/icon/flags/ag.png b/icon/flags/ag.png
new file mode 100644 (file)
index 0000000..fbf917c
Binary files /dev/null and b/icon/flags/ag.png differ
diff --git a/icon/flags/ai.png b/icon/flags/ai.png
new file mode 100644 (file)
index 0000000..badcd96
Binary files /dev/null and b/icon/flags/ai.png differ
diff --git a/icon/flags/al.png b/icon/flags/al.png
new file mode 100644 (file)
index 0000000..2ff7780
Binary files /dev/null and b/icon/flags/al.png differ
diff --git a/icon/flags/am.png b/icon/flags/am.png
new file mode 100644 (file)
index 0000000..c8e056b
Binary files /dev/null and b/icon/flags/am.png differ
diff --git a/icon/flags/an.png b/icon/flags/an.png
new file mode 100644 (file)
index 0000000..6b0f085
Binary files /dev/null and b/icon/flags/an.png differ
diff --git a/icon/flags/ao.png b/icon/flags/ao.png
new file mode 100644 (file)
index 0000000..127796d
Binary files /dev/null and b/icon/flags/ao.png differ
diff --git a/icon/flags/aq.png b/icon/flags/aq.png
new file mode 100644 (file)
index 0000000..dc6b1ab
Binary files /dev/null and b/icon/flags/aq.png differ
diff --git a/icon/flags/ar.png b/icon/flags/ar.png
new file mode 100644 (file)
index 0000000..755b40e
Binary files /dev/null and b/icon/flags/ar.png differ
diff --git a/icon/flags/arpa.png b/icon/flags/arpa.png
new file mode 100644 (file)
index 0000000..4502b8d
Binary files /dev/null and b/icon/flags/arpa.png differ
diff --git a/icon/flags/as.png b/icon/flags/as.png
new file mode 100644 (file)
index 0000000..614d01d
Binary files /dev/null and b/icon/flags/as.png differ
diff --git a/icon/flags/at.png b/icon/flags/at.png
new file mode 100644 (file)
index 0000000..7982808
Binary files /dev/null and b/icon/flags/at.png differ
diff --git a/icon/flags/au.png b/icon/flags/au.png
new file mode 100644 (file)
index 0000000..595bff6
Binary files /dev/null and b/icon/flags/au.png differ
diff --git a/icon/flags/aw.png b/icon/flags/aw.png
new file mode 100644 (file)
index 0000000..4aa502c
Binary files /dev/null and b/icon/flags/aw.png differ
diff --git a/icon/flags/az.png b/icon/flags/az.png
new file mode 100644 (file)
index 0000000..d07d9b4
Binary files /dev/null and b/icon/flags/az.png differ
diff --git a/icon/flags/ba.png b/icon/flags/ba.png
new file mode 100644 (file)
index 0000000..e361d18
Binary files /dev/null and b/icon/flags/ba.png differ
diff --git a/icon/flags/bb.png b/icon/flags/bb.png
new file mode 100644 (file)
index 0000000..88e4e67
Binary files /dev/null and b/icon/flags/bb.png differ
diff --git a/icon/flags/bd.png b/icon/flags/bd.png
new file mode 100644 (file)
index 0000000..b49714a
Binary files /dev/null and b/icon/flags/bd.png differ
diff --git a/icon/flags/be.png b/icon/flags/be.png
new file mode 100644 (file)
index 0000000..872f562
Binary files /dev/null and b/icon/flags/be.png differ
diff --git a/icon/flags/bf.png b/icon/flags/bf.png
new file mode 100644 (file)
index 0000000..9151366
Binary files /dev/null and b/icon/flags/bf.png differ
diff --git a/icon/flags/bg.png b/icon/flags/bg.png
new file mode 100644 (file)
index 0000000..2c1f46b
Binary files /dev/null and b/icon/flags/bg.png differ
diff --git a/icon/flags/bh.png b/icon/flags/bh.png
new file mode 100644 (file)
index 0000000..1b0d04d
Binary files /dev/null and b/icon/flags/bh.png differ
diff --git a/icon/flags/bi.png b/icon/flags/bi.png
new file mode 100644 (file)
index 0000000..518e030
Binary files /dev/null and b/icon/flags/bi.png differ
diff --git a/icon/flags/biz.png b/icon/flags/biz.png
new file mode 100644 (file)
index 0000000..7bd40c2
Binary files /dev/null and b/icon/flags/biz.png differ
diff --git a/icon/flags/bj.png b/icon/flags/bj.png
new file mode 100644 (file)
index 0000000..6473bf1
Binary files /dev/null and b/icon/flags/bj.png differ
diff --git a/icon/flags/bm.png b/icon/flags/bm.png
new file mode 100644 (file)
index 0000000..9ea8c4f
Binary files /dev/null and b/icon/flags/bm.png differ
diff --git a/icon/flags/bn.png b/icon/flags/bn.png
new file mode 100644 (file)
index 0000000..2585a38
Binary files /dev/null and b/icon/flags/bn.png differ
diff --git a/icon/flags/bo.png b/icon/flags/bo.png
new file mode 100644 (file)
index 0000000..27025ca
Binary files /dev/null and b/icon/flags/bo.png differ
diff --git a/icon/flags/br.png b/icon/flags/br.png
new file mode 100644 (file)
index 0000000..f94d2e2
Binary files /dev/null and b/icon/flags/br.png differ
diff --git a/icon/flags/bs.png b/icon/flags/bs.png
new file mode 100644 (file)
index 0000000..0eaa50d
Binary files /dev/null and b/icon/flags/bs.png differ
diff --git a/icon/flags/bt.png b/icon/flags/bt.png
new file mode 100644 (file)
index 0000000..e12aa33
Binary files /dev/null and b/icon/flags/bt.png differ
diff --git a/icon/flags/bv.png b/icon/flags/bv.png
new file mode 100644 (file)
index 0000000..e75a6c8
Binary files /dev/null and b/icon/flags/bv.png differ
diff --git a/icon/flags/bw.png b/icon/flags/bw.png
new file mode 100644 (file)
index 0000000..c224fcd
Binary files /dev/null and b/icon/flags/bw.png differ
diff --git a/icon/flags/by.png b/icon/flags/by.png
new file mode 100644 (file)
index 0000000..ee41b30
Binary files /dev/null and b/icon/flags/by.png differ
diff --git a/icon/flags/bz.png b/icon/flags/bz.png
new file mode 100644 (file)
index 0000000..378ec4a
Binary files /dev/null and b/icon/flags/bz.png differ
diff --git a/icon/flags/ca.png b/icon/flags/ca.png
new file mode 100644 (file)
index 0000000..38a5ae6
Binary files /dev/null and b/icon/flags/ca.png differ
diff --git a/icon/flags/cc.png b/icon/flags/cc.png
new file mode 100644 (file)
index 0000000..0050bab
Binary files /dev/null and b/icon/flags/cc.png differ
diff --git a/icon/flags/cd.png b/icon/flags/cd.png
new file mode 100644 (file)
index 0000000..f50b0ae
Binary files /dev/null and b/icon/flags/cd.png differ
diff --git a/icon/flags/cf.png b/icon/flags/cf.png
new file mode 100644 (file)
index 0000000..fcca6fd
Binary files /dev/null and b/icon/flags/cf.png differ
diff --git a/icon/flags/cg.png b/icon/flags/cg.png
new file mode 100644 (file)
index 0000000..14ada0a
Binary files /dev/null and b/icon/flags/cg.png differ
diff --git a/icon/flags/ch.png b/icon/flags/ch.png
new file mode 100644 (file)
index 0000000..681c706
Binary files /dev/null and b/icon/flags/ch.png differ
diff --git a/icon/flags/ci.png b/icon/flags/ci.png
new file mode 100644 (file)
index 0000000..53a7ccd
Binary files /dev/null and b/icon/flags/ci.png differ
diff --git a/icon/flags/ck.png b/icon/flags/ck.png
new file mode 100644 (file)
index 0000000..18b5fe1
Binary files /dev/null and b/icon/flags/ck.png differ
diff --git a/icon/flags/cl.png b/icon/flags/cl.png
new file mode 100644 (file)
index 0000000..98992c6
Binary files /dev/null and b/icon/flags/cl.png differ
diff --git a/icon/flags/cm.png b/icon/flags/cm.png
new file mode 100644 (file)
index 0000000..4ab7c60
Binary files /dev/null and b/icon/flags/cm.png differ
diff --git a/icon/flags/cn.png b/icon/flags/cn.png
new file mode 100644 (file)
index 0000000..f83bbe1
Binary files /dev/null and b/icon/flags/cn.png differ
diff --git a/icon/flags/co.png b/icon/flags/co.png
new file mode 100644 (file)
index 0000000..9c1d3cc
Binary files /dev/null and b/icon/flags/co.png differ
diff --git a/icon/flags/com.png b/icon/flags/com.png
new file mode 100644 (file)
index 0000000..78d0951
Binary files /dev/null and b/icon/flags/com.png differ
diff --git a/icon/flags/coop.png b/icon/flags/coop.png
new file mode 100644 (file)
index 0000000..114dba3
Binary files /dev/null and b/icon/flags/coop.png differ
diff --git a/icon/flags/cr.png b/icon/flags/cr.png
new file mode 100644 (file)
index 0000000..a3d8933
Binary files /dev/null and b/icon/flags/cr.png differ
diff --git a/icon/flags/cs.png b/icon/flags/cs.png
new file mode 100644 (file)
index 0000000..8ca1fb6
Binary files /dev/null and b/icon/flags/cs.png differ
diff --git a/icon/flags/cu.png b/icon/flags/cu.png
new file mode 100644 (file)
index 0000000..16b2b3a
Binary files /dev/null and b/icon/flags/cu.png differ
diff --git a/icon/flags/cv.png b/icon/flags/cv.png
new file mode 100644 (file)
index 0000000..9de2cb6
Binary files /dev/null and b/icon/flags/cv.png differ
diff --git a/icon/flags/cx.png b/icon/flags/cx.png
new file mode 100644 (file)
index 0000000..d4273dd
Binary files /dev/null and b/icon/flags/cx.png differ
diff --git a/icon/flags/cy.png b/icon/flags/cy.png
new file mode 100644 (file)
index 0000000..57fcca7
Binary files /dev/null and b/icon/flags/cy.png differ
diff --git a/icon/flags/cz.png b/icon/flags/cz.png
new file mode 100644 (file)
index 0000000..8ca1fb6
Binary files /dev/null and b/icon/flags/cz.png differ
diff --git a/icon/flags/de.png b/icon/flags/de.png
new file mode 100644 (file)
index 0000000..ff85c66
Binary files /dev/null and b/icon/flags/de.png differ
diff --git a/icon/flags/dj.png b/icon/flags/dj.png
new file mode 100644 (file)
index 0000000..bb98a86
Binary files /dev/null and b/icon/flags/dj.png differ
diff --git a/icon/flags/dk.png b/icon/flags/dk.png
new file mode 100644 (file)
index 0000000..7986a0f
Binary files /dev/null and b/icon/flags/dk.png differ
diff --git a/icon/flags/dm.png b/icon/flags/dm.png
new file mode 100644 (file)
index 0000000..34e4fb3
Binary files /dev/null and b/icon/flags/dm.png differ
diff --git a/icon/flags/do.png b/icon/flags/do.png
new file mode 100644 (file)
index 0000000..e0c37d6
Binary files /dev/null and b/icon/flags/do.png differ
diff --git a/icon/flags/dz.png b/icon/flags/dz.png
new file mode 100644 (file)
index 0000000..6454fa8
Binary files /dev/null and b/icon/flags/dz.png differ
diff --git a/icon/flags/ec.png b/icon/flags/ec.png
new file mode 100644 (file)
index 0000000..3dc0528
Binary files /dev/null and b/icon/flags/ec.png differ
diff --git a/icon/flags/edu.png b/icon/flags/edu.png
new file mode 100644 (file)
index 0000000..78d0951
Binary files /dev/null and b/icon/flags/edu.png differ
diff --git a/icon/flags/ee.png b/icon/flags/ee.png
new file mode 100644 (file)
index 0000000..80763f0
Binary files /dev/null and b/icon/flags/ee.png differ
diff --git a/icon/flags/eg.png b/icon/flags/eg.png
new file mode 100644 (file)
index 0000000..71947de
Binary files /dev/null and b/icon/flags/eg.png differ
diff --git a/icon/flags/eh.png b/icon/flags/eh.png
new file mode 100644 (file)
index 0000000..d518ea5
Binary files /dev/null and b/icon/flags/eh.png differ
diff --git a/icon/flags/er.png b/icon/flags/er.png
new file mode 100644 (file)
index 0000000..b21bb88
Binary files /dev/null and b/icon/flags/er.png differ
diff --git a/icon/flags/es.png b/icon/flags/es.png
new file mode 100644 (file)
index 0000000..09a7531
Binary files /dev/null and b/icon/flags/es.png differ
diff --git a/icon/flags/et.png b/icon/flags/et.png
new file mode 100644 (file)
index 0000000..dc8f7f0
Binary files /dev/null and b/icon/flags/et.png differ
diff --git a/icon/flags/fi.png b/icon/flags/fi.png
new file mode 100644 (file)
index 0000000..2a5ffe1
Binary files /dev/null and b/icon/flags/fi.png differ
diff --git a/icon/flags/fj.png b/icon/flags/fj.png
new file mode 100644 (file)
index 0000000..91b022c
Binary files /dev/null and b/icon/flags/fj.png differ
diff --git a/icon/flags/fk.png b/icon/flags/fk.png
new file mode 100644 (file)
index 0000000..08e7110
Binary files /dev/null and b/icon/flags/fk.png differ
diff --git a/icon/flags/fm.png b/icon/flags/fm.png
new file mode 100644 (file)
index 0000000..6364ebd
Binary files /dev/null and b/icon/flags/fm.png differ
diff --git a/icon/flags/fo.png b/icon/flags/fo.png
new file mode 100644 (file)
index 0000000..7228cad
Binary files /dev/null and b/icon/flags/fo.png differ
diff --git a/icon/flags/fr.png b/icon/flags/fr.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/icon/flags/fr.png differ
diff --git a/icon/flags/fx.png b/icon/flags/fx.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/icon/flags/fx.png differ
diff --git a/icon/flags/ga.png b/icon/flags/ga.png
new file mode 100644 (file)
index 0000000..5208c02
Binary files /dev/null and b/icon/flags/ga.png differ
diff --git a/icon/flags/gb.png b/icon/flags/gb.png
new file mode 100644 (file)
index 0000000..2b8cdde
Binary files /dev/null and b/icon/flags/gb.png differ
diff --git a/icon/flags/gd.png b/icon/flags/gd.png
new file mode 100644 (file)
index 0000000..318dcdc
Binary files /dev/null and b/icon/flags/gd.png differ
diff --git a/icon/flags/ge.png b/icon/flags/ge.png
new file mode 100644 (file)
index 0000000..0907b86
Binary files /dev/null and b/icon/flags/ge.png differ
diff --git a/icon/flags/gf.png b/icon/flags/gf.png
new file mode 100644 (file)
index 0000000..4ac9c2c
Binary files /dev/null and b/icon/flags/gf.png differ
diff --git a/icon/flags/gh.png b/icon/flags/gh.png
new file mode 100644 (file)
index 0000000..0b4e4f1
Binary files /dev/null and b/icon/flags/gh.png differ
diff --git a/icon/flags/gi.png b/icon/flags/gi.png
new file mode 100644 (file)
index 0000000..023a4f7
Binary files /dev/null and b/icon/flags/gi.png differ
diff --git a/icon/flags/gl.png b/icon/flags/gl.png
new file mode 100644 (file)
index 0000000..2b4a291
Binary files /dev/null and b/icon/flags/gl.png differ
diff --git a/icon/flags/gm.png b/icon/flags/gm.png
new file mode 100644 (file)
index 0000000..75c58fb
Binary files /dev/null and b/icon/flags/gm.png differ
diff --git a/icon/flags/gn.png b/icon/flags/gn.png
new file mode 100644 (file)
index 0000000..55b87f6
Binary files /dev/null and b/icon/flags/gn.png differ
diff --git a/icon/flags/gov.png b/icon/flags/gov.png
new file mode 100644 (file)
index 0000000..a293ebd
Binary files /dev/null and b/icon/flags/gov.png differ
diff --git a/icon/flags/gp.png b/icon/flags/gp.png
new file mode 100644 (file)
index 0000000..89ece94
Binary files /dev/null and b/icon/flags/gp.png differ
diff --git a/icon/flags/gq.png b/icon/flags/gq.png
new file mode 100644 (file)
index 0000000..a2ff841
Binary files /dev/null and b/icon/flags/gq.png differ
diff --git a/icon/flags/gr.png b/icon/flags/gr.png
new file mode 100644 (file)
index 0000000..ddd9f17
Binary files /dev/null and b/icon/flags/gr.png differ
diff --git a/icon/flags/gs.png b/icon/flags/gs.png
new file mode 100644 (file)
index 0000000..5f779ec
Binary files /dev/null and b/icon/flags/gs.png differ
diff --git a/icon/flags/gt.png b/icon/flags/gt.png
new file mode 100644 (file)
index 0000000..455820b
Binary files /dev/null and b/icon/flags/gt.png differ
diff --git a/icon/flags/gu.png b/icon/flags/gu.png
new file mode 100644 (file)
index 0000000..0ea9ba6
Binary files /dev/null and b/icon/flags/gu.png differ
diff --git a/icon/flags/gw.png b/icon/flags/gw.png
new file mode 100644 (file)
index 0000000..12f71fc
Binary files /dev/null and b/icon/flags/gw.png differ
diff --git a/icon/flags/gy.png b/icon/flags/gy.png
new file mode 100644 (file)
index 0000000..e006994
Binary files /dev/null and b/icon/flags/gy.png differ
diff --git a/icon/flags/hk.png b/icon/flags/hk.png
new file mode 100644 (file)
index 0000000..a2b12f0
Binary files /dev/null and b/icon/flags/hk.png differ
diff --git a/icon/flags/hm.png b/icon/flags/hm.png
new file mode 100644 (file)
index 0000000..06e0ec6
Binary files /dev/null and b/icon/flags/hm.png differ
diff --git a/icon/flags/hn.png b/icon/flags/hn.png
new file mode 100644 (file)
index 0000000..292c1b1
Binary files /dev/null and b/icon/flags/hn.png differ
diff --git a/icon/flags/hr.png b/icon/flags/hr.png
new file mode 100644 (file)
index 0000000..e3bb792
Binary files /dev/null and b/icon/flags/hr.png differ
diff --git a/icon/flags/ht.png b/icon/flags/ht.png
new file mode 100644 (file)
index 0000000..237e758
Binary files /dev/null and b/icon/flags/ht.png differ
diff --git a/icon/flags/hu.png b/icon/flags/hu.png
new file mode 100644 (file)
index 0000000..1e2b5f5
Binary files /dev/null and b/icon/flags/hu.png differ
diff --git a/icon/flags/id.png b/icon/flags/id.png
new file mode 100644 (file)
index 0000000..3fb4905
Binary files /dev/null and b/icon/flags/id.png differ
diff --git a/icon/flags/ie.png b/icon/flags/ie.png
new file mode 100644 (file)
index 0000000..9029a23
Binary files /dev/null and b/icon/flags/ie.png differ
diff --git a/icon/flags/il.png b/icon/flags/il.png
new file mode 100644 (file)
index 0000000..deacbf4
Binary files /dev/null and b/icon/flags/il.png differ
diff --git a/icon/flags/in.png b/icon/flags/in.png
new file mode 100644 (file)
index 0000000..fca700e
Binary files /dev/null and b/icon/flags/in.png differ
diff --git a/icon/flags/info.png b/icon/flags/info.png
new file mode 100644 (file)
index 0000000..7bd40c2
Binary files /dev/null and b/icon/flags/info.png differ
diff --git a/icon/flags/int.png b/icon/flags/int.png
new file mode 100644 (file)
index 0000000..2f1a781
Binary files /dev/null and b/icon/flags/int.png differ
diff --git a/icon/flags/io.png b/icon/flags/io.png
new file mode 100644 (file)
index 0000000..a64095c
Binary files /dev/null and b/icon/flags/io.png differ
diff --git a/icon/flags/ip.png b/icon/flags/ip.png
new file mode 100644 (file)
index 0000000..883082b
Binary files /dev/null and b/icon/flags/ip.png differ
diff --git a/icon/flags/iq.png b/icon/flags/iq.png
new file mode 100644 (file)
index 0000000..5225164
Binary files /dev/null and b/icon/flags/iq.png differ
diff --git a/icon/flags/ir.png b/icon/flags/ir.png
new file mode 100644 (file)
index 0000000..51da41e
Binary files /dev/null and b/icon/flags/ir.png differ
diff --git a/icon/flags/is.png b/icon/flags/is.png
new file mode 100644 (file)
index 0000000..d91c583
Binary files /dev/null and b/icon/flags/is.png differ
diff --git a/icon/flags/it.png b/icon/flags/it.png
new file mode 100644 (file)
index 0000000..879296f
Binary files /dev/null and b/icon/flags/it.png differ
diff --git a/icon/flags/jm.png b/icon/flags/jm.png
new file mode 100644 (file)
index 0000000..980f613
Binary files /dev/null and b/icon/flags/jm.png differ
diff --git a/icon/flags/jo.png b/icon/flags/jo.png
new file mode 100644 (file)
index 0000000..90f6cc5
Binary files /dev/null and b/icon/flags/jo.png differ
diff --git a/icon/flags/jp.png b/icon/flags/jp.png
new file mode 100644 (file)
index 0000000..8655f75
Binary files /dev/null and b/icon/flags/jp.png differ
diff --git a/icon/flags/ke.png b/icon/flags/ke.png
new file mode 100644 (file)
index 0000000..a4eb346
Binary files /dev/null and b/icon/flags/ke.png differ
diff --git a/icon/flags/kg.png b/icon/flags/kg.png
new file mode 100644 (file)
index 0000000..c765f83
Binary files /dev/null and b/icon/flags/kg.png differ
diff --git a/icon/flags/kh.png b/icon/flags/kh.png
new file mode 100644 (file)
index 0000000..d43f060
Binary files /dev/null and b/icon/flags/kh.png differ
diff --git a/icon/flags/ki.png b/icon/flags/ki.png
new file mode 100644 (file)
index 0000000..2de8785
Binary files /dev/null and b/icon/flags/ki.png differ
diff --git a/icon/flags/km.png b/icon/flags/km.png
new file mode 100644 (file)
index 0000000..335526d
Binary files /dev/null and b/icon/flags/km.png differ
diff --git a/icon/flags/kn.png b/icon/flags/kn.png
new file mode 100644 (file)
index 0000000..be2d801
Binary files /dev/null and b/icon/flags/kn.png differ
diff --git a/icon/flags/kp.png b/icon/flags/kp.png
new file mode 100644 (file)
index 0000000..2430525
Binary files /dev/null and b/icon/flags/kp.png differ
diff --git a/icon/flags/kr.png b/icon/flags/kr.png
new file mode 100644 (file)
index 0000000..48098aa
Binary files /dev/null and b/icon/flags/kr.png differ
diff --git a/icon/flags/kw.png b/icon/flags/kw.png
new file mode 100644 (file)
index 0000000..94fc856
Binary files /dev/null and b/icon/flags/kw.png differ
diff --git a/icon/flags/ky.png b/icon/flags/ky.png
new file mode 100644 (file)
index 0000000..e278582
Binary files /dev/null and b/icon/flags/ky.png differ
diff --git a/icon/flags/kz.png b/icon/flags/kz.png
new file mode 100644 (file)
index 0000000..b158cd9
Binary files /dev/null and b/icon/flags/kz.png differ
diff --git a/icon/flags/la.png b/icon/flags/la.png
new file mode 100644 (file)
index 0000000..7550211
Binary files /dev/null and b/icon/flags/la.png differ
diff --git a/icon/flags/lb.png b/icon/flags/lb.png
new file mode 100644 (file)
index 0000000..2996d75
Binary files /dev/null and b/icon/flags/lb.png differ
diff --git a/icon/flags/lc.png b/icon/flags/lc.png
new file mode 100644 (file)
index 0000000..d6ae67b
Binary files /dev/null and b/icon/flags/lc.png differ
diff --git a/icon/flags/li.png b/icon/flags/li.png
new file mode 100644 (file)
index 0000000..1a601d9
Binary files /dev/null and b/icon/flags/li.png differ
diff --git a/icon/flags/lk.png b/icon/flags/lk.png
new file mode 100644 (file)
index 0000000..1517840
Binary files /dev/null and b/icon/flags/lk.png differ
diff --git a/icon/flags/lr.png b/icon/flags/lr.png
new file mode 100644 (file)
index 0000000..4cd00f3
Binary files /dev/null and b/icon/flags/lr.png differ
diff --git a/icon/flags/ls.png b/icon/flags/ls.png
new file mode 100644 (file)
index 0000000..8fff881
Binary files /dev/null and b/icon/flags/ls.png differ
diff --git a/icon/flags/lt.png b/icon/flags/lt.png
new file mode 100644 (file)
index 0000000..edbb143
Binary files /dev/null and b/icon/flags/lt.png differ
diff --git a/icon/flags/lu.png b/icon/flags/lu.png
new file mode 100644 (file)
index 0000000..9b6e836
Binary files /dev/null and b/icon/flags/lu.png differ
diff --git a/icon/flags/lv.png b/icon/flags/lv.png
new file mode 100644 (file)
index 0000000..90fdf8f
Binary files /dev/null and b/icon/flags/lv.png differ
diff --git a/icon/flags/ly.png b/icon/flags/ly.png
new file mode 100644 (file)
index 0000000..07653b6
Binary files /dev/null and b/icon/flags/ly.png differ
diff --git a/icon/flags/ma.png b/icon/flags/ma.png
new file mode 100644 (file)
index 0000000..5e43d7c
Binary files /dev/null and b/icon/flags/ma.png differ
diff --git a/icon/flags/mc.png b/icon/flags/mc.png
new file mode 100644 (file)
index 0000000..71c462a
Binary files /dev/null and b/icon/flags/mc.png differ
diff --git a/icon/flags/md.png b/icon/flags/md.png
new file mode 100644 (file)
index 0000000..8f7357b
Binary files /dev/null and b/icon/flags/md.png differ
diff --git a/icon/flags/mg.png b/icon/flags/mg.png
new file mode 100644 (file)
index 0000000..d614548
Binary files /dev/null and b/icon/flags/mg.png differ
diff --git a/icon/flags/mil.png b/icon/flags/mil.png
new file mode 100644 (file)
index 0000000..898a255
Binary files /dev/null and b/icon/flags/mil.png differ
diff --git a/icon/flags/mk.png b/icon/flags/mk.png
new file mode 100644 (file)
index 0000000..3cecc6c
Binary files /dev/null and b/icon/flags/mk.png differ
diff --git a/icon/flags/mn.png b/icon/flags/mn.png
new file mode 100644 (file)
index 0000000..407510f
Binary files /dev/null and b/icon/flags/mn.png differ
diff --git a/icon/flags/mq.png b/icon/flags/mq.png
new file mode 100644 (file)
index 0000000..053f950
Binary files /dev/null and b/icon/flags/mq.png differ
diff --git a/icon/flags/mr.png b/icon/flags/mr.png
new file mode 100644 (file)
index 0000000..4e8e04e
Binary files /dev/null and b/icon/flags/mr.png differ
diff --git a/icon/flags/mt.png b/icon/flags/mt.png
new file mode 100644 (file)
index 0000000..83e20a0
Binary files /dev/null and b/icon/flags/mt.png differ
diff --git a/icon/flags/mu.png b/icon/flags/mu.png
new file mode 100644 (file)
index 0000000..e51da3d
Binary files /dev/null and b/icon/flags/mu.png differ
diff --git a/icon/flags/museum.png b/icon/flags/museum.png
new file mode 100644 (file)
index 0000000..7bd40c2
Binary files /dev/null and b/icon/flags/museum.png differ
diff --git a/icon/flags/mv.png b/icon/flags/mv.png
new file mode 100644 (file)
index 0000000..449b944
Binary files /dev/null and b/icon/flags/mv.png differ
diff --git a/icon/flags/mx.png b/icon/flags/mx.png
new file mode 100644 (file)
index 0000000..ebd2b79
Binary files /dev/null and b/icon/flags/mx.png differ
diff --git a/icon/flags/my.png b/icon/flags/my.png
new file mode 100644 (file)
index 0000000..1cb6139
Binary files /dev/null and b/icon/flags/my.png differ
diff --git a/icon/flags/na.png b/icon/flags/na.png
new file mode 100644 (file)
index 0000000..c1d5687
Binary files /dev/null and b/icon/flags/na.png differ
diff --git a/icon/flags/name.png b/icon/flags/name.png
new file mode 100644 (file)
index 0000000..6767617
Binary files /dev/null and b/icon/flags/name.png differ
diff --git a/icon/flags/nato.png b/icon/flags/nato.png
new file mode 100644 (file)
index 0000000..bd90ac8
Binary files /dev/null and b/icon/flags/nato.png differ
diff --git a/icon/flags/nc.png b/icon/flags/nc.png
new file mode 100644 (file)
index 0000000..aea1151
Binary files /dev/null and b/icon/flags/nc.png differ
diff --git a/icon/flags/ne.png b/icon/flags/ne.png
new file mode 100644 (file)
index 0000000..6c42be5
Binary files /dev/null and b/icon/flags/ne.png differ
diff --git a/icon/flags/net.png b/icon/flags/net.png
new file mode 100644 (file)
index 0000000..3fad7ca
Binary files /dev/null and b/icon/flags/net.png differ
diff --git a/icon/flags/ng.png b/icon/flags/ng.png
new file mode 100644 (file)
index 0000000..4e39270
Binary files /dev/null and b/icon/flags/ng.png differ
diff --git a/icon/flags/ni.png b/icon/flags/ni.png
new file mode 100644 (file)
index 0000000..ab154d4
Binary files /dev/null and b/icon/flags/ni.png differ
diff --git a/icon/flags/nl.png b/icon/flags/nl.png
new file mode 100644 (file)
index 0000000..4195ae9
Binary files /dev/null and b/icon/flags/nl.png differ
diff --git a/icon/flags/no.png b/icon/flags/no.png
new file mode 100644 (file)
index 0000000..76cea41
Binary files /dev/null and b/icon/flags/no.png differ
diff --git a/icon/flags/np.png b/icon/flags/np.png
new file mode 100644 (file)
index 0000000..1efd2df
Binary files /dev/null and b/icon/flags/np.png differ
diff --git a/icon/flags/nt.png b/icon/flags/nt.png
new file mode 100644 (file)
index 0000000..7bd40c2
Binary files /dev/null and b/icon/flags/nt.png differ
diff --git a/icon/flags/nu.png b/icon/flags/nu.png
new file mode 100644 (file)
index 0000000..9d2d75c
Binary files /dev/null and b/icon/flags/nu.png differ
diff --git a/icon/flags/nz.png b/icon/flags/nz.png
new file mode 100644 (file)
index 0000000..9bdd98d
Binary files /dev/null and b/icon/flags/nz.png differ
diff --git a/icon/flags/om.png b/icon/flags/om.png
new file mode 100644 (file)
index 0000000..5588510
Binary files /dev/null and b/icon/flags/om.png differ
diff --git a/icon/flags/org.png b/icon/flags/org.png
new file mode 100644 (file)
index 0000000..3fad7ca
Binary files /dev/null and b/icon/flags/org.png differ
diff --git a/icon/flags/pa.png b/icon/flags/pa.png
new file mode 100644 (file)
index 0000000..cc4ae8d
Binary files /dev/null and b/icon/flags/pa.png differ
diff --git a/icon/flags/pe.png b/icon/flags/pe.png
new file mode 100644 (file)
index 0000000..e799dce
Binary files /dev/null and b/icon/flags/pe.png differ
diff --git a/icon/flags/pf.png b/icon/flags/pf.png
new file mode 100644 (file)
index 0000000..4f60b16
Binary files /dev/null and b/icon/flags/pf.png differ
diff --git a/icon/flags/ph.png b/icon/flags/ph.png
new file mode 100644 (file)
index 0000000..d252607
Binary files /dev/null and b/icon/flags/ph.png differ
diff --git a/icon/flags/pk.png b/icon/flags/pk.png
new file mode 100644 (file)
index 0000000..bc0ad13
Binary files /dev/null and b/icon/flags/pk.png differ
diff --git a/icon/flags/pl.png b/icon/flags/pl.png
new file mode 100644 (file)
index 0000000..a6e3c56
Binary files /dev/null and b/icon/flags/pl.png differ
diff --git a/icon/flags/pro.png b/icon/flags/pro.png
new file mode 100644 (file)
index 0000000..7bd40c2
Binary files /dev/null and b/icon/flags/pro.png differ
diff --git a/icon/flags/pt.png b/icon/flags/pt.png
new file mode 100644 (file)
index 0000000..06b747f
Binary files /dev/null and b/icon/flags/pt.png differ
diff --git a/icon/flags/py.png b/icon/flags/py.png
new file mode 100644 (file)
index 0000000..63afcaf
Binary files /dev/null and b/icon/flags/py.png differ
diff --git a/icon/flags/qa.png b/icon/flags/qa.png
new file mode 100644 (file)
index 0000000..ea078df
Binary files /dev/null and b/icon/flags/qa.png differ
diff --git a/icon/flags/ro.png b/icon/flags/ro.png
new file mode 100644 (file)
index 0000000..26ea38a
Binary files /dev/null and b/icon/flags/ro.png differ
diff --git a/icon/flags/ru.png b/icon/flags/ru.png
new file mode 100644 (file)
index 0000000..a5b1a15
Binary files /dev/null and b/icon/flags/ru.png differ
diff --git a/icon/flags/rw.png b/icon/flags/rw.png
new file mode 100644 (file)
index 0000000..ce8dc85
Binary files /dev/null and b/icon/flags/rw.png differ
diff --git a/icon/flags/sa.png b/icon/flags/sa.png
new file mode 100644 (file)
index 0000000..15d1995
Binary files /dev/null and b/icon/flags/sa.png differ
diff --git a/icon/flags/sb.png b/icon/flags/sb.png
new file mode 100644 (file)
index 0000000..5249207
Binary files /dev/null and b/icon/flags/sb.png differ
diff --git a/icon/flags/se.png b/icon/flags/se.png
new file mode 100644 (file)
index 0000000..35aeb7b
Binary files /dev/null and b/icon/flags/se.png differ
diff --git a/icon/flags/sg.png b/icon/flags/sg.png
new file mode 100644 (file)
index 0000000..1ba1eeb
Binary files /dev/null and b/icon/flags/sg.png differ
diff --git a/icon/flags/si.png b/icon/flags/si.png
new file mode 100644 (file)
index 0000000..6bab773
Binary files /dev/null and b/icon/flags/si.png differ
diff --git a/icon/flags/sk.png b/icon/flags/sk.png
new file mode 100644 (file)
index 0000000..98645d1
Binary files /dev/null and b/icon/flags/sk.png differ
diff --git a/icon/flags/sm.png b/icon/flags/sm.png
new file mode 100644 (file)
index 0000000..ce75b61
Binary files /dev/null and b/icon/flags/sm.png differ
diff --git a/icon/flags/sn.png b/icon/flags/sn.png
new file mode 100644 (file)
index 0000000..8ef6581
Binary files /dev/null and b/icon/flags/sn.png differ
diff --git a/icon/flags/su.png b/icon/flags/su.png
new file mode 100644 (file)
index 0000000..0b1b499
Binary files /dev/null and b/icon/flags/su.png differ
diff --git a/icon/flags/sy.png b/icon/flags/sy.png
new file mode 100644 (file)
index 0000000..abb980d
Binary files /dev/null and b/icon/flags/sy.png differ
diff --git a/icon/flags/sz.png b/icon/flags/sz.png
new file mode 100644 (file)
index 0000000..e4a33b0
Binary files /dev/null and b/icon/flags/sz.png differ
diff --git a/icon/flags/tc.png b/icon/flags/tc.png
new file mode 100644 (file)
index 0000000..bf9d43d
Binary files /dev/null and b/icon/flags/tc.png differ
diff --git a/icon/flags/td.png b/icon/flags/td.png
new file mode 100644 (file)
index 0000000..de0df6d
Binary files /dev/null and b/icon/flags/td.png differ
diff --git a/icon/flags/tf.png b/icon/flags/tf.png
new file mode 100644 (file)
index 0000000..85c5591
Binary files /dev/null and b/icon/flags/tf.png differ
diff --git a/icon/flags/tg.png b/icon/flags/tg.png
new file mode 100644 (file)
index 0000000..b9f6101
Binary files /dev/null and b/icon/flags/tg.png differ
diff --git a/icon/flags/th.png b/icon/flags/th.png
new file mode 100644 (file)
index 0000000..2e8a282
Binary files /dev/null and b/icon/flags/th.png differ
diff --git a/icon/flags/tk.png b/icon/flags/tk.png
new file mode 100644 (file)
index 0000000..ab79b28
Binary files /dev/null and b/icon/flags/tk.png differ
diff --git a/icon/flags/tm.png b/icon/flags/tm.png
new file mode 100644 (file)
index 0000000..344049a
Binary files /dev/null and b/icon/flags/tm.png differ
diff --git a/icon/flags/tn.png b/icon/flags/tn.png
new file mode 100644 (file)
index 0000000..23ed954
Binary files /dev/null and b/icon/flags/tn.png differ
diff --git a/icon/flags/to.png b/icon/flags/to.png
new file mode 100644 (file)
index 0000000..3289128
Binary files /dev/null and b/icon/flags/to.png differ
diff --git a/icon/flags/tr.png b/icon/flags/tr.png
new file mode 100644 (file)
index 0000000..175d81a
Binary files /dev/null and b/icon/flags/tr.png differ
diff --git a/icon/flags/tt.png b/icon/flags/tt.png
new file mode 100644 (file)
index 0000000..f5dc69e
Binary files /dev/null and b/icon/flags/tt.png differ
diff --git a/icon/flags/tv.png b/icon/flags/tv.png
new file mode 100644 (file)
index 0000000..32d4adc
Binary files /dev/null and b/icon/flags/tv.png differ
diff --git a/icon/flags/tw.png b/icon/flags/tw.png
new file mode 100644 (file)
index 0000000..106d664
Binary files /dev/null and b/icon/flags/tw.png differ
diff --git a/icon/flags/tz.png b/icon/flags/tz.png
new file mode 100644 (file)
index 0000000..a08c6f4
Binary files /dev/null and b/icon/flags/tz.png differ
diff --git a/icon/flags/ua.png b/icon/flags/ua.png
new file mode 100644 (file)
index 0000000..aa20c83
Binary files /dev/null and b/icon/flags/ua.png differ
diff --git a/icon/flags/ug.png b/icon/flags/ug.png
new file mode 100644 (file)
index 0000000..b86caaa
Binary files /dev/null and b/icon/flags/ug.png differ
diff --git a/icon/flags/uk.png b/icon/flags/uk.png
new file mode 100644 (file)
index 0000000..b83c204
Binary files /dev/null and b/icon/flags/uk.png differ
diff --git a/icon/flags/um.png b/icon/flags/um.png
new file mode 100644 (file)
index 0000000..94ab2b6
Binary files /dev/null and b/icon/flags/um.png differ
diff --git a/icon/flags/unknown.png b/icon/flags/unknown.png
new file mode 100644 (file)
index 0000000..85e4c4c
Binary files /dev/null and b/icon/flags/unknown.png differ
diff --git a/icon/flags/us.png b/icon/flags/us.png
new file mode 100644 (file)
index 0000000..865e458
Binary files /dev/null and b/icon/flags/us.png differ
diff --git a/icon/flags/uy.png b/icon/flags/uy.png
new file mode 100644 (file)
index 0000000..4eb24e0
Binary files /dev/null and b/icon/flags/uy.png differ
diff --git a/icon/flags/uz.png b/icon/flags/uz.png
new file mode 100644 (file)
index 0000000..56e95a8
Binary files /dev/null and b/icon/flags/uz.png differ
diff --git a/icon/flags/va.png b/icon/flags/va.png
new file mode 100644 (file)
index 0000000..7bc573f
Binary files /dev/null and b/icon/flags/va.png differ
diff --git a/icon/flags/vc.png b/icon/flags/vc.png
new file mode 100644 (file)
index 0000000..042d5ab
Binary files /dev/null and b/icon/flags/vc.png differ
diff --git a/icon/flags/ve.png b/icon/flags/ve.png
new file mode 100644 (file)
index 0000000..bb14a3f
Binary files /dev/null and b/icon/flags/ve.png differ
diff --git a/icon/flags/vg.png b/icon/flags/vg.png
new file mode 100644 (file)
index 0000000..b95d418
Binary files /dev/null and b/icon/flags/vg.png differ
diff --git a/icon/flags/vi.png b/icon/flags/vi.png
new file mode 100644 (file)
index 0000000..ceb9deb
Binary files /dev/null and b/icon/flags/vi.png differ
diff --git a/icon/flags/vn.png b/icon/flags/vn.png
new file mode 100644 (file)
index 0000000..7db2375
Binary files /dev/null and b/icon/flags/vn.png differ
diff --git a/icon/flags/wf.png b/icon/flags/wf.png
new file mode 100644 (file)
index 0000000..205bebf
Binary files /dev/null and b/icon/flags/wf.png differ
diff --git a/icon/flags/ws.png b/icon/flags/ws.png
new file mode 100644 (file)
index 0000000..dc53af1
Binary files /dev/null and b/icon/flags/ws.png differ
diff --git a/icon/flags/ye.png b/icon/flags/ye.png
new file mode 100644 (file)
index 0000000..70c3618
Binary files /dev/null and b/icon/flags/ye.png differ
diff --git a/icon/flags/yt.png b/icon/flags/yt.png
new file mode 100644 (file)
index 0000000..f007cfd
Binary files /dev/null and b/icon/flags/yt.png differ
diff --git a/icon/flags/yu.png b/icon/flags/yu.png
new file mode 100644 (file)
index 0000000..b741ead
Binary files /dev/null and b/icon/flags/yu.png differ
diff --git a/icon/flags/za.png b/icon/flags/za.png
new file mode 100644 (file)
index 0000000..b4e1131
Binary files /dev/null and b/icon/flags/za.png differ
diff --git a/icon/flags/ze.png b/icon/flags/ze.png
new file mode 100644 (file)
index 0000000..6955a4e
Binary files /dev/null and b/icon/flags/ze.png differ
diff --git a/icon/flags/zm.png b/icon/flags/zm.png
new file mode 100644 (file)
index 0000000..a489499
Binary files /dev/null and b/icon/flags/zm.png differ
diff --git a/icon/flags/zw.png b/icon/flags/zw.png
new file mode 100644 (file)
index 0000000..78ad9d2
Binary files /dev/null and b/icon/flags/zw.png differ
diff --git a/icon/os/acorn.png b/icon/os/acorn.png
new file mode 100644 (file)
index 0000000..c20b34d
Binary files /dev/null and b/icon/os/acorn.png differ
diff --git a/icon/os/aix.png b/icon/os/aix.png
new file mode 100644 (file)
index 0000000..90581d1
Binary files /dev/null and b/icon/os/aix.png differ
diff --git a/icon/os/amigaos.png b/icon/os/amigaos.png
new file mode 100644 (file)
index 0000000..8efdcec
Binary files /dev/null and b/icon/os/amigaos.png differ
diff --git a/icon/os/apple.png b/icon/os/apple.png
new file mode 100644 (file)
index 0000000..c3c1fe0
Binary files /dev/null and b/icon/os/apple.png differ
diff --git a/icon/os/beos.png b/icon/os/beos.png
new file mode 100644 (file)
index 0000000..bab61ff
Binary files /dev/null and b/icon/os/beos.png differ
diff --git a/icon/os/bsdi.png b/icon/os/bsdi.png
new file mode 100644 (file)
index 0000000..6bd3d29
Binary files /dev/null and b/icon/os/bsdi.png differ
diff --git a/icon/os/cpm.png b/icon/os/cpm.png
new file mode 100644 (file)
index 0000000..caa00a1
Binary files /dev/null and b/icon/os/cpm.png differ
diff --git a/icon/os/digital.png b/icon/os/digital.png
new file mode 100644 (file)
index 0000000..4b946cb
Binary files /dev/null and b/icon/os/digital.png differ
diff --git a/icon/os/dos.png b/icon/os/dos.png
new file mode 100644 (file)
index 0000000..ce04e4d
Binary files /dev/null and b/icon/os/dos.png differ
diff --git a/icon/os/freebsd.png b/icon/os/freebsd.png
new file mode 100644 (file)
index 0000000..3b59862
Binary files /dev/null and b/icon/os/freebsd.png differ
diff --git a/icon/os/hp.png b/icon/os/hp.png
new file mode 100644 (file)
index 0000000..a1d554a
Binary files /dev/null and b/icon/os/hp.png differ
diff --git a/icon/os/ibm.png b/icon/os/ibm.png
new file mode 100644 (file)
index 0000000..67b103d
Binary files /dev/null and b/icon/os/ibm.png differ
diff --git a/icon/os/irix.png b/icon/os/irix.png
new file mode 100644 (file)
index 0000000..9722f69
Binary files /dev/null and b/icon/os/irix.png differ
diff --git a/icon/os/java.png b/icon/os/java.png
new file mode 100644 (file)
index 0000000..5d9ce9f
Binary files /dev/null and b/icon/os/java.png differ
diff --git a/icon/os/linux.png b/icon/os/linux.png
new file mode 100644 (file)
index 0000000..e55a615
Binary files /dev/null and b/icon/os/linux.png differ
diff --git a/icon/os/mac.png b/icon/os/mac.png
new file mode 100644 (file)
index 0000000..03f56f4
Binary files /dev/null and b/icon/os/mac.png differ
diff --git a/icon/os/netbsd.png b/icon/os/netbsd.png
new file mode 100644 (file)
index 0000000..3b59862
Binary files /dev/null and b/icon/os/netbsd.png differ
diff --git a/icon/os/netware.png b/icon/os/netware.png
new file mode 100644 (file)
index 0000000..79b5c10
Binary files /dev/null and b/icon/os/netware.png differ
diff --git a/icon/os/next.png b/icon/os/next.png
new file mode 100644 (file)
index 0000000..f4da2ae
Binary files /dev/null and b/icon/os/next.png differ
diff --git a/icon/os/openbsd.png b/icon/os/openbsd.png
new file mode 100644 (file)
index 0000000..7d672e5
Binary files /dev/null and b/icon/os/openbsd.png differ
diff --git a/icon/os/osf.png b/icon/os/osf.png
new file mode 100644 (file)
index 0000000..18836fc
Binary files /dev/null and b/icon/os/osf.png differ
diff --git a/icon/os/qnx.png b/icon/os/qnx.png
new file mode 100644 (file)
index 0000000..8ffcce6
Binary files /dev/null and b/icon/os/qnx.png differ
diff --git a/icon/os/sco.png b/icon/os/sco.png
new file mode 100644 (file)
index 0000000..55cc4ca
Binary files /dev/null and b/icon/os/sco.png differ
diff --git a/icon/os/sun.png b/icon/os/sun.png
new file mode 100644 (file)
index 0000000..e37e602
Binary files /dev/null and b/icon/os/sun.png differ
diff --git a/icon/os/unknown.png b/icon/os/unknown.png
new file mode 100644 (file)
index 0000000..895b771
Binary files /dev/null and b/icon/os/unknown.png differ
diff --git a/icon/os/vms.png b/icon/os/vms.png
new file mode 100644 (file)
index 0000000..58568f6
Binary files /dev/null and b/icon/os/vms.png differ
diff --git a/icon/os/warp.png b/icon/os/warp.png
new file mode 100644 (file)
index 0000000..4dcb675
Binary files /dev/null and b/icon/os/warp.png differ
diff --git a/icon/os/webtv.png b/icon/os/webtv.png
new file mode 100644 (file)
index 0000000..07dc458
Binary files /dev/null and b/icon/os/webtv.png differ
diff --git a/icon/os/windows.png b/icon/os/windows.png
new file mode 100644 (file)
index 0000000..a3e9a96
Binary files /dev/null and b/icon/os/windows.png differ
diff --git a/icon/other/awstats_logo1.png b/icon/other/awstats_logo1.png
new file mode 100644 (file)
index 0000000..feb2511
Binary files /dev/null and b/icon/other/awstats_logo1.png differ
diff --git a/icon/other/awstats_logo2.png b/icon/other/awstats_logo2.png
new file mode 100644 (file)
index 0000000..dc71a2a
Binary files /dev/null and b/icon/other/awstats_logo2.png differ
diff --git a/icon/other/barrehh.png b/icon/other/barrehh.png
new file mode 100644 (file)
index 0000000..9e7d4b7
Binary files /dev/null and b/icon/other/barrehh.png differ
diff --git a/icon/other/barrehk.png b/icon/other/barrehk.png
new file mode 100644 (file)
index 0000000..a34cd05
Binary files /dev/null and b/icon/other/barrehk.png differ
diff --git a/icon/other/barrehp.png b/icon/other/barrehp.png
new file mode 100644 (file)
index 0000000..798cc51
Binary files /dev/null and b/icon/other/barrehp.png differ
diff --git a/icon/other/barrevh.png b/icon/other/barrevh.png
new file mode 100644 (file)
index 0000000..15eb6e7
Binary files /dev/null and b/icon/other/barrevh.png differ
diff --git a/icon/other/barrevk.png b/icon/other/barrevk.png
new file mode 100644 (file)
index 0000000..c89de3c
Binary files /dev/null and b/icon/other/barrevk.png differ
diff --git a/icon/other/barrevp.png b/icon/other/barrevp.png
new file mode 100644 (file)
index 0000000..a8531bf
Binary files /dev/null and b/icon/other/barrevp.png differ
diff --git a/icon/other/barrevu.png b/icon/other/barrevu.png
new file mode 100644 (file)
index 0000000..c3d5a12
Binary files /dev/null and b/icon/other/barrevu.png differ
diff --git a/icon/other/barrevv.png b/icon/other/barrevv.png
new file mode 100644 (file)
index 0000000..1a5890b
Binary files /dev/null and b/icon/other/barrevv.png differ
diff --git a/os/acorn.png b/os/acorn.png
new file mode 100644 (file)
index 0000000..c20b34d
Binary files /dev/null and b/os/acorn.png differ
diff --git a/os/aix.png b/os/aix.png
new file mode 100644 (file)
index 0000000..90581d1
Binary files /dev/null and b/os/aix.png differ
diff --git a/os/amigaos.png b/os/amigaos.png
new file mode 100644 (file)
index 0000000..8efdcec
Binary files /dev/null and b/os/amigaos.png differ
diff --git a/os/apple.png b/os/apple.png
new file mode 100644 (file)
index 0000000..c3c1fe0
Binary files /dev/null and b/os/apple.png differ
diff --git a/os/be.png b/os/be.png
new file mode 100644 (file)
index 0000000..bab61ff
Binary files /dev/null and b/os/be.png differ
diff --git a/os/beos.png b/os/beos.png
new file mode 100644 (file)
index 0000000..bab61ff
Binary files /dev/null and b/os/beos.png differ
diff --git a/os/bsdi.png b/os/bsdi.png
new file mode 100644 (file)
index 0000000..6bd3d29
Binary files /dev/null and b/os/bsdi.png differ
diff --git a/os/cpm.png b/os/cpm.png
new file mode 100644 (file)
index 0000000..caa00a1
Binary files /dev/null and b/os/cpm.png differ
diff --git a/os/digital.png b/os/digital.png
new file mode 100644 (file)
index 0000000..4b946cb
Binary files /dev/null and b/os/digital.png differ
diff --git a/os/dos.png b/os/dos.png
new file mode 100644 (file)
index 0000000..ce04e4d
Binary files /dev/null and b/os/dos.png differ
diff --git a/os/freebsd.png b/os/freebsd.png
new file mode 100644 (file)
index 0000000..3b59862
Binary files /dev/null and b/os/freebsd.png differ
diff --git a/os/hp.png b/os/hp.png
new file mode 100644 (file)
index 0000000..a1d554a
Binary files /dev/null and b/os/hp.png differ
diff --git a/os/ibm.png b/os/ibm.png
new file mode 100644 (file)
index 0000000..67b103d
Binary files /dev/null and b/os/ibm.png differ
diff --git a/os/irix.png b/os/irix.png
new file mode 100644 (file)
index 0000000..9722f69
Binary files /dev/null and b/os/irix.png differ
diff --git a/os/java.png b/os/java.png
new file mode 100644 (file)
index 0000000..5d9ce9f
Binary files /dev/null and b/os/java.png differ
diff --git a/os/linux.png b/os/linux.png
new file mode 100644 (file)
index 0000000..e55a615
Binary files /dev/null and b/os/linux.png differ
diff --git a/os/mac.png b/os/mac.png
new file mode 100644 (file)
index 0000000..03f56f4
Binary files /dev/null and b/os/mac.png differ
diff --git a/os/macos.png b/os/macos.png
new file mode 100644 (file)
index 0000000..03f56f4
Binary files /dev/null and b/os/macos.png differ
diff --git a/os/netbsd.png b/os/netbsd.png
new file mode 100644 (file)
index 0000000..3b59862
Binary files /dev/null and b/os/netbsd.png differ
diff --git a/os/netware.png b/os/netware.png
new file mode 100644 (file)
index 0000000..79b5c10
Binary files /dev/null and b/os/netware.png differ
diff --git a/os/next.png b/os/next.png
new file mode 100644 (file)
index 0000000..f4da2ae
Binary files /dev/null and b/os/next.png differ
diff --git a/os/openbsd.png b/os/openbsd.png
new file mode 100644 (file)
index 0000000..7d672e5
Binary files /dev/null and b/os/openbsd.png differ
diff --git a/os/osf.png b/os/osf.png
new file mode 100644 (file)
index 0000000..18836fc
Binary files /dev/null and b/os/osf.png differ
diff --git a/os/qnx.png b/os/qnx.png
new file mode 100644 (file)
index 0000000..8ffcce6
Binary files /dev/null and b/os/qnx.png differ
diff --git a/os/sco.png b/os/sco.png
new file mode 100644 (file)
index 0000000..55cc4ca
Binary files /dev/null and b/os/sco.png differ
diff --git a/os/sun.png b/os/sun.png
new file mode 100644 (file)
index 0000000..e37e602
Binary files /dev/null and b/os/sun.png differ
diff --git a/os/unknown.png b/os/unknown.png
new file mode 100644 (file)
index 0000000..895b771
Binary files /dev/null and b/os/unknown.png differ
diff --git a/os/vms.png b/os/vms.png
new file mode 100644 (file)
index 0000000..58568f6
Binary files /dev/null and b/os/vms.png differ
diff --git a/os/warp.png b/os/warp.png
new file mode 100644 (file)
index 0000000..4dcb675
Binary files /dev/null and b/os/warp.png differ
diff --git a/os/webtv.png b/os/webtv.png
new file mode 100644 (file)
index 0000000..07dc458
Binary files /dev/null and b/os/webtv.png differ
diff --git a/os/windows.png b/os/windows.png
new file mode 100644 (file)
index 0000000..a3e9a96
Binary files /dev/null and b/os/windows.png differ
diff --git a/other/awstats_logo1.png b/other/awstats_logo1.png
new file mode 100644 (file)
index 0000000..feb2511
Binary files /dev/null and b/other/awstats_logo1.png differ
diff --git a/other/awstats_logo2.png b/other/awstats_logo2.png
new file mode 100644 (file)
index 0000000..dc71a2a
Binary files /dev/null and b/other/awstats_logo2.png differ
diff --git a/other/barrehh.png b/other/barrehh.png
new file mode 100644 (file)
index 0000000..9e7d4b7
Binary files /dev/null and b/other/barrehh.png differ
diff --git a/other/barrehk.png b/other/barrehk.png
new file mode 100644 (file)
index 0000000..a34cd05
Binary files /dev/null and b/other/barrehk.png differ
diff --git a/other/barrehp.png b/other/barrehp.png
new file mode 100644 (file)
index 0000000..798cc51
Binary files /dev/null and b/other/barrehp.png differ
diff --git a/other/barrevh.png b/other/barrevh.png
new file mode 100644 (file)
index 0000000..15eb6e7
Binary files /dev/null and b/other/barrevh.png differ
diff --git a/other/barrevk.png b/other/barrevk.png
new file mode 100644 (file)
index 0000000..c89de3c
Binary files /dev/null and b/other/barrevk.png differ
diff --git a/other/barrevp.png b/other/barrevp.png
new file mode 100644 (file)
index 0000000..a8531bf
Binary files /dev/null and b/other/barrevp.png differ
diff --git a/other/barrevu.png b/other/barrevu.png
new file mode 100644 (file)
index 0000000..c3d5a12
Binary files /dev/null and b/other/barrevu.png differ
diff --git a/other/barrevv.png b/other/barrevv.png
new file mode 100644 (file)
index 0000000..1a5890b
Binary files /dev/null and b/other/barrevv.png differ
diff --git a/robotslist.txt b/robotslist.txt
new file mode 100644 (file)
index 0000000..79eb5f5
--- /dev/null
@@ -0,0 +1,6432 @@
+robot-id:                       Acme.Spider\r
+robot-name:                     Acme.Spider\r
+robot-cover-url:                http://www.acme.com/java/software/Acme.Spider.html\r
+robot-details-url:              http://www.acme.com/java/software/Acme.Spider.html\r
+robot-owner-name:               Jef Poskanzer - ACME Laboratories\r
+robot-owner-url:                http://www.acme.com/\r
+robot-owner-email:              jef@acme.com\r
+robot-status:                   active\r
+robot-purpose:                  indexing maintenance statistics\r
+robot-type:                     standalone\r
+robot-platform:                 java\r
+robot-availability:             source\r
+robot-exclusion:                yes\r
+robot-exclusion-useragent:      Due to a deficiency in Java it's not currently possible to set the User-Agent.\r
+robot-noindex:                  no\r
+robot-host:                     *\r
+robot-from:                     no\r
+robot-useragent:                Due to a deficiency in Java it's not currently possible to set the User-Agent.\r
+robot-language:                 java\r
+robot-description:              A Java utility class for writing your own robots.\r
+robot-history:                  \r
+robot-environment:              \r
+modified-date:                  Wed, 04 Dec 1996 21:30:11 GMT\r
+modified-by:                    Jef Poskanzer\r
+\r
+robot-id:           ahoythehomepagefinder\r
+robot-name:         Ahoy! The Homepage Finder\r
+robot-cover-url:    http://www.cs.washington.edu/research/ahoy/\r
+robot-details-url:  http://www.cs.washington.edu/research/ahoy/doc/home.html\r
+robot-owner-name:   Marc Langheinrich\r
+robot-owner-url:    http://www.cs.washington.edu/homes/marclang\r
+robot-owner-email:  marclang@cs.washington.edu\r
+robot-status:       active\r
+robot-purpose:      maintenance\r
+robot-type:         standalone\r
+robot-platform:     UNIX\r
+robot-availability: none\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent: ahoy\r
+robot-noindex:      no\r
+robot-host:         cs.washington.edu\r
+robot-from:         no\r
+robot-useragent:    'Ahoy! The Homepage Finder'\r
+robot-language:     Perl 5 \r
+robot-description:  Ahoy! is an ongoing research project at the\r
+                    University of Washington for finding personal Homepages.\r
+robot-history:      Research project at the University of Washington in \r
+                    1995/1996 \r
+robot-environment:  research\r
+modified-date:      Fri June 28 14:00:00 1996\r
+modified-by:        Marc Langheinrich\r
+\r
+robot-id: Alkaline\r
+robot-name: Alkaline\r
+robot-cover-url: http://www.vestris.com/alkaline\r
+robot-details-url: http://www.vestris.com/alkaline\r
+robot-owner-name: Daniel Doubrovkine\r
+robot-owner-url: http://cuiwww.unige.ch/~doubrov5 \r
+robot-owner-email: dblock@vestris.com\r
+robot-status: development active\r
+robot-purpose: indexing\r
+robot-type: standalone     \r
+robot-platform: unix windows95 windowsNT\r
+robot-availability: binary      \r
+robot-exclusion: yes\r
+robot-exclusion-useragent: AlkalineBOT \r
+robot-noindex: yes\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: AlkalineBOT\r
+robot-language: c++\r
+robot-description: Unix/NT internet/intranet search engine\r
+robot-history: Vestris Inc. search engine designed at the University of\r
+ Geneva \r
+robot-environment: commercial research \r
+modified-date: Thu Dec 10 14:01:13 MET 1998\r
+modified-by: Daniel Doubrovkine <dblock@vestris.com>\r
+\r
+robot-id: appie\r
+robot-name: Walhello appie\r
+robot-cover-url: www.walhello.com\r
+robot-details-url: www.walhello.com/aboutgl.html\r
+robot-owner-name: Aimo Pieterse\r
+robot-owner-url: www.walhello.com\r
+robot-owner-email: aimo@walhello.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windows98\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: appie\r
+robot-noindex: yes\r
+robot-host: 213.10.10.116, 213.10.10.117, 213.10.10.118\r
+robot-from: yes\r
+robot-useragent: appie/1.1\r
+robot-language: Visual C++\r
+robot-description: The appie-spider is used to collect and index web pages for\r
+ the Walhello search engine\r
+robot-history: The spider was built in march/april 2000\r
+robot-environment: commercial\r
+modified-date: Thu, 20 Jul 2000 22:38:00 GMT\r
+modified-by: Aimo Pieterse\r
+\r
+robot-id:           arachnophilia\r
+robot-name:         Arachnophilia\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Vince Taluskie\r
+robot-owner-url:    http://www.ph.utexas.edu/people/vince.html\r
+robot-owner-email:  taluskie@utpapa.ph.utexas.edu\r
+robot-status:       \r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         halsoft.com\r
+robot-from:         \r
+robot-useragent:    Arachnophilia\r
+robot-language:     \r
+robot-description:  The purpose (undertaken by HaL Software) of this run was to\r
+       collect approximately 10k html documents for testing\r
+       automatic abstract generation\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           architext\r
+robot-name:         ArchitextSpider\r
+robot-cover-url:    http://www.excite.com/\r
+robot-details-url:\r
+robot-owner-name:   Architext Software\r
+robot-owner-url:    http://www.atext.com/spider.html\r
+robot-owner-email:  spider@atext.com\r
+robot-status:       \r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *.atext.com\r
+robot-from:         yes\r
+robot-useragent:    ArchitextSpider\r
+robot-language:     perl 5 and c\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       and to generate statistics. The ArchitextSpider collects\r
+       information for the Excite and WebCrawler search engines.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue Oct  3 01:10:26 1995\r
+modified-by:\r
+\r
+robot-id:           aretha\r
+robot-name:         Aretha\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Dave Weiner\r
+robot-owner-url:    http://www.hotwired.com/Staff/userland/ \r
+robot-owner-email:  davew@well.com\r
+robot-status:       \r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     Macintosh\r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  A crude robot built on top of Netscape and Userland\r
+       Frontier, a scripting system for Macs\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: ariadne\r
+robot-name: ARIADNE\r
+robot-cover-url: (forthcoming)\r
+robot-details-url: (forthcoming)\r
+robot-owner-name: Mr. Matthias H. Gross\r
+robot-owner-url: http://www.lrz-muenchen.de/~gross/\r
+robot-owner-email: Gross@dbs.informatik.uni-muenchen.de\r
+robot-status: development\r
+robot-purpose: statistics, development of focused crawling strategies\r
+robot-type: standalone\r
+robot-platform: java\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ariadne\r
+robot-noindex: no\r
+robot-host: dbs.informatik.uni-muenchen.de\r
+robot-from: no\r
+robot-useragent: Due to a deficiency in Java it's not currently possible\r
+ to set the User-Agent.\r
+robot-language: java\r
+robot-description: The ARIADNE robot is a prototype of a environment for\r
+ testing focused crawling strategies.\r
+robot-history: This robot is part of a research project at the\r
+ University of Munich (LMU), started in 2000.\r
+robot-environment: research\r
+modified-date: Mo, 13 Mar 2000 14:00:00 GMT\r
+modified-by: Mr. Matthias H. Gross\r
+\r
+robot-id:           aspider\r
+robot-name:         ASpider (Associative Spider)\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Fred Johansen\r
+robot-owner-url:    http://www.pvv.ntnu.no/~fredj/\r
+robot-owner-email:  fredj@pvv.ntnu.no\r
+robot-status:       retired\r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     unix\r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         nova.pvv.unit.no\r
+robot-from:         yes\r
+robot-useragent:    ASpider/0.09\r
+robot-language:     perl4\r
+robot-description:  ASpider is a CGI script that searches the web for keywords given by the user through a form.\r
+robot-history:      \r
+robot-environment:  hobby\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: atn.txt\r
+robot-name: ATN Worldwide\r
+robot-details-url:\r
+robot-cover-url:\r
+robot-owner-name: All That Net\r
+robot-owner-url: http://www.allthatnet.com\r
+robot-owner-email: info@allthatnet.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type:\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ATN_Worldwide\r
+robot-noindex:\r
+robot-nofollow:\r
+robot-host: www.allthatnet.com\r
+robot-from:\r
+robot-useragent: ATN_Worldwide\r
+robot-language:\r
+robot-description: The ATN robot is used to build the database for the\r
+ AllThatNet search service operated by All That Net.  The robot runs weekly,\r
+ and visits sites in a random order.\r
+robot-history:\r
+robot-environment:\r
+modified-date: July 09, 2000 17:43 GMT\r
+\r
+robot-id: atomz\r
+robot-name: Atomz.com Search Robot\r
+robot-cover-url: http://www.atomz.com/help/\r
+robot-details-url: http://www.atomz.com/\r
+robot-owner-name: Mike Thompson\r
+robot-owner-url: http://www.atomz.com/\r
+robot-owner-email: mike@atomz.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: service\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Atomz\r
+robot-noindex: yes\r
+robot-host: www.atomz.com\r
+robot-from: no\r
+robot-useragent: Atomz/1.0\r
+robot-language: c\r
+robot-description: Robot used for web site search service.\r
+robot-history: Developed for Atomz.com, launched in 1999.\r
+robot-environment: service\r
+modified-date: Tue Jul 13 03:50:06 GMT 1999\r
+modified-by: Mike Thompson\r
+\r
+robot-id: auresys\r
+robot-name: AURESYS\r
+robot-cover-url: http://crrm.univ-mrs.fr\r
+robot-details-url: http://crrm.univ-mrs.fr      \r
+robot-owner-name: Mannina Bruno \r
+robot-owner-url: ftp://crrm.univ-mrs.fr/pub/CVetud/Etudiants/Mannina/CVbruno.htm        \r
+robot-owner-email: mannina@crrm.univ-mrs.fr     \r
+robot-status: robot actively in use\r
+robot-purpose: indexing,statistics\r
+robot-type: Standalone\r
+robot-platform: Aix, Unix\r
+robot-availability: Protected by Password\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent:  \r
+robot-noindex: no\r
+robot-host: crrm.univ-mrs.fr, 192.134.99.192\r
+robot-from: Yes\r
+robot-useragent: AURESYS/1.0\r
+robot-language: Perl 5.001m\r
+robot-description: The AURESYS is used to build a personnal database for \r
+ somebody who search information. The database is structured to be \r
+ analysed. AURESYS can found new server by IP incremental. It generate \r
+ statistics... \r
+robot-history: This robot finds its roots in a research project at the \r
+ University of Marseille in 1995-1996\r
+robot-environment: used for Research\r
+modified-date: Mon, 1 Jul 1996 14:30:00 GMT \r
+modified-by: Mannina Bruno\r
+\r
+robot-id:           backrub\r
+robot-name:         BackRub\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:   Larry Page\r
+robot-owner-url:    http://backrub.stanford.edu/\r
+robot-owner-email:  page@leland.stanford.edu\r
+robot-status:\r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *.stanford.edu\r
+robot-from:         yes\r
+robot-useragent:    BackRub/*.*\r
+robot-language:     Java.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Wed Feb 21 02:57:42 1996.\r
+modified-by:\r
+\r
+robot-id: bigbrother\r
+robot-name: Big Brother\r
+robot-cover-url: http://pauillac.inria.fr/~fpottier/mac-soft.html.en\r
+robot-details-url:\r
+robot-owner-name: Francois Pottier\r
+robot-owner-url: http://pauillac.inria.fr/~fpottier/\r
+robot-owner-email: Francois.Pottier@inria.fr\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: mac\r
+robot-availability: binary\r
+robot-exclusion: no\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: not as of 1.0\r
+robot-useragent: Big Brother\r
+robot-language: c++\r
+robot-description: Macintosh-hosted link validation tool.\r
+robot-history:\r
+robot-environment: shareware\r
+modified-date: Thu Sep 19 18:01:46 MET DST 1996\r
+modified-by: Francois Pottier\r
+\r
+robot-id: bjaaland\r
+robot-name: Bjaaland\r
+robot-cover-url: http://www.textuality.com\r
+robot-details-url: http://www.textuality.com\r
+robot-owner-name: Tim Bray\r
+robot-owner-url: http://www.textuality.com\r
+robot-owner-email: tbray@textuality.com\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Bjaaland\r
+robot-noindex: no\r
+robot-host: barry.bitmovers.net\r
+robot-from: no\r
+robot-useragent: Bjaaland/0.5\r
+robot-language: perl5\r
+robot-description: Crawls sites listed in the ODP (see http://dmoz.org)\r
+robot-history: None, yet\r
+robot-environment: service\r
+modified-date: Monday, 19 July 1999, 13:46:00 PDT\r
+modified-by: tbray@textuality.com\r
+\r
+robot-id:           blackwidow\r
+robot-name:         BlackWidow\r
+robot-cover-url:    http://140.190.65.12/~khooghee/index.html\r
+robot-details-url:\r
+robot-owner-name:   Kevin Hoogheem\r
+robot-owner-url:\r
+robot-owner-email:  khooghee@marys.smumn.edu\r
+robot-status:\r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         140.190.65.*\r
+robot-from:         yes\r
+robot-useragent:    BlackWidow\r
+robot-language:     C, C++.\r
+robot-description:  Started as a research project and now is used to find links\r
+       for a random link generator.  Also is used to research the\r
+       growth of specific sites.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri Feb  9 00:11:22 1996.\r
+modified-by:\r
+\r
+robot-id: blindekuh\r
+robot-name: Die Blinde Kuh\r
+robot-cover-url: http://www.blinde-kuh.de/\r
+robot-details-url: http://www.blinde-kuh.de/robot.html (german language)\r
+robot-owner-name: Stefan R. Mueller\r
+robot-owner-url: http://www.rrz.uni-hamburg.de/philsem/stefan_mueller/\r
+robot-owner-email:maschinist@blinde-kuh.de\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: browser\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: minerva.sozialwiss.uni-hamburg.de\r
+robot-from: yes\r
+robot-useragent: Die Blinde Kuh\r
+robot-language: perl5\r
+robot-description: The robot is use for indixing and proofing the\r
+ registered urls in the german language search-engine for kids.\r
+ Its a none-comercial one-woman-project of Birgit Bachmann\r
+ living in Hamburg, Germany.\r
+robot-history: The robot was developed by Stefan R. Mueller\r
+ to help by the manual proof of registered Links.\r
+robot-environment: hobby\r
+modified-date: Mon Jul 22 1998\r
+modified-by: Stefan R. Mueller\r
+\r
+robot-id:Bloodhound\r
+robot-name:Bloodhound\r
+robot-cover-url:http://web.ukonline.co.uk/genius/bloodhound.htm\r
+robot-details-url:http://web.ukonline.co.uk/genius/bloodhound.htm\r
+robot-owner-name:Dean Smart\r
+robot-owner-url:http://web.ukonline.co.uk/genius/bloodhound.htm\r
+robot-owner-email:genius@ukonline.co.uk\r
+robot-status:active\r
+robot-purpose:Web Site Download\r
+robot-type:standalone\r
+robot-platform:Windows95, WindowsNT, Windows98, Windows2000\r
+robot-availability:Executible\r
+robot-exclusion:No\r
+robot-exclusion-useragent:Ukonline\r
+robot-noindex:No\r
+robot-host:*\r
+robot-from:No\r
+robot-useragent:None\r
+robot-language:Perl5\r
+robot-description:Bloodhound will download an whole web site depending on the\r
+ number of links to follow specified by the user.\r
+robot-history:First version was released on the 1 july 2000\r
+robot-environment:Commercial\r
+modified-date:1 july 2000\r
+modified-by:Dean Smart\r
+\r
+robot-id: brightnet\r
+robot-name: bright.net caching robot\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:\r
+robot-owner-url:\r
+robot-owner-email:\r
+robot-status: active \r
+robot-purpose: caching \r
+robot-type:\r
+robot-platform: \r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-noindex:\r
+robot-host: 209.143.1.46\r
+robot-from: no\r
+robot-useragent: Mozilla/3.01 (compatible;)\r
+robot-language:\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date: Fri Nov 13 14:08:01 EST 1998\r
+modified-by: brian d foy <comdog@computerdog.com>\r
+\r
+robot-id: bspider\r
+robot-name: BSpider\r
+robot-cover-url: not yet\r
+robot-details-url: not yet\r
+robot-owner-name: Yo Okumura\r
+robot-owner-url: not yet\r
+robot-owner-email: okumura@rsl.crl.fujixerox.co.jp\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: bspider\r
+robot-noindex: yes\r
+robot-host: 210.159.73.34, 210.159.73.35\r
+robot-from: yes\r
+robot-useragent: BSpider/1.0 libwww-perl/0.40\r
+robot-language: perl\r
+robot-description: BSpider is crawling inside of Japanese domain for indexing.\r
+robot-history: Starts Apr 1997 in a research project at Fuji Xerox Corp.\r
+ Research Lab.\r
+robot-environment: research\r
+modified-date: Mon, 21 Apr 1997 18:00:00 JST\r
+modified-by: Yo Okumura\r
+\r
+robot-id:           cactvschemistryspider\r
+robot-name:         CACTVS Chemistry Spider\r
+robot-cover-url:    http://schiele.organik.uni-erlangen.de/cactvs/spider.html\r
+robot-details-url:\r
+robot-owner-name:   W. D. Ihlenfeldt\r
+robot-owner-url:    http://schiele.organik.uni-erlangen.de/cactvs/\r
+robot-owner-email:  wdi@eros.ccc.uni-erlangen.de\r
+robot-status:\r
+robot-purpose:      indexing.\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         utamaro.organik.uni-erlangen.de\r
+robot-from:         no\r
+robot-useragent:    CACTVS Chemistry Spider\r
+robot-language:     TCL, C\r
+robot-description:  Locates chemical structures in Chemical MIME formats on WWW\r
+       and FTP servers and downloads them into database searchable\r
+       with structure queries (substructure, fullstructure,\r
+       formula, properties etc.)\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sat Mar 30 00:55:40 1996.\r
+modified-by:\r
+\r
+robot-id: calif\r
+robot-name: Calif\r
+robot-details-url: http://www.tnps.dp.ua/calif/details.html\r
+robot-cover-url: http://www.tnps.dp.ua/calif/\r
+robot-owner-name: Alexander Kosarev\r
+robot-owner-url: http://www.tnps.dp.ua/~dark/\r
+robot-owner-email: kosarev@tnps.net\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: calif\r
+robot-noindex: yes\r
+robot-host: cobra.tnps.dp.ua\r
+robot-from: yes\r
+robot-useragent: Calif/0.6 (kosarev@tnps.net; http://www.tnps.dp.ua)\r
+robot-language: c++\r
+robot-description: Used to build searchable index\r
+robot-history: In development stage\r
+robot-environment: research\r
+modified-date: Sun, 6 Jun 1999 13:25:33 GMT\r
+\r
+robot-id: cassandra\r
+robot-name: Cassandra\r
+robot-cover-url: http://post.mipt.rssi.ru/~billy/search/\r
+robot-details-url: http://post.mipt.rssi.ru/~billy/search/\r
+robot-owner-name: Mr. Oleg Bilibin\r
+robot-owner-url:        http://post.mipt.rssi.ru/~billy/\r
+robot-owner-email: billy168@aha.ru\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: crossplatform\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: www.aha.ru\r
+robot-from: no\r
+robot-useragent:\r
+robot-language: java\r
+robot-description: Cassandra search robot is used to create and maintain indexed database for widespread Information Retrieval System\r
+robot-history: Master of Science degree project at Moscow Institute of Physics and Technology\r
+robot-environment: research\r
+modified-date: Wed, 3 Jun 1998 12:00:00 GMT\r
+\r
+robot-id: cgireader\r
+robot-name: Digimarc Marcspider/CGI\r
+robot-cover-url: http://www.digimarc.com/prod_fam.html\r
+robot-details-url: http://www.digimarc.com/prod_fam.html\r
+robot-owner-name: Digimarc Corporation\r
+robot-owner-url: http://www.digimarc.com\r
+robot-owner-email: wmreader@digimarc.com\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host: 206.102.3.*\r
+robot-from:\r
+robot-useragent: Digimarc CGIReader/1.0\r
+robot-language: c++\r
+robot-description: Similar to Digimarc Marcspider, Marcspider/CGI examines\r
+    image files for watermarks but more focused on CGI Urls.\r
+    In order to not waste internet bandwidth with yet another crawler,\r
+    we have contracted with one of the major crawlers/seach engines\r
+    to provide us with a list of specific CGI URLs of interest to us.\r
+    If an URL is to a page of interest (via CGI), then we access the\r
+    page to get the image URLs from it, but we do not crawl to\r
+    any other pages.\r
+robot-history: First operation in December 1997\r
+robot-environment: service\r
+modified-date: Fri, 5 Dec 1997 12:00:00 GMT\r
+modified-by: Dan Ramos\r
+\r
+robot-id:           checkbot\r
+robot-name:         Checkbot\r
+robot-cover-url:    http://www.xs4all.nl/~graaff/checkbot/\r
+robot-details-url:\r
+robot-owner-name:   Hans de Graaff\r
+robot-owner-url:    http://www.xs4all.nl/~graaff/checkbot/\r
+robot-owner-email:  graaff@xs4all.nl\r
+robot-status:       active\r
+robot-purpose:      maintenance\r
+robot-type:         standalone\r
+robot-platform:     unix,WindowsNT\r
+robot-availability: source\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         no\r
+robot-useragent:    Checkbot/x.xx LWP/5.x\r
+robot-language:     perl 5\r
+robot-description:  Checkbot checks links in a\r
+       given set of pages on one or more servers. It reports links\r
+       which returned an error code\r
+robot-history:      \r
+robot-environment:  hobby\r
+modified-date:      Tue Jun 25 07:44:00 1996\r
+modified-by:        Hans de Graaff\r
+\r
+robot-id:           churl\r
+robot-name:         churl\r
+robot-cover-url:    http://www-personal.engin.umich.edu/~yunke/scripts/churl/\r
+robot-details-url:\r
+robot-owner-name:   Justin Yunke\r
+robot-owner-url:    http://www-personal.engin.umich.edu/~yunke/\r
+robot-owner-email:  yunke@umich.edu\r
+robot-status:       \r
+robot-purpose:      maintenance\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  A URL checking robot, which stays within one step of the\r
+       local server\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: cmc\r
+robot-name: CMC/0.01\r
+robot-details-url: http://www2.next.ne.jp/cgi-bin/music/help.cgi?phase=robot\r
+robot-cover-url: http://www2.next.ne.jp/music/\r
+robot-owner-name: Shinobu Kubota.\r
+robot-owner-url: http://www2.next.ne.jp/cgi-bin/music/help.cgi?phase=profile\r
+robot-owner-email: shinobu@po.next.ne.jp\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: CMC/0.01\r
+robot-noindex: no\r
+robot-host: haruna.next.ne.jp, 203.183.218.4\r
+robot-from: yes\r
+robot-useragent: CMC/0.01\r
+robot-language: perl5\r
+robot-description: This CMC/0.01 robot collects the information\r
+                   of the page that was registered to the music\r
+                   specialty searching service.\r
+robot-history: This CMC/0.01 robot was made for the computer\r
+               music center on November 4, 1997.\r
+robot-environment: hobby\r
+modified-date: Sat, 23 May 1998 17:22:00 GMT\r
+\r
+robot-id:Collective\r
+robot-name:Collective\r
+robot-cover-url:http://web.ukonline.co.uk/genius/collective.htm\r
+robot-details-url:http://web.ukonline.co.uk/genius/collective.htm\r
+robot-owner-name:Dean Smart\r
+robot-owner-url:http://web.ukonline.co.uk/genius/collective.htm\r
+robot-owner-email:genius@ukonline.co.uk\r
+robot-status:development\r
+robot-purpose:Collective is a highly configurable program designed to interrogate\r
+ online search engines and online databases, it will ignore web pages\r
+ that lie about there content, and dead url's, it can be super strict, it searches each web page\r
+ it finds for your search terms to ensure those terms are present, any positive urls are added to\r
+ a html file for your to view at any time even before the program has finished.\r
+ Collective can wonder the web for days if required.\r
+robot-type:standalone\r
+robot-platform:Windows95, WindowsNT, Windows98, Windows2000\r
+robot-availability:Executible\r
+robot-exclusion:No\r
+robot-exclusion-useragent:\r
+robot-noindex:No\r
+robot-host:*\r
+robot-from:No\r
+robot-useragent:LWP\r
+robot-language:Perl5 (With Visual Basic front-end)\r
+robot-description:Collective is the most cleverest Internet search engine,\r
+ With all found url?s guaranteed to have your search terms.\r
+robot-history:Develpment started on August, 03, 2000\r
+robot-environment:Commercial\r
+modified-date:August, 03, 2000\r
+modified-by:Dean Smart\r
+\r
+robot-id: combine\r
+robot-name: Combine System\r
+robot-cover-url: http://www.ub2.lu.se/~tsao/combine.ps\r
+robot-details-url: http://www.ub2.lu.se/~tsao/combine.ps\r
+robot-owner-name: Yong Cao\r
+robot-owner-url: http://www.ub2.lu.se/\r
+robot-owner-email: tsao@munin.ub2.lu.se\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: combine\r
+robot-noindex: no\r
+robot-host: *.ub2.lu.se\r
+robot-from: yes\r
+robot-useragent: combine/0.0\r
+robot-language: c, perl5\r
+robot-description: An open, distributed, and efficient harvester.\r
+robot-history: A complete re-design of the NWI robot (w3index) for DESIRE project. \r
+robot-environment: research\r
+modified-date: Tue, 04 Mar 1997 16:11:40 GMT\r
+modified-by: Yong Cao\r
+\r
+robot-id: conceptbot\r
+robot-name: Conceptbot\r
+robot-cover-url: http://www.aptltd.com/~sifry/conceptbot/tech.html\r
+robot-details-url: http://www.aptltd.com/~sifry/conceptbot\r
+robot-owner-name: David L. Sifry\r
+robot-owner-url: http://www.aptltd.com/~sifry\r
+robot-owner-email: david@sifry.com\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: conceptbot\r
+robot-noindex: yes\r
+robot-host: router.sifry.com\r
+robot-from: yes\r
+robot-useragent: conceptbot/0.3\r
+robot-language: perl5\r
+robot-description:The Conceptbot spider is used to research\r
+ concept-based search indexing techniques.  It uses a breadth first seach\r
+ to spread out the number of hits on a single site over time.  The spider\r
+ runs at irregular intervals and is still under construction.\r
+robot-history: This spider began as a research project at Sifry\r
+ Consulting in April 1996.\r
+robot-environment: research\r
+modified-date: Mon, 9 Sep 1996 15:31:07 GMT\r
+modified-by: David L. Sifry <david@sifry.com>\r
+\r
+robot-id:           core\r
+robot-name:         Web Core / Roots\r
+robot-cover-url:    http://www.di.uminho.pt/wc\r
+robot-details-url:\r
+robot-owner-name:   Jorge Portugal Andrade\r
+robot-owner-url:    http://www.di.uminho.pt/~cbm\r
+robot-owner-email:  wc@di.uminho.pt\r
+robot-status:\r
+robot-purpose:      indexing, maintenance\r
+robot-type:\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         shiva.di.uminho.pt, from www.di.uminho.pt\r
+robot-from:         no\r
+robot-useragent:    root/0.1\r
+robot-language:     perl\r
+robot-description:  Parallel robot developed in Minho Univeristy in Portugal to\r
+       catalog relations among URLs and to support a special\r
+       navigation aid.\r
+robot-history:      First versions since October 1995.\r
+robot-environment:\r
+modified-date:      Wed Jan 10 23:19:08 1996.\r
+modified-by:\r
+\r
+robot-id:           cshkust\r
+robot-name:         CS-HKUST WISE: WWW Index and Search Engine\r
+robot-cover-url:    http://www.cs.ust.hk/IndexServer/\r
+robot-details-url:\r
+robot-owner-name:   Budi Yuwono\r
+robot-owner-url:    http://www.cis.ohio-state.edu/~yuwono-b/\r
+robot-owner-email:  yuwono-b@cs.ust.hk\r
+robot-status:       \r
+robot-purpose:      \r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         dbx.cs.ust.hk\r
+robot-from:         yes\r
+robot-useragent:    CS-HKUST-IndexServer/1.0\r
+robot-language:     c\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       and validate HTML. Part of an on-going research project on\r
+       Internet Resource Discovery at Department of Computer\r
+       Science, Hong Kong University of Science and Technology\r
+       (CS-HKUST)\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue Jun 20 02:39:16 1995\r
+modified-by:\r
+\r
+robot-id: cusco\r
+robot-name: Cusco\r
+robot-cover-url: http://www.cusco.pt/\r
+robot-details-url: http://www.cusco.pt/\r
+robot-owner-name: Filipe Costa Clerigo\r
+robot-owner-url: http://www.viatecla.pt/\r
+robot-owner-email: clerigo@viatecla.pt\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standlone\r
+robot-platform: any\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: cusco\r
+robot-noindex: yes\r
+robot-host: *.cusco.pt, *.viatecla.pt\r
+robot-from: yes\r
+robot-useragent: Cusco/3.2\r
+robot-language: Java\r
+robot-description: The Cusco robot is part of the CUCE indexing sistem. It\r
+ gathers information from several sources: HTTP, Databases or filesystem. At\r
+ this moment, it's universe is the .pt domain and the information it gathers\r
+ is available at the Portuguese search engine Cusco http://www.cusco.pt/.\r
+robot-history: The Cusco search engine started in the company ViaTecla as a\r
+ project to demonstrate our development capabilities and to fill the need of\r
+ a portuguese-specific search engine. Now, we are developping new\r
+ functionalities that cannot be found in any other on-line search engines.\r
+robot-environment:service, research\r
+modified-date: Mon, 21 Jun 1999 14:00:00 GMT\r
+modified-by: Filipe Costa Clerigo\r
+\r
+robot-id: cyberspyder\r
+robot-name: CyberSpyder Link Test\r
+robot-cover-url: http://www.cyberspyder.com/cslnkts1.html\r
+robot-details-url: http://www.cyberspyder.com/cslnkts1.html\r
+robot-owner-name: Tom Aman\r
+robot-owner-url: http://www.cyberspyder.com/\r
+robot-owner-email: amant@cyberspyder.com\r
+robot-status: active\r
+robot-purpose: link validation, some html validation\r
+robot-type: standalone\r
+robot-platform: windows 3.1x, windows95, windowsNT\r
+robot-availability: binary\r
+robot-exclusion: user configurable\r
+robot-exclusion-useragent: cyberspyder\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: CyberSpyder/2.1\r
+robot-language: Microsoft Visual Basic 4.0\r
+robot-description: CyberSpyder Link Test is intended to be used as a site\r
+ management tool to validate that HTTP links on a page are functional and to\r
+ produce various analysis reports to assist in managing a site.\r
+robot-history: The original robot was created to fill a widely seen need\r
+ for a easy to use link checking program.\r
+robot-environment: commercial\r
+modified-date: Tue, 31 Mar 1998 01:02:00 GMT\r
+modified-by: Tom Aman\r
+\r
+robot-id:           deweb\r
+robot-name:         DeWeb(c) Katalog/Index\r
+robot-cover-url:    http://deweb.orbit.de/\r
+robot-details-url:\r
+robot-owner-name:   Marc Mielke\r
+robot-owner-url:    http://www.orbit.de/\r
+robot-owner-email:  dewebmaster@orbit.de\r
+robot-status:       \r
+robot-purpose:      indexing, mirroring, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         deweb.orbit.de\r
+robot-from:         yes\r
+robot-useragent:    Deweb/1.01\r
+robot-language:     perl 4\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       perform mirroring, and generate statistics. Uses combination\r
+       of Informix(tm) Database and WN 1.11 serversoftware for\r
+       indexing/ressource discovery, fulltext search, text\r
+       excerpts.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Wed Jan 10 08:23:00 1996\r
+modified-by:\r
+\r
+robot-id: dienstspider\r
+robot-name: DienstSpider\r
+robot-cover-url: http://sappho.csi.forth.gr:22000/\r
+robot-details-url:\r
+robot-owner-name: Antonis Sidiropoulos \r
+robot-owner-url: http://www.csi.forth.gr/~asidirop\r
+robot-owner-email: asidirop@csi.forth.gr\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone \r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion:\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host: sappho.csi.forth.gr \r
+robot-from:\r
+robot-useragent: dienstspider/1.0  \r
+robot-language: C\r
+robot-description: Indexing and searching the NCSTRL(Networked Computer Science Technical Report Library) and ERCIM Collection\r
+robot-history: The version 1.0 was the developer's master thesis project\r
+robot-environment: research\r
+modified-date: Fri, 4 Dec 1998 0:0:0 GMT\r
+modified-by: asidirop@csi.forth.gr\r
+\r
+robot-id: diibot\r
+robot-name: Digital Integrity Robot\r
+robot-cover-url: http://www.digital-integrity.com/robotinfo.html\r
+robot-details-url: http://www.digital-integrity.com/robotinfo.html\r
+robot-owner-name: Digital Integrity, Inc.\r
+robot-owner-url: \r
+robot-owner-email: robot@digital-integrity.com\r
+robot-status: Production\r
+robot-purpose: WWW Indexing\r
+robot-type:\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: Conforms to robots.txt convention\r
+robot-exclusion-useragent: DIIbot\r
+robot-noindex: Yes\r
+robot-host: digital-integrity.com\r
+robot-from:\r
+robot-useragent: DIIbot\r
+robot-language: Java/C\r
+robot-description:\r
+robot-history: \r
+robot-environment:\r
+modified-date:\r
+modified-by:\r
+\r
+robot-id: directhit\r
+robot-name: Direct Hit Grabber\r
+robot-cover-url: www.directhit.com\r
+robot-details-url: http://www.directhit.com/about/company/spider.html\r
+robot-status: active\r
+robot-description: Direct Hit Grabber indexes documents and\r
+ collects Web statistics for the Direct Hit Search Engine (available at\r
+ www.directhit.com and our partners' sites)\r
+robot-purpose: Indexing and statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-language: C++\r
+robot-owner-name: Direct Hit Technologies, Inc.\r
+robot-owner-url: www.directhit.com\r
+robot-owner-email: DirectHitGrabber@directhit.com\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: grabber\r
+robot-noindex: yes\r
+robot-host: *.directhit.com\r
+robot-from: yes\r
+robot-useragent: grabber\r
+robot-environment: service\r
+modified-by: grabber@directhit.com\r
+\r
+robot-id: dnabot\r
+robot-name: DNAbot\r
+robot-cover-url: http://xx.dnainc.co.jp/dnabot/\r
+robot-details-url: http://xx.dnainc.co.jp/dnabot/\r
+robot-owner-name: Tom Tanaka\r
+robot-owner-url: http://xx.dnainc.co.jp\r
+robot-owner-email: tomatell@xx.dnainc.co.jp\r
+robot-status: development       \r
+robot-purpose: indexing \r
+robot-type: standalone          \r
+robot-platform: unix, windows, windows95, windowsNT, mac\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: xx.dnainc.co.jp\r
+robot-from: yes \r
+robot-useragent: DNAbot/1.0\r
+robot-language: java \r
+robot-description: A search robot in 100 java, with its own built-in\r
+ database engine and web server . Currently in Japanese.\r
+robot-history: Developed by DNA, Inc.(Niigata City, Japan) in 1998.\r
+robot-environment: commercial\r
+modified-date: Mon, 4 Jan 1999 14:30:00 GMT\r
+modified-by: Tom Tanaka\r
+\r
+robot-id: download_express\r
+robot-name: DownLoad Express\r
+robot-cover-url: http://www.jacksonville.net/~dlxpress\r
+robot-details-url: http://www.jacksonville.net/~dlxpress\r
+robot-owner-name: DownLoad Express Inc\r
+robot-owner-url: http://www.jacksonville.net/~dlxpress\r
+robot-owner-email: dlxpress@mediaone.net\r
+robot-status: active\r
+robot-purpose: graphic download\r
+robot-type: standalone\r
+robot-platform: win95/98/NT\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: downloadexpress\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent:\r
+robot-language: visual basic\r
+robot-description: automatically downloads graphics from the web\r
+robot-history:\r
+robot-environment: commerical\r
+modified-date: Wed, 05 May 1998\r
+modified-by: DownLoad Express Inc\r
+\r
+robot-id: dragonbot\r
+robot-name: DragonBot\r
+robot-cover-url: http://www.paczone.com/\r
+robot-details-url:\r
+robot-owner-name: Paul Law\r
+robot-owner-url:\r
+robot-owner-email: admin@paczone.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: DragonBot\r
+robot-noindex: no\r
+robot-host: *.paczone.com\r
+robot-from: no\r
+robot-useragent: DragonBot/1.0 libwww/5.0\r
+robot-language: C++\r
+robot-description: Collects web pages related to East Asia\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Mon, 11 Aug 1997 00:00:00 GMT\r
+modified-by:\r
+\r
+robot-id: dwcp\r
+robot-name: DWCP (Dridus' Web Cataloging Project)\r
+robot-cover-url: http://www.dridus.com/~rmm/dwcp.php3\r
+robot-details-url: http://www.dridus.com/~rmm/dwcp.php3\r
+robot-owner-name: Ross Mellgren (Dridus Norwind)\r
+robot-owner-url: http://www.dridus.com/~rmm\r
+robot-owner-email: rmm@dridus.com\r
+robot-status: development\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: java\r
+robot-availability: source, binary, data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: dwcp\r
+robot-noindex: no\r
+robot-host: *.dridus.com\r
+robot-from: dridus@dridus.com\r
+robot-useragent: DWCP/2.0\r
+robot-language: java\r
+robot-description: The DWCP robot is used to gather information for\r
+ Dridus' Web Cataloging Project, which is intended to catalog domains and\r
+ urls (no content).\r
+robot-history: Developed from scratch by Dridus Norwind.\r
+robot-environment: hobby\r
+modified-date: Sat, 10 Jul 1999 00:05:40 GMT\r
+modified-by: Ross Mellgren\r
+\r
+robot-id: ebiness\r
+robot-name: EbiNess\r
+robot-cover-url: http://www.carisbrook.co.uk/ebiness/\r
+robot-details-url: http://www.carisbrook.co.uk/ebiness/tech/\r
+robot-owner-name: Mike Davis\r
+robot-owner-url: http://www.carisbrook.co.uk/mike/\r
+robot-owner-email: mdavis@kieser.net\r
+robot-status: development\r
+robot-purpose: statistics\r
+robot-type: standalone\r
+robot-platform: unix(Linux)\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ebiness\r
+robot-noindex: no\r
+robot-host:\r
+robot-from: no\r
+robot-useragent: EbiNess/0.01a\r
+robot-language: c++\r
+robot-description: Used to build a url relationship database, to be \r
+ viewed in 3D\r
+robot-history: Dreamed it up over some beers\r
+robot-environment: hobby\r
+modified-date: Mon, 29 May 2000 01:37:00 GMT\r
+modified-by: Mike Davis\r
+\r
+robot-id:           eit\r
+robot-name:         EIT Link Verifier Robot\r
+robot-cover-url:    http://wsk.eit.com/wsk/dist/doc/admin/webtest/verify_links.html\r
+robot-details-url:\r
+robot-owner-name:   Jim McGuire\r
+robot-owner-url:    http://www.eit.com/people/mcguire.html\r
+robot-owner-email:  mcguire@eit.COM\r
+robot-status:       \r
+robot-purpose:      maintenance\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         \r
+robot-useragent:    EIT-Link-Verifier-Robot/0.2\r
+robot-language:     \r
+robot-description:  Combination of an HTML form and a CGI script that verifies\r
+       links from a given starting point (with some controls to\r
+       prevent it going off-site or limitless)\r
+robot-history:      Announced on 12 July 1994\r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           emacs\r
+robot-name:         Emacs-w3 Search Engine\r
+robot-cover-url:    http://www.cs.indiana.edu/elisp/w3/docs.html\r
+robot-details-url:\r
+robot-owner-name:   William M. Perry\r
+robot-owner-url:    http://www.cs.indiana.edu/hyplan/wmperry.html\r
+robot-owner-email:  wmperry@spry.com\r
+robot-status:       retired\r
+robot-purpose:      indexing\r
+robot-type:         browser\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         yes\r
+robot-useragent:    Emacs-w3/v[0-9\.]+\r
+robot-language:     lisp\r
+robot-description:  Its purpose is to generate a Resource Discovery database\r
+       This code has not been looked at in a while, but will be\r
+       spruced up for the Emacs-w3 2.2.0 release sometime this\r
+       month. It will honor the /robots.txt file at that\r
+       time.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Fri May 5 16:09:18 1995\r
+modified-by:\r
+\r
+robot-id:           emcspider\r
+robot-name:         ananzi\r
+robot-cover-url:    http://www.empirical.com/\r
+robot-details-url:\r
+robot-owner-name:   Hunter Payne\r
+robot-owner-url:    http://www.psc.edu/~hpayne/\r
+robot-owner-email:  hpayne@u-media.com\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         bilbo.internal.empirical.com\r
+robot-from:         yes\r
+robot-useragent:    EMC Spider\r
+robot-language:     java This spider is still in the development stages but, it\r
+       will be hitting sites while I finish debugging it.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Wed May 29 14:47:01 1996.\r
+modified-by:\r
+\r
+robot-id: esther\r
+robot-name: Esther\r
+robot-details-url: http://search.falconsoft.com/\r
+robot-cover-url: http://search.falconsoft.com/\r
+robot-owner-name: Tim Gustafson\r
+robot-owner-url: http://www.falconsoft.com/\r
+robot-owner-email:      tim@falconsoft.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix (FreeBSD 2.2.8)\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: esther\r
+robot-noindex: no\r
+robot-host: *.falconsoft.com\r
+robot-from: yes\r
+robot-useragent: esther\r
+robot-language: perl5\r
+robot-description: This crawler is used to build the search database at\r
+ http://search.falconsoft.com/\r
+robot-history: Developed by FalconSoft.\r
+robot-environment: service\r
+modified-date: Tue, 22 Dec 1998 00:22:00 PST\r
+\r
+robot-id: evliyacelebi\r
+robot-name: Evliya Celebi\r
+robot-cover-url: http://ilker.ulak.net.tr/EvliyaCelebi\r
+robot-details-url: http://ilker.ulak.net.tr/EvliyaCelebi\r
+robot-owner-name: Ilker TEMIR\r
+robot-owner-url: http://ilker.ulak.net.tr\r
+robot-owner-email: ilker@ulak.net.tr\r
+robot-status: development\r
+robot-purpose: indexing turkish content\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: N/A\r
+robot-noindex: no\r
+robot-nofollow: no\r
+robot-host: 193.140.83.*\r
+robot-from: ilker@ulak.net.tr\r
+robot-useragent: Evliya Celebi v0.151 - http://ilker.ulak.net.tr\r
+robot-language: perl5\r
+robot-history:\r
+robot-description: crawles pages under ".tr" domain or having turkish character\r
+ encoding (iso-8859-9 or windows-1254)\r
+robot-environment: hobby\r
+modified-date: Fri Mar 31 15:03:12 GMT 2000\r
+\r
+robot-id:           nzexplorer\r
+robot-name:         nzexplorer\r
+robot-cover-url:    http://nzexplorer.co.nz/\r
+robot-details-url:\r
+robot-owner-name:   Paul Bourke\r
+robot-owner-url:    http://bourke.gen.nz/paul.html\r
+robot-owner-email:  paul@bourke.gen.nz\r
+robot-status:       active\r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:     UNIX\r
+robot-availability: source (commercial)\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         bitz.co.nz\r
+robot-from:         no\r
+robot-useragent:    explorersearch\r
+robot-language:     c++\r
+robot-history:      Started in 1995 to provide a comprehensive index\r
+                    to WWW pages within New Zealand. Now also used in\r
+                    Malaysia and other countries.\r
+robot-environment:  service\r
+modified-date:      Tues, 25 Jun 1996\r
+modified-by:        Paul Bourke\r
+\r
+robot-id:fdse\r
+robot-name:Fluid Dynamics Search Engine robot\r
+robot-cover-url:http://www.xav.com/scripts/search/\r
+robot-details-url:http://www.xav.com/scripts/search/\r
+robot-owner-name:Zoltan Milosevic\r
+robot-owner-url:http://www.xav.com/\r
+robot-owner-email:zoltanm@nickname.net\r
+robot-status:active\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:unix;windows\r
+robot-availability:source;data\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:FDSE\r
+robot-noindex:yes\r
+robot-host:yes\r
+robot-from:*\r
+robot-useragent:Mozilla/4.0 (compatible: FDSE robot)\r
+robot-language:perl5\r
+robot-description:Crawls remote sites as part of a shareware search engine\r
+ program\r
+robot-history:Developed in late 1998 over three pots of coffee\r
+robot-environment:commercial\r
+modified-date:Fri, 21 Jan 2000 10:15:49 GMT\r
+modified-by:Zoltan Milosevic\r
+\r
+robot-id:      felix\r
+robot-name:    Felix IDE\r
+robot-cover-url:       http://www.pentone.com\r
+robot-details-url:     http://www.pentone.com\r
+robot-owner-name:      The Pentone Group, Inc.\r
+robot-owner-url:       http://www.pentone.com\r
+robot-owner-email:     felix@pentone.com\r
+robot-status:  active\r
+robot-purpose: indexing, statistics\r
+robot-type:    standalone\r
+robot-platform:        windows95, windowsNT\r
+robot-availability:    binary\r
+robot-exclusion:       yes\r
+robot-exclusion-useragent:     FELIX IDE\r
+robot-noindex: yes\r
+robot-host:    *\r
+robot-from:    yes\r
+robot-useragent:       FelixIDE/1.0\r
+robot-language:        visual basic\r
+robot-description:     Felix IDE is a retail personal search spider sold by\r
+  The Pentone Group, Inc.\r
+  It supports the proprietary exclusion "Frequency: ??????????" in the\r
+  robots.txt file. Question marks represent an integer\r
+  indicating number of milliseconds to delay between document requests. This\r
+  is called VDRF(tm) or Variable Document Retrieval Frequency. Note that\r
+  users can re-define the useragent name.\r
+robot-history: This robot began as an in-house tool for the lucrative Felix\r
+  IDS (Information Discovery Service) and has gone retail.\r
+robot-environment:     service, commercial, research\r
+modified-date: Fri, 11 Apr 1997 19:08:02 GMT\r
+modified-by:   Kerry B. Rogers\r
+\r
+robot-id:           ferret\r
+robot-name:         Wild Ferret Web Hopper #1, #2, #3\r
+robot-cover-url:    http://www.greenearth.com/\r
+robot-details-url:\r
+robot-owner-name:   Greg Boswell\r
+robot-owner-url:    http://www.greenearth.com/\r
+robot-owner-email:  ghbos@postoffice.worldnet.att.net\r
+robot-status:\r
+robot-purpose:      indexing maintenance statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    Hazel's Ferret Web hopper, \r
+robot-language:     C++, Visual Basic, Java\r
+robot-description:  The wild ferret web hopper's are designed as specific agents\r
+       to retrieve data from all available sources on the internet.\r
+       They work in an onion format hopping from spot to spot one\r
+       level at a time over the internet. The information is\r
+       gathered into different relational databases, known as\r
+       "Hazel's Horde". The information is publicly available and\r
+       will be free for the browsing at www.greenearth.com.\r
+       Effective date of the data posting is to be\r
+       announced.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon Feb 19 00:28:37 1996.\r
+modified-by:\r
+\r
+robot-id: fetchrover\r
+robot-name: FetchRover\r
+robot-cover-url: http://www.engsoftware.com/fetch.htm\r
+robot-details-url: http://www.engsoftware.com/spiders/\r
+robot-owner-name: Dr. Kenneth R. Wadland\r
+robot-owner-url: http://www.engsoftware.com/\r
+robot-owner-email: ken@engsoftware.com\r
+robot-status: active\r
+robot-purpose: maintenance, statistics\r
+robot-type: standalone\r
+robot-platform: Windows/NT, Windows/95, Solaris SPARC\r
+robot-availability: binary, source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ESI\r
+robot-noindex: N/A\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: ESIRover v1.0\r
+robot-language: C++\r
+robot-description: FetchRover fetches Web Pages.  \r
+   It is an automated page-fetching engine. FetchRover can be\r
+   used stand-alone or as the front-end to a full-featured Spider.\r
+   Its database can use any ODBC compliant database server, including\r
+   Microsoft Access, Oracle, Sybase SQL Server, FoxPro, etc.\r
+robot-history:  Used as the front-end to SmartSpider (another Spider \r
+   product sold by Engineeering Software, Inc.)\r
+robot-environment: commercial, service\r
+modified-date: Thu, 03 Apr 1997 21:49:50 EST\r
+modified-by: Ken Wadland\r
+\r
+robot-id: fido\r
+robot-name: fido\r
+robot-cover-url: http://www.planetsearch.com/\r
+robot-details-url: http://www.planetsearch.com/info/fido.html\r
+robot-owner-name: Steve DeJarnett\r
+robot-owner-url: http://www.planetsearch.com/staff/steved.html\r
+robot-owner-email: fido@planetsearch.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: fido\r
+robot-noindex: no\r
+robot-host: fido.planetsearch.com, *.planetsearch.com, 206.64.113.*\r
+robot-from: yes\r
+robot-useragent: fido/0.9 Harvest/1.4.pl2\r
+robot-language: c, perl5\r
+robot-description: fido is used to gather documents for the search engine \r
+                   provided in the PlanetSearch service, which is operated by\r
+                   the Philips Multimedia Center.  The robots runs on an\r
+                   ongoing basis.\r
+robot-history: fido was originally based on the Harvest Gatherer, but has since\r
+               evolved into a new creature.  It still uses some support code\r
+               from Harvest.\r
+robot-environment: service\r
+modified-date: Sat, 2 Nov 1996 00:08:18 GMT\r
+modified-by: Steve DeJarnett\r
+\r
+robot-id:           finnish\r
+robot-name:         Hämähäkki\r
+robot-cover-url:    http://www.fi/search.html\r
+robot-details-url:  http://www.fi/www/spider.html\r
+robot-owner-name:   Timo Metsälä\r
+robot-owner-url:    http://www.fi/~timo/\r
+robot-owner-email:  Timo.Metsala@www.fi\r
+robot-status:       active\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     UNIX\r
+robot-availability: no\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:  Hämähäkki\r
+robot-noindex:      no\r
+robot-host:         *.www.fi\r
+robot-from:         yes\r
+robot-useragent:    Hämähäkki/0.2\r
+robot-language:     C\r
+robot-description:  Its purpose is to generate a Resource Discovery\r
+       database from the Finnish (top-level domain .fi) www servers.\r
+       The resulting database is used by the search engine \r
+       at http://www.fi/search.html.\r
+robot-history:      (The name Hämähäkki is just Finnish for spider.)\r
+robot-environment:\r
+modified-date:      1996-06-25   \r
+modified-by:        Jaakko.Hyvatti@www.fi\r
+\r
+robot-id: fireball\r
+robot-name: KIT-Fireball\r
+robot-cover-url: http://www.fireball.de\r
+robot-details-url: http://www.fireball.de/technik.html (in German)\r
+robot-owner-name: Gruner + Jahr Electronic Media Service GmbH\r
+robot-owner-url: http://www.ems.guj.de\r
+robot-owner-email:info@fireball.de\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: KIT-Fireball\r
+robot-noindex: yes\r
+robot-host: *.fireball.de\r
+robot-from: yes\r
+robot-useragent: KIT-Fireball/2.0 libwww/5.0a\r
+robot-language: c\r
+robot-description: The Fireball robots gather web documents in German\r
+ language for the database of the Fireball search service.\r
+robot-history: The robot was developed by Benhui Chen in a research\r
+ project at the Technical University of Berlin in 1996 and was\r
+ re-implemented by its developer in 1997 for the present owner.\r
+robot-environment: service \r
+modified-date: Mon Feb 23 11:26:08 1998\r
+modified-by: Detlev Kalb\r
+\r
+robot-id:           fish\r
+robot-name:         Fish search\r
+robot-cover-url:    http://www.win.tue.nl/bin/fish-search\r
+robot-details-url:\r
+robot-owner-name:   Paul De Bra\r
+robot-owner-url:    http://www.win.tue.nl/win/cs/is/debra/\r
+robot-owner-email:  debra@win.tue.nl\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: binary\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         www.win.tue.nl\r
+robot-from:         no\r
+robot-useragent:    Fish-Search-Robot\r
+robot-language:     c\r
+robot-description:  Its purpose is to discover resources on the fly a version\r
+       exists that is integrated into the T&uuml;bingen Mosaic\r
+       2.4.2 browser (also written in C)\r
+robot-history:      Originated as an addition to Mosaic for X\r
+robot-environment:\r
+modified-date:      Mon May 8 09:31:19 1995\r
+modified-by:\r
+\r
+robot-id: fouineur\r
+robot-name: Fouineur\r
+robot-cover-url: http://fouineur.9bit.qc.ca/\r
+robot-details-url: http://fouineur.9bit.qc.ca/informations.html\r
+robot-owner-name: Joel Vandal\r
+robot-owner-url: http://www.9bit.qc.ca/~jvandal/\r
+robot-owner-email: jvandal@9bit.qc.ca\r
+robot-status: development\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: unix, windows \r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: fouineur\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: Mozilla/2.0 (compatible fouineur v2.0; fouineur.9bit.qc.ca)\r
+robot-language: perl5\r
+robot-description: This robot build automaticaly a database that is used\r
+                   by our own search engine. This robot auto-detect the\r
+                   language (french, english & spanish) used in the HTML\r
+                   page. Each database record generated by this robot\r
+                   include: date, url, title, total words, title, size\r
+                   and de-htmlized text. Also support server-side and\r
+                   client-side IMAGEMAP.\r
+robot-history: No robots does all thing that we need for our usage.\r
+robot-environment: service\r
+modified-date: Thu, 9 Jan 1997 22:57:28 EST\r
+modified-by: jvandal@9bit.qc.ca\r
+\r
+robot-id:           francoroute\r
+robot-name:         Robot Francoroute\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:   Marc-Antoine Parent\r
+robot-owner-url:    http://www.crim.ca/~maparent\r
+robot-owner-email:  maparent@crim.ca\r
+robot-status:\r
+robot-purpose:      indexing, mirroring, statistics\r
+robot-type:         browser\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         zorro.crim.ca\r
+robot-from:         yes\r
+robot-useragent:    Robot du CRIM 1.0a\r
+robot-language:     perl5, sqlplus\r
+robot-description:  Part of the RISQ's Francoroute project for researching\r
+       francophone. Uses the Accept-Language tag and reduces demand\r
+       accordingly\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Wed Jan 10 23:56:22 1996.\r
+modified-by:\r
+\r
+robot-id: freecrawl\r
+robot-name: Freecrawl\r
+robot-cover-url: http://euroseek.net/\r
+robot-owner-name: Jesper Ekhall\r
+robot-owner-email: ekhall@freeside.net\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Freecrawl\r
+robot-noindex: no\r
+robot-host: *.freeside.net\r
+robot-from: yes\r
+robot-useragent: Freecrawl\r
+robot-language: c\r
+robot-description: The Freecrawl robot is used to build a database for the\r
+  EuroSeek service.\r
+robot-environment: service\r
+\r
+robot-id:           funnelweb\r
+robot-name:         FunnelWeb\r
+robot-cover-url:    http://funnelweb.net.au\r
+robot-details-url:\r
+robot-owner-name:   David Eagles\r
+robot-owner-url:    http://www.pc.com.au\r
+robot-owner-email:  eaglesd@pc.com.au\r
+robot-status:       \r
+robot-purpose:      indexing, statisitics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         earth.planets.com.au\r
+robot-from:         yes\r
+robot-useragent:    FunnelWeb-1.0\r
+robot-language:     c and c++\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       and generate statistics. Localised South Pacific Discovery\r
+       and Search Engine, plus distributed operation under\r
+       development.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Mon Nov 27 21:30:11 1995\r
+modified-by:\r
+\r
+robot-id: gazz\r
+robot-name: gazz\r
+robot-cover-url: http://gazz.nttrd.com/\r
+robot-details-url: http://gazz.nttrd.com/\r
+robot-owner-name: NTT Cyberspace Laboratories\r
+robot-owner-url: http://gazz.nttrd.com/\r
+robot-owner-email: gazz@nttrd.com\r
+robot-status: development\r
+robot-purpose: statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: gazz\r
+robot-noindex: yes\r
+robot-host: *.nttrd.com, *.infobee.ne.jp\r
+robot-from: yes\r
+robot-useragent: gazz/1.0\r
+robot-language: c\r
+robot-description: This robot is used for research purposes.\r
+robot-history: Its root is TITAN project in NTT.\r
+robot-environment: research\r
+modified-date: Wed, 09 Jun 1999 10:43:18 GMT\r
+modified-by: noto@isl.ntt.co.jp\r
+\r
+robot-id: gcreep\r
+robot-name: GCreep\r
+robot-cover-url: http://www.instrumentpolen.se/gcreep/index.html\r
+robot-details-url: http://www.instrumentpolen.se/gcreep/index.html\r
+robot-owner-name: Instrumentpolen AB\r
+robot-owner-url: http://www.instrumentpolen.se/ip-kontor/eng/index.html\r
+robot-owner-email: anders@instrumentpolen.se\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: browser+standalone\r
+robot-platform: linux+mysql\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: gcreep\r
+robot-noindex: yes\r
+robot-host: mbx.instrumentpolen.se\r
+robot-from: yes\r
+robot-useragent: gcreep/1.0\r
+robot-language: c\r
+robot-description: Indexing robot to learn SQL\r
+robot-history: Spare time project begun late '96, maybe early '97\r
+robot-environment: hobby\r
+modified-date: Fri, 23 Jan 1998 16:09:00 MET\r
+modified-by: Anders Hedstrom\r
+\r
+robot-id:           getbot\r
+robot-name:         GetBot\r
+robot-cover-url:    http://www.blacktop.com.zav/bots \r
+robot-details-url:\r
+robot-owner-name:   Alex Zavatone\r
+robot-owner-url:    http://www.blacktop.com/zav\r
+robot-owner-email:  zav@macromedia.com\r
+robot-status:\r
+robot-purpose:      maintenance\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no.\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         no\r
+robot-useragent:    ???\r
+robot-language:     Shockwave/Director.\r
+robot-description:  GetBot's purpose is to index all the sites it can find that\r
+       contain Shockwave movies.  It is the first bot or spider\r
+       written in Shockwave.  The bot was originally written at\r
+       Macromedia on a hungover Sunday as a proof of concept. -\r
+       Alex Zavatone 3/29/96\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri Mar 29 20:06:12 1996.\r
+modified-by:\r
+\r
+robot-id:           geturl\r
+robot-name:         GetURL\r
+robot-cover-url:    http://Snark.apana.org.au/James/GetURL/\r
+robot-details-url:\r
+robot-owner-name:   James Burton\r
+robot-owner-url:    http://Snark.apana.org.au/James/\r
+robot-owner-email:  James@Snark.apana.org.au\r
+robot-status:       \r
+robot-purpose:      maintenance, mirroring\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         no\r
+robot-useragent:    GetURL.rexx v1.05\r
+robot-language:     ARexx (Amiga REXX)\r
+robot-description:  Its purpose is to validate links, perform mirroring, and\r
+       copy document trees. Designed as a tool for retrieving web\r
+       pages in batch mode without the encumbrance of a browser.\r
+       Can be used to describe a set of pages to fetch, and to\r
+       maintain an archive or mirror. Is not run by a central site\r
+       and accessed by clients - is run by the end user or archive\r
+       maintainer\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue May 9 15:13:12 1995            \r
+modified-by:\r
+\r
+robot-id: golem\r
+robot-name: Golem\r
+robot-cover-url: http://www.quibble.com/golem/\r
+robot-details-url: http://www.quibble.com/golem/\r
+robot-owner-name: Geoff Duncan\r
+robot-owner-url: http://www.quibble.com/geoff/\r
+robot-owner-email: geoff@quibble.com\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: mac\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: golem\r
+robot-noindex: no\r
+robot-host: *.quibble.com\r
+robot-from: yes\r
+robot-useragent: Golem/1.1\r
+robot-language: HyperTalk/AppleScript/C++\r
+robot-description: Golem generates status reports on collections of URLs\r
+  supplied by clients. Designed to assist with editorial updates of\r
+  Web-related sites or products.\r
+robot-history: Personal project turned into a contract service for private\r
+  clients.\r
+robot-environment: service,research\r
+modified-date: Wed, 16 Apr 1997 20:50:00 GMT\r
+modified-by: Geoff Duncan\r
+\r
+robot-id: googlebot\r
+robot-name: Googlebot\r
+robot-cover-url: http://googlebot.com/ \r
+robot-details-url: http://googlebot.com/\r
+robot-owner-name: Google Inc.\r
+robot-owner-url: http://google.com/\r
+robot-owner-email: googlebot@googlebot.com \r
+robot-status: active\r
+robot-purpose: indexing statistics \r
+robot-type: standalone \r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Googlebot\r
+robot-noindex: yes\r
+robot-host: *.googlebot.com\r
+robot-from: yes \r
+robot-useragent: Googlebot/2.0 beta (googlebot(at)googlebot.com)\r
+robot-language: Python\r
+robot-description:\r
+robot-history: Used to be called backrub and run from stanford.edu\r
+robot-environment: service\r
+modified-date: Wed, 29 Sep 1999 18:36:25 -0700\r
+modified-by:  Amit Patel <amitp@google.com>\r
+\r
+robot-id: grapnel\r
+robot-name: Grapnel/0.01 Experiment\r
+robot-cover-url: varies\r
+robot-details-url: mailto:v93_kat@ce.kth.se\r
+robot-owner-name: Philip Kallerman\r
+robot-owner-url: v93_kat@ce.kth.se\r
+robot-owner-email: v93_kat@ce.kth.se\r
+robot-status: Experimental\r
+robot-purpose: Indexing\r
+robot-type:\r
+robot-platform: WinNT\r
+robot-availability: None, yet\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent: No\r
+robot-noindex: No\r
+robot-host: varies\r
+robot-from: Varies\r
+robot-useragent:\r
+robot-language: Perl\r
+robot-description: Resource Discovery Experimentation\r
+robot-history: None, hoping to make some\r
+robot-environment:\r
+modified-date:\r
+modified-by: 7 Feb 1997\r
+\r
+robot-id:griffon\r
+robot-name:Griffon                                                               \r
+robot-cover-url:http://navi.ocn.ne.jp/                                           \r
+robot-details-url:http://navi.ocn.ne.jp/griffon/                                 \r
+robot-owner-name:NTT Communications Corporate Users Business Division            \r
+robot-owner-url:http://navi.ocn.ne.jp/                                           \r
+robot-owner-email:griffon@super.navi.ocn.ne.jp                                   \r
+robot-status:active                                                              \r
+robot-purpose:indexing                                                           \r
+robot-type:standalone                                                            \r
+robot-platform:unix                                                              \r
+robot-availability:none                                                          \r
+robot-exclusion:yes                                                              \r
+robot-exclusion-useragent:griffon                                                \r
+robot-noindex:yes                                                                \r
+robot-nofollow:yes                                                              \r
+robot-host:*.navi.ocn.ne.jp                                                      \r
+robot-from:yes                                                                   \r
+robot-useragent:griffon/1.0                                                      \r
+robot-language:c                                                                 \r
+robot-description:The Griffon robot is used to build database for the OCN navi   \r
+       search service operated by NTT Communications Corporation.\r
+       It mainly gathers pages written in Japanese.            \r
+robot-history:Its root is TITAN project in NTT.                                  \r
+robot-environment:service                                                        \r
+modified-date:Mon,25 Jan 2000 15:25:30 GMT                                       \r
+modified-by:toka@navi.ocn.ne.jp\r
+\r
+robot-id: gromit\r
+robot-name: Gromit\r
+robot-cover-url: http://www.austlii.edu.au/\r
+robot-details-url: http://www2.austlii.edu.au/~dan/gromit/\r
+robot-owner-name: Daniel Austin\r
+robot-owner-url: http://www2.austlii.edu.au/~dan/\r
+robot-owner-email: dan@austlii.edu.au\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Gromit\r
+robot-noindex: no\r
+robot-host: *.austlii.edu.au\r
+robot-from: yes\r
+robot-useragent: Gromit/1.0\r
+robot-language: perl5\r
+robot-description: Gromit is a Targetted Web Spider that indexes legal\r
+ sites contained in the AustLII legal links database.\r
+robot-history: This robot is based on the Perl5 LWP::RobotUA module.\r
+robot-environment: research\r
+modified-date: Wed, 11 Jun 1997 03:58:40 GMT\r
+modified-by: Daniel Austin\r
+\r
+robot-id: gulliver\r
+robot-name: Northern Light Gulliver\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Mike Mulligan\r
+robot-owner-url:\r
+robot-owner-email: crawler@northernlight.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: gulliver\r
+robot-noindex: yes\r
+robot-host: scooby.northernlight.com, taz.northernlight.com,\r
+  gulliver.northernlight.com\r
+robot-from: yes\r
+robot-useragent: Gulliver/1.1\r
+robot-language: c\r
+robot-description: Gulliver is a robot to be used to collect\r
+  web pages for indexing and subsequent searching of the index.\r
+robot-history: Oct 1996: development; Dec 1996-Jan 1997: crawl & debug;\r
+  Mar 1997: crawl again;\r
+robot-environment: service\r
+modified-date: Wed, 21 Apr 1999 16:00:00 GMT\r
+modified-by: Mike Mulligan\r
+\r
+robot-id: hambot\r
+robot-name: HamBot\r
+robot-cover-url: http://www.hamrad.com/search.html\r
+robot-details-url: http://www.hamrad.com/\r
+robot-owner-name: John Dykstra\r
+robot-owner-url:\r
+robot-owner-email: john@futureone.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix, Windows95\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: hambot\r
+robot-noindex: yes\r
+robot-host: *.hamrad.com\r
+robot-from:\r
+robot-useragent:\r
+robot-language: perl5, C++\r
+robot-description: Two HamBot robots are used (stand alone & browser based)\r
+ to aid in building the database for HamRad Search - The Search Engine for\r
+ Search Engines.  The robota are run intermittently and perform nearly\r
+ identical functions.\r
+robot-history: A non commercial (hobby?) project to aid in building and\r
+ maintaining the database for the the HamRad search engine.\r
+robot-environment: service\r
+modified-date: Fri, 17 Apr 1998 21:44:00 GMT\r
+modified-by: JD\r
+\r
+robot-id:           harvest\r
+robot-name:         Harvest\r
+robot-cover-url:    http://harvest.cs.colorado.edu\r
+robot-details-url:\r
+robot-owner-name:   \r
+robot-owner-url:    \r
+robot-owner-email:  \r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         bruno.cs.colorado.edu\r
+robot-from:         yes\r
+robot-useragent:    yes\r
+robot-language:     \r
+robot-description:  Harvest's motivation is to index community- or topic-\r
+       specific collections, rather than to locate and index all\r
+       HTML objects that can be found.  Also, Harvest allows users\r
+       to control the enumeration several ways, including stop\r
+       lists and depth and count limits.  Therefore, Harvest\r
+       provides a much more controlled way of indexing the Web than\r
+       is typical of robots. Pauses 1 second between requests (by\r
+       default).\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: havindex\r
+robot-name: havIndex\r
+robot-cover-url: http://www.hav.com/\r
+robot-details-url: http://www.hav.com/\r
+robot-owner-name: hav.Software and Horace A. (Kicker) Vallas\r
+robot-owner-url: http://www.hav.com/\r
+robot-owner-email: havIndex@hav.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Java VM 1.1\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: havIndex\r
+robot-noindex: yes\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: havIndex/X.xx[bxx]\r
+robot-language: Java\r
+robot-description: havIndex allows individuals to build searchable word\r
+ index of (user specified) lists of URLs.  havIndex does not crawl -\r
+ rather it requires  one or more user supplied lists of URLs to be\r
+ indexed.  havIndex does (optionally) save urls parsed from indexed\r
+  pages.\r
+robot-history: Developed to answer client requests for URL specific\r
+ index capabilities.\r
+robot-environment: commercial, service\r
+modified-date: 6-27-98\r
+modified-by: Horace A. (Kicker) Vallas\r
+\r
+robot-id:           hi\r
+robot-name:         HI (HTML Index) Search\r
+robot-cover-url:    http://cs6.cs.ait.ac.th:21870/pa.html\r
+robot-details-url:\r
+robot-owner-name:   Razzakul Haider Chowdhury\r
+robot-owner-url:    http://cs6.cs.ait.ac.th:21870/index.html\r
+robot-owner-email:  a94385@cs.ait.ac.th\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         yes\r
+robot-useragent:    AITCSRobot/1.1\r
+robot-language:     perl 5\r
+robot-description:  Its purpose is to generate a Resource Discovery database.\r
+       This Robot traverses the net and creates a searchable\r
+       database of Web pages. It stores the title string of the\r
+       HTML document and the absolute url. A search engine provides\r
+       the boolean AND & OR query models with or without filtering\r
+       the stop list of words. Feature is kept for the Web page\r
+       owners to add the url to the searchable database.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Wed Oct  4 06:54:31 1995\r
+modified-by:\r
+\r
+robot-id: hometown\r
+robot-name: Hometown Spider Pro\r
+robot-cover-url: http://www.hometownsingles.com\r
+robot-details-url: http://www.hometownsingles.com\r
+robot-owner-name: Bob Brown\r
+robot-owner-url: http://www.hometownsingles.com\r
+robot-owner-email: admin@hometownsingles.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: *\r
+robot-noindex: yes\r
+robot-host: 63.195.193.17\r
+robot-from: no\r
+robot-useragent: Hometown Spider Pro\r
+robot-language: delphi\r
+robot-description: The Hometown Spider Pro is used to maintain the indexes\r
+ for Hometown Singles.\r
+robot-history: Innerprise URL Spider Pro\r
+robot-environment: commercial\r
+modified-date: Tue, 28 Mar 2000 16:00:00 GMT\r
+modified-by: Hometown Singles\r
+\r
+robot-id: wired-digital\r
+robot-name: Wired Digital\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Bowen Dwelle\r
+robot-owner-url:\r
+robot-owner-email: bowen@hotwired.com\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: hotwired\r
+robot-noindex: no\r
+robot-host: gossip.hotwired.com\r
+robot-from: yes\r
+robot-useragent: wired-digital-newsbot/1.5\r
+robot-language: perl-5.004\r
+robot-description: this is a test\r
+robot-history:\r
+robot-environment: research\r
+modified-date: Thu, 30 Oct 1997\r
+modified-by: bowen@hotwired.com\r
+\r
+robot-id:           htdig\r
+robot-name:         ht://Dig\r
+robot-cover-url:    http://www.htdig.org/\r
+robot-details-url:  http://www.htdig.org/howitworks.html\r
+robot-owner-name:   Andrew Scherpbier\r
+robot-owner-url:    http://www.htdig.org/author.html\r
+robot-owner-email:  andrew@contigo.com\r
+robot-owner-name2:  Geoff Hutchison \r
+robot-owner-url2:   http://wso.williams.edu/~ghutchis/\r
+robot-owner-email2: ghutchis@wso.williams.edu\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     unix\r
+robot-availability: source\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent: htdig\r
+robot-noindex:      yes\r
+robot-host:         *\r
+robot-from:         no\r
+robot-useragent:    htdig/3.1.0b2\r
+robot-language:     C,C++.\r
+robot-history:This robot was originally developed for use at San Diego\r
+ State University.\r
+robot-environment:\r
+modified-date:Tue, 3 Nov 1998 10:09:02 EST \r
+modified-by: Geoff Hutchison <Geoffrey.R.Hutchison@williams.edu>\r
+\r
+robot-id:           htmlgobble\r
+robot-name:         HTMLgobble\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Andreas Ley\r
+robot-owner-url:    \r
+robot-owner-email:  ley@rz.uni-karlsruhe.de\r
+robot-status:       \r
+robot-purpose:      mirror\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         tp70.rz.uni-karlsruhe.de\r
+robot-from:         yes\r
+robot-useragent:    HTMLgobble v2.2\r
+robot-language:     \r
+robot-description:  A mirroring robot. Configured to stay within a directory,\r
+       sleeps between requests, and the next version will use HEAD\r
+       to check if the entire document needs to be\r
+       retrieved\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           hyperdecontextualizer\r
+robot-name:         Hyper-Decontextualizer\r
+robot-cover-url:    http://www.tricon.net/Comm/synapse/spider/\r
+robot-details-url:\r
+robot-owner-name:   Cliff Hall\r
+robot-owner-url:    http://kpt1.tricon.net/cgi-bin/cliff.cgi\r
+robot-owner-email:  cliff@tricon.net\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         no\r
+robot-useragent:    no\r
+robot-language:     Perl 5 Takes an input sentence and marks up each word with\r
+       an appropriate hyper-text link.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon May  6 17:41:29 1996.\r
+modified-by:\r
+\r
+robot-id:           ibm\r
+robot-name:         IBM_Planetwide\r
+robot-cover-url:    http://www.ibm.com/%7ewebmaster/\r
+robot-details-url:\r
+robot-owner-name:   Ed Costello\r
+robot-owner-url:    http://www.ibm.com/%7ewebmaster/\r
+robot-owner-email:  epc@www.ibm.com"\r
+robot-status:\r
+robot-purpose:      indexing, maintenance, mirroring\r
+robot-type:         standalone and\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         www.ibm.com www2.ibm.com\r
+robot-from:         yes\r
+robot-useragent:    IBM_Planetwide, \r
+robot-language:     Perl5\r
+robot-description:  Restricted to IBM owned or related domains.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon Jan 22 22:09:19 1996.\r
+modified-by:\r
+\r
+robot-id: iconoclast\r
+robot-name: Popular Iconoclast\r
+robot-cover-url: http://gestalt.sewanee.edu/ic/\r
+robot-details-url: http://gestalt.sewanee.edu/ic/info.html\r
+robot-owner-name: Chris Cappuccio\r
+robot-owner-url: http://sefl.satelnet.org/~ccappuc/\r
+robot-owner-email: chris@gestalt.sewanee.edu\r
+robot-status: development\r
+robot-purpose: statistics \r
+robot-type: standalone\r
+robot-platform: unix (OpenBSD)\r
+robot-availability: source\r
+robot-exclusion: no \r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: gestalt.sewanee.edu\r
+robot-from: yes \r
+robot-useragent: gestaltIconoclast/1.0 libwww-FM/2.17\r
+robot-language: c,perl5\r
+robot-description: This guy likes statistics\r
+robot-history: This robot has a history in mathematics and english\r
+robot-environment: research\r
+modified-date: Wed, 5 Mar 1997 17:35:16 CST\r
+modified-by: chris@gestalt.sewanee.edu\r
+\r
+robot-id: Ilse\r
+robot-name: Ingrid\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Ilse c.v.\r
+robot-owner-url: http://www.ilse.nl/\r
+robot-owner-email: ilse@ilse.nl\r
+robot-status: Running\r
+robot-purpose: Indexing\r
+robot-type: Web Indexer\r
+robot-platform: UNIX\r
+robot-availability: Commercial as part of search engine package\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent: INGRID/0.1\r
+robot-noindex: Yes\r
+robot-host: bart.ilse.nl\r
+robot-from: Yes\r
+robot-useragent: INGRID/0.1\r
+robot-language: C\r
+robot-description:  \r
+robot-history:\r
+robot-environment:\r
+modified-date: 06/13/1997\r
+modified-by: Ilse\r
+\r
+robot-id: imagelock\r
+robot-name: Imagelock \r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Ken Belanger  \r
+robot-owner-url:\r
+robot-owner-email: belanger@imagelock.com\r
+robot-status: development\r
+robot-purpose: maintenance      \r
+robot-type:\r
+robot-platform: windows95\r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: 209.111.133.*\r
+robot-from: no\r
+robot-useragent: Mozilla 3.01 PBWF (Win95)\r
+robot-language:\r
+robot-description: searches for image links\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Tue, 11 Aug 1998 17:28:52 GMT\r
+modified-by: brian@smithrenaud.com\r
+\r
+robot-id:           incywincy\r
+robot-name:         IncyWincy\r
+robot-cover-url:    http://osiris.sunderland.ac.uk/sst-scripts/simon.html\r
+robot-details-url:\r
+robot-owner-name:   Simon Stobart\r
+robot-owner-url:    http://osiris.sunderland.ac.uk/sst-scripts/simon.html\r
+robot-owner-email:  simon.stobart@sunderland.ac.uk\r
+robot-status:\r
+robot-purpose:\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         osiris.sunderland.ac.uk\r
+robot-from:         yes\r
+robot-useragent:    IncyWincy/1.0b1\r
+robot-language:     C++\r
+robot-description:  Various Research projects at the University of\r
+       Sunderland\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri Jan 19 21:50:32 1996.\r
+modified-by:\r
+\r
+robot-id: informant\r
+robot-name: Informant\r
+robot-cover-url: http://informant.dartmouth.edu/\r
+robot-details-url: http://informant.dartmouth.edu/about.html\r
+robot-owner-name: Bob Gray\r
+robot-owner-name2: Aditya Bhasin\r
+robot-owner-name3: Katsuhiro Moizumi\r
+robot-owner-name4: Dr. George V. Cybenko\r
+robot-owner-url: http://informant.dartmouth.edu/\r
+robot-owner-email: info_adm@cosmo.dartmouth.edu\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-exclusion-useragent: Informant\r
+robot-noindex: no\r
+robot-host: informant.dartmouth.edu\r
+robot-from: yes\r
+robot-useragent: Informant\r
+robot-language: c, c++\r
+robot-description: The Informant robot continually checks the Web pages\r
+ that are relevant to user queries.  Users are notified of any new or\r
+ updated pages.  The robot runs daily, but the number of hits per site\r
+ per day should be quite small, and these hits should be randomly\r
+ distributed over several hours.  Since the robot does not actually \r
+ follow links (aside from those returned from the major search engines \r
+ such as Lycos), it does not fall victim to the common looping problems.\r
+ The robot will support the Robot Exclusion Standard by early December, 1996.\r
+robot-history: The robot is part of a research project at Dartmouth College.  \r
+ The robot may become part of a commercial service (at which time it may be \r
+ subsumed by some other, existing robot).\r
+robot-environment: research, service\r
+modified-date: Sun, 3 Nov 1996 11:55:00 GMT\r
+modified-by: Bob Gray\r
+\r
+robot-id:           infoseek\r
+robot-name:         InfoSeek Robot 1.0\r
+robot-cover-url:    http://www.infoseek.com\r
+robot-details-url:\r
+robot-owner-name:   Steve Kirsch\r
+robot-owner-url:    http://www.infoseek.com\r
+robot-owner-email:  stk@infoseek.com\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         corp-gw.infoseek.com\r
+robot-from:         yes\r
+robot-useragent:    InfoSeek Robot 1.0\r
+robot-language:     python\r
+robot-description:  Its purpose is to generate a Resource Discovery database.\r
+       Collects WWW pages for both InfoSeek's free WWW search and\r
+       commercial search. Uses a unique proprietary algorithm to\r
+       identify the most popular and interesting WWW pages. Very\r
+       fast, but never has more than one request per site\r
+       outstanding at any given time. Has been refined for more\r
+       than a year.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Sun May 28 01:35:48 1995\r
+modified-by:\r
+\r
+robot-id:           infoseeksidewinder\r
+robot-name:         Infoseek Sidewinder\r
+robot-cover-url:    http://www.infoseek.com/\r
+robot-details-url:\r
+robot-owner-name:   Mike Agostino\r
+robot-owner-url:    http://www.infoseek.com/\r
+robot-owner-email:  mna@infoseek.com\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    Infoseek Sidewinder\r
+robot-language:     C Collects WWW pages for both InfoSeek's free WWW search\r
+       services. Uses a unique, incremental, very fast proprietary\r
+       algorithm to find WWW pages. \r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sat Apr 27 01:20:15 1996.\r
+modified-by:\r
+\r
+robot-id: infospider\r
+robot-name: InfoSpiders\r
+robot-cover-url: http://www-cse.ucsd.edu/users/fil/agents/agents.html\r
+robot-owner-name: Filippo Menczer\r
+robot-owner-url: http://www-cse.ucsd.edu/users/fil/\r
+robot-owner-email: fil@cs.ucsd.edu\r
+robot-status: development\r
+robot-purpose: search\r
+robot-type: standalone\r
+robot-platform: unix, mac\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: InfoSpiders\r
+robot-noindex: no\r
+robot-host: *.ucsd.edu\r
+robot-from: yes\r
+robot-useragent: InfoSpiders/0.1\r
+robot-language: c, perl5\r
+robot-description: application of artificial life algorithm to adaptive\r
+ distributed information retrieval\r
+robot-history: UC San Diego, Computer Science Dept. PhD research project\r
+ (1995-97) under supervision of Prof. Rik Belew\r
+robot-environment: research\r
+modified-date: Mon, 16 Sep 1996 14:08:00 PDT\r
+\r
+robot-id:  inspectorwww\r
+robot-name:  Inspector Web\r
+robot-cover-url:  http://www.greenpac.com/inspector/\r
+robot-details-url:  http://www.greenpac.com/inspector/ourrobot.html\r
+robot-owner-name:  Doug Green\r
+robot-owner-url:  http://www.greenpac.com\r
+robot-owner-email:  doug@greenpac.com\r
+robot-status:  active:  robot significantly developed, but still undergoing fixes\r
+robot-purpose:  maintentance:  link validation, html validation, image size\r
+ validation, etc\r
+robot-type:  standalone\r
+robot-platform: unix\r
+robot-availability:  free service and more extensive commercial service\r
+robot-exclusion:  yes\r
+robot-exclusion-useragent:  inspectorwww\r
+robot-noindex:  no\r
+robot-host:  www.corpsite.com, www.greenpac.com, 38.234.171.*\r
+robot-from:  yes\r
+robot-useragent:  inspectorwww/1.0 http://www.greenpac.com/inspectorwww.html\r
+robot-language:  c\r
+robot-description:  Provide inspection reports which give advise to WWW\r
+ site owners on missing links, images resize problems, syntax errors, etc.\r
+robot-history:  development started in Mar 1997\r
+robot-environment:  commercial\r
+modified-date:  Tue Jun 17 09:24:58 EST 1997\r
+modified-by:  Doug Green\r
+\r
+robot-id:           intelliagent\r
+robot-name:         IntelliAgent\r
+robot-cover-url:    http://www.geocities.com/SiliconValley/3086/iagent.html\r
+robot-details-url:\r
+robot-owner-name:   David Reilly\r
+robot-owner-url:    http://www.geocities.com/SiliconValley/3086/index.html\r
+robot-owner-email:  s1523@sand.it.bond.edu.au\r
+robot-status:       development\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         sand.it.bond.edu.au\r
+robot-from:         no\r
+robot-useragent:    'IAGENT/1.0'\r
+robot-language:     C\r
+robot-description:  IntelliAgent is still in development. Indeed, it is very far\r
+       from completion. I'm planning to limit the depth at which it\r
+       will probe, so hopefully IAgent won't cause anyone much of a\r
+       problem. At the end of its completion, I hope to publish\r
+       both the raw data and original source code.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri May 31 02:10:39 1996.\r
+modified-by:\r
+\r
+robot-id:iron33\r
+robot-name:Iron33\r
+robot-cover-url:http://verno.ueda.info.waseda.ac.jp/iron33/\r
+robot-details-url:http://verno.ueda.info.waseda.ac.jp/iron33/history.html\r
+robot-owner-name:Takashi Watanabe\r
+robot-owner-url:http://www.ueda.info.waseda.ac.jp/~watanabe/\r
+robot-owner-email:watanabe@ueda.info.waseda.ac.jp\r
+robot-status:active\r
+robot-purpose:indexing, statistics\r
+robot-type:standalone\r
+robot-platform:unix\r
+robot-availability:source\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:Iron33\r
+robot-noindex:no\r
+robot-host:*.folon.ueda.info.waseda.ac.jp, 133.9.215.*\r
+robot-from:yes\r
+robot-useragent:Iron33/0.0\r
+robot-language:c\r
+robot-description:The robot "Iron33" is used to build the\r
+                  database for the WWW search engine "Verno".\r
+robot-history:\r
+robot-environment:research\r
+modified-date:Fri, 20 Mar 1998 18:34 JST\r
+modified-by:Watanabe Takashi\r
+\r
+robot-id:           israelisearch\r
+robot-name:         Israeli-search\r
+robot-cover-url:    http://www.idc.ac.il/Sandbag/\r
+robot-details-url:\r
+robot-owner-name:   Etamar Laron\r
+robot-owner-url:    http://www.xpert.com/~etamar/\r
+robot-owner-email:  etamar@xpert.co\r
+robot-status:\r
+robot-purpose:      indexing.\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         dylan.ius.cs.cmu.edu\r
+robot-from:         no\r
+robot-useragent:    IsraeliSearch/1.0\r
+robot-language:     C A complete software designed to collect information in a\r
+       distributed workload and supports context queries. Intended\r
+       to be a complete updated resource for Israeli sites and\r
+       information related to Israel or Israeli\r
+       Society.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Tue Apr 23 19:23:55 1996.\r
+modified-by:\r
+\r
+robot-id: javabee\r
+robot-name: JavaBee\r
+robot-cover-url: http://www.javabee.com\r
+robot-details-url:\r
+robot-owner-name:ObjectBox\r
+robot-owner-url:http://www.objectbox.com/\r
+robot-owner-email:info@objectbox.com\r
+robot-status:Active\r
+robot-purpose:Stealing Java Code\r
+robot-type:standalone\r
+robot-platform:Java\r
+robot-availability:binary\r
+robot-exclusion:no\r
+robot-exclusion-useragent:\r
+robot-noindex:no\r
+robot-host:*\r
+robot-from:no\r
+robot-useragent:JavaBee\r
+robot-language:Java\r
+robot-description:This robot is used to grab java applets and run them\r
+ locally overriding the security implemented\r
+robot-history:\r
+robot-environment:commercial\r
+modified-date:\r
+modified-by:\r
+\r
+robot-id: jcrawler\r
+robot-name: JCrawler\r
+robot-cover-url: http://www.nihongo.org/jcrawler/\r
+robot-details-url:\r
+robot-owner-name: Benjamin Franz\r
+robot-owner-url: http://www.nihongo.org/snowhare/\r
+robot-owner-email: snowhare@netimages.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: jcrawler\r
+robot-noindex: yes\r
+robot-host: db.netimages.com\r
+robot-from: yes\r
+robot-useragent: JCrawler/0.2\r
+robot-language: perl5\r
+robot-description: JCrawler is currently used to build the Vietnam topic\r
+                   specific WWW index for VietGATE\r
+                   <URL:http://www.vietgate.net/>. It schedules visits\r
+                   randomly, but will not visit a site more than once\r
+                   every two minutes. It uses a subject matter relevance\r
+                   pruning algorithm to determine what pages to crawl\r
+                   and index and will not generally index pages with\r
+                   no Vietnam related content. Uses Unicode internally,\r
+                   and detects and converts several different Vietnamese\r
+                   character encodings.\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Wed, 08 Oct 1997 00:09:52 GMT\r
+modified-by: Benjamin Franz\r
+\r
+robot-id: jeeves\r
+robot-name: Jeeves\r
+robot-cover-url: http://www-students.doc.ic.ac.uk/~lglb/Jeeves/\r
+robot-details-url:\r
+robot-owner-name: Leon Brocard\r
+robot-owner-url: http://www-students.doc.ic.ac.uk/~lglb/\r
+robot-owner-email: lglb@doc.ic.ac.uk\r
+robot-status: development\r
+robot-purpose: indexing maintenance statistics\r
+robot-type: standalone\r
+robot-platform: UNIX\r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-exclusion-useragent: jeeves\r
+robot-noindex: no\r
+robot-host: *.doc.ic.ac.uk\r
+robot-from: yes\r
+robot-useragent: Jeeves v0.05alpha (PERL, LWP, lglb@doc.ic.ac.uk)\r
+robot-language: perl5\r
+robot-description: Jeeves is basically a web-mirroring robot built as a\r
+ final-year degree project. It will have many nice features and is\r
+ already web-friendly. Still in development.\r
+robot-history: Still short (0.05alpha)\r
+robot-environment: research\r
+modified-date: Wed, 23 Apr 1997 17:26:50 GMT\r
+modified-by: Leon Brocard\r
+\r
+robot-id:           jobot\r
+robot-name:         Jobot\r
+robot-cover-url:    http://www.micrognosis.com/~ajack/jobot/jobot.html\r
+robot-details-url:\r
+robot-owner-name:   Adam Jack\r
+robot-owner-url:    http://www.micrognosis.com/~ajack/index.html\r
+robot-owner-email:  ajack@corp.micrognosis.com\r
+robot-status:       inactive\r
+robot-purpose:      standalone\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         supernova.micrognosis.com\r
+robot-from:         yes\r
+robot-useragent:    Jobot/0.1alpha libwww-perl/4.0\r
+robot-language:     perl 4\r
+robot-description:  Its purpose is to generate a Resource Discovery database.\r
+       Intended to seek out sites of potential "career interest".\r
+       Hence - Job Robot.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue Jan  9 18:55:55 1996\r
+modified-by:\r
+\r
+robot-id:           joebot\r
+robot-name:         JoeBot\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:   Ray Waldin\r
+robot-owner-url:    http://www.primenet.com/~rwaldin\r
+robot-owner-email:  rwaldin@primenet.com\r
+robot-status:\r
+robot-purpose:\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    JoeBot/x.x, \r
+robot-language:     java JoeBot is a generic web crawler implemented as a\r
+       collection of Java classes which can be used in a variety of\r
+       applications, including resource discovery, link validation,\r
+       mirroring, etc.  It currently limits itself to one visit per\r
+       host per minute.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sun May 19 08:13:06 1996.\r
+modified-by:\r
+\r
+robot-id:           jubii\r
+robot-name:         The Jubii Indexing Robot\r
+robot-cover-url:    http://www.jubii.dk/robot/default.htm\r
+robot-details-url:\r
+robot-owner-name:   Jakob Faarvang\r
+robot-owner-url:    http://www.cybernet.dk/staff/jakob/\r
+robot-owner-email:  jakob@jubii.dk\r
+robot-status:       \r
+robot-purpose:      indexing, maintainance\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         any host in the cybernet.dk domain\r
+robot-from:         yes\r
+robot-useragent:    JubiiRobot/version#\r
+robot-language:     visual basic 4.0\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       and validate links. Used for indexing the .dk top-level\r
+       domain as well as other Danish sites for aDanish web\r
+       database, as well as link validation.\r
+robot-history:      Will be in constant operation from Spring\r
+       1996\r
+robot-environment:\r
+modified-date:      Sat Jan  6 20:58:44 1996\r
+modified-by:\r
+\r
+robot-id:           jumpstation\r
+robot-name:         JumpStation\r
+robot-cover-url:    http://js.stir.ac.uk/jsbin/jsii\r
+robot-details-url:\r
+robot-owner-name:   Jonathon Fletcher\r
+robot-owner-url:    http://www.stir.ac.uk/~jf1\r
+robot-owner-email:  j.fletcher@stirling.ac.uk \r
+robot-status:       retired\r
+robot-purpose:      indexing\r
+robot-type:\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *.stir.ac.uk\r
+robot-from:         yes\r
+robot-useragent:    jumpstation\r
+robot-language:     perl, C, c++\r
+robot-description:\r
+robot-history:      Originated as a weekend project in 1993.\r
+robot-environment:\r
+modified-date:      Tue May 16 00:57:42 1995.\r
+modified-by:\r
+\r
+robot-id:           katipo\r
+robot-name:         Katipo\r
+robot-cover-url:    http://www.vuw.ac.nz/~newbery/Katipo.html\r
+robot-details-url:  http://www.vuw.ac.nz/~newbery/Katipo/Katipo-doc.html\r
+robot-owner-name:   Michael Newbery\r
+robot-owner-url:    http://www.vuw.ac.nz/~newbery\r
+robot-owner-email:  Michael.Newbery@vuw.ac.nz\r
+robot-status:       active\r
+robot-purpose:      maintenance\r
+robot-type:         standalone\r
+robot-platform:     Macintosh\r
+robot-availability: binary\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         yes\r
+robot-useragent:    Katipo/1.0\r
+robot-language:     c\r
+robot-description:  Watches all the pages you have previously visited\r
+       and tells you when they have changed.\r
+robot-history:      \r
+robot-environment:  commercial (free)\r
+modified-date:      Tue, 25 Jun 96 11:40:07 +1200\r
+modified-by:        Michael Newbery\r
+\r
+robot-id:               kdd\r
+robot-name:             KDD-Explorer\r
+robot-cover-url:        http://mlc.kddvw.kcom.or.jp/CLINKS/html/clinks.html\r
+robot-details-url:      not available\r
+robot-owner-name:       Kazunori Matsumoto\r
+robot-owner-url:        not available\r
+robot-owner-email:      matsu@lab.kdd.co.jp\r
+robot-status:           development (to be avtive in June 1997)\r
+robot-purpose:          indexing\r
+robot-type:             standalone\r
+robot-platform:         unix\r
+robot-availability:     none\r
+robot-exclusion:        yes\r
+robot-exclusion-useragent:KDD-Explorer\r
+robot-noindex:          no\r
+robot-host:             mlc.kddvw.kcom.or.jp\r
+robot-from:             yes\r
+robot-useragent:        KDD-Explorer/0.1\r
+robot-language:         c\r
+robot-description:      KDD-Explorer is used for indexing valuable documents\r
+                which will be retrieved via an experimental cross-language\r
+                search engine, CLINKS.\r
+robot-history:          This robot was designed in Knowledge-bases Information\r
+                        processing Laboratory, KDD R&D Laboratories, 1996-1997\r
+robot-environment:      research\r
+modified-date:          Mon, 2 June 1997 18:00:00 JST\r
+modified-by:            Kazunori Matsumoto\r
+\r
+robot-id:kilroy\r
+robot-name:Kilroy\r
+robot-cover-url:http://purl.org/kilroy\r
+robot-details-url:http://purl.org/kilroy\r
+robot-owner-name:OCLC\r
+robot-owner-url:http://www.oclc.org\r
+robot-owner-email:kilroy@oclc.org\r
+robot-status:active\r
+robot-purpose:indexing,statistics\r
+robot-type:standalone\r
+robot-platform:unix,windowsNT\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:*\r
+robot-noindex:no\r
+robot-host:*.oclc.org\r
+robot-from:no\r
+robot-useragent:yes\r
+robot-language:java\r
+robot-description:Used to collect data for several projects. \r
+ Runs constantly and visits site no faster than once every 90 seconds.\r
+robot-history:none\r
+robot-environment:research,service\r
+modified-date:Thursday, 24 Apr 1997 20:00:00 GMT\r
+modified-by:tkac\r
+\r
+robot-id: ko_yappo_robot\r
+robot-name: KO_Yappo_Robot\r
+robot-cover-url: http://yappo.com/info/robot.html\r
+robot-details-url: http://yappo.com/\r
+robot-owner-name: Kazuhiro Osawa\r
+robot-owner-url: http://yappo.com/\r
+robot-owner-email: office_KO@yappo.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ko_yappo_robot\r
+robot-noindex: yes\r
+robot-host: yappo.com,209.25.40.1\r
+robot-from: yes\r
+robot-useragent: KO_Yappo_Robot/1.0.4(http://yappo.com/info/robot.html)\r
+robot-language: perl\r
+robot-description: The KO_Yappo_Robot robot is used to build the database\r
+           for the Yappo search service by k,osawa\r
+           (part of AOL).\r
+           The robot runs random day, and visits sites in a random order.\r
+robot-history: The robot is hobby of k,osawa\r
+           at the Tokyo in 1997\r
+robot-environment: hobby\r
+modified-date: Fri, 18 Jul 1996 12:34:21 GMT\r
+modified-by: KO\r
+\r
+robot-id: labelgrabber.txt\r
+robot-name: LabelGrabber\r
+robot-cover-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm\r
+robot-details-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm\r
+robot-owner-name: Kyle Jamieson\r
+robot-owner-url: http://www.w3.org/PICS/refcode/LabelGrabber/index.htm\r
+robot-owner-email: jamieson@mit.edu\r
+robot-status: active\r
+robot-purpose: Grabs PICS labels from web pages, submits them to a label bueau\r
+robot-type: standalone\r
+robot-platform: windows, windows95, windowsNT, unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: label-grabber\r
+robot-noindex: no\r
+robot-host: head.w3.org\r
+robot-from: no\r
+robot-useragent: LabelGrab/1.1\r
+robot-language: java\r
+robot-description: The label grabber searches for PICS labels and submits\r
+ them to a label bureau\r
+robot-history: N/A\r
+robot-environment: research\r
+modified-date: Wed, 28 Jan 1998 17:32:52 GMT\r
+modified-by: jamieson@mit.edu\r
+\r
+robot-id: larbin\r
+robot-name: larbin\r
+robot-cover-url: http://para.inria.fr/~ailleret/larbin/index-eng.html\r
+robot-owner-name: Sebastien Ailleret\r
+robot-owner-url: http://para.inria.fr/~ailleret/\r
+robot-owner-email: sebastien.ailleret@inria.fr\r
+robot-status: active\r
+robot-purpose: Your imagination is the only limit\r
+robot-type: standalone\r
+robot-platform: Linux\r
+robot-availability: source (GPL), mail me for customization\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: larbin\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: larbin (+mail)\r
+robot-language: c++\r
+robot-description: Parcourir le web, telle est ma passion\r
+robot-history: french research group (INRIA Verso)\r
+robot-environment: hobby\r
+modified-date: 2000-3-28\r
+modified-by: Sebastien Ailleret\r
+\r
+robot-id: legs\r
+robot-name: legs\r
+robot-cover-url: http://www.MagPortal.com/\r
+robot-details-url:\r
+robot-owner-name: Bill Dimm\r
+robot-owner-url: http://www.HotNeuron.com/\r
+robot-owner-email: admin@magportal.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: linux\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: legs\r
+robot-noindex: no\r
+robot-host:\r
+robot-from: yes\r
+robot-useragent: legs\r
+robot-language: perl5\r
+robot-description: The legs robot is used to build the magazine article\r
+ database for MagPortal.com.\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Wed, 22 Mar 2000 14:10:49 GMT\r
+modified-by: Bill Dimm\r
+\r
+robot-id:linkscan\r
+robot-name:LinkScan\r
+robot-cover-url:http://www.elsop.com/\r
+robot-details-url:http://www.elsop.com/linkscan/overview.html\r
+robot-owner-name:Electronic Software Publishing Corp. (Elsop)\r
+robot-owner-url:http://www.elsop.com/\r
+robot-owner-email:sales@elsop.com\r
+robot-status:Robot actively in use\r
+robot-purpose:Link checker, SiteMapper, and HTML Validator\r
+robot-type:Standalone\r
+robot-platform:Unix, Linux, Windows 98/NT\r
+robot-availability:Program is shareware\r
+robot-exclusion:No\r
+robot-exclusion-useragent:\r
+robot-noindex:Yes\r
+robot-host:*\r
+robot-from:\r
+robot-useragent:LinkScan Server/5.5 | LinkScan Workstation/5.5\r
+robot-language:perl5\r
+robot-description:LinkScan checks links, validates HTML and creates site maps\r
+robot-history: First developed by Elsop in January,1997\r
+robot-environment:Commercial\r
+modified-date:Fri, 3 September 1999 17:00:00 PDT\r
+modified-by: Kenneth R. Churilla\r
+\r
+robot-id: linkwalker\r
+robot-name: LinkWalker\r
+robot-cover-url: http://www.seventwentyfour.com\r
+robot-details-url: http://www.seventwentyfour.com/tech.html\r
+robot-owner-name: Roy Bryant\r
+robot-owner-url: \r
+robot-owner-email: rbryant@seventwentyfour.com\r
+robot-status: active\r
+robot-purpose: maintenance, statistics\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: linkwalker\r
+robot-noindex: yes\r
+robot-host: *.seventwentyfour.com\r
+robot-from: yes\r
+robot-useragent: LinkWalker\r
+robot-language: c++\r
+robot-description: LinkWalker generates a database of links.\r
+ We send reports of bad ones to webmasters.\r
+robot-history: Constructed late 1997 through April 1998.\r
+ In full service April 1998.\r
+robot-environment: service\r
+modified-date: Wed, 22 Apr 1998\r
+modified-by: Roy Bryant\r
+\r
+robot-id:lockon\r
+robot-name:Lockon\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:Seiji Sasazuka & Takahiro Ohmori\r
+robot-owner-url:\r
+robot-owner-email:search@rsch.tuis.ac.jp\r
+robot-status:active\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:UNIX\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:Lockon\r
+robot-noindex:yes\r
+robot-host:*.hitech.tuis.ac.jp\r
+robot-from:yes\r
+robot-useragent:Lockon/xxxxx\r
+robot-language:perl5 \r
+robot-description:This robot gathers only HTML document.\r
+robot-history:This robot was developed in the Tokyo university of information sciences in 1998.\r
+robot-environment:research\r
+modified-date:Tue. 10 Nov 1998 20:00:00 GMT\r
+modified-by:Seiji Sasazuka & Takahiro Ohmori\r
+\r
+robot-id:logo_gif\r
+robot-name: logo.gif Crawler\r
+robot-cover-url: http://www.inm.de/projects/logogif.html\r
+robot-details-url:\r
+robot-owner-name: Sevo Stille\r
+robot-owner-url: http://www.inm.de/people/sevo\r
+robot-owner-email: sevo@inm.de\r
+robot-status: under development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: logo_gif_crawler\r
+robot-noindex: no\r
+robot-host: *.inm.de\r
+robot-from: yes\r
+robot-useragent: logo.gif crawler\r
+robot-language: perl\r
+robot-description: meta-indexing engine for corporate logo graphics\r
+ The robot runs at irregular intervals and will only pull a start page and\r
+ its associated /.*logo\.gif/i (if any). It will be terminated once a\r
+ statistically\r
+ significant number of samples has been collected.\r
+robot-history: logo.gif is part of the design diploma of Markus Weisbeck,\r
+ and tries to analyze the abundance of the logo metaphor in WWW\r
+ corporate design.\r
+ The crawler and image database were written by Sevo Stille and Peter\r
+ Frank of the Institut für Neue Medien, respectively.\r
+robot-environment: research, statistics\r
+modified-date: 25.5.97\r
+modified-by: Sevo Stille\r
+\r
+robot-id:           lycos\r
+robot-name:         Lycos\r
+robot-cover-url:    http://lycos.cs.cmu.edu/\r
+robot-details-url:\r
+robot-owner-name:   Dr. Michael L. Mauldin\r
+robot-owner-url:    http://fuzine.mt.cs.cmu.edu/mlm/home.html\r
+robot-owner-email:  fuzzy@cmu.edu\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         fuzine.mt.cs.cmu.edu, lycos.com\r
+robot-from:         \r
+robot-useragent:    Lycos/x.x\r
+robot-language:     \r
+robot-description:  This is a research program in providing information\r
+       retrieval and discovery in the WWW, using a finite memory\r
+       model of the web to guide intelligent, directed searches for\r
+       specific  information needs\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           macworm\r
+robot-name:         Mac WWWWorm\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Sebastien Lemieux\r
+robot-owner-url:    \r
+robot-owner-email:  lemieuse@ERE.UMontreal.CA\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     Macintosh\r
+robot-availability: none\r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     hypercard\r
+robot-description:  a French Keyword-searching robot for the Mac The author has\r
+       decided not to release this robot to the\r
+       public\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: magpie\r
+robot-name: Magpie\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Keith Jones\r
+robot-owner-url: \r
+robot-owner-email: Keith.Jones@blueberry.co.uk\r
+robot-status: development\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability:\r
+robot-exclusion: no\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: *.blueberry.co.uk, 194.70.52.*, 193.131.167.144\r
+robot-from: no\r
+robot-useragent: Magpie/1.0\r
+robot-language: perl5\r
+robot-description: Used to obtain information from a specified list of web pages for local indexing. Runs every two hours, and visits only a small number of sites.\r
+robot-history: Part of a research project. Alpha testing from 10 July 1996, Beta testing from 10 September.\r
+robot-environment: research\r
+modified-date: Wed, 10 Oct 1996 13:15:00 GMT\r
+modified-by: Keith Jones\r
+\r
+robot-id: mediafox\r
+robot-name: MediaFox\r
+robot-cover-url: none\r
+robot-details-url: none\r
+robot-owner-name: Lars Eilebrecht   \r
+robot-owner-url: http://www.home.unix-ag.org/sfx/\r
+robot-owner-email: sfx@uni-media.de\r
+robot-status: development\r
+robot-purpose: indexing and maintenance\r
+robot-type: standalone\r
+robot-platform: (Java)\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: mediafox\r
+robot-noindex: yes\r
+robot-host: 141.99.*.*\r
+robot-from: yes\r
+robot-useragent: MediaFox/x.y\r
+robot-language: Java\r
+robot-description: The robot is used to index meta information of a\r
+                   specified set of documents and update a database\r
+                   accordingly.\r
+robot-history: Project at the University of Siegen\r
+robot-environment: research\r
+modified-date: Fri Aug 14 03:37:56 CEST 1998\r
+modified-by: Lars Eilebrecht\r
+\r
+robot-id:merzscope\r
+robot-name:MerzScope\r
+robot-cover-url:http://www.merzcom.com\r
+robot-details-url:http://www.merzcom.com\r
+robot-owner-name:(Client based robot)\r
+robot-owner-url:(Client based robot)\r
+robot-owner-email:\r
+robot-status:actively in use\r
+robot-purpose:WebMapping\r
+robot-type:standalone\r
+robot-platform:        (Java Based) unix,windows95,windowsNT,os2,mac etc ..\r
+robot-availability:binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: MerzScope\r
+robot-noindex: no\r
+robot-host:(Client Based)\r
+robot-from:\r
+robot-useragent: MerzScope\r
+robot-language:        java\r
+robot-description: Robot is part of a Web-Mapping package called MerzScope,\r
+        to be used mainly by consultants, and web masters to create and\r
+        publish maps, on and of the World wide web.\r
+robot-history: \r
+robot-environment:\r
+modified-date: Fri, 13 March 1997 16:31:00\r
+modified-by: Philip Lenir, MerzScope lead developper\r
+\r
+robot-id:              meshexplorer\r
+robot-name:            NEC-MeshExplorer\r
+robot-cover-url:       http://netplaza.biglobe.or.jp/\r
+robot-details-url:     http://netplaza.biglobe.or.jp/keyword.html\r
+robot-owner-name:      web search service maintenance group\r
+robot-owner-url:       http://netplaza.biglobe.or.jp/keyword.html\r
+robot-owner-email:     web-dir@mxa.meshnet.or.jp\r
+robot-status:          active\r
+robot-purpose:         indexing\r
+robot-type:            standalone\r
+robot-platform:                unix\r
+robot-availability:    none\r
+robot-exclusion:       yes\r
+robot-exclusion-useragent:     NEC-MeshExplorer\r
+robot-noindex:         no\r
+robot-host:            meshsv300.tk.mesh.ad.jp\r
+robot-from:            yes\r
+robot-useragent:       NEC-MeshExplorer\r
+robot-language:                c\r
+robot-description:     The NEC-MeshExplorer robot is used to build database for the NETPLAZA\r
+ search service operated by NEC Corporation. The robot searches URLs\r
+ around sites in japan(JP domain).\r
+ The robot runs every day, and visits sites in a random order.\r
+robot-history: Prototype version of this robot was developed in C&C Research\r
+ Laboratories, NEC Corporation. Current robot (Version 1.0) is based\r
+ on the prototype and has more functions.\r
+robot-environment:     research\r
+modified-date:         Jan 1, 1997\r
+modified-by:           Nobuya Kubo, Hajime Takano\r
+\r
+robot-id: MindCrawler\r
+robot-name: MindCrawler\r
+robot-cover-url: http://www.mindpass.com/_technology_faq.htm\r
+robot-details-url:\r
+robot-owner-name: Mindpass\r
+robot-owner-url: http://www.mindpass.com/\r
+robot-owner-email: support@mindpass.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: linux\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: MindCrawler\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: MindCrawler\r
+robot-language: c++\r
+robot-description: \r
+robot-history:\r
+robot-environment:\r
+modified-date: Tue Mar 28 11:30:09 CEST 2000\r
+modified-by:\r
+\r
+robot-id:moget\r
+robot-name:moget\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:NTT-ME Infomation Xing,Inc\r
+robot-owner-url:http://www.nttx.co.jp\r
+robot-owner-email:moget@goo.ne.jp\r
+robot-status:active\r
+robot-purpose:indexing,statistics\r
+robot-type:standalone\r
+robot-platform:unix\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:moget\r
+robot-noindex:yes\r
+robot-host:*.goo.ne.jp\r
+robot-from:yes\r
+robot-useragent:moget/1.0\r
+robot-language:c\r
+robot-description: This robot is used to build the database for the search service operated by goo\r
+robot-history:\r
+robot-environment:service\r
+modified-date:Thu, 30 Mar 2000 18:40:37 GMT\r
+modified-by:moget@goo.ne.jp\r
+\r
+robot-id:           momspider\r
+robot-name:         MOMspider\r
+robot-cover-url:    http://www.ics.uci.edu/WebSoft/MOMspider/\r
+robot-details-url:\r
+robot-owner-name:   Roy T. Fielding\r
+robot-owner-url:    http://www.ics.uci.edu/dir/grad/Software/fielding\r
+robot-owner-email:  fielding@ics.uci.edu\r
+robot-status:       active\r
+robot-purpose:      maintenance, statistics\r
+robot-type:         standalone\r
+robot-platform:     UNIX\r
+robot-availability: source\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         yes\r
+robot-useragent:    MOMspider/1.00 libwww-perl/0.40\r
+robot-language:     perl 4\r
+robot-description:  to validate links, and generate statistics. It's usually run\r
+       from anywhere\r
+robot-history:      Originated as a research project at the University of\r
+       California, Irvine, in 1993. Presented at the First\r
+       International WWW Conference in Geneva, 1994.\r
+robot-environment:\r
+modified-date:      Sat May 6 08:11:58 1995    \r
+modified-by:        fielding@ics.uci.edu\r
+\r
+robot-id:           monster\r
+robot-name:         Monster\r
+robot-cover-url:    http://www.neva.ru/monster.list/russian.www.html\r
+robot-details-url:  \r
+robot-owner-name:   Dmitry Dicky\r
+robot-owner-url:    http://wild.stu.neva.ru/\r
+robot-owner-email:  diwil@wild.stu.neva.ru\r
+robot-status:       active\r
+robot-purpose:      maintenance, mirroring\r
+robot-type:         standalone\r
+robot-platform:     UNIX (Linux)\r
+robot-availability: binary\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         wild.stu.neva.ru\r
+robot-from:         \r
+robot-useragent:    Monster/vX.X.X -$TYPE ($OSTYPE)\r
+robot-language:     C\r
+robot-description:  The Monster has two parts - Web searcher and Web analyzer.\r
+       Searcher is intended to perform the list of WWW sites of \r
+       desired domain (for example it can perform list of all \r
+       WWW sites of mit.edu, com, org, etc... domain)\r
+       In the User-agent field $TYPE is set to 'Mapper' for Web searcher\r
+       and 'StAlone' for Web analyzer. \r
+robot-history:      Now the full (I suppose) list of ex-USSR sites is produced.\r
+robot-environment:  \r
+modified-date:      Tue Jun 25 10:03:36 1996\r
+modified-by:\r
+\r
+robot-id: motor\r
+robot-name: Motor\r
+robot-cover-url: http://www.cybercon.de/Motor/index.html\r
+robot-details-url:\r
+robot-owner-name: Mr. Oliver Runge, Mr. Michael Goeckel\r
+robot-owner-url: http://www.cybercon.de/index.html\r
+robot-owner-email: Motor@cybercon.technopark.gmd.de\r
+robot-status: developement\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: mac\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Motor\r
+robot-noindex: no\r
+robot-host: Michael.cybercon.technopark.gmd.de\r
+robot-from: yes\r
+robot-useragent: Motor/0.2\r
+robot-language: 4th dimension\r
+robot-description: The Motor robot is used to build the database for the \r
+ www.webindex.de search service operated by CyberCon. The robot ios under \r
+ development - it runs in random intervals and visits site in a priority \r
+ driven order (.de/.ch/.at first, root and robots.txt first)\r
+robot-history: \r
+robot-environment: service\r
+modified-date: Wed, 3 Jul 1996 15:30:00 +0100\r
+modified-by: Michael Goeckel (Michael@cybercon.technopark.gmd.de)\r
+\r
+robot-id: muscatferret\r
+robot-name: Muscat Ferret\r
+robot-cover-url: http://www.muscat.co.uk/euroferret/\r
+robot-details-url:\r
+robot-owner-name: Olly Betts\r
+robot-owner-url: http://www.muscat.co.uk/~olly/\r
+robot-owner-email: olly@muscat.co.uk\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: MuscatFerret\r
+robot-noindex: yes\r
+robot-host: 193.114.89.*, 194.168.54.11\r
+robot-from: yes\r
+robot-useragent: MuscatFerret/<version>\r
+robot-language: c, perl5\r
+robot-description: Used to build the database for the EuroFerret\r
+ <URL:http://www.muscat.co.uk/euroferret/>\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Tue, 21 May 1997 17:11:00 GMT\r
+modified-by: olly@muscat.co.uk\r
+\r
+robot-id: mwdsearch\r
+robot-name: Mwd.Search\r
+robot-cover-url: (none)\r
+robot-details-url: (none)\r
+robot-owner-name: Antti Westerberg\r
+robot-owner-url: (none)\r
+robot-owner-email: Antti.Westerberg@mwd.sci.fi\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix (Linux)\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: MwdSearch\r
+robot-noindex: yes\r
+robot-host: *.fifi.net\r
+robot-from: no\r
+robot-useragent: MwdSearch/0.1\r
+robot-language: perl5, c\r
+robot-description: Robot for indexing finnish (toplevel domain .fi)\r
+                   webpages for search engine called Fifi.\r
+                   Visits sites in random order.\r
+robot-history: (none)\r
+robot-environment: service (+ commercial)mwd.sci.fi>\r
+modified-date: Mon, 26 May 1997 15:55:02 EEST\r
+modified-by: Antti.Westerberg@mwd.sci.fi\r
+\r
+robot-id: myweb\r
+robot-name: Internet Shinchakubin\r
+robot-cover-url: http://naragw.sharp.co.jp/myweb/home/\r
+robot-details-url:\r
+robot-owner-name: SHARP Corp.\r
+robot-owner-url: http://naragw.sharp.co.jp/myweb/home/\r
+robot-owner-email: shinchakubin-request@isl.nara.sharp.co.jp\r
+robot-status: active\r
+robot-purpose: find new links and changed pages\r
+robot-type: standalone\r
+robot-platform: Windows98\r
+robot-availability: binary as bundled software\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: sharp-info-agent\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: User-Agent: Mozilla/4.0 (compatible; sharp-info-agent v1.0; )\r
+robot-language: Java\r
+robot-description: makes a list of new links and changed pages based\r
+      on  user's frequently clicked pages in the past 31 days.\r
+      client may run this software one or few times every day, manually or\r
+      specified time.\r
+robot-history: shipped for SHARP's PC users since Feb 2000\r
+robot-environment: commercial\r
+modified-date: Fri, 30 Jun 2000 19:02:52 JST\r
+modified-by: Katsuo Doi <doi@isl.nara.sharp.co.jp>\r
+\r
+robot-id:           netcarta\r
+robot-name:         NetCarta WebMap Engine\r
+robot-cover-url:    http://www.netcarta.com/\r
+robot-details-url:\r
+robot-owner-name:   NetCarta WebMap Engine\r
+robot-owner-url:    http://www.netcarta.com/\r
+robot-owner-email:  info@netcarta.com\r
+robot-status:\r
+robot-purpose:      indexing, maintenance, mirroring, statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    NetCarta CyberPilot Pro\r
+robot-language:     C++.\r
+robot-description:  The NetCarta WebMap Engine is a general purpose, commercial\r
+       spider. Packaged with a full GUI in the CyberPilo Pro\r
+       product, it acts as a personal spider to work with a browser\r
+       to facilitiate context-based navigation.  The WebMapper\r
+       product uses the robot to manage a site (site copy, site\r
+       diff, and extensive link management facilities).  All\r
+       versions can create publishable NetCarta WebMaps, which\r
+       capture the crawled information.  If the robot sees a\r
+       published map, it will return the published map rather than\r
+       continuing its crawl. Since this is a personal spider, it\r
+       will be launched from multiple domains. This robot tends to\r
+       focus on a particular site.  No instance of the robot should\r
+       have more than one outstanding request out to any given site\r
+       at a time. The User-agent field contains a coded ID\r
+       identifying the instance of the spider; specific users can\r
+       be blocked via robots.txt using this ID.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sun Feb 18 02:02:49 1996.\r
+modified-by:\r
+\r
+robot-id:  netmechanic\r
+robot-name:  NetMechanic\r
+robot-cover-url: http://www.netmechanic.com\r
+robot-details-url: http://www.netmechanic.com/faq.html\r
+robot-owner-name: Tom Dahm\r
+robot-owner-url:  http://iquest.com/~tdahm\r
+robot-owner-email: tdahm@iquest.com\r
+robot-status: development\r
+robot-purpose: Link and HTML validation\r
+robot-type: standalone with web gateway\r
+robot-platform: UNIX\r
+robot-availability: via web page\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent: WebMechanic\r
+robot-noindex: no\r
+robot-host: 206.26.168.18\r
+robot-from: no\r
+robot-useragent: NetMechanic\r
+robot-language: C\r
+robot-description:  NetMechanic is a link validation and\r
+ HTML validation robot run using a web page interface.\r
+robot-history:\r
+robot-environment:\r
+modified-date: Sat, 17 Aug 1996 12:00:00 GMT\r
+modified-by:\r
+\r
+robot-id: netscoop\r
+robot-name: NetScoop\r
+robot-cover-url: http://www-a2k.is.tokushima-u.ac.jp/search/index.html\r
+robot-owner-name: Kenji Kita\r
+robot-owner-url: http://www-a2k.is.tokushima-u.ac.jp/member/kita/index.html\r
+robot-owner-email: kita@is.tokushima-u.ac.jp\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: UNIX\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: NetScoop\r
+robot-host: alpha.is.tokushima-u.ac.jp, beta.is.tokushima-u.ac.jp\r
+robot-useragent: NetScoop/1.0 libwww/5.0a\r
+robot-language: C\r
+robot-description: The NetScoop robot is used to build the database\r
+                   for the NetScoop search engine.\r
+robot-history: The robot has been used in the research project\r
+               at the Faculty of Engineering, Tokushima University, Japan.,\r
+               since Dec. 1996.\r
+robot-environment: research\r
+modified-date: Fri, 10 Jan 1997.\r
+modified-by: Kenji Kita\r
+\r
+robot-id: newscan-online\r
+robot-name: newscan-online\r
+robot-cover-url: http://www.newscan-online.de/\r
+robot-details-url: http://www.newscan-online.de/info.html\r
+robot-owner-name: Axel Mueller\r
+robot-owner-url:\r
+robot-owner-email: mueller@newscan-online.de\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Linux\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: newscan-online\r
+robot-noindex: no\r
+robot-host: *newscan-online.de\r
+robot-from: yes\r
+robot-useragent: newscan-online/1.1\r
+robot-language: perl\r
+robot-description: The newscan-online robot is used to build a database for\r
+ the newscan-online news search service operated by smart information\r
+ services. The robot runs daily and visits predefined sites in a random order.\r
+robot-history: This robot finds its roots in a prereleased software for\r
+ news filtering for Lotus Notes in 1995.\r
+robot-environment: service\r
+modified-date: Fri, 9 Apr 1999 11:45:00 GMT\r
+modified-by: Axel Mueller\r
+\r
+robot-id:           nhse\r
+robot-name:         NHSE Web Forager\r
+robot-cover-url:    http://nhse.mcs.anl.gov/\r
+robot-details-url:\r
+robot-owner-name:   Robert Olson\r
+robot-owner-url:    http://www.mcs.anl.gov/people/olson/\r
+robot-owner-email:  olson@mcs.anl.gov\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *.mcs.anl.gov\r
+robot-from:         yes\r
+robot-useragent:    NHSEWalker/3.0\r
+robot-language:     perl 5\r
+robot-description:  to generate a Resource Discovery database\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Fri May 5 15:47:55 1995\r
+modified-by:\r
+\r
+robot-id:           nomad\r
+robot-name:         Nomad\r
+robot-cover-url:    http://www.cs.colostate.edu/~sonnen/projects/nomad.html\r
+robot-details-url:\r
+robot-owner-name:   Richard Sonnen\r
+robot-owner-url:    http://www.cs.colostate.edu/~sonnen/\r
+robot-owner-email:  sonnen@cs.colostat.edu\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *.cs.colostate.edu\r
+robot-from:         no\r
+robot-useragent:    Nomad-V2.x\r
+robot-language:     Perl 4\r
+robot-description:\r
+robot-history:      Developed in 1995 at Colorado State University.\r
+robot-environment:\r
+modified-date:      Sat Jan 27 21:02:20 1996.\r
+modified-by:\r
+\r
+robot-id:           northstar\r
+robot-name:         The NorthStar Robot\r
+robot-cover-url:    http://comics.scs.unr.edu:7000/top.html\r
+robot-details-url:\r
+robot-owner-name:   Fred Barrie\r
+robot-owner-url:    \r
+robot-owner-email:  barrie@unr.edu\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         frognot.utdallas.edu, utdallas.edu, cnidir.org\r
+robot-from:         yes\r
+robot-useragent:    NorthStar\r
+robot-language:     \r
+robot-description:  Recent runs (26 April 94) will concentrate on textual\r
+       analysis of the Web versus GopherSpace (from the Veronica\r
+       data) as well as indexing.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: occam\r
+robot-name: Occam\r
+robot-cover-url: http://www.cs.washington.edu/research/projects/ai/www/occam/\r
+robot-details-url:\r
+robot-owner-name: Marc Friedman\r
+robot-owner-url: http://www.cs.washington.edu/homes/friedman/\r
+robot-owner-email: friedman@cs.washington.edu\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Occam\r
+robot-noindex: no\r
+robot-host: gentian.cs.washington.edu, sekiu.cs.washington.edu, saxifrage.cs.washington.edu\r
+robot-from: yes\r
+robot-useragent: Occam/1.0\r
+robot-language: CommonLisp, perl4\r
+robot-description: The robot takes high-level queries, breaks them down into\r
+                multiple web requests, and answers them by combining disparate\r
+                data gathered in one minute from numerous web sites, or from\r
+                the robots cache.  Currently the only user is me.\r
+robot-history: The robot is a descendant of Rodney,\r
+               an earlier project at the University of Washington.\r
+robot-environment: research\r
+modified-date: Thu, 21 Nov 1996 20:30 GMT\r
+modified-by: friedman@cs.washington.edu (Marc Friedman)\r
+\r
+robot-id:           octopus\r
+robot-name:         HKU WWW Octopus\r
+robot-cover-url:    http://phoenix.cs.hku.hk:1234/~jax/w3rui.shtml\r
+robot-details-url:\r
+robot-owner-name:   Law Kwok Tung , Lee Tak Yeung , Lo Chun Wing\r
+robot-owner-url:    http://phoenix.cs.hku.hk:1234/~jax\r
+robot-owner-email:  jax@cs.hku.hk\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no.\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         phoenix.cs.hku.hk\r
+robot-from:         yes\r
+robot-useragent:    HKU WWW Robot, \r
+robot-language:     Perl 5, C, Java.\r
+robot-description:  HKU Octopus is an ongoing project for resource discovery in\r
+       the Hong Kong and China WWW domain . It is a research\r
+       project conducted by three undergraduate at the University\r
+       of Hong Kong\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Thu Mar  7 14:21:55 1996.\r
+modified-by:\r
+\r
+robot-id: orb_search\r
+robot-name: Orb Search\r
+robot-cover-url: http://orbsearch.home.ml.org\r
+robot-details-url: http://orbsearch.home.ml.org\r
+robot-owner-name: Matt Weber\r
+robot-owner-url: http://www.weberworld.com\r
+robot-owner-email: webernet@geocities.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Orbsearch/1.0\r
+robot-noindex: yes\r
+robot-host: cow.dyn.ml.org, *.dyn.ml.org\r
+robot-from: yes\r
+robot-useragent: Orbsearch/1.0\r
+robot-language: Perl5\r
+robot-description: Orbsearch builds the database for Orb Search Engine.\r
+  It runs when requested.\r
+robot-history: This robot was started as a hobby.\r
+robot-environment: hobby\r
+modified-date: Sun, 31 Aug 1997 02:28:52 GMT\r
+modified-by: Matt Weber\r
+\r
+robot-id: packrat\r
+robot-name: Pack Rat\r
+robot-cover-url: http://web.cps.msu.edu/~dexterte/isl/packrat.html\r
+robot-details-url: \r
+robot-owner-name: Terry Dexter\r
+robot-owner-url: http://web.cps.msu.edu/~dexterte\r
+robot-owner-email: dexterte@cps.msu.edu\r
+robot-status: development\r
+robot-purpose: both maintenance and mirroring\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability:  at the moment, none...source when developed.\r
+robot-exclusion: yes \r
+robot-exclusion-useragent: packrat or *\r
+robot-noindex: no, not yet\r
+robot-host: cps.msu.edu\r
+robot-from: \r
+robot-useragent: PackRat/1.0\r
+robot-language: perl with libwww-5.0\r
+robot-description: Used for local maintenance and for gathering \r
+       web pages so\r
+       that local statisistical info can be used in artificial intelligence programs.\r
+         Funded by NEMOnline.\r
+robot-history: In the making...\r
+robot-environment: research\r
+modified-date: Tue, 20 Aug 1996 15:45:11\r
+modified-by: Terry Dexter\r
+\r
+robot-id:pageboy\r
+robot-name:PageBoy\r
+robot-cover-url:http://www.webdocs.org/\r
+robot-details-url:http://www.webdocs.org/ \r
+robot-owner-name:Chihiro Kuroda \r
+robot-owner-url:http://www.webdocs.org/\r
+robot-owner-email:pageboy@webdocs.org\r
+robot-status:development\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:unix\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:pageboy\r
+robot-noindex:yes\r
+robot-nofollow:yes\r
+robot-host:*.webdocs.org\r
+robot-from:yes\r
+robot-useragent:PageBoy/1.0\r
+robot-language:c\r
+robot-description:The robot visits at regular intervals.\r
+robot-history:none\r
+robot-environment:service\r
+modified-date:Fri, 21 Oct 1999 17:28:52 GMT\r
+modified-by:webdocs\r
+\r
+robot-id: parasite\r
+robot-name: ParaSite\r
+robot-cover-url: http://www.ianett.com/parasite/\r
+robot-details-url: http://www.ianett.com/parasite/\r
+robot-owner-name: iaNett.com\r
+robot-owner-url: http://www.ianett.com/\r
+robot-owner-email: parasite@ianett.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: ParaSite\r
+robot-noindex: yes\r
+robot-nofollow: yes\r
+robot-host: *.ianett.com\r
+robot-from: yes\r
+robot-useragent: ParaSite/0.21 (http://www.ianett.com/parasite/)\r
+robot-language: c++\r
+robot-description: Builds index for ianett.com search database. Runs\r
+ continiously.\r
+robot-history: Second generation of ianett.com spidering technology,\r
+ originally called Sven.\r
+robot-environment: service\r
+modified-date: July 28, 2000\r
+modified-by: Marty Anstey\r
+\r
+robot-id:               patric\r
+robot-name:             Patric\r
+robot-cover-url:        http://www.nwnet.net/technical/ITR/index.html\r
+robot-details-url:      http://www.nwnet.net/technical/ITR/index.html\r
+robot-owner-name:       toney@nwnet.net\r
+robot-owner-url:        http://www.nwnet.net/company/staff/toney\r
+robot-owner-email:      webmaster@nwnet.net\r
+robot-status:           development\r
+robot-purpose:          statistics\r
+robot-type:             standalone\r
+robot-platform:         unix\r
+robot-availability:     data\r
+robot-exclusion:        yes\r
+robot-exclusion-useragent: patric       \r
+robot-noindex:          yes     \r
+robot-host:             *.nwnet.net     \r
+robot-from:             no\r
+robot-useragent:        Patric/0.01a            \r
+robot-language:         perl\r
+robot-description:      (contained at http://www.nwnet.net/technical/ITR/index.html )\r
+robot-history:          (contained at http://www.nwnet.net/technical/ITR/index.html )\r
+robot-environment:      service \r
+modified-date:          Thurs, 15 Aug 1996\r
+modified-by:            toney@nwnet.net\r
+\r
+robot-id:           perignator\r
+robot-name:         The Peregrinator\r
+robot-cover-url:    http://www.maths.usyd.edu.au:8000/jimr/pe/Peregrinator.html\r
+robot-details-url:\r
+robot-owner-name:   Jim Richardson\r
+robot-owner-url:    http://www.maths.usyd.edu.au:8000/jimr.html\r
+robot-owner-email:  jimr@maths.su.oz.au\r
+robot-status:       \r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         yes\r
+robot-useragent:    Peregrinator-Mathematics/0.7\r
+robot-language:     perl 4\r
+robot-description:  This robot is being used to generate an index of documents\r
+       on Web sites connected with mathematics and statistics. It\r
+       ignores off-site links, so does not stray from a list of\r
+       servers specified initially.\r
+robot-history:      commenced operation in August 1994\r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: perlcrawler\r
+robot-name: PerlCrawler 1.0\r
+robot-cover-url: http://perlsearch.hypermart.net/\r
+robot-details-url: http://www.xav.com/scripts/xavatoria/index.html\r
+robot-owner-name: Matt McKenzie \r
+robot-owner-url: http://perlsearch.hypermart.net/\r
+robot-owner-email: webmaster@perlsearch.hypermart.net\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: perlcrawler\r
+robot-noindex: yes\r
+robot-host: server5.hypermart.net\r
+robot-from: yes\r
+robot-useragent: PerlCrawler/1.0 Xavatoria/2.0\r
+robot-language: perl5\r
+robot-description: The PerlCrawler robot is designed to index and build\r
+ a database of pages relating to the Perl programming language.\r
+robot-history: Originated in modified form on 25 June 1998\r
+robot-environment: hobby\r
+modified-date: Fri, 18 Dec 1998 23:37:40 GMT\r
+modified-by: Matt McKenzie\r
+\r
+robot-id:           phantom\r
+robot-name:         Phantom\r
+robot-cover-url:    http://www.maxum.com/phantom/\r
+robot-details-url:\r
+robot-owner-name:   Larry Burke\r
+robot-owner-url:    http://www.aktiv.com/\r
+robot-owner-email:  lburke@aktiv.com\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     Macintosh\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    Duppies\r
+robot-language:\r
+robot-description:  Designed to allow webmasters to provide a searchable index\r
+       of their own site as well as to other sites, perhaps with\r
+       similar content.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri Jan 19 05:08:15 1996.\r
+modified-by:\r
+\r
+robot-id: piltdownman\r
+robot-name: PiltdownMan\r
+robot-cover-url: http://profitnet.bizland.com/\r
+robot-details-url: http://profitnet.bizland.com/piltdownman.html\r
+robot-owner-name: Daniel Vilà\r
+robot-owner-url: http://profitnet.bizland.com/aboutus.html\r
+robot-owner-email: profitnet@myezmail.com\r
+robot-status: active\r
+robot-purpose: statistics\r
+robot-type: standalone\r
+robot-platform: windows95, windows98, windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: piltdownman\r
+robot-noindex: no\r
+robot-nofollow: no\r
+robot-host: 62.36.128.*, 194.133.59.*, 212.106.215.*\r
+robot-from: no\r
+robot-useragent: PiltdownMan/1.0 profitnet@myezmail.com\r
+robot-language: c++\r
+robot-description: The PiltdownMan robot is used to get a\r
+                   list of links from the search engines\r
+                   in our database. These links are\r
+                   followed, and the page that they refer\r
+                   is downloaded to get some statistics\r
+                   from them.\r
+                   The robot runs once a month, more or\r
+                   less, and visits the first 10 pages\r
+                   listed in every search engine, for a\r
+                   group of keywords.\r
+robot-history: To maintain a database of search engines,\r
+               we needed an automated tool. That's why\r
+               we began the creation of this robot.\r
+robot-environment: service\r
+modified-date: Mon, 13 Dec 1999 21:50:32 GMT\r
+modified-by: Daniel Vilà\r
+\r
+robot-id:           pioneer\r
+robot-name:         Pioneer\r
+robot-cover-url:    http://sequent.uncfsu.edu/~micah/pioneer.html\r
+robot-details-url:\r
+robot-owner-name:   Micah A. Williams\r
+robot-owner-url:    http://sequent.uncfsu.edu/~micah/\r
+robot-owner-email:  micah@sequent.uncfsu.edu\r
+robot-status:\r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *.uncfsu.edu or flyer.ncsc.org\r
+robot-from:         yes\r
+robot-useragent:    Pioneer\r
+robot-language:     C.\r
+robot-description:  Pioneer is part of an undergraduate research\r
+       project.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon Feb  5 02:49:32 1996.\r
+modified-by:\r
+\r
+robot-id:           pitkow\r
+robot-name:         html_analyzer\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   James E. Pitkow\r
+robot-owner-url:    \r
+robot-owner-email:  pitkow@aries.colorado.edu\r
+robot-status:       \r
+robot-purpose:      maintainance\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  to check validity of Web servers. I'm not sure if it has\r
+       ever been run remotely.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: pjspider\r
+robot-name: Portal Juice Spider\r
+robot-cover-url: http://www.portaljuice.com\r
+robot-details-url: http://www.portaljuice.com/pjspider.html\r
+robot-owner-name: Nextopia Software Corporation\r
+robot-owner-url: http://www.portaljuice.com\r
+robot-owner-email: pjspider@portaljuice.com\r
+robot-status: active\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: pjspider\r
+robot-noindex: yes\r
+robot-host: *.portaljuice.com, *.nextopia.com\r
+robot-from: yes\r
+robot-useragent: PortalJuice.com/4.0\r
+robot-language: C/C++\r
+robot-description: Indexing web documents for Portal Juice vertical portal\r
+ search engine\r
+robot-history: Indexing the web since 1998 for the purposes of offering our\r
+ commerical Portal Juice search engine services.\r
+robot-environment: service\r
+modified-date: Wed Jun 23 17:00:00 EST 1999\r
+modified-by: pjspider@portaljuice.com\r
+\r
+robot-id:           pka\r
+robot-name:         PGP Key Agent\r
+robot-cover-url:    http://www.starnet.it/pgp\r
+robot-details-url:\r
+robot-owner-name:   Massimiliano Pucciarelli\r
+robot-owner-url:    http://www.starnet.it/puma\r
+robot-owner-email:  puma@comm2000.it\r
+robot-status:       Active\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     UNIX, Windows NT\r
+robot-availability: none\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         salerno.starnet.it\r
+robot-from:         yes\r
+robot-useragent:    PGP-KA/1.2\r
+robot-language:     Perl 5\r
+robot-description:  This program search the pgp public key for the \r
+                    specified user.\r
+robot-history:      Originated as a research project at Salerno \r
+                    University in 1995.\r
+robot-environment:  Research\r
+modified-date:      June 27 1996.\r
+modified-by:        Massimiliano Pucciarelli\r
+\r
+robot-id: plumtreewebaccessor\r
+robot-name: PlumtreeWebAccessor \r
+robot-cover-url:\r
+robot-details-url: http://www.plumtree.com/\r
+robot-owner-name: Joseph A. Stanko \r
+robot-owner-url:\r
+robot-owner-email: josephs@plumtree.com\r
+robot-status: development\r
+robot-purpose: indexing for the Plumtree Server\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: PlumtreeWebAccessor\r
+robot-noindex: yes\r
+robot-host:\r
+robot-from: yes\r
+robot-useragent: PlumtreeWebAccessor/0.9\r
+robot-language: c++\r
+robot-description: The Plumtree Web Accessor is a component that\r
+ customers can add to the\r
+        Plumtree Server to index documents on the World Wide Web.\r
+robot-history:\r
+robot-environment: commercial\r
+modified-date: Thu, 17 Dec 1998\r
+modified-by: Joseph A. Stanko <josephs@plumtree.com>\r
+\r
+robot-id: poppi\r
+robot-name: Poppi\r
+robot-cover-url: http://members.tripod.com/poppisearch\r
+robot-details-url: http://members.tripod.com/poppisearch\r
+robot-owner-name: Antonio Provenzano\r
+robot-owner-url: Antonio Provenzano\r
+robot-owner-email:\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix/linux\r
+robot-availability: none\r
+robot-exclusion:\r
+robot-exclusion-useragent:\r
+robot-noindex: yes\r
+robot-host:=20\r
+robot-from:\r
+robot-useragent: Poppi/1.0\r
+robot-language: C\r
+robot-description: Poppi is a crawler to index the web that runs weekly \r
+ gathering and indexing hypertextual, multimedia and executable file \r
+ formats\r
+robot-history: Created by Antonio Provenzano in the april of 2000, has \r
+ been acquired from Tomi Officine Multimediali srl and it is next to \r
+ release as service and commercial\r
+robot-environment: service\r
+modified-date: Mon, 22 May 2000 15:47:30 GMT\r
+modified-by: Antonio Provenzano\r
+\r
+robot-id: portalb\r
+robot-name: PortalB Spider\r
+robot-cover-url: http://www.portalb.com/\r
+robot-details-url:\r
+robot-owner-name: PortalB Spider Bug List\r
+robot-owner-url:\r
+robot-owner-email: spider@portalb.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: PortalBSpider\r
+robot-noindex: yes\r
+robot-nofollow: yes\r
+robot-host: spider1.portalb.com, spider2.portalb.com, etc.\r
+robot-from: no\r
+robot-useragent: PortalBSpider/1.0 (spider@portalb.com)\r
+robot-language: C++\r
+robot-description: The PortalB Spider indexes selected sites for\r
+ high-quality business information.\r
+robot-history:\r
+robot-environment: service\r
+\r
+robot-id: Puu\r
+robot-name: GetterroboPlus Puu\r
+robot-details-url: http://marunaka.homing.net/straight/getter/\r
+robot-cover-url: http://marunaka.homing.net/straight/\r
+robot-owner-name: marunaka\r
+robot-owner-url: http://marunaka.homing.net\r
+robot-owner-email: marunaka@homing.net\r
+robot-status: active: robot actively in use\r
+robot-purpose: Purpose of the robot. One or more of:\r
+  - gathering: gather data of original standerd TAG for Puu contains the\r
+ information of the sites registered my Search Engin.\r
+  - maintenance: link validation\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes (Puu patrols only registered url in my Search Engine)\r
+robot-exclusion-useragent:  Getterrobo-Plus\r
+robot-noindex:  no\r
+robot-host: straight FLASH!! Getterrobo-Plus, *.homing.net\r
+robot-from: yes\r
+robot-useragent: straight FLASH!! GetterroboPlus 1.5\r
+robot-language: perl5\r
+robot-description:\r
+  Puu robot is used to gater data from registered site in Search Engin\r
+ "straight FLASH!!" for building anouncement page of state of renewal of\r
+ registered site in "straight FLASH!!".\r
+ Robot runs everyday.\r
+robot-history:\r
+  This robot patorols based registered sites in Search Engin "straight FLASH!!"\r
+robot-environment: hobby\r
+modified-date: Fri, 26 Jun 1998\r
+\r
+robot-id:           python\r
+robot-name:         The Python Robot\r
+robot-cover-url:    http://www.python.org/\r
+robot-details-url:  \r
+robot-owner-name:   Guido van Rossum\r
+robot-owner-url:    http://www.python.org/~guido/\r
+robot-owner-email:  guido@python.org\r
+robot-status:       retired\r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: none\r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  \r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: raven \r
+robot-name: Raven Search\r
+robot-cover-url: http://ravensearch.tripod.com\r
+robot-details-url: http://ravensearch.tripod.com\r
+robot-owner-name: Raven Group\r
+robot-owner-url: http://ravensearch.tripod.com\r
+robot-owner-email: ravensearch@hotmail.com\r
+robot-status: Development: robot under development\r
+robot-purpose: Indexing: gather content for commercial query engine.\r
+robot-type: Standalone: a separate program\r
+robot-platform: Unix, Windows98, WindowsNT, Windows2000\r
+robot-availability: None\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent: Raven\r
+robot-noindex: Yes\r
+robot-nofollow: Yes\r
+robot-host: 192.168.1.*\r
+robot-from: Yes\r
+robot-useragent: Raven-v2\r
+robot-language: Perl-5\r
+robot-description: Raven was written for the express purpose of indexing the web.\r
+ It can parallel process hundreds of URLS's at a time. It runs on a sporadic basis \r
+ as testing continues. It is really several programs running concurrently.\r
+ It takes four computers to run Raven Search. Scalable in sets of four.\r
+robot-history: This robot is new. First active on March 25, 2000.\r
+robot-environment: Commercial: is a commercial product. Possibly GNU later ;-)\r
+modified-date: Fri, 25 Mar 2000 17:28:52 GMT\r
+modified-by: Raven Group\r
+\r
+robot-id:           rbse\r
+robot-name:         RBSE Spider\r
+robot-cover-url:    http://rbse.jsc.nasa.gov/eichmann/urlsearch.html\r
+robot-details-url:\r
+robot-owner-name:   David Eichmann\r
+robot-owner-url:    http://rbse.jsc.nasa.gov/eichmann/home.html\r
+robot-owner-email:  eichmann@rbse.jsc.nasa.gov\r
+robot-status:       active\r
+robot-purpose:      indexing, statistics\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         rbse.jsc.nasa.gov (192.88.42.10)\r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     C, oracle, wais\r
+robot-description:  Developed and operated as part of the NASA-funded Repository\r
+       Based Software Engineering Program at the Research Institute\r
+       for Computing and Information Systems, University of Houston\r
+       - Clear Lake.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Thu May 18 04:47:02 1995\r
+modified-by:\r
+\r
+robot-id:           resumerobot\r
+robot-name:         Resume Robot\r
+robot-cover-url:    http://www.onramp.net/proquest/resume/robot/robot.html\r
+robot-details-url:\r
+robot-owner-name:   James Stakelum\r
+robot-owner-url:    http://www.onramp.net/proquest/resume/java/resume.html\r
+robot-owner-email:  proquest@onramp.net\r
+robot-status:\r
+robot-purpose:      indexing.\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    Resume Robot\r
+robot-language:     C++.\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Tue Mar 12 15:52:25 1996.\r
+modified-by:\r
+\r
+robot-id: rhcs\r
+robot-name: RoadHouse Crawling System\r
+robot-cover-url: http://stage.perceval.be (under developpement)\r
+robot-details-url:\r
+robot-owner-name: Gregoire Welraeds, Emmanuel Bergmans\r
+robot-owner-url: http://www.perceval.be\r
+robot-owner-email: helpdesk@perceval.be\r
+robot-status: development\r
+robot-purpose1: indexing\r
+robot-purpose2: maintenance\r
+robot-purpose3: statistics\r
+robot-type: standalone\r
+robot-platform1: unix (FreeBSD & Linux)\r
+robot-availability: none\r
+robot-exclusion: no (under development)\r
+robot-exclusion-useragent: RHCS\r
+robot-noindex: no (under development)\r
+robot-host: stage.perceval.be\r
+robot-from: no\r
+robot-useragent: RHCS/1.0a\r
+robot-language: c\r
+robot-description: robot used tp build the database for the RoadHouse search service project operated by Perceval  \r
+robot-history: The need of this robot find its roots in the actual RoadHouse directory not maintenained since 1997\r
+robot-environment: service\r
+modified-date: Fri, 26 Feb 1999 12:00:00 GMT\r
+modified-by: Gregoire Welraeds\r
+\r
+robot-id: roadrunner\r
+robot-name: Road Runner: The ImageScape Robot\r
+robot-owner-name: LIM Group\r
+robot-owner-email: lim@cs.leidenuniv.nl\r
+robot-status: development/active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: UNIX\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: roadrunner\r
+robot-useragent: Road Runner: ImageScape Robot (lim@cs.leidenuniv.nl)\r
+robot-language: C, perl5\r
+robot-description: Create Image/Text index for WWW\r
+robot-history: ImageScape Project\r
+robot-environment: commercial service\r
+modified-date: Dec. 1st, 1996\r
+\r
+robot-id: robbie\r
+robot-name: Robbie the Robot\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Robert H. Pollack\r
+robot-owner-url:\r
+robot-owner-email: robert.h.pollack@lmco.com\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix, windows95, windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Robbie\r
+robot-noindex: no\r
+robot-host: *.lmco.com\r
+robot-from: yes\r
+robot-useragent: Robbie/0.1\r
+robot-language: java\r
+robot-description: Used to define document collections for the DISCO system.\r
+                   Robbie is still under development and runs several\r
+                   times a day, but usually only for ten minutes or so.\r
+                   Sites are visited in the order in which references\r
+                   are found, but no host is visited more than once in\r
+                   any two-minute period.\r
+robot-history: The DISCO system is a resource-discovery component in\r
+               the OLLA system, which is a prototype system, developed\r
+               under DARPA funding, to support computer-based education\r
+               and training.\r
+robot-environment: research\r
+modified-date: Wed,  5 Feb 1997 19:00:00 GMT\r
+modified-by:\r
+\r
+\r
+robot-id: robi\r
+robot-name: ComputingSite Robi/1.0\r
+robot-cover-url: http://www.computingsite.com/robi/\r
+robot-details-url: http://www.computingsite.com/robi/\r
+robot-owner-name: Tecor Communications S.L.\r
+robot-owner-url: http://www.tecor.com/\r
+robot-owner-email: robi@computingsite.com\r
+robot-status: Active\r
+robot-purpose: indexing,maintenance\r
+robot-type: standalone\r
+robot-platform: UNIX\r
+robot-availability:\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: robi\r
+robot-noindex: no\r
+robot-host: robi.computingsite.com\r
+robot-from:\r
+robot-useragent: ComputingSite Robi/1.0 (robi@computingsite.com)\r
+robot-language: python\r
+robot-description: Intelligent agent used to build the ComputingSite Search\r
+ Directory.\r
+robot-history: It was born on August 1997.\r
+robot-environment: service\r
+modified-date: Wed, 13 May 1998 17:28:52 GMT\r
+modified-by: Jorge Alegre\r
+\r
+robot-id:           roverbot\r
+robot-name:         Roverbot\r
+robot-cover-url:    http://www.roverbot.com/\r
+robot-details-url:\r
+robot-owner-name:   GlobalMedia Design (Andrew Cowan & Brian\r
+       Clark)\r
+robot-owner-url:    http://www.radzone.org/gmd/\r
+robot-owner-email:  gmd@spyder.net\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         roverbot.com\r
+robot-from:         yes\r
+robot-useragent:    Roverbot\r
+robot-language:     perl5\r
+robot-description:  Targeted email gatherer utilizing user-defined seed points\r
+       and interacting with both the webserver and MX servers of\r
+       remote sites.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Tue Jun 18 19:16:31 1996.\r
+modified-by:\r
+\r
+robot-id:           safetynetrobot\r
+robot-name:         SafetyNet Robot\r
+robot-cover-url:    http://www.urlabs.com/\r
+robot-details-url:\r
+robot-owner-name:   Michael L. Nelson\r
+robot-owner-url:    http://www.urlabs.com/\r
+robot-owner-email:  m.l.nelson@urlabs.com\r
+robot-status:\r
+robot-purpose:      indexing.\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no.\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *.urlabs.com\r
+robot-from:         yes\r
+robot-useragent:    SafetyNet Robot 0.1, \r
+robot-language:     Perl 5\r
+robot-description:  Finds URLs for K-12 content management.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sat Mar 23 20:12:39 1996.\r
+modified-by:\r
+\r
+robot-id: scooter\r
+robot-name: Scooter\r
+robot-cover-url: http://www.altavista.com/\r
+robot-details-url: http://www.altavista.com/av/content/addurl.htm\r
+robot-owner-name: AltaVista\r
+robot-owner-url: http://www.altavista.com/\r
+robot-owner-email: scooter@pa.dec.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Scooter\r
+robot-noindex: yes\r
+robot-host: *.av.pa-x.dec.com\r
+robot-from: yes\r
+robot-useragent: Scooter/2.0 G.R.A.B. V1.1.0\r
+robot-language: c\r
+robot-description: Scooter is AltaVista's prime index agent.\r
+robot-history: Version 2 of Scooter/1.0 developed by Louis Monier of WRL.\r
+robot-environment: service\r
+modified-date: Wed, 13 Jan 1999 17:18:59 GMT\r
+modified-by: steves@avs.dec.com\r
+\r
+robot-id: search_au\r
+robot-name: Search.Aus-AU.COM\r
+robot-details-url: http://Search.Aus-AU.COM/\r
+robot-cover-url: http://Search.Aus-AU.COM/\r
+robot-owner-name: Dez Blanchfield\r
+robot-owner-url: not currently available\r
+robot-owner-email: dez@geko.com\r
+robot-status: - development: robot under development\r
+robot-purpose: - indexing: gather content for an indexing service\r
+robot-type: - standalone: a separate program\r
+robot-platform: - mac - unix - windows95 - windowsNT\r
+robot-availability: - none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Search-AU\r
+robot-noindex: yes\r
+robot-host: Search.Aus-AU.COM, 203.55.124.29, 203.2.239.29\r
+robot-from: no\r
+robot-useragent: not available\r
+robot-language: c, perl, sql\r
+robot-description: Search-AU is a development tool I have built\r
+ to investigate the power of a search engine and web crawler\r
+ to give me access to a database of web content ( html / url's )\r
+ and address's etc from which I hope to build more accurate stats\r
+ about the .au zone's web content.\r
+ the robot started crawling from http://www.geko.net.au/ on\r
+ march 1st, 1998 and after nine days had 70mb of compressed ascii\r
+ in a database to work with. i hope to run a refresh of the crawl\r
+ every month initially, and soon every week bandwidth and cpu allowing.\r
+ if the project warrants further development, i will turn it into\r
+ an australian ( .au ) zone search engine and make it commercially\r
+ available for advertising to cover the costs which are starting\r
+ to mount up. --dez (980313 - black friday!)\r
+robot-environment: - hobby: written as a hobby\r
+modified-date: Fri Mar 13 10:03:32 EST 1998\r
+\r
+robot-id: searchprocess\r
+robot-name: SearchProcess\r
+robot-cover-url: http://www.searchprocess.com\r
+robot-details-url: http://www.intelligence-process.com\r
+robot-owner-name: Mannina Bruno\r
+robot-owner-url: http://www.intelligence-process.com\r
+robot-owner-email: bruno@intelligence-process.com\r
+robot-status: active\r
+robot-purpose: Statistic\r
+robot-type: browser\r
+robot-platform: linux\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: searchprocess\r
+robot-noindex: yes\r
+robot-host: searchprocess.com\r
+robot-from: yes\r
+robot-useragent: searchprocess/0.9\r
+robot-language: perl\r
+robot-description: An intelligent Agent Online. SearchProcess is used to\r
+ provide structured information to user.\r
+robot-history: This is the son of Auresys\r
+robot-environment: Service freeware\r
+modified-date: Thus, 22 Dec 1999\r
+modified-by: Mannina Bruno\r
+\r
+robot-id:           senrigan\r
+robot-name:         Senrigan\r
+robot-cover-url:    http://www.info.waseda.ac.jp/search-e.html\r
+robot-details-url:\r
+robot-owner-name:   TAMURA Kent\r
+robot-owner-url:    http://www.info.waseda.ac.jp/muraoka/members/kent/\r
+robot-owner-email:  kent@muraoka.info.waseda.ac.jp\r
+robot-status:       active\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     Java\r
+robot-availability: none\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:Senrigan\r
+robot-noindex:      yes\r
+robot-host:         aniki.olu.info.waseda.ac.jp\r
+robot-from:         yes\r
+robot-useragent:    Senrigan/xxxxxx\r
+robot-language:     Java\r
+robot-description:  This robot now gets HTMLs from only jp domain.\r
+robot-history:      It has been running since Dec 1994\r
+robot-environment:  research\r
+modified-date:      Mon Jul  1 07:30:00 GMT 1996\r
+modified-by:        TAMURA Kent\r
+\r
+robot-id:           sgscout\r
+robot-name:         SG-Scout\r
+robot-cover-url:    http://www-swiss.ai.mit.edu/~ptbb/SG-Scout/SG-Scout.html\r
+robot-details-url:\r
+robot-owner-name:   Peter Beebee\r
+robot-owner-url:    http://www-swiss.ai.mit.edu/~ptbb/personal/index.html\r
+robot-owner-email:  ptbb@ai.mit.edu, beebee@parc.xerox.com\r
+robot-status:       active\r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         beta.xerox.com\r
+robot-from:         yes\r
+robot-useragent:    SG-Scout\r
+robot-language:     \r
+robot-description:  Does a "server-oriented" breadth-first search in a\r
+       round-robin fashion, with multiple processes.\r
+robot-history:      Run since 27 June 1994, for an internal XEROX research\r
+       project\r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:shaggy\r
+robot-name:ShagSeeker\r
+robot-cover-url:http://www.shagseek.com\r
+robot-details-url:\r
+robot-owner-name:Joseph Reynolds\r
+robot-owner-url:http://www.shagseek.com\r
+robot-owner-email:joe.reynolds@shagseek.com\r
+robot-status:active\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:unix\r
+robot-availability:data\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:Shagseeker\r
+robot-noindex:yes\r
+robot-host:shagseek.com\r
+robot-from:\r
+robot-useragent:Shagseeker at http://www.shagseek.com /1.0\r
+robot-language:perl5\r
+robot-description:Shagseeker is the gatherer for the Shagseek.com search \r
+ engine and goes out weekly.\r
+robot-history:none yet\r
+robot-environment:service\r
+modified-date:Mon 17 Jan 2000 10:00:00 EST\r
+modified-by:Joseph Reynolds\r
+\r
+robot-id: shaihulud\r
+robot-name: Shai'Hulud\r
+robot-cover-url: \r
+robot-details-url:\r
+robot-owner-name: Dimitri Khaoustov\r
+robot-owner-url:\r
+robot-owner-email: shawdow@usa.net\r
+robot-status: active\r
+robot-purpose: mirroring\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: no\r
+robot-exclusion-useragent: \r
+robot-noindex: no\r
+robot-host: *.rdtex.ru\r
+robot-from:\r
+robot-useragent: Shai'Hulud\r
+robot-language: C\r
+robot-description: Used to build mirrors for internal use\r
+robot-history: This robot finds its roots in a research project at RDTeX \r
+        Perspective Projects Group in 1996\r
+robot-environment: research\r
+modified-date: Mon, 5 Aug 1996 14:35:08 GMT\r
+modified-by: Dimitri Khaoustov\r
+\r
+robot-id: sift\r
+robot-name: Sift\r
+robot-cover-url: http://www.worthy.com/\r
+robot-details-url: http://www.worthy.com/\r
+robot-owner-name: Bob Worthy    \r
+robot-owner-url: http://www.worthy.com/~bworthy  \r
+robot-owner-email: bworthy@worthy.com\r
+robot-status: development, active  \r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: sift\r
+robot-noindex: yes\r
+robot-host: www.worthy.com\r
+robot-from:\r
+robot-useragent: libwww-perl-5.41\r
+robot-language: perl\r
+robot-description: Subject directed (via key phrase list) indexing.\r
+robot-history: Libwww of course, implementation using MySQL August, 1999.\r
+ Indexing Search and Rescue sites.\r
+robot-environment: research, service\r
+modified-date: Sat, 16 Oct 1999 19:40:00 GMT\r
+modified-by: Bob Worthy\r
+\r
+robot-id: simbot\r
+robot-name: Simmany Robot Ver1.0\r
+robot-cover-url: http://simmany.hnc.net/\r
+robot-details-url: http://simmany.hnc.net/irman1.html\r
+robot-owner-name: Youngsik, Lee(\ e@L?5=D\ f)\r
+robot-owner-url:\r
+robot-owner-email: ailove@hnc.co.kr\r
+robot-status: development & active\r
+robot-purpose: indexing, maintenance, statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: SimBot\r
+robot-noindex: no \r
+robot-host: sansam.hnc.net\r
+robot-from: no\r
+robot-useragent: SimBot/1.0\r
+robot-language: C\r
+robot-description: The Simmany Robot is used to build the Map(DB) for\r
+ the simmany service operated by HNC(Hangul & Computer Co., Ltd.). The\r
+ robot runs weekly, and visits sites that have a useful korean\r
+ information in a defined order.\r
+robot-history: This robot is a part of simmany service and simmini\r
+ products. The simmini is the Web products that make use of the indexing\r
+ and retrieving modules of simmany.\r
+robot-environment: service, commercial\r
+modified-date: Thu, 19 Sep 1996 07:02:26 GMT\r
+modified-by: Youngsik, Lee\r
+\r
+robot-id: site-valet\r
+robot-name: Site Valet\r
+robot-cover-url: http://valet.webthing.com/\r
+robot-details-url: http://valet.webthing.com/\r
+robot-owner-name: Nick Kew\r
+robot-owner-url:\r
+robot-owner-email: nick@webthing.com\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Site Valet\r
+robot-noindex: no\r
+robot-host: valet.webthing.com,valet.*\r
+robot-from: yes\r
+robot-useragent: Site Valet\r
+robot-language: perl\r
+robot-description: a deluxe site monitoring and analysis service\r
+robot-history: builds on cg-eye, the WDG Validator, and the Link Valet\r
+robot-environment: service\r
+modified-date: Tue, 27 June 2000\r
+modified-by: nick@webthing.com\r
+\r
+robot-id: sitegrabber\r
+robot-name: Open Text Index Robot\r
+robot-cover-url: http://index.opentext.net/main/faq.html\r
+robot-details-url: http://index.opentext.net/OTI_Robot.html\r
+robot-owner-name: John Faichney\r
+robot-owner-url:\r
+robot-owner-email: faichney@opentext.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: UNIX\r
+robot-availability: inquire to markk@opentext.com (Mark Kraatz)\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Open Text Site Crawler\r
+robot-noindex: no\r
+robot-host: *.opentext.com\r
+robot-from: yes\r
+robot-useragent: Open Text Site Crawler V1.0\r
+robot-language: perl/C\r
+robot-description: This robot is run by Open Text Corporation to produce the\r
+ data for the Open Text Index\r
+robot-history: Started in May/95 to replace existing Open Text robot which\r
+ was based on libwww\r
+robot-environment: commercial\r
+modified-date: Fri Jul 25 11:46:56 EDT 1997\r
+modified-by: John Faichney\r
+\r
+robot-id:           sitetech\r
+robot-name:         SiteTech-Rover\r
+robot-cover-url:    http://www.sitetech.com/\r
+robot-details-url:\r
+robot-owner-name:   Anil Peres-da-Silva\r
+robot-owner-url:    http://www.sitetech.com\r
+robot-owner-email:  adasilva@sitetech.com\r
+robot-status:\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    SiteTech-Rover\r
+robot-language:     C++.\r
+robot-description:  Originated as part of a suite of Internet Products to\r
+        organize, search & navigate Intranet sites and to validate\r
+        links in HTML documents.\r
+robot-history: This robot originally went by the name of LiberTech-Rover\r
+robot-environment:\r
+modified-date:      Fri Aug 9 17:06:56 1996.\r
+modified-by: Anil Peres-da-Silva\r
+\r
+robot-id: slurp\r
+robot-name: Inktomi Slurp\r
+robot-cover-url: http://www.inktomi.com/\r
+robot-details-url: http://www.inktomi.com/slurp.html\r
+robot-owner-name: Inktomi Corporation\r
+robot-owner-url: http://www.inktomi.com/\r
+robot-owner-email: slurp@inktomi.com\r
+robot-status: active\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: slurp\r
+robot-noindex: yes\r
+robot-host: *.inktomi.com\r
+robot-from: yes\r
+robot-useragent: Slurp/2.0\r
+robot-language: C/C++\r
+robot-description: Indexing documents for the HotBot search engine\r
+               (www.hotbot.com), collecting Web statistics\r
+robot-history: Switch from Slurp/1.0 to Slurp/2.0 November 1996\r
+robot-environment: service\r
+modified-date: Fri Feb 28 13:57:43 PST 1997\r
+modified-by: slurp@inktomi.com\r
+\r
+robot-id: smartspider\r
+robot-name: Smart Spider\r
+robot-cover-url: http://www.travel-finder.com\r
+robot-details-url: http://www.engsoftware.com/robots.htm\r
+robot-owner-name: Ken Wadland\r
+robot-owner-url: http://www.engsoftware.com\r
+robot-owner-email: ken@engsoftware.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windows95, windowsNT\r
+robot-availability: data, binary, source\r
+robot-exclusion: Yes\r
+robot-exclusion-useragent: ESI\r
+robot-noindex: Yes\r
+robot-host: 207.16.241.*\r
+robot-from: Yes\r
+robot-useragent: ESISmartSpider/2.0\r
+robot-language: C++\r
+robot-description:  Classifies sites using a Knowledge Base.   Robot collects \r
+        web pages which are then parsed and feed to the Knowledge Base.  The\r
+ Knowledge Base classifies the sites into any of hundreds of     categories\r
+ based on the vocabulary used.  Currently used by:       //www.travel-finder.com\r
+ (Travel and Tourist Info) and   //www.golightway.com (Christian Sites).\r
+ Several options exist to        control whether sites are discovered and/or\r
+ classified fully        automatically, full manually    or somewhere in between.\r
+robot-history: Feb '96 -- Product design begun.  May '96 -- First data\r
+ results         published by Travel-Finder.  Oct '96 -- Generalized and announced\r
+ and a   product for other sites.  Jan '97 -- First data results published by\r
+        GoLightWay.\r
+robot-environment: service, commercial\r
+modified-date: Mon, 13 Jan 1997 10:41:00 EST\r
+modified-by: Ken Wadland\r
+\r
+robot-id: snooper\r
+robot-name: Snooper\r
+robot-cover-url: http://darsun.sit.qc.ca\r
+robot-details-url:\r
+robot-owner-name: Isabelle A. Melnick\r
+robot-owner-url:\r
+robot-owner-email: melnicki@sit.ca\r
+robot-status: part under development and part active\r
+robot-purpose:\r
+robot-type:\r
+robot-platform:\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: snooper\r
+robot-noindex:\r
+robot-host:\r
+robot-from:\r
+robot-useragent: Snooper/b97_01\r
+robot-language:\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:\r
+modified-by:\r
+\r
+robot-id: solbot\r
+robot-name: Solbot\r
+robot-cover-url: http://kvasir.sol.no/\r
+robot-details-url:\r
+robot-owner-name: Frank Tore Johansen\r
+robot-owner-url:\r
+robot-owner-email: ftj@sys.sol.no\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: solbot\r
+robot-noindex: yes\r
+robot-host: robot*.sol.no\r
+robot-from:\r
+robot-useragent: Solbot/1.0 LWP/5.07\r
+robot-language: perl, c\r
+robot-description: Builds data for the Kvasir search service.  Only searches\r
+ sites which ends with one of the following domains: "no", "se", "dk", "is", "fi"robot-history: This robot is the result of a 3 years old late night hack when\r
+ the Verity robot (of that time) was unable to index sites with iso8859\r
+ characters (in URL and other places), and we just _had_ to have something up and going the next day...\r
+robot-environment: service\r
+modified-date: Tue Apr  7 16:25:05 MET DST 1998\r
+modified-by: Frank Tore Johansen <ftj@sys.sol.no>\r
+\r
+robot-id: spanner\r
+robot-name: Spanner\r
+robot-cover-url: http://www.kluge.net/NES/spanner/\r
+robot-details-url: http://www.kluge.net/NES/spanner/\r
+robot-owner-name: Theo Van Dinter\r
+robot-owner-url: http://www.kluge.net/~felicity/\r
+robot-owner-email: felicity@kluge.net\r
+robot-status: development\r
+robot-purpose: indexing,maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Spanner\r
+robot-noindex: yes\r
+robot-host: *.kluge.net\r
+robot-from: yes\r
+robot-useragent: Spanner/1.0 (Linux 2.0.27 i586)\r
+robot-language: perl\r
+robot-description: Used to index/check links on an intranet.\r
+robot-history: Pet project of the author since beginning of 1996.\r
+robot-environment: hobby\r
+modified-date: Mon, 06 Jan 1997 00:00:00 GMT\r
+modified-by: felicity@kluge.net\r
+\r
+robot-id:speedy\r
+robot-name:Speedy Spider\r
+robot-cover-url:http://www.entireweb.com/\r
+robot-details-url:http://www.entireweb.com/speedy.html\r
+robot-owner-name:WorldLight.com AB\r
+robot-owner-url:http://www.worldlight.com\r
+robot-owner-email:speedy@worldlight.com\r
+robot-status:active\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:Windows\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:speedy\r
+robot-noindex:yes\r
+robot-host:router-00.sverige.net, 193.15.210.29, *.entireweb.com,\r
+ *.worldlight.com\r
+robot-from:yes\r
+robot-useragent:Speedy Spider ( http://www.entireweb.com/speedy.html )\r
+robot-language:C, C++\r
+robot-description:Speedy Spider is used to build the database\r
+           for the Entireweb.com search service operated by WorldLight.com\r
+           (part of WorldLight Network).\r
+           The robot runs constantly, and visits sites in a random order.\r
+robot-history:This robot is a part of the highly advanced search engine\r
+ Entireweb.com, that was developed in Halmstad, Sweden during 1998-2000.\r
+robot-environment:service, commercial\r
+modified-date:Mon, 17 July 2000 11:05:03 GMT\r
+modified-by:Marcus Andersson\r
+\r
+robot-id: spider_monkey\r
+robot-name: spider_monkey\r
+robot-cover-url: http://www.mobrien.com/add_site.html\r
+robot-details-url: http://www.mobrien.com/add_site.html\r
+robot-owner-name: MPRM Group Limited\r
+robot-owner-url: http://www.mobrien.com\r
+robot-owner-email: mprm@ionsys.com\r
+robot-status: robot actively in use\r
+robot-purpose: gather content for a free indexing service\r
+robot-type: FDSE robot\r
+robot-platform: unix\r
+robot-availability: bulk data gathered by robot available\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: spider_monkey\r
+robot-noindex: yes\r
+robot-host: snowball.ionsys.com\r
+robot-from: yes\r
+robot-useragent: mouse.house/7.1\r
+robot-language: perl5\r
+robot-description: Robot runs every 30 days for a full index and weekly =\r
+ on a list of accumulated visitor requests\r
+robot-history: This robot is under development and currently active\r
+robot-environment: written as an employee / guest service\r
+modified-date: Mon, 22 May 2000 12:28:52 GMT\r
+modified-by: MPRM Group Limited\r
+\r
+robot-id: spiderbot\r
+robot-name: SpiderBot\r
+robot-cover-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/cover.htm\r
+robot-details-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/details.htm\r
+robot-owner-name: Ignacio Cruzado Nu.o\r
+robot-owner-url: http://pisuerga.inf.ubu.es/lsi/Docencia/TFC/ITIG/icruzadn/icruzadn.htm\r
+robot-owner-email: spidrboticruzado@solaria.emp.ubu.es\r
+robot-status: active\r
+robot-purpose: indexing, mirroring\r
+robot-type: standalone, browser\r
+robot-platform: unix, windows, windows95, windowsNT\r
+robot-availability: source, binary, data\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: SpiderBot/1.0\r
+robot-noindex: yes\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: SpiderBot/1.0\r
+robot-language: C++, Tcl\r
+robot-description: Recovers Web Pages and saves them on your hard disk.  Then it reindexes them.\r
+robot-history: This Robot belongs to Ignacio Cruzado Nu.o End of Studies Thesis "Recuperador p.ginas Web", to get the titulation of "Management Tecnical Informatics Engineer" in the  for the Burgos University in Spain.\r
+robot-environment: research\r
+modified-date: Sun, 27 Jun 1999 09:00:00 GMT\r
+modified-by: Ignacio Cruzado Nu.o\r
+\r
+robot-id:spiderman\r
+robot-name:SpiderMan\r
+robot-cover-url:http://www.comp.nus.edu.sg/~leunghok\r
+robot-details-url:http://www.comp.nus.edu.sg/~leunghok/honproj.html\r
+robot-owner-name:Leung Hok Peng , The School Of Computing Nus , Singapore\r
+robot-owner-url:http://www.comp.nus.edu.sg/~leunghok\r
+robot-owner-email:leunghok@comp.nus.edu.sg\r
+robot-status:development & active\r
+robot-purpose:user searching using IR technique\r
+robot-type:stand alone\r
+robot-platform:Java 1.2\r
+robot-availability:binary&source\r
+robot-exclusion:no\r
+robot-exclusion-useragent:nil\r
+robot-noindex:no\r
+robot-host:NA\r
+robot-from:NA\r
+robot-useragent:SpiderMan 1.0\r
+robot-language:java\r
+robot-description:It is used for any user to search the web given a query string\r
+robot-history:Originated from The Center for Natural Product Research and The\r
+ School of computing National University Of Singapore\r
+robot-environment:research\r
+modified-date:08/08/1999\r
+modified-by:Leung Hok Peng and Dr Hsu Wynne\r
+\r
+robot-id:           spry\r
+robot-name:         Spry Wizard Robot\r
+robot-cover-url:    http://www.spry.com/wizard/index.html\r
+robot-details-url:\r
+robot-owner-name:   spry\r
+robot-owner-url:    ttp://www.spry.com/index.html\r
+robot-owner-email:  info@spry.com\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         wizard.spry.com or tiger.spry.com\r
+robot-from:         no\r
+robot-useragent:    no\r
+robot-language:     \r
+robot-description:  Its purpose is to generate a Resource Discovery database\r
+       Spry is refusing to give any comments about this\r
+       robot\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue Jul 11 09:29:45 GMT 1995\r
+modified-by:\r
+\r
+robot-id: ssearcher\r
+robot-name: Site Searcher\r
+robot-cover-url: www.satacoy.com\r
+robot-details-url: www.satacoy.com\r
+robot-owner-name: Zackware\r
+robot-owner-url: www.satacoy.com\r
+robot-owner-email: zackware@hotmail.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: winows95, windows98, windowsNT\r
+robot-availability: binary\r
+robot-exclusion: no\r
+robot-exclusion-useragent:\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: ssearcher100\r
+robot-language: C++\r
+robot-description: Site Searcher scans web sites for specific file types.\r
+ (JPG, MP3, MPG, etc)\r
+robot-history:  Released 4/4/1999\r
+robot-environment: hobby\r
+modified-date: 04/26/1999\r
+\r
+robot-id: suke\r
+robot-name: Suke\r
+robot-cover-url: http://www.kensaku.org/\r
+robot-details-url: http://www.kensaku.org/\r
+robot-owner-name: Yosuke Kuroda\r
+robot-owner-url: http://www.kensaku.org/yk/\r
+robot-owner-email: robot@kensaku.org\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: FreeBSD3.*\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: suke\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: suke/*.*\r
+robot-language: c\r
+robot-description: This robot visits mainly sites in japan.\r
+robot-history: since 1999\r
+robot-environment: service\r
+\r
+robot-id: sven\r
+robot-name: Sven\r
+robot-cover-url: \r
+robot-details-url: http://marty.weathercity.com/sven/\r
+robot-owner-name: Marty Anstey\r
+robot-owner-url: http://marty.weathercity.com/\r
+robot-owner-email: rhondle@home.com\r
+robot-status: Active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Windows\r
+robot-availability: none\r
+robot-exclusion: no\r
+robot-exclusion-useragent: \r
+robot-noindex: no\r
+robot-host: 24.113.12.29\r
+robot-from: no\r
+robot-useragent:\r
+robot-language: VB5\r
+robot-description: Used to gather sites for netbreach.com. Runs constantly.\r
+robot-history: Developed as an experiment in web indexing.\r
+robot-environment: hobby, service\r
+modified-date: Tue, 3 Mar 1999 08:15:00 PST\r
+modified-by: Marty Anstey\r
+\r
+robot-id: tach_bw\r
+robot-name: TACH Black Widow\r
+robot-cover-url: http://theautochannel.com/~mjenn/bw.html\r
+robot-details-url: http://theautochannel.com/~mjenn/bw-syntax.html\r
+robot-owner-name: Michael Jennings\r
+robot-owner-url: http://www.spd.louisville.edu/~mejenn01/\r
+robot-owner-email: mjenn@theautochannel.com\r
+robot-status: development\r
+robot-purpose: maintenance: link validation\r
+robot-type: standalone\r
+robot-platform: UNIX, Linux\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: tach_bw\r
+robot-noindex: no\r
+robot-host: *.theautochannel.com\r
+robot-from: yes\r
+robot-useragent: Mozilla/3.0 (Black Widow v1.1.0; Linux 2.0.27; Dec 31 1997 12:25:00\r
+robot-language: C/C++\r
+robot-description: Exhaustively recurses a single site to check for broken links\r
+robot-history: Corporate application begun in 1996 for The Auto Channel\r
+robot-environment: commercial\r
+modified-date: Thu, Jan 23 1997 23:09:00 GMT\r
+modified-by: Michael Jennings\r
+\r
+robot-id:tarantula\r
+robot-name: Tarantula\r
+robot-cover-url: http://www.nathan.de/nathan/software.html#TARANTULA\r
+robot-details-url: http://www.nathan.de/\r
+robot-owner-name: Markus Hoevener\r
+robot-owner-url:\r
+robot-owner-email: Markus.Hoevener@evision.de\r
+robot-status: development\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: yes\r
+robot-noindex: yes\r
+robot-host: yes\r
+robot-from: no\r
+robot-useragent: Tarantula/1.0\r
+robot-language: C\r
+robot-description: Tarantual gathers information for german search engine Nathanrobot-history: Started February 1997\r
+robot-environment: service\r
+modified-date: Mon, 29 Dec 1997 15:30:00 GMT\r
+modified-by: Markus Hoevener\r
+\r
+robot-id:           tarspider\r
+robot-name:         tarspider\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Olaf Schreck\r
+robot-owner-url:    http://www.chemie.fu-berlin.de/user/chakl/ChaklHome.html\r
+robot-owner-email:  chakl@fu-berlin.de\r
+robot-status:       \r
+robot-purpose:      mirroring\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         chakl@fu-berlin.de\r
+robot-useragent:    tarspider\r
+robot-language:     \r
+robot-description:  \r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           tcl\r
+robot-name:         Tcl W3 Robot\r
+robot-cover-url:    http://hplyot.obspm.fr/~dl/robo.html\r
+robot-details-url:\r
+robot-owner-name:   Laurent Demailly\r
+robot-owner-url:    http://hplyot.obspm.fr/~dl/\r
+robot-owner-email:  dl@hplyot.obspm.fr\r
+robot-status:       \r
+robot-purpose:      maintenance, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         hplyot.obspm.fr\r
+robot-from:         yes\r
+robot-useragent:    dlw3robot/x.y (in TclX by http://hplyot.obspm.fr/~dl/)\r
+robot-language:     tcl\r
+robot-description:  Its purpose is to validate links, and generate\r
+       statistics.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Tue May 23 17:51:39 1995\r
+modified-by:\r
+\r
+robot-id: techbot\r
+robot-name: TechBOT\r
+robot-cover-url: http://www.techaid.net/\r
+robot-details-url: http://www.echaid.net/TechBOT/\r
+robot-owner-name: TechAID Internet Services\r
+robot-owner-url: http://www.techaid.net/\r
+robot-owner-email: techbot@techaid.net\r
+robot-status: active\r
+robot-purpose:statistics, maintenance\r
+robot-type: standalone\r
+robot-platform: Unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: TechBOT\r
+robot-noindex: yes\r
+robot-host: techaid.net\r
+robot-from: yes\r
+robot-useragent: TechBOT\r
+robot-language: perl5\r
+robot-description: TechBOT is constantly upgraded. Currently he is used for\r
+ Link Validation, Load Time, HTML Validation and much much more.\r
+robot-history: TechBOT started his life as a Page Change Detection robot,\r
+ but has taken on many new and exciting roles.\r
+robot-environment: service\r
+modified-date: Sat, 18 Dec 1998 14:26:00 EST\r
+modified-by: techbot@techaid.net\r
+\r
+robot-id: templeton\r
+robot-name: Templeton\r
+robot-cover-url: http://www.bmtmicro.com/catalog/tton/\r
+robot-details-url: http://www.bmtmicro.com/catalog/tton/\r
+robot-owner-name: Neal Krawetz\r
+robot-owner-url: http://www.cs.tamu.edu/people/nealk/\r
+robot-owner-email: nealk@net66.com\r
+robot-status: active\r
+robot-purpose: mirroring, mapping, automating web applications\r
+robot-type: standalone\r
+robot-platform: OS/2, Linux, SunOS, Solaris\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: templeton\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: Templeton/{version} for {platform}\r
+robot-language: C\r
+robot-description: Templeton is a very configurable robots for mirroring, mapping, and automating applications on retrieved documents.\r
+robot-history: This robot was originally created as a test-of-concept.\r
+robot-environment: service, commercial, research, hobby\r
+modified-date: Sun, 6 Apr 1997 10:00:00 GMT\r
+modified-by: Neal Krawetz\r
+\r
+robot-id: titin\r
+robot-name: TitIn\r
+robot-cover-url: http://www.foi.hr/~dpavlin/titin/\r
+robot-details-url: http://www.foi.hr/~dpavlin/titin/tehnical.htm\r
+robot-owner-name: Dobrica Pavlinusic\r
+robot-owner-url: http://www.foi.hr/~dpavlin/\r
+robot-owner-email: dpavlin@foi.hr\r
+robot-status: development\r
+robot-purpose: indexing, statistics\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: data, source on request\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: titin\r
+robot-noindex: no\r
+robot-host: barok.foi.hr\r
+robot-from: no\r
+robot-useragent: TitIn/0.2\r
+robot-language: perl5, c\r
+robot-description:\r
+        The TitIn is used to index all titles of Web server in\r
+        .hr domain.\r
+robot-history:\r
+        It was done as result of desperate need for central index of\r
+        Croatian web servers in December 1996.\r
+robot-environment: research\r
+modified-date: Thu, 12 Dec 1996 16:06:42 MET\r
+modified-by: Dobrica Pavlinusic\r
+\r
+robot-id:           titan\r
+robot-name:         TITAN\r
+robot-cover-url:    http://isserv.tas.ntt.jp/chisho/titan-e.html\r
+robot-details-url:  http://isserv.tas.ntt.jp/chisho/titan-help/eng/titan-help-e.html\r
+robot-owner-name:   Yoshihiko HAYASHI\r
+robot-owner-url:    \r
+robot-owner-email:  hayashi@nttnly.isl.ntt.jp\r
+robot-status:       active\r
+robot-purpose:      indexing\r
+robot-type:         standalone\r
+robot-platform:     SunOS 4.1.4\r
+robot-availability: no\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         nlptitan.isl.ntt.jp\r
+robot-from:         yes\r
+robot-useragent:    TITAN/0.1\r
+robot-language:     perl 4\r
+robot-description:  Its purpose is to generate a Resource Discovery\r
+    database, and copy document trees. Our primary goal is to develop\r
+    an advanced method for indexing the WWW documents. Uses libwww-perl\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Mon Jun 24 17:20:44 PDT 1996\r
+modified-by:        Yoshihiko HAYASHI\r
+\r
+robot-id:           tkwww\r
+robot-name:         The TkWWW Robot\r
+robot-cover-url:    http://fang.cs.sunyit.edu/Robots/tkwww.html\r
+robot-details-url:\r
+robot-owner-name:   Scott Spetka\r
+robot-owner-url:    http://fang.cs.sunyit.edu/scott/scott.html\r
+robot-owner-email:  scott@cs.sunyit.edu\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  It is designed to search Web neighborhoods to find pages\r
+       that may be logically related. The Robot returns a list of\r
+       links that looks like a hot list. The search can be by key\r
+       word or all links at a distance of one or two hops may be\r
+       returned. The TkWWW Robot is described in a paper presented\r
+       at the WWW94 Conference in Chicago.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: tlspider\r
+robot-name:TLSpider\r
+robot-cover-url: n/a\r
+robot-details-url: n/a\r
+robot-owner-name: topiclink.com\r
+robot-owner-url: topiclink.com\r
+robot-owner-email: tlspider@outtel.com\r
+robot-status: not activated\r
+robot-purpose: to get web sites and add them to the topiclink future directory\r
+robot-type:development: robot under development\r
+robot-platform:linux\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:topiclink\r
+robot-noindex:no\r
+robot-host: tlspider.topiclink.com (not avalible yet)\r
+robot-from:no\r
+robot-useragent:TLSpider/1.1\r
+robot-language:perl5\r
+robot-description:This robot runs 2 days a week getting information for\r
+ TopicLink.com\r
+robot-history:This robot was created to server for the internet search engine\r
+ TopicLink.com\r
+robot-environment:service\r
+modified-date:September,10,1999 17:28 GMT\r
+modified-by: TopicLink Spider Team\r
+\r
+robot-id:           ucsd\r
+robot-name:         UCSD Crawl\r
+robot-cover-url:    http://www.mib.org/~ucsdcrawl\r
+robot-details-url:\r
+robot-owner-name:   Adam Tilghman\r
+robot-owner-url:    http://www.mib.org/~atilghma\r
+robot-owner-email:  atilghma@mib.org\r
+robot-status:\r
+robot-purpose:      indexing, statistics\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         nuthaus.mib.org scilib.ucsd.edu\r
+robot-from:         yes\r
+robot-useragent:    UCSD-Crawler\r
+robot-language:     Perl 4\r
+robot-description:  Should hit ONLY within UC San Diego - trying to count\r
+       servers here.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sat Jan 27 09:21:40 1996.\r
+modified-by:\r
+\r
+robot-id: udmsearch\r
+robot-name: UdmSearch\r
+robot-details-url: http://mysearch.udm.net/\r
+robot-cover-url: http://mysearch.udm.net/\r
+robot-owner-name: Alexander Barkov\r
+robot-owner-url: http://mysearch.udm.net/\r
+robot-owner-email: bar@izhcom.ru\r
+robot-status: active\r
+robot-purpose: indexing, validation\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source, binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: UdmSearch\r
+robot-noindex: yes\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: UdmSearch/2.1.1\r
+robot-language: c\r
+robot-description: UdmSearch is a free web search engine software for\r
+ intranet/small domain internet servers\r
+robot-history: Developed since 1998, origin purpose is a search engine\r
+ over republic of Udmurtia http://search.udm.net\r
+robot-environment: hobby\r
+modified-date: Mon, 6 Sep 1999 10:28:52 GMT\r
+\r
+robot-id:                   urlck\r
+robot-name:                 URL Check\r
+robot-cover-url:            http://www.cutternet.com/products/webcheck.html\r
+robot-details-url:          http://www.cutternet.com/products/urlck.html\r
+robot-owner-name:           Dave Finnegan\r
+robot-owner-url:            http://www.cutternet.com\r
+robot-owner-email:          dave@cutternet.com\r
+robot-status:               active\r
+robot-purpose:              maintenance\r
+robot-type:                 standalone\r
+robot-platform:             unix\r
+robot-availability:         binary\r
+robot-exclusion:            yes\r
+robot-exclusion-useragent:  urlck\r
+robot-noindex:              no\r
+robot-host:                 *\r
+robot-from:                 yes\r
+robot-useragent:            urlck/1.2.3\r
+robot-language:             c\r
+robot-description:          The robot is used to manage, maintain, and modify\r
+                            web sites.  It builds a database detailing the\r
+                            site, builds HTML reports describing the site, and\r
+                            can be used to up-load pages to the site or to\r
+                            modify existing pages and URLs within the site.  It\r
+                            can also be used to mirror whole or partial sites.\r
+                            It supports HTTP, File, FTP, and Mailto schemes.\r
+robot-history:              Originally designed to validate URLs.\r
+robot-environment:          commercial\r
+modified-date:              July 9, 1997\r
+modified-by:                Dave Finnegan\r
+\r
+robot-id: us\r
+robot-name: URL Spider Pro\r
+robot-cover-url: http://www.innerprise.net\r
+robot-details-url: http://www.innerprise.net/us.htm\r
+robot-owner-name: Innerprise\r
+robot-owner-url: http://www.innerprise.net\r
+robot-owner-email: greg@innerprise.net\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Windows9x/NT\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: *\r
+robot-noindex: yes\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: URL Spider Pro\r
+robot-language: delphi\r
+robot-description: Used for building a database of web pages.\r
+robot-history: Project started July 1998.\r
+robot-environment: commercial\r
+modified-date: Mon, 12 Jul 1999 17:50:30 GMT\r
+modified-by: Innerprise\r
+\r
+robot-id: valkyrie\r
+robot-name: Valkyrie\r
+robot-cover-url: http://kichijiro.c.u-tokyo.ac.jp/odin/\r
+robot-details-url: http://kichijiro.c.u-tokyo.ac.jp/odin/robot.html\r
+robot-owner-name: Masanori Harada\r
+robot-owner-url: http://www.graco.c.u-tokyo.ac.jp/~harada/\r
+robot-owner-email: harada@graco.c.u-tokyo.ac.jp\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Valkyrie libwww-perl\r
+robot-noindex: no\r
+robot-host: *.c.u-tokyo.ac.jp\r
+robot-from: yes\r
+robot-useragent: Valkyrie/1.0 libwww-perl/0.40\r
+robot-language: perl4\r
+robot-description: used to collect resources from Japanese Web sites for ODIN search engine.\r
+robot-history: This robot has been used since Oct. 1995 for author's research.\r
+robot-environment: service research\r
+modified-date: Thu Mar 20 19:09:56 JST 1997\r
+modified-by: harada@graco.c.u-tokyo.ac.jp\r
+\r
+robot-id: victoria\r
+robot-name: Victoria\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Adrian Howard\r
+robot-owner-url:\r
+robot-owner-email: adrianh@oneworld.co.uk\r
+robot-status: development\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Victoria\r
+robot-noindex: yes\r
+robot-host:\r
+robot-from:\r
+robot-useragent: Victoria/1.0\r
+robot-language: perl,c\r
+robot-description: Victoria is part of a groupware produced\r
+ by Victoria Real Ltd. (voice: +44 [0]1273 774469,\r
+ fax: +44 [0]1273 779960 email: victoria@pavilion.co.uk).\r
+ Victoria is used to monitor changes in W3 documents,\r
+ both intranet and internet based.\r
+ Contact Victoria Real for more information.\r
+robot-history:\r
+robot-environment: commercial\r
+modified-date: Fri, 22 Nov 1996 16:45 GMT\r
+modified-by: victoria@pavilion.co.uk\r
+\r
+robot-id:           visionsearch\r
+robot-name:         vision-search\r
+robot-cover-url:    http://www.ius.cs.cmu.edu/cgi-bin/vision-search\r
+robot-details-url:\r
+robot-owner-name:   Henry A. Rowley\r
+robot-owner-url:    http://www.cs.cmu.edu/~har\r
+robot-owner-email:  har@cs.cmu.edu\r
+robot-status:\r
+robot-purpose:      indexing.\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         dylan.ius.cs.cmu.edu\r
+robot-from:         no\r
+robot-useragent:    vision-search/3.0'\r
+robot-language:     Perl 5\r
+robot-description:  Intended to be an index of computer vision pages, containing\r
+       all pages within <em>n</em> links (for some small\r
+       <em>n</em>) of the Vision Home Page\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Fri Mar  8 16:03:04 1996\r
+modified-by:\r
+\r
+robot-id: voyager\r
+robot-name: Voyager\r
+robot-cover-url: http://www.lisa.co.jp/voyager/\r
+robot-details-url:\r
+robot-owner-name: Voyager Staff\r
+robot-owner-url: http://www.lisa.co.jp/voyager/\r
+robot-owner-email: voyager@lisa.co.jp\r
+robot-status: development\r
+robot-purpose: indexing, maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Voyager \r
+robot-noindex: no\r
+robot-host: *.lisa.co.jp\r
+robot-from: yes\r
+robot-useragent: Voyager/0.0\r
+robot-language: perl5 \r
+robot-description: This robot is used to build the database for the\r
+                   Lisa Search service.  The robot manually launch  \r
+                   and visits sites in a random order.\r
+robot-history:\r
+robot-environment: service\r
+modified-date: Mon, 30 Nov 1998 08:00:00 GMT\r
+modified-by: Hideyuki Ezaki\r
+\r
+robot-id: vwbot\r
+robot-name: VWbot\r
+robot-cover-url: http://vancouver-webpages.com/VWbot/\r
+robot-details-url: http://vancouver-webpages.com/VWbot/aboutK.shtml\r
+robot-owner-name: Andrew Daviel\r
+robot-owner-url:  http://vancouver-webpages.com/~admin/\r
+robot-owner-email: andrew@vancouver-webpages.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: VWbot_K\r
+robot-noindex: yes\r
+robot-host: vancouver-webpages.com\r
+robot-from: yes\r
+robot-useragent: VWbot_K/4.2\r
+robot-language: perl4\r
+robot-description: Used to index BC sites for the searchBC database. Runs daily.\r
+robot-history: Originally written fall 1995. Actively maintained.\r
+robot-environment: service commercial research\r
+modified-date: Tue, 4 Mar 1997 20:00:00 GMT\r
+modified-by: Andrew Daviel\r
+\r
+robot-id:             w3index\r
+robot-name:           The NWI Robot\r
+robot-cover-url:            http://www.ub2.lu.se/NNC/projects/NWI/the_nwi_robot.html\r
+robot-owner-name:     Sigfrid Lundberg, Lund university, Sweden\r
+robot-owner-url:      http://nwi.ub2.lu.se/~siglun\r
+robot-owner-email:    siglun@munin.ub2.lu.se\r
+robot-status:         active\r
+robot-purpose:        discovery,statistics\r
+robot-type:           standalone\r
+robot-platform:       UNIX\r
+robot-availability:   none (at the moment)\r
+robot-exclusion:      yes\r
+robot-noindex:        No\r
+robot-host:   nwi.ub2.lu.se, mars.dtv.dk and a few others\r
+robot-from:   yes\r
+robot-useragent:      w3index\r
+robot-language:       perl5\r
+robot-description:    A resource discovery robot, used primarily for\r
+       the indexing of the Scandinavian Web\r
+robot-history:        It is about a year or so old.\r
+       Written by Anders Ard\96, Mattias Borrell, \r
+       HÂkan Ard\96 and myself.\r
+robot-environment: service,research\r
+modified-date:        Wed Jun 26 13:58:04 MET DST 1996\r
+modified-by:          Sigfrid Lundberg\r
+\r
+robot-id:           w3m2\r
+robot-name:         W3M2\r
+robot-cover-url:    http://tronche.com/W3M2\r
+robot-details-url:\r
+robot-owner-name:   Christophe Tronche\r
+robot-owner-url:    http://tronche.com/\r
+robot-owner-email:  tronche@lri.fr\r
+robot-status:       \r
+robot-purpose:      indexing, maintenance, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         yes\r
+robot-useragent:    W3M2/x.xxx\r
+robot-language:     Perl 4, Perl 5, and C++\r
+robot-description:  to generate a Resource Discovery database, validate links,\r
+       validate HTML, and generate statistics\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Fri May 5 17:48:48 1995\r
+modified-by:\r
+\r
+robot-id:           wanderer\r
+robot-name:         the World Wide Web Wanderer\r
+robot-cover-url:    http://www.mit.edu/people/mkgray/net/\r
+robot-details-url:\r
+robot-owner-name:   Matthew Gray\r
+robot-owner-url:    http://www.mit.edu:8001/people/mkgray/mkgray.html\r
+robot-owner-email:  mkgray@mit.edu\r
+robot-status:       active\r
+robot-purpose:      statistics\r
+robot-type:         standalone\r
+robot-platform:     unix\r
+robot-availability: data\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *.mit.edu\r
+robot-from:         \r
+robot-useragent:    WWWWanderer v3.0\r
+robot-language:     perl4\r
+robot-description:  Run initially in June 1993, its aim is to measure\r
+                    the growth in the web.\r
+robot-history:      \r
+robot-environment:  research\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:webbandit\r
+robot-name:WebBandit Web Spider\r
+robot-cover-url:http://pw2.netcom.com/~wooger/\r
+robot-details-url:http://pw2.netcom.com/~wooger/\r
+robot-owner-name:Jerry Walsh\r
+robot-owner-url:http://pw2.netcom.com/~wooger/\r
+robot-owner-email:wooger@ix.netcom.com\r
+robot-status:active\r
+robot-purpose:Resource Gathering / Server Benchmarking\r
+robot-type:standalone application\r
+robot-platform:Intel - windows95\r
+robot-availability:source, binary\r
+robot-exclusion:no\r
+robot-exclusion-useragent:WebBandit/1.0\r
+robot-noindex:no\r
+robot-host:ix.netcom.com\r
+robot-from:no\r
+robot-useragent:WebBandit/1.0\r
+robot-language:C++\r
+robot-description:multithreaded, hyperlink-following,\r
+ resource finding webspider \r
+robot-history:Inspired by reading of\r
+ Internet Programming book by Jamsa/Cope \r
+robot-environment:commercial \r
+modified-date:11/21/96\r
+modified-by:Jerry Walsh\r
+\r
+robot-id: webcatcher\r
+robot-name: WebCatcher\r
+robot-cover-url: http://oscar.lang.nagoya-u.ac.jp\r
+robot-details-url:\r
+robot-owner-name: Reiji SUZUKI\r
+robot-owner-url: http://oscar.lang.nagoya-u.ac.jp/~reiji/index.html\r
+robot-owner-email: reiji@infonia.ne.jp\r
+robot-owner-name2: Masatoshi SUGIURA\r
+robot-owner-url2: http://oscar.lang.nagoya-u.ac.jp/~sugiura/index.html\r
+robot-owner-email2: sugiura@lang.nagoya-u.ac.jp\r
+robot-status: development\r
+robot-purpose: indexing  \r
+robot-type: standalone   \r
+robot-platform: unix, windows, mac\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: webcatcher\r
+robot-noindex: no\r
+robot-host: oscar.lang.nagoya-u.ac.jp\r
+robot-from: no\r
+robot-useragent: WebCatcher/1.0\r
+robot-language: perl5\r
+robot-description: WebCatcher gathers web pages\r
+                   that Japanese collage students want to visit.\r
+robot-history: This robot finds its roots in a research project \r
+           at Nagoya University in 1998.\r
+robot-environment: research\r
+modified-date: Fri, 16 Oct 1998 17:28:52 JST\r
+modified-by: "Reiji SUZUKI" <reiji@infonia.ne.jp>\r
+\r
+robot-id:           webcopy\r
+robot-name:         WebCopy\r
+robot-cover-url:    http://www.inf.utfsm.cl/~vparada/webcopy.html\r
+robot-details-url:\r
+robot-owner-name:   Victor Parada\r
+robot-owner-url:    http://www.inf.utfsm.cl/~vparada/\r
+robot-owner-email:  vparada@inf.utfsm.cl\r
+robot-status:       \r
+robot-purpose:      mirroring\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         *\r
+robot-from:         no\r
+robot-useragent:    WebCopy/(version)\r
+robot-language:     perl 4 or perl 5\r
+robot-description:  Its purpose is to perform mirroring. WebCopy can retrieve\r
+       files recursively using HTTP protocol.It can be used as a\r
+       delayed browser or as a mirroring tool. It cannot jump from\r
+       one site to another.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Sun Jul 2 15:27:04 1995\r
+modified-by:\r
+\r
+robot-id:           webfetcher\r
+robot-name:         webfetcher\r
+robot-cover-url:    http://www.ontv.com/\r
+robot-details-url:\r
+robot-owner-name:\r
+robot-owner-url:    http://www.ontv.com/\r
+robot-owner-email:  webfetch@ontv.com\r
+robot-status:\r
+robot-purpose:      mirroring\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         *\r
+robot-from:         yes\r
+robot-useragent:    WebFetcher/0.8, \r
+robot-language:     C++\r
+robot-description:  don't wait! OnTV's WebFetcher mirrors whole sites down to\r
+       your hard disk on a TV-like schedule. Catch w3\r
+       documentation. Catch discovery.com without waiting! A fully\r
+       operational web robot for NT/95 today, most UNIX soon, MAC\r
+       tomorrow.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Sat Jan 27 10:31:43 1996.\r
+modified-by:\r
+\r
+robot-id:           webfoot\r
+robot-name:         The Webfoot Robot\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Lee McLoughlin\r
+robot-owner-url:    http://web.doc.ic.ac.uk/f?/lmjm\r
+robot-owner-email:  L.McLoughlin@doc.ic.ac.uk\r
+robot-status:       \r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         phoenix.doc.ic.ac.uk\r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  \r
+robot-history:      First spotted in Mid February 1994\r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           weblayers\r
+robot-name:         weblayers\r
+robot-cover-url:    http://www.univ-paris8.fr/~loic/weblayers/\r
+robot-details-url:\r
+robot-owner-name:   Loic Dachary\r
+robot-owner-url:    http://www.univ-paris8.fr/~loic/\r
+robot-owner-email:  loic@afp.com\r
+robot-status:       \r
+robot-purpose:      maintainance\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    weblayers/0.0\r
+robot-language:     perl 5\r
+robot-description:  Its purpose is to validate, cache and maintain links. It is\r
+       designed to maintain the cache generated by the emacs emacs\r
+       w3 mode (N*tscape replacement) and to support annotated\r
+       documents (keep them in sync with the original document via\r
+       diff/patch).\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Fri Jun 23 16:30:42 FRE 1995\r
+modified-by:\r
+\r
+robot-id:           weblinker\r
+robot-name:         WebLinker\r
+robot-cover-url:    http://www.cern.ch/WebLinker/\r
+robot-details-url:\r
+robot-owner-name:   James Casey\r
+robot-owner-url:    http://www.maths.tcd.ie/hyplan/jcasey/jcasey.html\r
+robot-owner-email:  jcasey@maths.tcd.ie\r
+robot-status:       \r
+robot-purpose:      maintenance\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      \r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    WebLinker/0.0 libwww-perl/0.1\r
+robot-language:     \r
+robot-description:  it traverses a section of web, doing URN->URL conversion.\r
+        It will be used as a post-processing tool on documents created\r
+       by automatic converters such as LaTeX2HTML or WebMaker. At\r
+       the moment it works at full speed, but is restricted to\r
+       localsites. External GETs will be added, but these will be\r
+       running slowly. WebLinker is meant to be run locally, so if\r
+       you see it elsewhere let the author know!\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id:           webmirror\r
+robot-name:         WebMirror\r
+robot-cover-url:    http://www.winsite.com/pc/win95/netutil/wbmiror1.zip\r
+robot-details-url:\r
+robot-owner-name:   Sui Fung Chan\r
+robot-owner-url:    http://www.geocities.com/NapaVally/1208\r
+robot-owner-email:  sfchan@mailhost.net\r
+robot-status:\r
+robot-purpose:      mirroring\r
+robot-type:         standalone\r
+robot-platform:     Windows95\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         no\r
+robot-useragent:    no\r
+robot-language:     C++\r
+robot-description:  It download web pages to hard drive for off-line\r
+       browsing.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon Apr 29 08:52:25 1996.\r
+modified-by:\r
+\r
+robot-id: webmoose\r
+robot-name: The Web Moose\r
+robot-cover-url: \r
+robot-details-url: http://www.nwlink.com/~mikeblas/webmoose/\r
+robot-owner-name: Mike Blaszczak\r
+robot-owner-url: http://www.nwlink.com/~mikeblas/\r
+robot-owner-email: mikeblas@nwlink.com\r
+robot-status: development\r
+robot-purpose: statistics, maintenance\r
+robot-type: standalone\r
+robot-platform: Windows NT\r
+robot-availability: data\r
+robot-exclusion: no\r
+robot-exclusion-useragent: WebMoose\r
+robot-noindex: no\r
+robot-host: msn.com\r
+robot-from: no\r
+robot-useragent: WebMoose/0.0.0000\r
+robot-language: C++\r
+robot-description: This robot collects statistics and verifies links.\r
+ It \r
+ builds an graph of its visit path.\r
+robot-history: This robot is under development.\r
+ It will support ROBOTS.TXT soon.\r
+robot-environment: hobby\r
+modified-date: Fri, 30 Aug 1996 00:00:00 GMT\r
+modified-by: Mike Blaszczak\r
+\r
+robot-id:webquest\r
+robot-name:WebQuest\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name:TaeYoung Choi\r
+robot-owner-url:http://www.cosmocyber.co.kr:8080/~cty/index.html\r
+robot-owner-email:cty@cosmonet.co.kr\r
+robot-status:development\r
+robot-purpose:indexing\r
+robot-type:standalone\r
+robot-platform:unix\r
+robot-availability:none\r
+robot-exclusion:yes\r
+robot-exclusion-useragent:webquest\r
+robot-noindex:no\r
+robot-host:210.121.146.2, 210.113.104.1, 210.113.104.2\r
+robot-from:yes\r
+robot-useragent:WebQuest/1.0\r
+robot-language:perl5\r
+robot-description:WebQuest will be used to build the databases for various web\r
+ search service sites which will be in service by early 1998. Until the end of\r
+ Jan. 1998, WebQuest will run from time to time. Since then, it will run\r
+ daily(for few hours and very slowly).\r
+robot-history:The developent of WebQuest was motivated by the need for a\r
+ customized robot in various projects of COSMO Information & Communication Co.,\r
+ Ltd. in Korea.\r
+robot-environment:service  \r
+modified-date:Tue, 30 Dec 1997 09:27:20 GMT\r
+modified-by:TaeYoung Choi\r
+\r
+robot-id: webreader\r
+robot-name: Digimarc MarcSpider\r
+robot-cover-url: http://www.digimarc.com/prod_fam.html\r
+robot-details-url: http://www.digimarc.com/prod_fam.html\r
+robot-owner-name: Digimarc Corporation\r
+robot-owner-url: http://www.digimarc.com\r
+robot-owner-email: wmreader@digimarc.com\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: windowsNT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host: 206.102.3.*\r
+robot-from: yes\r
+robot-useragent: Digimarc WebReader/1.2\r
+robot-language: c++\r
+robot-description: Examines image files for watermarks. \r
+ In order to not waste internet bandwidth with yet\r
+ another crawler, we have contracted with one of the major crawlers/seach\r
+ engines to provide us with a list of specific URLs of interest to us.  If an\r
+ URL is to an image, we may read the image, but we do not crawl to any other\r
+ URLs.  If an URL is to a page of interest (ususally due to CGI), then we\r
+ access the page to get the image URLs from it, but we do not crawl to any\r
+ other pages.\r
+robot-history: First operation in August 1997.\r
+robot-environment: service\r
+modified-date: Mon, 20 Oct 1997 16:44:29 GMT\r
+modified-by: Brian MacIntosh\r
+\r
+robot-id: webreaper\r
+robot-name: WebReaper\r
+robot-cover-url: http://www.otway.com/webreaper\r
+robot-details-url:\r
+robot-owner-name: Mark Otway\r
+robot-owner-url: http://www.otway.com\r
+robot-owner-email: webreaper@otway.com\r
+robot-status: active\r
+robot-purpose: indexing/offline browsing\r
+robot-type: standalone\r
+robot-platform: windows95, windowsNT\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: webreaper\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: no\r
+robot-useragent: WebReaper [webreaper@otway.com]\r
+robot-language: c++\r
+robot-description: Freeware app which downloads and saves sites locally for\r
+ offline browsing.\r
+robot-history: Written for personal use, and then distributed to the public\r
+ as freeware.\r
+robot-environment: hobby\r
+modified-date: Thu, 25 Mar 1999 15:00:00 GMT\r
+modified-by: Mark Otway\r
+\r
+robot-id:                       webs\r
+robot-name:                     webs\r
+robot-cover-url:                http://webdew.rnet.or.jp/\r
+robot-details-url:              http://webdew.rnet.or.jp/service/shank/NAVI/SEARCH/info2.html#robot\r
+robot-owner-name:               Recruit Co.Ltd,\r
+robot-owner-url:                \r
+robot-owner-email:              dew@wwwadmin.rnet.or.jp\r
+robot-status:                   active\r
+robot-purpose:                  statistics\r
+robot-type:                     standalone\r
+robot-platform:                 unix\r
+robot-availability:             none\r
+robot-exclusion:                yes\r
+robot-exclusion-useragent:      webs\r
+robot-noindex:                  no\r
+robot-host:                     lemon.recruit.co.jp\r
+robot-from:                     yes\r
+robot-useragent:                webs@recruit.co.jp\r
+robot-language:                 perl5\r
+robot-description:              The webs robot is used to gather WWW servers'\r
+                                top pages last modified date data. Collected\r
+                                statistics reflects the priority of WWW server\r
+                                data collection for webdew indexing service.\r
+                                Indexing in webdew is done by manually.\r
+robot-history:\r
+robot-environment:              service\r
+modified-date:                  Fri,  6 Sep 1996 10:00:00 GMT\r
+modified-by:\r
+\r
+robot-id:           websnarf\r
+robot-name:         Websnarf\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Charlie Stross\r
+robot-owner-url:    \r
+robot-owner-email:  charles@fma.com\r
+robot-status:       retired\r
+robot-purpose:      \r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  \r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: webspider\r
+robot-name: WebSpider\r
+robot-details-url: http://www.csi.uottawa.ca/~u610468\r
+robot-cover-url:\r
+robot-owner-name: Nicolas Fraiji\r
+robot-owner-email: u610468@csi.uottawa.ca\r
+robot-status: active, under further enhancement.\r
+robot-purpose: maintenance, link diagnostics\r
+robot-type: standalone\r
+robot-exclusion: yes\r
+robot-noindex: no\r
+robot-exclusion-useragent: webspider\r
+robot-host: several\r
+robot-from: Yes\r
+robot-language: Perl4\r
+robot-history: developped as a course project at the University of\r
+     Ottawa, Canada in 1996.\r
+robot-environment: Educational use and Research\r
+\r
+robot-id:           webvac\r
+robot-name:         WebVac\r
+robot-cover-url:    http://www.federated.com/~tim/webvac.html\r
+robot-details-url:\r
+robot-owner-name:   Tim Jensen\r
+robot-owner-url:    http://www.federated.com/~tim\r
+robot-owner-email:  tim@federated.com\r
+robot-status:\r
+robot-purpose:      mirroring\r
+robot-type:         standalone\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         no\r
+robot-useragent:    webvac/1.0\r
+robot-language:     C++\r
+robot-description:\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Mon May 13 03:19:17 1996.\r
+modified-by:\r
+\r
+robot-id:           webwalk\r
+robot-name:         webwalk\r
+robot-cover-url:    \r
+robot-details-url:\r
+robot-owner-name:   Rich Testardi\r
+robot-owner-url:    \r
+robot-owner-email:  \r
+robot-status:       retired\r
+robot-purpose:      indexing, maintentance, mirroring, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    yes\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         yes\r
+robot-useragent:    webwalk\r
+robot-language:     c\r
+robot-description:  Its purpose is to generate a Resource Discovery database,\r
+       validate links, validate HTML, perform mirroring, copy\r
+       document trees, and generate statistics. Webwalk is easily\r
+       extensible to perform virtually any maintenance function\r
+       which involves web traversal, in a way much like the '-exec'\r
+       option of the find(1) command. Webwalk is usually used\r
+       behind the HP firewall\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Wed Nov 15 09:51:59 PST 1995\r
+modified-by:\r
+\r
+robot-id: webwalker\r
+robot-name: WebWalker\r
+robot-cover-url:\r
+robot-details-url:\r
+robot-owner-name: Fah-Chun Cheong\r
+robot-owner-url: http://www.cs.berkeley.edu/~fccheong/\r
+robot-owner-email: fccheong@cs.berkeley.edu\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: WebWalker\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: WebWalker/1.10\r
+robot-language: perl4\r
+robot-description: WebWalker performs WWW traversal for individual\r
+                   sites and tests for the integrity of all hyperlinks\r
+                   to external sites. \r
+robot-history: A Web maintenance robot for expository purposes,\r
+               first published in the book "Internet Agents: Spiders,\r
+               Wanderers, Brokers, and Bots" by the robot's author.\r
+robot-environment: hobby\r
+modified-date: Thu, 25 Jul 1996 16:00:52 PDT\r
+modified-by: Fah-Chun Cheong\r
+\r
+robot-id:           webwatch\r
+robot-name:         WebWatch\r
+robot-cover-url:    http://www.specter.com/users/janos/specter\r
+robot-details-url:\r
+robot-owner-name:   Joseph Janos\r
+robot-owner-url:    http://www.specter.com/users/janos/specter\r
+robot-owner-email:  janos@specter.com\r
+robot-status:       \r
+robot-purpose:      maintainance, statistics\r
+robot-type:         standalone\r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    no\r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         \r
+robot-from:         no\r
+robot-useragent:    WebWatch\r
+robot-language:     c++\r
+robot-description:  Its purpose is to validate HTML, and generate statistics.\r
+       Check URLs modified since a given date.\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      Wed Jul 26 13:36:32 1995\r
+modified-by:\r
+\r
+robot-id: wget\r
+robot-name: Wget\r
+robot-cover-url: ftp://gnjilux.cc.fer.hr/pub/unix/util/wget/\r
+robot-details-url:\r
+robot-owner-name: Hrvoje Niksic\r
+robot-owner-url:\r
+robot-owner-email: hniksic@srce.hr\r
+robot-status: development\r
+robot-purpose: mirroring, maintenance\r
+robot-type: standalone\r
+robot-platform: unix\r
+robot-availability: source\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: wget\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: Wget/1.4.0\r
+robot-language: C\r
+robot-description:\r
+  Wget is a utility for retrieving files using HTTP and FTP protocols.\r
+  It works non-interactively, and can retrieve HTML pages and FTP\r
+  trees recursively.  It can be used for mirroring Web pages and FTP\r
+  sites, or for traversing the Web gathering data.  It is run by the\r
+  end user or archive maintainer.\r
+robot-history:\r
+robot-environment: hobby, research\r
+modified-date: Mon, 11 Nov 1996 06:00:44 MET\r
+modified-by: Hrvoje Niksic\r
+\r
+robot-id: whowhere\r
+robot-name: WhoWhere Robot\r
+robot-cover-url: http://www.whowhere.com\r
+robot-details-url: \r
+robot-owner-name: Rupesh Kapoor\r
+robot-owner-url: \r
+robot-owner-email: rupesh@whowhere.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: Sun Unix\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: whowhere\r
+robot-noindex: no\r
+robot-host: spica.whowhere.com\r
+robot-from: no\r
+robot-useragent: \r
+robot-language: C/Perl\r
+robot-description: Gathers data for email directory from web pages\r
+robot-history: \r
+robot-environment: commercial\r
+modified-date: \r
+modified-by:\r
+\r
+robot-id:           wmir\r
+robot-name:         w3mir\r
+robot-cover-url:    http://www.ifi.uio.no/~janl/w3mir.html\r
+robot-details-url:\r
+robot-owner-name:   Nicolai Langfeldt\r
+robot-owner-url:    http://www.ifi.uio.no/~janl/w3mir.html\r
+robot-owner-email:  w3mir-core@usit.uio.no\r
+robot-status:\r
+robot-purpose:      mirroring.\r
+robot-type:         standalone\r
+robot-platform:     UNIX, WindowsNT\r
+robot-availability:\r
+robot-exclusion:    no.\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:\r
+robot-from:         yes\r
+robot-useragent:    w3mir\r
+robot-language:     Perl\r
+robot-description:  W3mir uses the If-Modified-Since HTTP header and recurses\r
+       only the directory and subdirectories of it's start\r
+       document.  Known to work on U*ixes and Windows\r
+       NT.\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Wed Apr 24 13:23:42 1996.\r
+modified-by:\r
+\r
+robot-id: wolp\r
+robot-name: WebStolperer\r
+robot-cover-url: http://www.suchfibel.de/maschinisten\r
+robot-details-url: http://www.suchfibel.de/maschinisten/text/werkzeuge.htm (in German)\r
+robot-owner-name: Marius Dahler\r
+robot-owner-url: http://www.suchfibel.de/maschinisten\r
+robot-owner-email: mda@suchfibel.de\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix, NT\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: WOLP\r
+robot-noindex: yes\r
+robot-host: www.suchfibel.de\r
+robot-from: yes\r
+robot-useragent: WOLP/1.0 mda/1.0\r
+robot-language: perl5\r
+robot-description: The robot gathers information about specified\r
+ web-projects and generates knowledge bases in Javascript or an own\r
+ format\r
+robot-environment: hobby\r
+modified-date: 22 Jul 1998\r
+modified-by: Marius Dahler\r
+\r
+robot-id:           wombat\r
+robot-name:         The Web Wombat \r
+robot-cover-url:    http://www.intercom.com.au/wombat/\r
+robot-details-url:\r
+robot-owner-name:   Internet Communications\r
+robot-owner-url:    http://www.intercom.com.au/\r
+robot-owner-email:  phill@intercom.com.au\r
+robot-status:\r
+robot-purpose:      indexing, statistics.\r
+robot-type:\r
+robot-platform:\r
+robot-availability:\r
+robot-exclusion:    no.\r
+robot-exclusion-useragent:\r
+robot-noindex:\r
+robot-host:         qwerty.intercom.com.au\r
+robot-from:         no\r
+robot-useragent:    no\r
+robot-language:     IBM Rexx/VisualAge C++ under OS/2.\r
+robot-description:  The robot is the basis of the Web Wombat search engine\r
+       (Australian/New Zealand content ONLY).\r
+robot-history:\r
+robot-environment:\r
+modified-date:      Thu Feb 29 00:39:49 1996.\r
+modified-by:\r
+\r
+robot-id:           worm\r
+robot-name:         The World Wide Web Worm\r
+robot-cover-url:    http://www.cs.colorado.edu/home/mcbryan/WWWW.html\r
+robot-details-url:\r
+robot-owner-name:   Oliver McBryan\r
+robot-owner-url:    http://www.cs.colorado.edu/home/mcbryan/Home.html\r
+robot-owner-email:  mcbryan@piper.cs.colorado.edu\r
+robot-status:       \r
+robot-purpose:      indexing\r
+robot-type:         \r
+robot-platform:     \r
+robot-availability: \r
+robot-exclusion:    \r
+robot-exclusion-useragent:\r
+robot-noindex:      no\r
+robot-host:         piper.cs.colorado.edu\r
+robot-from:         \r
+robot-useragent:    \r
+robot-language:     \r
+robot-description:  indexing robot, actually has quite flexible search\r
+       options\r
+robot-history:      \r
+robot-environment:\r
+modified-date:      \r
+modified-by:\r
+\r
+robot-id: wwwc\r
+robot-name: WWWC Ver 0.2.5\r
+robot-cover-url: http://www.kinet.or.jp/naka/tomo/wwwc.html\r
+robot-details-url:\r
+robot-owner-name: Tomoaki Nakashima.\r
+robot-owner-url: http://www.kinet.or.jp/naka/tomo/\r
+robot-owner-email: naka@kinet.or.jp\r
+robot-status: active\r
+robot-purpose: maintenance\r
+robot-type: standalone\r
+robot-platform: windows, windows95, windowsNT\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: WWWC\r
+robot-noindex: no\r
+robot-host:\r
+robot-from: yes\r
+robot-useragent: WWWC/0.25 (Win95)\r
+robot-language: c\r
+robot-description:\r
+robot-history: 1997\r
+robot-environment: hobby\r
+modified-date: Tuesday, 18 Feb 1997 06:02:47 GMT\r
+modified-by: Tomoaki Nakashima (naka@kinet.or.jp)\r
+\r
+robot-id: wz101\r
+robot-name: WebZinger\r
+robot-details-url: http://www.imaginon.com/wzindex.html\r
+robot-cover-url: http://www.imaginon.com\r
+robot-owner-name: ImaginOn, Inc\r
+robot-owner-url: http://www.imaginon.com\r
+robot-owner-email: info@imaginon.com\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: windows95, windowsNT 4, mac, solaris, unix\r
+robot-availability: binary\r
+robot-exclusion: no\r
+robot-exclusion-useragent: none\r
+robot-noindex: no\r
+robot-host: http://www.imaginon.com/wzindex.html *\r
+robot-from: no\r
+robot-useragent: none\r
+robot-language: java\r
+robot-description: commercial Web Bot that accepts plain text queries, uses\r
+ webcrawler, lycos or excite to get URLs, then visits sites.  If the user's\r
+ filter parameters are met, downloads one picture and a paragraph of test.\r
+ Playsback slide show format of one text paragraph plus image from each site.\r
+robot-history: developed by ImaginOn in 1996 and 1997\r
+robot-environment: commercial\r
+modified-date: Wed, 11 Sep 1997 02:00:00 GMT\r
+modified-by: schwartz@imaginon.com\r
+\r
+robot-id: xget\r
+robot-name: XGET\r
+robot-cover-url: http://www2.117.ne.jp/~moremore/x68000/soft/soft.html\r
+robot-details-url: http://www2.117.ne.jp/~moremore/x68000/soft/soft.html\r
+robot-owner-name: Hiroyuki Shigenaga\r
+robot-owner-url: http://www2.117.ne.jp/~moremore/\r
+robot-owner-email: shige@mh1.117.ne.jp\r
+robot-status: active\r
+robot-purpose: mirroring\r
+robot-type: standalone\r
+robot-platform: X68000, X68030\r
+robot-availability: binary\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: XGET\r
+robot-noindex: no\r
+robot-host: *\r
+robot-from: yes\r
+robot-useragent: XGET/0.7\r
+robot-language: c\r
+robot-description: Its purpose is to retrieve updated files.It is run by the end userrobot-history: 1997\r
+robot-environment: hobby\r
+modified-date: Fri, 07 May 1998 17:00:00 GMT\r
+modified-by: Hiroyuki Shigenaga\r
+\r
+robot-id: Nederland.zoek\r
+robot-name: Nederland.zoek\r
+robot-cover-url: http://www.nederland.net/\r
+robot-details-url: \r
+robot-owner-name: System Operator Nederland.net\r
+robot-owner-url: \r
+robot-owner-email: zoek@nederland.net\r
+robot-status: active\r
+robot-purpose: indexing\r
+robot-type: standalone\r
+robot-platform: unix (Linux)\r
+robot-availability: none\r
+robot-exclusion: yes\r
+robot-exclusion-useragent: Nederland.zoek\r
+robot-noindex: no\r
+robot-host: 193.67.110.*\r
+robot-from: yes\r
+robot-useragent: Nederland.zoek\r
+robot-language: c\r
+robot-description: This robot indexes all .nl sites for the search-engine of Nederland.net\r
+robot-history: Developed at Computel Standby in Apeldoorn, The Netherlands\r
+robot-environment: service\r
+modified-date: Sat, 8 Feb 1997 01:10:00 CET\r
+modified-by: Sander Steffann <sander@nederland.net>\r
+\r
+\r
+\r
diff --git a/tools/common2combined.pl b/tools/common2combined.pl
new file mode 100644 (file)
index 0000000..41fe741
--- /dev/null
@@ -0,0 +1,280 @@
+#!/usr/bin/perl
+# With some other Unix Os, first line may be
+#!/usr/local/bin/perl
+# With Apache for Windows and ActiverPerl, first line may be
+#!c:/program files/activeperl/bin/perl
+#-Description-------------------------------------------
+# Convert a common log file into a combined
+# This tool is part of AWStats log analyzer but can be use
+# alone for any other log analyzer.
+# See COPYING.TXT file about AWStats GNU General Public License.
+#-------------------------------------------------------
+#use diagnostics;
+#use strict;
+
+
+#-------------------------------------------------------
+# Defines
+#-------------------------------------------------------
+
+# ---------- Init variables (Variable $TmpHashxxx are not initialized) --------
+($ParamFile)=();
+# ---------- Init hash arrays --------
+%monthnum = ();
+
+$VERSION="1.0 (build 1)";
+$NbOfLinesForBenchmark=5000;
+
+$NewReferer="http://www.tf1.fr/home.html";
+$NewAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)";
+
+
+
+#-------------------------------------------------------
+# Functions
+#-------------------------------------------------------
+sub error {
+       print "Error: $_[0].\n";
+    exit 1;
+}
+
+sub debug {
+       my $level = $_[1] || 1;
+       if ($Debug >= $level) { 
+               my $debugstring = $_[0];
+               if ($ENV{"GATEWAY_INTERFACE"} ne "") { $debugstring =~ s/^ /&nbsp&nbsp /; $debugstring .= "<br>"; }
+               print "DEBUG $level - ".time." : $debugstring\n";
+               }
+       0;
+}
+
+
+
+#-------------------------------------------------------
+# MAIN
+#-------------------------------------------------------
+$QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
+if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
+if ($QueryString =~ /dnslookup/i) { $DNSLookup=1; }
+if ($QueryString =~ /showsteps/i) { $ShowSteps=1; }
+($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
+
+my $cpt=1;
+for (0..@ARGV-1) {
+       if ($ARGV[$_] =~ /^-/) { last; }
+       $ParamFile{$cpt}=$ARGV[$_];
+       $cpt++;
+}
+if (scalar keys %ParamFile == 0) {
+       print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
+       print "$PROG allows you to convert a common log file into a combined.\n";
+       print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software\n";
+       print "distributed with a GNU General Public License (See COPYING.txt file).\n";
+       print "$PROG is part of AWStats but can be used alone as a log merger before\n";
+       print "using any other log analyzer.\n";
+       print "\n";
+       print "Usage:\n";
+       print "  $PROG.$Extension oldfile1 > newfile\n";
+       print "Options:\n";
+       print "  -showsteps  to add benchmark informations every $NbOfLinesForBenchmark lines processed\n";
+       print "\n";
+       print "New versions and FAQ at http://awstats.sourceforge.net\n";
+       exit 0;
+}
+
+# Get current time
+$nowtime=time;
+($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear) = localtime($nowtime);
+if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; }
+$nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//;
+if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; }
+if ($nowday < 10) { $nowday = "0$nowday"; }
+if ($nowhour < 10) { $nowhour = "0$nowhour"; }
+if ($nowmin < 10) { $nowmin = "0$nowmin"; }
+if ($nowsec < 10) { $nowsec = "0$nowsec"; }
+# Get tomorrow time (will be used to discard some record with corrupted date (future date))
+($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime($nowtime+86400);
+if ($tomorrowyear < 100) { $tomorrowyear+=2000; } else { $tomorrowyear+=1900; }
+$tomorrowsmallyear=$tomorrowyear;$tomorrowsmallyear =~ s/^..//;
+if (++$tomorrowmonth < 10) { $tomorrowmonth = "0$tomorrowmonth"; }
+if ($tomorrowday < 10) { $tomorrowday = "0$tomorrowday"; }
+if ($tomorrowhour < 10) { $tomorrowhour = "0$tomorrowhour"; }
+if ($tomorrowmin < 10) { $tomorrowmin = "0$tomorrowmin"; }
+if ($tomorrowsec < 10) { $tomorrowsec = "0$tomorrowsec"; }
+$timetomorrow=$tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec;       
+
+# Init other parameters
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { $DirCgi=""; }
+if (($DirCgi ne "") && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= "/"; }
+if ($DirData eq "" || $DirData eq ".") { $DirData=$DIR; }      # If not defined or choosed to "." value then DirData is current dir
+if ($DirData eq "")  { $DirData="."; }                                         # If current dir not defined then we put it to "."
+$DirData =~ s/\/$//;
+if ($DNSLookup) { use Socket; }
+$NewDNSLookup=$DNSLookup;
+%monthlib =  ( "01","$message[60]","02","$message[61]","03","$message[62]","04","$message[63]","05","$message[64]","06","$message[65]","07","$message[66]","08","$message[67]","09","$message[68]","10","$message[69]","11","$message[70]","12","$message[71]" );
+# monthnum must be in english because it's used to translate log date in apache log files which are always in english
+%monthnum =  ( "Jan","01","jan","01","Feb","02","feb","02","Mar","03","mar","03","Apr","04","apr","04","May","05","may","05","Jun","06","jun","06","Jul","07","jul","07","Aug","08","aug","08","Sep","09","sep","09","Oct","10","oct","10","Nov","11","nov","11","Dec","12","dec","12" );
+
+#------------------------------------------
+# PROCESSING CURRENT LOG(s)
+#------------------------------------------
+%LogFileToDo=(); %NowNewLinePhase=(); %NbOfLinesRead=(); %NbOfLinesCorrupted=();
+$NbOfNewLinesProcessed=0; $NbOfNewLinesCorrupted=0;
+$logfilechosen=0;
+$starttime=time();
+
+# Define the LogFileToDo list
+my $cpt=1;
+foreach $key (keys %ParamFile) {
+       if ($ParamFile{$key} !~ /\*/ && $ParamFile{$key} !~ /\?/) {
+               &debug("Log file $ParamFile{$key} is added to LogFileToDo.");
+               $LogFileToDo{$cpt}=$ParamFile{$key};
+               $cpt++;
+       }
+       else {
+               my $DirFile=$ParamFile{$key}; $DirFile =~ s/([^\/\\]*)$//;
+               $ParamFile{$key} = $1;
+               if ($DirFile eq "") { $DirFile = "."; }
+               $ParamFile{$key} =~ s/\./\\\./g;
+               $ParamFile{$key} =~ s/\*/\.\*/g;
+               $ParamFile{$key} =~ s/\?/\./g;
+               &debug("Search for file \"$ParamFile{$key}\" into \"$DirFile\"");
+               opendir(DIR,"$DirFile");
+               @filearray = sort readdir DIR;
+               close DIR;
+               foreach $i (0..$#filearray) {
+                       if ("$filearray[$i]" =~ /^$ParamFile{$key}$/ && "$filearray[$i]" ne "." && "$filearray[$i]" ne "..") {
+                               &debug("Log file $filearray[$i] is added to LogFileToDo.");
+                               $LogFileToDo{$cpt}="$DirFile/$filearray[$i]";
+                               $cpt++;
+                       }
+               }
+       }
+}
+
+# If no files to process
+if (scalar keys %LogFileToDo == 0) {
+       error("No input log file found");
+}
+
+# Open all log files
+&debug("Start of processing ".(scalar keys %LogFileToDo)." log file(s)");
+foreach $logfilenb (keys %LogFileToDo) {
+       &debug("Open log file number $logfilenb: \"$LogFileToDo{$logfilenb}\"");
+       open("LOG$logfilenb","$LogFileToDo{$logfilenb}") || error("Couldn't open log file \"$LogFileToDo{$logfilenb}\" : $!");
+}
+
+while (1 == 1)
+{
+       # BEGIN Read new record (for each log file or only for log file with record just processed)
+       #------------------------------------------------------------------------------------------
+       foreach $logfilenb (keys %LogFileToDo) {
+               if (($logfilechosen == 0) || ($logfilechosen == $logfilenb)) {
+                       &debug("Search next record in file number $logfilenb",3);
+                       # Read chosen log file until we found a record with good date or reaching end of file
+                       while (1 == 1) {
+                               my $LOG="LOG$logfilenb"; $_=<$LOG>;     # Read new line
+                               if (! $_) {                                                     # No more records in log file number $logfilenb
+                                       &debug(" No more records in file number $logfilenb",2);
+                                       delete $LogFileToDo{$logfilenb};
+                                       last; }                                                                                 # We have all the new records for each other files, we stop here
+
+                               chomp $_; s/\r//;
+
+                               if (/^#/) { next; }                                                                     # Ignore comment lines (ISS writes such comments)
+                               if (/^!!/) { next; }                                                            # Ignore comment lines (Webstar writes such comments)
+                               if (/^$/) { next; }                                                                     # Ignore blank lines (With ISS: happens sometimes, with Apache: possible when editing log file)
+
+                               $NbOfLinesRead{$logfilenb}++;
+
+                               # Check filters
+                               #----------------------------------------------------------------------
+                               # Split DD/Month/YYYY:HH:MM:SS or YYYY-MM-DD HH:MM:SS or MM/DD/YY\tHH:MM:SS
+                               $linerecord{$logfilenb}=$_; 
+                               my $year=0; my $month=0; my $day=0; my $hour=0; my $minute=0; my $second=0;
+                               if ($_ =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) { $year=$1; $month=$2; $day=$3; $hour=$4; $minute=$5; $second=$6; }
+                               if ($_ =~ /\[(\d\d)\/(.*)\/(\d\d\d\d):(\d\d):(\d\d):(\d\d) /) { $year=$3; $month=$2; $day=$1; $hour=$4; $minute=$5; $second=$6; }
+                               if ($monthnum{$month}) { $month=$monthnum{$month}; }    # Change lib month in num month if necessary
+
+                               # Create $timeconnexion like YYYYMMDDHHMMSS
+                               $timeconnexion{$logfilenb}=int("$year$month$day$hour$minute$second");
+                               if ($timeconnexion{$logfilenb}<10000000000000) {
+                                       &debug(" This record is corrupted (no date found)",3);
+                                       $corrupted{$logfilenb}++;
+                                       next;
+                               }
+                               &debug(" This is next record for file $logfilenb : timeconnexion=$timeconnexion{$logfilenb}",3);
+                               last;
+                       }
+               }
+       }
+       # END Read new lines for each log file. After this, following var are filled
+       # $timeconnexion{$logfilenb}
+       
+       # We choose wich record of wich log file to process
+       &debug("Choose of wich record of which log file to process",3);
+       $logfilechosen=-1;
+       my $timeref="99999999999999";
+       foreach my $logfilenb (keys %LogFileToDo) {
+               &debug(" timeconnexion for file $logfilenb is $timeconnexion{$logfilenb}",4);
+               if ($timeconnexion{$logfilenb} < $timeref) { $logfilechosen=$logfilenb; $timeref=$timeconnexion{$logfilenb} }
+       }
+       if ($logfilechosen <= 0) { last; }                                                              # No more record to process
+       # Record is chosen
+       &debug(" We choosed to analyze record of file number $logfilechosen",3);
+       &debug(" Record is $linerecord{$logfilechosen}",3);
+                       
+       # Record is approved. We found a new line to process in file number $logfilechosen
+       #----------------------------------------------------------------------------------
+       $NbOfNewLinesProcessed++;
+       if (($ShowSteps) && ($NbOfNewLinesProcessed % $NbOfLinesForBenchmark == 0)) { print STDERR "$NbOfNewLinesProcessed lines processed (".(time()-$starttime)." seconds, ".($NbOfNewLinesProcessed/(time()-$starttime))." lines/seconds)\n"; }
+
+       # Analyze: IP-address
+       #--------------------
+       if ($NewDNSLookup) {
+               $_ =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
+               $Host=$1;
+               if ($Host ne "") {
+                       $new=$TmpHashDNSLookup{$Host};  # TmpHashDNSLookup is a temporary hash table to increase speed
+                       if (!$new) {                                    # if $new undefined, $Host not yet resolved
+                               &debug(" Start of reverse DNS lookup for $Host",4);
+                               if ($MyDNSTable{$Host}) {
+                                       &debug(" End of reverse DNS lookup, found resolution of $Host in local MyDNSTable",4);
+                                       $new = $MyDNSTable{$Host};
+                               }
+                               else {
+                                       if (&SkipDNSLookup($Host)) {
+                                               &debug(" (Skipping this DNS lookup at user request.)",4);
+                                       }
+                                       else {
+                                               $new=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);       # This is very slow, may took 20 seconds
+                                       }
+                                       &debug(" End of reverse DNS lookup for $Host",4);
+                               }
+                               if ($new eq "") { $new="ip"; }
+                               $TmpHashDNSLookup{$Host}=$new;
+                       }
+                       # Here $Host is still xxx.xxx.xxx.xxx and $new is name or "ip" if reverse failed)
+                       if ($new ne "ip") { $_ =~ s/$Host/$new/; }
+           }
+               else {
+                       &debug(" No IP adresses found in this record.",3);
+               }
+       }
+
+       # Print record if ready
+       print "$linerecord{$logfilechosen} \"$NewReferer\" \"$NewAgent\"\n";
+
+       # End of processing all new records.
+}
+&debug("End of processing log file(s)");
+
+
+# Close all log files
+foreach $logfilenb (keys %LogFileToDo) {
+       &debug("Close log file number $logfilenb");
+       close("LOG$logfilenb");
+}
+
+
+0;     # Do not remove this line
\ No newline at end of file
diff --git a/tools/logresolvemerge.pl b/tools/logresolvemerge.pl
new file mode 100644 (file)
index 0000000..29e0a0d
--- /dev/null
@@ -0,0 +1,307 @@
+#!/usr/bin/perl
+# With some other Unix Os, first line may be
+#!/usr/local/bin/perl
+# With Apache for Windows and ActiverPerl, first line may be
+#!c:/program files/activeperl/bin/perl
+#-Description-------------------------------------------
+# Merge several log files into one and replace all IP addresses
+# with resolved DNS host name.
+# This tool is part of AWStats log analyzer but can be use
+# alone for any other log analyzer.
+# See COPYING.TXT file about AWStats GNU General Public License.
+#-------------------------------------------------------
+#use diagnostics;
+#use strict;
+
+
+#-------------------------------------------------------
+# Defines
+#-------------------------------------------------------
+
+# ---------- Init variables (Variable $TmpHashxxx are not initialized) --------
+($ParamFile)=();
+# ---------- Init arrays --------
+@wordlist = ();
+# ---------- Init hash arrays --------
+%monthnum = ();
+
+$VERSION="1.0 (build 2)";
+$LookupPool=10;
+$NbOfLinesForBenchmark=5000;
+
+# These table is used to make fast reverse DNS lookup for particular IP adresses. You can add your own IP adresses resolutions.
+%MyDNSTable = (
+"256.256.256.1", "myworkstation1",
+"256.256.256.2", "myworkstation2"
+);
+
+
+
+#-------------------------------------------------------
+# Functions
+#-------------------------------------------------------
+sub error {
+       print "Error: $_[0].\n";
+    exit 1;
+}
+
+sub debug {
+       my $level = $_[1] || 1;
+       if ($Debug >= $level) { 
+               my $debugstring = $_[0];
+               if ($ENV{"GATEWAY_INTERFACE"} ne "") { $debugstring =~ s/^ /&nbsp&nbsp /; $debugstring .= "<br>"; }
+               print "DEBUG $level - ".time." : $debugstring\n";
+               }
+       0;
+}
+
+sub SkipDNSLookup {
+       foreach my $match (@SkipDNSLookupFor) { if ($_[0] =~ /$match/i) { return 1; } }
+       0; # Not in @SkipDNSLookupFor
+}
+
+
+
+#-------------------------------------------------------
+# MAIN
+#-------------------------------------------------------
+$QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
+if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
+if ($QueryString =~ /dnslookup/i) { $DNSLookup=1; }
+if ($QueryString =~ /showsteps/i) { $ShowSteps=1; }
+($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
+
+my $cpt=1;
+for (0..@ARGV-1) {
+       if ($ARGV[$_] =~ /^-/) { last; }
+       $ParamFile{$cpt}=$ARGV[$_];
+       $cpt++;
+}
+if (scalar keys %ParamFile == 0) {
+       print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
+       print "$PROG allows you to merge several log files into one, sorting all\n";
+       print "records on date. It also makes a fast reverse DNS lookup to replace all IP\n";
+       print "addresses into host names in resulting log file.\n";
+       print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software\n";
+       print "distributed with a GNU General Public License (See COPYING.txt file).\n";
+       print "$PROG is part of AWStats but can be used alone as a log merger before\n";
+       print "using any other log analyzer.\n";
+       print "\n";
+       print "Usage:\n";
+       print "  $PROG.$Extension file1 ... filen [-dnslookup]\n";
+       print "  $PROG.$Extension *.* [-dnslookup]\n";
+       print "Options:\n";
+       print "  -dnslookup  make a reverse DNS lookup on IP adresses (not done by default).\n";
+       print "  -showsteps  to add benchmark informations every $NbOfLinesForBenchmark lines processed\n";
+       print "\n";
+       print "This runs $PROG in command line to open one or several web server log\n";
+       print "files to merge them (sorted on date) and/or to make a reverse DNS lookup.\n";
+       print "The result log file is sent on standard output.\n";
+       print "\n";
+       print "Now supports/detects:\n";
+       print "  Automatic detection of log format\n";
+       print "  !!! Multithreaded reverse DNS lookup ($LookupPool parallel request) not yet developped\n";
+       print "  No need of extra Perl library\n";
+       print "New versions and FAQ at http://awstats.sourceforge.net\n";
+       exit 0;
+}
+
+# Get current time
+$nowtime=time;
+($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear) = localtime($nowtime);
+if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; }
+$nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//;
+if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; }
+if ($nowday < 10) { $nowday = "0$nowday"; }
+if ($nowhour < 10) { $nowhour = "0$nowhour"; }
+if ($nowmin < 10) { $nowmin = "0$nowmin"; }
+if ($nowsec < 10) { $nowsec = "0$nowsec"; }
+# Get tomorrow time (will be used to discard some record with corrupted date (future date))
+($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime($nowtime+86400);
+if ($tomorrowyear < 100) { $tomorrowyear+=2000; } else { $tomorrowyear+=1900; }
+$tomorrowsmallyear=$tomorrowyear;$tomorrowsmallyear =~ s/^..//;
+if (++$tomorrowmonth < 10) { $tomorrowmonth = "0$tomorrowmonth"; }
+if ($tomorrowday < 10) { $tomorrowday = "0$tomorrowday"; }
+if ($tomorrowhour < 10) { $tomorrowhour = "0$tomorrowhour"; }
+if ($tomorrowmin < 10) { $tomorrowmin = "0$tomorrowmin"; }
+if ($tomorrowsec < 10) { $tomorrowsec = "0$tomorrowsec"; }
+$timetomorrow=$tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec;       
+
+# Init other parameters
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { $DirCgi=""; }
+if (($DirCgi ne "") && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= "/"; }
+if ($DirData eq "" || $DirData eq ".") { $DirData=$DIR; }      # If not defined or choosed to "." value then DirData is current dir
+if ($DirData eq "")  { $DirData="."; }                                         # If current dir not defined then we put it to "."
+$DirData =~ s/\/$//;
+if ($DNSLookup) { use Socket; }
+$NewDNSLookup=$DNSLookup;
+%monthlib =  ( "01","$message[60]","02","$message[61]","03","$message[62]","04","$message[63]","05","$message[64]","06","$message[65]","07","$message[66]","08","$message[67]","09","$message[68]","10","$message[69]","11","$message[70]","12","$message[71]" );
+# monthnum must be in english because it's used to translate log date in apache log files which are always in english
+%monthnum =  ( "Jan","01","jan","01","Feb","02","feb","02","Mar","03","mar","03","Apr","04","apr","04","May","05","may","05","Jun","06","jun","06","Jul","07","jul","07","Aug","08","aug","08","Sep","09","sep","09","Oct","10","oct","10","Nov","11","nov","11","Dec","12","dec","12" );
+
+#------------------------------------------
+# PROCESSING CURRENT LOG(s)
+#------------------------------------------
+%LogFileToDo=(); %NowNewLinePhase=(); %NbOfLinesRead=(); %NbOfLinesCorrupted=();
+$NbOfNewLinesProcessed=0; $NbOfNewLinesCorrupted=0;
+$logfilechosen=0;
+$starttime=time();
+
+# Define the LogFileToDo list
+my $cpt=1;
+foreach $key (keys %ParamFile) {
+       if ($ParamFile{$key} !~ /\*/ && $ParamFile{$key} !~ /\?/) {
+               &debug("Log file $ParamFile{$key} is added to LogFileToDo.");
+               $LogFileToDo{$cpt}=$ParamFile{$key};
+               $cpt++;
+       }
+       else {
+               my $DirFile=$ParamFile{$key}; $DirFile =~ s/([^\/\\]*)$//;
+               $ParamFile{$key} = $1;
+               if ($DirFile eq "") { $DirFile = "."; }
+               $ParamFile{$key} =~ s/\./\\\./g;
+               $ParamFile{$key} =~ s/\*/\.\*/g;
+               $ParamFile{$key} =~ s/\?/\./g;
+               &debug("Search for file \"$ParamFile{$key}\" into \"$DirFile\"");
+               opendir(DIR,"$DirFile");
+               @filearray = sort readdir DIR;
+               close DIR;
+               foreach $i (0..$#filearray) {
+                       if ("$filearray[$i]" =~ /^$ParamFile{$key}$/ && "$filearray[$i]" ne "." && "$filearray[$i]" ne "..") {
+                               &debug("Log file $filearray[$i] is added to LogFileToDo.");
+                               $LogFileToDo{$cpt}="$DirFile/$filearray[$i]";
+                               $cpt++;
+                       }
+               }
+       }
+}
+
+# If no files to process
+if (scalar keys %LogFileToDo == 0) {
+       error("No input log file found");
+}
+
+# Open all log files
+&debug("Start of processing ".(scalar keys %LogFileToDo)." log file(s)");
+foreach $logfilenb (keys %LogFileToDo) {
+       &debug("Open log file number $logfilenb: \"$LogFileToDo{$logfilenb}\"");
+       open("LOG$logfilenb","$LogFileToDo{$logfilenb}") || error("Couldn't open log file \"$LogFileToDo{$logfilenb}\" : $!");
+}
+
+while (1 == 1)
+{
+       # BEGIN Read new record (for each log file or only for log file with record just processed)
+       #------------------------------------------------------------------------------------------
+       foreach $logfilenb (keys %LogFileToDo) {
+               if (($logfilechosen == 0) || ($logfilechosen == $logfilenb)) {
+                       &debug("Search next record in file number $logfilenb",3);
+                       # Read chosen log file until we found a record with good date or reaching end of file
+                       while (1 == 1) {
+                               my $LOG="LOG$logfilenb"; $_=<$LOG>;     # Read new line
+                               if (! $_) {                                                     # No more records in log file number $logfilenb
+                                       &debug(" No more records in file number $logfilenb",2);
+                                       delete $LogFileToDo{$logfilenb};
+                                       last; }                                                                                 # We have all the new records for each other files, we stop here
+
+                               chomp $_; s/\r//;
+
+                               if (/^#/) { next; }                                                                     # Ignore comment lines (ISS writes such comments)
+                               if (/^!!/) { next; }                                                            # Ignore comment lines (Webstar writes such comments)
+                               if (/^$/) { next; }                                                                     # Ignore blank lines (With ISS: happens sometimes, with Apache: possible when editing log file)
+
+                               $NbOfLinesRead{$logfilenb}++;
+
+                               # Check filters
+                               #----------------------------------------------------------------------
+                               # Split DD/Month/YYYY:HH:MM:SS or YYYY-MM-DD HH:MM:SS or MM/DD/YY\tHH:MM:SS
+                               $linerecord{$logfilenb}=$_; 
+                               my $year=0; my $month=0; my $day=0; my $hour=0; my $minute=0; my $second=0;
+                               if ($_ =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/) { $year=$1; $month=$2; $day=$3; $hour=$4; $minute=$5; $second=$6; }
+                               if ($_ =~ /\[(\d\d)\/(.*)\/(\d\d\d\d):(\d\d):(\d\d):(\d\d) /) { $year=$3; $month=$2; $day=$1; $hour=$4; $minute=$5; $second=$6; }
+                               if ($monthnum{$month}) { $month=$monthnum{$month}; }    # Change lib month in num month if necessary
+
+                               # Create $timeconnexion like YYYYMMDDHHMMSS
+                               $timeconnexion{$logfilenb}=int("$year$month$day$hour$minute$second");
+                               if ($timeconnexion{$logfilenb}<10000000000000) {
+                                       &debug(" This record is corrupted (no date found)",3);
+                                       $corrupted{$logfilenb}++;
+                                       next;
+                               }
+                               &debug(" This is next record for file $logfilenb : timeconnexion=$timeconnexion{$logfilenb}",3);
+                               last;
+                       }
+               }
+       }
+       # END Read new lines for each log file. After this, following var are filled
+       # $timeconnexion{$logfilenb}
+       
+       # We choose wich record of wich log file to process
+       &debug("Choose of wich record of which log file to process",3);
+       $logfilechosen=-1;
+       my $timeref="99999999999999";
+       foreach my $logfilenb (keys %LogFileToDo) {
+               &debug(" timeconnexion for file $logfilenb is $timeconnexion{$logfilenb}",4);
+               if ($timeconnexion{$logfilenb} < $timeref) { $logfilechosen=$logfilenb; $timeref=$timeconnexion{$logfilenb} }
+       }
+       if ($logfilechosen <= 0) { last; }                                                              # No more record to process
+       # Record is chosen
+       &debug(" We choosed to analyze record of file number $logfilechosen",3);
+       &debug(" Record is $linerecord{$logfilechosen}",3);
+                       
+       # Record is approved. We found a new line to process in file number $logfilechosen
+       #----------------------------------------------------------------------------------
+       $NbOfNewLinesProcessed++;
+       if (($ShowSteps) && ($NbOfNewLinesProcessed % $NbOfLinesForBenchmark == 0)) { print STDERR "$NbOfNewLinesProcessed lines processed (".(time()-$starttime)." seconds, ".($NbOfNewLinesProcessed/(time()-$starttime))." lines/seconds)\n"; }
+
+       # Analyze: IP-address
+       #--------------------
+       if ($NewDNSLookup) {
+               $_ =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
+               $Host=$1;
+               if ($Host ne "") {
+                       $new=$TmpHashDNSLookup{$Host};  # TmpHashDNSLookup is a temporary hash table to increase speed
+                       if (!$new) {                                    # if $new undefined, $Host not yet resolved
+                               &debug(" Start of reverse DNS lookup for $Host",4);
+                               if ($MyDNSTable{$Host}) {
+                                       &debug(" End of reverse DNS lookup, found resolution of $Host in local MyDNSTable",4);
+                                       $new = $MyDNSTable{$Host};
+                               }
+                               else {
+                                       if (&SkipDNSLookup($Host)) {
+                                               &debug(" (Skipping this DNS lookup at user request.)",4);
+                                       }
+                                       else {
+                                               $new=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);       # This is very slow, may took 20 seconds
+                                       }
+                                       &debug(" End of reverse DNS lookup for $Host",4);
+                               }
+                               if ($new eq "") { $new="ip"; }
+                               $TmpHashDNSLookup{$Host}=$new;
+                       }
+                       # Here $Host is still xxx.xxx.xxx.xxx and $new is name or "ip" if reverse failed)
+                       if ($new ne "ip") { $_ =~ s/$Host/$new/; }
+           }
+               else {
+                       &debug(" No IP adresses found in this record.",3);
+               }
+       }
+
+       # Print record if ready
+       
+
+               print "$linerecord{$logfilechosen}\n";
+
+
+       # End of processing all new records.
+}
+&debug("End of processing log file(s)");
+
+
+# Close all log files
+foreach $logfilenb (keys %LogFileToDo) {
+       &debug("Close log file number $logfilenb");
+       close("LOG$logfilenb");
+}
+
+
+0;     # Do not remove this line
\ No newline at end of file
index d516f87ae41376d60054ae5e708af4ae062d56ef..c4148dcd7be8e2ff1cecf5be490d94358b984c9d 100644 (file)
-# AWStats configure file 
+# AWStats configure file
 #------------------------------------------------------------------------
 # Copy this file into awstats.www.myserver.mydomain.conf or awstats.conf
-# and edit this new file to setup AWStats (See README.txt for full setup
-# instructions).
-# This config file must be in:
-# - /etc/opt/awstats, /etc/awstats or /etc for unix/linux users.
-# - same directory than awstats.pl for Windows and other OS.
+# and edit this new file to setup AWStats (This config file must be in
+# same directory than awstats.pl).
 # If you don't understand what is a parameter, keep default value.
 #------------------------------------------------------------------------
 
 
-# MAIN SETUP SECTION (Required to make AWStats working)
+# Main setup section (Required to make AWStats working)
 #------------------------------------------------------------------------
 
-# "LogFile" contains the web server logfile to analyze.
-# You can use a full path or relative path from awstats.pl directory.
-# Example: "/var/log/apache/access.log"
+# "LogFile" contains the web server logfile name to analyze.
+# You can use a full path...
+# Example: "/var/logs/httpd/myserver_access.log"
+# or relative path from awstats.pl directory...
 # Example: "../logs/mycombinedlog.log"
 #
-# You can also use tags in this filename if you need a dynamic file name
-# depending on date or time (Replacement is made by AWStats at the beginning
-# of its execution). This is available tags :
-#  %YYYY-n  is replaced with 4 digits year we were n hours ago
-#  %YY-n    is replaced with 2 digits year we were n hours ago
-#  %MM-n    is replaced with month we were n hours ago
-#  %DD-n    is replaced with day we were n hours ago
-#  %HH-n    is replaced with hour we were n hours ago
-#  %WM-n    is replaced with the week number in month (1-5)
-#  You can use 0 for n if you need current year, month, day, hour...
-# Example: "/var/log/access_log.%YYYY-24%MM-24%DD-24.log"
-# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-0%MM-0%DD-0.log"
+# You can also use %YY %MM %DD or %HH in file name, AWStats will
+# replace those tags with current year month day or hour.
+# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY%MM%DD.log"
 #
 LogFile="/var/log/httpd/mylog.log"
 
-# Put here your log format (Must agree with your web server. See setup
-# instructions in README.txt to know how to configure your web server to have
-# the required log format).
-# Possible values: 1,2,3,4,5 or "your_own_personalised_log_format"
-# 1 = Apache native combined log format (NCSA combined/XLF/ELF log format)
-# 2 = IIS log format (W3C log format)
+# Put here your log format (Must agree with your web server. See in README.txt
+# to know how to setup your web server to have required log format).
+# Possible values: 1, 2, 3 or "your_own_personalised_log_format"
+# 1 = Apache native combined log format (NCSA combined log format)
+# 2 = IIS extended W3C log format (see readme.txt for IIS required setup)
 # 3 = Webstar native log format
-# 4 = Apache or Squid native common log format (NCSA common log format)
-#     With LogFormat=4, some features (browsers, os, keywords...) can't work.
-# 5 = ISA server standard log format
-# "your_own_personalised_log_format" = If your log is a personalised format,
-#     you must use the following syntax keys to define the log format string:
-#     %host             Host client name or IP adress
-#     %logname          Authenticated login/user used on protected pages
-#     %time1            Date and time with format: [dd/mmm/yyyy:hh:mm:ss +0000]
-#     %time2            Date and time with format: yyyy-mm-dd hh-mm-ss
-#     %methodurl        Method and URL with format: "GET /index.html HTTP/x.x"
-#     %methodurlnoprot  Method and URL with format: "GET /index.html"
-#     %method           Method with format: GET
-#     %url              URL only with format: /index.html
-#     %query            Query string (used by URLWithQuery option)
-#     %code             HTTP return code with format: 999
-#     %bytesd           Size of document in bytes
-#     %refererquot      Referer page with format: "http://from.com/from.htm"
-#     %referer          Referer page with format: http://from.com/from.htm
-#     %uaquot           User agent with format: "Mozilla/4.0 (compatible, ...)"
-#     %ua               User agent with format: Mozilla/4.0_(compatible...)
-#     %gzipres          Mod_gzip compression results: STATUS:STATUS
-#     %gzipin           Mod_gzip compression input bytes: In:num_bytes        
-#     %gzipout          Mod_gzip compression output bytes & percentage: Out:num_bytes:%
-#     If your log format has some fields not included in this list, use
-#     %other            Means another field
-#
-# Examples for Apache combined logs (this two examples are equivalent):
+# 
+# If you use a predefined log format (LogFormat=1 or LogFormat=2, see in
+# README.txt to setup your server to create log files with required format).
+# If your log is a personalised format, you must use AWStats log syntax rules
+# to define your log format.
+# This is AWStats rules required in your log format string:
+# %host                Host client name or IP adress
+# %time1               Date and time with format [dd/mmm/yyyy:hh:mm:ss +0000]
+# %time2               Date and time with format yyyy-mm-dd hh-mm-ss
+# %methodurl   Method and URL with format "GET /index.html HTTP/x.x"
+# %method              Method with format GET
+# %url                 URL only with format /index.html
+# %code                        HTTP return code with format xxx
+# %bytesd              Size of document in bytes
+# %refererquot Referer page with format "http://from.com/from.htm"
+# %referer             Referer page with format http://from.com/from.htm
+# %uaquot              User agent with format "Mozilla/4.0 (compatible, ...)"
+# %ua                  User agent with format Mozilla/4.0_(compatible...)
+# If your log format has some fields not included in this list, use
+# %other               Means another field
+#
+# Examples for Apache (this two examples are equivalent):
 # LogFormat = 1
-# LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
+# LogFormat = "%host %other %other %time1 %methodurl %code %bytesd %refererquot %uaquot"
 # Examples for IIS (this two examples are equivalent):
 # LogFormat = 2
-# LogFormat = "%time2 %host %logname %method %url %code %bytesd %other %ua %referer"
+# LogFormat = "%time2 %host %other %method %url %code %bytesd %other %ua %referer"
 #
 LogFormat=1
 
-# If you want to have informations on domains/countries visitors, you must ask
-# AWStats to make reverse DNS lookup (if not already done in your log file).
-# If you set DNSLookup to 1, don't forget that reverse DNS lookup decrease
-# seriously AWStats time processing.
-# If you keep DNSLookup to 0, all hosts will be reported by the IP addresses
-# and not by the full hostname of visitors. Domain/Country chart will also 
-# report all visitors from a domain/country "Unknown".
-# Possible values: 0 or 1
-# Default: 0
+# If hostnames are already resolved in your logfile, set "DNSLookup" to 0 will
+# increase performances.
+# Possible values: 1 or 0
+# Default: 1
 # 
-DNSLookup=0
+DNSLookup=1
 
 # Set "DirData" to a directory where you want AWStats to save its database and
 # working files into.
-# Warning: If you want to be able to use the "AllowToUpdateStatsFromBrowser"
-# feature (see next parameter), you need write permissions by webserver user
-# on this directory.
-# Example: "/var/cache/awstats"
+# Warning: If you want to be able to use the "UpdateStatsFromBrowser" feature
+# (see next parameter), you need write permissions by webserver user on this
+# directory.
+# Example: "/tmp"
 # Example: "../data"
-# Example: "C:/awstats_data_dir"
+# Example: "C:/awstats_working_dir"
 # Default: "."          (means same directory as awstats.pl)
 #
 DirData="."
 
-# Relative or absolute web URL of your awstats.pl directory.
-# This parameter is used only when AWStats is runned from command line
-# with -output option (to generate links in HTML reported page).
-# Default: "/cgi-bin"   (means awstats.pl is in "/mywwwroot/cgi-bin")
-#
-DirCgi="/cgi-bin"
-
-# Relative or absolute web URL of all icons subdirectories.
-# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon")
-#
-DirIcons="/icon"
-
 # When this parameter is set to 1, AWStats add a button on report page to
 # allow to "update" statistics from a web browser. Warning, when "update" is
 # made from a browser, AWStats is runned as a CGI by the web server user
-# defined in your web server (user "nobody" by default with Apache, "IUSR_XXX"
+# defined in your web server (user "nobody" by default with Apache, "IE_USER"
 # with IIS), so the "DirData" directory and all already existing history files
 # (awstatsMMYYYY[.xxx].txt) must be writable by this user. Change permissions
 # if required.
-# Warning: Update process can be long so you might experience "time out"
-# browser errors if you don't launch AWStats enough frequently.
+# Warning: Process is long so you might experience "time out" browser errors
+# if you don't launch AWStats enough frequently.
 # When set to 0, update is only made when AWStats is runned from the command
-# line interface (or a task scheduler).
+# line interface (or a task scheduler)
 # Possible values: 1 or 0
 # Default: 0
 #
-AllowToUpdateStatsFromBrowser=0
-
-# "SiteDomain" must contain the main domain name or the main intranet web
-# server name used to reach the web site.
-# This parameter is only used to generate full URLs links when ShowLinksOnUrl
-# option is set to 1.
-# Note: \. means .
-# Example: "www\.mysite\.com"
-# Example: "user\.mydomain\.com"
-# Example: "myintranetserver"
-# Default: ""
-#
-SiteDomain=""
-
-# Put here all other possible domain names, addresses or virtual host aliases
-# someone can use to access your site. Try to keep only the minimum number of
-# possible names/adresses to have the best performances.
-# You can repeat the "SiteDomain" value in this list.
-# Use space between each value and put a backslash before each dot.
-# This parameter is used to analyze referer field in log file and to help
-# AWStats to know if a referer URL is a local URL of same site or an URL of
-# another site.
-# Note: \. means .
-# Example: "www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
-#
-HostAliases="www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
-
-
-
-
-# OPTIONAL SETUP SECTION (Not required but increase AWStats features)
-#------------------------------------------------------------------------
+UpdateStatsFromBrowser=0
 
 # AWStats can purge log after processing it. By this way, the next time you
 # launch AWStats, log file will be smaller and processing time will be better.
 # IMPORTANT !!!
 # AWStats is able to detect new lines in log file, to process only them, so
 # you can launch AWStats as soon as you want, even with this parameter to 0.
-# With 0, no purge is made, so you must use a scheduled task or a web server
-# that make this purge frequently.
-# With 1, the purge of the log file is made each time AWStats is runned.
+# With 0, no purge is mage, so you must have a scheduled task or a web server
+# that made this purge frequently.
+# With 1, the purge of the log file is made when awstats is runned, so you
+# must have a scheduler/crontab job to launch Awstats (that purge your log
+# file) frequently.
 # This parameter doesn't work with IIS (This web server doesn't let its log
 # file to be purged).
 # Possible values: 1 or 0
-# Default: 0
+# Default: 0   (but if you can, set this to 1 to increase speed)
 #
 PurgeLogFile=0
 
@@ -183,34 +120,29 @@ PurgeLogFile=0
 #
 ArchiveLogRecords=0
 
-# Each time you run the update process, AWStats overwrite the 'historic file'
-# for the month (awstatsMMYYYY[.*].txt) with the updated one.
-# When write errors occurs (IO, disk full,...), this historic file can be
-# corrupted and must be deleted. Because this file contains information of all
-# past processed log files, you will loose old stats if removed. So you can
-# ask AWStats to save last non corrupted file in a .bak file. This file is
-# stored in "DirData" directory with other 'historic files'.
-# Possible values: 1 or 0
-# Default: 1
+# Relative or absolute web URL of your awstats.pl directory.
+# This parameter is used only when AWStats is runned from command line.
+# Default: "/cgi-bin"   (means awstats.pl is in "/mywwwroot/cgi-bin")
 #
-KeepBackupOfHistoricFiles=0
+DirCgi="/cgi-bin"
 
-# Set your primary language.
-# Possible value:
-#  Bosnian=ba, Chinese (Taiwan)=tw, Chinese (Traditional)=cn, Czech=cz,
-#  Danish=dk, Dutch=nl, English=en, French=fr, German=de, Greek=gr,
-#  Hungarian=hu, Indonesian=id, Italian=it, Japanese=jp, Korean=kr,
-#  Norwegian (Nynorsk)=nn, Polish=pl, Portuguese=pt, Romanian=ro, Russian=ru,
-#  Spanish=es, Swedish=se, Turkish=tr, Ukrainian=ua
-# Default: en
+# Relative or absolute web URL of all icons subdirectories.
+# Default: "/icon" (means you must copy icon directories in "/mywwwroot/icon")
 #
-Lang="en"
+DirIcons="/icon"
+
 
-# Set the location of language files.
-# Example: "/opt/awstats/lang"
-# Default: "./lang" (means lang directory is in same location than awstats.pl)
+
+# Optional setup section (Not required but increase AWStats features)
+#------------------------------------------------------------------------
+
+# Set your primary language.
+# Possible value:
+# 0=English, 1=French, 2=Dutch, 3=Spanish, 4=Italian, 5=German
+# 6=Polish, 7=Greek, 8=Czech, 9=Portuguese, 10=Korean
+# Default: 0
 #
-DirLang="./lang"
+Lang=0
 
 # Index page name for your web server.
 # Example: "default.htm"
@@ -218,6 +150,18 @@ DirLang="./lang"
 #
 DefaultFile="index.html"
 
+# Put here all possible domain names, addresses or virtual host aliases
+# someone can use to access your site. Try to keep only the minimum number of
+# possible names/adresses to have the best performances.
+# Use space between each value and put a backslash before each dot.
+# This parameter is used to analyze referer field in log file and to help
+# AWStats to know if a referer URL is a local URL of same site or an URL of
+# another site.
+# Note: \. means .
+# Example: "www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+#
+HostAliases="www\.myserver\.com x\.y\.z\.w localhost 127\.0\.0\.1"
+
 # Do not include access from clients that match following criterias.
 # If your log file contains IP adresses in host field, you must put here
 # matching IP adresses criterias.
@@ -225,32 +169,21 @@ DefaultFile="index.html"
 # criterias.
 # Note: Use space between each value.
 # Note: \. means .
-# Example: "127\.0\.0\.1 163\.84\. 201\.101\.51\.1"
+# Example: "127\.0\.0\.1 163\.84\. 202\.129\.64\.207"
 # Example: "localhost abcxyz"
 # Default: ""
 #
 SkipHosts=""
 
-# You can specify specific IP addresses that should NOT be looked up in
-#  the DNS. You may specify partial addresses (ie 163.85. for everything
-#  behind the usual firewall setup, etc)...
-# This is only useful if DNSLookup=1.
-# Note: Use space between each value and put a backslash before each dot.
-# Example: "163\.85\. 201\.101\.51\.2"
-# Default: ""
-#
-SkipDNSLookupFor=""
-
 # Use SkipFiles to ignore access to URLs that match one of following entries.
 # You can, with this option, add a list of not important frame pages (like 
 # menus, etc...) to exclude them from statistics.
 # For example, to ignore a whole directory tree, just add "directorytoignore",
 # to ignore "users" homepage in your stats, you can add "/~".
 # The oposite parameter of "SkipFiles" is "OnlyFiles".
-# Note: This parameter is not case sensitive.
 # Note: Use space between each value and do not remove default values
 # Note: \. means . and xxx$ means URL ending by xxx.
-# Example: "\.css$ \.js$ \.class$ robots\.txt$ badpage\.html /~"
+# Example: "\.css$ \.js$ \.class$ robots\.txt$ dir/badpage\.html /~"
 # Default: "\.css$ \.js$ \.class$ robots\.txt$"
 #
 SkipFiles="\.css$ \.js$ \.class$ robots\.txt$"
@@ -260,7 +193,6 @@ SkipFiles="\.css$ \.js$ \.class$ robots\.txt$"
 # match a particular string, like a particular directory, you can add this
 # directory name in this parameter.
 # The oposite parameter of "OnlyFiles" is "SkipFiles".
-# Note: This parameter is not case sensitive.
 # Note: Use space between each value and do not remove default values
 # Note: \. means . and xxx$ means URL ending by xxx.
 # Example: "marketing_directory"
@@ -268,52 +200,44 @@ SkipFiles="\.css$ \.js$ \.class$ robots\.txt$"
 #
 OnlyFiles=""
 
-# Add here a list of kind of url (file extension) that must be counted as
-# "Hit only" and not as a "Hit" and "Page viewed". You can set here all images
-# extensions as they are hit downloaded but they are not viewed pages.
-# URL with such extensions are not included in the TOP Pages/URL report.
-# Example: ""
-# Example: "gif jpg jpeg png bmp zip arj gz z wav mp3 wma"
-# Default: "gif jpg jpeg png bmp"
-#
-NotPageList="gif jpg jpeg png bmp"
-
-# Keep or attach the query string to the URL in the statistics for individual
-# pages. This is primarily used to differentiate between the URLs of dynamic
-# pages. If set to 1, mypage.html?id=x and mypage.html?id=y are counted as
-# two different pages.
-# Possible values:
-# 0 - URLs are cleaned from the query string (ie: "/mypage.html")
-# 1 - Full URL with query string is used     (ie: "/mypage.html?x=y")
-# Default: 0
-# 
-URLWithQuery=0
-
 # AWStats can detect setup problems or show you important informations to have
 # a better use. Keep this to 1, except if AWStats says you can change it.
 # Possible values: 1 or 0
 # Default: 1
-#
 WarningMessages=1
 
-# To help you to detect if your log format is good, AWStats report an error
-# if the first NbOfLinesForCorruptedLog lines have all a format that does not
-# match the LogFormat parameter.
-# However, some worm virus attack on your web server can result in a very high
-# number of corrupted lines in your log. So if you experience awstats stop
-# because of bad virus records, you can increase this parameter (very rare).
-# Default: 50
+# Each URL shown in stats page are links you can click.
+# Possible values: 1 or 0
+# Default: 1
 #
-NbOfLinesForCorruptedLog=50
+ShowLinksOnUrl=1
 
-# Choose if you want week to start on sunday or monday
-# Possible values:
-# 0 - Week start on sunday
-# 1 - Week start on monday
+# Flags with link to other languages translation are visible.
+# Possible values: 1 or 0
 # Default: 1
 #
-FirstDayOfWeek=1
+ShowFlagLinks=1
+
+# Search engines keywords reported are full search string or separate keywords
+# Possible values:
+# 0 - Search keywords reported are full search string (ie: "town maps")
+# 1 - Search keywords reported are separated words (ie: "town" and "maps")
+# Default: 0
+#
+SplitSearchString=0
 
+# You can put here HTML code that will be added at the end of AWStats reports.
+# Great to add advert ban.
+# Default: ""
+#
+HTMLEndSection=""
+
+# Value of maximum bar width/heigth for horizontal/vertical graphics bar
+# Default: 260/220
+#
+BarWidth   = 260
+BarHeight  = 220
 # This value can be used to choose maximum number of lines shown for each 
 # particular reporting.
 #
@@ -322,9 +246,6 @@ MaxNbOfDomain = 25
 # Stats by hosts
 MaxNbOfHostsShown = 25
 MinHitHost    = 1
-# Stats by authenticated users
-MaxNbOfLoginShown = 10
-MinHitLogin   = 1
 # Stats by robots
 MaxNbOfRobotShown = 25
 MinHitRobot   = 1
@@ -338,116 +259,28 @@ MinHitRefer   = 1
 MaxNbOfKeywordsShown = 25
 MinHitKeyword  = 1
 
-# Search engines keywords reported are full search string or separate keywords
-# Possible values:
-# 0 - Search keywords reported are full search string (ie: "town maps")
-# 1 - Search keywords reported are separated words (ie: "town" and "maps")
-# Default: 0
-#
-SplitSearchString=0
-
-# You can add in the HTML report page a delay to force browsers to reload page
-# if page is loaded a second time after this delay (in seconds).
-# Example: 3600
-# Default: 0
-#
-Expires=0
-
-# You choose here which summary report you want to see in the main page.
-# Whatever is your setup here, all detailed reports are still available.
-# So if you setup to 1 only ShowHeader, ShowMenu and ShowMonthDayStats, all
-# links in menu will point to detailed views.
-# Possible values: 1 or 0
-#
-ShowHeader=1                           # Show AWStats head title and icon
-ShowMenu=1                                     # Show menu header with links on detailed reports
-ShowMonthDayStats=1
-ShowDaysOfWeekStats=1
-ShowHoursStats=1
-ShowDomainsStats=1
-ShowHostsStats=1
-ShowAuthenticatedUsers=0
-ShowRobotsStats=1
-ShowPagesStats=1
-ShowCompressionStats=0         # Show report of compression stats when using mod_gzip
-ShowFileTypesStats=1
-ShowFileSizesStats=0           # Not yet available
-ShowBrowsersStats=1
-ShowOSStats=1
-ShowOriginStats=1
-ShowKeyphrasesStats=1
-ShowKeywordsStats=1                    # Not yet available
-ShowHTTPErrorsStats=1
-
-# List of visible flags with link to other language translations.
-# If you don't want any flag link, set ShowFlagLinks to "".
-# This parameter is used only if ShowHeader is set to 1.
-# Possible values: "" or "language_codes_separated_by_space"
-# Default: "en es fr it nl es"
-#
-ShowFlagLinks="en fr de it nl es"
-
-# Each URL shown in stats report views are links you can click.
-# Possible values: 1 or 0
-# Default: 1
-#
-ShowLinksOnUrl=1
-
-# Maximum length of URL shown on stats page (number of characters). This
-# affects only URL visible text, link still work.
-# Default: 72
-#
-MaxLengthOfURL=72
-               
-# This parameter ask your browser to open detailed reports into a different
-# window than the main page.
-# Possible values: 1 or 0
-# Default: 1
-#
-DetailedReportsOnNewWindows=1
-
-# You can put here HTML code that will be added at the top of AWStats reports.
-# Default: ""
-#
-HTMLHeadSection=""
-
-# You can put here HTML code that will be added at the end of AWStats reports.
-# Great to add advert ban.
-# Default: ""
-#
-HTMLEndSection=""
-
-# Value of maximum bar width/heigth for horizontal/vertical graphics bar
-# Default: 260/180
-#
-BarWidth   = 260
-BarHeight  = 180
-
-# You can set Logo and LogoLink to use your own logo.
-# Logo must be the name of image file (must be in $DirIcons/other directory).
-# LogoLink is the expected URL when clicking on Logo.
+# You can set this to use your own logo.
+# Logo file must be in $DirIcons/other directory
 # Default: "awstats_logo1.png"
 #
 Logo="awstats_logo1.png"
-LogoLink="http://awstats.sourceforge.net"
 
 # Colors used on AWStats report page.
-# Example: color_name="RRGGBB" # RRGGBB is Red Green Blue components in Hex
+# Example: color_name="RRGGBB" # RRGGBB is RedGreenBlue components in Hex
 #
 color_Background="FFFFFF"              # Background color for main page (Default = "FFFFFF")
-color_TableBGTitle="CCCCDD"            # Background color for table title (Default = "CCCCDD")
-color_TableTitle="000000"              # Table title font color (Default = "000000")
-color_TableBG="CCCCDD"                 # Background color for table (Default = "CCCCDD")
+color_TableBorder="000000"             # Table border color (Default = "000000")
+color_TableBG="DDDDBB"                 # Background color for table (Default = "DDDDBB")
+color_TableTitle="FFFFFF"              # Table title font color (Default = "FFFFFF")
+color_TableBGTitle="666666"            # Background color for table title (Default = "666666")
 color_TableRowTitle="FFFFFF"   # Table row title font color (Default = "FFFFFF")
-color_TableBGRowTitle="ECECEC" # Background color for row title (Default = "ECECEC")
-color_TableBorder="ECECEC"             # Table border color (Default = "ECECEC")
+color_TableBGRowTitle="BBBBBB" # Background color for row title (Default = "BBBBBB")
 color_text="000000"                            # Color of main body text (Default = "000000")
 color_titletext="000000"               # Color of text title within colored Title Rows (Default = "000000")
-color_weekend="EAEAEA"                 # Color for week-end days
-color_link="0011BB"                            # Color of HTML links (Default = "0011BB")
-color_hover="605040"                   # Color of HTML on-mouseover links (Default = "605040") 
-color_u="FF9933"                               # Background color for number of unique visitors (Default = "FF9933")
+color_link="4000FF"                            # Color of HTML links (Default = "4000FF")
+color_hover="4000FF"                   # Color of HTML on-mouseover links (Default = "4000FF") 
 color_v="F3F300"                               # Background color for number of visites (Default = "F3F300")
+color_w="FF9933"                               # Background color for number of unique visitors (Default = "FF9933")
 color_p="4477DD"                               # Background color for number of pages (Default = "4477DD")
 color_h="66F0FF"                               # Background color for number of hits (Default = "66F0FF")
 color_k="339944"                               # Background color for number of bytes (Default = "339944")
index e416e56fb2f3820f92919eb7c0fe2fb3d0000939..c61fe7137845bd059f1dd99e7fd367cad57efebf 100644 (file)
@@ -2,22 +2,22 @@
 # With some other Unix Os, first line may be
 #!/usr/local/bin/perl
 # With Apache for Windows and ActiverPerl, first line may be
-#!C:/Program Files/ActiveState/bin/perl
+#!c:/program files/activeperl/bin/perl
 #-Description-------------------------------------------
-# Free realtime web server logfile analyzer to show advanced web statistics.
-# Works from command line or as a CGI. You must use this script as often as
-# necessary from your scheduler to update your statistics.
+# Free realtime web server logfile analyzer (Perl script) to show advanced web
+# statistics. Works from command line or as a CGI.
+# You must use this script as often as necessary from your scheduler to update
+# your statistics.
 # See README.TXT file for setup and benchmark informations.
 # See COPYING.TXT file about AWStats GNU General Public License.
 #-------------------------------------------------------
-# ALGORITHM SUMMARY
+# Algorithm SUMMARY
 # Read config file
-# Init variables
 # If 'update'
 #   Get last history file name
-#   Read this last history file (LastLine, data arrays, ...)
+#   Read this last history file (LastTime, data arrays, ...)
 #   Loop on each new line in log file
-#     If line older than LastLine, skip
+#     If line older than Lastime, skip
 #     If new line
 #        If other month/year, save data arrays, reset them
 #        Analyse record and complete data arrays
 #   If required month, read 1st and 2nd part of history file for this month
 #   If not required month, read 1st part of history file for this month
 # End of loop
-# If 'output'
-#   Show data arrays in HTML page
-# End of 'output'
+# Show data arrays in HTML page
 #-------------------------------------------------------
 #use diagnostics;
 #use strict;
-# Uncomment following line and a line into GetDelaySinceStart function to get
-# miliseconds time in showsteps option
-#use Time::HiRes qw( gettimeofday );           
 
 
 #-------------------------------------------------------
 # Defines
 #-------------------------------------------------------
 
-# ---------- Init variables (Variable $TmpHashxxx are not initialized) -------
-($AddOn,$BarHeight,$BarWidth,$Debug,$DebugResetDone,$DNSLookup,$Expires, 
-$KeepBackupOfHistoricFiles,
-$MaxLengthOfURL,
-$MaxNbOfHostsShown, $MaxNbOfKeywordsShown, $MaxNbOfLastHosts, $MaxNbOfLoginShown,
-$MaxNbOfPageShown, $MaxNbOfRefererShown, $MaxNbOfRobotShown,
-$MinHitFile, $MinHitHost, $MinHitKeyword,
-$MinHitLogin, $MinHitRefer, $MinHitRobot,
-$NbOfLinesForCorruptedLog,
-$ShowAuthenticatedUsers, $ShowCompressionStats, $ShowFileSizesStats,
-$ShowCorrupted, $ShowSteps, $StartSeconds, $StartMicroseconds)=
-(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
-($ArchiveLogRecords, $DetailedReportsOnNewWindows, $FirstDayOfWeek,
-$ShowHeader, $ShowMenu, $ShowMonthDayStats, $ShowDaysOfWeekStats,
-$ShowHoursStats, $ShowDomainsStats, $ShowHostsStats, 
-$ShowRobotsStats, $ShowPagesStats, $ShowFileTypesStats, 
-$ShowBrowsersStats, $ShowOSStats, $ShowOriginStats, $ShowKeyphrasesStats,
-$ShowKeywordsStats,  $ShowHTTPErrorsStats,
-$ShowFlagLinks, $ShowLinksOnURL,
-$WarningMessages)=
-(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1);
-($ArchiveFileName, $DIR, $DayRequired, $DefaultFile,
-$DirCgi, $DirData, $DirIcons, $DirLang,
-$Extension, $FileConfig, $FileSuffix, 
-$FirstTime, $HTMLHeadSection, $HTMLEndSection, $Host, $KeepBackupOfHistoricFiles,
-$LastTime, $LastUpdate, $LogFile, $LogFormat, $LogFormatString, $Logo, $LogoLink,
-$MonthRequired,
-$HTMLOutput, $PROG, $PageCode,
-$PurgeLogFile, $QueryString, $RatioBytes, $RatioHits, $RatioHosts, $RatioPages,
-$SiteConfig, $SiteDomain, $SiteToAnalyze, $SiteToAnalyzeWithoutwww,
-$TotalBytes, $TotalDifferentPages, $TotalErrors, $TotalHits,
-$TotalHostsKnown, $TotalHostsUnKnown, $TotalPages, $TotalUnique, $TotalVisits,
-$URLFilter, $URLWithQuery, $UserAgent, $YearRequired, 
-$color_Background, $color_TableBG, $color_TableBGRowTitle,
-$color_TableBGTitle, $color_TableBorder, $color_TableRowTitle, $color_TableTitle,
-$color_h, $color_k, $color_link, $color_p, $color_s, $color_u, $color_v, $color_weekend)=
-();
+# ---------- Init variables --------
+($ArchiveFileName, $ArchiveLogRecords, $BarHeight, $BarWidth,
+$DIR, $DNSLookup, $DefaultFile, $DirCgi, $DirConfig, $DirData,
+$DirIcons, $Extension, $FileConfig, $FileSuffix, $FirstTime,
+$HTMLEndSection, $Host, $HostAlias, $LastTime, $LastUpdate, $SiteToAnalyze,
+$SiteToAnalyzeIsInHostAliases, $SiteToAnalyzeWithoutwww, $LogFile,
+$LogFormat, $LogFormatString, $Logo, $MaxNbOfHostsShown, $MaxNbOfKeywordsShown,
+$MaxNbOfPageShown, $MaxNbOfRefererShown, $MaxNbOfRobotShown, $MinHitFile,
+$MinHitHost, $MinHitKeyword, $MinHitRefer, $MinHitRobot, $MonthRequired,
+$NewDNSLookup, $NowNewLinePhase, $OpenFileError, $PROG, $PageBool, $PurgeLogFile,
+$QueryString, $RatioBytes, $RatioHits, $RatioHosts, $RatioPages,
+$ShowFlagLinks, $ShowLinksOnURL, $ShowLinksOnUrl, $TotalBytes,
+$TotalDifferentKeywords, $TotalDifferentPages, $TotalErrors, $TotalHits,
+$TotalHosts, $TotalKeywords, $TotalPages, $TotalUnique, $TotalVisits, $UserAgent,
+$WarningMessages, $YearRequired,
+$allok, $beginmonth, $bredde, $bredde_h, $bredde_k, $bredde_p, $bredde_u,
+$bredde_v, $color_Background, $color_TableBG, $color_TableBGRowTitle,
+$color_TableBGTitle, $color_TableBorder, $color_TableRowTitle,
+$color_TableTitle, $color_h, $color_k, $color_link, $color_p, $color_s, $color_v,
+$color_w, $count, $date, $daycon, $endmonth, $found, $foundrobot,
+$h, $hourcon, $hr, $internal_link, $ix, $keep, $key, $kilo, $lien, $line,
+$max, $max_h, $max_k, $max_p, $max_v, $mincon, $monthcon, $monthfile, $monthix,
+$monthtoprocess, $nameicon, $new, $nompage, $p, $page, $param,
+$paramtoexclude, $rest, $rest_h, $rest_k, $rest_p,
+$tab_titre, $timeconnexion, $total_h, $total_k, $total_p,
+$word, $yearcon, $yearfile, $yearmonthfile, $yeartoprocess) = ();
 # ---------- Init arrays --------
-@HostAliases = @Message = @OnlyFiles = @SkipDNSLookupFor = @SkipFiles = @SkipHosts = @DOWIndex = ();
-@RobotArrayID=();
-@WordsToCleanSearchUrl = ();
+%DayBytes = %DayHits = %DayPage = %DayUnique = %DayVisits =
+%FirstTime = %HistoryFileAlreadyRead = %LastTime =
+%MonthBytes = %MonthHits = %MonthPage = %MonthUnique = %MonthVisits =
+%_browser_h = %_domener_h = %_domener_k = %_domener_p =
+%_errors_h = %_hostmachine_h = %_hostmachine_k = %_hostmachine_l = %_hostmachine_p =
+%_keywords = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l = %_se_referrals_h =
+%_sider404_h = %_sider_h = %_sider_k = %_sider_p = %_unknownip_l = %_unknownreferer_l =
+%_unknownrefererbrowser_l = %listofyears = %monthlib = %monthnum = ();
 # ---------- Init hash arrays --------
-%DayBytes = %DayHits = %DayPages = %DayUnique = %DayVisits =
-%FirstTime = %LastTime = %LastUpdate =
-%MonthBytes = %MonthHits = %MonthHostsKnown = %MonthHostsUnknown = %MonthPages = %MonthUnique = %MonthVisits =
-%monthlib = %monthnum = ();
-
-
-$VERSION="3.2 (build 75)";
-$Lang="en";
+@BrowserArray = @DomainsArray = @FirstTime = @HostAliases = @LastTime = @LastUpdate =
+@OnlyFiles = @OSArray = @PageCode = @RobotArray =
+@SearchEnginesArray = @SkipFiles = @SkipHosts =
+@_from_h = @_msiever_h = @_nsver_h = @_time_h = @_time_k = @_time_p =
+@datep = @dateparts = @felter = @field = @filearray = @message =
+@paramlist = @refurl = @sortbrowsers = @sortdomains_h = @sortdomains_k =
+@sortdomains_p = @sorterrors = @sorthosts_p = @sortos = @sortpagerefs = @sortrobot =
+@sortsearchwords = @sortsereferrals = @sortsider404 = @sortsiders = @sortunknownip =
+@sortunknownreferer = @sortunknownrefererbrowser = @wordlist = ();
+
+$VERSION="2.5 (build 24)";
+$Lang=0;
 
 # Default value
-$DEBUGFORCED   = 0;                    # Force debug level to log lesser level into debug.log file (Keep this value to 0)
-$MAXROWS       = 200000;       # Max number of rows for not limited HTML arrays
 $SortDir       = -1;           # -1 = Sort order from most to less, 1 = reverse order (Default = -1)
 $VisitTimeOut  = 10000;                # Laps of time to consider a page load as a new visit. 10000 = one hour (Default = 10000)
 $FullHostName  = 1;                    # 1 = Use name.domain.zone to refer host clients, 0 = all hosts in same domain.zone are one host (Default = 1, 0 never tested)
-$MaxNbOfDays   = 31;
-$NbOfLinesForBenchmark=5000;
-$ShowBackLink  = 1;
-$Sort          = "";
+$MaxLengthOfURL= 70;           # Maximum length of URL shown on stats page. This affects only URL visible text, link still work (Default = 70)
 $CENTER        = "";
 $WIDTH         = "600";
 # Images for graphics
 $BarImageVertical_v   = "barrevv.png";
-#$BarImageHorizontal_v = "barrehv.png";
+$BarImageHorizontal_v = "barrehv.png";
 $BarImageVertical_u   = "barrevu.png";
-#$BarImageHorizontal_u = "barrehu.png";
+$BarImageHorizontal_u = "barrehu.png";
 $BarImageVertical_p   = "barrevp.png";
 $BarImageHorizontal_p = "barrehp.png";
-#$BarImageVertical_e = "barreve.png";
-$BarImageHorizontal_e = "barrehe.png";
 $BarImageVertical_h   = "barrevh.png";
 $BarImageHorizontal_h = "barrehh.png";
 $BarImageVertical_k   = "barrevk.png";
 $BarImageHorizontal_k = "barrehk.png";
 
-$AddOn=0;
-#require "${DIR}addon.pl"; $AddOn=1;           # Keep this line commented in standard version
+# URL with such end signature are kind of URL we only need to count as hits
+@NotPageList= (
+                       "\\.gif","\\.jpg","\\.png","\\.bmp",
+#                      "\\.zip","\\.arj","\\.gz","\\.z",
+#                      "\\.pdf","\\.doc","\\.ppt","\\.rtf","\\.txt",
+#                      "\\.mp3","\\.wma"
+                       );
 
-# Those addresses are shown with those lib (First column is full exact relative URL, second column is text to show instead of URL)
+# Those addresses are shown with those lib (First column is full relative URL, Second column is text to show instead of URL)
 %Aliases    = (
                        "/",                                    "<b>HOME PAGE</b>",
                        "/cgi-bin/awstats.pl",                                  "<b>AWStats stats page</b>",
                        "/cgi-bin/awstats/awstats.pl",                  "<b>AWStats stats page</b>",
                        # Following the same example, you can put here HTML text you want to see in links instead of URL text.
+                       "/YourRelativeUrl",                                             "<b>Your HTML text</b>",
                        "/YourRelativeUrl",                                             "<b>Your HTML text</b>"
                        );
 
-# These table is used to make fast reverse DNS lookup for particular IP adresses. You can add your own IP addresses resolutions.
+# These table is used to make fast reverse DNS lookup for particular IP adresses. You can add your own IP adresses resolutions.
 %MyDNSTable = (
 "256.256.256.1", "myworkstation1",
 "256.256.256.2", "myworkstation2"
 );
 
+# Search engines names database (update the 10th january 2001)
+%SearchEnginesHash=(
+# Most common search engines
+"yahoo\.","Yahoo",
+"altavista\.","AltaVista",
+"msn\.","MSN",
+"voila\.", "Voila",
+"lycos\.","Lycos",
+"search\.terra\.","Terra",
+"google\.","Google",
+"alltheweb\.com","AllTheWeb",
+"netscape\.","Netscape",
+"northernlight\.","NorthernLight",
+"dmoz\.org","DMOZ",
+"search\.aol\.co","AOL",
+# Others
+"hotbot\.","Hotbot",
+"webcrawler\.","WebCrawler",
+"metacrawler\.","MetaCrawler (Metamoteur)",
+"go2net\.com","Go2Net (Metamoteur)",
+"go\.com","Go.com",
+"euroseek\.","Euroseek",
+"excite\.","Excite",
+"lokace\.", "Lokace",
+"spray\.","Spray",
+"netfind\.aol\.com","AOL",
+"recherche\.aol\.fr","AOL",
+"nbci\.com/search","NBCI",
+"askjeeves\.","Ask Jeeves",
+"mamma\.","Mamma",
+"dejanews\.","DejaNews",
+"search\.dogpile\.com","Dogpile",
+"ilse\.","Ilse","vindex\.","Vindex\.nl",       # Minor dutch search engines
+"nomade\.fr/","Nomade", "ctrouve\.","C'est trouvé", "francite\.","Francité", "\.lbb\.org", "LBB", "rechercher\.libertysurf\.fr", "Libertysurf",        # Minor french search engines
+"fireball\.de","Fireball", "infoseek\.de","Infoseek", "suche\.web\.de","Web.de", "meta\.ger","MetaGer",        # Minor german search engines
+"engine\.exe","Cade", "miner\.bol\.com\.br","Meta Miner",      # Minor brazilian search engine
+"search\..*com","Other search engines"
+);
+
+
+
+# Search engines known URLs database (update the 10th january 2001)
+# To add a search engine, add a new line:
+# "match_string_in_url_that_identify_engine", "search_engine_name",
+%SearchEngineKnownUrl=(
+# Most common search engines
+"yahoo\.","p=",
+"altavista\.","q=",
+"msn\.","q=",
+"voila\.","kw=",
+"lycos\.","query=",
+"google\.","q=",
+"alltheweb\.","query=",
+"netscape\.","search=",
+"northernlight\.","qr=",
+"dmoz\.org","search=",
+"search\.aol\.co","query=",
+# Others
+"hotbot\.","mt=",
+"webcrawler","searchText=",
+"metacrawler\.","general=",
+"go2net\.com","general=",
+"go\.com","qt=",
+"euroseek\.","query=",
+"excite\.","search=",
+"spray\.","string=",
+"nbci\.com/search","keyword=",
+"askjeeves\.","ask=",
+"mamma\.","query=",
+"search\.dogpile\.com", "q=",
+"ilse\.","search_for=", "vindex\.","in=",
+"nomade\.fr/","s=", "francite\.","name=",
+"fireball\.de","q=", "infoseek\.de","qt=", "suche\.web\.de","su=",
+"engine\.exe","p1=", "miner\.bol\.com\.br","q="
+);
+@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cfg=","cou=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hs=","kl=","lang=","loc=","lr=","matchmode=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=");
+# Never put the following exclusion ("ask=","claus=","general=","kw=","keyword=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=","string=","su=") because they are strings that contain keywords we're looking for.
+
 # HTTP codes with tooltip
 %httpcode = (
 "201", "Partial Content", "202", "Request recorded, will be executed later", "204", "Request executed", "206", "Partial Content",
 "301", "Moved Permanently", "302", "Found",
 "400", "Bad Request", "401", "Unauthorized", "403", "Forbidden", "404", "Not Found", "408", "Request Timeout",
 "500", "Internal Error", "501", "Not implemented", "502", "Received bad response from real server", "503", "Server busy", "504", "Gateway Time-Out", "505", "HTTP version not supported",
+
 "200", "OK", "304", "Not Modified"     # 200 and 304 are not errors
 );
 
+# Browser lists ("browser id in lower case", "browser text")
+%BrowsersHash = (
+"msie","defined_later",
+"netscape","defined_later",
+# Most frequent browsers should be first in this list
+"lynx","Lynx",                                         
+"opera","Opera",
+"wget","Wget",
+"22acidownload","22AciDownload",
+"aol\\-iweng","AOL-Iweng",
+"amaya","Amaya",
+"amigavoyager","AmigaVoyager",
+"antfresco","ANT Fresco",
+"bpftp","BPFTP",
+"cyberdog","Cyberdog",
+"dreamcast","Dreamcast",
+"downloadagent","DownloadAgent",
+"ecatch", "eCatch",
+"emailsiphon","EmailSiphon",
+"friendlyspider","FriendlySpider",
+"getright","GetRight",
+"headdump","HeadDump",
+"hotjava","Sun HotJava",
+"ibrowse","IBrowse",
+"icab","iCab",
+"intergo","InterGO",
+"konqueror","Konqueror",
+"linemodebrowser","W3C Line Mode Browser",
+"lotus-notes","Lotus Notes web client",
+"macweb","MacWeb",
+"ncsa_mosaic","NCSA Mosaic",
+"netpositive","NetPositive",
+"nutscrape", "Nutscrape",
+"mspie","MS Pocket Internet Explorer",
+"msfrontpageexpress","MS FrontPage Express",
+"omniweb","OmniWeb",
+"teleport","TelePort Pro (Site grabber)",
+"tzgeturl","TZGETURL",
+"viking","Viking",
+"webcapture","Acrobat (Site grabber)",
+"webfetcher","WebFetcher",
+"webtv","WebTV browser",
+"webexplorer","IBM-WebExplorer",
+"webmirror","WebMirror",
+"webvcr","WebVCR",
+"libwww","LibWWW",                             # Must be at end because some browser have both "browser id" and "libwww"
+# Music only browsers
+"real","RealAudio or compatible player",
+"winamp","WinAmp",                             # Works for winampmpeg and winamp3httprdr
+"windows-media-player","Windows Media Player",
+"audion","Audion",
+"freeamp","FreeAmp",
+"itunes","Apple iTunes",
+"jetaudio","JetAudio",
+"mint_audio","Mint Audio",
+"mpg123","mpg123",
+"nsplayer","NetShow Player",
+"sonique","Sonique media player",
+"uplayer","Ultra Player",
+"xmms","XMMS",
+"xaudio","Some XAudio Engine based MPEG player",
+# Other kind of browsers
+"webzip","WebZIP"
+);
+
+# OS lists ("os detector in lower case","os text")
+%OSHash      = (
+"winme","Windows Me",
+"win2000","Windows 2000",
+"winnt","Windows NT",
+"win98","Windows 98",
+"win95","Windows 95",
+"win16","Windows 3.xx",
+"wince","Windows CE",
+"beos","BeOS",
+"macintosh","Mac OS",
+"unix","Unknown Unix system",
+"linux","Linux",
+"os/2","Warp OS/2",
+"amigaos","AmigaOS",
+"sunos","Sun Solaris",
+"irix","Irix",
+"osf","OSF Unix",
+"hp-ux","HP Unix",
+"aix","Aix",
+"netbsd","NetBSD",
+"bsdi","BSDi",
+"freebsd","FreeBSD",
+"openbsd","OpenBSD",
+"webtv","WebTV",
+"cp/m","CPM",
+"crayos","CrayOS",
+"riscos","Acorn RISC OS"
+);
+
+# OS AliasHash ("text that match in log after changing ' ' or '+' into '_' ","osid")
+%OSAliasHash   = (
+"windows_me","winme",
+"windows_2000","win2000",
+"windows_nt_5","win2000",
+"windows_nt","winnt",
+"windows-nt","winnt",
+"win32","winnt",
+"windows_98","win98",
+"windows_95","win95",
+"windows_3","win16",                   # This works for windows_31 and windows_3.1
+"windows;i;16","win16",
+"windows_ce","wince",
+"mac_p","macintosh",                   # This works for mac_ppc and mac_powerpc
+"mac_68","macintosh",                  # This works for mac_6800 and mac_68k
+"macppc","macintosh",
+"macweb","macintosh"
+);
+
+# Robots list
+# List can be found at http://info.webcrawler.com/mak/projects/robots/active.html and the next command show how to generate tab list from this file:
+# cat robotslist.txt | sed 's/:/ /' | awk ' /robot-id/ { name=tolower($2); } /robot-name/ { print "\""name"\", \""$0"\"," } ' | sed 's/robot-name *//g' > file
+# Rem: To avoid bad detection, some robots id were removed from this list:
+#      - Robots with ID of 2 letters only
+#      - Robot called "webs"
+# Rem: directhit is changed in direct_hit (its real id)
+%RobotHash   = (
+"acme.spider", "Acme.Spider",
+"ahoythehomepagefinder", "Ahoy! The Homepage Finder",
+"alkaline", "Alkaline",
+"appie", "Walhello appie",
+"arachnophilia", "Arachnophilia",
+"architext", "ArchitextSpider",
+"aretha", "Aretha",
+"ariadne", "ARIADNE",
+"aspider", "ASpider (Associative Spider)",
+"atn.txt", "ATN Worldwide",
+"atomz", "Atomz.com Search Robot",
+"auresys", "AURESYS",
+"backrub", "BackRub",
+"bigbrother", "Big Brother",
+"bjaaland", "Bjaaland",
+"blackwidow", "BlackWidow",
+"blindekuh", "Die Blinde Kuh",
+"bloodhound", "Bloodhound",
+"brightnet", "bright.net caching robot",
+"bspider", "BSpider",
+"cactvschemistryspider", "CACTVS Chemistry Spider",
+"calif", "Calif",
+"cassandra", "Cassandra",
+"cgireader", "Digimarc Marcspider/CGI",
+"checkbot", "Checkbot",
+"churl", "churl",
+"cmc", "CMC/0.01",
+"collective", "Collective",
+"combine", "Combine System",
+"conceptbot", "Conceptbot",
+"core", "Web Core / Roots",
+"cshkust", "CS-HKUST WISE: WWW Index and Search Engine",
+"cusco", "Cusco",
+"cyberspyder", "CyberSpyder Link Test",
+"deweb", "DeWeb(c) Katalog/Index",
+"dienstspider", "DienstSpider",
+"diibot", "Digital Integrity Robot",
+"direct_hit", "Direct Hit Grabber",
+"dnabot", "DNAbot",
+"download_express", "DownLoad Express",
+"dragonbot", "DragonBot",
+"dwcp", "DWCP (Dridus' Web Cataloging Project)",
+"ebiness", "EbiNess",
+"eit", "EIT Link Verifier Robot",
+"emacs", "Emacs-w3 Search Engine",
+"emcspider", "ananzi",
+"esther", "Esther",
+"evliyacelebi", "Evliya Celebi",
+"fdse", "Fluid Dynamics Search Engine robot",
+"felix", "     Felix IDE",
+"ferret", "Wild Ferret Web Hopper #1, #2, #3",
+"fetchrover", "FetchRover",
+"fido", "fido",
+"finnish", "Hämähäkki",
+"fireball", "KIT-Fireball",
+"fish", "Fish search",
+"fouineur", "Fouineur",
+"francoroute", "Robot Francoroute",
+"freecrawl", "Freecrawl",
+"funnelweb", "FunnelWeb",
+"gazz", "gazz",
+"gcreep", "GCreep",
+"getbot", "GetBot",
+"geturl", "GetURL",
+"golem", "Golem",
+"googlebot", "Googlebot",
+"grapnel", "Grapnel/0.01 Experiment",
+"griffon", "Griffon",
+"gromit", "Gromit",
+"gulliver", "Northern Light Gulliver",
+"hambot", "HamBot",
+"harvest", "Harvest",
+"havindex", "havIndex",
+"hometown", "Hometown Spider Pro",
+"wired-digital", "Wired Digital",
+"htdig", "ht://Dig",
+"htmlgobble", "HTMLgobble",
+"hyperdecontextualizer", "Hyper-Decontextualizer",
+"ibm", "IBM_Planetwide",
+"iconoclast", "Popular Iconoclast",
+"ilse", "Ingrid",
+"imagelock", "Imagelock ",
+"incywincy", "IncyWincy",
+"informant", "Informant",
+"infoseek", "InfoSeek Robot 1.0",
+"infoseeksidewinder", "Infoseek Sidewinder",
+"infospider", "InfoSpiders",
+"inspectorwww", "Inspector Web",
+"intelliagent", "IntelliAgent",
+"iron33", "Iron33",
+"israelisearch", "Israeli-search",
+"javabee", "JavaBee",
+"jcrawler", "JCrawler",
+"jeeves", "Jeeves",
+"jobot", "Jobot",
+"joebot", "JoeBot",
+"jubii", "The Jubii Indexing Robot",
+"jumpstation", "JumpStation",
+"katipo", "Katipo",
+"kdd", "KDD-Explorer",
+"kilroy", "Kilroy",
+"ko_yappo_robot", "KO_Yappo_Robot",
+"labelgrabber.txt", "LabelGrabber",
+"larbin", "larbin",
+"legs", "legs",
+"linkscan", "LinkScan",
+"linkwalker", "LinkWalker",
+"lockon", "Lockon",
+"logo_gif", "logo.gif Crawler",
+"lycos", "Lycos",
+"macworm", "Mac WWWWorm",
+"magpie", "Magpie",
+"mediafox", "MediaFox",
+"merzscope", "MerzScope",
+"meshexplorer", "NEC-MeshExplorer",
+"mindcrawler", "MindCrawler",
+"moget", "moget",
+"momspider", "MOMspider",
+"monster", "Monster",
+"motor", "Motor",
+"muscatferret", "Muscat Ferret",
+"mwdsearch", "Mwd.Search",
+"myweb", "Internet Shinchakubin",
+"netcarta", "NetCarta WebMap Engine",
+"netmechanic", "NetMechanic",
+"netscoop", "NetScoop",
+"newscan-online", "newscan-online",
+"nhse", "NHSE Web Forager",
+"nomad", "Nomad",
+"northstar", "The NorthStar Robot",
+"nzexplorer", "nzexplorer",
+"occam", "Occam",
+"octopus", "HKU WWW Octopus",
+"orb_search", "Orb Search",
+"packrat", "Pack Rat",
+"pageboy", "PageBoy",
+"parasite", "ParaSite",
+"patric", "Patric",
+"perignator", "The Peregrinator",
+"perlcrawler", "PerlCrawler 1.0",
+"phantom", "Phantom",
+"piltdownman", "PiltdownMan",
+"pioneer", "Pioneer",
+"pitkow", "html_analyzer",
+"pjspider", "Portal Juice Spider",
+"pka", "PGP Key Agent",
+"plumtreewebaccessor", "PlumtreeWebAccessor",
+"poppi", "Poppi",
+"portalb", "PortalB Spider",
+"puu", "GetterroboPlus Puu",
+"python", "The Python Robot",
+"raven", "Raven Search",
+"rbse", "RBSE Spider",
+"resumerobot", "Resume Robot",
+"rhcs", "RoadHouse Crawling System",
+"roadrunner", "Road Runner: The ImageScape Robot",
+"robbie", "Robbie the Robot",
+"robi", "ComputingSite Robi/1.0",
+"roverbot", "Roverbot",
+"safetynetrobot", "SafetyNet Robot",
+"scooter", "Scooter",
+"search_au", "Search.Aus-AU.COM",
+"searchprocess", "SearchProcess",
+"senrigan", "Senrigan",
+"sgscout", "SG-Scout",
+"shaggy", "ShagSeeker",
+"shaihulud", "Shai'Hulud",
+"sift", "Sift",
+"simbot", "Simmany Robot Ver1.0",
+"site-valet", "Site Valet",
+"sitegrabber", "Open Text Index Robot",
+"sitetech", "SiteTech-Rover",
+"slurp", "Inktomi Slurp",
+"smartspider", "Smart Spider",
+"snooper", "Snooper",
+"solbot", "Solbot",
+"spanner", "Spanner",
+"speedy", "Speedy Spider",
+"spider_monkey", "spider_monkey",
+"spiderbot", "SpiderBot",
+"spiderman", "SpiderMan",
+"spry", "Spry Wizard Robot",
+"ssearcher", "Site Searcher",
+"suke", "Suke",
+"sven", "Sven",
+"tach_bw", "TACH Black Widow",
+"tarantula", "Tarantula",
+"tarspider", "tarspider",
+"tcl", "Tcl W3 Robot",
+"techbot", "TechBOT",
+"templeton", "Templeton",
+"titin", "TitIn",
+"titan", "TITAN",
+"tkwww", "The TkWWW Robot",
+"tlspider", "TLSpider",
+"ucsd", "UCSD Crawl",
+"udmsearch", "UdmSearch",
+"urlck", "URL Check",
+"valkyrie", "Valkyrie",
+"victoria", "Victoria",
+"visionsearch", "vision-search",
+"voyager", "Voyager",
+"vwbot", "VWbot",
+"w3index", "The NWI Robot",
+"w3m2", "W3M2",
+"wanderer", "the World Wide Web Wanderer",
+"webbandit", "WebBandit Web Spider",
+"webcatcher", "WebCatcher",
+"webcopy", "WebCopy",
+"webfetcher", "webfetcher",
+"webfoot", "The Webfoot Robot",
+"weblayers", "Weblayers",
+"weblinker", "WebLinker",
+"webmirror", "WebMirror",
+"webmoose", "The Web Moose",
+"webquest", "WebQuest",
+"webreader", "Digimarc MarcSpider",
+"webreaper", "WebReaper",
+"websnarf", "Websnarf",
+"webspider", "WebSpider",
+"webvac", "WebVac",
+"webwalk", "webwalk",
+"webwalker", "WebWalker",
+"webwatch", "WebWatch",
+"wget", "Wget",
+"whowhere", "WhoWhere Robot",
+"wmir", "w3mir",
+"wolp", "WebStolperer",
+"wombat", "The Web Wombat ",
+"worm", "The World Wide Web Worm",
+"wwwc", "WWWC Ver 0.2.5",
+"wz101", "WebZinger",
+"xget", "XGET",
+"nederland.zoek", "Nederland.zoek",
+
+# Not declared robots
+"antibot", "Antibot (Not referenced robot)",
+"daviesbot", "DaviesBot (Not referenced robot)",
+"ezresult",    "Ezresult (Not referenced robot)",
+"fast-webcrawler", "Fast-Webcrawler (Not referenced robot)",
+"gnodspider","GNOD Spider (Not referenced robot)",
+"jennybot", "JennyBot (Not referenced robot)",
+"justview", "JustView (Not referenced robot)",
+"mercator", "Mercator (Not referenced robot)",
+#"msiecrawler", "MSIECrawler (Not referenced robot)",  MSIECrawler seems to be a grabber not a robot
+"perman surfer", "Perman surfer (Not referenced robot)",
+"shoutcast","Shoutcast Directory Service (Not referenced robot)",
+"unlost_web_crawler", "Unlost_Web_Crawler (Not referenced robot)",
+"webbase", "WebBase (Not referenced robot)",
+"yandex", "Yandex bot (Not referenced robot)",
+# Supposed to be robots
+"webcompass", "webcompass (Not referenced robot)",
+"digout4u", "digout4u (Not referenced robot)",
+"echo", "EchO! (Not referenced robot)",
+"voila", "Voila (Not referenced robot)",
+"boris", "Boris (Not referenced robot)",
+"ultraseek", "Ultraseek (Not referenced robot)",
+"ia_archiver", "ia_archiver (Not referenced robot)",
+# Generic ID
+"robot", "Unknown robot (Not referenced robot)"
+);
+
+# Domains list
+%DomainsHash = (
+"localhost","localhost",
+
+"ad","Andorra","ae","United Arab Emirates","aero","Aero/Travel domains","af","Afghanistan","ag",
+"Antigua and Barbuda","ai","Anguilla","al","Albania","am",
+"Armenia","an","Netherlands Antilles","ao","Angola","aq",
+"Antarctica","ar","Argentina","arpa","Old style Arpanet","as",
+"American Samoa","at","Austria","au","Australia","aw","Aruba","az",
+"Azerbaidjan","ba","Bosnia-Herzegovina","bb","Barbados","bd",
+"Bangladesh","be","Belgium","bf","Burkina Faso","bg","Bulgaria",
+"bh","Bahrain","bi","Burundi","biz","Biz domains","bj","Benin","bm","Bermuda","bn",
+"Brunei Darussalam","bo","Bolivia","br","Brazil","bs","Bahamas",
+"bt","Bhutan","bv","Bouvet Island","bw","Botswana","by","Belarus",
+"bz","Belize","ca","Canada","cc","Cocos (Keeling) Islands","cf",
+"Central African Republic","cg","Congo","ch","Switzerland","ci",
+"Ivory Coast (Cote D'Ivoire)","ck","Cook Islands","cl","Chile","cm","Cameroon",
+"cn","China","co","Colombia","com","Commercial","coop","Coop domains","cr","Costa Rica",
+"cs","Former Czechoslovakia","cu","Cuba","cv","Cape Verde","cx",
+"Christmas Island","cy","Cyprus","cz","Czech Republic","de","Germany",
+"dj","Djibouti","dk","Denmark","dm","Dominica","do","Dominican Republic",
+"dz","Algeria","ec","Ecuador","edu","USA Educational","ee","Estonia",
+"eg","Egypt","eh","Western Sahara","es","Spain","et","Ethiopia","fi","Finland","fj","Fiji","fk",
+"Falkland Islands","fm","Micronesia","fo","Faroe Islands",
+"fr","France","fx","France (European Territory)","ga","Gabon","gb",
+"Great Britain","gd","Grenada","ge","Georgia","gf","French Guyana","gh","Ghana","gi","Gibraltar",
+"gl","Greenland","gm","Gambia","gn","Guinea","gov","USA Government","gp","Guadeloupe (French)","gq",
+"Equatorial Guinea","gr","Greece","gs","S. Georgia &amp; S. Sandwich Isls.",
+"gt","Guatemala","gu","Guam (USA)","gw","Guinea Bissau","gy","Guyana",
+"hk","Hong Kong","hm","Heard and McDonald Islands","hn","Honduras","hr",
+"Croatia","ht","Haiti","hu","Hungary","id","Indonesia","ie","Ireland","il","Israel",
+"in","India","info","Info domains","int","International","io","British Indian Ocean Territory",
+"iq","Iraq","ir","Iran","is","Iceland","it","Italy","jm",
+"Jamaica","jo","Jordan","jp","Japan","ke","Kenya","kg","Kyrgyzstan",
+"kh","Cambodia","ki","Kiribati","km","Comoros","kn","Saint Kitts &amp; Nevis Anguilla",
+"kp","North Korea","kr","South Korea","kw","Kuwait","ky",
+"Cayman Islands","kz","Kazakhstan","la","Laos","lb","Lebanon","lc","Saint Lucia",
+"li","Liechtenstein","lk","Sri Lanka","lr","Liberia","ls","Lesotho","lt","Lithuania",
+"lu","Luxembourg","lv","Latvia","ly","Libya","ma","Morocco","mc","Monaco",
+"md","Moldavia","mg","Madagascar","mh","Marshall Islands","mil","USA Military","mk",
+"Macedonia","ml","Mali","mm","Myanmar","mn","Mongolia","mo","Macau",
+"mp","Northern Mariana Islands","mq","Martinique (French)","mr","Mauritania",
+"ms","Montserrat","mt","Malta","mu","Mauritius","musuem","Museum domains","mv","Maldives","mw",
+"Malawi","mx","Mexico","my","Malaysia","mz","Mozambique","na","Namibia","name","Name domains","nato","NATO",
+"nc","New Caledonia (French)","ne","Niger","net","Network","nf","Norfolk Island",
+"ng","Nigeria","ni","Nicaragua","nl","Netherlands","no","Norway",
+"np","Nepal","nr","Nauru","nt","Neutral Zone","nu","Niue","nz","New Zealand","om","Oman","org",
+"Non-Profit Organizations","pa","Panama","pe","Peru","pf","Polynesia (French)",
+"pg","Papua New Guinea","ph","Philippines","pk","Pakistan","pl","Poland",
+"pm","Saint Pierre and Miquelon","pn","Pitcairn Island","pr","Puerto Rico","pro","Professional domains",
+"pt","Portugal","pw","Palau","py","Paraguay","qa","Qatar",
+"re","Reunion (French)","ro","Romania","ru","Russian Federation","rw","Rwanda",
+"sa","Saudi Arabia","sb","Solomon Islands","sc","Seychelles","sd",
+"Sudan","se","Sweden","sg","Singapore","sh","Saint Helena","si","Slovenia",
+"sj","Svalbard and Jan Mayen Islands","sk","Slovak Republic","sl","Sierra Leone",
+"sm","San Marino","sn","Senegal","so","Somalia","sr","Suriname","st",
+"Saint Tome and Principe","su","Former USSR","sv","El Salvador","sy","Syria","sz","Swaziland","tc",
+"Turks and Caicos Islands","td","Chad","tf","French Southern Territories","tg","Togo",
+"th","Thailand","tj","Tadjikistan","tk","Tokelau","tm","Turkmenistan","tn","Tunisia",
+"to","Tonga","tp","East Timor","tr","Turkey","tt","Trinidad and Tobago","tv","Tuvalu",
+"tw","Taiwan","tz","Tanzania","ua","Ukraine","ug","Uganda","uk",
+"United Kingdom","um","USA Minor Outlying Islands","us","United States",
+"uy","Uruguay","uz","Uzbekistan","va","Vatican City State","vc",
+"Saint Vincent &amp; Grenadines","ve","Venezuela","vg","Virgin Islands (British)",
+"vi","Virgin Islands (USA)","vn","Vietnam","vu","Vanuatu","wf","Wallis and Futuna Islands",
+"ws","Samoa","ye","Yemen","yt","Mayotte","yu","Yugoslavia","za","South Africa",
+"zm","Zambia","zr","Zaire","zw","Zimbabwe"
+);
+
+# ---------- Translation tables --------
+# English
+$message[0][0]="Unknown";
+$message[1][0]="Unknown (unresolved ip)";
+$message[2][0]="Others";
+$message[3][0]="View details";
+$message[4][0]="Day";
+$message[5][0]="Month";
+$message[6][0]="Year";
+$message[7][0]="Statistics of";
+$message[8][0]="First visit";
+$message[9][0]="Last visit";
+$message[10][0]="Number of visits";
+$message[11][0]="Unique visitors";
+$message[12][0]="Visit";
+$message[13][0]="Keyword";
+$message[14][0]="Search";
+$message[15][0]="Percent";
+$message[16][0]="Traffic Summary";
+$message[17][0]="Domains/Countries";
+$message[18][0]="Visitors";
+$message[19][0]="Pages/URL";
+$message[20][0]="Hours (Server time)";
+$message[21][0]="Browsers";
+$message[22][0]="HTTP Errors";
+$message[23][0]="Referers";
+$message[24][0]="Search&nbsp;Keywords";
+$message[25][0]="Visitors domains/countries";
+$message[26][0]="hosts";
+$message[27][0]="pages";
+$message[28][0]="different pages";
+$message[29][0]="Access";
+$message[30][0]="Other words";
+$message[31][0]="Pages not found";
+$message[32][0]="HTTP Error codes";
+$message[33][0]="Netscape versions";
+$message[34][0]="IE versions";
+$message[35][0]="Last Update";
+$message[36][0]="Connect to site from";
+$message[37][0]="Origin";
+$message[38][0]="Direct address / Bookmarks";
+$message[39][0]="Links from a Newsgroup";
+$message[40][0]="Links from an Internet Search Engine";
+$message[41][0]="Links from an external page (other web sites except search engines)";
+$message[42][0]="Links from an internal page (other page on same site)";
+$message[43][0]="keywords used on search engines";
+$message[44][0]="Kb";
+$message[45][0]="Unresolved IP Address";
+$message[46][0]="Unknown OS (Referer field)";
+$message[47][0]="Required but not found URLs (HTTP code 404)";
+$message[48][0]="IP Address";
+$message[49][0]="Error&nbsp;Hits";
+$message[50][0]="Unknown browsers (Referer field)";
+$message[51][0]="Visiting robots";
+$message[52][0]="visits/visitor";
+$message[53][0]="Robots/Spiders visitors";
+$message[54][0]="Free realtime logfile analyzer for advanced web statistics";
+$message[55][0]="of";
+$message[56][0]="Pages";
+$message[57][0]="Hits";
+$message[58][0]="Versions";
+$message[59][0]="Operating Systems";
+$message[60][0]="Jan";
+$message[61][0]="Feb";
+$message[62][0]="Mar";
+$message[63][0]="Apr";
+$message[64][0]="May";
+$message[65][0]="Jun";
+$message[66][0]="Jul";
+$message[67][0]="Aug";
+$message[68][0]="Sep";
+$message[69][0]="Oct";
+$message[70][0]="Nov";
+$message[71][0]="Dec";
+$message[72][0]="English us.png";
+$message[73][0]="Day statistics";
+$message[74][0]="Update";
+
+# French
+$message[0][1]="Inconnus";
+$message[1][1]="Inconnu (IP non résolue)";
+$message[2][1]="Autres";
+$message[3][1]="Voir détails";
+$message[4][1]="Jour";
+$message[5][1]="Mois";
+$message[6][1]="Année";
+$message[7][1]="Statistiques du site";
+$message[8][1]="Première visite";
+$message[9][1]="Dernière visite";
+$message[10][1]="Visites";
+$message[11][1]="Visiteurs différents";
+$message[12][1]="Visite";
+$message[13][1]="Mot clé";
+$message[14][1]="Recherche";
+$message[15][1]="Pourcentage";
+$message[16][1]="Résumé";
+$message[17][1]="Domaines/Pays";
+$message[18][1]="Visiteurs";
+$message[19][1]="Pages/URL";
+$message[20][1]="Heures (Heures du serveur)";
+$message[21][1]="Navigateurs";
+$message[22][1]="Erreurs HTTP";
+$message[23][1]="Origine/Referrer";
+$message[24][1]="Mots&nbsp;clés&nbsp;de&nbsp;recherche";
+$message[25][1]="Domaines/pays visiteurs";
+$message[26][1]="des hôtes";
+$message[27][1]="des pages";
+$message[28][1]="pages différentes";
+$message[29][1]="Accès";
+$message[30][1]="Autres mots";
+$message[31][1]="Pages non trouvées";
+$message[32][1]="Codes Erreurs HTTP";
+$message[33][1]="Versions de Netscape";
+$message[34][1]="Versions de MS Internet Explorer";
+$message[35][1]="Dernière mise à jour";
+$message[36][1]="Connexions au site par";
+$message[37][1]="Origine de la connexion";
+$message[38][1]="Adresse directe / Bookmarks";
+$message[39][1]="Lien depuis un Newsgroup";
+$message[40][1]="Lien depuis un moteur de recherche Internet";
+$message[41][1]="Lien depuis une page externe (autres sites, hors moteurs de recherche)";
+$message[42][1]="Lien depuis une page interne (autre page du site)";
+$message[43][1]="des critères de recherches utilisés";
+$message[44][1]="Ko";
+$message[45][1]="Adresses IP des visiteurs non identifiables (IP non résolue)";
+$message[46][1]="OS non reconnus (champ referer brut)";
+$message[47][1]="URLs du site demandées non trouvées (Code HTTP 404)";
+$message[48][1]="Adresse IP";
+$message[49][1]="Hits&nbsp;en&nbsp;échec";
+$message[50][1]="Navigateurs non reconnus (champ referer brut)";
+$message[51][1]="Robots visiteurs";
+$message[52][1]="visite/visiteur";
+$message[53][1]="Visiteurs Robots/Spiders";
+$message[54][1]="Analyseur de log gratuit pour statistiques Web avancées";
+$message[55][1]="sur";
+$message[56][1]="Pages";
+$message[57][1]="Hits";
+$message[58][1]="Versions";
+$message[59][1]="Systèmes exploitation";
+$message[60][1]="Jan";
+$message[61][1]="Fév";
+$message[62][1]="Mar";
+$message[63][1]="Avr";
+$message[64][1]="Mai";
+$message[65][1]="Juin";
+$message[66][1]="Juil";
+$message[67][1]="Août";
+$message[68][1]="Sep";
+$message[69][1]="Oct";
+$message[70][1]="Nov";
+$message[71][1]="Déc";
+$message[72][1]="French fr.png";
+$message[73][1]="Statistiques par jour";
+$message[74][1]="Mise à jour";
+
+# Dutch
+$message[0][2]="Onbekend";
+$message[1][2]="Onbekend (Onbekend ip)";
+$message[2][2]="Andere";
+$message[3][2]="Bekijk details";
+$message[4][2]="Dag";
+$message[5][2]="Maand";
+$message[6][2]="Jaar";
+$message[7][2]="Statistieken van";
+$message[8][2]="Eerste bezoek";
+$message[9][2]="Laatste bezoek";
+$message[10][2]="Aantal bezoeken";
+$message[11][2]="Unieke bezoekers";
+$message[12][2]="Bezoek";
+$message[13][2]="Trefwoord";
+$message[14][2]="Zoek";
+$message[15][2]="Procent";
+$message[16][2]="Opsomming";
+$message[17][2]="Domeinen/Landen";
+$message[18][2]="Bezoekers";
+$message[19][2]="Pagina's/URL";
+$message[20][2]="Uren";
+$message[21][2]="Browsers";
+$message[22][2]="HTTP Foutmeldingen";
+$message[23][2]="Verwijzing";
+$message[24][2]="Zoek&nbsp;trefwoorden";
+$message[25][2]="Bezoekers domeinen/landen";
+$message[26][2]="hosts";
+$message[27][2]="pagina's";
+$message[28][2]="verschillende pagina's";
+$message[29][2]="Toegang";
+$message[30][2]="Andere woorden";
+$message[31][2]="Pages not found";
+$message[32][2]="HTTP foutmelding codes";
+$message[33][2]="Netscape versies";
+$message[34][2]="MS Internet Explorer versies";
+$message[35][2]="Last Update";
+$message[36][2]="Verbinding naar site vanaf";
+$message[37][2]="Herkomst";
+$message[38][2]="Direkt adres / Bookmarks";
+$message[39][2]="Link vanuit een nieuwsgroep";
+$message[40][2]="Link vanuit een Internet Zoek Machine";
+$message[41][2]="Link vanuit een externe pagina (andere web sites behalve zoek machines)";
+$message[42][2]="Link vanuit een interne pagina (andere pagina van dezelfde site)";
+$message[43][2]="gebruikte trefwoorden bij zoek machines";
+$message[44][2]="Kb";
+$message[45][2]="niet vertaald  IP Adres";
+$message[46][2]="Onbekend OS (Referer veld)";
+$message[47][2]="Verplicht maar niet gvonden URLs (HTTP code 404)";
+$message[48][2]="IP Adres";
+$message[49][2]="Fout&nbsp;Hits";
+$message[50][2]="Onbekende browsers (Referer veld)";
+$message[51][2]="Bezoekende robots";
+$message[52][2]="bezoeken/bezoeker";
+$message[53][2]="Robots/Spiders bezoekers";
+$message[54][2]="Gratis realtime logbestand analyzer voor geavanceerde web statistieken";
+$message[55][2]="van";
+$message[56][2]="Pagina's";
+$message[57][2]="Hits";
+$message[58][2]="Versies";
+$message[59][2]="OS";
+$message[60][2]="Jan";
+$message[61][2]="Feb";
+$message[62][2]="Mar";
+$message[63][2]="Apr";
+$message[64][2]="May";
+$message[65][2]="Jun";
+$message[66][2]="Jul";
+$message[67][2]="Aug";
+$message[68][2]="Sep";
+$message[69][2]="Oct";
+$message[70][2]="Nov";
+$message[71][2]="Dec";
+$message[72][2]="Dutch nl.png";
+$message[73][2]="Dag statistieken";
+$message[74][2]="Update";
+
+# Spanish
+$message[0][3]="Desconocido";
+$message[1][3]="Dirección IP desconocida";
+$message[2][3]="Otros";
+$message[3][3]="Vea detalles";
+$message[4][3]="Día";
+$message[5][3]="Mes";
+$message[6][3]="Año";
+$message[7][3]="Estadísticas del sitio";
+$message[8][3]="Primera visita";
+$message[9][3]="Última visita";
+$message[10][3]="Número de visitas";
+$message[11][3]="Visitantes distintos";
+$message[12][3]="Visita";
+$message[13][3]="Palabra clave (keyword)";
+$message[14][3]="Búsquedas";
+$message[15][3]="Porciento";
+$message[16][3]="Resumen de tráfico";
+$message[17][3]="Dominios/Países";
+$message[18][3]="Visitantes";
+$message[19][3]="Páginas/URLs";
+$message[20][3]="Horas";
+$message[21][3]="Navegadores";
+$message[22][3]="Errores";
+$message[23][3]="Enlaces (Links)";
+$message[24][3]="Palabra&nbsp;clave&nbsp;de&nbsp;búsqueda";
+$message[25][3]="Dominios/Países de visitantes";
+$message[26][3]="servidores";
+$message[27][3]="páginas";
+$message[28][3]="páginas diferentes";
+$message[29][3]="Acceso";
+$message[30][3]="Otras palabras";
+$message[31][3]="Pages not found";
+$message[32][3]="Códigos de Errores de Protocolo HTTP";
+$message[33][3]="Versiones de Netscape";
+$message[34][3]="Versiones de MS Internet Explorer";
+$message[35][3]="Last Update";
+$message[36][3]="Enlaces (links) al sitio";
+$message[37][3]="Origen de enlace";
+$message[38][3]="Dirección directa / Favoritos";
+$message[39][3]="Enlaces desde Newsgroups";
+$message[40][3]="Enlaces desde algún motor de búsqueda";
+$message[41][3]="Enlaces desde páginas externas (exeptuando motores de búsqueda)";
+$message[42][3]="Enlaces desde páginas internas (otras páginas del sitio)";
+$message[43][3]="Palabras clave utilizada por el motor de búsqueda";
+$message[44][3]="Kb";
+$message[45][3]="Dirección IP no identificada";
+$message[46][3]="Sistema Operativo desconocido (campo de referencia)";
+$message[47][3]="URLs necesarios pero no encontados (código 404 de protocolo HTTP)";
+$message[48][3]="Dirección IP";
+$message[49][3]="Hits&nbsp;erróneos";
+$message[50][3]="Navegadores desconocidos (campo de referencia)";
+$message[51][3]="Visitas de Robots";
+$message[52][3]="Visitas/Visitante";
+$message[53][3]="Visitas de Robots/Spiders (indexadores)";
+$message[54][3]="Analizador gratuito de 'log' para estadísticas Web avanzadas";
+$message[55][3]="de";
+$message[56][3]="Páginas";
+$message[57][3]="Hits";
+$message[58][3]="Versiones";
+$message[59][3]="Sistema Operativo";
+$message[60][3]="Ene";
+$message[61][3]="Feb";
+$message[62][3]="Mar";
+$message[63][3]="Abr";
+$message[64][3]="May";
+$message[65][3]="Jun";
+$message[66][3]="Jul";
+$message[67][3]="Ago";
+$message[68][3]="Sep";
+$message[69][3]="Oct";
+$message[70][3]="Nov";
+$message[71][3]="Dic";
+$message[72][3]="Spanish es.png";
+$message[73][3]="Dia estadísticas";
+$message[74][3]="Update";
+
+# Italian
+$message[0][4]="Sconosciuto";
+$message[1][4]="Sconosciuto (ip non risolto)";
+$message[2][4]="Altri";
+$message[3][4]="Vedi dettagli";
+$message[4][4]="Giorno";
+$message[5][4]="Mese";
+$message[6][4]="Anno";
+$message[7][4]="Statistiche di";
+$message[8][4]="Prima visita";
+$message[9][4]="Ultima visita";
+$message[10][4]="Visite";
+$message[11][4]="Visitatori diverse";
+$message[12][4]="Visite";
+$message[13][4]="Parole chiave";
+$message[14][4]="Ricerche";
+$message[15][4]="Percentuali";
+$message[16][4]="Riassunto del traffico";
+$message[17][4]="Domini/Nazioni";
+$message[18][4]="Visitatori";
+$message[19][4]="Pagine/URL";
+$message[20][4]="Ore";
+$message[21][4]="Browsers";
+$message[22][4]="Errori HTTP";
+$message[23][4]="Origine/Riferimenti";
+$message[24][4]="Ricerche&nbsp;Parole chiave";
+$message[25][4]="Visitatori per domini/nazioni";
+$message[26][4]="hosts";
+$message[27][4]="pagine";
+$message[28][4]="pagine diverse";
+$message[29][4]="Accessi";
+$message[30][4]="Altre parole";
+$message[31][4]="Pages not found";
+$message[32][4]="Codici di errori HTTP";
+$message[33][4]="Netscape versione";
+$message[34][4]="MS Internet Explorer versione";
+$message[35][4]="Last Update";
+$message[36][4]="Connesso al sito da";
+$message[37][4]="Origine";
+$message[38][4]="Indirizzo diretto / segnalibro";
+$message[39][4]="Link da un  Newsgroup";
+$message[40][4]="Link da un motore di ricerca";
+$message[41][4]="Link da una pagina esterna (altri siti eccetto i motori di ricerca)";
+$message[42][4]="Link da una pagina interna (altre pagine dello stesso sito)";
+$message[43][4]="Parole chiave usate dai motori di ricerca";
+$message[44][4]="Kb";
+$message[45][4]="Indirizzi IP non risolti";
+$message[46][4]="Sistemi operativi non conosciuti (Campo di riferimento)";
+$message[47][4]="Richiesto un URL ma non trovato (HTTP codice 404)";
+$message[48][4]="Indirizzo IP";
+$message[49][4]="Errori&nbsp;Punteggio";
+$message[50][4]="Browser sconosciuti (Campo di riferimento)";
+$message[51][4]="Visite di robots";
+$message[52][4]="visite/visitatori";
+$message[53][4]="Visite di Robots/Spiders";
+$message[54][4]="Analizzatore gratuito in tempo reale dei file di log per statistiche avanzate";
+$message[55][4]="it";
+$message[56][4]="Pagine";
+$message[57][4]="Hits";
+$message[58][4]="Versioni";
+$message[59][4]="Sistema Operativo";
+$message[60][4]="Genn";
+$message[61][4]="Febb";
+$message[62][4]="Mar";
+$message[63][4]="Apr";
+$message[64][4]="Magg";
+$message[65][4]="Giu";
+$message[66][4]="Lug";
+$message[67][4]="Ago";
+$message[68][4]="Sep";
+$message[69][4]="Oct";
+$message[70][4]="Nov";
+$message[71][4]="Dic";
+$message[72][4]="Italian it.png";
+$message[73][4]="Giorno statistiche";
+$message[74][4]="Update";
+
+# German
+$message[0][5]="Unbekannt";
+$message[1][5]="IP konnte nicht aufgeloest werden";
+$message[2][5]="Sonstige";
+$message[3][5]="Details";
+$message[4][5]="Tag";
+$message[5][5]="Monat";
+$message[6][5]="Jahr";
+$message[7][5]="Statistik ueber";
+$message[8][5]="Erster Besuch";
+$message[9][5]="Letzter Besuch";
+$message[10][5]="Anzahl der Besucher";
+$message[11][5]="Verschiedene Besucher";
+$message[12][5]="Besuch";
+$message[13][5]="Suchbegriffe";
+$message[14][5]="Haeufigkeit";
+$message[15][5]="Prozent";
+$message[16][5]="Verkehr Gesamt";
+$message[17][5]="Laender";
+$message[18][5]="Besucher";
+$message[19][5]="Besuchte Seiten";
+$message[20][5]="Durchschn. Tagesverlauf";
+$message[21][5]="Browser";
+$message[22][5]="HTTP Status";
+$message[23][5]="Referrer";
+$message[24][5]="Suchbegriffe";
+$message[25][5]="Laender aus denen die Besucher kamen";
+$message[26][5]="Hosts";
+$message[27][5]="Seiten";
+$message[28][5]="Unterschiedliche Seiten";
+$message[29][5]="Zugriffe";
+$message[30][5]="Weitere Suchbegriffe";
+$message[31][5]="Pages not found";
+$message[32][5]="HTTP Status Meldungen";
+$message[33][5]="Netscape Versionen";
+$message[34][5]="MS Internet Explorer Versionen";
+$message[35][5]="Last Update";
+$message[36][5]="Woher die Besucher kamen";
+$message[37][5]="Ursprung";
+$message[38][5]="Direkter Zugriff / Bookmarks";
+$message[39][5]="Link von einer Newsgroup";
+$message[40][5]="Link von einer Suchmaschine";
+$message[41][5]="Link von einer ext. Seite (nicht Suchmaschine!)";
+$message[42][5]="Link von einer Seite innerhalb der Web Site";
+$message[43][5]="Suchbegriffen (Suchmaschinen)";
+$message[44][5]="Kb";
+$message[45][5]="Unaufgeloeste IP Adresse";
+$message[46][5]="Unbekanntes Betriebssystem [Referer]";
+$message[47][5]="Nicht auffindbare Seiten [Error 404]";
+$message[48][5]="IP Addresse";
+$message[49][5]="Fehler / Hits";
+$message[50][5]="Unbekannter Browser [Referer]";
+$message[51][5]="Besuche von Robots / Spider";
+$message[52][5]="Besuche / Besucher";
+$message[53][5]="Besuche von Robots / Spider";
+$message[54][5]="Programm zur erweiterten Echtzeitanalyse von Log-Dateien";
+$message[55][5]="von";
+$message[56][5]="Seiten";
+$message[57][5]="Hits";
+$message[58][5]="Ausführungen";
+$message[59][5]="Unbekanntes Betriebssystem";
+$message[60][5]="Jan";
+$message[61][5]="Feb";
+$message[62][5]="Mar";
+$message[63][5]="Abr";
+$message[64][5]="Mai";
+$message[65][5]="Jun";
+$message[66][5]="Juli";
+$message[67][5]="Aug";
+$message[68][5]="Sep";
+$message[69][5]="Oct";
+$message[70][5]="Nov";
+$message[71][5]="Dez";
+$message[72][5]="German de.png";
+$message[73][5]="Tag statistik";
+$message[74][5]="Update";
+
+# Polish
+$PageCode[6]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-2\">";
+$message[0][6]="Nieznany";
+$message[1][6]="Nieznany (brak odwzorowania IP w DNS)";
+$message[2][6]="Inni";
+$message[3][6]="Szczegó³y...";
+$message[4][6]="Dzieñ";
+$message[5][6]="Miesi±c";
+$message[6][6]="Rok";
+$message[7][6]="Statystyki";
+$message[8][6]="Pierwsza wizyta";
+$message[9][6]="Ostatnia wizyta";
+$message[10][6]="Ilo¶æ wizyt";
+$message[11][6]="Unikalnych go¶ci";
+$message[12][6]="wizyt";
+$message[13][6]="S³owo kluczowe";
+$message[14][6]="Szukanych";
+$message[15][6]="Procent";
+$message[16][6]="Podsumowanie";
+$message[17][6]="Domeny/Kraje";
+$message[18][6]="Go¶cie";
+$message[19][6]="Stron/URL-i";
+$message[20][6]="Rozk³ad godzinny";
+$message[21][6]="Przegl±darki";
+$message[22][6]="B³êdy HTTP";
+$message[23][6]="Referenci";
+$message[24][6]="Wyszukiwarki&nbsp;-&nbsp;s³owa&nbsp;kluczowe";
+$message[25][6]="Domeny/narodowo¶æ Internautów";
+$message[26][6]="hosty";
+$message[27][6]="strony";
+$message[28][6]="ró¿nych stron";
+$message[29][6]="Dostêp";
+$message[30][6]="Inne s³owa";
+$message[31][6]="Pages not found";
+$message[32][6]="Kody b³êdów HTTP";
+$message[33][6]="Wersje Netscape'a";
+$message[34][6]="Wersje MS IE";
+$message[35][6]="Last Update";
+$message[36][6]="¬ród³a po³±czeñ";
+$message[37][6]="Pochodzenie";
+$message[38][6]="Dostêp bezpo¶redni lub z Ulubionych/Bookmarków";
+$message[39][6]="Link z grupy dyskusyjnej";
+$message[40][6]="Link z zagranicznej wyszukiwarki internetowej";
+$message[41][6]="Link zewnêtrzny";
+$message[42][6]="Link wewnêtrzny (z serwera na którym jest strona)";
+$message[43][6]="S³owa kluczowe u¿yte w wyszukiwarkach internetowcyh";
+$message[44][6]="Kb";
+$message[45][6]="Nieznany (brak odwzorowania IP w DNS)";
+$message[46][6]="Nieznany system operacyjny";
+$message[47][6]="Nie znaleziony (B³±d HTTP 404)";
+$message[48][6]="Adres IP";
+$message[49][6]="Ilo¶æ&nbsp;b³êdów";
+$message[50][6]="Nieznane przegl±darki";
+$message[51][6]="Roboty sieciowe";
+$message[52][6]="wizyt/go¶ci";
+$message[53][6]="Roboty sieciowe";
+$message[54][6]="Darmowy analizator logów on-line";
+$message[55][6]="z";
+$message[56][6]="Strony";
+$message[57][6]="¯±dania";
+$message[58][6]="Wersje";
+$message[59][6]="Systemy operacyjne";
+$message[60][6]="Styczeñ";
+$message[61][6]="Luty";
+$message[62][6]="Marzec";
+$message[63][6]="Kwiecieñ";
+$message[64][6]="Maj";
+$message[65][6]="Czerwiec";
+$message[66][6]="Lipiec";
+$message[67][6]="Sierpieñ";
+$message[68][6]="Wrzesieñ";
+$message[69][6]="Pa¼dziernik";
+$message[70][6]="Listopad";
+$message[71][6]="Grudzieñ";
+$message[72][6]="Polish pl.png";
+$message[73][6]="Dzieñ Statystyki";
+$message[74][6]="Update";
+
+# Greek (simos@hellug.gr)
+$PageCode[7]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-7\">";
+$message[0][7]="¶ãíùóôï";
+$message[1][7]="¶ãíùóôï (ìç áíáãíùñéóìÝíç ip)";
+$message[2][7]="¶ëëïé";
+$message[3][7]="ÅìöÜíéóç ëåðôïìåñéþí";
+$message[4][7]="ÇìÝñá";
+$message[5][7]="ÌÞíáò";
+$message[6][7]="¸ôïò";
+$message[7][7]="ÓôáôéóôéêÜ ôïõ";
+$message[8][7]="Ðñþôç åðßóêåøç";
+$message[9][7]="Ôåëåõôáßá åðßóêåøç";
+$message[10][7]="Áñéèìüò åðéóêÝøåùí";
+$message[11][7]="Ìïíáäéêïß åðéóêÝðôåò";
+$message[12][7]="Åðßóêåøç";
+$message[13][7]="ËÝîç-êëåéäß";
+$message[14][7]="ÁíáæÞôçóç";
+$message[15][7]="Ðïóïóôü";
+$message[16][7]="Ðåñßëçøç Êõêëïöïñßáò";
+$message[17][7]="ÅðéèÝìáôá/×þñåò";
+$message[18][7]="ÅðéóêÝðôåò";
+$message[19][7]="Óåëßäåò/URL";
+$message[20][7]="¿ñåò";
+$message[21][7]="ÖõëëïìåôñçôÝò";
+$message[22][7]="ÓöÜëìáôá HTTP";
+$message[23][7]="ÐáñáðÝìðôåò";
+$message[24][7]="ËåêôéêÜ&nbsp;ÁíáæÞôçóçò";
+$message[25][7]="ÅðéèÝìáôá/÷þñåò åðéóêåðôþí";
+$message[26][7]="óõóôÞìáôá";
+$message[27][7]="óåëßäåò";
+$message[28][7]="äéáöïñåôéêÝò óåëßäåò";
+$message[29][7]="Ðñüóâáóç";
+$message[30][7]="¶ëëá ëåêôéêÜ";
+$message[31][7]="Pages not found";
+$message[32][7]="Êùäéêïß óöáëìÜôùí HTTP";
+$message[33][7]="Åêäüóåéò Netscape";
+$message[34][7]="Åêäüóåéò MS Internet Explorer";
+$message[35][7]="Last Update";
+$message[36][7]="Óýíäåóç óôï ôüðï áðü";
+$message[37][7]="ÐñïÝëåõóç";
+$message[38][7]="Åõèýò óýíäåóìïò / ÁãáðçìÝíá";
+$message[39][7]="Óýíäåóìïò áðü ÏìÜäá ÓõæçôÞóåùí";
+$message[40][7]="Óýíäåóìïò áðü Ìç÷áíÞ ÁíáæÞôçóçò ôïõ Internet";
+$message[41][7]="Óýíäåóìïò áðü åîùôåñéêÞ óåëßäá (Üëëïé äéêôõáêïß ôüðïé åêôüò ìç÷áíþí áíáæÞôçóçò)";
+$message[42][7]="Óýíäåóìïò áðü åóùôåñéêÞ óåëßäá (Üëëç óåëßäá óôïí ßäéï äéêôõáêü ôüðï)";
+$message[43][7]="ëåêôéêÜ ðïõ ÷ñçóéìïðïéÞèçêáí óå ìç÷áíÝò áíáæÞôçóçò";
+$message[44][7]="Kb";
+$message[45][7]="Äéåõèýíóåéò IP ðïõ äåí áíáãíùñßóôçêáí";
+$message[46][7]="¶ãíùóôï ëåéôïõñãéêü óýóôçìá (Ðåäßï ðáñÜðåìøçò)";
+$message[47][7]="Áðáéôïýìåíá áëëÜ ÷ùñßò íá âñåèïýí URL (Êþäéêáò HTTP 404)";
+$message[48][7]="Äéåýèõíóç IP";
+$message[49][7]="ÓõìâÜíôá&nbsp;ÓöáëìÜôùí";
+$message[50][7]="¶ãíùóôïé öõëëïìåôñçôÝò (Ðåäßï ðáñÜðåìøçò)";
+$message[51][7]="Ñïìðüô åðéóêÝðôåò";
+$message[52][7]="åðéóêÝøåéò/åðéóêÝðôç";
+$message[53][7]="ÅðéóêÝðôåò Ñïìðüô/ÁñÜ÷íåò";
+$message[54][7]="Åëåýèåñïò áíáëõôÞò êáôáãñáöþí ðñáãìáôéêïý ÷ñüíïõ ãéá ðñïçãìÝíá óôáôéóôéêÜ êßíçóçò WWW";
+$message[55][7]="áðü";
+$message[56][7]="Óåëßäåò";
+$message[57][7]="Åðéôõ÷ßåò";
+$message[58][7]="Åêäüóåéò";
+$message[59][7]="Ë/Ó";
+$message[60][7]="Éáí";
+$message[61][7]="Öåâ";
+$message[62][7]="ÌÜñ";
+$message[63][7]="Áðñ";
+$message[64][7]="ÌÜú";
+$message[65][7]="Éïýí";
+$message[66][7]="Éïýë";
+$message[67][7]="Áýã";
+$message[68][7]="Óåð";
+$message[69][7]="Ïêô";
+$message[70][7]="ÍïÝ";
+$message[71][7]="Äåê";
+$message[72][7]="Greek gr.png";
+$message[73][7]="Daily statistics";
+$message[74][7]="Update";
+
+# Czech (js@fsid.cvut.cz)
+$PageCode[8]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=iso-8859-2\">";
+$message[0][8]="Neznámý";
+$message[1][8]="Neznámý (nepøelo¾ená IP)";
+$message[2][8]="Ostatní";
+$message[3][8]="Prohlédnout detaily";
+$message[4][8]="Den";
+$message[5][8]="Mìsíc";
+$message[6][8]="Rok";
+$message[7][8]="Statistika pro";
+$message[8][8]="První náv¹tìva";
+$message[9][8]="Poslední náv¹tìva";
+$message[10][8]="Poèet náv¹tìv";
+$message[11][8]="Unikátní náv¹tìvy";
+$message[12][8]="Náv¹tìva";
+$message[13][8]="Výrazy";
+$message[14][8]="Hledání";
+$message[15][8]="Procenta";
+$message[16][8]="Provoz celkem";
+$message[17][8]="Domény / zemì";
+$message[18][8]="Náv¹tìvy";
+$message[19][8]="Stránky/URL";
+$message[20][8]="Hodiny";
+$message[21][8]="Browsery (prohlí¾eèe)";
+$message[22][8]="HTTP Chyby";
+$message[23][8]="Reference";
+$message[24][8]="Hledané výrazy";
+$message[25][8]="Náv¹tìvy domény/zemì";
+$message[26][8]="hosts";
+$message[27][8]="stránek";
+$message[28][8]="rùzné stránky";
+$message[29][8]="Pøistup";
+$message[30][8]="Jiná slova";
+$message[31][8]="Pages not found";
+$message[32][8]="Chybové kódy HTTP ";
+$message[33][8]="Verze Netscape";
+$message[34][8]="Verze MS Internet Explorer";
+$message[35][8]="Last Update";
+$message[36][8]="Konekce z";
+$message[37][8]="Pùvod";
+$message[38][8]="Pøímá adresa / Oblíbené (Bookmark)";
+$message[39][8]="Odkaz z Newsgroup";
+$message[40][8]="Odkaz z Internetového vyhledávaèe";
+$message[41][8]="Odkaz z jiné stránky (jiné stránky ne¾ vyhledávaèe)";
+$message[42][8]="Odkaz z vlastní stránky (jiná stránka na serveru)";
+$message[43][8]="výrazy pou¾ité ve vyhledávaèi";
+$message[44][8]="Kb";
+$message[45][8]="Nepøelo¾ená IP adresa";
+$message[46][8]="Neznámy OS (polo¾ka Referer)";
+$message[47][8]="Po¾adované, ale nenalezené URL (HTTP 404)";
+$message[48][8]="IP Addresa";
+$message[49][8]="Chyba&nbsp;Dotazù";
+$message[50][8]="neznámý browser (prohlí¾eè) (polo¾ka Referer)";
+$message[51][8]="Náv¹tìvnost robotù";
+$message[52][8]="náv¹tìv/náv¹tìvníka";
+$message[53][8]="Roboti";
+$message[54][8]="Volnì ¹iøitelný nástroj pro analýzu web statistik";
+$message[55][8]="z";
+$message[56][8]="Stránek";
+$message[57][8]="Hity";
+$message[58][8]="Verze";
+$message[59][8]="OS";
+$message[60][8]="Led";
+$message[61][8]="Úno";
+$message[62][8]="Bøe";
+$message[63][8]="Dub";
+$message[64][8]="Kvì";
+$message[65][8]="Èer";
+$message[66][8]="Èvc";
+$message[67][8]="Srp";
+$message[68][8]="Záø";
+$message[69][8]="Øíj";
+$message[70][8]="Lis";
+$message[71][8]="Pro";
+$message[72][8]="Czech cz.png";
+$message[73][8]="Daily statistics";
+$message[74][8]="Update";
+
+# Portuguese
+$message[0][9]="Desconhecido";
+$message[1][9]="Desconhecido (ip não resolvido)";
+$message[2][9]="Outros visitantes";
+$message[3][9]="Ver detalhes";
+$message[4][9]="Dia";
+$message[5][9]="Mês";
+$message[6][9]="Ano";
+$message[7][9]="Estatísticas de";
+$message[8][9]="Primeira visita";
+$message[9][9]="Última visita";
+$message[10][9]="Numero de visitas";
+$message[11][9]="Visitantes únicos";
+$message[12][9]="Visita";
+$message[13][9]="Palavra chave";
+$message[14][9]="Pesquisa";
+$message[15][9]="Por cento";
+$message[16][9]="Resumo de Tráfego";
+$message[17][9]="Domínios/Países";
+$message[18][9]="Visitantes";
+$message[19][9]="Páginas/URL";
+$message[20][9]="Horas";
+$message[21][9]="Browsers";
+$message[22][9]="Erros HTTP";
+$message[23][9]="Referencias";
+$message[24][9]="Busca&nbsp;Palavras";
+$message[25][9]="Visitas domínios/países";
+$message[26][9]="hosts";
+$message[27][9]="páginas";
+$message[28][9]="paginas diferentes";
+$message[29][9]="Acesso";
+$message[30][9]="Outras palavras";
+$message[31][9]="Pages not found";
+$message[32][9]="Erros HTTP";
+$message[33][9]="Versões Netscape";
+$message[34][9]="Versões MS Internet Explorer";
+$message[35][9]="Last Update";
+$message[36][9]="Connectado a partir de";
+$message[37][9]="Origem";
+$message[38][9]="Endereço directo / Favoritos";
+$message[39][9]="Link de um  Newsgroup";
+$message[40][9]="Link de um Motor de Busca";
+$message[41][9]="Link de uma página externa (outros sites que não motores de busca)";
+$message[42][9]="Link de uma página interna (outras páginas no mesmo site)";
+$message[43][9]="palavras usadas em motores de busca";
+$message[44][9]="Kb";
+$message[45][9]="Endereço IP não resolvido";
+$message[46][9]="SO Desconhecido (Campo Referer)";
+$message[47][9]="URLs solicitadas e não encontradas (HTTP code 404)";
+$message[48][9]="Endereço IP";
+$message[49][9]="Erro&nbsp;Hits";
+$message[50][9]="Browsers Desconhecidos(Campo Referer)";
+$message[51][9]="Motores Visitantes";
+$message[52][9]="visitas/visitante";
+$message[53][9]="Motores/Spiders visitantes";
+$message[54][9]="Ferramenta de Análise de ficheiros de log em realtime para estatísticas avançadas";
+$message[55][9]="de";
+$message[56][9]="Páginas";
+$message[57][9]="Hits";
+$message[58][9]="Versões";
+$message[59][9]="SO";
+$message[60][9]="Jan";
+$message[61][9]="Fev";
+$message[62][9]="Mar";
+$message[63][9]="Abr";
+$message[64][9]="Mai";
+$message[65][9]="Jun";
+$message[66][9]="Jul";
+$message[67][9]="Ago";
+$message[68][9]="Set";
+$message[69][9]="Out";
+$message[70][9]="Nov";
+$message[71][9]="Dez";
+$message[72][9]="Portuguese pt.png";
+$message[73][9]="Daily statistics";
+$message[74][9]="Update";
+
+# Korean
+$PageCode[10]="<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=euc-kr\">";
+$message[0][10]="¾Ë¼ö¾øÀ½";
+$message[1][10]="¾Ë¼ö¾øÀ½(¾Ë¼ö¾ø´Â ip)";
+$message[2][10]="±âŸ";
+$message[3][10]="ÀÚ¼¼È÷ º¸±â";
+$message[4][10]="ÀÏ";
+$message[5][10]="&nbsp;";
+$message[6][10]="³â";
+$message[7][10]="Åë°è";
+$message[8][10]="óÀ½ Á¢¼Ó";
+$message[9][10]="¸¶Áö¸· Á¢¼Ó";
+$message[10][10]="Á¢¼Ó È¸¼ö";
+$message[11][10]="Á¢¼ÓÀÚº°";
+$message[12][10]="Á¢¼Ó";
+$message[13][10]="Ű¿öµå";
+$message[14][10]="ã±â";
+$message[15][10]="ÆÛ¼¾Æ®";
+$message[16][10]="À¥ Åë°è ¿ä¾à";
+$message[17][10]="µµ¸ÞÀÎ/±¹°¡";
+$message[18][10]="¹æ¹®ÀÚ";
+$message[19][10]="ÆäÀÌÁö/URL";
+$message[20][10]="½Ã°£";
+$message[21][10]="ºê¶ó¿ìÀú";
+$message[22][10]="HTTP ¿¡·¯";
+$message[23][10]="·¹ÆÛ·¯";
+$message[24][10]="ã±â&nbsp;Ű¿öµå";
+$message[25][10]="¹æ¹®ÀÚ µµ¸ÞÀÎ/±¹°¡";
+$message[26][10]="È£½ºÆ®";
+$message[27][10]="ÆäÀÌÁö";
+$message[28][10]="´Ù¸¥ ÆäÀÌÁö";
+$message[29][10]="Àбâ È¸¼ö";
+$message[30][10]="´Ù¸¥ ´Ü¾î";
+$message[31][10]="»ç¿ëÇÑ ºê¶ó¿ìÀú";
+$message[32][10]="HTTP ¿¡·¯ ÄÚµå";
+$message[33][10]="³Ý½ºÄÉÀÌÇÁ ¹öÀü";
+$message[34][10]="MS ÀÎÅͳݠÀͽºÇ÷η¯ ¹öÀü";
+$message[35][10]="Last Update";
+$message[36][10]="Á¢¼Ó »çÀÌÆ®º° Åë°è";
+$message[37][10]="ÁÖ¼Ò";
+$message[38][10]="Á÷Á¢ ÁÖ¼Ò / ºÏ¸¶Å©";
+$message[39][10]="´º½ºÅ©·ì¿¡¼­ ¿¬°á";
+$message[40][10]="³»ºÎ °Ë»ö ¿£Áø¿¡¼­ ¿¬°á";
+$message[41][10]="¿ÜºÎÆäÀÌÁö¿¡¼­ ¿¬°á (°Ë»ö¿£ÁøÀ» Á¦¿ÜÇÑ ´Ù¸¥ À¥»çÀÌÆ®)";
+$message[42][10]="³»ºÎÆäÀÌÁö¿¡¼­ ¸µÅ©(°°Àº »çÀÌÆ®ÀÇ ´Ù¸¥ ÆäÀÌÁö)";
+$message[43][10]="°Ë»ö¿£Áø¿¡¼­ »ç¿ëµÈ Å°¿öµå";
+$message[44][10]="»ç¿ë·®(Kb)";
+$message[45][10]="¾Ë¼ö¾ø´Â IP ÁÖ¼Ò";
+$message[46][10]="¾Ë¼ö¾ø´Â OS (Æä·¯ÆÛ Çʵå)";
+$message[47][10]="Á¸ÀçÇÏÁö ¾Ê´Â URL Á¢¼Ó½Ãµµ (HTTP ÄÚµå 404)";
+$message[48][10]="IP ÁÖ¼Ò";
+$message[49][10]="Á¢¼Ó¿À·ù È¸¼ö";
+$message[50][10]="¾Ë¼ö¾ø´Â ºê¶ó¿ìÀú (·¹ÆÛ·¯ Çʵå)";
+$message[51][10]="¹æ¹®ÁßÀΠ·Î¹öÆ®";
+$message[52][10]="Á¢¼Ó/¹æ¹®ÀÚ";
+$message[53][10]="·Î¹öÆ®/½ºÆÄÀÌ´õ ¹æ¹®ÀÚ";
+$message[54][10]="Áøº¸ÀûÀΠÀ¥ Åë°è¸¦ À§ÇÑ ÀÚÀ¯·Î¿î ½Ç½Ã°£ ·Î±×ÆÄÀÏ";
+$message[55][10]="-";
+$message[56][10]="ÀÐÀº ÆäÀÌÁö";
+$message[57][10]="Á¶È¸¼ö";
+$message[58][10]="¹öÀü";
+$message[59][10]="OS";
+$message[60][10]="1¿ù";
+$message[61][10]="2¿ù";
+$message[62][10]="3¿ù";
+$message[63][10]="4¿ù";
+$message[64][10]="5¿ù";
+$message[65][10]="6¿ù";
+$message[66][10]="7¿ù";
+$message[67][10]="8¿ù";
+$message[68][10]="9¿ù";
+$message[69][10]="10¿ù";
+$message[70][10]="11¿ù";
+$message[71][10]="12¿ù";
+$message[72][10]="Korean kr.png";
+$message[73][10]="ÀÏÀÏ Åë°è";
+$message[74][10]="Update";
 
 
 #-------------------------------------------------------
@@ -156,379 +1531,173 @@ $AddOn=0;
 #-------------------------------------------------------
 
 sub html_head {
-       if ($HTMLOutput) {
-               # Write head section
-               my $sitetoanalyze=$SiteToAnalyze; $sitetoanalyze =~ s/\\\./\./g;
-               print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
-           print "<html>\n";
-               print "<head>\n";
-               if ($PageCode) { print "<META HTTP-EQUIV=\"content-type\" CONTENT=\"text/html; charset=$PageCode\"\n"; }                # If not defined, iso-8859-1 is used in major countries
-               if ($Expires)  {
-                       my $date=localtime(time()+$Expires);
-                       print "<META HTTP-EQUIV=\"expires\" CONTENT=\"$date\">\n";
-               } 
-               print "<meta http-equiv=\"description\" content=\"$PROG - Advanced Web Statistics for $sitetoanalyze\">\n";
-               print "<meta http-equiv=\"keywords\" content=\"$sitetoanalyze, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\">\n";
-               print "<meta name=\"robots\" content=\"index,follow\">\n";
-               print "<title>$Message[7] $sitetoanalyze</title>\n";
-               # Do not use " for number in a style section
-               print <<EOF;
-<STYLE TYPE="text/css">
+       print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";
+    print "<html>\n";
+       print "<head>\n";
+       if ($PageCode[$Lang] ne "") { print "$PageCode[$Lang]\n"; }             # If not defined, iso-8859-1 is used in major countries
+       print "<meta http-equiv=\"description\" content=\"$PROG - Advanced Web Statistics for $SiteToAnalyze\">\n";
+       print "<meta http-equiv=\"keywords\" content=\"$SiteToAnalyze, free, advanced, realtime, web, server, logfile, log, analyzer, analysis, statistics, stats, perl, analyse, performance, hits, visits\">\n";
+       print "<meta name=\"robots\" content=\"index,follow\">\n";
+       print "<title>$message[7][$Lang] $SiteToAnalyze</title>\n";
+       print "<STYLE TYPE=text/css>
 <!--
 BODY { font: 12px arial, verdana, helvetica, sans-serif; background-color: #$color_Background; }
-TH { font: 12px arial, verdana, helvetica, sans-serif; text-align:center; color: #$color_titletext; }
-TH.AWL { font-size: 14px; font-weight: bold; }
-TD { font: 12px arial, verdana, helvetica, sans-serif; text-align:center; color: #$color_text; }
-.AWL { font: 12px arial, verdana, helvetica, sans-serif; text-align:left; color: #$color_text; }
-A { font: 12px arial, verdana, helvetica, sans-serif; }
-A:link    { color: #$color_link; text-decoration: none; }
-A:visited { color: #$color_link; text-decoration: none; }
-A:hover   { color: #$color_hover; text-decoration: underline; }
+TH { font: 12px arial, verdana, helvetica, sans-serif; text-align:center; color: #$color_titletext }
+TD { font: 12px arial, verdana, helvetica, sans-serif; text-align:center; color: #$color_text }
+TD.LEFT { font: 12px arial, verdana, helvetica, sans-serif; text-align:left; color: #$color_text }
+A { font: normal 12px arial, verdana, helvetica, sans-serif; text-decoration: underline; }
+A:link  { color: #$color_link; }
+A:hover { color: #$color_hover; }
 DIV { font: 12px arial,verdana,helvetica; text-align:justify; }
 .TABLEBORDER { background-color: #$color_TableBorder; }
-.TABLEFRAME { background-color: #$color_TableBG; padding: 2px 2px 2px 2px; margin-top: 0 }
+.TABLEFRAME { background-color: #$color_TableBG; }
 .TABLEDATA { background-color: #$color_Background; }
-.TABLETITLEFULL  { font: 14px verdana, arial, helvetica, sans-serif; font-weight: bold; background-color: #$color_TableBGTitle; text-align: center; width: 66%; margin-bottom: 0; padding: 2px; }
-.TABLETITLEBLANK { font: 14px verdana, arial, helvetica, sans-serif; background-color: #$color_Background; }
-.CTooltip { position:absolute; top:0px; left:0px; z-index:2; width:280; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color: #FFFFE6; padding: 8px; border: 1px solid black; }
-
-.tablecontainer  { width: 100% }
-\@media projection {
-.tablecontainer { page-break-before: always; }
-}
-
+.TABLETITLE { font: bold 16px verdana, arial, helvetica, sans-serif; color: #$color_TableTitle; background-color: #$color_TableBGTitle; }
+.CTooltip { position:absolute; top:0px; left:0px; z-index:2; width:280; visibility:hidden; font: 8pt MS Comic Sans,arial,sans-serif; background-color:#FFFFE6; padding: 8px; border: 1px solid black; }
 //-->
-</STYLE>
-EOF
-               print "</head>\n\n";
-               print "<body>\n";
-               # Write logo, flags and product name
-               if ($ShowHeader) {
-                       print "<table WIDTH=$WIDTH>\n";
-                       print "<tr valign=middle><td class=AWL width=150 style=\"font: 18px arial,verdana,helvetica; font-weight: bold\">AWStats\n";
-                       Show_Flag_Links($Lang);
-                       print "</td>\n";
-                       if ($LogoLink =~ "http://awstats.sourceforge.net") {
-                               print "<td class=AWL width=450><a href=\"$LogoLink\" target=\"_newawstats\"><img src=\"$DirIcons/other/$Logo\" border=0 alt=\"$PROG Official Web Site\" title=\"$PROG Official Web Site\"></a></td></tr>\n";
-                       }
-                       else {
-                               print "<td class=AWL width=450><a href=\"$LogoLink\" target=\"_newawstats\"><img src=\"$DirIcons/other/$Logo\" border=0></a></td></tr>\n";
-                       }
-                       #print "<b><font face=\"verdana\" size=1><a href=\"$HomeURL\">HomePage</a> &#149\; <a href=\"javascript:history.back()\">Back</a></font></b><br>\n";
-                       print "<tr><td class=AWL colspan=2>$Message[54]</td></tr>\n";
-                       print "</table>\n";
-                       #print "<hr>\n";
-               }
-       }
+</STYLE>\n
+";
+       print "</head>\n\n";
+       print "<body>\n";
 }
 
 
 sub html_end {
-       if ($HTMLOutput) {
-               print "$CENTER<br><br><br>\n";
-               print "<FONT COLOR=\"#$color_text\"><b>Advanced Web Statistics $VERSION</b> - <a href=\"http://awstats.sourceforge.net\" target=\"_newawstats\">Created by $PROG</a><br>\n";
-               print "<br>\n";
-               print "$HTMLEndSection</font>\n";
-               print "</body>\n";
-               print "</html>\n";
-       }
+       print "$CENTER<br><font size=1><b>Advanced Web Statistics $VERSION</b> - <a href=\"http://awstats.sourceforge.net\" target=_newawstats>Created by $PROG</a></font><br>\n";
+       print "<br>\n";
+       print "$HTMLEndSection\n";
+       print "</body>\n";
+       print "</html>\n";
 }
 
 sub tab_head {
-       my $title=shift;
-       my $tooltip=shift;
-       print "<div class=\"tablecontainer\">\n";
-       print "<TABLE CLASS=\"TABLEFRAME\" BORDER=0 CELLPADDING=2 CELLSPACING=0 WIDTH=\"100%\">\n";
-       if ($tooltip) {
-               print "<TR><TD class=\"TABLETITLEFULL\" onmouseover=\"ShowTooltip($tooltip);\" onmouseout=\"HideTooltip($tooltip);\">$title </TD>";
-       }
-       else {
-               print "<TR><TD class=\"TABLETITLEFULL\">$title </TD>";
-       }
-       print "<TD class=\"TABLETITLEBLANK\"> &nbsp; </TD></TR>\n";
-       print "<TR><TD colspan=2><TABLE CLASS=\"TABLEDATA\" BORDER=1 BORDERCOLOR=\"#$color_TableBorder\" CELLPADDING=2 CELLSPACING=0 WIDTH=\"100%\">";
+       print "
+               <TABLE CLASS=TABLEBORDER BORDER=0 CELLPADDING=1 CELLSPACING=0 WIDTH=$WIDTH>
+               <TR><TD>
+               <TABLE CLASS=TABLEFRAME BORDER=0 CELLPADDING=3 CELLSPACING=0 WIDTH=100%>
+               <TR><TH COLSPAN=2 CLASS=TABLETITLE>$tab_titre</TH></TR>
+               <TR><TD COLSPAN=2>
+               <TABLE CLASS=TABLEDATA BORDER=1 CELLPADDING=2 CELLSPACING=0 WIDTH=100%>
+               ";
 }
 
 sub tab_end {
        print "</TABLE></TD></TR></TABLE>";
-       print "</div>\n\n";
+       print "</TD></TR></TABLE>\n\n";
+}
+
+sub UnescapeURLParam {
+       $_[0] =~ tr/\+/ /s;
+       $_[0] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;             # Decode encoded URL
+       $_[0] =~ tr/\'\/=\(\)\"/      /s;
 }
 
 sub error {
-       my $message=shift;
-       my $secondmessage=shift;
-       my $thirdmessage=shift;
-       debug("$message $secondmessage $thirdmessage",1);
-       if ($message =~ /^Format error$/) {
-               # Files seems to have bad format
-               if ($HTMLOutput) { print "<br><br>\n"; }
-               print "AWStats did not found any valid log lines that match your <b>LogFormat</b> parameter, in the ${NbOfLinesForCorruptedLog}th first non commented lines read of your log.<br>\n";
-               print "<font color=#880000>Your log file <b>$thirdmessage</b> must have a bad format or <b>LogFormat</b> parameter setup does not match this format.</font><br><br>\n";
-               print "Your <b>LogFormat</b> parameter is <b>$LogFormat</b>, this means each line in your log file need to have ";
-               if ($LogFormat == 1) {
-                       print "<b>\"combined log format\"</b> like this:<br>\n";
-                       print ($HTMLOutput?"<font color=#888888><i>":"");
-                       print "111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"\n";
-                       print ($HTMLOutput?"</i></font><br><br>":"");
-               }
-               if ($LogFormat == 2) {
-                       print "<b>\"MSIE Extended W3C log format\"</b> like this:<br>\n";
-                       print ($HTMLOutput?"<font color=#888888><i>":"");
-                       print "date time c-ip c-username cs-method cs-uri-sterm sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)\n";
-                       print ($HTMLOutput?"</i></font><br><br>":"");
-               }
-               if ($LogFormat == 3) {
-                       print "<b>\"WebStar native log format\"</b><br>\n";
-               }
-               if ($LogFormat == 4) {
-                       print "<b>\"common log format\"</b> like this:<br>\n";
-                       print ($HTMLOutput?"<font color=#888888><i>":"");
-                       print "111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234\n";
-                       print ($HTMLOutput?"</i></font><br><br>":"");
-               }
-               if ($LogFormat != 1 && $LogFormat != 2 && $LogFormat != 3 && $LogFormat != 4) {
-                       print "the following personalised log format:<br>\n";
-                       print ($HTMLOutput?"<font color=#888888><i>":"");
-                       print "$LogFormat\n";
-                       print ($HTMLOutput?"</i></font><br><br>":"");
-               }
-               print "And this is a sample of what AWStats found in your log (the record number $NbOfLinesForCorruptedLog in your log):\n";
-               print ($HTMLOutput?"<br><font color=#888888><i>":"");
-               print "$secondmessage";
-               print ($HTMLOutput?"</i></font><br><br>":"");
-               print "\n";
-               #print "Note: If your $NbOfLinesForCorruptedLog first lines in your log files are wrong because they are ";
-               #print "result of a worm virus attack, you can increase the NbOfLinesForCorruptedLog parameter in config file.\n";
-               #print "\n";
-       }                       
-       else {
-               print ($HTMLOutput?"<br><font color=#880000>":"");
-               print "$message";
-               print ($HTMLOutput?"</font><br>":"");
-               print "\n";
-       }
-       if ($message ne "" && $message !~ /History file.*is corrupted/) { 
-               if ($HTMLOutput) { print "<br><b>\n"; }
-               print "Setup ($FileConfig file, web server or logfile permissions) may be wrong.\n";
-               if ($HTMLOutput) { print "</b><br>\n"; }
-               print "See README.TXT for informations on how to setup $PROG.\n";
-       }
-       if ($HTMLOutput) { print "</BODY>\n</HTML>\n"; }
-    exit 1;
+       if ($_[0] ne "") { print "<font color=#880000>$_[0].</font><br>\n"; }
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "<br><b>\n"; }
+       if ($_[0] ne "") { print "Setup ($FileConfig file, web server or logfile permissions) may be wrong.\n"; }
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "</b><br>\n"; }
+       print "See README.TXT for informations on how to setup $PROG.\n";
+       if ($ENV{"GATEWAY_INTERFACE"} ne "") { print "</BODY>\n</HTML>\n"; }
+    die;
 }
 
 sub warning {
-       my $messagestring=shift;
-       debug("$messagestring",1);
        if ($WarningMessages == 1) {
-       if ($HTMLOutput) {
-               $messagestring =~ s/\n/\<br\>/g;
-               print "$messagestring<br>\n";
-       }
-       else {
-               print "$messagestring\n";
-       }
+       print "$_[0]<br>\n";
+#              print "You can now remove this warning by changing <b>\$WarningMessages=1</b> parameter into <b>\$WarningMessages=0</b> in $PROG config file (<b>$FileConfig</b>).<br><br>\n"; }
        }
 }
 
-# Parameters : $string $level   
-# Input      : $Debug = required level   $DEBUGFORCED = required level forced
 sub debug {
        my $level = $_[1] || 1;
-       if ($DEBUGFORCED >= $level) { 
-               my $debugstring = $_[0];
-               if ($DEBUGFORCED >= $level) {
-                       if (! $DebugResetDone) { open(DEBUGFORCEDFILE,"debug.log"); close DEBUGFORCEDFILE; chmod 0666,"debug.log"; $DebugResetDone=1; }
-                       open(DEBUGFORCEDFILE,">>debug.log");
-                       print DEBUGFORCEDFILE localtime(time)." - $$ - DEBUG $level - $debugstring\n";
-                       close DEBUGFORCEDFILE;
-               }
-       }
-       if ($Debug >= $level) { 
-               my $debugstring = $_[0];
-               if ($HTMLOutput) { $debugstring =~ s/^ /&nbsp&nbsp /; $debugstring .= "<br>"; }
-               print localtime(time)." - DEBUG $level - $debugstring\n";
-       }
+       if ($Debug >= $level) { print "DEBUG $level - ".time." : $_[0]<br>\n"; }
+       0;
 }
 
 sub SkipHost {
-       foreach my $match (@SkipHosts) { if ($_[0] =~ /$match/i) { return 1; } }
+       foreach $match (@SkipHosts) { if ($_[0] =~ /$match/i) { return 1; } }
        0; # Not in @SkipHosts
 }
 
 sub SkipFile {
-       foreach my $match (@SkipFiles) { if ($_[0] =~ /$match/i) { return 1; } }
-       0; # Not in @SkipFiles
+       foreach $match (@SkipFiles) { if ($_[0] =~ /$match/i) { return 1; } }
+       0; # Not inside @SkipFiles
 }
 
 sub OnlyFile {
-       if (! $OnlyFiles[0]) { return 1; }
-       foreach my $match (@OnlyFiles) { if ($_[0] =~ /$match/i) { return 1; } }
-       0; # Not in @OnlyFiles
-}
-
-sub SkipDNSLookup {
-       foreach my $match (@SkipDNSLookupFor) { if ($_[0] =~ /$match/i) { return 1; } }
-       0; # Not in @SkipDNSLookupFor
+       if ($OnlyFiles[0] eq "") { return 1; }
+       foreach $match (@OnlyFiles) { if ($_[0] =~ /$match/i) { return 1; } }
+       0; # Not inside @OnlyFiles
 }
 
-sub DayOfWeek {
-       my ($day, $month, $year) = @_;
-       &debug("DayOfWeek for $day $month $year",4);
-       if ($month < 3) {  $month += 10;  $year--; } 
-       else { $month -= 2; }
-       my $cent = sprintf("%1i",($year/100));
-       my $y = ($year % 100);
-       my $dw = (sprintf("%1i",(2.6*$month)-0.2) + $day + $y + sprintf("%1i",($y/4)) + sprintf("%1i",($cent/4)) - (2*$cent)) % 7;
-       $dw += 7 if ($dw<0);
-       &debug(" is $dw",4);
-       return $dw;
-}
-
-sub DateIsValid {
-       my ($day, $month, $year) = @_;
-       &debug("DateIsValid for $day $month $year",4);
-       if ($day < 1) { return 0; }
-       if ($month==1 || $month==3 || $month==5 || $month==7 || $month==8 || $month==10 || $month==12) {
-               if ($day > 31) { return 0; }            
-       }
-       if ($month==4 || $month==6 || $month==9 || $month==11) {
-               if ($day > 30) { return 0; }
-       }
-       if ($month==2) {
-               if ($day > 28) { return 0; }            
-       }
-       return 1;
-}
-
-
-
-#------------------------------------------------------------------------------
-# Function:     read config file
-# Input:               $DIR $PROG $SiteConfig
-# Output:              Global variables
-#------------------------------------------------------------------------------
 sub Read_Config_File {
-       $FileConfig="";
-       if (! $SiteConfig) { $SiteConfig=$ENV{"SERVER_NAME"}; }         # For backward compatibility
-       foreach my $dir ("$DIR","/etc/opt/awstats","/etc/awstats","/etc") {
-               my $searchdir=$dir;
-               if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-               if ($FileConfig eq "") { if (open(CONFIG,"$searchdir$PROG.$SiteConfig.conf")) { $FileConfig="$searchdir$PROG.$SiteConfig.conf"; $FileSuffix=".$SiteConfig"; } }
-               if ($FileConfig eq "") { if (open(CONFIG,"$searchdir$PROG.conf"))  { $FileConfig="$searchdir$PROG.conf"; $FileSuffix=""; } }
-       }
-       if ($FileConfig eq "") { error("Error: Couldn't open config file \"$PROG.$SiteConfig.conf\" nor \"$PROG.conf\" : $!"); }
+       $FileConfig="";$DirConfig=$DIR;if (($DirConfig ne "") && (!($DirConfig =~ /\/$/)) && (!($DirConfig =~ /\\$/)) ) { $DirConfig .= "/"; }
+       if (open(CONFIG,"$DirConfig$PROG.$SiteToAnalyze.conf")) { $FileConfig="$DirConfig$PROG.$SiteToAnalyze.conf"; $FileSuffix=".$SiteToAnalyze"; }
+       if ($FileConfig eq "") { if (open(CONFIG,"$DirConfig$PROG.conf"))  { $FileConfig="$DirConfig$PROG.conf"; $FileSuffix=""; } }
+       if ($FileConfig eq "") { error("Error: Couldn't open config file \"$PROG.$SiteToAnalyze.conf\" nor \"$PROG.conf\" : $!"); }
        &debug("Call to Read_Config_File [FileConfig=\"$FileConfig\"]");
-       my $foundNotPageList=0;
        while (<CONFIG>) {
                chomp $_; s/\r//;
-               $_ =~ s/#.*//;                                                  # Remove comments
-               my @felter=split(/=/,$_,2);                                             
-               my $param=$felter[0]||next;                             # If not a param=value, try with next line
-               my $value=$felter[1];
-               $param =~ s/^\s+//; $param =~ s/\s+$//;
-               $value =~ s/^\s+//; $value =~ s/\s+$//;
+               $_ =~ s/#.*//;                                                          # Remove comments
+               $_ =~ tr/\t /  /s;                                                      # Change all blanks into " "
+               $_ =~ s/=/§/; @felter=split(/§/,$_);            # Change first "=" into "§" to split
+               $param=$felter[0]; $value=$felter[1];
+               $value =~ s/^ *//; $value =~ s/ *$//;
                $value =~ s/^\"//; $value =~ s/\"$//;
-               $value =~ s/__SITE__/$SiteConfig/s;             # You can use __SITE__ in config file, if you want to have one generic config file for several config
                # Read main section
                if ($param =~ /^LogFile/) {
                        $LogFile=$value;
-                       if ($LogFile =~ /%([YMDH]+)-(\d*)/) {
-                               my $timephase=$2;
-                               debug(" Found a time phase of $timephase hour in log file name",1);
-                               # Get older time
-                               ($oldersec,$oldermin,$olderhour,$olderday,$oldermonth,$olderyear,$olderwday) = localtime($nowtime-($timephase*3600));
-                               $olderweekofmonth=int($olderday/7);
-                               $olderdaymod=$olderday%7;
-                               $olderwday++;
-                               if ($olderdaymod <= $olderwday) { if (($olderwday != 7) || ($olderdaymod != 0)) { $olderweekofmonth=$olderweekofmonth+1; } }
-                               if ($olderdaymod >  $olderwday) { $olderweekofmonth=$olderweekofmonth+2; }
-                               $olderweekofmonth = "0$olderweekofmonth";
-                               if ($olderyear < 100) { $olderyear+=2000; } else { $olderyear+=1900; }
-                               $oldersmallyear=$olderyear;$oldersmallyear =~ s/^..//;
-                               if (++$oldermonth < 10) { $oldermonth = "0$oldermonth"; }
-                               if ($olderday < 10) { $olderday = "0$olderday"; }
-                               if ($olderhour < 10) { $olderhour = "0$olderhour"; }
-                               if ($oldermin < 10) { $oldermin = "0$oldermin"; }
-                               if ($oldersec < 10) { $oldersec = "0$oldersec"; }
-                               $LogFile =~ s/%YYYY-$timephase/$olderyear/g;
-                               $LogFile =~ s/%YY-$timephase/$oldersmallyear/g;
-                               $LogFile =~ s/%MM-$timephase/$oldermonth/g;
-                               $LogFile =~ s/%DD-$timephase/$olderday/g;
-                               $LogFile =~ s/%HH-$timephase/$olderhour/g;
-                               $LogFile =~ s/%WM-$timephase/$olderweekofmonth/g;
-                       }
-                       # Replace %YYYY %YY %MM %DD %HH with current value. Kept for backward compatibility.
+                       # Replace %YYYY %YY %MM %DD %HH with current value
                        $LogFile =~ s/%YYYY/$nowyear/g;
                        $LogFile =~ s/%YY/$nowsmallyear/g;
                        $LogFile =~ s/%MM/$nowmonth/g;
                        $LogFile =~ s/%DD/$nowday/g;
                        $LogFile =~ s/%HH/$nowhour/g;
-                       $LogFile =~ s/%WM/$nowweekofmonth/g;
-                       debug(" LogFile=$LogFile",1);
                        next;
                        }
-               if ($param =~ /^LogFormat/)             { $LogFormat=$value; next; }
-               if ($param =~ /^DirData/)               { 
-                       $DirData=$value; 
-                       if (! -d $DirData) {
-                               error("Error: AWStats database directory defined in config file by 'DirData' parameter ($DirData) does not exist or is not writable.");
-                               }
-                       }
-               if ($param =~ /^DirCgi/)                { $DirCgi=$value; next; }
-               if ($param =~ /^DirIcons/)              { $DirIcons=$value; next; }
-               if ($param =~ /^DNSLookup/)             { $DNSLookup=$value; next; }
+               if ($param =~ /^LogFormat/)            { $LogFormat=$value; next; }
                if ($param =~ /^AllowToUpdateStatsFromBrowser/) { $AllowToUpdateStatsFromBrowser=$value; next; }
-               if ($param =~ /^SiteDomain/)                    { $SiteDomain=$value; next; }
                if ($param =~ /^HostAliases/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)           { $HostAliases[$i]=$elem; $i++; }
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $HostAliases[$i]=$elem; $i++; }
                        next;
                        }
-               # Read optional section
-               if ($param =~ /^PurgeLogFile/)          { $PurgeLogFile=$value; next; }
-               if ($param =~ /^ArchiveLogRecords/)     { $ArchiveLogRecords=$value; next; }
-               if ($param =~ /^KeepBackupOfHistoricFiles/)     { $KeepBackupOfHistoricFiles=$value; next; }
-               if ($param =~ /^Lang/)                  { $Lang=$value; next; }
-               if ($param =~ /^DirLang/)               { $DirLang=$value; next; }
-               if ($param =~ /^DefaultFile/)           { $DefaultFile=$value; next; }
                if ($param =~ /^SkipHosts/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)       { $SkipHosts[$i]=$elem; $i++; }
-                       next;
-                       }
-               if ($param =~ /^SkipDNSLookupFor/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)       { $SkipDNSLookupFor[$i]=$elem; $i++; }
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $SkipHosts[$i]=$elem; $i++; }
                        next;
                        }
                if ($param =~ /^SkipFiles/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)       { $SkipFiles[$i]=$elem; $i++; }
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $SkipFiles[$i]=$elem; $i++; }
                        next;
                        }
                if ($param =~ /^OnlyFiles/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)       { $OnlyFiles[$i]=$elem; $i++; }
-                       next;
-                       }
-               if ($param =~ /^NotPageList/) {
-                       my @felter=split(/\s+/,$value);
-                       $i=0; foreach $elem (@felter)       { $NotPageList[$i]=$elem; $i++; }
-                       $foundNotPageList=1;
+                       @felter=split(/ /,$value);
+                       $i=0; foreach $elem (@felter)      { $OnlyFiles[$i]=$elem; $i++; }
                        next;
                        }
-               if ($param =~ /^URLWithQuery/)          { $URLWithQuery=$value; next; }
+               if ($param =~ /^DirData/)               { $DirData=$value; next; }
+               if ($param =~ /^DirCgi/)                { $DirCgi=$value; next; }
+               if ($param =~ /^DirIcons/)              { $DirIcons=$value; next; }
+               if ($param =~ /^DNSLookup/)             { $DNSLookup=$value; next; }
+               if ($param =~ /^PurgeLogFile/)          { $PurgeLogFile=$value; next; }
+               if ($param =~ /^ArchiveLogRecords/)     { $ArchiveLogRecords=$value; next; }
+               # Read optional section
+               if ($param =~ /^Lang/)                  { $Lang=$value; next; }
+               if ($param =~ /^DefaultFile/)           { $DefaultFile=$value; next; }
                if ($param =~ /^WarningMessages/)       { $WarningMessages=$value; next; }
-               if ($param =~ /^NbOfLinesForCorruptedLog/) { $NbOfLinesForCorruptedLog=$value; next; }
-               if ($param =~ /^FirstDayOfWeek/)        { $FirstDayOfWeek=$value; next; }
+               if ($param =~ /^ShowLinksOnUrl/)        { $ShowLinksOnUrl=$value; next; }
+               if ($param =~ /^ShowFlagLinks/)         { $ShowFlagLinks=$value; next; }
+               if ($param =~ /^HTMLEndSection/)        { $HTMLEndSection=$value; next; }
+               if ($param =~ /^BarWidth/)              { $BarWidth=$value; next; }
+               if ($param =~ /^BarHeight/)             { $BarHeight=$value; next; }
                if ($param =~ /^MaxNbOfDomain/)         { $MaxNbOfDomain=$value; next; }
                if ($param =~ /^MaxNbOfHostsShown/)     { $MaxNbOfHostsShown=$value; next; }
                if ($param =~ /^MinHitHost/)            { $MinHitHost=$value; next; }
                if ($param =~ /^MaxNbOfRobotShown/)     { $MaxNbOfRobotShown=$value; next; }
                if ($param =~ /^MinHitRobot/)           { $MinHitRobot=$value; next; }
-               if ($param =~ /^MaxNbOfLoginShown/)     { $MaxNbOfLoginShown=$value; next; }
-               if ($param =~ /^MinHitLogin/)           { $MinHitLogin=$value; next; }
                if ($param =~ /^MaxNbOfPageShown/)      { $MaxNbOfPageShown=$value; next; }
                if ($param =~ /^MinHitFile/)            { $MinHitFile=$value; next; }
                if ($param =~ /^MaxNbOfRefererShown/)   { $MaxNbOfRefererShown=$value; next; }
@@ -536,662 +1705,127 @@ sub Read_Config_File {
                if ($param =~ /^MaxNbOfKeywordsShown/)  { $MaxNbOfKeywordsShown=$value; next; }
                if ($param =~ /^MinHitKeyword/)         { $MinHitKeyword=$value; next; }
                if ($param =~ /^SplitSearchString/)     { $SplitSearchString=$value; next; }
-               if ($param =~ /^Expires/)               { $Expires=$value; next; }
-               if ($param =~ /^ShowHeader/)             { $ShowHeader=$value; next; }
-               if ($param =~ /^ShowMenu/)               { $ShowMenu=$value; next; }
-               if ($param =~ /^ShowMonthDayStats/)      { $ShowMonthDayStats=$value; next; }
-               if ($param =~ /^ShowDaysOfWeekStats/)    { $ShowDaysOfWeekStats=$value; next; }
-               if ($param =~ /^ShowHoursStats/)         { $ShowHoursStats=$value; next; }
-               if ($param =~ /^ShowDomainsStats/)       { $ShowDomainsStats=$value; next; }
-               if ($param =~ /^ShowHostsStats/)         { $ShowHostsStats=$value; next; }
-               if ($param =~ /^ShowAuthenticatedUsers/) { $ShowAuthenticatedUsers=$value; next; }
-               if ($param =~ /^ShowRobotsStats/)        { $ShowRobotsStats=$value; next; }
-               if ($param =~ /^ShowPagesStats/)         { $ShowPagesStats=$value; next; }
-               if ($param =~ /^ShowFileTypesStats/)     { $ShowFileTypesStats=$value; next; }
-               if ($param =~ /^ShowFileSizesStats/)     { $ShowFileSizesStats=$value; next; }
-               if ($param =~ /^ShowBrowsersStats/)      { $ShowBrowsersStats=$value; next; }
-               if ($param =~ /^ShowOSStats/)            { $ShowOSStats=$value; next; }
-               if ($param =~ /^ShowOriginStats/)        { $ShowOriginStats=$value; next; }
-               if ($param =~ /^ShowKeyphrasesStats/)    { $ShowKeyphrasesStats=$value; next; }
-               if ($param =~ /^ShowKeywordsStats/)      { $ShowKeywordsStats=$value; next; }
-               if ($param =~ /^ShowCompressionStats/)   { $ShowCompressionStats=$value; next; }
-               if ($param =~ /^ShowHTTPErrorsStats/)    { $ShowHTTPErrorsStats=$value; next; }
-               if ($param =~ /^ShowFlagLinks/)         { $ShowFlagLinks=$value; next; }
-               if ($param =~ /^ShowLinksOnUrl/)        { $ShowLinksOnUrl=$value; next; }
-               if ($param =~ /^MaxLengthOfURL/)        { $MaxLengthOfURL=$value; next; }
-               if ($param =~ /^DetailedReportsOnNewWindows/) { $DetailedReportsOnNewWindows=$value; next; }
-               if ($param =~ /^HTMLHeadSection/)       { $HTMLHeadSection=$value; next; }
-               if ($param =~ /^HTMLEndSection/)        { $HTMLEndSection=$value; next; }
-               if ($param =~ /^BarWidth/)              { $BarWidth=$value; next; }
-               if ($param =~ /^BarHeight/)             { $BarHeight=$value; next; }
-               if ($param =~ /^Logo$/)                 { $Logo=$value; next; }
-               if ($param =~ /^LogoLink/)              { $LogoLink=$value; next; }
+               if ($param =~ /^Logo/)                  { $Logo=$value; next; }
                if ($param =~ /^color_Background/)      { $color_Background=$value; next; }
                if ($param =~ /^color_TableTitle/)      { $color_TableTitle=$value; next; }
                if ($param =~ /^color_TableBGTitle/)    { $color_TableBGTitle=$value; next; }
                if ($param =~ /^color_TableRowTitle/)   { $color_TableRowTitle=$value; next; }
                if ($param =~ /^color_TableBGRowTitle/) { $color_TableBGRowTitle=$value; next; }
-               if ($param =~ /^color_TableBG/)         { $color_TableBG=$value; next; }
                if ($param =~ /^color_TableBorder/)     { $color_TableBorder=$value; next; }
+               if ($param =~ /^color_TableBG/)         { $color_TableBG=$value; next; }
                if ($param =~ /^color_link/)            { $color_link=$value; next; }
                if ($param =~ /^color_hover/)           { $color_hover=$value; next; }
                if ($param =~ /^color_text/)            { $color_text=$value; next; }
                if ($param =~ /^color_titletext/)       { $color_titletext=$value; next; }
-               if ($param =~ /^color_weekend/)         { $color_weekend=$value; next; }
-               if ($param =~ /^color_u/)               { $color_u=$value; next; }
                if ($param =~ /^color_v/)               { $color_v=$value; next; }
+               if ($param =~ /^color_w/)               { $color_w=$value; next; }
                if ($param =~ /^color_p/)               { $color_p=$value; next; }
                if ($param =~ /^color_h/)               { $color_h=$value; next; }
                if ($param =~ /^color_k/)               { $color_k=$value; next; }
                if ($param =~ /^color_s/)               { $color_s=$value; next; }
        }
        close CONFIG;
-       # If parameter NotPageList not found. Init for backward compatibility
-       if (! $foundNotPageList) {
-               $NotPageList[0]="gif";
-               $NotPageList[1]="jpg";
-               $NotPageList[2]="jpeg";
-               $NotPageList[3]="png";
-               $NotPageList[4]="bmp";
-       }
-}
-
-
-#------------------------------------------------------------------------------
-# Function:     Get the reference databases
-# Parameter:   None
-# Return value: None
-# Input:               $DIR
-# Output:              Arrays and Hash tables are defined 
-#------------------------------------------------------------------------------
-sub Read_Ref_Data {
-       foreach my $file ("browsers.pl","domains.pl","operating_systems.pl","robots.pl","search_engines.pl") {
-               my $FileRef="";
-               foreach my $dir ("${DIR}db","./db") {
-                       my $searchdir=$dir;
-                       if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-                       if ($FileRef eq "") {
-                               if (-s "${searchdir}${file}") {
-                                       $FileRef="${searchdir}${file}";
-                                       &debug("Call to Read_Ref_Data [FileRef=\"$FileRef\"]");
-                                       require "$FileRef";
-                               }
-                       }
-               }
-               if ($FileRef eq "") {
-                       my $filetext=$file; $filetext =~ s/\.pl$//; $filetext =~ s/_/ /g;
-                       &warning("Warning: Can't read file \"$file\" ($filetext detection will not work correctly).\nCheck if file is in ${DIR}db directory and is readable.");
-               }
-       }
-       # Sanity check.
-       if (@OSArrayID != scalar keys %OSHashID) { error("Error: Not same number of records of OSArray (".(@OSArrayID).") and/or OSHashID (".(scalar keys %OSHashID).") in source file."); }
-       if (@BrowsersArrayID != scalar keys %BrowsersHashIDLib) { error("Error: Not same number of records of BrowsersArrayID (".(@BrowsersArrayID).") and/or BrowsersHashIDLib (".(scalar keys %BrowsersHashIDLib).") in source file."); }
-}
-
-
-
-#------------------------------------------------------------------------------
-# Function:     Get the messages for a specified language
-# Parameter:   Language id
-# Input:               $DIR
-# Output:              $Message table is defined in memory
-#------------------------------------------------------------------------------
-sub Read_Language_Data {
-       my $FileLang="";
-       foreach my $dir ("$DirLang","${DIR}lang","./lang") {
-               my $searchdir=$dir;
-               if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-               if ($FileLang eq "") { if (open(LANG,"${searchdir}awstats-$_[0].txt")) { $FileLang="${searchdir}awstats-$_[0].txt"; } }
-       }
-       # If file not found, we try english
-       foreach my $dir ("$DirLang","${DIR}lang","./lang") {
-               my $searchdir=$dir;
-               if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-               if ($FileLang eq "") { if (open(LANG,"${searchdir}awstats-en.txt")) { $FileLang="${searchdir}awstats-en.txt"; } }
-       }
-       &debug("Call to Read_Language_Data [FileLang=\"$FileLang\"]");
-       if ($FileLang ne "") {
-               $i = 0;
-               while (<LANG>) {
-                       chomp $_; s/\r//;
-                       if ($_ =~ /^PageCode/i) {
-                               $_ =~ s/^PageCode=//i;
-                               $_ =~ s/#.*//;                                                          # Remove comments
-                               $_ =~ tr/\t /  /s;                                                      # Change all blanks into " "
-                               $_ =~ s/^\s+//; $_ =~ s/\s+$//;
-                               $_ =~ s/^\"//; $_ =~ s/\"$//;
-                               $PageCode = $_;
-                       }
-                       if ($_ =~ /^Message/i) {
-                               $_ =~ s/^Message\d+=//i;
-                               $_ =~ s/#.*//;                                                          # Remove comments
-                               $_ =~ tr/\t /  /s;                                                      # Change all blanks into " "
-                               $_ =~ s/^\s+//; $_ =~ s/\s+$//;
-                               $_ =~ s/^\"//; $_ =~ s/\"$//;
-                               $Message[$i] = $_;
-                               $i++;
-                       }
-               }
-       }
-       else {
-               &warning("Warning: Can't find language files for \"$_[0]\". English will be used.");
-       }
-       close(LANG);
-}
-
-
-#------------------------------------------------------------------------------
-# Function:     Get the tooltip texts for a specified language
-# Parameter:   Language id
-# Input:               None
-# Output:              Full tooltips text
-#------------------------------------------------------------------------------
-sub Read_Language_Tooltip {
-       my $FileLang="";
-       foreach my $dir ("$DirLang","${DIR}lang","./lang") {
-               my $searchdir=$dir;
-               if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-               if ($FileLang eq "") { if (open(LANG,"${searchdir}awstats-tt-$_[0].txt")) { $FileLang="${searchdir}awstats-tt-$_[0].txt"; } }
-       }
-       # If file not found, we try english
-       foreach my $dir ("$DirLang","${DIR}lang","./lang") {
-               my $searchdir=$dir;
-               if (($searchdir ne "") && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
-               if ($FileLang eq "") { if (open(LANG,"${searchdir}awstats-tt-en.txt")) { $FileLang="${searchdir}awstats-tt-en.txt"; } }
-       }
-       &debug("Call to Read_Language_Tooltip [FileLang=\"$FileLang\"]");
-       if ($FileLang ne "") {
-               my $aws_VisitTimeout = $VisitTimeOut/10000*60;
-               my $aws_NbOfRobots = scalar keys %RobotHashIDLib;
-               my $aws_NbOfSearchEngines = scalar keys %SearchEnginesHashIDLib;
-               while (<LANG>) {
-                       # Search for replaceable parameters
-                       s/#PROG#/$PROG/;
-                       s/#MaxNbOfRefererShown#/$MaxNbOfRefererShown/;
-                       s/#VisitTimeOut#/$aws_VisitTimeout/;
-                       s/#RobotArray#/$aws_NbOfRobots/;
-                       s/#SearchEnginesArray#/$aws_NbOfSearchEngines/;
-                       print "$_";
-               }
-       }
-       close(LANG);
 }
 
-
-#--------------------------------------------------------------------
-# Input: All lobal variables
-# Ouput: Change on some global variables
-#--------------------------------------------------------------------
 sub Check_Config {
        &debug("Call to Check_Config");
        # Main section
-       if ($LogFormat =~ /^[\d]$/ && $LogFormat !~ /[1-5]/)  { error("Error: LogFormat parameter is wrong. Value is '$LogFormat' (should be 1,2,3,4,5 or a 'personalised AWtats log format string')"); }
-       if ($DNSLookup !~ /[0-1]/)                            { error("Error: DNSLookup parameter is wrong. Value is '$DNSLookup' (should be 0 or 1)"); }
-       if ($AllowToUpdateStatsFromBrowser !~ /[0-1]/)  { $AllowToUpdateStatsFromBrowser=1; }   # For compatibility, is 1 if not defined
+       if ($LogFormat =~ /^[\d]$/ && $LogFormat !~ /[1-3]/)  { error("Error: LogFormat parameter is wrong. Value is '$LogFormat' (should be 1 or 2 or a 'personalised AWtats log format string')"); }
+       if ($DNSLookup !~ /[0-1]/)             { error("Error: DNSLookup parameter is wrong. Value is '$DNSLookup' (should be 0 or 1)"); }
        # Optional section
-       if ($PurgeLogFile !~ /[0-1]/)                   { $PurgeLogFile=0; }
-       if ($ArchiveLogRecords !~ /[0-1]/)              { $ArchiveLogRecords=1; }
-       if ($KeepBackupOfHistoricFiles !~ /[0-1]/)      { $KeepBackupOfHistoricFiles=0; }
-       if (! $DefaultFile)                                     { $DefaultFile="index.html"; }
-       if ($URLWithQuery !~ /[0-1]/)                   { $URLWithQuery=0; }
-       if ($WarningMessages !~ /[0-1]/)                { $WarningMessages=1; }
-       if ($NbOfLinesForCorruptedLog !~ /[\d]+/ || $NbOfLinesForCorruptedLog<1)                { $NbOfLinesForCorruptedLog=50; }
-       if ($FirstDayOfWeek !~ /[0-1]/)                 { $FirstDayOfWeek=1; }
-       if ($MaxNbOfDomain !~ /^[\d]+/ || $MaxNbOfDomain<1)                     { $MaxNbOfDomain=25; }
-       if ($MaxNbOfHostsShown !~ /^[\d]+/ || $MaxNbOfHostsShown<1)                     { $MaxNbOfHostsShown=25; }
-       if ($MinHitHost !~ /^[\d]+/ || $MinHitHost<1)                           { $MinHitHost=1; }
-       if ($MaxNbOfLoginShown !~ /^[\d]+/ || $MaxNbOfLoginShown<1)                     { $MaxNbOfLoginShown=10; }
-       if ($MinHitLogin !~ /^[\d]+/ || $MinHitLogin<1)                         { $MinHitLogin=1; }
-       if ($MaxNbOfRobotShown !~ /^[\d]+/ || $MaxNbOfRobotShown<1)                     { $MaxNbOfRobotShown=25; }
-       if ($MinHitRobot !~ /^[\d]+/ || $MinHitRobot<1)                         { $MinHitRobot=1; }
-       if ($MaxNbOfPageShown !~ /^[\d]+/ || $MaxNbOfPageShown<1)                       { $MaxNbOfPageShown=25; }
-       if ($MinHitFile !~ /^[\d]+/ || $MinHitFile<1)                           { $MinHitFile=1; }
-       if ($MaxNbOfRefererShown !~ /^[\d]+/ || $MaxNbOfRefererShown<1)                 { $MaxNbOfRefererShown=25; }
-       if ($MinHitRefer !~ /^[\d]+/ || $MinHitRefer<1)                         { $MinHitRefer=1; }
-       if ($MaxNbOfKeywordsShown !~ /^[\d]+/ || $MaxNbOfKeywordsShown<1)               { $MaxNbOfKeywordsShown=25; }
-       if ($MinHitKeyword !~ /^[\d]+/ || $MinHitKeyword<1)                     { $MinHitKeyword=1; }
-       if ($MaxNbOfLastHosts !~ /^[\d]+/ || $MaxNbOfLastHosts<1)                       { $MaxNbOfLastHosts=1000; }
-       if ($SplitSearchString !~ /[0-1]/)              { $SplitSearchString=0; }
-       if ($Expires !~ /^[\d]+/)                               { $Expires=0; }
-       if ($ShowHeader !~ /[0-1]/)                     { $ShowHeader=1; }
-       if ($ShowMenu !~ /[0-1]/)                       { $ShowMenu=1; }
-       if ($ShowMonthDayStats !~ /[0-1]/)              { $ShowMonthDayStats=1; }
-       if ($ShowDaysOfWeekStats !~ /[0-1]/)            { $ShowDaysOfWeekStats=1; }
-       if ($ShowHoursStats !~ /[0-1]/)                 { $ShowHoursStats=1; }
-       if ($ShowDomainsStats !~ /[0-1]/)               { $ShowDomainsStats=1; }
-       if ($ShowHostsStats !~ /[0-1]/)                 { $ShowHostsStats=1; }
-       if ($ShowAuthenticatedUsers !~ /[0-1]/)         { $ShowAuthenticatedUsers=1; }
-       if ($ShowRobotsStats !~ /[0-1]/)                { $ShowRobotsStats=1; }
-       if ($ShowPagesStats !~ /[0-1]/)                 { $ShowPagesStats=1; }
-       if ($ShowFileTypesStats !~ /[0-1]/)             { $ShowFileTypesStats=1; }
-       if ($ShowFileSizesStats !~ /[0-1]/)             { $ShowFileSizesStats=1; }
-       if ($ShowBrowsersStats !~ /[0-1]/)              { $ShowBrowsersStats=1; }
-       if ($ShowOSStats !~ /[0-1]/)                    { $ShowOSStats=1; }
-       if ($ShowOriginStats !~ /[0-1]/)                { $ShowOriginStats=1; }
-       if ($ShowKeyphrasesStats !~ /[0-1]/)            { $ShowKeyphrasesStats=1; }
-       if ($ShowKeywordsStats !~ /[0-1]/)              { $ShowKeywordsStats=1; }
-       if ($ShowCompressionStats !~ /[0-1]/)           { $ShowCompressionStats=1; }
-       if ($ShowHTTPErrorsStats !~ /[0-1]/)            { $ShowHTTPErrorsStats=1; }
-       if ($ShowLinksOnURL !~ /[0-1]/)                 { $ShowLinksOnURL=1; }
-       if ($MaxLengthOfURL !~ /^[\d+]/ || $MaxLengthOfURL<1) { $MaxLengthOfURL=72; }
-       if ($DetailedReportsOnNewWindows !~ /[0-1]/)    { $DetailedReportsOnNewWindows=1; }
-       if ($BarWidth !~ /^[\d]+/ || $BarWidth<1)               { $BarWidth=260; }
-       if ($BarHeight !~ /^[\d]+/ || $BarHeight<1)             { $BarHeight=180; }
-       if (! $Logo)                                            { $Logo="awstats_logo1.png"; }
-       if (! $LogoLink)                                        { $LogoLink="http://awstats.sourceforge.net"; }
-       $color_Background =~ s/#//g; if ($color_Background !~ /^[0-9|A-Z]+$/i)           { $color_Background="FFFFFF";  }
-       $color_TableBGTitle =~ s/#//g; if ($color_TableBGTitle !~ /^[0-9|A-Z]+$/i)       { $color_TableBGTitle="CCCCDD"; }
-       $color_TableTitle =~ s/#//g; if ($color_TableTitle !~ /^[0-9|A-Z]+$/i)           { $color_TableTitle="000000"; }
-       $color_TableBG =~ s/#//g; if ($color_TableBG !~ /^[0-9|A-Z]+$/i)                 { $color_TableBG="CCCCDD"; }
-       $color_TableRowTitle =~ s/#//g; if ($color_TableRowTitle !~ /^[0-9|A-Z]+$/i)     { $color_TableRowTitle="FFFFFF"; }
-       $color_TableBGRowTitle =~ s/#//g; if ($color_TableBGRowTitle !~ /^[0-9|A-Z]+$/i) { $color_TableBGRowTitle="ECECEC"; }
-       $color_TableBorder =~ s/#//g; if ($color_TableBorder !~ /^[0-9|A-Z]+$/i)         { $color_TableBorder="ECECEC"; }
-       $color_text =~ s/#//g; if ($color_text !~ /^[0-9|A-Z]+$/i)                               { $color_text="000000"; }
-       $color_titletext =~ s/#//g; if ($color_titletext !~ /^[0-9|A-Z]+$/i)                     { $color_titletext="000000"; }
-       $color_link =~ s/#//g; if ($color_link !~ /^[0-9|A-Z]+$/i)                               { $color_link="0011BB"; }
-       $color_hover =~ s/#//g; if ($color_hover !~ /^[0-9|A-Z]+$/i)                             { $color_hover="605040"; }
-       $color_weekend =~ s/#//g; if ($color_weekend !~ /^[0-9|A-Z]+$/i)                         { $color_weekend="EAEAEA"; }
-       $color_u =~ s/#//g; if ($color_u !~ /^[0-9|A-Z]+$/i)                                     { $color_u="FF9933"; }
-       $color_v =~ s/#//g; if ($color_v !~ /^[0-9|A-Z]+$/i)                                     { $color_v="F3F300"; }
-       $color_p =~ s/#//g; if ($color_p !~ /^[0-9|A-Z]+$/i)                                     { $color_p="4477DD"; }
-       $color_h =~ s/#//g; if ($color_h !~ /^[0-9|A-Z]+$/i)                                     { $color_h="66F0FF"; }
-       $color_k =~ s/#//g; if ($color_k !~ /^[0-9|A-Z]+$/i)                                     { $color_k="339944"; }
-       $color_s =~ s/#//g; if ($color_s !~ /^[0-9|A-Z]+$/i)                                     { $color_s="8888DD"; }
-       # Default value for Messages
-       if ($Message[0] eq "") { $Message[0]="Unknown"; }
-       if ($Message[1] eq "") { $Message[1]="Unknown (unresolved ip)"; }
-       if ($Message[2] eq "") { $Message[2]="Others"; }
-       if ($Message[3] eq "") { $Message[3]="View details"; }
-       if ($Message[4] eq "") { $Message[4]="Day"; }
-       if ($Message[5] eq "") { $Message[5]="Month"; }
-       if ($Message[6] eq "") { $Message[6]="Year"; }
-       if ($Message[7] eq "") { $Message[7]="Statistics of"; }
-       if ($Message[8] eq "") { $Message[8]="First visit"; }
-       if ($Message[9] eq "") { $Message[9]="Last visit"; }
-       if ($Message[10] eq "") { $Message[10]="Number of visits"; }
-       if ($Message[11] eq "") { $Message[11]="Unique visitors"; }
-       if ($Message[12] eq "") { $Message[12]="Visit"; }
-       if ($Message[13] eq "") { $Message[13]="different keywords"; }
-       if ($Message[14] eq "") { $Message[14]="Search"; }
-       if ($Message[15] eq "") { $Message[15]="Percent"; }
-       if ($Message[16] eq "") { $Message[16]="Traffic"; }
-       if ($Message[17] eq "") { $Message[17]="Domains/Countries"; }
-       if ($Message[18] eq "") { $Message[18]="Visitors"; }
-       if ($Message[19] eq "") { $Message[19]="Pages-URL"; }
-       if ($Message[20] eq "") { $Message[20]="Hours"; }
-       if ($Message[21] eq "") { $Message[21]="Browsers"; }
-       if ($Message[22] eq "") { $Message[22]="HTTP Errors"; }
-       if ($Message[23] eq "") { $Message[23]="Referers"; }
-       if ($Message[24] eq "") { $Message[24]="Search&nbsp;Keywords"; }
-       if ($Message[25] eq "") { $Message[25]="Visitors domains/countries"; }
-       if ($Message[26] eq "") { $Message[26]="hosts"; }
-       if ($Message[27] eq "") { $Message[27]="pages"; }
-       if ($Message[28] eq "") { $Message[28]="different pages"; }
-       if ($Message[29] eq "") { $Message[29]="Viewed pages"; }
-       if ($Message[30] eq "") { $Message[30]="Other words"; }
-       if ($Message[31] eq "") { $Message[31]="Pages not found"; }
-       if ($Message[32] eq "") { $Message[32]="HTTP Error codes"; }
-       if ($Message[33] eq "") { $Message[33]="Netscape versions"; }
-       if ($Message[34] eq "") { $Message[34]="IE versions"; }
-       if ($Message[35] eq "") { $Message[35]="Last Update"; }
-       if ($Message[36] eq "") { $Message[36]="Connect to site from"; }
-       if ($Message[37] eq "") { $Message[37]="Origin"; }
-       if ($Message[38] eq "") { $Message[38]="Direct address / Bookmarks"; }
-       if ($Message[39] eq "") { $Message[39]="Origin unknown"; }
-       if ($Message[40] eq "") { $Message[40]="Links from an Internet Search Engine"; }
-       if ($Message[41] eq "") { $Message[41]="Links from an external page (other web sites except search engines)"; }
-       if ($Message[42] eq "") { $Message[42]="Links from an internal page (other page on same site)"; }
-       if ($Message[43] eq "") { $Message[43]="Keywords used on search engines"; }
-       if ($Message[44] eq "") { $Message[44]="Kb"; }
-       if ($Message[45] eq "") { $Message[45]="Unresolved IP Address"; }
-       if ($Message[46] eq "") { $Message[46]="Unknown OS (Referer field)"; }
-       if ($Message[47] eq "") { $Message[47]="Required but not found URLs (HTTP code 404)"; }
-       if ($Message[48] eq "") { $Message[48]="IP Address"; }
-       if ($Message[49] eq "") { $Message[49]="Error&nbsp;Hits"; }
-       if ($Message[50] eq "") { $Message[50]="Unknown browsers (Referer field)"; }
-       if ($Message[51] eq "") { $Message[51]="Visiting robots"; }
-       if ($Message[52] eq "") { $Message[52]="visits/visitor"; }
-       if ($Message[53] eq "") { $Message[53]="Robots/Spiders visitors"; }
-       if ($Message[54] eq "") { $Message[54]="Free realtime logfile analyzer for advanced web statistics"; }
-       if ($Message[55] eq "") { $Message[55]="of"; }
-       if ($Message[56] eq "") { $Message[56]="Pages"; }
-       if ($Message[57] eq "") { $Message[57]="Hits"; }
-       if ($Message[58] eq "") { $Message[58]="Versions"; }
-       if ($Message[59] eq "") { $Message[59]="Operating Systems"; }
-       if ($Message[60] eq "") { $Message[60]="Jan"; }
-       if ($Message[61] eq "") { $Message[61]="Feb"; }
-       if ($Message[62] eq "") { $Message[62]="Mar"; }
-       if ($Message[63] eq "") { $Message[63]="Apr"; }
-       if ($Message[64] eq "") { $Message[64]="May"; }
-       if ($Message[65] eq "") { $Message[65]="Jun"; }
-       if ($Message[66] eq "") { $Message[66]="Jul"; }
-       if ($Message[67] eq "") { $Message[67]="Aug"; }
-       if ($Message[68] eq "") { $Message[68]="Sep"; }
-       if ($Message[69] eq "") { $Message[69]="Oct"; }
-       if ($Message[70] eq "") { $Message[70]="Nov"; }
-       if ($Message[71] eq "") { $Message[71]="Dec"; }
-       if ($Message[72] eq "") { $Message[72]="Navigation"; }
-       if ($Message[73] eq "") { $Message[73]="Files type"; }
-       if ($Message[74] eq "") { $Message[74]="Update now"; }
-       if ($Message[75] eq "") { $Message[75]="Bytes"; }
-       if ($Message[76] eq "") { $Message[76]="Back to main page"; }
-       if ($Message[77] eq "") { $Message[77]="Top"; }
-       if ($Message[78] eq "") { $Message[78]="dd mmm yyyy - HH:MM"; }
-       if ($Message[79] eq "") { $Message[79]="Filter"; }
-       if ($Message[80] eq "") { $Message[80]="Full list"; }
-       if ($Message[81] eq "") { $Message[81]="Hosts"; }
-       if ($Message[82] eq "") { $Message[82]="Known"; }
-       if ($Message[83] eq "") { $Message[83]="Robots"; }
-       if ($Message[84] eq "") { $Message[84]="Sun"; }
-       if ($Message[85] eq "") { $Message[85]="Mon"; }
-       if ($Message[86] eq "") { $Message[86]="Tue"; }
-       if ($Message[87] eq "") { $Message[87]="Wed"; }
-       if ($Message[88] eq "") { $Message[88]="Thu"; }
-       if ($Message[89] eq "") { $Message[89]="Fri"; }
-       if ($Message[90] eq "") { $Message[90]="Sat"; }
-       if ($Message[91] eq "") { $Message[91]="Days of week"; }
-       if ($Message[92] eq "") { $Message[92]="Who"; }
-       if ($Message[93] eq "") { $Message[93]="When"; }
-       if ($Message[94] eq "") { $Message[94]="Authenticated users"; }
-       if ($Message[95] eq "") { $Message[95]="Min"; }
-       if ($Message[96] eq "") { $Message[96]="Average"; }
-       if ($Message[97] eq "") { $Message[97]="Max"; }
-       if ($Message[98] eq "") { $Message[98]="Web compression"; }
-       if ($Message[99] eq "") { $Message[99]="Bandwith saved"; }
-       if ($Message[100] eq "") { $Message[100]="Before compression"; }
-       if ($Message[101] eq "") { $Message[101]="After compression"; }
-       if ($Message[102] eq "") { $Message[102]="Total"; }
-       if ($Message[103] eq "") { $Message[103]="different keyphrases"; }
-       if ($Message[104] eq "") { $Message[104]="Entry pages"; }
-       if ($Message[105] eq "") { $Message[105]="Code"; }
+       if ($AllowToUpdateStatsFromBrowser !~ /[0-1]/) { $AllowToUpdateStatsFromBrowser=1; }    # For compatibility, is 1 if not defined
+       if ($PurgeLogFile !~ /[0-1]/)          { $PurgeLogFile=0; }
+       if ($ArchiveLogRecords !~ /[0-1]/)     { $ArchiveLogRecords=1; }
+       if ($Lang !~ /[0-9]/)                  { $Lang=0; }
+       if ($DefaultFile eq "")                { $DefaultFile="index.html"; }
+       if ($WarningMessages !~ /[0-1]/)       { $WarningMessages=1; }
+       if ($ShowLinksOnURL !~ /[0-1]/)        { $ShowLinksOnURL=1; }
+       if ($ShowFlagLinks !~ /[0-1]/)         { $ShowFlagLinks=1; }
+       if ($BarWidth !~ /[\d]/)               { $BarWidth=260; }
+       if ($BarHeight !~ /[\d]/)              { $BarHeight=220; }
+       if ($MaxNbOfDomain !~ /[\d]/)          { $MaxNbOfDomain=25; }
+       if ($MaxNbOfHostsShown !~ /[\d]/)      { $MaxNbOfHostsShown=25; }
+       if ($MinHitHost !~ /[\d]/)             { $MinHitHost=1; }
+       if ($MaxNbOfRobotShown !~ /[\d]/)      { $MaxNbOfRobotShown=25; }
+       if ($MinHitRobot !~ /[\d]/)            { $MinHitRobot=1; }
+       if ($MaxNbOfPageShown !~ /[\d]/)       { $MaxNbOfPageShown=25; }
+       if ($MinHitFile !~ /[\d]/)             { $MinHitFile=1; }
+       if ($MaxNbOfRefererShown !~ /[\d]/)    { $MaxNbOfRefererShown=25; }
+       if ($MinHitRefer !~ /[\d]/)            { $MinHitRefer=1; }
+       if ($MaxNbOfKeywordsShown !~ /[\d]/)   { $MaxNbOfKeywordsShown=25; }
+       if ($MinHitKeyword !~ /[\d]/)          { $MinHitKeyword=1; }
+       if ($SplitSearchString !~ /[0-1]/)     { $SplitSearchString=0; }
+       if ($Logo eq "")                       { $Logo="awstats_logo1.png"; }
+       $color_Background =~ s/#//g; if ($color_Background !~ /[\d]/)           { $color_Background="FFFFFF";   }
+       $color_TableBorder =~ s/#//g; if ($color_TableBorder !~ /[\d]/)         { $color_TableBorder="000000"; }
+       $color_TableBG =~ s/#//g; if ($color_TableBG !~ /[\d]/)                 { $color_TableBG="DDDDBB"; }
+       $color_TableTitle =~ s/#//g; if ($color_TableTitle !~ /[\d]/)           { $color_TableTitle="FFFFFF"; }
+       $color_TableBGTitle =~ s/#//g; if ($color_TableBGTitle !~ /[\d]/)       { $color_TableBGTitle="666666"; }
+       $color_TableRowTitle =~ s/#//g; if ($color_TableRowTitle !~ /[\d]/)     { $color_TableRowTitle="FFFFFF"; }
+       $color_TableBGRowTitle =~ s/#//g; if ($color_TableBGRowTitle !~ /[\d]/) { $color_TableBGRowTitle="BBBBBB"; }
+       $color_link =~ s/#//g; if ($color_link !~ /[\d]/)         { $color_link="4000FF"; }
+       $color_hover =~ s/#//g; if ($color_hover !~ /[\d]/)       { $color_hover="4000FF"; }
+       $color_text =~ s/#//g; if ($color_text !~ /[\d]/)         { $color_text="000000"; }
+       $color_titletext =~ s/#//g; if ($color_titletext !~ /[\d]/) { $color_titletext="000000"; }
+       $color_v =~ s/#//g; if ($color_v !~ /[\d]/)               { $color_v="F3F300"; }
+       $color_w =~ s/#//g; if ($color_w !~ /[\d]/)               { $color_w="FF9933"; }
+       $color_w =~ s/#//g; if ($color_p !~ /[\d]/)               { $color_p="4477DD"; }
+       $color_h =~ s/#//g; if ($color_h !~ /[\d]/)               { $color_h="66F0FF"; }
+       $color_k =~ s/#//g; if ($color_k !~ /[\d]/)               { $color_k="339944"; }
+       $color_s =~ s/#//g; if ($color_s !~ /[\d]/)               { $color_s="8888DD"; }
 }
 
+sub Read_History_File {
 #--------------------------------------------------------------------
-# Input: year,month,0|1                (0=read only 1st part, 1=read all file)
+# Input: year,month,0|1|2      (0=read only 1st part, 1=read all file, 2=read only LastUpdate)
 #--------------------------------------------------------------------
-sub Read_History_File {
-       my $year=sprintf("%04i",shift);
-       my $month=sprintf("%02i",shift);
-       my $part=shift;
-       # In standard use of AWStats, the DayRequired variable is always empty
-       if ($DayRequired) { &debug("Call to Read_History_File [$year,$month,$part] ($DayRequired)"); }
-       else { &debug("Call to Read_History_File [$year,$month,$part]"); }
-       if ($HistoryFileAlreadyRead{"$year$month$DayRequired"}) {                               # Protect code to invoke function only once for each month/year
-               &debug(" Already loaded");
-               return 0;
-               }
-       $HistoryFileAlreadyRead{"$year$month$DayRequired"}=1;                                   # Protect code to invoke function only once for each month/year
-       if (! -s "$DirData/$PROG$DayRequired$month$year$FileSuffix.txt") {
-               # If file not exists, return
-               &debug(" No history file");
-               return 0;
-       }
-
-       # If session for read (no update), file can be open with share. So POSSIBLE CHANGE HERE 
-       open(HISTORY,"$DirData/$PROG$DayRequired$month$year$FileSuffix.txt") || error("Error: Couldn't open for read file \"$DirData/$PROG$DayRequired$month$year$FileSuffix.txt\" : $!");      # Month before Year kept for backward compatibility
-       $MonthUnique{$year.$month}=0; $MonthPages{$year.$month}=0; $MonthHits{$year.$month}=0; $MonthBytes{$year.$month}=0; $MonthHostsKnown{$year.$month}=0; $MonthHostsUnKnown{$year.$month}=0;
-       my $readdomain=0;my $readbrowser=0;my $readnsver=0;my $readmsiever=0;
-       my $reados=0;my $readrobot=0;my $readunknownreferer=0;my $readunknownrefererbrowser=0;
-       my $readse=0;my $readerrors=0;
-
-       my $countlines=0;
+       &debug("Call to Read_History_File [$_[0],$_[1],$_[2]]");
+       if ($HistoryFileAlreadyRead{"$_[0]$_[1]"}) { return 0; }                        # Protect code to invoke function only once for each month/year
+       $HistoryFileAlreadyRead{"$_[0]$_[1]"}=1;                                                        # Protect code to invoke function only once for each month/year
+       if (! -s "$DirData/$PROG$_[1]$_[0]$FileSuffix.txt") { return 0; }       # If file not exists, return
+       open(HISTORY,"$DirData/$PROG$_[1]$_[0]$FileSuffix.txt") || error("Error: Couldn't open for read file \"$DirData/$PROG$_[1]$_[0]$FileSuffix.txt\" : $!");        # Month before Year kept for backward compatibility
+       $readdomain=0;$readvisitor=0;$readunknownip=0;$readsider=0;$readtime=0;$readbrowser=0;$readnsver=0;$readmsiever=0;
+       $reados=0;$readrobot=0;$readunknownreferer=0;$readunknownrefererbrowser=0;$readpagerefs=0;$readse=0;
+       $readsearchwords=0;$readerrors=0;$readerrors404=0; $readday=0;
+       $MonthUnique{$_[0].$_[1]}=0; $MonthPage{$_[0].$_[1]}=0; $MonthHits{$_[0].$_[1]}=0; $MonthBytes{$_[0].$_[1]}=0;
        while (<HISTORY>) {
-               chomp $_; s/\r//; $countlines++;
-               my @field=split(/\s+/,$_);
-               # Analyze config line
-           if ($field[0] eq "LastLine")        { if ($LastLine{$year.$month} < int($field[1])) { $LastLine{$year.$month}=int($field[1]); }; next; }
-               if ($field[0] eq "FirstTime")       { $FirstTime{$year.$month}=int($field[1]); next; }
-           if ($field[0] eq "LastTime")        { if ($LastTime{$year.$month} < int($field[1])) { $LastTime{$year.$month}=int($field[1]); }; next; }
-               if ($field[0] eq "TotalVisits")     { $MonthVisits{$year.$month}=int($field[1]); next; }
-           if ($field[0] eq "LastUpdate")      {
-               if ($LastUpdate{$year.$month} < $field[1]) {
-                       $LastUpdate{$year.$month}=int($field[1]);
-                       #$LastUpdateLinesRead{$year.$month}=int($field[2]);
-                       #$LastUpdateNewLinesRead{$year.$month}=int($field[3]);
-                       #$LastUpdateLinesCorrupted{$year.$month}=int($field[4]); 
-                   };
-               next;
-           }
-           if ($field[0] eq "BEGIN_VISITOR")   {
-                       &debug(" Begin of VISITOR section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section VISITOR). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_VISITOR") {
-                               $count++;
-                       if ($field[0] ne "Unknown") { if (($field[1]||0) > 0) { $MonthUnique{$year.$month}++; } $MonthHostsKnown{$year.$month}++; }
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=lasthosts/i)) {
-                               if ($field[1]) { $_hostmachine_p{$field[0]}+=$field[1]; }
-                               if ($field[2]) { $_hostmachine_h{$field[0]}+=$field[2]; }
-                               if ($field[3]) { $_hostmachine_k{$field[0]}+=$field[3]; }
-                               if (! $_hostmachine_l{$field[0]} && $field[4]) { $_hostmachine_l{$field[0]}=int($field[4]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section VISITOR). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of VISITOR section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_UNKNOWNIP")   {
-                       &debug(" Begin of UNKNOWNIP section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section UNKNOWNIP). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_UNKNOWNIP") {
-                               $count++;
-                       $MonthUnique{$year.$month}++; $MonthHostsUnknown{$year.$month}++;
-                               if ($part && ($UpdateStats || $QueryString =~ /output=unknownip/i || $QueryString =~ /output=lasthosts/i)) {    # Init of $_unknownip_l not needed in other cases
-                               if (! $_unknownip_l{$field[0]}) { $_unknownip_l{$field[0]}=int($field[1]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section UNKNOWNIP). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of UNKNOWN_IP section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_LOGIN")   {
-                       &debug(" Begin of LOGIN section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section LOGIN). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_LOGIN") {
-                               $count++;
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i)) {
-                               if ($field[1]) { $_login_p{$field[0]}+=$field[1]; }
-                               if ($field[2]) { $_login_h{$field[0]}+=$field[2]; }
-                               if ($field[3]) { $_login_k{$field[0]}+=$field[3]; }
-                               if (! $_login_l{$field[0]} && $field[4]) { $_login_l{$field[0]}=int($field[4]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section LOGIN). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of LOGIN section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_TIME")      {
-                       &debug(" Begin of TIME section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section TIME). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_TIME") {
-                               $count++;
-                       $MonthPages{$year.$month}+=int($field[1]); $MonthHits{$year.$month}+=int($field[2]); $MonthBytes{$year.$month}+=int($field[3]);
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i)) {
-                               if ($field[1]) { $_time_p[$field[0]]+=int($field[1]); }
-                               if ($field[2]) { $_time_h[$field[0]]+=int($field[2]); }
-                               if ($field[3]) { $_time_k[$field[0]]+=int($field[3]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section TIME). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of TIME section ($count entries)");
-                       next;
-           }
-           if ($field[0] eq "BEGIN_DAY")      {
-                       &debug(" Begin of DAY section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section DAY). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_DAY" ) {
-                               $count++;
-                               if ($UpdateStats || $QueryString !~ /output=/i) {
-                                       if ($field[1]) { $DayPages{$field[0]}=int($field[1]); }
-                                       if ($field[2]) { $DayHits{$field[0]}=int($field[2]); }
-                                       if ($field[3]) { $DayBytes{$field[0]}=int($field[3]); }
-                                       if ($field[4]) { $DayVisits{$field[0]}=int($field[4]); }
-                                       if ($field[5]) { $DayUnique{$field[0]}=int($field[5]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section DAY). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of DAY section ($count entries)");
-                       next;
-           }
-               if ($field[0] eq "BEGIN_SIDER")  {
-                       &debug(" Begin of SIDER section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SIDER). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;my $countadd=0;
-                       while ($field[0] ne "END_SIDER") {
-                               $count++;
-                               if ($part) {
-                                       my $addsider=0;
-                                       if ($UpdateStats) {
-                                               $addsider=1;
-                                       }
-                                       else {
-                                               # In this case we count TotalDifferentPages because we won't fill _url_p completely
-                                               $TotalDifferentPages++;
-                                               if ($QueryString =~ /output=urldetail/i && (!$URLFilter || $field[0] =~ /$URLFilter/)) { $addsider=1; }
-                                               if ($QueryString !~ /output=/i && $countadd < $MaxNbOfPageShown) { $addsider=1; }
-                                       }
-                                       if ($addsider) {                                        
-                                               $countadd++;
-                                               if ($field[1]) { $_url_p{$field[0]}+=$field[1]; }
-                                               if ($field[2]) { $_url_e{$field[0]}+=$field[2]; }
-                                       }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SIDER). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of SIDER section ($count entries loaded)");
-                       next;
-               }
-           if ($field[0] eq "BEGIN_PAGEREFS")   {
-                       &debug(" Begin of PAGEREFS section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section PAGEREFS). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_PAGEREFS") {
-                               $count++;
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i)) {
-                                       if ($field[1]) { $_pagesrefs_h{$field[0]}+=int($field[1]); }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section PAGEREFS). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of PAGEREFS section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_FILETYPES")   {
-                       &debug(" Begin of FILETYPES section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section FILETYPES). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_FILETYPES") {
-                               $count++;
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i)) {
-                                       if ($field[1]) { $_filetypes_h{$field[0]}+=$field[1]; }
-                                       if ($field[2]) { $_filetypes_k{$field[0]}+=$field[2]; }
-                                       if ($field[3]) { $_filetypes_gz_in{$field[0]}+=$field[3]; }
-                                       if ($field[4]) { $_filetypes_gz_out{$field[0]}+=$field[4]; }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section FILETYPES). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of FILETYPES section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_SEARCHWORDS")   {
-                       &debug(" Begin of SEARCHWORDS section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SEARCHWORDS). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_SEARCHWORDS") {
-                               $count++;
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i)) {
-                                       if ($field[1]) { $_keyphrases{$field[0]}+=$field[1]; }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SEARCHWORDS). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of SEARCHWORDS section ($count entries)");
-                       next;
-       }
-           if ($field[0] eq "BEGIN_SIDER_404")   {
-                       &debug(" Begin of SIDER_404 section");
-                       $_=<HISTORY>;
-                       chomp $_; s/\r//;
-                       if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SIDER_404). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                       my @field=split(/\s+/,$_); $countlines++;
-                       my $count=0;
-                       while ($field[0] ne "END_SIDER_404") {
-                               $count++;
-                               if ($part && ($UpdateStats || $QueryString !~ /output=/i || $QueryString =~ /output=notfounderror/i)) {
-                                       if ($field[1]) { $_sider404_h{$field[0]}+=$field[1]; }
-                                       if ($UpdateStats || $QueryString =~ /output=notfounderror/i) {
-                                               if ($field[2]) { $_referer404_h{$field[0]}=$field[2]; }
-                                       }
-                               }
-                               $_=<HISTORY>;
-                               chomp $_; s/\r//;
-                               if ($_ eq "") { error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted (in section SIDER_404). Last line read is number $countlines.\nCorrect the line, restore a recent backup of this file, or remove it (data for this month will be lost)."); }
-                               @field=split(/\s+/,$_); $countlines++;
-                       }
-                       &debug(" End of SIDER_404 section ($count entries)");
-                       next;
+               chomp $_; s/\r//;
+               @field=split(/ /,$_);
+
+               # FIRST PART: Always read
+               if ($field[0] eq "FirstTime")       { $FirstTime{$_[0].$_[1]}=$field[1]; next; }
+           if ($field[0] eq "LastTime")        { if ($LastTime{$_[0].$_[1]} < $field[1]) { $LastTime{$_[0].$_[1]}=$field[1]; }; next; }
+               if ($field[0] eq "TotalVisits")     { $MonthVisits{$_[0].$_[1]}=$field[1]; next; }
+           if ($field[0] eq "LastUpdate")      { if ($LastUpdate{$_[0].$_[1]} < $field[1]) { $LastUpdate{$_[0].$_[1]}=$field[1]; }; next; }
+           if ($field[0] eq "BEGIN_VISITOR")   { $readvisitor=1; next; }
+           if ($field[0] eq "END_VISITOR")     { $readvisitor=0; next; }
+           if ($field[0] eq "BEGIN_UNKNOWNIP") { $readunknownip=1; next; }
+           if ($field[0] eq "END_UNKNOWNIP")   { $readunknownip=0; next; }
+           if ($field[0] eq "BEGIN_TIME")      { $readtime=1; next; }
+           if ($field[0] eq "END_TIME")        { $readtime=0; next; }
+           if ($field[0] eq "BEGIN_DAY")       { $readday=1; next; }
+           if ($field[0] eq "END_DAY")         { $readday=0; next; }
+
+           if ($readvisitor) {
+               if (($field[0] ne "Unknown") && ($field[1] > 0)) { $MonthUnique{$_[0].$_[1]}++; }
+               }
+           if ($readunknownip) {
+               $MonthUnique{$_[0].$_[1]}++;
+                       }
+           if ($readtime) {
+               $MonthPage{$_[0].$_[1]}+=$field[1]; $MonthHits{$_[0].$_[1]}+=$field[2]; $MonthBytes{$_[0].$_[1]}+=$field[3];
+                       }
+               if ($readday)
+               {
+                       $DayPage{$field[0]}=$field[1]; $DayHits{$field[0]}=$field[2]; $DayBytes{$field[0]}=$field[3]; $DayVisits{$field[0]}=$field[4]; $DayUnique{$field[0]}=$field[5];
                }
 
-               # SECOND PART: If $part == 0, it means we don't need this part of data.
-               if ($part) {
+               # SECOND PART: If $_[2] == 0, it means we don't need second part of history file.
+               if ($_[2]) {
                if ($field[0] eq "BEGIN_DOMAIN") { $readdomain=1; next; }
                        if ($field[0] eq "END_DOMAIN")   { $readdomain=0; next; }
+                       if ($field[0] eq "BEGIN_SIDER")  { $readsider=1; next; }
+                       if ($field[0] eq "END_SIDER")    { $readsider=0; next; }
                if ($field[0] eq "BEGIN_BROWSER") { $readbrowser=1; next; }
                if ($field[0] eq "END_BROWSER") { $readbrowser=0; next; }
                if ($field[0] eq "BEGIN_NSVER") { $readnsver=1; next; }
@@ -1206,635 +1840,373 @@ sub Read_History_File {
                if ($field[0] eq "END_UNKNOWNREFERER")   { $readunknownreferer=0; next; }
                if ($field[0] eq "BEGIN_UNKNOWNREFERERBROWSER") { $readunknownrefererbrowser=1; next; }
                if ($field[0] eq "END_UNKNOWNREFERERBROWSER")   { $readunknownrefererbrowser=0; next; }
+               if ($field[0] eq "BEGIN_PAGEREFS") { $readpagerefs=1; next; }
+               if ($field[0] eq "END_PAGEREFS") { $readpagerefs=0; next; }
                if ($field[0] eq "BEGIN_SEREFERRALS") { $readse=1; next; }
                if ($field[0] eq "END_SEREFERRALS") { $readse=0; next; }
+               if ($field[0] eq "BEGIN_SEARCHWORDS") { $readsearchwords=1; next; }
+               if ($field[0] eq "END_SEARCHWORDS") { $readsearchwords=0; next; }
                if ($field[0] eq "BEGIN_ERRORS") { $readerrors=1; next; }
                if ($field[0] eq "END_ERRORS") { $readerrors=0; next; }
+               if ($field[0] eq "BEGIN_SIDER_404") { $readerrors404=1; next; }
+               if ($field[0] eq "END_SIDER_404") { $readerrors404=0; next; }
+                       if ($field[0] eq "BEGIN_DAY")       { $readday=1; next; }
+               if ($field[0] eq "END_DAY")         { $readday=0; next; }
+
+               if ($readvisitor) {
+                       $_hostmachine_p{$field[0]}+=$field[1];
+                       $_hostmachine_h{$field[0]}+=$field[2];
+                       $_hostmachine_k{$field[0]}+=$field[3];
+                       if ($_hostmachine_l{$field[0]} eq "") { $_hostmachine_l{$field[0]}=$field[4]; }
+                       next; }
                if ($readunknownreferer) {
-                       if (! $_unknownreferer_l{$field[0]}) { $_unknownreferer_l{$field[0]}=int($field[1]); }
-                       next;
-               }
+                       if ($_unknownreferer_l{$field[0]} eq "") { $_unknownreferer_l{$field[0]}=$field[1]; }
+                       next; }
                        if ($readdomain) {
-                               if ($field[1]) { $_domener_p{$field[0]}+=$field[1]; }
-                               if ($field[2]) { $_domener_h{$field[0]}+=$field[2]; }
-                               if ($field[3]) { $_domener_k{$field[0]}+=$field[3]; }
-                               next;
-                       }
-               if ($readbrowser) { 
-                       if ($field[1]) { $_browser_h{$field[0]}+=$field[1]; }
-                       next;
-               }
-               if ($readnsver) {
-                       if ($field[1]) { $_nsver_h[$field[0]]+=$field[1]; }
-                       next;
-               }
-               if ($readmsiever) {
-                       if ($field[1]) { $_msiever_h[$field[0]]+=$field[1]; }
-                       next;
-               }
-               if ($reados) {
-                       if ($field[1]) { $_os_h{$field[0]}+=$field[1]; }
-                       next;
-               }
+                               $_domener_p{$field[0]}+=$field[1];
+                               $_domener_h{$field[0]}+=$field[2];
+                               $_domener_k{$field[0]}+=$field[3];
+                               next; }
+               if ($readunknownip) {
+                       if ($_unknownip_l{$field[0]} eq "") { $_unknownip_l{$field[0]}=$field[1]; }
+                       next; }
+                       if ($readsider) { $_sider_p{$field[0]}+=$field[1]; next; }
+               if ($readtime) {
+                       $_time_p[$field[0]]+=$field[1]; $_time_h[$field[0]]+=$field[2]; $_time_k[$field[0]]+=$field[3];
+                       next; }
+               if ($readbrowser) { $_browser_h{$field[0]}+=$field[1]; next; }
+               if ($readnsver) { $_nsver_h[$field[0]]+=$field[1]; next; }
+               if ($readmsiever) { $_msiever_h[$field[0]]+=$field[1]; next; }
+               if ($reados) { $_os_h{$field[0]}+=$field[1]; next; }
                if ($readrobot) {
-                               if ($field[1]) { $_robot_h{$field[0]}+=$field[1]; }
-                       if (! $_robot_l{$field[0]}) { $_robot_l{$field[0]}=int($field[2]); }
-                               next;
-                       }
+                               $_robot_h{$field[0]}+=$field[1];
+                       if ($_robot_l{$field[0]} eq "") { $_robot_l{$field[0]}=$field[2]; }
+                               next; }
                if ($readunknownrefererbrowser) {
-                       if (! $_unknownrefererbrowser_l{$field[0]}) { $_unknownrefererbrowser_l{$field[0]}=int($field[1]); }
-                       next;
-               }
-               if ($field[0] eq "From0") { $_from_p[0]+=$field[1]; $_from_h[0]+=$field[2]; next; }
-               if ($field[0] eq "From1") { $_from_p[1]+=$field[1]; $_from_h[1]+=$field[2]; next; }
-               if ($field[0] eq "From2") { $_from_p[2]+=$field[1]; $_from_h[2]+=$field[2]; next; }
-               if ($field[0] eq "From3") { $_from_p[3]+=$field[1]; $_from_h[3]+=$field[2]; next; }
-               if ($field[0] eq "From4") { $_from_p[4]+=$field[1]; $_from_h[4]+=$field[2]; next; }
-                       # Next 5 lines are to read old awstats history files ("Fromx" section was "HitFromx" in such files)
-               if ($field[0] eq "HitFrom0") { $_from_p[0]+=0; $_from_h[0]+=$field[1]; next; }
-               if ($field[0] eq "HitFrom1") { $_from_p[1]+=0; $_from_h[1]+=$field[1]; next; }
-               if ($field[0] eq "HitFrom2") { $_from_p[2]+=0; $_from_h[2]+=$field[1]; next; }
-               if ($field[0] eq "HitFrom3") { $_from_p[3]+=0; $_from_h[3]+=$field[1]; next; }
-               if ($field[0] eq "HitFrom4") { $_from_p[4]+=0; $_from_h[4]+=$field[1]; next; }
-               if ($readse) {
-                       if ($field[1]) { $_se_referrals_h{$field[0]}+=$field[1]; }
-                       next;
-               }
-               if ($readerrors) {
-                       if ($field[1]) { $_errors_h{$field[0]}+=$field[1]; }
-                       next;
-               }
+                       if ($_unknownrefererbrowser_l{$field[0]} eq "") { $_unknownrefererbrowser_l{$field[0]}=$field[1]; }
+                       next; }
+               if ($field[0] eq "HitFrom0") { $_from_h[0]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom1") { $_from_h[1]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom2") { $_from_h[2]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom3") { $_from_h[3]+=$field[1]; next; }
+               if ($field[0] eq "HitFrom4") { $_from_h[4]+=$field[1]; next; }
+               if ($readpagerefs) { $_pagesrefs_h{$field[0]}+=$field[1]; next; }
+               if ($readse) { $_se_referrals_h{$field[0]}+=$field[1]; next; }
+               if ($readsearchwords) { $_keywords{$field[0]}+=$field[1]; next; }
+               if ($readerrors) { $_errors_h{$field[0]}+=$field[1]; next; }
+               if ($readerrors404) { $_sider404_h{$field[0]}+=$field[1]; $_referer404_h{$field[0]}=$field[2]; next; }
                }
        }
        close HISTORY;
-       if (! $LastLine{$year.$month}) { $LastLine{$year.$month}=$LastTime{$year.$month}; }             # For backward compatibility, if LastLine does not exist
-       if ($readdomain || $readbrowser || $readnsver || $readmsiever || $reados || $readrobot || $readunknownreferer || $readunknownrefererbrowser || $readse || $readerrors) {
+       if ($readdomain || $readvisitor || $readunknownip || $readsider || $readtime || $readbrowser || $readnsver || $readmsiever || $reados || $readrobot || $readunknownreferer || $readunknownrefererbrowser || $readpagerefs || $readse || $readsearchwords || $readerrors || $readerrors404 || $readday) {
                # History file is corrupted
-               error("Error: History file \"$DirData/$PROG$month$year$FileSuffix.txt\" is corrupted. Last line read is number $countlines.\nRestore a recent backup of this file, or remove it (data for this month will be lost).");
+               error("Error: History file \"$DirData/$PROG$_[1]$_[0]$FileSuffix.txt\" is corrupted. Restore a backup of this file, or remove it (data for this month will be lost).");
        }
 }
 
-#--------------------------------------------------------------------
-# Function:    Show flags for 5 major languages
-# Input:       Year, Month
-#--------------------------------------------------------------------
 sub Save_History_File {
-       my $year=sprintf("%04i",shift);
-       my $month=sprintf("%02i",shift);
-       &debug("Call to Save_History_File [$year,$month]");
-       open(HISTORYTMP,">$DirData/$PROG$month$year$FileSuffix.tmp.$$") || error("Error: Couldn't open file \"$DirData/$PROG$month$year$FileSuffix.tmp.$$\" : $!");     # Month before Year kept for backward compatibility
-
-       print HISTORYTMP "LastLine $LastLine{$year.$month}\n";
-       print HISTORYTMP "FirstTime $FirstTime{$year.$month}\n";
-       print HISTORYTMP "LastTime $LastTime{$year.$month}\n";
-       if ($LastUpdate{$year.$month} < int("$nowyear$nowmonth$nowday$nowhour$nowmin$nowsec")) { $LastUpdate{$year.$month}=int("$nowyear$nowmonth$nowday$nowhour$nowmin$nowsec"); }
-       print HISTORYTMP "LastUpdate $LastUpdate{$year.$month} $NbOfLinesRead $NbOfNewLinesProcessed $NbOfLinesCorrupted\n";
-       print HISTORYTMP "TotalVisits $MonthVisits{$year.$month}\n";
-
-       # When
-       print HISTORYTMP "BEGIN_DAY\n";
-    foreach my $key (keys %DayHits) {
-       if ($key =~ /^$year$month/) {   # Found a day entry of the good month
-                       my $page=$DayPages{$key}||0;
-                       my $hits=$DayHits{$key}||0;
-                       my $bytes=$DayBytes{$key}||0;
-                       my $visits=$DayVisits{$key}||0;
-                       my $unique=$DayUnique{$key}||"";
-               print HISTORYTMP "$key $page $hits $bytes $visits $unique\n";
-               next;
-       }
-       }
-    print HISTORYTMP "END_DAY\n";
-       print HISTORYTMP "BEGIN_TIME\n";
-       for (my $ix=0; $ix<=23; $ix++) { print HISTORYTMP "$ix ".int($_time_p[$ix])." ".int($_time_h[$ix])." ".int($_time_k[$ix])."\n"; next; }
-       print HISTORYTMP "END_TIME\n";
+       &debug("Call to Save_History_File [$_[0],$_[1]]");
+       open(HISTORYTMP,">$DirData/$PROG$_[1]$_[0]$FileSuffix.tmp.$$") || error("Error: Couldn't open file \"$DirData/$PROG$_[1]$_[0]$FileSuffix.tmp.$$\" : $!");       # Month before Year kept for backward compatibility
+
+       print HISTORYTMP "FirstTime $FirstTime{$_[0].$_[1]}\n";
+       print HISTORYTMP "LastTime $LastTime{$_[0].$_[1]}\n";
+       if ($LastUpdate{$_[0].$_[1]} lt "$nowyear$nowmonth$nowday$nowhour$nowmin") { $LastUpdate{$_[0].$_[1]}="$nowyear$nowmonth$nowday$nowhour$nowmin"; }
+       print HISTORYTMP "LastUpdate $LastUpdate{$_[0].$_[1]}\n";
+       print HISTORYTMP "TotalVisits $MonthVisits{$_[0].$_[1]}\n";
 
-       # Who
        print HISTORYTMP "BEGIN_DOMAIN\n";
-       foreach my $key (keys %_domener_h) {
-               my $page=$_domener_p{$key}||0;
-               my $bytes=$_domener_k{$key}||0;         # ||0 could be commented to reduce history file size
-               print HISTORYTMP "$key $page $_domener_h{$key} $bytes\n"; next;
-       }
+       foreach $key (keys %_domener_h) {
+               $page=$_domener_p{$key};$kilo=$_domener_k{$key};
+               if ($page == "") {$page=0;}
+               if ($kilo == "") {$kilo=0;}
+               print HISTORYTMP "$key $page $_domener_h{$key} $kilo\n"; next;
+               }
        print HISTORYTMP "END_DOMAIN\n";
+
        print HISTORYTMP "BEGIN_VISITOR\n";
-       foreach my $key (keys %_hostmachine_h) {
-               my $page=$_hostmachine_p{$key}||0;
-               my $bytes=$_hostmachine_k{$key}||0;
-               my $lastaccess=$_hostmachine_l{$key}||"";
-               print HISTORYTMP "$key $page $_hostmachine_h{$key} $bytes $lastaccess\n"; next;
-       }
+       foreach $key (keys %_hostmachine_h) {
+               $page=$_hostmachine_p{$key};$kilo=$_hostmachine_k{$key};
+               if ($page == "") {$page=0;}
+               if ($kilo == "") {$kilo=0;}
+               print HISTORYTMP "$key $page $_hostmachine_h{$key} $kilo $_hostmachine_l{$key}\n"; next;
+               }
        print HISTORYTMP "END_VISITOR\n";
+
        print HISTORYTMP "BEGIN_UNKNOWNIP\n";
-       foreach my $key (keys %_unknownip_l) { print HISTORYTMP "$key $_unknownip_l{$key}\n"; next; }
+       foreach $key (keys %_unknownip_l) { print HISTORYTMP "$key $_unknownip_l{$key}\n"; next; }
        print HISTORYTMP "END_UNKNOWNIP\n";
-       print HISTORYTMP "BEGIN_LOGIN\n";
-       foreach my $key (keys %_login_h) { print HISTORYTMP "$key ".int($_login_p{$key})." ".int($_login_h{$key})." ".int($_login_k{$key})." $_login_l{$key}\n"; next; }
-       print HISTORYTMP "END_LOGIN\n";
-       print HISTORYTMP "BEGIN_ROBOT\n";
-       foreach my $key (keys %_robot_h) { print HISTORYTMP "$key ".int($_robot_h{$key})." $_robot_l{$key}\n"; next; }
-       print HISTORYTMP "END_ROBOT\n";
 
-       # Navigation
-       # We save page list in score sorted order to allow to show reports faster and save memory.
        print HISTORYTMP "BEGIN_SIDER\n";
-       foreach my $key (sort {$SortDir*$_url_p{$a} <=> $SortDir*$_url_p{$b}} keys %_url_p) {
-               $newkey=$key;
-               $newkey =~ s/([^:])\/\//$1\//g;         # Because some targeted url were taped with 2 / (Ex: //rep//file.htm). We must keep http://rep/file.htm
-               my $entry=$_url_e{$key}||"";
-               print HISTORYTMP "$newkey ".int($_url_p{$key})." $entry\n"; next;
-       }
+       foreach $key (keys %_sider_p) { print HISTORYTMP "$key $_sider_p{$key}\n"; next; }
        print HISTORYTMP "END_SIDER\n";
-       print HISTORYTMP "BEGIN_FILETYPES\n";
-       foreach my $key (keys %_filetypes_h) {
-               my $hits=$_filetypes_h{$key}||0;
-               my $bytes=$_filetypes_k{$key}||0;
-               my $bytesbefore=$_filetypes_gz_in{$key}||0;
-               my $bytesafter=$_filetypes_gz_out{$key}||0;
-               print HISTORYTMP "$key $hits $bytes $bytesbefore $bytesafter\n";
-               next;
-       }
-       print HISTORYTMP "END_FILETYPES\n";
+
+       print HISTORYTMP "BEGIN_TIME\n";
+       for ($ix=0; $ix<=23; $ix++) { print HISTORYTMP "$ix $_time_p[$ix] $_time_h[$ix] $_time_k[$ix]\n"; next; }
+       print HISTORYTMP "END_TIME\n";
+
+       print HISTORYTMP "BEGIN_DAY\n";
+    foreach $key (keys %DayPages) {
+        if ($key =~ /^$_[0]$_[1]/) {   # Found a day entry of the good month
+               print HISTORYTMP "$key $DayPages{$key} $DayHits{$key} $DayBytes{$key} $DayVisits{$key} $DayUnique{$key}\n"; next;
+               }
+        }
+    print HISTORYTMP "END_DAY\n";
+
        print HISTORYTMP "BEGIN_BROWSER\n";
-       foreach my $key (keys %_browser_h) { print HISTORYTMP "$key $_browser_h{$key}\n"; next; }
+       foreach $key (keys %_browser_h) { print HISTORYTMP "$key $_browser_h{$key}\n"; next; }
        print HISTORYTMP "END_BROWSER\n";
        print HISTORYTMP "BEGIN_NSVER\n";
-       for (my $i=1; $i<=$#_nsver_h; $i++) {
-               my $nb_h=$_nsver_h[$i]||"";
-               print HISTORYTMP "$i $nb_h\n";
-               next;
-       }
+       for ($i=1; $i<=$#_nsver_h; $i++) { print HISTORYTMP "$i $_nsver_h[$i]\n"; next; }
        print HISTORYTMP "END_NSVER\n";
        print HISTORYTMP "BEGIN_MSIEVER\n";
-       for (my $i=1; $i<=$#_msiever_h; $i++) {
-               my $nb_h=$_msiever_h[$i]||"";
-               print HISTORYTMP "$i $nb_h\n";
-               next;
-       }
+       for ($i=1; $i<=$#_msiever_h; $i++) { print HISTORYTMP "$i $_msiever_h[$i]\n"; next; }
        print HISTORYTMP "END_MSIEVER\n";
        print HISTORYTMP "BEGIN_OS\n";
-       foreach my $key (keys %_os_h) { print HISTORYTMP "$key $_os_h{$key}\n"; next; }
+       foreach $key (keys %_os_h) { print HISTORYTMP "$key $_os_h{$key}\n"; next; }
        print HISTORYTMP "END_OS\n";
 
-       # Referer
+       print HISTORYTMP "BEGIN_ROBOT\n";
+       foreach $key (keys %_robot_h) { print HISTORYTMP "$key $_robot_h{$key} $_robot_l{$key}\n"; next; }
+       print HISTORYTMP "END_ROBOT\n";
+
        print HISTORYTMP "BEGIN_UNKNOWNREFERER\n";
-       foreach my $key (keys %_unknownreferer_l) { print HISTORYTMP "$key $_unknownreferer_l{$key}\n"; next; }
+       foreach $key (keys %_unknownreferer_l) { print HISTORYTMP "$key $_unknownreferer_l{$key}\n"; next; }
        print HISTORYTMP "END_UNKNOWNREFERER\n";
        print HISTORYTMP "BEGIN_UNKNOWNREFERERBROWSER\n";
-       foreach my $key (keys %_unknownrefererbrowser_l) { print HISTORYTMP "$key $_unknownrefererbrowser_l{$key}\n"; next; }
+       foreach $key (keys %_unknownrefererbrowser_l) { print HISTORYTMP "$key $_unknownrefererbrowser_l{$key}\n"; next; }
        print HISTORYTMP "END_UNKNOWNREFERERBROWSER\n";
-       print HISTORYTMP "From0 ".int($_from_p[0])." ".int($_from_h[0])."\n";
-       print HISTORYTMP "From1 ".int($_from_p[1])." ".int($_from_h[1])."\n";
-       print HISTORYTMP "From2 ".int($_from_p[2])." ".int($_from_h[2])."\n";
-       print HISTORYTMP "From3 ".int($_from_p[3])." ".int($_from_h[3])."\n";
-       print HISTORYTMP "From4 ".int($_from_p[4])." ".int($_from_h[4])."\n";
+
+       print HISTORYTMP "HitFrom0 $_from_h[0]\n";
+       print HISTORYTMP "HitFrom1 $_from_h[1]\n";
+       print HISTORYTMP "HitFrom2 $_from_h[2]\n";
+       print HISTORYTMP "HitFrom3 $_from_h[3]\n";
+       print HISTORYTMP "HitFrom4 $_from_h[4]\n";
+
        print HISTORYTMP "BEGIN_SEREFERRALS\n";
-       foreach my $key (keys %_se_referrals_h) { print HISTORYTMP "$key $_se_referrals_h{$key}\n"; next; }
+       foreach $key (keys %_se_referrals_h) { print HISTORYTMP "$key $_se_referrals_h{$key}\n"; next; }
        print HISTORYTMP "END_SEREFERRALS\n";
+
        print HISTORYTMP "BEGIN_PAGEREFS\n";
-       foreach my $key (keys %_pagesrefs_h) {
-               $newkey=$key;
-               $newkey =~ s/^http(s|):\/\/([^\/]+)\/$/http$1:\/\/$2/;  # Remove / at end of http://.../ but not at end of http://.../dir/
-               $newkey =~ s/\s/%20/g;
-               print HISTORYTMP "$newkey $_pagesrefs_h{$key}\n"; next;
-       }
+       foreach $key (keys %_pagesrefs_h) { print HISTORYTMP "$key $_pagesrefs_h{$key}\n"; next; }
        print HISTORYTMP "END_PAGEREFS\n";
+
        print HISTORYTMP "BEGIN_SEARCHWORDS\n";
-       foreach my $key (keys %_keyphrases) { 
-               my $newkey=$key;
-               print HISTORYTMP "$newkey $_keyphrases{$key}\n";
-               next;
-       }
+       foreach $key (keys %_keywords) { if ($_keywords{$key}) { print HISTORYTMP "$key $_keywords{$key}\n"; } next; }
        print HISTORYTMP "END_SEARCHWORDS\n";
 
-       # Other
        print HISTORYTMP "BEGIN_ERRORS\n";
-       foreach my $key (keys %_errors_h) { print HISTORYTMP "$key $_errors_h{$key}\n"; next; }
+       foreach $key (keys %_errors_h) { print HISTORYTMP "$key $_errors_h{$key}\n"; next; }
        print HISTORYTMP "END_ERRORS\n";
+
        print HISTORYTMP "BEGIN_SIDER_404\n";
-       foreach my $key (keys %_sider404_h) { 
-               my $newkey=$key;
-               my $newreferer=$_referer404_h{$key}||"";
-               $newreferer =~ s/\s/%20/g;
-               print HISTORYTMP "$newkey ".int($_sider404_h{$key})." $newreferer\n";
-               next;
-       }
+       foreach $key (keys %_sider404_h) { print HISTORYTMP "$key $_sider404_h{$key} $_referer404_h{$key}\n"; next; }
        print HISTORYTMP "END_SIDER_404\n";
 
        close(HISTORYTMP);
 }
 
-#--------------------------------------------------------------------
-# Function:     Return time elapsed since last call in miliseconds
-# Input:        None
-# Return:       Number of miliseconds elapsed since last call
-#--------------------------------------------------------------------
-sub GetDelaySinceStart {
-       my $usedTimeHires=0;
-       my ($newseconds, $newmicroseconds)=(0,0);
-       #($newseconds, $newmicroseconds) = gettimeofday; $usedTimeHires=1;      # Uncomment to use Time::HiRes function (provide milliseconds)
-       if ((! $usedTimeHires) || ($newseconds eq "gettimeofday")) { $newseconds=time(); }
-       if (! $StartSeconds) { $StartSeconds=$newseconds; $StartMicroseconds=$newmicroseconds; }
-       my $nbms=$newseconds*1000+int($newmicroseconds/1000)-$StartSeconds*1000-int($StartMicroseconds/1000);
-       return ($nbms);
-}
-
-#--------------------------------------------------------------------
-# Input: Global variables
-#--------------------------------------------------------------------
 sub Init_HashArray {
-       my $year=sprintf("%04i",shift||0);
-       my $month=sprintf("%02i",shift||0);
-       &debug("Call to Init_HashArray [$year,$month]");
-       # We purge data read for $year and $month so it's like we never read it
-       $HistoryFileAlreadyRead{"$year$month"}=0;
-       # Delete/Reinit all arrays with name beginning by _
-       @_msiever_h = @_nsver_h = ();
-       for (my $ix=0; $ix<5; $ix++) {  $_from_p[$ix]=0; $_from_h[$ix]=0; }
-       for (my $ix=0; $ix<=23; $ix++) { $_time_h[$ix]=0; $_time_k[$ix]=0; $_time_p[$ix]=0; }
-       # Delete/Reinit all hash arrays with name beginning by _
-       %_browser_h = %_domener_h = %_domener_k = %_domener_p = %_errors_h =
-       %_filetypes_h = %_filetypes_k = %_filetypes_gz_in = %_filetypes_gz_out =
-       %_hostmachine_h = %_hostmachine_k = %_hostmachine_l = %_hostmachine_p =
-       %_keyphrases = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l = 
-       %_login_h = %_login_p = %_login_k = %_login_l =
-       %_se_referrals_h = %_sider404_h = %_url_p = %_url_e =
-       %_unknownip_l = %_unknownreferer_l = %_unknownrefererbrowser_l = ();
+       # We purge data read for year $_[0] and month $_[1] so it's like we never read it
+       $HistoryFileAlreadyRead{"$_[0]$_[1]"}=0;
+       # Delete all hash arrays with name beginning by _
+       %_browser_h = %_domener_h = %_domener_k = %_domener_p =
+       %_errors_h = %_hostmachine_h = %_hostmachine_k = %_hostmachine_l = %_hostmachine_p =
+       %_keywords = %_os_h = %_pagesrefs_h = %_robot_h = %_robot_l = %_se_referrals_h =
+       %_sider404_h = %_sider_h = %_sider_k = %_sider_p = %_unknownip_l = %_unknownreferer_l =
+       %_unknownrefererbrowser_l = ();
+       reset _;
 }
 
 
-#--------------------------------------------------------------------
-# Function:     Change word separators into space and remove bad coded chars
-# Input:        stringtodecode
-# Return:              decodedstring
-#--------------------------------------------------------------------
-sub ChangeWordSeparatorsIntoSpace {
-       $_[0] =~ s/%1[03]/ /g;
-       $_[0] =~ s/%2[02789abc]/ /g;
-       $_[0] =~ s/%3a/ /g;
-       $_[0] =~ tr/\+\'\(\)\"\*,:/        /s;                                                          # "&" and "=" must not be in this list
-}
-
 
-#--------------------------------------------------------------------
-# Function:     Decode an URL encoded string
-# Input:        stringtodecode
-# Return:              decodedstring
-#--------------------------------------------------------------------
-sub DecodeEncodedString {
-       my $stringtodecode=shift;
-       $stringtodecode =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;           # Decode encoded URL
-       return $stringtodecode;
+#-------------------------------------------------------
+# MAIN
+#-------------------------------------------------------
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { # Run from a browser
+       print("Content-type: text/html\n\n\n");
+       $QueryString = $ENV{"QUERY_STRING"};
+       $QueryString =~ s/<script.*$//i;                                                # This is to avoid 'Cross Site Scripting attacks'
+       if ($QueryString =~ /site=/) { $SiteToAnalyze=$QueryString; $SiteToAnalyze =~ s/.*site=//; $SiteToAnalyze =~ s/&.*//; $SiteToAnalyze =~ s/ .*//; }
+       $UpdateStats=0; if ($QueryString =~ /update=1/i) { $UpdateStats=1; }    # No update by default when run from a browser
 }
-
-
-#--------------------------------------------------------------------
-# Function:     Copy one file into another
-# Input:        sourcefilename targetfilename
-# Return:              0 if copy is ok, 1 else
-#--------------------------------------------------------------------
-sub FileCopy {
-       my $filesource = shift;
-       my $filetarget = shift;
-       debug("FileCopy($filesource,$filetarget)",1);
-       open(FILESOURCE,"$filesource") || return 1;
-       open(FILETARGET,">$filetarget") || return 1;
-       # ...
-       close(FILETARGET);
-       close(FILESOURCE);
-       debug(" File copied",1);
-       return 0;
+else { # Run from command line
+       if ($ARGV[0] eq "-h") { $SiteToAnalyze = $ARGV[1]; }    # Kept for backward compatibility but useless
+       $QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
+       $QueryString =~ s/<script.*$//i;                                                # This is to avoid 'Cross Site Scripting attacks'
+       if ($QueryString =~ /site=/) { $SiteToAnalyze=$QueryString; $SiteToAnalyze =~ s/.*site=//; $SiteToAnalyze =~ s/&.*//; $SiteToAnalyze =~ s/ .*//; }
+       $UpdateStats=1; if ($QueryString =~ /update=0/i) { $UpdateStats=0; }    # Update by default when run from command line
 }
-
-#--------------------------------------------------------------------
-# Function:      Show flags for other language translations
-# Input:         Current languade id (en, fr, ...)
-#--------------------------------------------------------------------
-sub Show_Flag_Links {
-       my $CurrentLang = shift;
-       if ($ShowFlagLinks eq "0") { $ShowFlagLinks = ""; }                                             # For backward compatibility
-       if ($ShowFlagLinks eq "1") { $ShowFlagLinks = "en fr de it nl es"; }    # For backward compatibility
-       my @flaglist=split(/\s+/,$ShowFlagLinks);
-
-       # Build flags link
-       my $NewLinkParams=$QueryString;
-       if ($ENV{"GATEWAY_INTERFACE"}) {
-               $NewLinkParams =~ s/update=[^ &]*//;
-               $NewLinkParams =~ s/lang=[^ &]*//;
-               $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/&$//;
-               if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; }
-       }
-       else {
-               $NewLinkParams=($SiteConfig?"config=$SiteConfig&":"")."year=$YearRequired&month=$MonthRequired&";
+if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
+($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
+if ($SiteToAnalyze eq "") { $SiteToAnalyze = $ENV{"SERVER_NAME"}; }
+$SiteToAnalyze =~ tr/A-Z/a-z/;
+$SiteToAnalyzeWithoutwww = $SiteToAnalyze; $SiteToAnalyzeWithoutwww =~ s/www\.//;
+if (($ENV{"GATEWAY_INTERFACE"} eq "") && ($SiteToAnalyze eq "")) {
+       print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
+       print "$PROG is a free web server logfile analyzer (in Perl) to show you advanced\n";
+       print "web statistics.\n";
+       print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n";
+       print "with a GNU General Public License (See COPYING.txt file for details).\n";
+       print "\n";
+       print "Syntax: $PROG.$Extension site=www.host.com\n";
+       print "  This runs $PROG in command line to update statistics of a web site, from\n";
+       print "  the log file defined in config file, and returns an HTML report.\n";
+       print "  First, $PROG tries to read $PROG.www.host.com.conf as the config file,\n";
+       print "  if not found, it will read $PROG.conf\n";
+       print "  See README.TXT file to know how to create the config file.\n";
+       print "\n";
+       print "Advanced options:\n";
+       print "  update=0            to only show a report, no update of statistics\n";
+       print "  lang=X              to show a report page in language number X\n";
+       print "  month=MM year=YYYY  to show a report for an old month=MM, year=YYYY\n";
+       print "  Warning : Those 'date' options doesn't allow you to process old log file.\n";
+       print "  It only allows you to see a report for a choosed month/year period instead\n";
+       print "  of current month/year. To update stats from a log file, use standard syntax.\n";
+       print "  Be care to process log files in chronological order.\n";
+       print "\n";
+       print "Now supports/detects:\n";
+       print "  Number of visits and unique visitors\n";
+       print "  Rush hours\n";
+       print "  Most often viewed pages\n";
+       @DomainsArray=keys %DomainsHash;
+       print "  ".(@DomainsArray)." domains/countries\n";
+       @BrowserArray=keys %BrowsersHash;
+       print "  ".(@BrowserArray)." browsers\n";
+       @OSArray=keys %OSHash;
+       print "  ".(@OSArray)." Operating Systems\n";
+       @RobotArray=keys %RobotHash;
+       print "  ".(@RobotArray)." robots\n";
+       @SearchEnginesArray=keys %SearchEnginesHash;
+       print "  ".(@SearchEnginesArray)." search engines (and keywords or keyphrases used from them)\n";
+       print "  All HTTP errors\n";
+       print "  Statistics by day/month/year\n";
+       print "New versions and FAQ at http://awstats.sourceforge.net\n";
+       exit 0;
        }
 
-       print "<br>\n";
-       foreach my $flag (@flaglist) {
-               if ($flag ne $CurrentLang) {
-                       my $lng=$flag;
-                       if ($flag eq "en") { $lng="English"; }
-                       if ($flag eq "fr") { $lng="French"; }
-                       if ($flag eq "de") { $lng="German"; }
-                       if ($flag eq "it") { $lng="Italian"; }
-                       if ($flag eq "nl") { $lng="Dutch"; }
-                       if ($flag eq "es") { $lng="Spanish"; }
-                       print "<a href=\"$DirCgi$PROG.$Extension?${NewLinkParams}lang=$flag\"><img src=\"$DirIcons\/flags\/$flag.png\" height=14 border=0 alt=\"$lng\" title=\"$lng\"></a>&nbsp;\n";
-               }
-       }
-}
-
-#--------------------------------------------------------------------
-# Function:      Format value in bytes in a string (Bytes, Kb, Mb, Gb)
-# Input:         bytes
-#--------------------------------------------------------------------
-sub Format_Bytes {
-       my $bytes = shift||0;
-       my $fudge = 1;
-       if ($bytes >= $fudge * exp(3*log(1024))) { return sprintf("%.2f", $bytes/exp(3*log(1024)))." Gb"; }
-       if ($bytes >= $fudge * exp(2*log(1024))) { return sprintf("%.2f", $bytes/exp(2*log(1024)))." Mb"; }
-       if ($bytes >= $fudge * exp(1*log(1024))) { return sprintf("%.2f", $bytes/exp(1*log(1024)))." $Message[44]"; }
-       if ($bytes < 0) { $bytes="?"; }
-       return "$bytes $Message[75]";
-}
-
-#------------------------------------------------------------------------------
-# Function:      Format a date according to Message[78] (country date format)
-# Input:         day month year hour min
-#------------------------------------------------------------------------------
-sub Format_Date {
-       my $date=shift;
-       my $year=substr("$date",0,4);
-       my $month=substr("$date",4,2);
-       my $day=substr("$date",6,2);
-       my $hour=substr("$date",8,2);
-       my $min=substr("$date",10,2);
-       my $dateformat=$Message[78];
-       $dateformat =~ s/yyyy/$year/g;
-       $dateformat =~ s/yy/$year/g;
-       $dateformat =~ s/mmm/$monthlib{$month}/g;
-       $dateformat =~ s/mm/$month/g;
-       $dateformat =~ s/dd/$day/g;
-       $dateformat =~ s/HH/$hour/g;
-       $dateformat =~ s/MM/$min/g;
-       return "$dateformat";
-}
-
-#--------------------------------------------------------------------
-# Function:     Return 1 if string contains only ascii chars
-# Input:        String
-# Return:       0 or 1
-#--------------------------------------------------------------------
-sub IsAscii {
-       my $string=shift;
-       debug("IsAscii($string)",4);
-       if ($string =~ /^[\w\+\-\/\\\.%,;:=\"\'&?!\s]+$/) {
-               debug(" Yes",4);
-               return 1;               # Only alphanum chars (and _) or + - / \ . % , ; : = " ' & ? space \t
-       }
-       debug(" No",4);
-       return 0;
-}
-
-
-#--------------------------------------------------------------------
-# MAIN
-#--------------------------------------------------------------------
-if ($ENV{"GATEWAY_INTERFACE"}) {       # Run from a browser
-       print("Content-type: text/html\n\n\n");
-       if ($ENV{"CONTENT_LENGTH"}) {
-               binmode STDIN;
-               read(STDIN, $QueryString, $ENV{'CONTENT_LENGTH'});
-       }
-       if ($ENV{"QUERY_STRING"}) {
-               $QueryString = $ENV{"QUERY_STRING"};
-       }
-       $QueryString =~ s/<script.*$//i;                                                # This is to avoid 'Cross Site Scripting attacks'
-       if ($QueryString =~ /site=/i)   { $SiteConfig=$QueryString; $SiteConfig =~ s/.*site=//i;   $SiteConfig =~ s/&.*//; $SiteConfig =~ s/ .*//; }    # For backward compatibility
-       if ($QueryString =~ /config=/i) { $SiteConfig=$QueryString; $SiteConfig =~ s/.*config=//i; $SiteConfig =~ s/&.*//; $SiteConfig =~ s/ .*//; }
-       $UpdateStats=0; $HTMLOutput=1;                                                  # No update but report by default when run from a browser
-       if ($QueryString =~ /update=1/i)   { $UpdateStats=1; }                                  # Update is required
-}
-else {                                                                 # Run from command line
-       if ($ARGV[0] && $ARGV[0] eq "-h") { $SiteConfig = $ARGV[1]; }           # Kept for backward compatibility but useless
-       $QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
-       $QueryString =~ s/<script.*$//i;                                                # This is to avoid 'Cross Site Scripting attacks'
-       if ($QueryString =~ /site=/i)   { $SiteConfig=$QueryString; $SiteConfig =~ s/.*site=//i;   $SiteConfig =~ s/&.*//; $SiteConfig =~ s/ .*//; }    # For backward compatibility
-       if ($QueryString =~ /config=/i) { $SiteConfig=$QueryString; $SiteConfig =~ s/.*config=//i; $SiteConfig =~ s/&.*//; $SiteConfig =~ s/ .*//; }
-       $UpdateStats=1; $HTMLOutput=0;                                                  # Update with no report by default when run from command line
-       if ($QueryString =~ /-output/i)    { $UpdateStats=0; $HTMLOutput=1; }   # Report and no update if an output is required
-       if ($QueryString =~ /-update/i)    { $UpdateStats=1; }                                  # Except if -update specified
-       if ($QueryString =~ /-showsteps/i) { $ShowSteps=1; } else { $ShowSteps=0; }
-       if ($QueryString =~ /-showcorrupted/i) { $ShowCorrupted=1; } else { $ShowCorrupted=0; }
-}
-if ($QueryString =~ /sort=/i)                  { $Sort=$QueryString;  $Sort =~ s/.*sort=//i;  $Sort =~ s/&.*//;  $Sort =~ s/ .*//; }
-if ($QueryString =~ /debug=/i)                 { $Debug=$QueryString; $Debug =~ s/.*debug=//i; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
-if ($QueryString =~ /output=urldetail:/i)      {       
-       # A filter can be defined with output=urldetail to reduce number of lines read and showed
-       $URLFilter=$QueryString; $URLFilter =~ s/.*output=urldetail://; $URLFilter =~ s/&.*//; $URLFilter =~ s/ .*//;
-}
-&debug("QUERY_STRING=$QueryString",2);
-
-($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
-
-# Read reference databases
-&Read_Ref_Data();
-
-if ((! $ENV{"GATEWAY_INTERFACE"}) && (! $SiteConfig)) {
-       print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
-       print "$PROG is a free web server logfile analyzer to show you advanced web\n";
-       print "statistics.\n";
-       print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software distributed\n";
-       print "with a GNU General Public License (See COPYING.txt file for details).\n";
-       print "\n";
-       print "Syntax: $PROG.$Extension -config=virtualhostname [options]\n";
-       print "  This runs $PROG in command line to update statistics of a web site, from\n";
-       print "  the log file defined in config file, and/or returns a HTML report.\n";
-       print "  First, $PROG tries to read $PROG.virtualhostname.conf as the config file.\n";
-       print "  If not found, $PROG tries to read $PROG.conf\n";
-       print "  See README.TXT file to know how to create the config file.\n";
-       print "\n";
-       print "Options to update statistics:\n";
-       print "  -update        to update statistics (default)\n";
-       print "  -showsteps     to add benchmark information every $NbOfLinesForBenchmark lines processed\n";
-#      print "  -showcorrupted to add a print on stdout of all found corrupted lines\n";
-       print "  Be care to process log files in chronological order when updating statistics.\n";
-       print "\n";
-       print "Options to show statistics:\n";
-       print "  -output     to output a HTML report (no update made except if -update is set)\n";
-       print "  -lang=LL    to output a HTML report in language LL (en,de,es,fr,it,nl,...)\n";
-       print "  -month=MM   to output a HTML report for an old month=MM\n";
-       print "  -year=YYYY  to output a HTML report for an old year=YYYY\n";
-       print "  Warning: Those 'date' options doesn't allow you to process old log file.\n";
-       print "  It only allows you to see a report for a chosen month/year period instead\n";
-       print "  of current month/year.\n";
-       print "\n";
-#      print "Common options:\n";
-#      print "  -debug=X             to add debug informations lesser than level X\n";
-#      print "\n";
-       print "Now supports/detects:\n";
-       print "  Reverse DNS lookup\n";
-       print "  Number of visits, unique visitors, list of last visits\n";
-       print "  Hosts list and unresolved IP addresses list\n";
-       print "  Days of week and rush hours\n";
-       print "  Authenticated users\n";
-       print "  Viewed and entry pages\n";
-       print "  ".(scalar keys %DomainsHashIDLib)." domains/countries\n";
-       print "  ".(scalar keys %BrowsersHashIDLib)." browsers\n";
-       print "  ".(scalar keys %OSHashLib)." operating systems\n";
-       print "  ".(scalar keys %RobotHashIDLib)." robots\n";
-       print "  ".(scalar keys %SearchEnginesHashIDLib)." search engines (and keyphrases/keywords used from them)\n";
-       print "  All HTTP errors\n";
-       print "  Report by day/month/year\n";
-       print "  And a lot of other advanced options...\n";
-       print "New versions and FAQ at http://awstats.sourceforge.net\n";
-       exit 0;
-}
-
 # Get current time
-$nowtime=time;
-($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear,$nowwday) = localtime($nowtime);
-$nowweekofmonth=int($nowday/7);
-$nowdaymod=$nowday%7;
-$nowwday++;
-if ($nowdaymod <= $nowwday) { if (($nowwday != 7) || ($nowdaymod != 0)) { $nowweekofmonth=$nowweekofmonth+1; } }
-if ($nowdaymod >  $nowwday) { $nowweekofmonth=$nowweekofmonth+2; }
-$nowweekofmonth = "0$nowweekofmonth";
+($nowsec,$nowmin,$nowhour,$nowday,$nowmonth,$nowyear) = localtime(time);
 if ($nowyear < 100) { $nowyear+=2000; } else { $nowyear+=1900; }
 $nowsmallyear=$nowyear;$nowsmallyear =~ s/^..//;
 if (++$nowmonth < 10) { $nowmonth = "0$nowmonth"; }
 if ($nowday < 10) { $nowday = "0$nowday"; }
 if ($nowhour < 10) { $nowhour = "0$nowhour"; }
 if ($nowmin < 10) { $nowmin = "0$nowmin"; }
-if ($nowsec < 10) { $nowsec = "0$nowsec"; }
 # Get tomorrow time (will be used to discard some record with corrupted date (future date))
-($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime($nowtime+86400);
+($tomorrowsec,$tomorrowmin,$tomorrowhour,$tomorrowday,$tomorrowmonth,$tomorrowyear) = localtime(time+86400);
 if ($tomorrowyear < 100) { $tomorrowyear+=2000; } else { $tomorrowyear+=1900; }
 $tomorrowsmallyear=$tomorrowyear;$tomorrowsmallyear =~ s/^..//;
 if (++$tomorrowmonth < 10) { $tomorrowmonth = "0$tomorrowmonth"; }
 if ($tomorrowday < 10) { $tomorrowday = "0$tomorrowday"; }
 if ($tomorrowhour < 10) { $tomorrowhour = "0$tomorrowhour"; }
 if ($tomorrowmin < 10) { $tomorrowmin = "0$tomorrowmin"; }
-if ($tomorrowsec < 10) { $tomorrowsec = "0$tomorrowsec"; }
-$timetomorrow=int($tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec);
+$timetomorrow=$tomorrowyear.$tomorrowmonth.$tomorrowday.$tomorrowhour.$tomorrowmin.$tomorrowsec;       
 
 # Read config file
 &Read_Config_File;
-if ($QueryString =~ /lang=/i) { $Lang=$QueryString; $Lang =~ s/.*lang=//i; $Lang =~ s/&.*//; $Lang =~ s/ .*//; }
-if ($Lang eq "") { $Lang="en"; }
-
-# Change old values of Lang into new for compatibility
-if ($Lang eq "0") { $Lang="en"; }
-if ($Lang eq "1") { $Lang="fr"; }
-if ($Lang eq "2") { $Lang="nl"; }
-if ($Lang eq "3") { $Lang="es"; }
-if ($Lang eq "4") { $Lang="it"; }
-if ($Lang eq "5") { $Lang="de"; }
-if ($Lang eq "6") { $Lang="pl"; }
-if ($Lang eq "7") { $Lang="gr"; }
-if ($Lang eq "8") { $Lang="cz"; }
-if ($Lang eq "9") { $Lang="pt"; }
-if ($Lang eq "10") { $Lang="kr"; }
-
-# Get the output strings
-&Read_Language_Data($Lang);
+if ($QueryString =~ /lang=/i) { $Lang=$QueryString; $Lang =~ s/.*lang=//; $Lang =~ s/&.*//;  $Lang =~ s/ .*//; }
 
 # Check and correct bad parameters
 &Check_Config;
+       
+# Print html header
+&html_head;
 
 # Init other parameters
-if ($ENV{"GATEWAY_INTERFACE"}) { $DirCgi=""; }
+if ($ENV{"GATEWAY_INTERFACE"} ne "") { $DirCgi=""; }
 if (($DirCgi ne "") && !($DirCgi =~ /\/$/) && !($DirCgi =~ /\\$/)) { $DirCgi .= "/"; }
-if ($DirData eq "" || $DirData eq ".") { $DirData=$DIR; }      # If not defined or chosen to "." value then DirData is current dir
+if ($DirData eq "" || $DirData eq ".") { $DirData=$DIR; }      # If not defined or choosed to "." value then DirData is current dir
 if ($DirData eq "")  { $DirData="."; }                                         # If current dir not defined then we put it to "."
-$DirData =~ s/\/$//; $DirData =~ s/\\$//;
-$SiteToAnalyze=$SiteDomain;
-if ($SiteToAnalyze eq "") { $SiteToAnalyze=$SiteConfig; }
-$SiteToAnalyze =~ tr/A-Z/a-z/;
-$SiteToAnalyzeWithoutwww = $SiteToAnalyze; $SiteToAnalyzeWithoutwww =~ s/www\.//;
-if ($FirstDayOfWeek == 1) { @DOWIndex = (1,2,3,4,5,6,0); }
-else { @DOWIndex = (0,1,2,3,4,5,6); }
+$DirData =~ s/\/$//;
+if ($DNSLookup) { use Socket; }
+$NewDNSLookup=$DNSLookup;
+%monthlib =  ( "01","$message[60][$Lang]","02","$message[61][$Lang]","03","$message[62][$Lang]","04","$message[63][$Lang]","05","$message[64][$Lang]","06","$message[65][$Lang]","07","$message[66][$Lang]","08","$message[67][$Lang]","09","$message[68][$Lang]","10","$message[69][$Lang]","11","$message[70][$Lang]","12","$message[71][$Lang]" );
+# monthnum must be in english because it's used to translate log date in log files which are always in english
+%monthnum =  ( "Jan","01","Feb","02","Mar","03","Apr","04","May","05","Jun","06","Jul","07","Aug","08","Sep","09","Oct","10","Nov","11","Dec","12" );
 
 # Check year and month parameters
 if ($QueryString =~ /year=/i)  { $YearRequired=$QueryString; $YearRequired =~ s/.*year=//; $YearRequired =~ s/&.*//;  $YearRequired =~ s/ .*//; }
-if ((! $YearRequired) || ($YearRequired !~ /^\d\d\d\d$/)) { $YearRequired=$nowyear; }
+if ($YearRequired !~ /^[\d][\d][\d][\d]$/) { $YearRequired=$nowyear; }
 if ($QueryString =~ /month=/i) { $MonthRequired=$QueryString; $MonthRequired =~ s/.*month=//; $MonthRequired =~ s/&.*//; $MonthRequired =~ s/ .*//; }
-if ((! $MonthRequired) || ($MonthRequired ne "year" && $MonthRequired !~ /^[\d][\d]$/)) { $MonthRequired=$nowmonth; }
-# day is a hidden option. Must not be used (Make results not understandable). Available for users that rename historic files with day.
-if ($QueryString =~ /day=/i)   { $DayRequired=$QueryString; $DayRequired =~ s/.*day=//; $DayRequired =~ s/&.*//; $DayRequired =~ s/ .*//; }
-if ((! $DayRequired) || ($DayRequired !~ /^[\d][\d]$/)) { $DayRequired=""; }
+if ($MonthRequired ne "year" && $MonthRequired !~ /^[\d][\d]$/) { $MonthRequired=$nowmonth; }
 
-# Print html header
-&html_head;
+$BrowsersHash{"netscape"}="<font color=blue>Netscape</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">($message[58][$Lang])</a>";
+$BrowsersHash{"msie"}="<font color=blue>MS Internet Explorer</font> <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">($message[58][$Lang])</a>";
 
-# Security check
-if ($UpdateStats && ($AllowToUpdateStatsFromBrowser==0) && ($ENV{"GATEWAY_INTERFACE"})) {
-       error("Error: Update of statistics is not allowed from a browser.");
-}
+if (@HostAliases == 0) {
+       warning("Warning: HostAliases parameter is not defined, $PROG will choose \"$SiteToAnalyze localhost 127.0.0.1\".");
+       $HostAliases[0]=$SiteToAnalyze; $HostAliases[1]="localhost"; $HostAliases[2]="127.0.0.1";
+       }
+
+$SiteToAnalyzeIsInHostAliases=0;
+foreach $elem (@HostAliases) { if ($elem eq $SiteToAnalyze) { $SiteToAnalyzeIsInHostAliases=1; last; } }
+if ($SiteToAnalyzeIsInHostAliases == 0) { $HostAliases[@HostAliases]=$SiteToAnalyze; }
+if (@SkipFiles == 0) { $SkipFiles[0]="\.css\$";$SkipFiles[1]="\.js\$";$SkipFiles[2]="\.class\$";$SkipFiles[3]="robots\.txt\$"; }
+$FirstTime=0;$LastTime=0;$LastUpdate=0;$TotalVisits=0;$TotalHosts=0;$TotalUnique=0;$TotalDifferentPages=0;$TotalDifferentKeywords=0;$TotalKeywords=0;
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix;if ($monthix < 10) { $monthix  = "0$monthix"; }
+       $FirstTime{$YearRequired.$monthix}=0;$LastTime{$YearRequired.$monthix}=0;$LastUpdate{$YearRequired.$monthix}=0;
+       $MonthVisits{$YearRequired.$monthix}=0;$MonthUnique{$YearRequired.$monthix}=0;$MonthPage{$YearRequired.$monthix}=0;$MonthHits{$YearRequired.$monthix}=0;$MonthBytes{$YearRequired.$monthix}=0;
+       }
+for ($ix=0; $ix<5; $ix++) {    $_from_h[$ix]=0; }
 
-# Init global variables required for output and update process
-%monthlib = ("01","$Message[60]","02","$Message[61]","03","$Message[62]","04","$Message[63]","05","$Message[64]","06","$Message[65]","07","$Message[66]","08","$Message[67]","09","$Message[68]","10","$Message[69]","11","$Message[70]","12","$Message[71]");
-%monthnum = ("Jan","01","jan","01","Feb","02","feb","02","Mar","03","mar","03","Apr","04","apr","04","May","05","may","05","Jun","06","jun","06","Jul","07","jul","07","Aug","08","aug","08","Sep","09","sep","09","Oct","10","oct","10","Nov","11","nov","11","Dec","12","dec","12"); # monthnum must be in english because used to translate log date in apache log files
-$LastLine=0;$FirstTime=0;$LastTime=0;$LastUpdate=0;$TotalVisits=0;$TotalHostsKnown=0;$TotalHostsUnKnown=0;$TotalUnique=0;$TotalDifferentPages=0;
-for (my $ix=1; $ix<=12; $ix++) {
-       my $monthix=$ix;if ($monthix < 10) { $monthix  = "0$monthix"; }
-       $LastLine{$YearRequired.$monthix}=0;$FirstTime{$YearRequired.$monthix}=0;$LastTime{$YearRequired.$monthix}=0;$LastUpdate{$YearRequired.$monthix}=0;
-       $MonthVisits{$YearRequired.$monthix}=0;$MonthUnique{$YearRequired.$monthix}=0;$MonthPages{$YearRequired.$monthix}=0;$MonthHits{$YearRequired.$monthix}=0;$MonthBytes{$YearRequired.$monthix}=0;$MonthHostsKnown{$YearRequired.$monthix}=0;$MonthHostsUnKnown{$YearRequired.$monthix}=0;
+# Show logo
+print "<table WIDTH=$WIDTH>\n";
+print "<tr valign=center><td class=LEFT width=150 style=\"font: 18px arial,verdana,helvetica; font-weight: bold\">AWStats\n";
+# Show flags
+if ($ShowFlagLinks == 1) {
+       print "<br>\n";
+       my $sp = '';
+       for (0..5) {            # Only flags for 5 major languages
+               if ($Lang != $_) {
+                       my ($lng, $flg) = split(/\s+/, $message[72][$_]);
+                       print "$sp<a href=\"$DirCgi$PROG.$Extension?site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$_\"><img src=\"$DirIcons\/flags\/$flg\" height=14 border=0 alt=\"$lng\" title=\"$lng\"></a>\n";
+                       $sp = '&nbsp;';
+               }
+       }
 }
-&Init_HashArray;       # Should be useless in perl (except with mod_perl that keep variables in memory).
+print "</td>\n";
+print "<td class=LEFT width=450><a href=\"http://awstats.sourceforge.net\" target=_newawstats><img src=$DirIcons/other/$Logo border=0 alt=\"$PROG Official Web Site\" title=\"$PROG Official Web Site\"></a></td></tr>\n";
+#print "<b><font face=\"verdana\" size=1><a href=\"$HomeURL\">HomePage</a> &#149\; <a href=\"javascript:history.back()\">Back</a></font></b><br>\n";
+print "<tr><td class=LEFT colspan=2>$message[54][$Lang]</td></tr>\n";
+print "</table>\n";
 
+print "<hr>\n";
 
-#------------------------------------------
-# UPDATE PROCESS
-#------------------------------------------
 
+# No update (no log processing) if not current month or full current year asked
+#if (($YearRequired == $nowyear) && ($MonthRequired eq "year" || $MonthRequired == $nowmonth)) {
+# No update (no log processing) if UpdateStats != 1
 if ($UpdateStats) {
 
-       if ($DNSLookup) {
-       #       eval { use Sockets; }; 
-       #       if ($@){
-       #               error("Error: The perl 'Socket' module is not installed. Install it from CPAN or use a more 'standard' perl interpreter.\n");
-       #       }
-               use Socket;
-       }
-       $NewDNSLookup=$DNSLookup;
-
-       # Init global variables required for update process
-       push @RobotArrayList,"major";
-       push @RobotArrayList,"other";
-       push @RobotArrayList,"generic";
-       foreach my $key (@RobotArrayList) {
-               if ($key ne "other") {
-                       push @RobotArrayID,@{"RobotArrayID_$key"};
-                       debug("Add ".@{"RobotArrayID_$key"}." elements from RobotArrayID_$key into RobotArrayID",2);
-               }
-               else {
-                       my $added=0;
-                       foreach my $robotid (keys %RobotHashIDLib) {
-                               # Check if robotid already in RobotArrayID
-                               my $alreadyin=0;
-                               foreach my $robotin (@RobotArrayID) {
-                                       if ($robotid eq $robotin) { $alreadyin=1; last; }
-                               }
-                               if (! $alreadyin) {
-                                       push @RobotArrayID,$robotid;
-                                       $added++;
-                               }
-                       }       
-                       debug("Add $added elements from RobotHashIDLib into RobotArrayID",2);
-               }
-       }
-       debug("RobotArrayID has now ".@RobotArrayID." elements",2);
-       if (! @HostAliases) {
-               warning("Warning: HostAliases parameter is not defined, $PROG choose \"$SiteToAnalyze localhost 127.0.0.1\".");
-               $HostAliases[0]="$SiteToAnalyze"; $HostAliases[1]="localhost"; $HostAliases[2]="127.0.0.1";
-       }
-       my $SiteToAnalyzeIsInHostAliases=0;
-       foreach my $elem (@HostAliases) { if ($elem eq $SiteToAnalyze) { $SiteToAnalyzeIsInHostAliases=1; last; } }
-       if (! $SiteToAnalyzeIsInHostAliases) { $HostAliases[@HostAliases]=$SiteToAnalyze; }
-       if (! @SkipFiles) { $SkipFiles[0]="\.css\$";$SkipFiles[1]="\.js\$";$SkipFiles[2]="\.class\$";$SkipFiles[3]="robots\.txt\$"; }
+       #------------------------------------------
+       # READING THE LAST PROCESSED HISTORY FILE
+       #------------------------------------------
 
-       &debug("Start Update process");
+       # Search last file
+       opendir(DIR,"$DirData");
+       @filearray = sort readdir DIR;
+       close DIR;
+       $yearmonthmax=0;
+       foreach $i (0..$#filearray) {
+               if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.txt$/) {
+                       $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+                       $yearfile=$yearmonthfile; $yearfile =~ s/^..//;
+                       $monthfile=$yearmonthfile; $monthfile =~ s/....$//;
+                       $yearmonthfile="$yearfile$monthfile";   # year and month have been inversed
+                       if ($yearmonthfile > $yearmonthmax) { $yearmonthmax=$yearmonthfile; }
+               }
+       };
+
+       $monthtoprocess=0;$yeartoprocess=0;
+       if ($yearmonthmax) {    # We found last history file
+               $yeartoprocess=$yearmonthmax; $monthtoprocess=$yearmonthmax;
+               $yeartoprocess =~ s/..$//; $monthtoprocess =~ s/^....//;
+               # We read LastTime in this last history file.
+               &Read_History_File($yeartoprocess,$monthtoprocess,1);
+       }
 
+       #------------------------------------------
        # GENERATING PerlParsingFormat
        #------------------------------------------
        # Log example records
@@ -1845,54 +2217,15 @@ if ($UpdateStats) {
        $LogFormatString=$LogFormat;
        if ($LogFormat == 1) { $LogFormatString="%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""; }
        if ($LogFormat == 2) { $LogFormatString="date time c-ip cs-username cs-method cs-uri-stem sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)"; }
-       if ($LogFormat == 4) { $LogFormatString="%h %l %u %t \"%r\" %>s %b"; }
-       if ($LogFormat == 5) { $LogFormatString="c-ip cs-username c-agent sc-authenticated date time s-svcname s-computername cs-referred r-host r-ip r-port time-taken cs-bytes sc-bytes cs-protocol cs-transport s-operation cs-uri cs-mime-type s-object-source sc-status s-cache-info"; }
-       # Replacement for Apache format string
-       $LogFormatString =~ s/%h([\s])/%host$1/g; $LogFormatString =~ s/%h$/%host/g;
-       $LogFormatString =~ s/%l([\s])/%other$1/g; $LogFormatString =~ s/%l$/%other/g;
-       $LogFormatString =~ s/%u([\s])/%logname$1/g; $LogFormatString =~ s/%u$/%logname/g;
-       $LogFormatString =~ s/%t([\s])/%time1$1/g; $LogFormatString =~ s/%t$/%time1/g;
-       $LogFormatString =~ s/\"%r\"/%methodurl/g;
-       $LogFormatString =~ s/%>s/%code/g;                      
-       $LogFormatString =~ s/%b([\s])/%bytesd$1/g;     $LogFormatString =~ s/%b$/%bytesd/g;
-       $LogFormatString =~ s/\"%\(Referer\)i\"/%refererquot/g;
-       $LogFormatString =~ s/\"%\(User-Agent\)i\"/%uaquot/g;
-       # Replacement for a IIS and ISA format string
-       $LogFormatString =~ s/date\stime/%time2/g;
-       $LogFormatString =~ s/c-ip/%host/g;
-       $LogFormatString =~ s/cs-username/%logname/g;
-       $LogFormatString =~ s/cs-method/%method/g;
-       $LogFormatString =~ s/cs-uri-stem/%url/g; $LogFormatString =~ s/cs-uri/%url/g;
-       $LogFormatString =~ s/sc-status/%code/g;
-       $LogFormatString =~ s/sc-bytes/%bytesd/g;
-       $LogFormatString =~ s/cs-version/%other/g;      # Protocol
-       $LogFormatString =~ s/cs\(User-Agent\)/%ua/g; $LogFormatString =~ s/c-agent/%ua/g;
-       $LogFormatString =~ s/cs\(Referer\)/%referer/g; $LogFormatString =~ s/cs-referred/%referer/g;
-       $LogFormatString =~ s/cs-uri-query/%host/g;
-       $LogFormatString =~ s/sc-authenticated/%other/g;
-       $LogFormatString =~ s/s-svcname/%other/g;
-       $LogFormatString =~ s/s-computername/%other/g;
-       $LogFormatString =~ s/r-host/%other/g;
-       $LogFormatString =~ s/r-ip/%other/g;
-       $LogFormatString =~ s/r-port/%other/g;
-       $LogFormatString =~ s/time-taken/%other/g;
-       $LogFormatString =~ s/cs-bytes/%other/g;
-       $LogFormatString =~ s/cs-protocol/%other/g;
-       $LogFormatString =~ s/cs-transport/%other/g;
-       $LogFormatString =~ s/s-operation/%other/g;
-       $LogFormatString =~ s/cs-mime-type/%other/g;
-       $LogFormatString =~ s/s-object-source/%other/g;
-       $LogFormatString =~ s/s-cache-info/%other/g;
-       # Generate PerlParsingFormat
        &debug("Generate PerlParsingFormat from LogFormatString=$LogFormatString");
        $PerlParsingFormat="";
        if ($LogFormat == 1) {
-               $PerlParsingFormat="([^\\s]+) [^\\s]+ ([^\\s]+) \\[([^\\s]+) [^\\s]+\\] \\\"([^\\s]+) ([^\\s]+) [^\\\"]+\\\" ([\\d|-]+) ([\\d|-]+) \\\"(.*)\\\" \\\"([^\\\"]+)\\\"";
-               $pos_rc=1;$pos_logname=2;$pos_date=3;$pos_method=4;$pos_url=5;$pos_code=6;$pos_size=7;$pos_referer=8;$pos_agent=9;
-               $lastrequiredfield=9;
+               $PerlParsingFormat="([^\\s]*) ([^\\s]*) ([^\\s]*) \\[([^\\s]*) ([^\\s]*)\\] \\\"([^\\s]*) ([^\\s]*) [^\\\"]*\\\" ([\\d|-]*) ([\\d|-]*) \\\"([^\\\"]*)\\\" \\\"([^\\\"]*)\\\"";
+               $pos_rc=1;$pos_logname=2;$pos_user=3;$pos_date=4;$pos_zone=5;$pos_method=6;$pos_url=7;$pos_code=8;$pos_size=9;$pos_referer=10;$pos_agent=11;
+               $lastrequiredfield=11;
        }
        if ($LogFormat == 2) {
-               $PerlParsingFormat="([^\\s]+ [^\\s]+) ([^\\s]+) ([^\\s]+) ([^\\s]+) ([^\\s]+) ([\\d|-]+) ([\\d|-]+) [^\\s]+ ([^\\s]+) ([^\\s]+)";
+               $PerlParsingFormat="([^\\s]* [^\\s]*) ([^\\s]*) ([^\\s]*) ([^\\s]*) ([^\\s]*) ([\\d|-]*) ([\\d|-]*) [^\\s]* ([^\\s]*) ([^\\s]*)";
                $pos_date=1;$pos_rc=2;$pos_logname=3;$pos_method=4;$pos_url=5;$pos_code=6;$pos_size=7;$pos_agent=8;$pos_referer=9;
                $lastrequiredfield=9;
        }
@@ -1901,37 +2234,22 @@ if ($UpdateStats) {
                $pos_date=1;$pos_method=2;$pos_code=3;$pos_rc=4;$pos_agent=5;$pos_referer=6;$pos_url=7;$pos_size=8;
                $lastrequiredfield=8;
        }
-       if ($LogFormat == 4) {
-               $PerlParsingFormat="([^\\s]*) [^\\s]* ([^\\s]*) \\[([^\\s]*) [^\\s]*\\] \\\"([^\\s]*) ([^\\s]*) [^\\\"]*\\\" ([\\d|-]*) ([\\d|-]*)";
-               $pos_rc=1;$pos_logname=2;$pos_date=3;$pos_method=4;$pos_url=5;$pos_code=6;$pos_size=7;
-               $lastrequiredfield=7;
-       }
-       if ($LogFormat == 5) {
-               $PerlParsingFormat="([^\\t]*)\\t([^\\t]*)\\t([^\\t]*)\\t[^\\t]*\\t([^\\t]*\\t[^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t[^\\t]*\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\\t([^\\t]*)\\t[^\\t]*\\t[^\\t]*\\t([^\\t]*)\\t[^\\t]*";
-               $pos_rc=1;$pos_logname=2;$pos_agent=3;$pos_date=4;$pos_referer=5;$pos_size=6;$pos_method=7;$pos_url=8;$pos_code=9;
-               $lastrequiredfield=9;
-       }
-       if ($LogFormat < 1 || $LogFormat > 5) {
+       if ($LogFormat != 1 && $LogFormat != 2 && $LogFormat != 3) {
                # Scan $LogFormat to found all required fields and generate PerlParsing
-               my @fields = split(/ +/, $LogFormatString); # make array of entries
-               my $i = 1;
-               foreach my $f (@fields) {
-                       my $found=0;
-                       if ($f =~ /%host$/) {
+               @fields = split(/ +/, $LogFormatString); # make array of entries
+               $i = 1;
+               foreach $f (@fields) {
+                       $found=0;
+                       if ($f =~ /%host$/ || $f =~ /%h$/ || $f =~ /c-ip$/) {
                                $found=1; 
                                $pos_rc = $i; $i++;
                                $PerlParsingFormat .= "([^\\s]*) ";
                        }
-                       if ($f =~ /%logname$/) {
-                               $found=1; 
-                               $pos_logname = $i; $i++;
-                               $PerlParsingFormat .= "([^\\s]*) ";
-                       }
-                       if ($f =~ /%time1$/) {
+                       if ($f =~ /%time1$/ || $f =~ /%t$/) {
                                $found=1; 
                                $pos_date = $i;
                                $i++;
-                               #$pos_zone = $i;
+                               $pos_zone = $i;
                                $i++;
                                $PerlParsingFormat .= "\\[([^\\s]*) ([^\\s]*)\\] ";
                        }
@@ -1941,7 +2259,7 @@ if ($UpdateStats) {
                                $i++;
                                $PerlParsingFormat .= "([^\\s]* [^\\s]*) ";
                        }
-                       if ($f =~ /%methodurl$/) {
+                       if ($f =~ /%methodurl$/ || $f =~ /\\"%r\\"/) {
                                $found=1; 
                                $pos_method = $i;
                                $i++;
@@ -1949,231 +2267,166 @@ if ($UpdateStats) {
                                $i++;
                                $PerlParsingFormat .= "\\\"([^\\s]*) ([^\\s]*) [^\\\"]*\\\" ";
                        }
-                       if ($f =~ /%methodurlnoprot$/) {
-                               $found=1; 
-                               $pos_method = $i;
-                               $i++;
-                               $pos_url = $i;
-                               $i++;
-                               $PerlParsingFormat .= "\\\"([^\\s]*) ([^\\s]*)\\\" ";
-                       }
-                       if ($f =~ /%method$/) {
+                       if ($f =~ /%method$/ || $f =~ /cs-method$/) {
                                $found=1; 
                                $pos_method = $i;
                                $i++;
                                $PerlParsingFormat .= "([^\\s]*) ";
                        }
-                       if ($f =~ /%url$/) {
+                       if ($f =~ /%url$/ || $f =~ /cs-uri-stem$/) {
                                $found=1; 
                                $pos_url = $i;
                                $i++;
                                $PerlParsingFormat .= "([^\\s]*) ";
                        }
-                       if ($f =~ /%query$/) {
-                               $found=1; 
-                               $pos_query = $i;
-                               $i++;
-                               $PerlParsingFormat .= "([^\\s]*) ";
-                       }
-                       if ($f =~ /%code$/) {
+                       if ($f =~ /%code$/ || $f =~ /%.*>s$/ || $f =~ /cs-status$/) {
                                $found=1; 
                                $pos_code = $i;
                                $i++;
                                $PerlParsingFormat .= "([\\d|-]*) ";
                        }
-                       if ($f =~ /%bytesd$/) {
+                       if ($f =~ /%bytesd$/ || $f =~ /%b$/ || $f =~ /sc-bytes$/) {
                                $found=1; 
                                $pos_size = $i; $i++;
                                $PerlParsingFormat .= "([\\d|-]*) ";
                        }
-                       if ($f =~ /%refererquot$/) {
+                       if ($f =~ /%refererquot$/ || $f =~ /\\"%{Referer}i\\"/) {
                                $found=1;
                                $pos_referer = $i; $i++;
-                               $PerlParsingFormat .= "\\\"(.*)\\\" ";
+                               $PerlParsingFormat .= "\\\"([^\\\"]*)\\\" ";
                        }
-                       if ($f =~ /%referer$/) {
+                       if ($f =~ /%referer$/ || $f =~ /cs\(Referer\)/) {
                                $found=1;
                                $pos_referer = $i; $i++;
                                $PerlParsingFormat .= "([^\\s]*) ";
                        }
-                       if ($f =~ /%uaquot$/) {
+                       if ($f =~ /%uaquot$/ || $f =~ /\\"%{User-Agent}i\\"/) {
                                $found=1; 
                                $pos_agent = $i; $i++;
                                $PerlParsingFormat .= "\\\"([^\\\"]*)\\\" ";
                        }
-                       if ($f =~ /%ua$/) {
+                       if ($f =~ /%ua$/ || $f =~ /cs\(User-Agent\)/) {
                                $found=1; 
                                $pos_agent = $i; $i++;
                                $PerlParsingFormat .= "([^\\s]*) ";
                        }
-                       if ($f =~ /%gzipin$/ ) {
-                               $found=1;
-                               $pos_gzipin=$i;$i++;
-                               $PerlParsingFormat .= "([^\\s]*) ";
-                       }
-                       if ($f =~ /%gzipout$/ ) {
-                               $found=1;
-                               $pos_gzipout=$i;$i++;
-                               $PerlParsingFormat .= "([^\\s]*) ";
-                       }
-                       if ($f =~ /%gzipres$/ ) {
-                               $found=1;
-                               $pos_gzipres=$i;$i++;
-                               $PerlParsingFormat .= "([^\\s]*) ";
-                       }
                        if (! $found) { $found=1; $PerlParsingFormat .= "[^\\s]* "; }
                }
-               # Remove last space char
-               ($PerlParsingFormat) ? chop($PerlParsingFormat) : error("Error: No recognised format tag in personalised LogFormat string"); 
+               ($PerlParsingFormat) ? chop($PerlParsingFormat) : error("Error: no recognised format commands in personalised LogFormat string"); 
                $lastrequiredfield=$i--;
        }
-       if (! $pos_rc) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%host in your LogFormat string)."); }
-       if (! $pos_date) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%time1 or \%time2 in your LogFormat string)."); }
-       if (! $pos_method) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%methodurl or \%method in your LogFormat string)."); }
-       if (! $pos_url) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%methodurl or \%url in your LogFormat string)."); }
-       if (! $pos_code) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%code in your LogFormat string)."); }
-       if (! $pos_size) { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%bytesd in your LogFormat string)."); }
+       if ($pos_rc eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%host in your LogFormat string)."); }
+       if ($pos_date eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%time1 or \%time2 in your LogFormat string)."); }
+       if ($pos_method eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%methodurl or \%method in your LogFormat string)."); }
+       if ($pos_url eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%methodurl or \%url in your LogFormat string)."); }
+       if ($pos_code eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%code in your LogFormat string)."); }
+       if ($pos_size eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%bytesd in your LogFormat string)."); }
+       if ($pos_referer eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%referer or \%refererquot in your LogFormat string)."); }
+       if ($pos_agent eq "") { error("Error: Your personalised LogFormat does not include all fields required by AWStats (Add \%ua or \%uaquot in your LogFormat string)."); }
        &debug("PerlParsingFormat is $PerlParsingFormat");
 
 
-       # READING THE LAST PROCESSED HISTORY FILE
        #------------------------------------------
-       # Search last file
-       opendir(DIR,"$DirData");
-       @filearray = sort readdir DIR;
-       close DIR;
-       my $yearmonthmax=0;
-       foreach my $i (0..$#filearray) {
-               if ("$filearray[$i]" =~ /^$PROG([\d][\d])([\d][\d][\d][\d])$FileSuffix\.txt$/) {
-                       if (int("$2$1") > $yearmonthmax) { $yearmonthmax=int("$2$1"); }
-               }
-       }
-       my $monthtoprocess=0; my $yeartoprocess=0;
-       if ($yearmonthmax =~ /^([\d][\d][\d][\d])([\d][\d])$/) {                # We found last history file
-               $monthtoprocess=int($2);$yeartoprocess=int($1);
-               # We read LastTime in this last history file.
-               &Read_History_File($yeartoprocess,$monthtoprocess,1);
-       }
-
-
        # PROCESSING CURRENT LOG
        #------------------------------------------
-       &debug("Start of processing log file (monthtoprocess=$monthtoprocess, yeartoprocess=$yeartoprocess)");
-       my $yearmonth=sprintf("%04i%02i",$yeartoprocess,$monthtoprocess);
-       $NbOfLinesRead=0; $NbOfNewLinesProcessed=0; $NbOfLinesCorrupted=0;
-       $NowNewLinePhase=0;
-
-       # Open log file
-       &debug("Open log file \"$LogFile\"");
-       open(LOG,"$LogFile") || error("Error: Couldn't open server log file \"$LogFile\" : $!");
-
-       # Reste counter for benchmark (first call to GetDelaySinceStart
-       GetDelaySinceStart();
-
+       &debug("Start of processing log file $LogFile (monthtoprocess=$monthtoprocess, yeartoprocess=$yeartoprocess)");
+       $OpenFileError=1; if (open(LOG,"$LogFile")) { $OpenFileError=0; }
+       if ($OpenFileError) { error("Error: Couldn't open server log file \"$LogFile\" : $!"); }
+       $NbOfLinesProcessed=0; $NowNewLinePhase=0;
        while (<LOG>)
        {
-               if (/^#/) { next; }                                                                     # Ignore comment lines (ISS writes such comments)
-               if (/^!/) { next; }                                                                     # Ignore comment lines (Webstar writes such comments)
-               #if (/^$/) { next; }                                                            # Ignore blank lines (With ISS: happens sometimes, with Apache: possible when editing log file)
+               $savedline=$_;
                chomp $_; s/\r//;
-
-               $NbOfLinesRead++;
+               if (/^$/) { next; }                                                                     # Ignore blank lines (With ISS: happens sometimes, with Apache: possible when editing log file)
+               if (/^#/) { next; }                                                                     # Ignore comment lines (ISS writes such comments)
+               if (/^!!/) { next; }                                                            # Ignore comment lines (Webstar writes such comments)
+               $NbOfLinesProcessed++;
 
                # Parse line record to get all required fields
-               /^$PerlParsingFormat/;
-               my @field=();
+               $_ =~ /^$PerlParsingFormat/;
                foreach $i (1..$lastrequiredfield) { $field[$i]=$$i; }
-               &debug(" Record $NbOfLinesRead is ($lastrequiredfield fields read) : host=\"$field[$pos_rc]\", logname=\"$field[$pos_logname]\", date=\"$field[$pos_date]\", method=\"$field[$pos_method]\", url=\"$field[$pos_url]\", code=\"$field[$pos_code]\", size=\"$field[$pos_size]\", referer=\"$field[$pos_referer]\", agent=\"$field[$pos_agent]\"",3);
+               &debug("Fields for record $NbOfLinesProcessed: $field[$pos_rc] ; - ; - ; $field[$pos_date] ; TZ; $field[$pos_method] ; $field[$pos_url] ; $field[$pos_code] ; $field[$pos_size] ; $field[$pos_referer] ; $field[$pos_agent]",3);
 
                # Check parsed parameters
                #----------------------------------------------------------------------
-               if (! $field[$pos_code]) {
-                       $NbOfLinesCorrupted++;
-                       if ($ShowCorrupted) { print "Corrupted record: $_\n"; }
-                       if ($NbOfLinesRead >= $NbOfLinesForCorruptedLog && $NbOfLinesCorrupted == $NbOfLinesRead) { error("Format error",$_,$LogFile); }        # Exit with format error
-                       next;
+               if ($field[$pos_code] eq "") {
+                       $corrupted++;
+                       if ($NbOfLinesProcessed >= 10 && $corrupted == $NbOfLinesProcessed) {
+                               # Files seems to have bad format
+                               print "AWStats did not found any valid log lines that match your <b>LogFormat</b> parameter, in the 10th first non commented lines of your log.<br>\n";
+                               print "<font color=#880000>Your log file <b>$LogFile</b> must have a bad format or <b>LogFormat</b> parameter setup is wrong.</font><br><br>\n";
+                               print "Your <b>LogFormat</b> parameter is <b>$LogFormat</b>, this means each line in your log file need to have ";
+                               if ($LogFormat == 1) {
+                                       print "<b>\"combined log format\"</b> like this:<br>\n";
+                                       print "<font color=#888888><i>111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] \"GET / HTTP/1.1\" 200 1234 \"http://www.fromserver.com/from.htm\" \"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"</i></font><br>\n";
+                               }
+                               if ($LogFormat == 2) {
+                                       print "<b>\"MSIE Extended W3C log format\"</b> like this:<br>\n";
+                                       print "<font color=#888888><i>date time c-ip c-username cs-method cs-uri-sterm sc-status sc-bytes cs-version cs(User-Agent) cs(Referer)</i></font><br>\n";
+                               }
+                               if ($LogFormat != 1 && $LogFormat != 2) {
+                                       print "the following personalised log format:<br>\n";
+                                       print "<font color=#888888><i>$LogFormat</i></font><br>\n";
+                               }
+                               print "<br>";
+                               print "This is a sample of what AWStats found (10th non commented line):<br>\n";
+                               print "<font color=#888888><i>$_</i></font><br>\n";
+
+                               error("");      # Exit with format error
+                       }
                }
 
                # Check filters
                #----------------------------------------------------------------------
-               if ($field[$pos_method] ne 'GET' && $field[$pos_method] ne 'POST' && $field[$pos_method] !~ /OK/) { next; }     # Keep only GET, POST (OK with Webstar) but not HEAD, OPTIONS
-               #if ($field[$pos_url] =~ /^RC=/) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted Record: $_\n"; } next; }                       # A strange log record with IIS we need to forget
+               if ($field[$pos_method] ne 'GET' && $field[$pos_method] ne 'POST' && $field[$pos_method] !~ /OK/) { next; }     # Keep only GET, POST but not HEAD, OPTIONS
+               if ($field[$pos_url] =~ /^RC=/) { $corrupted++; next; }                                         # A strange log record with IIS we need to forget
                # Split DD/Month/YYYY:HH:MM:SS or YYYY-MM-DD HH:MM:SS or MM/DD/YY\tHH:MM:SS
                $field[$pos_date] =~ tr/-\/ \t/::::/;
-               my @dateparts=split(/:/,$field[$pos_date]);
+               @dateparts=split(/:/,$field[$pos_date]);
                if ($field[$pos_date] =~ /^....:..:..:/) { $tmp=$dateparts[0]; $dateparts[0]=$dateparts[2]; $dateparts[2]=$tmp; }
                if ($field[$pos_date] =~ /^..:..:..:/) { $dateparts[2]+=2000; $tmp=$dateparts[0]; $dateparts[0]=$dateparts[1]; $dateparts[1]=$tmp; }
                if ($monthnum{$dateparts[1]}) { $dateparts[1]=$monthnum{$dateparts[1]}; }       # Change lib month in num month if necessary
                # Create $timeconnexion like YYYYMMDDHHMMSS
-               my $timeconnexion=int($dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5]);
-               my $dayconnexion=$dateparts[2].$dateparts[1].$dateparts[0];
-               if ($timeconnexion < 10000000000000) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record: $_\n"; } next; }           # Should not happen, kept in case of parasite/corrupted line
-               if ($timeconnexion > $timetomorrow) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record: $_\n"; } next; }            # Should not happen, kept in case of parasite/corrupted line
+               $timeconnexion=$dateparts[2].$dateparts[1].$dateparts[0].$dateparts[3].$dateparts[4].$dateparts[5];
+               if ($timeconnexion < 10000000000000) { $corrupted++; next; }                            # Should not happen, kept in case of parasite/corrupted line
+               if ($timeconnexion > $timetomorrow) { $corrupted++; next; }                                     # Should not happen, kept in case of parasite/corrupted line
 
                # Skip if not a new line
                #-----------------------
                if ($NowNewLinePhase) {
-                       if ($timeconnexion < $LastLine{$yearmonth}) { $NbOfLinesCorrupted++; if ($ShowCorrupted) { print "Corrupted record: $_\n"; } next; }    # Should not happen, kept in case of parasite/corrupted old line
+                       if ($timeconnexion < $LastTime{$yeartoprocess.$monthtoprocess}) { next; }       # Should not happen, kept in case of parasite/corrupted old line
                }
                else {
-                       if ($timeconnexion <= $LastLine{$yearmonth}) {
-                               if ($ShowSteps && ($NbOfLinesRead % $NbOfLinesForBenchmark == 0)) {
-                                       my $delay=GetDelaySinceStart(); if ($delay < 1) { $delay=1000; }
-                                       print "$NbOfLinesRead lines read already processed ($delay ms, ".int(1000*$NbOfLinesRead/$delay)." lines/seconds)\n";
-                               }
-                               next;
-                       }       # Already processed
-                       # We found a new line. This will stop comparison "<=" between timeconnexion and LastLine (we should have only new lines now)
-                       $NowNewLinePhase=1;     
+                       if ($timeconnexion <= $LastTime{$yeartoprocess.$monthtoprocess}) { next; }      # Already processed
+                       $NowNewLinePhase=1;     # This will stop comparison "<=" between timeconnexion and LastTime (we should have only new lines now)
                }
 
-               # Here, field array, datepart array, timeconnexion and dayconnexion are init for log record
-               &debug(" This is a not already processed record",3);
-
-               # Record is approved. We found a new line
-               #----------------------------------------
-               $NbOfNewLinesProcessed++;
-               if ($ShowSteps && ($NbOfNewLinesProcessed % $NbOfLinesForBenchmark == 0)) {
-                       my $delay=GetDelaySinceStart();
-                       print "$NbOfNewLinesProcessed lines processed ($delay ms, ".int(1000*$NbOfNewLinesProcessed/($delay>0?$delay:1))." lines/seconds)\n";
-               }
-
-               $LastLine{$yearmonth} = $timeconnexion;
-
                if (&SkipHost($field[$pos_rc])) { next; }               # Skip with some client host IP addresses
                if (&SkipFile($field[$pos_url])) { next; }              # Skip with some URLs
                if (! &OnlyFile($field[$pos_url])) { next; }    # Skip with other URLs
 
-               # Is it in a new month section ?
-               #-------------------------------
-               if (((int($dateparts[1]) > $monthtoprocess) && (int($dateparts[2]) >= $yeartoprocess)) || (int($dateparts[2]) > $yeartoprocess)) {
+               # Record is approved. We found a new line. Is it in a new month section ?
+               #------------------------------------------------------------------------
+               if ((($dateparts[1] > $monthtoprocess) && ($dateparts[2] >= $yeartoprocess)) || ($dateparts[2] > $yeartoprocess)) {
                        # Yes, a new month to process
                        if ($monthtoprocess > 0) {
                                &Save_History_File($yeartoprocess,$monthtoprocess);             # We save data of current processed month
                                &Init_HashArray($yeartoprocess,$monthtoprocess);                # Start init for next one
                        }
-                       $monthtoprocess=int($dateparts[1]);$yeartoprocess=int($dateparts[2]);
-                       $yearmonth=sprintf("%04i%02i",$yeartoprocess,$monthtoprocess);
+                       $monthtoprocess=$dateparts[1];$yeartoprocess=$dateparts[2];
                        &Read_History_File($yeartoprocess,$monthtoprocess,1);           # This should be useless (file must not exist)
                }
 
                # Check return code
                #------------------
-               if ($field[$pos_code]==304) {
-                       $field[$pos_size]=0;
-               }
-               else {
-                       if ($field[$pos_code] != 200) { # Stop if HTTP server return code != 200 and 304
-                               if ($field[$pos_code] =~ /^[\d][\d][\d]$/) {                            # Keep error code and next
-                                       $_errors_h{$field[$pos_code]}++;
-                                       if ($field[$pos_code] == 404) { $_sider404_h{$field[$pos_url]}++; $_referer404_h{$field[$pos_url]}=$field[$pos_referer]; }
-                                       next;
-                               }
-                               else {                                                                                                          # Bad format record (should not happen but when using MSIndex server), next
-                                       $NbOfLinesCorrupted++;
-                                       if ($ShowCorrupted) { print "Corrupted record: $_\n"; }
-                                       next;
-                               }
+               if (($field[$pos_code] != 200) && ($field[$pos_code] != 304)) { # Stop if HTTP server return code != 200 and 304
+                       if ($field[$pos_code] =~ /^[\d][\d][\d]$/) {                            # Keep error code and next
+                               $_errors_h{$field[$pos_code]}++;
+                               if ($field[$pos_code] == 404) { $_sider404_h{$field[$pos_url]}++; $_referer404_h{$field[$pos_url]}=$field[$pos_referer]; }
+                               next;
+                       }
+                       else {                                                                                                          # Bad format record (should not happen but when using MSIndex server), next
+                               $corrupted++; next;
                        }
                }
 
@@ -2181,126 +2434,66 @@ if ($UpdateStats) {
                $UserAgent = $field[$pos_agent];
                $UserAgent =~ tr/A-Z/a-z/;
 
-               # Robot ? If yes, we stop here 
-               #-------------------------------------------------------------------------
+               # Robot ? If yes, we stop here
+               #-----------------------------
+               $foundrobot=0;
                if (!$TmpHashNotRobot{$UserAgent}) {    # TmpHashNotRobot is a temporary hash table to increase speed
-                       # If made on each record -> -1300 rows/seconds
-                       
-                       # study $UserAgent
-
-                       my $foundrobot=0;
-                       foreach my $bot (@RobotArrayID) { if ($UserAgent =~ /$bot/) { $_robot_h{$bot}++; $_robot_l{$bot}=$timeconnexion; $foundrobot=1; last; } }
-                       if ($foundrobot) { next; }
+                       foreach $bot (keys %RobotHash) { if ($UserAgent =~ /$bot/) { $_robot_h{$bot}++; $_robot_l{$bot}=$timeconnexion ; $foundrobot=1; last; } }
+                       if ($foundrobot == 1) { next; }
                        $TmpHashNotRobot{$UserAgent}=1;         # Last time, we won't search if robot or not. We know it's not.
                }
 
                # Canonize and clean target URL and referrer URL
-               my $urlwithnoquery;
-               if ($URLWithQuery) {                            
-                       $urlwithnoquery=$field[$pos_url];
-                       $urlwithnoquery =~ s/\?.*//;
-                       # We combine the URL and query strings.
-                       if ($field[$pos_query] && ($field[$pos_query] ne "-")) { $field[$pos_url] .= "?" . $field[$pos_query]; }
-               }
-               else {
-                       # Trunc CGI parameters in URL
-                       $field[$pos_url] =~ s/\?.*//;
-                       $urlwithnoquery=$field[$pos_url];
-               }
                $field[$pos_url] =~ s/\/$DefaultFile$/\//;      # Replace default page name with / only
+               $field[$pos_url] =~ s/\?.*//;                                   # Trunc CGI parameters in URL get
+               $field[$pos_url] =~ s/\/\//\//g;                                # Because some targeted url were taped with 2 / (Ex: //rep//file.htm)
 
-               # Analyze file type and compression
-               #----------------------------------
-               my $PageBool=1;
-               my $extension;
-
-               # Extension
-               if ($urlwithnoquery =~ /\.(\w{1,5})$/) {
-                       $extension=$1; $extension =~ tr/A-Z/a-z/;
-                       # Check if not a page
-                       foreach my $cursor (@NotPageList) { if ($extension eq $cursor) { $PageBool=0; last; } }
-               } else {
-                       $extension="Unknown";
-               }
-               $_filetypes_h{$extension}++;
-               $_filetypes_k{$extension}+=$field[$pos_size];
-               # Compression
-               if ($pos_gzipin && $field[$pos_gzipin]) {
-                       my ($a,$b)=split(":",$field[$pos_gzipres]);
-                       my ($notused,$in)=split(":",$field[$pos_gzipin]);
-                       my ($notused1,$out,$notused2)=split(":",$field[$pos_gzipout]);
-                       if ($out) {
-                               $_filetypes_gz_in{$extension}+=$in;
-                               $_filetypes_gz_out{$extension}+=$out;
-                       }
-               }
+               # Check if page or not
+               $PageBool=1;
+               foreach $cursor (@NotPageList) { if ($field[$pos_url] =~ /$cursor$/i) { $PageBool=0; last; } }
 
                # Analyze: Date - Hour - Pages - Hits - Kilo
                #-------------------------------------------
+               if ($FirstTime{$yeartoprocess.$monthtoprocess} == 0) { $FirstTime{$yeartoprocess.$monthtoprocess}=$timeconnexion; }
+               $LastTime{$yeartoprocess.$monthtoprocess} = $timeconnexion;
                if ($PageBool) {
-                       # FirstTime and LastTime are First and Last human visits (so changed if access to a page)
-                       if (! $FirstTime{$yearmonth}) { $FirstTime{$yearmonth}=$timeconnexion; }
-                       $LastTime{$yearmonth} = $timeconnexion;
-                       $DayPages{$dayconnexion}++;
-                       $MonthPages{$yearmonth}++;
-                       $_time_p[int($dateparts[3])]++;                                                                                         #Count accesses for hour (page)
-                       $_url_p{$field[$pos_url]}++;                                                                                            #Count accesses for page (page)
-                       }
-               $_time_h[int($dateparts[3])]++; $MonthHits{$yearmonth}++; $DayHits{$dayconnexion}++;    #Count accesses for hour (hit)
-               $_time_k[int($dateparts[3])]+=$field[$pos_size]; $MonthBytes{$yearmonth}+=$field[$pos_size]; $DayBytes{$dayconnexion}+=$field[$pos_size];       #Count accesses for hour (kb)
-
-               # Analize login
-               #--------------
-               if ($field[$pos_logname] && $field[$pos_logname] ne "-") {
-                       # We found an authenticated user
-                       if ($PageBool) {
-                               $_login_p{$field[$pos_logname]}++;                                                                              #Count accesses for page (page)
+                       $_time_p[$dateparts[3]]++; $MonthPage{$yeartoprocess.$monthtoprocess}++;        #Count accesses per hour (page)
+                       $_sider_p{$field[$pos_url]}++;                                                                  #Count accesses per page (page)
                        }
-                       $_login_h{$field[$pos_logname]}++;                                                                                      #Count accesses for page (hit)
-                       $_login_k{$field[$pos_logname]}+=$field[$pos_size];                                                     #Count accesses for page (kb)
-                       $_login_l{$field[$pos_logname]}=$timeconnexion;
-               }
+               $_time_h[$dateparts[3]]++; $MonthHits{$yeartoprocess.$monthtoprocess}++;                #Count accesses per hour (hit)
+               $_time_k[$dateparts[3]]+=$field[$pos_size]; $MonthBytes{$yeartoprocess.$monthtoprocess}+=$field[$pos_size];     #Count accesses per hour (kb)
+               $_sider_h{$field[$pos_url]}++;                                                                          #Count accesses per page (hit)
+               $_sider_k{$field[$pos_url]}+=$field[$pos_size];                                                         #Count accesses per page (kb)
 
                # Analyze: IP-address
                #--------------------
-               my $found=0;
+               $found=0;
                $Host=$field[$pos_rc];
                if ($Host =~ /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/) {
-                       my $newip;
                        # Doing DNS lookup
                    if ($NewDNSLookup) {
-                               $newip=$TmpHashDNSLookup{$Host};        # TmpHashDNSLookup is a temporary hash table to increase speed
-                               if (!$newip) {                                          # if $newip undefined, $Host not yet resolved
+                               $new=$TmpHashDNSLookup{$Host};  # TmpHashDNSLookup is a temporary hash table to increase speed
+                               if (!$new) {                                    # if $new undefined, $Host not yet resolved
                                        &debug("Start of reverse DNS lookup for $Host",4);
                                        if ($MyDNSTable{$Host}) {
-                                       $newip = $MyDNSTable{$Host};
-                                               &debug("End of reverse DNS lookup for $Host. Found '$newip' in local MyDNSTable",4);
+                                               &debug("End of reverse DNS lookup, found resolution of $Host in local MyDNSTable",4);
+                                               $new = $MyDNSTable{$Host};
                                        }
                                        else {
-                                               if (&SkipDNSLookup($Host)) {
-                                                       &debug("Skip this DNS lookup at user request",4);
-                                               }
-                                               else {
-                                                       $newip=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);     # This is very slow, may took 20 seconds
-                                                       if (! IsAscii($newip)) { $newip="ip"; } # If DNSLookup corrupted answer, we treat it as Unknown
-                                               }
-                                               &debug("End of reverse DNS lookup for $Host. Found '$newip'",4);
+                                               $new=gethostbyaddr(pack("C4",split(/\./,$Host)),AF_INET);       # This is very slow may took 20 seconds
+                                               &debug("End of reverse DNS lookup for $Host",4);
                                        }
-                                       if ($newip eq "") { $newip="ip"; }
-                                       $TmpHashDNSLookup{$Host}=$newip;
+                                       if ($new eq "") { $new="ip"; }
+                                       $TmpHashDNSLookup{$Host}=$new;
                                }
-                               # Here $Host is still xxx.xxx.xxx.xxx and $newip is name or "ip" if reverse failed)
-                               if ($newip ne "ip") { $Host=$newip; }
+                               # Here $Host is still xxx.xxx.xxx.xxx and $new is name or "ip" if reverse failed)
+                               if ($new ne "ip") { $Host=$new; }
                        }
                    # If we don't do lookup or if it failed, we still have an IP address in $Host
-                   if (!$NewDNSLookup || $newip eq "ip") {
+                   if (!$NewDNSLookup || $new eq "ip") {
                                  if ($PageBool) {
-                                               if ($timeconnexion > (($_unknownip_l{$Host}||0)+$VisitTimeOut)) {
-                                                       $MonthVisits{$yearmonth}++;
-                                                       $DayVisits{$dayconnexion}++;
-                                                       if (! $_unknownip_l{$Host}) { $MonthUnique{$yearmonth}++; $MonthHostsUnknown{$yearmonth}++; }
-                                                       $_url_e{$field[$pos_url]}++;    # Increase 'entry' page
-                                               }
+                                               if (int($timeconnexion) > int($_unknownip_l{$Host}+$VisitTimeOut)) { $MonthVisits{$yeartoprocess.$monthtoprocess}++; }
+                                               if ($_unknownip_l{$Host} eq "") { $MonthUnique{$yeartoprocess.$monthtoprocess}++; }
                                                $_unknownip_l{$Host}=$timeconnexion;            # Table of (all IP if !NewDNSLookup) or (all unknown IP) else
                                                $_hostmachine_p{"Unknown"}++;
                                                $_domener_p{"ip"}++;
@@ -2311,7 +2504,7 @@ if ($UpdateStats) {
                                  $_domener_k{"ip"}+=$field[$pos_size];
                                  $found=1;
                      }
-               }
+           }
                else {
                        if ($Host =~ /[a-z]/) { 
                                &debug("The following hostname '$Host' seems to be already resolved.",3);
@@ -2320,31 +2513,24 @@ if ($UpdateStats) {
                }       # Hosts seems to be already resolved, make DNS lookup inactive
 
                # Here, $Host = hostname or xxx.xxx.xxx.xxx
-               if (!$found) {  # If not processed yet
-                       # Here $Host = hostname
+               if (!$found) {                          # If not processed yet ($Host = hostname)
+                       $Host =~ tr/A-Z/a-z/;
                        $_ = $Host;
-                       tr/A-Z/a-z/;
 
                        # Count hostmachine
                        if (!$FullHostName) { s/^[\w\-]+\.//; };
                        if ($PageBool) {
-                               if ($timeconnexion > ($_hostmachine_l{$_}+$VisitTimeOut)) {
-                                       # This is a new visit
-                                       $MonthVisits{$yearmonth}++;
-                                       $DayVisits{$dayconnexion}++;
-                                       if (! $_hostmachine_l{$_}) { $MonthUnique{$yearmonth}++; }
-                                       $_url_e{$field[$pos_url]}++;    # Increase 'entry' page
-                               }
+                               if (int($timeconnexion) > int($_hostmachine_l{$_}+$VisitTimeOut)) { $MonthVisits{$yeartoprocess.$monthtoprocess}++; }
+                               if ($_hostmachine_l{$_} eq "") { $MonthUnique{$yeartoprocess.$monthtoprocess}++; }
                                $_hostmachine_p{$_}++;
                                $_hostmachine_l{$_}=$timeconnexion;
                                }
-                       if (! $_hostmachine_h{$_}) { $MonthHostsKnown{$yearmonth}++; }
                        $_hostmachine_h{$_}++;
                        $_hostmachine_k{$_}+=$field[$pos_size];
 
                        # Count top-level domain
-                       if (/\.([\w]+)$/) { $_=$1; }
-                       if ($DomainsHashIDLib{$_}) {
+                       if (/\./) { /\.([\w]+)$/; $_=$1; };
+                       if ($DomainsHash{$_}) {
                                 if ($PageBool) { $_domener_p{$_}++; }
                                 $_domener_h{$_}++;
                                 $_domener_k{$_}+=$field[$pos_size];
@@ -2356,195 +2542,168 @@ if ($UpdateStats) {
                        }
                }
 
-               if ($UserAgent) {        # Made on each record -> -100 rows/seconds
-
-                       # Analyze: Browser
-                       #-----------------
-                       my $found=0;
-                       if (!$TmpHashBrowser{$UserAgent}) {
-                               # IE ? (For higher speed, we start whith IE, the most often used. This avoid other tests if found)
-                               if ($UserAgent =~ /msie/) {
-                                       if (($UserAgent !~ /webtv/) && ($UserAgent !~ /omniweb/) && ($UserAgent !~ /opera/)) {
-                                               $_browser_h{"msie"}++;
-                                               if ($UserAgent =~ /msie_(\d)\./) {  # $1 now contains major version no
-                                                       $_msiever_h[$1]++;
-                                                       $found=1;
-                                                       $TmpHashBrowser{$UserAgent}="msie_$1";
-                                               }
-                                       }
-                               }
-               
-                               # Netscape ?
-                               if (!$found) {
-                                       if (($UserAgent =~ /mozilla/) && ($UserAgent !~ /compatible/) && ($UserAgent !~ /opera/)) {
-                                       $_browser_h{"netscape"}++;
-                                       if ($UserAgent =~ /\/(\d)\./) {         # $1 now contains major version no
-                                               $_nsver_h[$1]++;
-                                               $found=1;
-                                                       $TmpHashBrowser{$UserAgent}="netscape_$1";
-                                               }
-                                       }
-                               }
-               
-                               # Other ?
-                               if (!$found) {
-                                       foreach my $key (@BrowsersArrayID) {
-                                       if ($UserAgent =~ /$key/) { $_browser_h{$key}++; $found=1; $TmpHashBrowser{$UserAgent}=$key; last; }
-                                       }
-                               }
-       
-                               # Unknown browser ?
-                               if (!$found) { $_browser_h{"Unknown"}++; $_unknownrefererbrowser_l{$field[$pos_agent]}=$timeconnexion; }
+               # Analyze: Browser
+               #-----------------
+               $found=0;
+
+               # IE ? (For higher speed, we start whith IE, the most often used. This avoid other tests if found)
+               if ($UserAgent =~ /msie/) {
+                       if (($UserAgent !~ /webtv/) && ($UserAgent !~ /omniweb/) && ($UserAgent !~ /opera/)) {
+                               $_browser_h{"msie"}++;
+                               $UserAgent =~ /msie_(\d)\./;  # $1 now contains major version no
+                               $_msiever_h[$1]++;
+                               $found=1;
                        }
-                       else {
-                               if ($TmpHashBrowser{$UserAgent} =~ /^msie_(\d)/) { $_browser_h{"msie"}++; $_msiever_h[$1]++; $found=1; }
-                               if (!$found && $TmpHashBrowser{$UserAgent} =~ /^netscape_(\d)/) { $_browser_h{"netscape"}++; $_nsver_h[$1]++; $found=1; }
-                               if (!$found) { $_browser_h{$TmpHashBrowser{$UserAgent}}++; }
+               }
+
+               # Netscape ?
+               if (!$found) {
+                       if (($UserAgent =~ /mozilla/) && ($UserAgent !~ /compatible/) && ($UserAgent !~ /opera/)) {
+                       $_browser_h{"netscape"}++;
+                       $UserAgent =~ /\/(\d)\./;  # $1 now contains major version no
+                       $_nsver_h[$1]++;
+                       $found=1;
                        }
+               }
 
-                       # Analyze: OS
-                       #------------
-                       if (!$TmpHashOS{$UserAgent}) {
-                               my $found=0;
-                               # in OSHashID list ?
-                               foreach my $key (@OSArrayID) {  # Searchin ID in order of OSArrayID
-                                       if ($UserAgent =~ /$key/) { $_os_h{$OSHashID{$key}}++; $TmpHashOS{$UserAgent}=$OSHashID{$key}; $found=1; last; }
-                               }
-                               # Unknown OS ?
-                               if (!$found) { $_os_h{"Unknown"}++; $_unknownreferer_l{$field[$pos_agent]}=$timeconnexion; }
+               # Other ?
+               if (!$found) {
+                       foreach $key (keys %BrowsersHash) {
+                       if ($UserAgent =~ /$key/) { $_browser_h{$key}++; $found=1; last; }
                        }
-                       else {
-                               $_os_h{$TmpHashOS{$UserAgent}}++;
+               }
+
+               # Unknown browser ?
+               if (!$found) { $_browser_h{"Unknown"}++; $_unknownrefererbrowser_l{$field[$pos_agent]}=$timeconnexion; }
+
+               # Analyze: OS
+               #------------
+               $found=0;
+               if (!$TmpHashOS{$UserAgent}) {
+                       # OSHash list ?
+                       foreach $key (keys %OSHash) {
+                               if ($UserAgent =~ /$key/) { $_os_h{$key}++; $found=1; $TmpHashOS{$UserAgent}=$key; last; }
+                       }
+                       # OSAliasHash list ?
+                       if (!$found) {
+                               foreach $key (keys %OSAliasHash) {
+                                       if ($UserAgent =~ /$key/) { $_os_h{$OSAliasHash{$key}}++; $found=1; $TmpHashOS{$UserAgent}=$OSAliasHash{$key}; last; }
+                               }
                        }
+                       # Unknown OS ?
+                       if (!$found) { $_os_h{"Unknown"}++; $_unknownreferer_l{$field[$pos_agent]}=$timeconnexion; }
                }
                else {
-                       $_browser_h{"Unknown"}++;
-                       $_os_h{"Unknown"}++;
-               }               
+                       $_os_h{$TmpHashOS{$UserAgent}}++;
+               }
 
                # Analyze: Referer
                #-----------------
                $found=0;
-               if ($field[$pos_referer]) {
 
-                       # Direct ?
-                       if ($field[$pos_referer] eq "-") { 
-                               if ($PageBool) { $_from_p[0]++; }
-                               $_from_h[0]++;
-                               $found=1;
-                       }
-                       else {  
-                               # HTML link ?
-                               if ($field[$pos_referer] =~ /^http(s|):\/\/(.*)/i) {
-                                       my $refererwithouthttp=$2;
-                                       my $internal_link=0;
-                                       if ($refererwithouthttp =~ /^(www\.|)$SiteToAnalyzeWithoutwww/i) { $internal_link=1; }
-                                       else {
-                                               foreach my $key (@HostAliases) {
-                                                       if ($refererwithouthttp =~ /^$key/i) { $internal_link=1; last; }
-                                                       }
-                                       }
+               # Direct ?
+               if ($field[$pos_referer] eq "-") { $_from_h[0]++; $found=1; }
 
-                                       if ($internal_link) {
-                                           # Intern (This hit came from another page of the site)
-                                               if ($PageBool) { $_from_p[4]++; }
-                                           $_from_h[4]++;
-                                               $found=1;
-                                       }
-                                       else {  # If made on each record -> -1700 rows/seconds (should be made on 10% of records only)
-                                           # Extern (This hit came from an external web site). 
-                                               my @refurl=split(/\?/,$refererwithouthttp,2);
-                                               $refurl[0] =~ tr/A-Z/a-z/;
-
-                                           foreach my $key (keys %SearchEnginesHashIDLib) {
-                                                       if ($refurl[0] =~ /$key/) {
-                                                               # This hit came from the search engine $key
-                                                               if ($PageBool) { $_from_p[2]++; }
-                                                               $_from_h[2]++;
-                                                               $_se_referrals_h{$key}++;
-                                                               $found=1;
-                                                               if ($refurl[1]) {                                                               
-                                                                       # Extract keywords
-                                                                       $refurl[1] =~ tr/A-Z/a-z/;                              # Full param string in lowcase
-                                                                       my @paramlist=split(/&/,$refurl[1]);
-                                                                       if ($SearchEnginesKnownUrl{$key}) {             # Search engine with known URL syntax
-                                                                               foreach my $param (@paramlist) {
-                                                                                       #if ($param =~ /^$SearchEnginesKnownUrl{$key}/) {       # We found good parameter
-                                                                                       #       $param =~ s/^$SearchEnginesKnownUrl{$key}//;    # Cut "xxx="
-                                                                                       if ($param =~ s/^$SearchEnginesKnownUrl{$key}//) {      # We found good parameter
-                                                                                               # Ok, "cache:mmm:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg" is a search parameter line
-                                                                                               $param =~ s/^cache:[^\+]*//;
-                                                                                               $param =~ s/^related:[^\+]*//;
-                                                                                               &ChangeWordSeparatorsIntoSpace($param);                 # Change [ aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ aaa bbb/ccc ddd eee fff ggg]
-                                                                                               if ($SplitSearchString) {
-                                                                                                       my @wordlist=split(/ /,$param); # Split aaa bbb ccc ddd eee fff into a wordlist array
-                                                                                                       foreach $word (@wordlist) {
-                                                                                                               if ((length $word) > 0) { $_keyphrases{$word}++; }
-                                                                                                       }
-                                                                                               }
-                                                                                               else {
-                                                                                                       $param =~ s/^ +//; $param =~ s/ +$//; $param =~ tr/ /\+/s;
-                                                                                                       if ((length $param) > 0) { $_keyphrases{$param}++; }
-                                                                                               }
-                                                                                               last;
+               # HTML link ?
+               if (!$found) {
+                       if ($field[$pos_referer] =~ /^http/i) {
+                               $internal_link=0;
+                               if ($field[$pos_referer] =~ /^http(s|):\/\/(www.|)$SiteToAnalyzeWithoutwww/i) { $internal_link=1; }
+                               else {
+                                       foreach $HostAlias (@HostAliases) {
+                                               if ($field[$pos_referer] =~ /^http(s|):\/\/$HostAlias/i) { $internal_link=1; last; }
+                                               }
+                               }
+
+                               if ($internal_link) {
+                                   # Intern (This hit came from another page of the site)
+                                   $_from_h[4]++;
+                                       $found=1;
+                               }
+                               else {
+                                   # Extern (This hit came from an external web site)
+                                       @refurl=split(/\?/,$field[$pos_referer]);
+                                       $refurl[0] =~ tr/A-Z/a-z/;
+                                   foreach $key (keys %SearchEnginesHash) {
+                                               if ($refurl[0] =~ /$key/) {
+                                                       # This hit came from the search engine $key
+                                                       $_from_h[2]++;
+                                                       $_se_referrals_h{$key}++;
+                                                       $found=1;
+                                                       # Extract keywords
+                                                       $refurl[1] =~ tr/A-Z/a-z/;                              # Full param string in lowcase
+                                                       @paramlist=split(/&/,$refurl[1]);
+                                                       if ($SearchEngineKnownUrl{$key}) {              # Search engine with known URL syntax
+                                                               foreach $param (@paramlist) {
+                                                                       if ($param =~ /^$SearchEngineKnownUrl{$key}/) { # We found good parameter
+                                                                               &UnescapeURLParam($param);                      # Change [ xxx=cache:www+aaa+bbb/ccc+ddd%20eee'fff ] into [ xxx=cache:www aaa bbb ccc ddd eee fff ]
+                                                                               # Ok, "xxx=cache:www aaa bbb ccc ddd eee fff" is a search parameter line
+                                                                               $param =~ s/.*=//;                                      # Cut "xxx="
+                                                                               $param =~ s/^cache:[^ ]* //;
+                                                                               $param =~ s/^related:[^ ]* //;
+                                                                               if ($SplitSearchString) {
+                                                                                       @wordlist=split(/ /,$param);    # Split aaa bbb ccc ddd eee fff into a wordlist array
+                                                                                       foreach $word (@wordlist) {
+                                                                                               if ((length $word) > 0) { $_keywords{$word}++; }
                                                                                        }
                                                                                }
+                                                                               else {
+                                                                                       $param =~ s/^ *//; $param =~ s/ *$//; $param =~ tr/ / /s;
+                                                                                       if ((length $param) > 0) { $param =~ tr/ /+/; $_keywords{$param}++; }
+                                                                               }
+                                                                               last;
                                                                        }
-                                                                       else {                                                                  # Search engine with unknown URL syntax
-                                                                               foreach my $param (@paramlist) {
-                                                                                       &ChangeWordSeparatorsIntoSpace($param);                         # Change [ xxx=cache:www/zzz+aaa+bbb/ccc+ddd%20eee'fff,ggg ] into [ xxx=cache:www/zzz aaa bbb/ccc ddd eee fff ggg ]
-                                                                                       my $foundparam=1;
-                                                                                       foreach $paramtoexclude (@WordsToCleanSearchUrl) {
-                                                                                               if ($param =~ /.*$paramtoexclude.*/) { $foundparam=0; last; } # Not the param with search criteria
-                                                                                       }
-                                                                                       if ($foundparam == 0) { next; }                 # Do not keep this URL parameter because is in exclude list
-                                                                                       # Ok, "xxx=cache:www/zzz aaa bbb/ccc ddd eee fff ggg" is a search parameter line
-                                                                                       $param =~ s/.*=//;                                              # Cut "xxx="
-                                                                                       $param =~ s/^cache:[^ ]*//;
-                                                                                       $param =~ s/^related:[^ ]*//;
-                                                                                       if ($SplitSearchString) {
-                                                                                               my @wordlist=split(/ /,$param);         # Split aaa bbb ccc ddd eee fff into a wordlist array
-                                                                                               foreach $word (@wordlist) {
-                                                                                                       if ((length $word) > 2) { $_keyphrases{$word}++; }      # Keep word only if word length is 3 or more
-                                                                                               }
-                                                                                       }
-                                                                                       else {
-                                                                                               $param =~ s/^ +//; $param =~ s/ +$//; $param =~ tr/ /\+/s;
-                                                                                               if ((length $param) > 2) { $_keyphrases{$param}++; }
-                                                                                       }
+                                                               }
+                                                       }
+                                                       else {                                                                  # Search engine with unknown URL syntax
+                                                               foreach $param (@paramlist) {
+                                                                       &UnescapeURLParam($param);              # Change [ xxx=cache:www+aaa+bbb/ccc+ddd%20eee'fff ] into [ xxx=cache:www aaa bbb ccc ddd eee fff ]
+                                                                       $keep=1;
+                                                                       foreach $paramtoexclude (@WordsToCleanSearchUrl) {
+                                                                               if ($param =~ /.*$paramtoexclude.*/) { $keep=0; last; } # Not the param with search criteria
+                                                                       }
+                                                                       if ($keep == 0) { next; }                       # Do not keep this URL parameter because is in exclude list
+                                                                       # Ok, "xxx=cache:www aaa bbb ccc ddd eee fff" is a search parameter line
+                                                                       $param =~ s/.*=//;                                      # Cut "xxx="
+                                                                       $param =~ s/^cache:[^ ]* //;
+                                                                       $param =~ s/^related:[^ ]* //;
+                                                                       if ($SplitSearchString) {
+                                                                               @wordlist=split(/ /,$param);    # Split aaa bbb ccc ddd eee fff into a wordlist array
+                                                                               foreach $word (@wordlist) {
+                                                                                       if ((length $word) > 2) { $_keywords{$word}++; }        # Keep word only if word length is 3 or more
                                                                                }
                                                                        }
-                                                               }       # End of if refurl[1]
-                                                               last;
+                                                                       else {
+                                                                               $param =~ s/^ *//; $param =~ s/ *$//; $param =~ tr/ / /s;
+                                                                               if ((length $param) > 2) { $param =~ tr/ /+/; $_keywords{$param}++; }
+                                                                       }
+                                                               }
                                                        }
+                                                       last;
                                                }
-                                               
-                                               if (!$found) {
-                                                       # This hit came from a site other than a search engine
-                                                       if ($PageBool) { $_from_p[3]++; }
-                                                       $_from_h[3]++;
-                                                       # http://www.mysite.com/ must be same referer than http://www.mysite.com but .../mypage/ differs of .../mypage
-                                                       #if ($refurl[0] =~ /^[^\/]+\/$/) { $field[$pos_referer] =~ s/\/$//; }   # Code moved in save
-                                                       $_pagesrefs_h{$field[$pos_referer]}++;
-                                                       $found=1;
-                                               }
+                                       }
+                                       if (!$found) {
+                                               # This hit came from a site other than a search engine
+                                               $_from_h[3]++;
+                                               if ($field[$pos_referer] =~ /http:\/\/[^\/]*\/$/i) { $field[$pos_referer] =~ s/\/$//; } # To make htpp://www.mysite.com and http://www.mysite.com/ as same referer
+                                               $_pagesrefs_h{$field[$pos_referer]}++;
+                                               $found=1;
                                        }
                                }
                        }
-               }       
+               }
 
-               # Origin not found
+               # News link ?
                if (!$found) {
-                       if ($PageBool) { $_from_p[1]++; }
-                       $_from_h[1]++;
+                       if ($field[$pos_referer] =~ /^news/i) {
+                               $_from_h[1]++;
+                               $found=1;
+                       }
                }
 
-               # End of processing all new records.
        }
-       &debug("End of processing log file(s)");
-
-       &debug("Close log file");
        close LOG;
+       &debug("End of processing log file");
 
        # DNSLookup warning
        if ($DNSLookup && !$NewDNSLookup) { warning("Warning: <b>$PROG</b> has detected that hosts names are already resolved in your logfile <b>$LogFile</b>.<br>\nIf this is always true, you should change your setup DNSLookup=1 into DNSLookup=0 to increase $PROG speed."); }
@@ -2552,8 +2711,7 @@ if ($UpdateStats) {
        # Save current processed month $monthtoprocess
        if ($UpdateStats && $monthtoprocess) {  # If monthtoprocess is still 0, it means there was no history files and we found no valid lines in log file
                &Save_History_File($yeartoprocess,$monthtoprocess);             # We save data for this month,year
-               if (($MonthRequired ne "year") && ($monthtoprocess != $MonthRequired)) { &Init_HashArray($yeartoprocess,$monthtoprocess); }     # Not a desired month (wrong month), so we clean data arrays
-               if (($MonthRequired eq "year") && ($yeartoprocess != $YearRequired)) { &Init_HashArray($yeartoprocess,$monthtoprocess); }       # Not a desired month (wrong year), so we clean data arrays
+               if (($MonthRequired ne "year") && ($monthtoprocess != $MonthRequired)) { &Init_HashArray($yeartoprocess,$monthtoprocess); }     # Not a desired month, so we clean data
        }
 
        # Archive LOG file into ARCHIVELOG
@@ -2564,7 +2722,7 @@ if ($UpdateStats) {
                open(ARCHIVELOG,">>$ArchiveFileName") || error("Error: Couldn't open file \"$ArchiveFileName\" to archive current log: $!");
                while (<LOG>) { print ARCHIVELOG $_; }
                close(ARCHIVELOG);
-               chmod 0666,"$ArchiveFileName";
+               chmod 438,"$ArchiveFileName";
                &debug("End of archiving log file");
        }
        else {
@@ -2572,35 +2730,19 @@ if ($UpdateStats) {
        }
 
        # Rename all HISTORYTMP files into HISTORYTXT
-       my $allok=1;
+       $allok=1;
        opendir(DIR,"$DirData");
        @filearray = sort readdir DIR;
        close DIR;
        foreach $i (0..$#filearray) {
-               if ("$filearray[$i]" =~ /^$PROG(\d\d\d\d\d\d)$FileSuffix\.tmp\..*$/) {
-                       debug("Rename new tmp historic $PROG$1$FileSuffix.tmp.$$ into $PROG$1$FileSuffix.txt",1);
-                       if (-s "$DirData/$PROG$1$FileSuffix.tmp.$$") {          # Rename files of this session with size > 0
-                               if ($KeepBackupOfHistoricFiles) {
-                                       if (-s "$DirData/$PROG$1$FileSuffix.txt") {     # Historic file already exists. We backup it
-                                               debug(" Make a backup of old historic file into $PROG$1$FileSuffix.bak before",1);
-                                               #if (FileCopy("$DirData/$PROG$1$FileSuffix.txt","$DirData/$PROG$1$FileSuffix.bak")) {
-                                               if (rename("$DirData/$PROG$1$FileSuffix.txt", "$DirData/$PROG$1$FileSuffix.bak")==0) {
-                                                       warning("Warning: Failed to make a backup of \"$DirData/$PROG$1$FileSuffix.txt\" into \"$DirData/$PROG$1$FileSuffix.bak\".\n");
-                                               }
-                                               chmod 0666,"$DirData/$PROG$1$FileSuffix.bak";
-                                       }
-                                       else {
-                                               debug(" No need to backup old historic file",1);
-                                       }
-                               }
-                               if (rename("$DirData/$PROG$1$FileSuffix.tmp.$$", "$DirData/$PROG$1$FileSuffix.txt")==0) {
+               if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.tmp\..*$/) {
+                       $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+                       if (-s "$DirData/$PROG$yearmonthfile$FileSuffix.tmp.$$") {      # Rename only files for this session and with size > 0
+                               if (rename("$DirData/$PROG$yearmonthfile$FileSuffix.tmp.$$", "$DirData/$PROG$yearmonthfile$FileSuffix.txt")==0) {
                                        $allok=0;       # At least one error in renaming working files
-                                       # Remove file
-                                       unlink "$DirData/$PROG$1$FileSuffix.tmp.$$";
-                                       warning("Warning: Failed to rename \"$DirData/$PROG$1$FileSuffix.tmp.$$\" into \"$DirData/$PROG$1$FileSuffix.txt\".\nWrite permissions on \"$PROG$1$FileSuffix.txt\" might be wrong".($ENV{"GATEWAY_INTERFACE"}?" for an 'update from web'":"")." or file might be opened.");
                                        last;
                                }
-                               chmod 0666,"$DirData/$PROG$1$FileSuffix.txt";
+                               chmod 438,"$DirData/$PROG$yearmonthfile$FileSuffix.txt";
                        }
                }
        }
@@ -2611,1045 +2753,1071 @@ if ($UpdateStats) {
        }
        close(LOG);
 
-}
-# End of log processing
+}      # End of log processing
 
 
+# Get list of all possible years
+opendir(DIR,"$DirData");
+@filearray = sort readdir DIR;
+close DIR;
+foreach $i (0..$#filearray) {
+       if ("$filearray[$i]" =~ /^$PROG[\d][\d][\d][\d][\d][\d]$FileSuffix\.txt$/) {
+               $yearmonthfile=$filearray[$i]; $yearmonthfile =~ s/^$PROG//; $yearmonthfile =~ s/\..*//;
+               $yearfile=$yearmonthfile; $yearfile =~ s/^..//;
+               $listofyears{$yearfile}=1;
+       }
+}
 
-#---------------------------------------------------------------------
-# SHOW REPORT
-#---------------------------------------------------------------------
 
-if ($HTMLOutput) {
-       
-       my @filearray;
-       my %listofyears;
-       my $max_p; my $max_h; my $max_k; my $max_v;
-       my $rest_p; my $rest_h; my $rest_k; my $rest;
-       my $total_p; my $total_h;my $total_k;
+# Here, first part of data for all processed month (old and current) are still in memory
+# If a month was already processed, then $HistoryFileAlreadyRead{"MMYYYY"} value is 1
 
-       $SiteToAnalyze =~ s/\\\./\./g;
 
-       # Get list of all possible years
-       opendir(DIR,"$DirData");
-       @filearray = sort readdir DIR;
-       close DIR;
-       foreach my $i (0..$#filearray) {
-               if ("$filearray[$i]" =~ /^$PROG([\d][\d])([\d][\d][\d][\d])$FileSuffix\.txt$/) { $listofyears{$2}=1; }
-       }
-       
-       # Here, first part of data for processed month (old and current) are still in memory
-       # If a month was already processed, then $HistoryFileAlreadyRead{"MMYYYY"} value is 1
-       
-       # READING NOW ALL NOT ALREADY READ HISTORY FILES FOR ALL MONTHS OF REQUIRED YEAR
-       #-------------------------------------------------------------------------------
-       # Loop on each month of year but only existing and not already read will be read by Read_History_File function
-       for (my $ix=12; $ix>=1; $ix--) {
-               my $monthix=$ix+0; if ($monthix < 10) { $monthix  = "0$monthix"; }      # Good trick to change $monthix into "MM" format
-               if ($MonthRequired eq "year" || $monthix == $MonthRequired) {
-                       &Read_History_File($YearRequired,$monthix,1);   # Read full history file
-               }
-               else {
-                       &Read_History_File($YearRequired,$monthix,0);   # Read first part of history file is enough
-               }
-       }
-       
-       
-       # Get the tooltips texts
-       &Read_Language_Tooltip($Lang);
-       
-       # Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop  IE OK   Opera OK
-       #          .style.left/.height/.width/.top                                                                                      Netscape OK
-       # document.getElementById                                                                               IE OK   Opera OK        Netscape OK
-       # document.body.offsetWidth|document.body.style.pixelWidth              IE OK   Opera OK        Netscape OK             Visible width of container
-       # document.body.scrollTop                                       IE OK   Opera OK        Netscape OK             Visible width of container
-       # tooltip.offsetWidth|tooltipOBJ.style.pixelWidth                               IE OK   Opera OK        Netscape OK             Width of an object
-       # event.clientXY                                                                                                IE OK   Opera OK        Netscape KO             Return position of mouse
-       print <<EOF;
-       
-       <script language="javascript">
-               function ShowTooltip(fArg)
-               {
-                       var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
-                       if (tooltipOBJ != null) {
-                           var tooltipLft = (document.body.offsetWidth?document.body.offsetWidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:300)) - 30;
-                           if (navigator.appName != 'Netscape') {
-                                       var tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10);
-                                       if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) {
-                                               tooltipTop = (document.body.scrollTop?document.body.scrollTop:document.body.offsetTop) + event.clientY + 20;
-                                       }
-                                       tooltipOBJ.style.pixelLeft = tooltipLft; tooltipOBJ.style.pixelTop = tooltipTop; 
-                               }
-                               else {
-                                       var tooltipTop = 10;
-                                       tooltipOBJ.style.left = tooltipLft; tooltipOBJ.style.top = tooltipTop; 
-                               }
-                           tooltipOBJ.style.visibility = "visible";
-                       }
-               }
-               function HideTooltip(fArg)
-               {
-                       var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
-                       if (tooltipOBJ != null) {
-                           tooltipOBJ.style.visibility = "hidden";
-                       }
-               }
-       </script>
-       
-EOF
+#-------------------------------------------------------------------------------
+# READING NOW ALL NOT ALREADY READ HISTORY FILES FOR ALL MONTHS OF REQUIRED YEAR
+#-------------------------------------------------------------------------------
 
-       # Define the LinkParamA and LinkParamB for main chart
-       my $LinkParamA=""; my $LinkParamB="";
-       my $NewLinkParams=${QueryString};
-       $NewLinkParams =~ s/update=[^ &]*//;
-       $NewLinkParams =~ s/output=[^ &]*//;
-       $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/&$//;
-       if ($ENV{"GATEWAY_INTERFACE"}) {
-               # If runned from a browser, we keep same parameters string
-               if ($NewLinkParams) {
-                       $LinkParamA="?$NewLinkParams";
-                       $LinkParamB="$NewLinkParams&";
-               }
+# Loop on each month of year but only existing and not already read will be read by Read_History_File function
+for ($ix=12; $ix>=1; $ix--) {
+       $monthix=$ix+0; if ($monthix < 10) { $monthix  = "0$monthix"; } # Good trick to change $monthix into "MM" format
+       if ($MonthRequired eq "year" || $monthix == $MonthRequired) {
+               &Read_History_File($YearRequired,$monthix,1);   # Read full history file
        }
        else {
-               # If runned from commandline, we need to build parameters string
-               $LinkParamA="?".($SiteConfig?"config=$SiteConfig&":"")."year=$YearRequired&month=$MonthRequired&lang=$Lang";
-               $LinkParamB=($SiteConfig?"config=$SiteConfig&":"")."year=$YearRequired&month=$MonthRequired&lang=$Lang&";
+               &Read_History_File($YearRequired,$monthix,0);   # Read first part of history file is enough
        }
+}
 
-       # MENU
-       #---------------------------------------------------------------------
-       if ($ShowMenu) {
-               print "$CENTER<a name=\"MENU\">&nbsp;</a><BR>";
-               print "<table>";
-               print "<tr><th class=AWL>$Message[7] : </th><td class=AWL><font style=\"font-size: 14px;\">$SiteToAnalyze</font></th></tr>";
-               print "<tr><th class=AWL valign=top>$Message[35] : </th>";
-               print "<td class=AWL><font style=\"font-size: 14px;\">";
-               foreach my $key (sort keys %LastUpdate) { if ($LastUpdate < $LastUpdate{$key}) { $LastUpdate = $LastUpdate{$key}; } }
-               if ($LastUpdate) { print Format_Date($LastUpdate); }
-               else { print "<font color=#880000>Never updated</font>"; }
-               print "</font>&nbsp; &nbsp; &nbsp; &nbsp;";
-               if ($AllowToUpdateStatsFromBrowser) {
-                       my $NewLinkParams=${QueryString};
-                       $NewLinkParams =~ s/update=[^ &]*//;
-                       $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/&$//;
-                       if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; }
-                       print "<a href=\"$DirCgi$PROG.$Extension?${NewLinkParams}update=1\">$Message[74]</a>";
-               }
-               print "</td></tr>\n";
-               if ($QueryString !~ /output=/i) {       # If main page asked
-                       print "<tr><td>&nbsp;</td></tr>\n";
-                       # When
-                       print "<tr><th class=AWL>$Message[93] : </th>";
-                       print "<td class=AWL>";
-                       if ($ShowMonthDayStats)          { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#SUMMARY\">$Message[5]/$Message[4]</a> &nbsp; "; }
-                       if ($ShowDaysOfWeekStats)        { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#DAYOFWEEK\">$Message[91]</a> &nbsp; "; }
-                       if ($ShowHoursStats)             { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#HOUR\">$Message[20]</a> &nbsp; "; }
-                       # Who
-                       print "<tr><th class=AWL>$Message[92] : </th>";
-                       print "<td class=AWL>";
-                       if ($ShowDomainsStats)           { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#DOMAINS\">$Message[17]</a> &nbsp; "; }
-                       if ($ShowHostsStats)             { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#VISITOR\">".ucfirst($Message[81])."</a> &nbsp; "; }
-                       if ($ShowHostsStats)             { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=lasthosts\">$Message[9]</a> &nbsp;\n"; }
-                       if ($ShowHostsStats)             { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=unknownip\">$Message[45]</a> &nbsp;\n"; }
-                       if ($ShowAuthenticatedUsers) { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#LOGIN\">$Message[94]</a> &nbsp; "; }
-                       if ($ShowRobotsStats)            { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#ROBOTS\">$Message[53]</a> &nbsp; "; }
-                       print "<br></td></tr>";
-                       # Navigation
-                       print "<tr><th class=AWL>$Message[72] : </th>";
-                       print "<td class=AWL>";
-                       if ($ShowPagesStats)             { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=urldetail\">$Message[29]</a> &nbsp; "; }
-                       if ($ShowPagesStats)             { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#ENTRY\">$Message[104]</a> &nbsp; "; }
-                       if ($ShowFileTypesStats)         { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#FILETYPES\">$Message[73]</a> &nbsp; "; }
-                       if ($ShowFileSizesStats)         {  }
-                       if ($ShowOSStats)                        { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#OS\">$Message[59]</a> &nbsp; "; }
-                       if ($ShowBrowsersStats)          { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#BROWSER\">$Message[21]</a> &nbsp; "; }
-                       if ($ShowBrowsersStats)          { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=browserdetail\">$Message[33]</a> &nbsp; "; }
-                       if ($ShowBrowsersStats)          { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=browserdetail\">$Message[34]</a><br></td></tr>\n"; }
-                       # Referers
-                       print "<tr><th class=AWL>$Message[23] : </th>";
-                       print "<td class=AWL>";
-                       if ($ShowOriginStats)            { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#REFERER\">$Message[37]</a> &nbsp; "; }
-                       if ($ShowKeyphrasesStats)        { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#SEARCHKEYS\">$Message[24]</a><br></td></tr>\n"; }
-                       # Others
-                       print "<tr><th class=AWL>$Message[2] : </th>";
-                       print "<td class=AWL>";
-                       if ($ShowCompressionStats)       { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#FILETYPES\">$Message[98]</a> &nbsp; "; }
-                       if ($ShowHTTPErrorsStats)        { print "<a href=\"$DirCgi$PROG.$Extension${LinkParamA}#ERRORS\">$Message[22]</a> &nbsp; "; }
-                       if ($ShowHTTPErrorsStats)        { print "<a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=notfounderror\">$Message[31]</a><br></td></tr>\n"; }
-               }
-               else {
-                       if ($ShowBackLink) { print "<tr><td class=AWL><a href=\"$DirCgi$PROG.$Extension${LinkParamA}\">$Message[76]</a></td></tr>\n"; }
-               }
-               print "</table>\n";
-               print "<br>\n";
-               print "<hr>\n\n";
-       }
-       
-       if ($QueryString =~ /output=lasthosts/i) {
-               print "$CENTER<a name=\"HOSTSLIST\">&nbsp;</a><BR>";
-               &tab_head("$Message[9]",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[81] + $Message[83]</TH><TH>$Message[9]</TH></TR>\n";
-               my $count=0; my $rest=0;
-               # Create %lasthost = %_unknownip_l + %_hostmachine_l + %_robot_l
-               my %lasthosts=%_unknownip_l;
-               foreach $key (keys %_hostmachine_l) { $lasthosts{$key}=$_hostmachine_l{$key}; }
-               foreach $key (keys %_robot_l) { $lasthosts{$key}=$_robot_l{$key}; }
-               foreach my $key (sort { $SortDir*$lasthosts{$a} <=> $SortDir*$lasthosts{$b} } keys %lasthosts) {
-                       if ($count>=$MAXROWS || $count>=$MaxNbOfLastHosts) { $rest++; next; }
-                       $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
-                       print "<tr><td>$key </td><td>".Format_Date($lasthosts{$key})."</td></tr>\n";
-                       $count++;
-               }
-               if ($rest) {
-                       print "<tr><td>$Message[2]</td><td>...</td></tr>\n";
-               }
-               &tab_end;
-               &html_end;
-               exit(0);
-       }
-       if ($QueryString =~ /output=urldetail/i) {
-               if ($AddOn) { AddOn_Filter(); }
-               print "$CENTER<a name=\"URLDETAIL\">&nbsp;</a><BR>";
-               &tab_head($Message[19],19);
-               if ($URLFilter) { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[79]: <b>$URLFilter</b> - ".(scalar keys %_url_p)." $Message[28]</TH>"; }
-               else { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>".(scalar keys %_url_p)."&nbsp; $Message[28]</TH>"; }
-               print "<TH bgcolor=\"#$color_p\">&nbsp;$Message[29]&nbsp;</TH>";
-               print "<TH bgcolor=\"#$color_s\">&nbsp;$Message[104]&nbsp;</TH>";
-               if ($AddOn) { AddOn_ShowFields(""); }
-               print "<TH>&nbsp;</TH></TR>\n";
-               $max_p=1; foreach my $key (values %_url_p) { if ($key > $max_p) { $max_p = $key; } }
-               my $count=0; my $rest=0;
-               foreach my $key (sort { $SortDir*$_url_p{$a} <=> $SortDir*$_url_p{$b} } keys (%_url_p)) {
-                       if ($count>=$MAXROWS) { $rest+=$_url_p{$key}; next; }
-                       if ($_url_p{$key}<$MinHitFile) { $rest+=$_url_p{$key}; next; }
-               print "<TR><TD CLASS=AWL>";
-                       my $nompage=$Aliases{$key};
-                       if ($nompage eq "") { $nompage=$key; }
-                       if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
-                   if ($ShowLinksOnUrl) { print "<A HREF=\"http://$SiteToAnalyze$key\">$nompage</A>"; }
-                   else                 { print "$nompage"; }
-                       my $bredde_p=0; my $bredde_e=0;
-                       if ($max_p > 0) { $bredde_p=int($BarWidth*$_url_p{$key}/$max_p)+1; }
-                       if ($_url_p{$key} && ($bredde_p==1)) { $bredde_p=2; }
-                       if ($max_p > 0) { $bredde_e=int($BarWidth*$_url_e{$key}/$max_p)+1; }
-                       if ($_url_e{$key} && ($bredde_e==1)) { $bredde_e=2; }
-                       print "</TD>";
-                       print "<TD>$_url_p{$key}</TD><TD>".($_url_e{$key}?$_url_e{$key}:"&nbsp;")."</TD>";
-                       if ($AddOn) { AddOn_ShowFields($key); }
-                       print "<TD CLASS=AWL>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=8><br>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_e\" WIDTH=$bredde_e HEIGHT=8>";
-                       print "</TD></TR>\n";
-                       $count++;
-               }
-               &tab_end;
-               &html_end;
-               exit(0);
-       }
-       if ($QueryString =~ /output=unknownip/i) {
-               print "$CENTER<a name=\"UNKOWNIP\">&nbsp;</a><BR>";
-               &tab_head($Message[45],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[48] (".(scalar keys %_unknownip_l).")</TH><TH>$Message[9]</TH>\n";
-               my $count=0; my $rest=0;
-               foreach my $key (sort { $SortDir*$_unknownip_l{$a} <=> $SortDir*$_unknownip_l{$b} } keys (%_unknownip_l)) {
-                       if ($count>=$MAXROWS) { $rest++; next; }
-                       $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
-                       print "<tr><td>$key</td><td>".Format_Date($_unknownip_l{$key})."</td></tr>\n";
-                       $count++;
-               }
-               &tab_end;
-               &html_end;
-               exit(0);
+
+
+#---------------------------------------------------------------------
+# SHOW STATISTICS
+#---------------------------------------------------------------------
+if ($QueryString =~ /action=unknownip/i) {
+       print "$CENTER<a name=\"UNKOWNIP\"></a><BR>";
+       $tab_titre=$message[45][$Lang];
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>$message[48][$Lang]</TH><TH>$message[9][$Lang]</TH>\n";
+       @sortunknownip=sort { $SortDir*$_unknownip_l{$a} <=> $SortDir*$_unknownip_l{$b} } keys (%_unknownip_l);
+       foreach $key (@sortunknownip) {
+               $yearcon=substr($_unknownip_l{$key},0,4);
+               $monthcon=substr($_unknownip_l{$key},4,2);
+               $daycon=substr($_unknownip_l{$key},6,2);
+               $hourcon=substr($_unknownip_l{$key},8,2);
+               $mincon=substr($_unknownip_l{$key},10,2);
+               if ($Lang == 1) { print "<tr><td>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=unknownrefererbrowser/i) {
+       print "$CENTER<a name=\"UNKOWNREFERERBROWSER\"></a><BR>";
+       $tab_titre=$message[50][$Lang];
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>Referer</TH><TH>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownrefererbrowser=sort { $SortDir*$_unknownrefererbrowser_l{$a} <=> $SortDir*$_unknownrefererbrowser_l{$b} } keys (%_unknownrefererbrowser_l);
+       foreach $key (@sortunknownrefererbrowser) {
+               $yearcon=substr($_unknownrefererbrowser_l{$key},0,4);
+               $monthcon=substr($_unknownrefererbrowser_l{$key},4,2);
+               $daycon=substr($_unknownrefererbrowser_l{$key},6,2);
+               $hourcon=substr($_unknownrefererbrowser_l{$key},8,2);
+               $mincon=substr($_unknownrefererbrowser_l{$key},10,2);
+               $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
+               if ($Lang == 1) { print "<tr><td CLASS=LEFT>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td CLASS=LEFT>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=unknownreferer/i) {
+       print "$CENTER<a name=\"UNKOWNREFERER\"></a><BR>";
+       $tab_titre=$message[46][$Lang];
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>Referer</TH><TH>$message[9][$Lang]</TH></TR>\n";
+       @sortunknownreferer=sort { $SortDir*$_unknownreferer_l{$a} <=> $SortDir*$_unknownreferer_l{$b} } keys (%_unknownreferer_l);
+       foreach $key (@sortunknownreferer) {
+               $yearcon=substr($_unknownreferer_l{$key},0,4);
+               $monthcon=substr($_unknownreferer_l{$key},4,2);
+               $daycon=substr($_unknownreferer_l{$key},6,2);
+               $hourcon=substr($_unknownreferer_l{$key},8,2);
+               $mincon=substr($_unknownreferer_l{$key},10,2);
+               $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
+               if ($Lang == 1) { print "<tr><td CLASS=LEFT>$key</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+               else { print "<tr><td CLASS=LEFT>$key</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
+       }
+if ($QueryString =~ /action=notfounderror/i) {
+       print "$CENTER<a name=\"NOTFOUNDERROR\"></a><BR>";
+       $tab_titre=$message[47][$Lang];
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>URL</TH><TH bgcolor=#$color_h>$message[49][$Lang]</TH><TH>$message[23][$Lang]</TH></TR>\n";
+       @sortsider404=sort { $SortDir*$_sider404_h{$a} <=> $SortDir*$_sider404_h{$b} } keys (%_sider404_h);
+       foreach $key (@sortsider404) {
+               $url=$key; $url =~ s/<script.*$//gi;                                                    # This is to avoid 'Cross Site Scripting attacks'
+               $referer=$_referer404_h{$key}; $referer =~ s/<script.*$//gi;    # This is to avoid 'Cross Site Scripting attacks'
+               print "<tr><td CLASS=LEFT>$url</td><td>$_sider404_h{$key}</td><td>$referer&nbsp;</td></tr>";
+       }
+       &tab_end;
+       &html_end;
+       exit(0);
        }
-       if ($QueryString =~ /output=browserdetail/i) {
-               print "$CENTER<a name=\"NETSCAPE\">&nbsp;</a><BR>";
-               &tab_head("$Message[33]<br><img src=\"$DirIcons/browser/netscape.png\">",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[58]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               for (my $i=1; $i<=$#_nsver_h; $i++) {
-                       my $h="&nbsp;"; my $p="&nbsp;";
-                       if ($_nsver_h[$i] > 0 && $_browser_h{"netscape"} > 0) {
-                               $h=$_nsver_h[$i]; $p=int($_nsver_h[$i]/$_browser_h{"netscape"}*1000)/10; $p="$p&nbsp;%";
-                       }
-                       print "<TR><TD CLASS=AWL>Mozilla/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+if ($QueryString =~ /action=browserdetail/i) {
+       print "$CENTER<a name=\"NETSCAPE\"></a><BR>";
+       $tab_titre=$message[33][$Lang]."<br><img src=\"$DirIcons/browser/netscape.png\">";
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>$message[58][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#_nsver_h; $i++) {
+               if ($_nsver_h[$i] gt 0) {
+                       $h=$_nsver_h[$i]; $p=int($_nsver_h[$i]/$_browser_h{"netscape"}*1000)/10; $p="$p&nbsp;%";
                }
-               &tab_end;
-               print "<a name=\"MSIE\">&nbsp;</a><BR>";
-               &tab_head("$Message[34]<br><img src=\"$DirIcons/browser/msie.png\">",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[58]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               for ($i=1; $i<=$#_msiever_h; $i++) {
-                       my $h="&nbsp;"; my $p="&nbsp;";
-                       if ($_msiever_h[$i] > 0 && $_browser_h{"msie"} > 0) {
-                               $h=$_msiever_h[$i]; $p=int($_msiever_h[$i]/$_browser_h{"msie"}*1000)/10; $p="$p&nbsp;%";
-                       }
-                       print "<TR><TD CLASS=AWL>MSIE/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
                }
-               &tab_end;
-               &html_end;
-               exit(0);
+               print "<TR><TD CLASS=LEFT>Mozilla/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
        }
-       if ($QueryString =~ /output=unknownrefererbrowser/i) {
-               print "$CENTER<a name=\"UNKOWNREFERERBROWSER\">&nbsp;</a><BR>";
-               &tab_head($Message[50],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>Referer (".(scalar keys %_unknownrefererbrowser_l).")</TH><TH>$Message[9]</TH></TR>\n";
-               my $count=0; my $rest=0;
-               foreach my $key (sort { $SortDir*$_unknownrefererbrowser_l{$a} <=> $SortDir*$_unknownrefererbrowser_l{$b} } keys (%_unknownrefererbrowser_l)) {
-                       if ($count>=$MAXROWS) { $rest+=$_sider404_h{$key}; next; }
-                       $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
-                       print "<tr><td CLASS=AWL>$key</td><td>".Format_Date($_unknownrefererbrowser_l{$key})."</td></tr>\n";
-                       $count++;
+       &tab_end;
+       print "<a name=\"MSIE\"></a><BR>";
+       $tab_titre=$message[34][$Lang]."<br><img src=\"$DirIcons/browser/msie.png\">";
+       &tab_head;
+       print "<TR bgcolor=#$color_TableBGRowTitle><TH>$message[58][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+       for ($i=1; $i<=$#_msiever_h; $i++) {
+               if ($_msiever_h[$i] gt 0) {
+                       $h=$_msiever_h[$i]; $p=int($_msiever_h[$i]/$_browser_h{"msie"}*1000)/10; $p="$p&nbsp;%";
                }
-               &tab_end;
-               &html_end;
-               exit(0);
-       }
-       if ($QueryString =~ /output=unknownreferer/i) {
-               print "$CENTER<a name=\"UNKOWNREFERER\">&nbsp;</a><BR>";
-               &tab_head($Message[46],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>Referer (".(scalar keys %_unknownreferer_l).")</TH><TH>$Message[9]</TH></TR>\n";
-               my $count=0; my $rest=0;
-               foreach my $key (sort { $SortDir*$_unknownreferer_l{$a} <=> $SortDir*$_unknownreferer_l{$b} } keys (%_unknownreferer_l)) {
-                       if ($count>=$MAXROWS) { $rest+=$_sider404_h{$key}; next; }
-                       $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
-                       print "<tr><td CLASS=AWL>$key</td><td>".Format_Date($_unknownreferer_l{$key})."</td></tr>\n";
-                       $count++;
+               else {
+                       $h="&nbsp;"; $p="&nbsp;";
                }
-               &tab_end;
-               &html_end;
-               exit(0);
+               print "<TR><TD CLASS=LEFT>MSIE/$i.xx</TD><TD>$h</TD><TD>$p</TD></TR>\n";
        }
-       if ($QueryString =~ /output=notfounderror/i) {
-               print "$CENTER<a name=\"NOTFOUNDERROR\">&nbsp;</a><BR>";
-               &tab_head($Message[47],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>URL (".(scalar keys %_sider404_h).")</TH><TH bgcolor=\"#$color_h\">$Message[49]</TH><TH>$Message[23]</TH></TR>\n";
-               my $count=0; my $rest=0;
-               foreach my $key (sort { $SortDir*$_sider404_h{$a} <=> $SortDir*$_sider404_h{$b} } keys (%_sider404_h)) {
-                       if ($count>=$MAXROWS) { $rest+=$_sider404_h{$key}; next; }
-                       $key =~ s/<script.*$//gi;                               # This is to avoid 'Cross Site Scripting attacks'
-                       my $nompage=$key;
-                       #if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
-                       my $referer=$_referer404_h{$key}; $referer =~ s/<script.*$//gi; # This is to avoid 'Cross Site Scripting attacks'
-                       print "<tr><td CLASS=AWL>$nompage</td><td>$_sider404_h{$key}</td><td>$referer&nbsp;</td></tr>\n";
-                       $count++;
-               }
-               &tab_end;
-               &html_end;
-               exit(0);
+       &tab_end;
+
+       &html_end;
+       exit(0);
        }
-       if ($QueryString =~ /output=info/i) {
-               # Not yet available
-               print "$CENTER<a name=\"INFO\">&nbsp;</a><BR>";
-               &html_end;
-               exit(0);
+if ($QueryString =~ /action=info/i) {
+       # Not yet available
+       print "$CENTER<a name=\"INFO\"></a><BR>";
+       &html_end;
+       exit(0);
+       }
+
+&debug("Start of sorting hash arrays");
+@RobotArray=keys %RobotHash;
+@SearchEnginesArray=keys %SearchEnginesHash;
+@sortdomains_p=sort { $SortDir*$_domener_p{$a} <=> $SortDir*$_domener_p{$b} } keys (%_domener_p);
+@sortdomains_h=sort { $SortDir*$_domener_h{$a} <=> $SortDir*$_domener_h{$b} } keys (%_domener_h);
+@sortdomains_k=sort { $SortDir*$_domener_k{$a} <=> $SortDir*$_domener_k{$b} } keys (%_domener_k);
+@sorthosts_p=sort { $SortDir*$_hostmachine_p{$a} <=> $SortDir*$_hostmachine_p{$b} } keys (%_hostmachine_p);
+@sortsiders=sort { $SortDir*$_sider_p{$a} <=> $SortDir*$_sider_p{$b} } keys (%_sider_p);
+@sortbrowsers=sort { $SortDir*$_browser_h{$a} <=> $SortDir*$_browser_h{$b} } keys (%_browser_h);
+@sortos=sort { $SortDir*$_os_h{$a} <=> $SortDir*$_os_h{$b} } keys (%_os_h);
+@sortsereferrals=sort { $SortDir*$_se_referrals_h{$a} <=> $SortDir*$_se_referrals_h{$b} } keys (%_se_referrals_h);
+@sortpagerefs=sort { $SortDir*$_pagesrefs_h{$a} <=> $SortDir*$_pagesrefs_h{$b} } keys (%_pagesrefs_h);
+@sortsearchwords=sort { $SortDir*$_keywords{$a} <=> $SortDir*$_keywords{$b} } keys (%_keywords);
+@sorterrors=sort { $SortDir*$_errors_h{$a} <=> $SortDir*$_errors_h{$b} } keys (%_errors_h);
+&debug("End of sorting hash arrays");
+
+# English tooltips
+if (($Lang != 1) && ($Lang != 2) && ($Lang != 3) && ($Lang != 4) && ($Lang != 6) && ($Lang != 10)) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       A new visits is defined as each new <b>incoming visitor</b> (viewing or browsing a page) who was not connected to your site during last <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Number of client hosts (<b>IP address</b>) who came to visit the site (and who viewed at least one <b>page</b>).<br>
+       This data refers to the number of <b>different physical persons</b> who had reached the site in any one day.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       Number of times a <b>page</b> of the site is <b>viewed</b> (Sum for all visitors for all visits).<br>
+       This piece of data differs from \"hits\" in that it counts only HTML pages as oppose to images and other files.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       Number of times a <b>page, image, file</b> of the site is <b>viewed</b> or <b>downloaded</b> by someone.<br>
+       This piece of data is provided as a reference only, since the number of \"pages\" viewed is often prefered for marketing purposes.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       This piece of information refers to the amount of data downloaded by all <b>pages</b>, <b>images</b> and <b>files</b> within your site measured in KBs.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       $PROG recognizes each access to your site after a <b>search</b> from the <b>".(@SearchEnginesArray)." most popular Internet Search Engines and Directories</b> (such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       List of all <b>external pages</b> which were used to link (or enter) to your site (Only the <b>$MaxNbOfRefererShown</b> most often used external pages are shown.\n
+       Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       This table shows the list of the most frequently <b>keywords</b> utilized to find your site from Internet Search Engines and Directories.
+       (Keywords from the <b>".(@SearchEnginesArray)."</b> most popular Search Engines and Directories are recognized by $PROG, such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       Robots (sometimes refer to Spiders) are <b>automatic computer visitors</b> used by many search engines that scan your web site to (1) index it and rank it, (2) collect statistics on Internet Web sites and/or (3) see if your site is still online.<br>
+       $PROG is able to recognize up to <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> No description for this error. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> Request was understood by server but will be processed later. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> Server has processed the request but there is no document to send. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Partial content. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> Requested document was moved and is now at another address given in awnswer. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> No description for this error. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> Syntax error, server didn\'t understand request. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> Tried to reach an <b>URL where a login/password pair was required</b>.<br>A high number within this item could mean that someone (such as a hacker) is attempting to crack, or enter into your site (hoping to enter a secured area by trying different login/password pairs, for instance). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> Tried to reach an <b>URL not configured to be reachable, even with an login/password pair</b> (for example, an URL within a directory not defined as \"browsable\".). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Tried to reach a <b>non existing URL</b>. This error often means that there is an invalid link somewhere in your site or that a visitor mistyped a certain URL. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> Server has taken <b>too much time</b> to respond to a request. This error frequently involves either a slow CGI script which the server was required to kill or an extremely congested web server. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> Internal error. This error is often caused by a CGI program that had finished abnormally (coredump for example). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Unknown requested action. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Code returned by a HTTP server that works as a proxy or gateway when a real, targeted server doesn\'t answer successfully to the client\'s request. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Internal server error. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Gateway Time-out. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> HTTP Version Not Supported. </DIV>
+       ";
+}
+
+# French tooltips
+if ($Lang == 1) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       On considère une nouvelle visite pour <b>chaque arrivée</b> d un visiteur consultant une page et ne s étant pas connecté dans les dernières <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Nombre de hotes (<b>adresse IP</b>) utilisés pour accéder au site (et voir au moins une <b>page</b>).<br>
+       Ce chiffre reflète le nombre de <b>personnes physiques</b> différentes ayant un jour accédées au site.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       Nombre de fois qu une <b>page</b> du site est <b>vue</b> (Cumul de tout visiteur, toute visite).<br>
+       Ce compteur différe des \"hits\" car il ne comptabilise que les pages HTML et non les images ou autres fichiers.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       Nombre de fois qu une <b>page, image, fichier</b> du site est <b>vu</b> ou <b>téléchargé</b> par un visiteur.<br>
+       Ce compteur est donné à titre indicatif, le compteur \"pages\" etant préféré.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       Nombre de <b>kilo octets</b> téléchargé lors des visites du site.<br>
+       Il s agit aussi bien du volume de données du au chargement des <b>pages</b> et <b>images</b> que des <b>fichiers</b> téléchargés.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       $PROG est capable de reconnaitre l acces au site issu d une <b>recherche</b> depuis les <b>".(@SearchEnginesArray)." moteurs de recherche Internet</b> les plus connus (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       Liste des <b>pages de sites externes</b> contenant un lien suivi pour accéder à ce site (Seules les <b>$MaxNbOfRefererShown</b> pages externes les plus utilisées sont affichées).\n
+       Les liens issus du résultat d un moteur de recherche connu n apparaissent pas ici, car comptabilisés à part sur la ligne juste au-dessus.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       Ce tableau offre la liste des <b>mots</b> les plus souvent utilisés pour retrouver et accéder au site depuis
+       un moteur de recherche Internet (Les recherches depuis <b>".(@SearchEnginesArray)."</b> moteurs de recherche parmi les pluspopulaires sont reconnues, comme Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       Les robots sont des <b>automates visiteurs</b> scannant le site dans le but de l indexer, d obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.<br>
+       $PROG reconnait <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> Contenu partiel renvoyé. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> La requête a été enregistrée par le serveur mais sera exécutée plus tard. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> Le serveur a traité la demande mais il n existe aucun document à renvoyer. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Contenu partiel renvoyé. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> Le document réclamé a été déplacé et se trouve maintenant à une autre adresse mentionnée dans la réponse. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> Aucun descriptif pour cette erreur. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> Erreur de syntaxe, le serveur n a pas compris la requête. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> Tentatives d accès à une <b>URL nécessitant identification avec un login/mot de passe invalide</b>.<br>Un nombre trop élévé peut mettre en évidence une tentative de crackage brute du site (par accès répété de différents logins/mots de passe). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> Tentatives d accès à une <b>URL non configurée pour etre accessible, même avec une identification</b> (par exemple, une URL d un répertoire non défini comme étant \"listable\"). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Tentatives d accès à une <b>URL inexistante</b>. Il s agit donc d un lien invalide sur le site ou d une faute de frappe d un visiteur qui a saisie une mauvaise URL directement. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> Le serveur mis un <b>temps trop important</b> pour répondre à la requête. Il peut s agir d un script CGI trop lent sur le serveur forcé d abandonner le traitement ou d une saturation du site. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> Erreur interne au serveur. Cette erreur est le plus souvant renvoyé lors de l arrêt anormal d un script CGI (par exemple suite à un coredump du CGI). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Le serveur ne prend pas en charge l action demandée. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Code renvoyé par un serveur HTTP qui fonctionne comme proxy ou gateway lorsque le serveur réel consulté ne réagit pas avec succès à la demande du client. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Erreur interne au serveur. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Gateway Time-out. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> Version HTTP non supporté. </DIV>
+       ";
+}
+
+# Dutch tooltips
+if ($Lang == 2) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       Een nieuw bezoek is elke <b>binnenkomende bezoeker</b> (die een pagina bekijkt) die de laatste <b>".($VisitTimeOut/10000*60)." mn</b> niet met uw site verbonden was.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Number of client hosts (<b>IP address</b>) who came to visit the site (and who viewed at least one <b>page</b>).<br>
+       This data refers to the number of <b>different physical persons</b> who had reached the site in any one day.
+       Aantal client hosts (<b>IP adres</b>) die de site bezochten (en minimaal een <b>pagina</b> bekeken).<br>
+       Dit geeft aan hoeveel <b>verschillende fysieke personen</b> de site op een bepaalde dag bezocht hebben.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       Aantal malen dat een <b>pagina</b> van de site <b>bekeken</b> is (Som voor alle bezoekers voor alle bezoeken).<br>
+       Dit onderdeel verschilt van \"hits\" in het feit dat het alleen HTML pagina\'s telt, in tegenstelling tot plaatjes en andere bestanden.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       Aantal malen dat een <b>pagina</b>, <b>plaatje</b> of <b>bestand</b> op de site door iemand is <b>bekeken</b> of <b>gedownload</b>.<br>
+       Dit onderdeel is alleen als referentie gegeven, omdat het aantal bekeken \"pagina\'s\" voor marketingdoeleinden de voorkeur heeft.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       Aantal door uw bezoekers gedownloade <b>kilobytes</b>.<br>
+       Dit onderdeel geeft de hoeveelheid gedownloade gegevens in alle <b>pagina\'s</b>, <b>plaatjes</b> en <b>bestanden</b> van uw site, gemeten in KBs.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       Dit programma, $PROG, herkent elke benadering van uw site na een <b>zoekopdracht</b> van de <b>".(@SearchEnginesArray)." meest populaire Internet zoekmachines</b> (zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       Lijst van alle <b>externe pagina\'s</b> die zijn gebruikt om naar uw site te linken (of deze te benaderen) (Alleen de <b>$MaxNbOfRefererShown</b> meest gebruikte externe pagina\'s zijn getoond.\n
+       Links gebruikt door de resultaten van zoekmachines worden hiet niet getoond omdat deze al zijn opgenomen in de vorige regel van deze tabel.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       Deze tabel toont de lijst van <b>keywords</b> die het meest zijn gebruikt om uw site te vindein in Internet zoekmachines.
+       (Keywords van de <b>".(@SearchEnginesArray)."</b> meest populaire zoekmachines worden door $PROG herkend, zoals Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       Robots (soms Spiders genoemd) zijn <b>automatische bezoekcomputers</b> die door veel zoekmachines worden gebruikt om uw site te scannen om (1) deze te indexeren, (2) statistieken over Internet sites te verzamelen en/of (3) te kijken of site nog steeds on-line is.<br>
+       Dit programma, $PROG, is in staat maximaal <b>".(@RobotArray)."</b> robots te herkennen</b>.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> Geen beschrijving voor deze foutmelding. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> De server heeft het verzoek begrepen, maar zal deze later behandelen. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> De server heeft het verzoek verwerkt, maar er is geen document om te verzenden. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Gedeeltelijke inhoud. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> Het aangevraagde document is verplaatst en is nu op een andere locatie die in het antwoord gegeven is. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> Geen beschrijving voor deze foutmelding. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> \"Taalfout\", de server begreep het verzoek niet. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> Er is gepoogd een <b>URL waarvoor een usernaam/wachtwoord noodzakelijk is</b> te benaderen.<br>Een hoog aantal van deze meldingen kan betekenen dat iemand (zoals een hacker) probeert uw site te kraken, of uw site binnen te komen (pogend een beveiligd onderdeel van uw site te benaderen door verschillende usernamen/wachtwoorden te proberen, bijvoorbeeld). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> Er is gepoogd een <b>URL die is ingesteld om niet benaderbaar te zijn, zelfs met usernaam/wachtwoord</b> te benaderen (bijvoorbeeld, een URL in een directory die niet \"doorbladerbaar\" is). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Er is gepoogd een <b>niet bestaande URL</b> te benaderen. Deze fout betekent vaak dat er een ongeldige link in uw site zit of dat een bezoeker een URL foutief heeft ingevoerd. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> De server heeft er <b>te lang</b> over gedaan om een antwoord op een aanvraag te geven. Het kan een CGI script zijn dat zo traag is dat de server hem heeft moeten afbreken of een overbelaste web server. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> Interne fout. Deze error wordt vaak veroorzaakt door een CGI programma dat abnormaal is beeindigd (een core dump, bijvoorbeeld). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Onbekende actie aangevraagd. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Melding die door een proxy of gateway HTTP server wordt gegeven als een echte doelserver niet succesvol op de aanvraag van een client antwoordt. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Interne server fout. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Gateway time-out. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> HTTP versie niet ondersteund. </DIV>
+       ";
+}
+
+# Spanish tooltips
+if ($Lang == 3) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       Se considera un nueva vista por <b>cada nuevo visitante</b> que consulte una página y que no haya accesado el sitio en los últimos <b>".($VisitTimeOut/10000*60)." mins.</b>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Número de Servidores (<b>direcciones IP</b>) que entran a un sitio (y que por lo menos visitan una <b>página</b>).<br>
+       Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accesado al sitio en un día.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       Número de ocasiones que una <b>página</b> del sitio ha sido <b>vista</b> (La suma de todos los visitantes incluyendo múltiples visitas).<br>
+       Este contador se distingue de \"hits\" porque cuenta sólo las páginas HTML y no los gráficos u otros archivos o ficheros.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       El número de ocasiones que una <b>página, imagen, archivo o fichero</b> de un sitio es <b>visto</b> o <b>descargado</b> por un visitante.<br>
+       Este contador sirve de referencia, pero el contador de \"páginas\" representa un dato mercadotécnico generalmente más útil y por lo tanto se recomienda.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       El número de <b>kilo bytes</b> descargados por los visitantes del sitio.<br>
+       Se refiere al volumen de datos descargados por todas las <b>páginas</b>, <b>imágenes</b> y <b>archivos o ficheros</b> medidos en kilo bytes.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       El programa $PROG es capaz de reconocer una visita a su sitio luego de cada <b>búsqueda</b> desde cualquiera de los <b>".(@SearchEnginesArray)." motores de búsqueda y directorios Internet</b> más populares (Yahoo, Altavista, Lycos, Google, Terra, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       Lista de <b>páginas de sitios externos</b> utilizadas para acceder o enlazarse con su sitio (Sólo las <b>$MaxNbOfRefererShown</b> páginas más utilizadas se encuentras enumeradas).\n
+       Los enlaces utilizados por los motores de búsqueda o directorios son excluidos porque ya han sido contabilizados en el rubro anterior.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       Esta tabla muestra la lista de las <b>palabras clave</b> más utilizadas en los motores de búsqueda y directorios Internet para encontrar su sitio.
+       (El programa $PROG reconoce palabras clave usadas en los <b>".(@SearchEnginesArray)."</b> motores de búsqueda más populares, tales como Yahoo, Altavista, Lycos, Google, Voila, Terra etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       Los Robots son <b>visitantes automáticos</b> que escanean o viajan por su sitio para indexarlo, o jerarquizarlo, para recopilar estadísticas de sitios Web, o para verificar si su sitio se encuentra conectado a la Red.<br>
+       El programa $PROG reconoce hasta <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> Error sin descripción. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> La solicitud ha sido computada pero el servidor la procesará más tarde. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> El servidor ha procesado la solicitud pero no existen documentos para enviar. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Contenido parcial. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> El documento solicitado ha sido reubicado y se encuentra en un URL proporcionado en la misma respuesta. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> Error sin descripción. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> Error de sintaxis, el servidor no ha comprendido su solicitud. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> Número de intentos por acceder un <b>URL que exige una combinación usuario/contraseña que ha sido invalida.</b>.<br>Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> Número de intentos por acceder un <b>URL configurado para no ser accesible, aún con una combinación usuario/contraseña</b> (p.e., un URL previamente definido como \"no navegable\"). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Número de intentos por acceder un <b>URL inexistente</b>. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> El servidor ha tomado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Solicitud desconocida por el servidor. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Código retornado por un servidor de protocolo HTTP el cual funge como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Error interno del servidor. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Gateway time-out. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> Versión de protocolo HTTP no soportada. </DIV>
+       ";
+}
+
+# Italian tooltips
+if ($Lang == 4) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       Si considera una nuova visita per <b>ogni arrivo</b> di un visitatore che visualizza o consulta una pagina e non si è connesso negli ultimi <b>".($VisitTimeOut/10000*60)." minuti</b>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Numero di client hosts (<b>indirizzi IP</b>) utilizzati per accedere al sito (e visualizzare almeno una <b>pagina</b>).<br>
+       Questa cifra riflette il numero di <b>persone fisiche</b> differenti che un giorno hanno visitato il sito.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       Numero di volte che una <b>pagina</b> del sito è stata <b>vista</b> (somma di tutti i visitatori, per tutte le visite).<br>
+       Questo valore è diverso dagli \"hits\" perchè considera solamente le pagine HTML e non le immagini o gli altri elementi.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       Numero di volte che una <b>pagina, immagine o elemento</b> del sito è <b>visto</b> o <b>scaricato</b> da un visitatore.<br>
+       Questo valore è indicativo, in quanto il contatore \"pagine\" a volte é più significativo ai fini commerciali.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       Numero totale di <b>kilobytes</b> scaricati dal sito durante le visite.<br>
+       Indica il volume di traffico dovute alle richieste di caricamento delle <b>pagine</b>, delle <b>immagini</b> e degli altri <b>elementi</b> scaricati.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       $PROG è capace di riconoscere gli accessi al sito provenienti dalle <b>ricerche</b> dei <b>".(@SearchEnginesArray)." motori di ricerca Internet</b> più conosciuti (Yahoo, Altavista, Lycos, Google, Voila, ecc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       Elenco delle <b>pagine di siti esterni</b> contenenti un link che è stato seguito per accedere a questo sito (solo le <b>$MaxNbOfRefererShown</b> pagine esterne più utilizzate sono visualizzate).\n
+       I link risultanti da una ricerca di un motore conosciuto non appaiono qui, dato che sono conteggiati a parte sulla linea subito sopra.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       Questa tabella offre la lista delle <b>parole</b> più frequentemente utilizzate per rintracciare e accedere al sito a partire da
+       un motore di ricerca Internet (sono riconosciute le ricerche dei <b>".(@SearchEnginesArray)."</b> motori di ricerca più popolari, come Yahoo, Altavista, Lycos, Google, Voila, ecc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       I robots sono dei <b>visitatori automatici</b> che perlustrano il sito al fine di indicizzarlo, di ottenere delle statistiche sui siti Web Internet o di verificarne l'accessibilità.<br>
+       $PROG riconosce <b>".(@RobotArray)."</b> robots.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> Contenuto parziale ritornato. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> La richiesta è stata registrata del server ma sarà eseguita più tardi. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> Il server ha processato la richiesta ma non esiste alcun documento da ritornare. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Contenuto parziale ritornato. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> Il documento richiesto è stato spostato e si trova al momento a un altro indirizzo, indicato nella risposta. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> Nessuna descrizione per questo errore. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> Errore di sintassi, il server non ha compreso la richiesta. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> Tentativo di accesso non autorizzato a un <b>URL che richiede un'autenticazione con un login o una parola di accesso</b>.<br>Un numero troppo elevato può evidenziare un tentativo di accesso mediante forza bruta al sito (a seguito di accesso ripetuto con differenti nomi di login o parole di accesso).</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> Tentativo di accesso a un <b>URL non configurato per essere accessibile, anche se corretto</b> (ad esempio, un URL di una directory indicata come non \"listabile\"). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Tentativo di accesso a una risorsa o <b>URL inesistente</b>. SI tratta dunque di un link non valido sul sito o di un errore di battitura del visitatore che ha indicato un URL non corretto. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> Il server ha impiegato un <b>tempo troppo lungo</b> per rispondere alla richiesta. Può trattarsi di uno script CGI troppo lento obbligato ad abbandonare la richiesta, o di un timeout dato dalla saturazione del sito. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> Errore interno del server. Questo errore è quello ritornato più di frequente durante la terminazione anormale di uno script CGI (per esempio in seguito a un coredump del CGI). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Il server non prende in carico l'azione richiesta. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Codice ritornato da un server HTTP che funziona da proxy o gateway quando il server reale chiamato non risponde alla richiesta del client. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Errore interno del server. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Time-out del gateway. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> Versione HTTP non supportata. </DIV>
+       ";
+}
+
+# Polish tooltips
+if ($Lang == 6) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       Wizyty ka¿dego <b>nowego go¶cia</b>, który ogl±da³ stronê i nie ³±czy³ siê z ni± przez ostatnie <b>".($VisitTimeOut/10000*60)." mn</b>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Adres numeryczny hosta klienta (<b>tzw. adres IP</b>) odwiedzaj±cego tê stronê.<br>
+       Ten numer mo¿e byæ identyczny dla <B>kilku ró¿nych Internautów</B> którzy odwiedzili stronê tego samego dnia.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       ¦rednia liczba obejrzanych <B>stron</B> przypadaj±ca na jednego Internautê. (Suma go¶ci, wszystkich wizyt).<br>
+       Ten licznik ró¿ni siê od kolumny z prawej, gdy¿ zlicza on tylko strony html (bez obrazków i innych plików).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       Liczba wszystkich <b>stron, obrazków, d¼wiêków, plików</b>, które zosta³y <b>obejrzane</b> lub <b>¶ci±gniête</b> przez kogo¶.<br>
+       Warto¶æ jest jedynie orientacyjna, zaleca siê spogl±daæ na licznik \"strony\".
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       Liczba <b>kilobajtów</b> ¶ci±gniêtych przez Internautów.<br>
+       Jest to suma wszystkich ¶ci±gniêtych danych <B>(strony html, obrazki, d¼wiêki)</B>.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       $PROG rozró¿nia dostêp do stron <b>z zagranicznych wyszukiwarek</b> dziêki <b>".(@SearchEnginesArray)." najpopularniejszym przegl±darkom internetowym</b> (Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       Lista wszystkich <b>stron spoza serwera</b> z których trafiono na ten serwer (wy¶wietlanych jest <b>$MaxNbOfRefererShown</b> stron z których najczê¶ciej siê odwo³ywano.\n
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       Ta kolumna pokazuje listê najczê¶ciej u¿ywanych <b>s³ów kluczowych</b>, dziêki którym znaleziono t± stronê w wyszukiwarkach.
+       ($PROG rozró¿nia zapytania s³ów kluczowych z <b>".(@SearchEnginesArray)."</b> najpopularniejszych wyszukiwarek, takich jak Yahoo, Altavista, Lycos, Google, Voila, etc...).
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       Roboty s± <b>programami sieciowymi</b> skanuj±cymi strony w celu zebrania/aktualizacji danych (np. s³owa kluczowe do wyszukiwarek), lub sprawdzaj±cymi czy strona nadal istnieje w sieci.<br>
+       $PROG rozró¿nia obecnie <b>".(@RobotArray)."</b> robów.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> Zlecenie POST zosta³o zrealizowane pomy¶lnie. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> ¯±danie zosta³o odebrane poprawnie, lecz jeszcze siê nie zakoñczy³o. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> Serwer przetworzy³ ¿±danie, lecz nie posiada ¿adnych danych do wys³ania. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> Czê¶ciowa zawarto¶æ.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> Dokument zosta³ przeniesiony pod inny adres.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> Dokument zosta³ czasowo przeniesiony pod iiny adres.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> Zlecenie by³o b³êdne, lub niemo¿liwe do zrealizowania przez serwer.<BR>B³±d powstaje wtedy, kiedy serwer WWW otrzymuje do wykonania instrukcjê, której nie rozumie.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> B³±d autoryzacji. Strona wymaga podania has³a i loginu - b³±d pokazuje siê wtedy, gdy które¶ z tych danych siê nie zgadza lub zosta³y podane niew³a¶ciwiwe.<BR>Je¶li liczba ta jest du¿a, jest to sygna³ dla webmastera, i¿ kto¶ próbuje z³amaæ has³o do strony nim zabezpieczonej.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> B³±d wystêpuje wtedy, gdy katalog/strona do którego siê odwo³ywano nie ma ustawionych w³a¶ciwych praw dostêpu, lub prawa te nie pozwalaj± na obejrzenie zawarto¶ci katalogu/strony.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> Spróbuj wpisaæ <b>nie istniej±cy adres URL</b> (np. adres tej strony ze skasowan± jedn± literk±). Znaczy to, ¿e posiadasz gdzie¶ na swoich stronach b³êdny link, lub link odnosz±cy siê do nieistniej±cej strony.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> Przegl±darka nie wys³a³a ¿±dañ do serwera w czasie jego oczekiwania. Mo¿esz powtórzyæ ¿±danie bez jego modyfikacji w czasie pó¼niejszym. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> B³±d wewnêtrzny. Ten b³±d czêsto pojawia siê, gdy aplikacja CGI nie zakoñczy³a siê normalnie (podobno ka¿dy program zawiera przynajmniej jeden b³±d...:-). </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> Serwer nie umo¿liwia obs³ugi mechanizmu. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> Serwer jest chwilowo przeci±¿ony i nie mo¿e obs³u¿yæ zlecenia.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> Serwer zdecydowa³ siê przerwaæ oczekiwanie na inny zasób lub us³ugê, i z tego powodu nie móg³ obs³u¿yæ zlecenia.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> Serwer docelowy nie otrzyma³ odpowiedzi od serwera proxy, lub bramki.</DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> Nie obs³ugiwana wesja protoko³u HTTP. </DIV>
+       ";
+}
+
+# Korean tooltips
+if ($Lang == 10) {
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt1\">
+       »õ·Î¿î ¹æ¹®Àº ÀÌÀü¿¡(<b>\".($VisitTimeOut/10000*60).\" ºÐÀ̳»</b>)
+       ´ç½ÅÀÇ »çÀÌÆ®¿¡ Á¢¼ÓÇÏÁö ¾ÊÀº(º¸°Å³ª ºê¶ó¿ì¡ ÇÏÁö ¾ÊÀº) »õ·Î¿î
+       <b>¹æ¹®ÀÚ</b>¸¦ ³ªÅ¸³À´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt2\">
+       Å¬¶óÀÌ¾ðÆ® È£½ºÆ® ¼ö(<b>IP ÁÖ¼Ò</b>)´Â ¹æ¹®ÇÑ »çÀÌÆ® ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.(ÃÖ¼ÒÇÑ <b>ÇÑ ÆäÀÌÁö</b>¶óµµ º» »çÀÌÆ®)<br>
+       ÀÌ ÀÚ·á´Â ÀϺ° <b>¹°¸®ÀûÀ¸·Î ´Ù¸¥ »ç¿ëÀÚ</b>¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt3\">
+       »çÀÌÆ®¿¡¼­ <b>º»(view) ÆäÀÌÁö</b> È¸¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
+       (¸ðµç ¹æ¹®ÀÚÀÇ ÇÔ)<br>
+        ÀÌ ÀÚ·á´Â À̹ÌÁö, ÆÄÀϰú ´Þ¸® HTML ÆäÀÌÁö¿¡¼­ÀÇ \"Á¶È¸¼ö(hit)\"¿Í´Â ´Ù¸¨´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt4\">
+       <b>ÆäÀÌÁö, À̹ÌÁö, ÆÄÀÏ</b>À» <b>º¸°Å³ª ´Ù¿î·Îµå</b>ÇѠȸ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.<br>
+       ÀÌ ÀÚ·á´Â ÂüÁ¶¿ëÀ¸·Î¸¸ Á¦°øµË´Ï´Ù. ¿Ö³ÄÇϸ頺» \"ÆäÀÌÁö\"´Â Á¾Á¾ ½ÃÀåÁ¶»ç ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt5\">
+       ÀÌ Á¤º¸µéÀº ´Ù¿î·ÎµåÇÑ ¸ðµç <b>ÆäÀÌÁö</b>, <b>À̹ÌÁö</b>, <b>ÆÄÀÏ</b> µéÀ» Kb´ÜÀ§·Î ³ªÅ¸³À´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt13\">
+       $PROG ´Â <b>".(@SearchEnginesArray)."</b>ÀÇ <b>°Ë»ö</b>À¸·Î ´ç½ÅÀÇ »çÀÌÆ®¿¡ ´ëÇÑ Á¢±ÙÀ» ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt14\">
+       ´ç½ÅÀÇ »çÀÌÆ®¿¡ ¸µÅ©µÈ ¸ðµç <b>¿ÜºÎ ÆäÀÌÁö</b><br>
+       (<b>$MaxNbOfRefereShown</b>´Â °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¿ÜºÎ ÆäÀÌÁö¸¦ ³ªÅ¸³À´Ï´Ù.)
+        °Ë»ö ¿£Áø¿¡ ÀÇÇÑ °á°úÆäÀÌÁö¿¡ »ç¿ëµÈ ¸µÅ©´Â ¿©±â¿¡¼­ Á¦¿ÜµË´Ï´Ù.
+        (ÀÌ Å×À̺íÀÇ ÀÌÀü¿¡ À̹̠³ª¿Í ÀÖ½À´Ï´Ù.)
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt15\">
+       ÀÌ Å×À̺íÀº ´ç½ÅÀÇ »çÀÌÆ®¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëµÇ´Â <b>Ű¿öµå</b> ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù.
+        (°¡Àå ¾ÖÈ£Çϴ °Ë»ö¿£Áø Yahoo, Altavista, Lycos, Google, Voilaµî°ú °°Àº
+       <b>".(@SearchEnginesArray)."</b>ÀǠŰ¿öµå¸¦ $PROG´Â ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
+       </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt16\">
+       ·Îº¸Æ® (¶§·Î´Â ½ºÆÄÀÌ´õ¸¦ ¶æÇÔ)´Â ¸¹Àº °Ë»ö ¿£Áø¿¡¼­ »ç¿ëµÇ´Â
+       <b>ÀÚµ¿È­µÈ À¥Á¢¼Ó µµ±¸</b>ÀÔ´Ï´Ù. ÀÌ ¿£ÁøÀº (1) À¥»çÀÌÆ®¸¦ ¸ñ·ÏÈ­Çϰí
+       ¼ø¼­¸¦ ºÎ¿©Çϰí (2) ÀÎÅͳݠÀ¥ »çÀÌÆ®ÀÇ Åë°è¸¦ ¼öÁýÇϰí (3) ´ç½ÅÀÇ
+       »çÀÌÆ®°¡ ¿©ÀüÈ÷ »ç¿ë°¡´ÉÇÑÁö Á¶»çÇÕ´Ï´Ù.<br>
+       $PROG´Â <b>".(@RobotArra)."</b> ·Îº¸Æ®¸¦ ½Äº°ÇÒ ¼ö ÀÖ½À´Ï´Ù.
+       </DIV>";
+
+       print "
+       <DIV CLASS=\"CTooltip\" ID=\"tt201\"> ÀÌ ¿À·ù¿¡ ´ëÇÑ ¼³¸íÀÌ ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt202\"> ¿äûÀÌ ¼­¹ö¿¡ ÀÇÇØ ´õÀÌ»ó ÁøÇàµÉ ¼ö ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt204\"> ¼­¹ö°¡ ¿äûÀ» Ã³¸®ÇßÁö¸¸ Àü¼ÛÇÒ ¹®¼­°¡ ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt206\"> ÀϺΠ³»¿ë. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt301\"> ¿äûµÈ ¹®¼­´Â ¿Å°ÜÁ®¼­ ´Ù¸¥ ÁÖ¼Ò¸¦ »ç¿ëÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt302\"> ÀÌ ¿À·ù¿¡ ´ëÇÑ ¼³¸íÀÌ ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt400\"> ±¸¹® ¿À·ù, ¼­¹ö°¡ ÀÌ ¿äûÀ» ¾Ë ¼ö ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt401\"> <b>URL¿¡ Á¢¼ÓÀ» À§Çؼ­´Â ·Î±×ÀÎ/ÆÐ½º¿öµå °¡ ÇÊ¿äÇÕ´Ï´Ù.</b><br>ÀÌ Ç׸ñÀÇ ÃÖ°í°ªÀº ´©±º°¡ Å©·¢À» ½ÃµµÇϰųª ´ç½ÅÀÇ »çÀÌÆ®¿¡ Á¢¼ÓÀ» ½ÃµµÇϰí Àִ °Í(´Ù¸¥ ·Î±×ÀÎ/ÆÐ½º¿öµå¸¦ »ç¿ëÇÏ¿© ½ÃµµÇϴ°Í) À» ÀǹÌÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt403\"> <b>»ç¿ë°¡´ÉÇϰԠ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Â URL</b>¿¡ ´ëÇÑ Á¢¼Ó½Ãµµ ¿À·ù ÀÔ´Ï´Ù. (¿¹¸¦ µé¾î, µð·ºÅ丮¿¡¤Ô´ëÇÑ \"ºê¶ó¿ì¡\"ÀÌ Á¤ÀǵÇÁö ¾ÊÀº °æ¿ìÀÔ´Ï´Ù.) </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt404\"> <b>Á¸ÀçÇÏÁö ¾Ê´Â URL</b>¿¡ ´ëÇÑ Á¢¼Ó ½Ãµµ ¿À·ùÀÔ´Ï´Ù. ÀÌ ¿À·ù´Â Á¾Á¾ ´ç½ÅÀÇ »çÀÌÆ® ¾îµò°¡¿¡¼­ À߸øµÈ ¸µÅ©°¡ À־湮ÀÚµéÀÌ À߸øµÈ URL·Î Á¢¼ÓÇϴ °æ¿ì¿¡ ¹ß»ýÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt408\"> ¼­¹ö¿¡°Ô ¿äûµÈ °ÍÀÌ <b>³Ê¹« ¸¹Àº ÀÀ´ä ½Ã°£</b>À» ¿ä±¸ÇÕ´Ï´Ù.     ÀÌ ¿À·ù´Â Á¾Á¾ ´À¸° CGI ½ºÅ©¸³Æ® ¹®Á¦À̰ųª À¥¼­¹ö »ç¿ë·®ÀÌ ¸¹Àº °æ¿ì¿¡ ¹ß»ýÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt500\"> ³»ºÎ ¿À·ù. ÀÌ ¿À·ù´Â Á¾Á¾ CGIÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÇ¾úÀ» ¶§ ¹ß»ýÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt501\"> ¿äûµÈ µ¿ÀÛÀ» ¾Ë¼ö ¾ø½À´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt502\"> HTTP ¼­¹ö¿¡ ÀÇÇØ ¹Ý¼ÛµÈ Äڵ尡 ÇÁ¶ô½Ã³ª °ÔÀÌÆ®¿þÀ̷Πµ¿ÀÛÇÕ´Ï´Ù.  ´ë»ó ¼­¹ö°¡ Å¬¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ Á¤È®ÇϰԠÀÀ´äÀ» ÇÏÁö ¸øÇÕ´Ï´Ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt503\"> ³»ºÎ ¼­¹ö ¿À·ù. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt504\"> °ÔÀÌÆ®¿þÀÌ ½Ã°£Ãʰú. </DIV>
+       <DIV CLASS=\"CTooltip\" ID=\"tt505\"> HTTP ¹öÀüÀÌ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. </DIV>
+       ";
+}
+
+
+# Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop IE OK   Opera OK
+#          .style.left/.height/.width/.top                                                                                     Netscape OK
+# document.getElementById                                                                              IE OK   Opera OK        Netscape OK
+# document.body.offsetWidth|document.body.style.pixelWidth             IE OK   Opera OK        Netscape OK             Visible width of container
+# document.body.scrollTop                                       IE OK  Opera OK        Netscape OK             Visible width of container
+# tooltip.offsetWidth|tooltipOBJ.style.pixelWidth                              IE OK   Opera OK        Netscape OK             Width of an object
+# event.clientXY                                                                                               IE OK   Opera OK        Netscape KO             Return position of mouse
+print <<EOF;
+<script type="text/javascript" language="javascript">
+  function ShowTooltip(fArg)
+  {
+    var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
+    var tooltipLft = (document.body.offsetWidth?document.body.offsetWidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:300)) - 30;
+    if (navigator.appName != 'Netscape') {
+               var tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10);
+               if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) {
+                       tooltipTop = (document.body.scrollTop?document.body.scrollTop:document.body.offsetTop) + event.clientY + 20;
+               }
+               tooltipOBJ.style.pixelLeft = tooltipLft; tooltipOBJ.style.pixelTop = tooltipTop; 
        }
-       
-       # FirstTime LastTime TotalVisits TotalUnique TotalHostsKnown TotalHostsUnknown
-       my $beginmonth=$MonthRequired;my $endmonth=$MonthRequired;
-       if ($MonthRequired eq "year") { $beginmonth=1;$endmonth=12; }
-       for (my $monthix=$beginmonth; $monthix<=$endmonth; $monthix++) {
-               $monthix=$monthix+0; if ($monthix < 10) { $monthix  = "0$monthix"; }    # Good trick to change $month into "MM" format
-               if ($FirstTime{$YearRequired.$monthix} && ($FirstTime == 0 || $FirstTime > $FirstTime{$YearRequired.$monthix})) { $FirstTime = $FirstTime{$YearRequired.$monthix}; }
-               if ($LastTime < $LastTime{$YearRequired.$monthix}) { $LastTime = $LastTime{$YearRequired.$monthix}; }
-               $TotalVisits+=$MonthVisits{$YearRequired.$monthix};
-               $TotalUnique+=$MonthUnique{$YearRequired.$monthix};
-               $TotalHostsKnown+=$MonthHostsKnown{$YearRequired.$monthix};
-               $TotalHostsUnknown+=$MonthHostsUnknown{$YearRequired.$monthix};
+       else {
+               var tooltipTop = 10;
+               tooltipOBJ.style.left = tooltipLft; tooltipOBJ.style.top = tooltipTop; 
+       }
+    tooltipOBJ.style.visibility = "visible";
+  }
+  function HideTooltip(fArg)
+  {
+    var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
+    tooltipOBJ.style.visibility = "hidden";
+  }
+</script>
+
+EOF
+
+
+# MENU
+#---------------------------------------------------------------------
+print "$CENTER<a name=\"MENU\"></a><BR>";
+
+print "<table>";
+print "<tr><td class=LEFT colspan=2><font style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">$message[7][$Lang] : <font style=\"font: 14px arial,verdana,helvetica; font-weight: normal\">$SiteToAnalyze</td></tr>";
+print "<tr><td class=LEFT style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">Last update : <font style=\"font: 14px arial,verdana,helvetica; font-weight: normal\">";
+foreach $key (keys %LastUpdate) { if ($LastUpdate < $LastUpdate{$key}) { $LastUpdate = $LastUpdate{$key}; } }
+$yearcon=substr($LastUpdate,0,4);$monthcon=substr($LastUpdate,4,2);$daycon=substr($LastUpdate,6,2);$hourcon=substr($LastUpdate,8,2);$mincon=substr($LastUpdate,10,2);
+if ($LastUpdate != 0) { print "$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon"; }
+else { print "<font color=#880000>Never updated</font>"; }
+print "</font></td><td valign=center><font size=1>&nbsp;";
+if ($AllowToUpdateStatsFromBrowser) { print "<a href=\"$DirCgi$PROG.$Extension?update=1&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[74][$Lang]</a>"; }
+print "</td></tr></table>";
+print "<br>\n";
+print "<table>\n";
+print "<tr><td class=LEFT><font style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">Traffic:</td>";
+print "<td class=LEFT><a href=\"#DOMAINS\">$message[17][$Lang]</a> &nbsp; <a href=\"#VISITOR\">".ucfirst($message[26][$Lang])."</a> &nbsp; <a href=\"#ROBOTS\">$message[53][$Lang]</a> &nbsp; <a href=\"#HOUR\">$message[20][$Lang]</a> &nbsp; <a href=\"$DirCgi$PROG.$Extension?action=unknownip&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[45][$Lang]</a><br></td></tr>\n";
+print "<tr><td class=LEFT><font style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">Navigation:</td>";
+print "<td class=LEFT><a href=\"#PAGE\">$message[19][$Lang]</a> &nbsp; <a href=\"#BROWSER\">$message[21][$Lang]</a> &nbsp; <a href=\"#OS\">$message[59][$Lang]</a> &nbsp; <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[33][$Lang]</a> &nbsp; <a href=\"$DirCgi$PROG.$Extension?action=browserdetail&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[34][$Lang]</a><br></td></tr>\n";
+print "<tr><td class=LEFT><font style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">$message[23][$Lang]</td>";
+print "<td class=LEFT><a href=\"#REFERER\">$message[37][$Lang]</a> &nbsp; <a href=\"#SEARCHWORDS\">$message[24][$Lang]</a><br></td></tr>\n";
+print "<tr><td class=LEFT><font style=\"font: 14px arial,verdana,helvetica; font-weight: bold\">$message[2][$Lang]:</td>";
+print "<td class=LEFT> <a href=\"#ERRORS\">$message[22][$Lang]</a> &nbsp; <a href=\"$DirCgi$PROG.$Extension?action=notfounderror&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[31][$Lang]</a><br></td></tr>\n";
+print "</table>\n";
+print "<br>\n\n";
+
+
+# SUMMARY
+#---------------------------------------------------------------------
+print "$CENTER<a name=\"SUMMARY\"></a><BR>";
+$tab_titre="$message[7][$Lang] $SiteToAnalyze";
+&tab_head;
+
+# FirstTime LastTime TotalVisits
+$beginmonth=$MonthRequired;$endmonth=$MonthRequired;
+if ($MonthRequired eq "year") { $beginmonth=1;$endmonth=12; }
+for ($monthix=$beginmonth; $monthix<=$endmonth; $monthix++) {
+       $monthix=$monthix+0; if ($monthix < 10) { $monthix  = "0$monthix"; }    # Good trick to change $month into "MM" format
+       if ($FirstTime{$YearRequired.$monthix} > 0 && ($FirstTime == 0 || $FirstTime > $FirstTime{$YearRequired.$monthix})) { $FirstTime = $FirstTime{$YearRequired.$monthix}; }
+       if ($LastTime  < $LastTime{$YearRequired.$monthix}) { $LastTime = $LastTime{$YearRequired.$monthix}; }
+       $TotalVisits+=$MonthVisits{$YearRequired.$monthix};
+}
+# TotalUnique TotalHosts
+foreach $key (keys %_hostmachine_p) { if ($key ne "Unknown") { if ($_hostmachine_p{$key} > 0) { $TotalUnique++; }; $TotalHosts++; } }
+foreach $key (keys %_unknownip_l) { $TotalUnique++; $TotalHosts++; }           # TODO: Put + @xxx instead of foreach
+# TotalDifferentPages
+$TotalDifferentPages=@sortsiders;
+# TotalPages TotalHits TotalBytes
+for ($ix=0; $ix<=23; $ix++) { $TotalPages+=$_time_p[$ix]; $TotalHits+=$_time_h[$ix]; $TotalBytes+=$_time_k[$ix]; }
+# TotalDifferentKeywords
+$TotalDifferentKeywords=@sortsearchwords;
+# TotalKeywords
+foreach $key (keys %_keywords) { $TotalKeywords+=$_keywords{$key}; }
+# TotalErrors
+foreach $key (keys %_errors_h) { $TotalErrors+=$_errors_h{$key}; }
+# Ratio
+if ($TotalUnique > 0) { $RatioHosts=int($TotalVisits/$TotalUnique*100)/100; }
+if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; }
+if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/$TotalVisits)/100; }
+
+print "<TR><TD><b>$message[8][$Lang]</b></TD>";
+if ($MonthRequired eq "year") { print "<TD colspan=3 rowspan=2><font style=\"font: 18px arial,verdana,helvetica; font-weight: bold\">$message[6][$Lang] $YearRequired</font><br>"; }
+else { print "<TD colspan=3 rowspan=2><font style=\"font: 18px arial,verdana,helvetica; font-weight: bold\">$message[5][$Lang] $monthlib{$MonthRequired} $YearRequired</font><br>"; }
+# Show links for possible years
+foreach $key (keys %listofyears) {
+       print "<a href=\"$DirCgi$PROG.$Extension?site=$SiteToAnalyze&year=$key&month=year&lang=$Lang\">$message[6][$Lang] $key</a> ";
+}
+print "</TD>";
+print "<TD><b>$message[9][$Lang]</b></TD></TR>";
+
+$yearcon=substr($FirstTime,0,4);$monthcon=substr($FirstTime,4,2);$daycon=substr($FirstTime,6,2);$hourcon=substr($FirstTime,8,2);$mincon=substr($FirstTime,10,2);
+if ($FirstTime != 0) { print "<TR><TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD>"; }
+else { print "<TR><TD>NA</TD>"; }
+$yearcon=substr($LastTime,0,4);$monthcon=substr($LastTime,4,2);$daycon=substr($LastTime,6,2);$hourcon=substr($LastTime,8,2);$mincon=substr($LastTime,10,2);
+if ($LastTime != 0) { print "<TD>$daycon&nbsp;$monthlib{$monthcon}&nbsp;$yearcon&nbsp;-&nbsp;$hourcon:$mincon</TD></TR>"; }
+else { print "<TD>NA</TD></TR>\n"; }
+print "<TR>";
+print "<TD width=20% bgcolor=#$color_v onmouseover=\"ShowTooltip(1);\" onmouseout=\"HideTooltip(1);\">$message[10][$Lang]</TD>";
+print "<TD width=20% bgcolor=#$color_w onmouseover=\"ShowTooltip(2);\" onmouseout=\"HideTooltip(2);\">$message[11][$Lang]</TD>";
+print "<TD width=20% bgcolor=#$color_p onmouseover=\"ShowTooltip(3);\" onmouseout=\"HideTooltip(3);\">$message[56][$Lang]</TD>";
+print "<TD width=20% bgcolor=#$color_h onmouseover=\"ShowTooltip(4);\" onmouseout=\"HideTooltip(4);\">$message[57][$Lang]</TD>";
+print "<TD width=20% bgcolor=#$color_k onmouseover=\"ShowTooltip(5);\" onmouseout=\"HideTooltip(5);\">$message[44][$Lang]</TD></TR>";
+$kilo=int($TotalBytes/1024*100)/100;
+print "<TR><TD><b>$TotalVisits</b><br>&nbsp;</TD><TD><b>$TotalUnique</b><br>($RatioHosts&nbsp;$message[52][$Lang])</TD><TD><b>$TotalPages</b><br>($RatioPages&nbsp;".lc $message[56][$Lang]."/".lc $message[12][$Lang].")</TD>";
+print "<TD><b>$TotalHits</b><br>($RatioHits&nbsp;".lc $message[57][$Lang]."/".lc $message[12][$Lang].")</TD><TD><b>$kilo $message[44][$Lang]</b><br>($RatioBytes&nbsp;$message[44][$Lang]/".lc $message[12][$Lang].")</TD></TR>\n";
+print "<TR valign=bottom><TD colspan=5>";
+print "<TABLE>";
+print "<TR valign=bottom>";
+$max_v=1;$max_p=1;$max_h=1;$max_k=1;
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       if ($MonthVisits{$YearRequired.$monthix} > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; }
+       if ($MonthUnique{$YearRequired.$monthix} > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; }
+       if ($MonthPage{$YearRequired.$monthix} > $max_p)   { $max_p=$MonthPage{$YearRequired.$monthix}; }
+       if ($MonthHits{$YearRequired.$monthix} > $max_h)   { $max_h=$MonthHits{$YearRequired.$monthix}; }
+       if ($MonthBytes{$YearRequired.$monthix} > $max_k)  { $max_k=$MonthBytes{$YearRequired.$monthix}; }
+}
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       $bredde_u=0;$bredde_v=0;$bredde_p=0;$bredde_h=0;$bredde_k=0;
+       if ($max_v > 0) { $bredde_v=$MonthVisits{$YearRequired.$monthix}/$max_v*$BarHeight/2; }
+       if ($max_v > 0) { $bredde_u=$MonthUnique{$YearRequired.$monthix}/$max_v*$BarHeight/2; }
+       if ($max_h > 0) { $bredde_p=$MonthPage{$YearRequired.$monthix}/$max_h*$BarHeight/2; }
+       if ($max_h > 0) { $bredde_h=$MonthHits{$YearRequired.$monthix}/$max_h*$BarHeight/2; }
+       if ($max_k > 0) { $bredde_k=$MonthBytes{$YearRequired.$monthix}/$max_k*$BarHeight/2; }
+       $kilo=int(($MonthBytes{$YearRequired.$monthix}/1024)*100)/100;
+       print "<TD>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=8 ALT=\"$message[10][$Lang]: $MonthVisits{$YearRequired.$monthix}\" title=\"$message[10][$Lang]: $MonthVisits{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_u\" HEIGHT=$bredde_u WIDTH=8 ALT=\"$message[11][$Lang]: $MonthUnique{$YearRequired.$monthix}\" title=\"$message[11][$Lang]: $MonthUnique{$YearRequired.$monthix}\">";
+       print "&nbsp;";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=8 ALT=\"$message[56][$Lang]: $MonthPage{$YearRequired.$monthix}\" title=\"$message[56][$Lang]: $MonthPage{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=8 ALT=\"$message[57][$Lang]: $MonthHits{$YearRequired.$monthix}\" title=\"$message[57][$Lang]: $MonthHits{$YearRequired.$monthix}\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=8 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD>\n";
+}
+print "</TR><TR>";
+for ($ix=1; $ix<=12; $ix++) {
+       $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
+       print "<TD valign=center><a href=\"$DirCgi$PROG.$Extension?site=$SiteToAnalyze&year=$YearRequired&month=$monthix&lang=$Lang\">$monthlib{$monthix}</a></TD>";
+}
+
+print "</TR></TABLE>";
+print "</TD></TR>";
+&tab_end;
+
+print "<br><hr>\n";
+
+# BY COUNTRY/DOMAIN
+#---------------------------
+print "$CENTER<a name=\"DOMAINS\"></a><BR>";
+$tab_titre="$message[25][$Lang]";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH colspan=2>$message[17][$Lang]</TH><TH>Code</TH><TH bgcolor=#$color_p>$message[56][$Lang]</TH><TH bgcolor=#$color_h>$message[57][$Lang]</TH><TH bgcolor=#$color_k>$message[44][$Lang]</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max_h=$_domener_h{$sortdomains_h[0]}; }
+else            { $max_h=$_domener_h{$sortdomains_h[$#sortdomains_h]}; }
+if ($SortDir<0) { $max_k=$_domener_k{$sortdomains_k[0]}; }
+else            { $max_k=$_domener_k{$sortdomains_k[$#sortdomains_k]}; }
+$count=0;$total_p=0;$total_h=0;$total_k=0;
+foreach $key (@sortdomains_p) {
+       $bredde_p=0;$bredde_h=0;$bredde_k=0;
+       if ($max_h > 0) { $bredde_p=$BarWidth*$_domener_p{$key}/$max_h+1; }     # use max_h to enable to compare pages with hits
+       if ($max_h > 0) { $bredde_h=$BarWidth*$_domener_h{$key}/$max_h+1; }
+       if ($max_k > 0) { $bredde_k=$BarWidth*$_domener_k{$key}/$max_k+1; }
+       $kilo=int(($_domener_k{$key}/1024)*100)/100;
+       if ($key eq "ip") {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=LEFT>$message[0][$Lang]</TD><TD>$key</TD>";
        }
-       # TotalDifferentPages (if not already specifically counted, we init it from _url_p hash table)
-       if (!$TotalDifferentPages) { $TotalDifferentPages=scalar keys %_url_p; }
-       # TotalPages TotalHits TotalBytes
-       for (my $ix=0; $ix<=23; $ix++) { $TotalPages+=$_time_p[$ix]; $TotalHits+=$_time_h[$ix]; $TotalBytes+=$_time_k[$ix]; }
-       # TotalErrors
-       foreach my $key (keys %_errors_h) { $TotalErrors+=$_errors_h{$key}; }
-       # Ratio
-       if ($TotalUnique > 0) { $RatioHosts=int($TotalVisits/$TotalUnique*100)/100; }
-       if ($TotalVisits > 0) { $RatioPages=int($TotalPages/$TotalVisits*100)/100; }
-       if ($TotalVisits > 0) { $RatioHits=int($TotalHits/$TotalVisits*100)/100; }
-       if ($TotalVisits > 0) { $RatioBytes=int(($TotalBytes/1024)*100/$TotalVisits)/100; }
-       
-       # SUMMARY
-       #---------------------------------------------------------------------
-       if ($ShowMonthDayStats) {
-               print "$CENTER<a name=\"SUMMARY\">&nbsp;</a><BR>";
-               &tab_head("$Message[7] $SiteToAnalyze",0);
-
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TD><b>$Message[8]</b></TD>";
-               if ($MonthRequired eq "year") { print "<TD colspan=3 rowspan=2><font style=\"font: 18px arial,verdana,helvetica; font-weight: normal\">$Message[6] $YearRequired</font><br>"; }
-               else { print "<TD colspan=3 rowspan=2><font style=\"font: 18px arial,verdana,helvetica; font-weight: normal\">$Message[5] $monthlib{$MonthRequired} $YearRequired</font><br>"; }
-               # Show links for possible years
-               my $NewLinkParams=${QueryString};
-               $NewLinkParams =~ s/update=[^ &]*//;
-               $NewLinkParams =~ s/year=[^ &]*//;
-               $NewLinkParams =~ s/month=[^ &]*//;
-               $NewLinkParams =~ tr/&/&/s; $NewLinkParams =~ s/&$//;
-               if ($NewLinkParams) { $NewLinkParams="${NewLinkParams}&"; }
-               foreach my $key (keys %listofyears) {
-                       print "<a href=\"$DirCgi$PROG.$Extension?${NewLinkParams}year=$key&month=year\">$Message[6] $key</a> &nbsp; ";
-               }
-               print "</TD>";
-               print "<TD><b>$Message[9]</b></TD></TR>\n";
-               
-               if ($FirstTime) { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TD>".Format_Date($FirstTime)."</TD>"; }
-               else { print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TD>NA</TD>"; }
-               if ($LastTime) { print "<TD>".Format_Date($LastTime)."</TD></TR>\n"; }
-               else { print "<TD>NA</TD></TR>\n"; }
-               print "<TR>";
-               print "<TD width=\"20%\" bgcolor=\"#$color_u\" onmouseover=\"ShowTooltip(2);\" onmouseout=\"HideTooltip(2);\">$Message[11]</TD>";
-               print "<TD width=\"20%\" bgcolor=\"#$color_v\" onmouseover=\"ShowTooltip(1);\" onmouseout=\"HideTooltip(1);\">$Message[10]</TD>";
-               print "<TD width=\"20%\" bgcolor=\"#$color_p\" onmouseover=\"ShowTooltip(3);\" onmouseout=\"HideTooltip(3);\">$Message[56]</TD>";
-               print "<TD width=\"20%\" bgcolor=\"#$color_h\" onmouseover=\"ShowTooltip(4);\" onmouseout=\"HideTooltip(4);\">$Message[57]</TD>";
-               print "<TD width=\"20%\" bgcolor=\"#$color_k\" onmouseover=\"ShowTooltip(5);\" onmouseout=\"HideTooltip(5);\">$Message[75]</TD>";
-               print "</TR>\n";
-               print "<TR>";
-               print "<TD>".($MonthRequired eq "year"?"<b>< $TotalUnique</b><br>Exact value not available in 'Year' view":"<b>$TotalUnique</b><br>&nbsp;")."</TD>";
-               print "<TD><b>$TotalVisits</b><br>($RatioHosts&nbsp;$Message[52])</TD>";
-               print "<TD><b>$TotalPages</b><br>($RatioPages&nbsp;".lc($Message[56]."/".$Message[12]).")</TD>";
-               print "<TD><b>$TotalHits</b><br>($RatioHits&nbsp;".lc($Message[57]."/".$Message[12]).")</TD>";
-               print "<TD><b>".Format_Bytes(int($TotalBytes))."</b><br>($RatioBytes&nbsp;$Message[44]/".lc($Message[12]).")</TD>";
-               print "</TR>\n";
-               print "<TR valign=bottom><TD colspan=5 align=center><center>";
-               # Show monthly stats
-               print "<TABLE>";
-               print "<TR valign=bottom>";
-               $max_v=$max_p=$max_h=$max_k=1;
-               for (my $ix=1; $ix<=12; $ix++) {
-                       my $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
-                       #if ($MonthUnique{$YearRequired.$monthix} > $max_v) { $max_v=$MonthUnique{$YearRequired.$monthix}; }
-                       if ($MonthVisits{$YearRequired.$monthix} > $max_v) { $max_v=$MonthVisits{$YearRequired.$monthix}; }
-                       #if ($MonthPages{$YearRequired.$monthix} > $max_p)  { $max_p=$MonthPages{$YearRequired.$monthix}; }
-                       if ($MonthHits{$YearRequired.$monthix} > $max_h)   { $max_h=$MonthHits{$YearRequired.$monthix}; }
-                       if ($MonthBytes{$YearRequired.$monthix} > $max_k)  { $max_k=$MonthBytes{$YearRequired.$monthix}; }
-               }
-               for (my $ix=1; $ix<=12; $ix++) {
-                       my $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
-                       my $bredde_u=0; my $bredde_v=0;my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;
-                       if ($max_v > 0) { $bredde_u=int($MonthUnique{$YearRequired.$monthix}/$max_v*$BarHeight/2)+1; }
-                       if ($max_v > 0) { $bredde_v=int($MonthVisits{$YearRequired.$monthix}/$max_v*$BarHeight/2)+1; }
-                       if ($max_h > 0) { $bredde_p=int($MonthPages{$YearRequired.$monthix}/$max_h*$BarHeight/2)+1; }
-                       if ($max_h > 0) { $bredde_h=int($MonthHits{$YearRequired.$monthix}/$max_h*$BarHeight/2)+1; }
-                       if ($max_k > 0) { $bredde_k=int($MonthBytes{$YearRequired.$monthix}/$max_k*$BarHeight/2)+1; }
-                       print "<TD>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_u\" HEIGHT=$bredde_u WIDTH=8 ALT=\"$Message[11]: $MonthUnique{$YearRequired.$monthix}\" title=\"$Message[11]: $MonthUnique{$YearRequired.$monthix}\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=8 ALT=\"$Message[10]: $MonthVisits{$YearRequired.$monthix}\" title=\"$Message[10]: $MonthVisits{$YearRequired.$monthix}\">";
-                       print "&nbsp;";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=8 ALT=\"$Message[56]: $MonthPages{$YearRequired.$monthix}\" title=\"$Message[56]: $MonthPages{$YearRequired.$monthix}\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=8 ALT=\"$Message[57]: $MonthHits{$YearRequired.$monthix}\" title=\"$Message[57]: $MonthHits{$YearRequired.$monthix}\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=8 ALT=\"$Message[75]: ".Format_Bytes($MonthBytes{$YearRequired.$monthix})."\" title=\"$Message[75]: ".Format_Bytes($MonthBytes{$YearRequired.$monthix})."\">";
-                       print "</TD>\n";
-               }
-               print "</TR>\n";
-               print "<TR>";
-               for (my $ix=1; $ix<=12; $ix++) {
-                       my $monthix=$ix; if ($monthix < 10) { $monthix="0$monthix"; }
-                       print "<TD valign=middle><a href=\"$DirCgi$PROG.$Extension?${NewLinkParams}year=$YearRequired&month=$monthix\">$monthlib{$monthix}</a></TD>\n";
-               }
-               print "</TR>\n";
-               print "</TABLE>\n<br>\n";
-               # Show daily stats
-               print "<TABLE>";
-               print "<TR valign=bottom>";
-               $max_v=$max_h=$max_k=1;
-               my $lastdaytoshowtime=$nowyear.$nowmonth.$nowday;                               # Set day cursor to today
-               if (($MonthRequired ne $nowmonth && $MonthRequired ne "year") || $YearRequired ne $nowyear) { 
-                       if ($MonthRequired eq "year") {
-                               $lastdaytoshowtime=$YearRequired."1231";                                # Set day cursor to last day of the required year
-                       }
-                       else {
-                               $lastdaytoshowtime=$YearRequired.$MonthRequired."31";   # Set day cursor to last day of the required month
+       else {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=LEFT>$DomainsHash{$key}</TD><TD>$key</TD>";
+       }
+       print "<TD>$_domener_p{$key}</TD><TD>$_domener_h{$key}</TD><TD>$kilo</TD>";
+       print "<TD CLASS=LEFT>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$message[56][$Lang]: $_domener_p{$key}\" title=\"$message[56][$Lang]: $_domener_p{$key}\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$message[57][$Lang]: $_domener_h{$key}\" title=\"$message[57][$Lang]: $_domener_h{$key}\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD></TR>\n";
+       $total_p += $_domener_p{$key};
+       $total_h += $_domener_h{$key};
+       $total_k += $_domener_k{$key};
+       $count++;
+       if ($count >= $MaxNbOfDomain) { last; }
+}
+$rest_p=$TotalPages-$total_p;
+$rest_h=$TotalHits-$total_h;
+$rest_k=$TotalBytes-$total_k;
+if ($rest_p > 0) {     # All other domains (known or not)
+       $bredde_p=0;$bredde_h=0;$bredde_k=0;
+       if ($max_h > 0) { $bredde_p=$BarWidth*$rest_p/$max_h+1; }       # use max_h to enable to compare pages with hits
+       if ($max_h > 0) { $bredde_h=$BarWidth*$rest_h/$max_h+1; }
+       if ($max_k > 0) { $bredde_k=$BarWidth*$rest_k/$max_k+1; }
+       $kilo=int(($rest_k{$key}/1024)*100)/100;
+       print "<TR><TD colspan=3 CLASS=LEFT><font color=blue>$message[2][$Lang]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>$rest_k</TD>\n";
+       print "<TD CLASS=LEFT>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$message[56][$Lang]: $rest_p\" title=\"$message[56][$Lang]: $rest_p\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$message[57][$Lang]: $rest_h\" title=\"$message[57][$Lang]: $rest_h\"><br>\n";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $rest_k\">";
+       print "</TD></TR>\n";
+       }
+&tab_end;
+
+
+# BY HOST/VISITOR
+#--------------------------
+print "$CENTER<a name=\"VISITOR\"></a><BR>";
+$tab_titre="TOP $MaxNbOfHostsShown $message[55][$Lang] $TotalHosts $message[26][$Lang] ($TotalUnique $message[11][$Lang])";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH>$message[18][$Lang]</TH><TH bgcolor=#$color_p>$message[56][$Lang]</TH><TH bgcolor=#$color_h>$message[57][$Lang]</TH><TH bgcolor=#$color_k>$message[44][$Lang]</TH><TH>$message[9][$Lang]</TH></TR>\n";
+$count=0;$total_p=0;$total_h=0;$total_k=0;
+foreach $key (@sorthosts_p)
+{
+       if ($_hostmachine_h{$key}>=$MinHitHost) {
+               $kilo=int(($_hostmachine_k{$key}/1024)*100)/100;
+               if ($key eq "Unknown") {
+                       print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownip&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[1][$Lang]</a></TD><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD><TD><a href=\"$DirCgi$PROG.$Extension?action=unknownip&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[3][$Lang]</a></TD></TR>\n";
                        }
-               }
-               my $firstdaytoshowtime=$lastdaytoshowtime;
-               # Get max_v, max_h and max_k values
-               my $nbofdaysshown=0;
-               for (my $daycursor=$lastdaytoshowtime; $nbofdaysshown<$MaxNbOfDays; $daycursor--) {
-                       $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/;
-                       my $year=$1; my $month=$2; my $day=$3;
-                       if (! DateIsValid($day,$month,$year)) { next; }                 # If not an existing day, go to next
-                       $nbofdaysshown++;
-                       $firstdaytoshowtime=$year.$month.$day;
-                       if (($DayVisits{$year.$month.$day}||0) > $max_v)  { $max_v=$DayVisits{$year.$month.$day}; }
-                       #if (($DayPages{$year.$month.$day}||0) > $max_p)  { $max_p=$DayPages{$year.$month.$day}; }
-                       if (($DayHits{$year.$month.$day}||0) > $max_h)   { $max_h=$DayHits{$year.$month.$day}; }
-                       if (($DayBytes{$year.$month.$day}||0) > $max_k)  { $max_k=$DayBytes{$year.$month.$day}; }
-               }
-               $nbofdaysshown=0;
-               for (my $daycursor=$firstdaytoshowtime; $nbofdaysshown<$MaxNbOfDays; $daycursor++) {
-                       $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/;
-                       my $year=$1; my $month=$2; my $day=$3;
-                       if (! DateIsValid($day,$month,$year)) { next; }                 # If not an existing day, go to next
-                       $nbofdaysshown++;
-                       my $bredde_v=0; my $bredde_p=0; my $bredde_h=0; my $bredde_k=0;
-                       if ($max_v > 0) { $bredde_v=int(($DayVisits{$year.$month.$day}||0)/$max_v*$BarHeight/2)+1; }
-                       if ($max_h > 0) { $bredde_p=int(($DayPages{$year.$month.$day}||0)/$max_h*$BarHeight/2)+1; }
-                       if ($max_h > 0) { $bredde_h=int(($DayHits{$year.$month.$day}||0)/$max_h*$BarHeight/2)+1; }
-                       if ($max_k > 0) { $bredde_k=int(($DayBytes{$year.$month.$day}||0)/$max_k*$BarHeight/2)+1; }
-                       print "<TD>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=4 ALT=\"$Message[10]: ".int($DayVisits{$year.$month.$day}||0)."\" title=\"$Message[10]: ".int($DayVisits{$year.$month.$day}||0)."\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=4 ALT=\"$Message[56]: ".int($DayPages{$year.$month.$day}||0)."\" title=\"$Message[56]: ".int($DayPages{$year.$month.$day}||0)."\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=4 ALT=\"$Message[57]: ".int($DayHits{$year.$month.$day}||0)."\" title=\"$Message[57]: ".int($DayHits{$year.$month.$day}||0)."\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=4 ALT=\"$Message[75]: ".Format_Bytes($DayBytes{$year.$month.$day})."\" title=\"$Message[75]: ".Format_Bytes($DayBytes{$year.$month.$day})."\">";
-                       print "</TD>\n";
-               }
-               print "<TD> &nbsp; </TD>";
-               # Calculate average values
-               my $avg_day_nb=0; my $avg_day_v=0; my $avg_day_p=0; my $avg_day_h=0; my $avg_day_k=0;
-               my $FirstTimeDay=$FirstTime;
-               my $LastTimeDay=$LastTime;
-               $FirstTimeDay =~ /^(\d\d\d\d\d\d\d\d).*/; $FirstTimeDay=$1;
-               $LastTimeDay =~ /^(\d\d\d\d\d\d\d\d).*/; $LastTimeDay=$1;
-               foreach my $daycursor ($FirstTimeDay..$LastTimeDay) {
-                       $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/;
-                       my $year=$1; my $month=$2; my $day=$3;
-                       if (! DateIsValid($day,$month,$year)) { next; }                 # If not an existing day, go to next
-                       $avg_day_nb++;                                                                                  # Increase number of day used to count
-                       $avg_day_v+=($DayVisits{$daycursor}||0);
-                       $avg_day_p+=($DayPages{$daycursor}||0);
-                       $avg_day_h+=($DayHits{$daycursor}||0);
-                       $avg_day_k+=($DayBytes{$daycursor}||0);
-               }
-               if ($avg_day_nb) {
-                       $avg_day_v=sprintf("%.2f",$avg_day_v/$avg_day_nb);
-                       $avg_day_p=sprintf("%.2f",$avg_day_p/$avg_day_nb);
-                       $avg_day_h=sprintf("%.2f",$avg_day_h/$avg_day_nb);
-                       $avg_day_k=sprintf("%.2f",$avg_day_k/$avg_day_nb);
-               }
                else {
-                       $avg_day_v="?";
-                       $avg_day_p="?";
-                       $avg_day_h="?";
-                       $avg_day_k="?";
-               }
-               # Show average values
-               print "<TD>";
-               my $bredde_v=0; my $bredde_p=0; my $bredde_h=0; my $bredde_k=0;
-               if ($max_v > 0) { $bredde_v=int($avg_day_v/$max_v*$BarHeight/2)+1; }
-               if ($max_h > 0) { $bredde_p=int($avg_day_p/$max_h*$BarHeight/2)+1; }
-               if ($max_h > 0) { $bredde_h=int($avg_day_h/$max_h*$BarHeight/2)+1; }
-               if ($max_k > 0) { $bredde_k=int($avg_day_k/$max_k*$BarHeight/2)+1; }
-               print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_v\" HEIGHT=$bredde_v WIDTH=4 ALT=\"$Message[10]: $avg_day_v\" title=\"$Message[10]: $avg_day_v\">";
-               print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=4 ALT=\"$Message[56]: $avg_day_p\" title=\"$Message[56]: $avg_day_p\">";
-               print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=4 ALT=\"$Message[57]: $avg_day_h\" title=\"$Message[57]: $avg_day_h\">";
-               print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=4 ALT=\"$Message[75]: ".Format_Bytes($avg_day_k)."\" title=\"$Message[75]: ".Format_Bytes($avg_day_k)."\">";
-               print "</TD>\n";
-               print "</TR>\n";
-               print "<TR>";
-               $nbofdaysshown=0;
-               for (my $daycursor=$firstdaytoshowtime; $nbofdaysshown<$MaxNbOfDays; $daycursor++) {
-                       $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/;
-                       my $year=$1; my $month=$2; my $day=$3;
-                       if (! DateIsValid($day,$month,$year)) { next; }                 # If not an existing day, go to next
-                       $nbofdaysshown++;
-                       my $dayofweekcursor=DayOfWeek($day,$month,$year);
-                       print "<TD valign=middle".($dayofweekcursor==0||$dayofweekcursor==6?" bgcolor=\"#$color_weekend\"":"").">";
-                       print ($day==$nowday && $month==$nowmonth?"<b>":"");
-                       print "$day<br><font style=\"font: 10px;\">".$monthlib{$month}."</font>";
-                       print ($day==$nowday && $month==$nowmonth?"</b></TD>":"</TD>\n");
-               }
-               print "<TD> &nbsp; </TD>";
-               print "<TD valign=middle onmouseover=\"ShowTooltip(18);\" onmouseout=\"HideTooltip(18);\">$Message[96]</TD>\n";
-               print "</TR>\n";
-               print "</TABLE>\n<br>\n";
-               
-               print "</center></TD></TR>\n";
-               &tab_end;
-       }       
-
-       # BY DAY OF WEEK
-       #-------------------------
-       if ($ShowDaysOfWeekStats) {
-               print "$CENTER<a name=\"DAYOFWEEK\">&nbsp;</a><BR>";
-               &tab_head($Message[91],18);
-               print "<TR>";
-               print "<TD align=center><center><TABLE>";
-               print "<TR valign=bottom>\n";
-               $max_h=$max_k=$max_v=1;
-               # Get average value for day of week
-               my $FirstTimeDay=$FirstTime;
-               my $LastTimeDay=$LastTime;
-               $FirstTimeDay =~ /^(\d\d\d\d\d\d\d\d).*/; $FirstTimeDay=$1;
-               $LastTimeDay =~ /^(\d\d\d\d\d\d\d\d).*/; $LastTimeDay=$1;
-               foreach my $daycursor ($FirstTimeDay..$LastTimeDay) {
-                       $daycursor =~ /^(\d\d\d\d)(\d\d)(\d\d)/;
-                       my $year=$1; my $month=$2; my $day=$3;
-                       if (! DateIsValid($day,$month,$year)) { next; }                 # If not an existing day, go to next
-                       my $dayofweekcursor=DayOfWeek($day,$month,$year);
-                       $avg_dayofweek[$dayofweekcursor]++;                                             # Increase number of day used to count for this day of week
-                       $avg_dayofweek_p[$dayofweekcursor]+=($DayPages{$daycursor}||0);
-                       $avg_dayofweek_h[$dayofweekcursor]+=($DayHits{$daycursor}||0);
-                       $avg_dayofweek_k[$dayofweekcursor]+=($DayBytes{$daycursor}||0);
-               }
-               for (0..6) {
-                       if ($avg_dayofweek[$_]) { 
-                               $avg_dayofweek_p[$_]=sprintf("%.2f",$avg_dayofweek_p[$_]/$avg_dayofweek[$_]);
-                               $avg_dayofweek_h[$_]=sprintf("%.2f",$avg_dayofweek_h[$_]/$avg_dayofweek[$_]);
-                               $avg_dayofweek_k[$_]=sprintf("%.2f",$avg_dayofweek_k[$_]/$avg_dayofweek[$_]);
-                               #if ($avg_dayofweek_p[$_] > $max_p) { $max_p = $avg_dayofweek_p[$_]; }
-                               if ($avg_dayofweek_h[$_] > $max_h) { $max_h = $avg_dayofweek_h[$_]; }
-                               if ($avg_dayofweek_k[$_] > $max_k) { $max_k = $avg_dayofweek_k[$_]; }
+                       $yearcon=substr($_hostmachine_l{$key},0,4);
+                       $monthcon=substr($_hostmachine_l{$key},4,2);
+                       $daycon=substr($_hostmachine_l{$key},6,2);
+                       $hourcon=substr($_hostmachine_l{$key},8,2);
+                       $mincon=substr($_hostmachine_l{$key},10,2);
+                       print "<tr><td CLASS=LEFT>$key</td><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>$kilo</TD>";
+                       if ($daycon ne "") {
+                               if ($Lang != 0) { print "<td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+                               else { print "<td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
                        }
                        else {
-                               $avg_dayofweek_p[$_]="?";
-                               $avg_dayofweek_h[$_]="?";
-                               $avg_dayofweek_k[$_]="?";
+                               print "<td>-</td>";
                        }
-        }
-        for (@DOWIndex) {
-                       if ($max_h > 0) { $bredde_p=int($avg_dayofweek_p[$_]/$max_h*$BarHeight/2)+1; }
-                       if ($max_h > 0) { $bredde_h=int($avg_dayofweek_h[$_]/$max_h*$BarHeight/2)+1; }
-                       if ($max_k > 0) { $bredde_k=int($avg_dayofweek_k[$_]/$max_k*$BarHeight/2)+1; }
-                       print "<TD valign=bottom>\n";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=6 ALT=\"$Message[56]: $avg_dayofweek_p[$_]\" title=\"$Message[56]: $avg_dayofweek_p[$_]\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"$Message[57]: $avg_dayofweek_h[$_]\" title=\"$Message[57]: $avg_dayofweek_h[$_]\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$Message[75]: ".Format_Bytes($avg_dayofweek_k[$_])."\" title=\"$Message[75]: ".Format_Bytes($avg_dayofweek_k[$_])."\">";
-                       print "</TD>\n";
-        }
-        print "</TR>\n<TR onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">\n";
-        for (@DOWIndex) {
-                       print "<TD";
-                       if ($_ =~ /[06]/) { print " bgcolor=\"#$color_weekend\""; }
-                       print ">".$Message[$_+84]."</TD>";
-        }
-               print "</TR></TABLE></center></TD>";
-               print "</TR>\n";
-               &tab_end;
-       }
-       
-       # BY HOUR
-       #----------------------------
-       if ($ShowHoursStats) {
-               print "$CENTER<a name=\"HOUR\">&nbsp;</a><BR>";
-               &tab_head($Message[20],19);
-               print "<TR><TD align=center><center><TABLE><TR>\n";
-               $max_h=$max_k=1;
-               for (my $ix=0; $ix<=23; $ix++) {
-                 print "<TH width=16 onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\">$ix</TH>\n";
-                 #if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; }
-                 if ($_time_h[$ix]>$max_h) { $max_h=$_time_h[$ix]; }
-                 if ($_time_k[$ix]>$max_k) { $max_k=$_time_k[$ix]; }
                }
-               print "</TR>\n";
-               print "<TR>\n";
-               for (my $ix=1; $ix<=24; $ix++) {
-                       my $hr=$ix; if ($hr>12) { $hr=$hr-12; }
-                       print "<TH onmouseover=\"ShowTooltip(17);\" onmouseout=\"HideTooltip(17);\"><IMG SRC=\"$DirIcons\/clock\/hr$hr.png\" width=10></TH>\n";
-               }
-               print "</TR>\n";
-               print "\n<TR VALIGN=BOTTOM>\n";
-               for (my $ix=0; $ix<=23; $ix++) {
-                       my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;
-                       if ($max_h > 0) { $bredde_p=int($BarHeight*$_time_p[$ix]/$max_h)+1; }
-                       if ($max_h > 0) { $bredde_h=int($BarHeight*$_time_h[$ix]/$max_h)+1; }
-                       if ($max_k > 0) { $bredde_k=int($BarHeight*$_time_k[$ix]/$max_k)+1; }
-                       print "<TD>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=6 ALT=\"$Message[56]: ".int($_time_p[$ix])."\" title=\"$Message[56]: ".int($_time_p[$ix])."\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"$Message[57]: ".int($_time_h[$ix])."\" title=\"$Message[57]: ".int($_time_h[$ix])."\">";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$Message[75]: ".Format_Bytes($_time_k[$ix])."\" title=\"$Message[75]: ".Format_Bytes($_time_k[$ix])."\">";
-                       print "</TD>\n";
-               }
-               print "</TR></TABLE></center></TD></TR>\n";
-               &tab_end;
+               $total_p += $_hostmachine_p{$key};
+               $total_h += $_hostmachine_h{$key};
+               $total_k += $_hostmachine_k{$key};
        }
+       $count++;
+       if (!(($SortDir<0 && $count<$MaxNbOfHostsShown) || ($SortDir>0 && $#sorthosts_p-$MaxNbOfHostsShown < $count))) { last; }
+}
+$rest_p=$TotalPages-$total_p;
+$rest_h=$TotalHits-$total_h;
+$rest_k=int((($TotalBytes-$total_k)/1024)*100)/100;
+if ($rest_p > 0) { print "<TR><TD CLASS=LEFT><font color=blue>$message[2][$Lang]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>$rest_k</TD><TD>&nbsp;</TD></TR>\n"; } # All other visitors (known or not)
+&tab_end;
+
+
+# BY ROBOTS
+#----------------------------
+print "$CENTER<a name=\"ROBOTS\"></a><BR>";
+$tab_titre=$message[53][$Lang];
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle onmouseover=\"ShowTooltip(16);\" onmouseout=\"HideTooltip(16);\"><TH>Robot</TH><TH bgcolor=#$color_h width=80>$message[57][$Lang]</TH><TH>$message[9][$Lang]</TH></TR>\n";
+@sortrobot=sort { $SortDir*$_robot_h{$a} <=> $SortDir*$_robot_h{$b} } keys (%_robot_h);
+foreach $key (@sortrobot) {
+       $yearcon=substr($_robot_l{$key},0,4);
+       $monthcon=substr($_robot_l{$key},4,2);
+       $daycon=substr($_robot_l{$key},6,2);
+       $hourcon=substr($_robot_l{$key},8,2);
+       $mincon=substr($_robot_l{$key},10,2);
+       if ($Lang != 0) { print "<tr><td CLASS=LEFT>$RobotHash{$key}</td><td>$_robot_h{$key}</td><td>$daycon/$monthcon/$yearcon - $hourcon:$mincon</td></tr>"; }
+       else { print "<tr><td CLASS=LEFT>$RobotHash{$key}</td><td>$_robot_h{$key}</td><td>$daycon $monthlib{$monthcon} $yearcon - $hourcon:$mincon</td></tr>"; }
+}
+&tab_end;
+
+
+# BY HOUR
+#----------------------------
+print "$CENTER<a name=\"HOUR\"></a><BR>";
+$tab_titre="$message[20][$Lang]";
+&tab_head;
+print "<TR><TD><TABLE><TR>\n";
+$max_p=0;$max_h=0;$max_k=0;
+for ($ix=0; $ix<=23; $ix++) {
+  print "<TH width=16>$ix</TH>";
+  if ($_time_p[$ix]>$max_p) { $max_p=$_time_p[$ix]; }
+  if ($_time_h[$ix]>$max_h) { $max_h=$_time_h[$ix]; }
+  if ($_time_k[$ix]>$max_k) { $max_k=$_time_k[$ix]; }
+}
+print "</TR>\n";
+print "<TR>\n";
+for ($ix=1; $ix<=24; $ix++) {
+       $hr=$ix; if ($hr>12) { $hr=$hr-12; }
+       print "<TH><IMG SRC=\"$DirIcons\/clock\/hr$hr.png\" width=10></TH>";
+}
+print "</TR>\n";
+print "\n<TR VALIGN=BOTTOM>\n";
+for ($ix=0; $ix<=23; $ix++) {
+       $bredde_p=0;$bredde_h=0;$bredde_k=0;
+       if ($max_h > 0) { $bredde_p=($BarHeight*$_time_p[$ix]/$max_h)+1; }
+       if ($max_h > 0) { $bredde_h=($BarHeight*$_time_h[$ix]/$max_h)+1; }
+       if ($max_k > 0) { $bredde_k=($BarHeight*$_time_k[$ix]/$max_k)+1; }
+       $kilo=int(($_time_k[$ix]/1024)*100)/100;
+       print "<TD>";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_p\" HEIGHT=$bredde_p WIDTH=6 ALT=\"$message[56][$Lang]: $_time_p[$ix]\" title=\"$message[56][$Lang]: $_time_p[$ix]\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_h\" HEIGHT=$bredde_h WIDTH=6 ALT=\"$message[57][$Lang]: $_time_h[$ix]\" title=\"$message[57][$Lang]: $_time_h[$ix]\">";
+       print "<IMG SRC=\"$DirIcons\/other\/$BarImageVertical_k\" HEIGHT=$bredde_k WIDTH=6 ALT=\"$message[44][$Lang]: $kilo\" title=\"$message[44][$Lang]: $kilo\">";
+       print "</TD>\n";
+}
+print "</TR></TABLE></TD></TR>\n";
+&tab_end;
+
+
+# BY PAGE
+#-------------------------
+print "$CENTER<a name=\"PAGE\"></a><BR>";
+$tab_titre="TOP $MaxNbOfPageShown $message[55][$Lang] $TotalDifferentPages $message[27][$Lang]";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH>Page-URL</TH><TH bgcolor=#$color_p>&nbsp;$message[29][$Lang]&nbsp;</TH><TH>&nbsp;</TH></TR>\n";
+if ($SortDir<0) { $max=$_sider_p{$sortsiders[0]}; }
+else            { $max=$_sider_p{$sortsiders[$#sortsiders]}; }
+$count=0;
+foreach $key (@sortsiders) {
+       if ((($SortDir<0 && $count<$MaxNbOfPageShown) || ($SortDir>0 && $#sortsiders-$MaxNbOfPageShown<$count)) && $_sider_p{$key}>=$MinHitFile) {
+       print "<TR><TD CLASS=LEFT>";
+               $nompage=$Aliases{$key};
+               if ($nompage eq "") { $nompage=$key; }
+               $nompage=substr($nompage,0,$MaxLengthOfURL);
+           if ($ShowLinksOnUrl) { print "<A HREF=\"http://$SiteToAnalyze$key\">$nompage</A>"; }
+           else                 { print "$nompage"; }
+           $bredde=$BarWidth*$_sider_p{$key}/$max+1;
+               print "</TD><TD>$_sider_p{$key}</TD><TD CLASS=LEFT><IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde HEIGHT=8 ALT=\"$message[56][$Lang]: $_sider_p{$key}\" title=\"$message[56][$Lang]: $_sider_p{$key}\"></TD></TR>\n";
+       }
+       $count++;
+}
+&tab_end;
 
-       # BY COUNTRY/DOMAIN
-       #---------------------------
-       if ($ShowDomainsStats) {
-               my @sortdomains_p=sort { $SortDir*$_domener_p{$a} <=> $SortDir*$_domener_p{$b} } keys (%_domener_p);
-               print "$CENTER<a name=\"DOMAINS\">&nbsp;</a><BR>";
-               &tab_head($Message[25],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH colspan=2>$Message[17]</TH><TH>$Message[105]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[56]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_k\" width=80>$Message[75]</TH><TH>&nbsp;</TH></TR>\n";
-               $total_p=$total_h=$total_k=0;
-               $max_h=1; foreach my $key (values %_domener_h) { if ($key > $max_h) { $max_h = $key; } }
-               $max_k=1; foreach my $key (values %_domener_k) { if ($key > $max_k) { $max_k = $key; } }
-               $count=0; $rest_p=0;
-               foreach my $key (@sortdomains_p) {
-                       if ($count >= $MaxNbOfDomain) { last; }
-                       my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;
-                       if ($max_h > 0) { $bredde_p=int($BarWidth*$_domener_p{$key}/$max_h)+1; }        # use max_h to enable to compare pages with hits
-                       if ($_domener_p{$key} && $bredde_p==1) { $bredde_p=2; }
-                       if ($max_h > 0) { $bredde_h=int($BarWidth*$_domener_h{$key}/$max_h)+1; }
-                       if ($_domener_h{$key} && $bredde_h==1) { $bredde_h=2; }
-                       if ($max_k > 0) { $bredde_k=int($BarWidth*$_domener_k{$key}/$max_k)+1; }
-                       if ($_domener_k{$key} && $bredde_k==1) { $bredde_k=2; }
-                       if ($key eq "ip") {
-                               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=AWL>$Message[0]</TD><TD>$key</TD>";
-                       }
-                       else {
-                               print "<TR><TD><IMG SRC=\"$DirIcons\/flags\/$key.png\" height=14></TD><TD CLASS=AWL>$DomainsHashIDLib{$key}</TD><TD>$key</TD>";
-                       }
-                       print "<TD>$_domener_p{$key}</TD><TD>$_domener_h{$key}</TD><TD>".Format_Bytes($_domener_k{$key})."</TD>";
-                       print "<TD CLASS=AWL>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$Message[56]: ".int($_domener_p{$key})."\" title=\"$Message[56]: ".int($_domener_p{$key})."\"><br>\n";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$Message[57]: ".int($_domener_h{$key})."\" title=\"$Message[57]: ".int($_domener_h{$key})."\"><br>\n";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$Message[75]: ".Format_Bytes($_domener_k{$key})."\" title=\"$Message[75]: ".Format_Bytes($_domener_k{$key})."\">";
-                       print "</TD></TR>\n";
-                       $total_p += $_domener_p{$key};
-                       $total_h += $_domener_h{$key};
-                       $total_k += $_domener_k{$key};
-                       $count++;
-               }
-               $rest_p=$TotalPages-$total_p;
-               $rest_h=$TotalHits-$total_h;
-               $rest_k=$TotalBytes-$total_k;
-               if ($rest_p > 0) {      # All other domains (known or not)
-                       my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;
-                       if ($max_h > 0) { $bredde_p=int($BarWidth*$rest_p/$max_h)+1; }  # use max_h to enable to compare pages with hits
-                       if ($rest_p && $bredde_p==1) { $bredde_p=2; }
-                       if ($max_h > 0) { $bredde_h=int($BarWidth*$rest_h/$max_h)+1; }
-                       if ($rest_h && $bredde_h==1) { $bredde_h=2; }
-                       if ($max_k > 0) { $bredde_k=int($BarWidth*$rest_k/$max_k)+1; }
-                       if ($rest_k && $bredde_k==1) { $bredde_k=2; }
-                       print "<TR><TD colspan=3 CLASS=AWL><font color=blue>$Message[2]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>".Format_Bytes($rest_k)."</TD>\n";
-                       print "<TD CLASS=AWL>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$Message[56]: ".int($rest_p)."\" title=\"$Message[56]: ".int($rest_p)."\"><br>\n";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$Message[57]: ".int($rest_h)."\" title=\"$Message[57]: ".int($rest_h)."\"><br>\n";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$Message[75]: ".Format_Bytes($rest_k)."\" title=\"$Message[75]: ".Format_Bytes($rest_k)."\">";
-                       print "</TD></TR>\n";
-               }
-               &tab_end;
+
+# BY BROWSER
+#----------------------------
+print "$CENTER<a name=\"BROWSER\"></a><BR>";
+$tab_titre="$message[21][$Lang]";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH>Browser</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortbrowsers) {
+       $p=int($_browser_h{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownrefererbrowser&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
        }
-       
-       # BY HOST/VISITOR
-       #--------------------------
-       if ($ShowHostsStats) {
-               print "$CENTER<a name=\"VISITOR\">&nbsp;</a><BR>";
-               $MaxNbOfHostsShown = $TotalHostsKnown+($_hostmachine_h{"Unknown"}?1:0) if $MaxNbOfHostsShown > $TotalHostsKnown;
-               &tab_head("$Message[81] ($Message[77] $MaxNbOfHostsShown) &nbsp; - &nbsp; <a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=lasthosts\">$Message[9]</a>",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[81] : $TotalHostsKnown $Message[82], $TotalHostsUnknown $Message[1] - $TotalUnique $Message[11]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[56]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_k\" width=80>$Message[75]</TH><TH width=120>$Message[9]</TH></TR>\n";
-               $total_p=$total_h=$total_k=0;
-               $count=0;
-               foreach my $key (sort { $SortDir*$_hostmachine_p{$a} <=> $SortDir*$_hostmachine_p{$b} } keys (%_hostmachine_p)) {
-                       if ($count>=$MaxNbOfHostsShown) { last; }
-                       if ($_hostmachine_h{$key}<$MinHitHost) { last; }
-                       if ($key eq "Unknown") {
-                               print "<TR><TD CLASS=AWL><a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=unknownip\">$Message[1]</a></TD><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>".Format_Bytes($_hostmachine_k{$key})."</TD><TD><a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=unknownip\">$Message[3]</a></TD></TR>\n";
-                               }
-                       else {
-                               print "<tr><td CLASS=AWL>$key</td><TD>$_hostmachine_p{$key}</TD><TD>$_hostmachine_h{$key}</TD><TD>".Format_Bytes($_hostmachine_k{$key})."</TD>";
-                               if ($_hostmachine_l{$key}) { print "<td>".Format_Date($_hostmachine_l{$key})."</td>"; }
-                               else { print "<td>-</td>"; }
-                               print "</tr>\n";
-                       }
-                       $total_p += $_hostmachine_p{$key};
-                       $total_h += $_hostmachine_h{$key};
-                       $total_k += $_hostmachine_k{$key};
-                       $count++;
-               }
-               $rest_p=$TotalPages-$total_p;
-               $rest_h=$TotalHits-$total_h;
-               $rest_k=$TotalBytes-$total_k;
-               if ($rest_p > 0) {      # All other visitors (known or not)
-                       print "<TR><TD CLASS=AWL><font color=blue>$Message[2]</font></TD><TD>$rest_p</TD><TD>$rest_h</TD><TD>".Format_Bytes($rest_k)."</TD><TD>&nbsp;</TD></TR>\n";
-               }
-               &tab_end;
-       }       
-       
-       # BY LOGIN
-       #----------------------------
-       if ($ShowAuthenticatedUsers) {
-               my @sortlogin_h=sort { $SortDir*$_login_h{$a} <=> $SortDir*$_login_h{$b} } keys (%_login_h);
-               print "$CENTER<a name=\"LOGIN\">&nbsp;</a><BR>";
-               &tab_head($Message[94],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[94]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[56]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_k\" width=80>$Message[75]</TH><TH width=120>$Message[9]</TH></TR>\n";
-               $total_p=$total_h=$total_k=0;
-               $max_h=1; foreach my $key (values %_login_h) { if ($key > $max_h) { $max_h = $key; } }
-               $max_k=1; foreach my $key (values %_login_k) { if ($key > $max_k) { $max_k = $key; } }
-               $count=0; $rest_p=0;
-               foreach my $key (@sortlogin_h) {
-                       if ($count >= $MaxNbOfLoginShown) { last; }
-                       my $bredde_p=0;my $bredde_h=0;my $bredde_k=0;
-                       if ($max_h > 0) { $bredde_p=int($BarWidth*$_login_p{$key}/$max_h)+1; }  # use max_h to enable to compare pages with hits
-                       if ($max_h > 0) { $bredde_h=int($BarWidth*$_login_h{$key}/$max_h)+1; }
-                       if ($max_k > 0) { $bredde_k=int($BarWidth*$_login_k{$key}/$max_k)+1; }
-                       print "<TR><TD CLASS=AWL>$key</TD>";
-                       print "<TD>$_login_p{$key}</TD><TD>$_login_h{$key}</TD><TD>".Format_Bytes($_login_k{$key})."</TD>";
-                       if ($_login_l{$key}) { print "<td>".Format_Date($_login_l{$key})."</td>"; }
-                       else { print "<td>-</td>"; }
-#                      print "<TD CLASS=AWL>";
-#                      print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=6 ALT=\"$Message[56]: $_login_p{$key}\" title=\"$Message[56]: $_login_p{$key}\"><br>\n";
-#                      print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_h\" WIDTH=$bredde_h HEIGHT=6 ALT=\"$Message[57]: $_login_h{$key}\" title=\"$Message[57]: $_login_h{$key}\"><br>\n";
-#                      print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_k\" WIDTH=$bredde_k HEIGHT=6 ALT=\"$Message[75]: ".Format_Bytes($_login_k{$key})."\" title=\"$Message[75]: ".Format_Bytes($_login_k{$key})."\">";
-#                      print "</TD>";
-                       print "</TR>\n";
-                       $total_p += $_login_p{$key};
-                       $total_h += $_login_h{$key};
-                       $total_k += $_login_k{$key};
-                       $count++;
-               }
-               &tab_end;
-       }       
-       
-       # BY ROBOTS
-       #----------------------------
-       if ($ShowRobotsStats) {
-               print "$CENTER<a name=\"ROBOTS\">&nbsp;</a><BR>";
-               &tab_head($Message[53],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\" onmouseover=\"ShowTooltip(16);\" onmouseout=\"HideTooltip(16);\"><TH>$Message[83]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH width=120>$Message[9]</TH></TR>\n";
-               my $count=0;
-               foreach my $key (sort { $SortDir*$_robot_h{$a} <=> $SortDir*$_robot_h{$b} } keys (%_robot_h)) {
-                       print "<tr><td CLASS=AWL>$RobotHashIDLib{$key}</td><td>$_robot_h{$key}</td><td>".Format_Date($_robot_l{$key})."</td></tr>\n";
-                       $count++;
-                       }
-               &tab_end;
-       }       
-               
-       # BY PAGE
-       #-------------------------
-       if ($ShowPagesStats) {
-               print "$CENTER<a name=\"PAGE\">&nbsp;</a><a name=\"ENTRY\">&nbsp;</a><BR>";
-               $MaxNbOfPageShown = $TotalDifferentPages if $MaxNbOfPageShown > $TotalDifferentPages;
-               &tab_head("$Message[19] ($Message[77] $MaxNbOfPageShown) &nbsp; - &nbsp; <a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=urldetail\">$Message[80]</a>",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$TotalDifferentPages $Message[28]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[29]</TH><TH bgcolor=\"#$color_s\" width=80>$Message[104]</TH><TH>&nbsp;</TH></TR>\n";
-               $max_p=1; foreach my $key (values %_url_p) { if ($key > $max_p) { $max_p = $key; } }
-               $count=0; $rest_p=0;
-               foreach my $key (sort { $SortDir*$_url_p{$a} <=> $SortDir*$_url_p{$b} } keys (%_url_p)) {
-                       if ($count>=$MaxNbOfPageShown) { $rest_p+=$_url_p{$key}; next; }
-                       if ($_url_p{$key}<$MinHitFile) { $rest_p+=$_url_p{$key}; next; }
-                   print "<TR><TD CLASS=AWL>";
-                       my $nompage=$Aliases{$key}||$key;
-                       if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
-                       if ($ShowLinksOnUrl) { 
-                               if ($key =~ /^http(s|):/i) {
-                                       # URL is url extracted from a proxy log file
-                                       print "<A HREF=\"$key\">$nompage</A>";
-                               }
-                               else {
-                                       # URL is url extracted from a web/wap server log file
-                                       print "<A HREF=\"http://$SiteToAnalyze$key\">$nompage</A>";
-                               }
-                       }
-                       else {
-                               print "$nompage";
-                       }
-                       my $bredde_p=0; my $bredde_e=0;
-                       if ($max_p > 0) { $bredde_p=int($BarWidth*($_url_p{$key}||0)/$max_p)+1; }
-                       if (($bredde_p==1) && $_url_p{$key}) { $bredde_p=2; }
-                       if ($max_p > 0) { $bredde_e=int($BarWidth*($_url_e{$key}||0)/$max_p)+1; }
-                       if (($bredde_e==1) && $_url_e{$key}) { $bredde_e=2; }
-                       print "</TD><TD>$_url_p{$key}</TD><TD>".($_url_e{$key}?$_url_e{$key}:"&nbsp;")."</TD>";
-                       print "<TD CLASS=AWL>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_p\" WIDTH=$bredde_p HEIGHT=8 ALT=\"$Message[56]: ".int($_url_p{$key}||0)."\" title=\"$Message[56]: ".int($_url_p{$key}||0)."\"><br>";
-                       print "<IMG SRC=\"$DirIcons\/other\/$BarImageHorizontal_e\" WIDTH=$bredde_e HEIGHT=8 ALT=\"$Message[104]: ".int($_url_e{$key}||0)."\" title=\"$Message[104]: ".int($_url_e{$key}||0)."\">";
-                       print "</TD></TR>\n";
-                       $count++;
-               }
-               &tab_end;
+       else {
+               print "<TR><TD CLASS=LEFT>$BrowsersHash{$key}</TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
        }
-               
-       # BY FILE TYPE
-       #-------------------------
-       if ($ShowFileTypesStats || $ShowCompressionStats) {
-               my $Totalh=0; foreach my $key (keys %_filetypes_h) { $Totalh+=$_filetypes_h{$key}; }
-               my $Totalk=0; foreach my $key (keys %_filetypes_k) { $Totalk+=$_filetypes_k{$key}; }
-               print "$CENTER<a name=\"FILETYPES\">&nbsp;</a><BR>";
-               if ($ShowCompressionStats) { &tab_head("$Message[73] - $Message[98]</a>",19); }
-               else { &tab_head("$Message[73]</a>",19); }
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[73]</TH>";
-               print "<TH bgcolor=\"#$color_h\" width=80>&nbsp;$Message[57]&nbsp;</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH>";
-               if ($ShowCompressionStats) {
-                       print "<TH bgcolor=\"#$color_k\" width=120>$Message[100]</TH><TH bgcolor=\"#$color_k\" width=120>$Message[101]</TH><TH bgcolor=\"#$color_k\" width=120>$Message[99]</TH>";
-               }
-               else {
-                       print "<TH bgcolor=\"#$color_k\" width=80>$Message[75]</TH>";
-               }
-               print "</TR>\n";
-               $count=0; 
-               foreach my $key (sort { $SortDir*$_filetypes_h{$a} <=> $SortDir*$_filetypes_h{$b} } keys (%_filetypes_h)) {
-                       my $p=int($_filetypes_h{$key}/$Totalh*1000)/10;
-                       if ($key eq "Unknown") {
-                               print "<TR><TD CLASS=AWL>$Message[0]</a></TD>";
-                       }
-                       else {
-                               print "<TR><TD CLASS=AWL>$key</TD>";
-                       }
-                       print "<TD>$_filetypes_h{$key}</TD><TD>$p&nbsp;%</TD>";
-                       if ($ShowCompressionStats) {
-                               if ($_filetypes_gz_in{$key}) {
-                                       my $percent=int(100*(1-$_filetypes_gz_out{$key}/$_filetypes_gz_in{$key})); 
-                                       printf("<TD>%s</TD><TD>%s</TD><TD>%s (%s%)</TD>",Format_Bytes($_filetypes_gz_in{$key}),Format_Bytes($_filetypes_k{$key}),Format_Bytes($_filetypes_gz_in{$key}-$_filetypes_gz_out{$key}),$percent);
-                               }
-                               else {
-                                       printf("<TD>%s</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>",Format_Bytes($_filetypes_k{$key}));
-                               }
-                       }
-                       else {
-                               printf("<TD>%s</TD>",Format_Bytes($_filetypes_k{$key}));
-                       }
-                       print "</TR>\n";
-                       $count++;
+}
+&tab_end;
+
+
+# BY OS
+#----------------------------
+print "$CENTER<a name=\"OS\"></a><BR>";
+$tab_titre=$message[59][$Lang];
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH colspan=2>OS</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sortos) {
+       $p=int($_os_h{$key}/$TotalHits*1000)/10;
+       if ($key eq "Unknown") {
+               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD CLASS=LEFT><a href=\"$DirCgi$PROG.$Extension?action=unknownreferer&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$message[0][$Lang]</a></TD><TD>$_os_h{$key}&nbsp;</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
                }
-               &tab_end;
-       }
-               
-       # BY FILE SIZE
-       #-------------------------
-       if ($ShowFileSizesStats) {
-               
+       else {
+               $nameicon = $OSHash{$key}; $nameicon =~ s/\ .*//; $nameicon =~ tr/A-Z/a-z/;
+               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/$nameicon.png\"></TD><TD CLASS=LEFT>$OSHash{$key}</TD><TD>$_os_h{$key}</TD>";
+               print "<TD>$p&nbsp;%</TD></TR>\n";
        }
-       
-       # BY BROWSER
-       #----------------------------
-       if ($ShowBrowsersStats) {
-               $BrowsersHashIDLib{"netscape"}="<font color=blue>Netscape</font> <a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=browserdetail\">($Message[58])</a>";
-               $BrowsersHashIDLib{"msie"}="<font color=blue>MS Internet Explorer</font> <a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=browserdetail\">($Message[58])</a>";
-               my $Total=0; foreach my $key (keys %_browser_h) { $Total+=$_browser_h{$key}; }
-               print "$CENTER<a name=\"BROWSER\">&nbsp;</a><BR>";
-               &tab_head($Message[21],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>Browser</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               $count=0; 
-               foreach my $key (sort { $SortDir*$_browser_h{$a} <=> $SortDir*$_browser_h{$b} } keys (%_browser_h)) {
-                       my $p=int($_browser_h{$key}/$Total*1000)/10;
-                       if ($key eq "Unknown") {
-                               print "<TR><TD CLASS=AWL><a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=unknownrefererbrowser\">$Message[0]</a></TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
-                       }
-                       else {
-                               my $newbrowser=$BrowsersHashIDLib{$key}||$key;
-                               print "<TR><TD CLASS=AWL>$newbrowser</TD><TD>$_browser_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
-                       }
-                       $count++;
-               }
-               &tab_end;
-       }       
-
-       # BY OS
-       #----------------------------
-       if ($ShowOSStats) {
-               my $Total=0; foreach my $key (keys %_os_h) { $Total+=$_os_h{$key}; }
-               print "$CENTER<a name=\"OS\">&nbsp;</a><BR>";
-               &tab_head($Message[59],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH colspan=2>OS</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               $count=0; 
-               foreach my $key (sort { $SortDir*$_os_h{$a} <=> $SortDir*$_os_h{$b} } keys (%_os_h)) {
-                       my $p=int($_os_h{$key}/$Total*1000)/10;
-                       if ($key eq "Unknown") {
-                               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/unknown.png\"></TD><TD CLASS=AWL><a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=unknownreferer\">$Message[0]</a></TD><TD>$_os_h{$key}</TD>";
-                               print "<TD>$p&nbsp;%</TD></TR>\n";
-                               }
-                       else {
-                               my $newos=$OSHashLib{$key}||$key;
-                               my $nameicon=$newos; $nameicon =~ s/\s.*//; $nameicon =~ tr/A-Z/a-z/;
-                               print "<TR><TD><IMG SRC=\"$DirIcons\/os\/$nameicon.png\"></TD><TD CLASS=AWL>$newos</TD><TD>$_os_h{$key}</TD>";
-                               print "<TD>$p&nbsp;%</TD></TR>\n";
-                       }
-                       $count++;
-               }
-               &tab_end;
-       }       
-       
-       # BY REFERENCE
-       #---------------------------
-       if ($ShowOriginStats) {
-               print "$CENTER<a name=\"REFERER\">&nbsp;</a><BR>";
-               &tab_head($Message[36],19);
-               my @p_p=();
-               if ($TotalPages > 0) {
-                       $p_p[0]=int($_from_p[0]/$TotalPages*1000)/10;
-                       $p_p[1]=int($_from_p[1]/$TotalPages*1000)/10;
-                       $p_p[2]=int($_from_p[2]/$TotalPages*1000)/10;
-                       $p_p[3]=int($_from_p[3]/$TotalPages*1000)/10;
-                       $p_p[4]=int($_from_p[4]/$TotalPages*1000)/10;
-               }
-               my @p_h=();
-               if ($TotalHits > 0) {
-                       $p_h[0]=int($_from_h[0]/$TotalHits*1000)/10;
-                       $p_h[1]=int($_from_h[1]/$TotalHits*1000)/10;
-                       $p_h[2]=int($_from_h[2]/$TotalHits*1000)/10;
-                       $p_h[3]=int($_from_h[3]/$TotalHits*1000)/10;
-                       $p_h[4]=int($_from_h[4]/$TotalHits*1000)/10;
-               }
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH>$Message[37]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[56]</TH><TH bgcolor=\"#$color_p\" width=80>$Message[15]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               #------- Referrals by direct address/bookmarks
-               print "<TR><TD CLASS=AWL><b>$Message[38]</b></TD><TD>$_from_p[0]&nbsp;</TD><TD>$p_p[0]&nbsp;%</TD><TD>$_from_h[0]&nbsp;</TD><TD>$p_h[0]&nbsp;%</TD></TR>\n";
-               #------- Referrals by search engine
-               print "<TR onmouseover=\"ShowTooltip(13);\" onmouseout=\"HideTooltip(13);\"><TD CLASS=AWL><b>$Message[40]</b><br>\n";
-               print "<TABLE>\n";
-               $count=0; 
-               foreach my $key (sort { $SortDir*$_se_referrals_h{$a} <=> $SortDir*$_se_referrals_h{$b} } keys (%_se_referrals_h)) {
-                       my $newreferer=$SearchEnginesHashIDLib{$key}||$key;
-                       print "<TR><TD CLASS=AWL>- $newreferer</TD><TD align=right> $_se_referrals_h{$key}</TD></TR>\n";
-                       $count++;
-               }
-               print "</TABLE></TD>\n";
-               print "<TD valign=top>$_from_p[2]&nbsp;</TD><TD valign=top>$p_p[2]&nbsp;%</TD><TD valign=top>$_from_h[2]&nbsp;</TD><TD valign=top>$p_h[2]&nbsp;%</TD></TR>\n";
-               #------- Referrals by external HTML link
-               print "<TR onmouseover=\"ShowTooltip(14);\" onmouseout=\"HideTooltip(14);\"><TD CLASS=AWL><b>$Message[41]</b><br>\n";
-               print "<TABLE>\n";
-               $count=0; $rest_h=0;
-               foreach my $key (sort { $SortDir*$_pagesrefs_h{$a} <=> $SortDir*$_pagesrefs_h{$b} } keys (%_pagesrefs_h)) {
-                       if ($count>=$MaxNbOfRefererShown) { $rest_h+=$_pagesrefs_h{$key}; next; }
-                       if ($_pagesrefs_h{$key}<$MinHitRefer) { $rest_h+=$_pagesrefs_h{$key}; next; }
-                       my $nompage=$key;
-                       if (length($nompage)>$MaxLengthOfURL) { $nompage=substr($nompage,0,$MaxLengthOfURL)."..."; }
-                       if ($ShowLinksOnUrl && ($key =~ /^http(s|):\/\//i)) {
-                               print "<TR><TD CLASS=AWL>- <A HREF=\"$key\">$nompage</A></TD><TD>$_pagesrefs_h{$key}</TD></TR>\n";
-                       } else {
-                               print "<TR><TD CLASS=AWL>- $nompage</TD><TD>$_pagesrefs_h{$key}</TD></TR>\n";
-                       }
-                       $count++;
-               }
-               if ($rest_h > 0) {
-                       print "<TR><TD CLASS=AWL><font color=blue>- $Message[2]</TD><TD>$rest_h</TD>";
-               }
-               print "</TABLE></TD>\n";
-               print "<TD valign=top>$_from_p[3]&nbsp;</TD><TD valign=top>$p_p[3]&nbsp;%</TD><TD valign=top>$_from_h[3]&nbsp;</TD><TD valign=top>$p_h[3]&nbsp;%</TD></TR>\n";
-               #------- Referrals by internal HTML link
-               print "<TR><TD CLASS=AWL><b>$Message[42]</b></TD><TD>$_from_p[4]&nbsp;</TD><TD>$p_p[4]&nbsp;%</TD><TD>$_from_h[4]&nbsp;</TD><TD>$p_h[4]&nbsp;%</TD></TR>\n";
-               print "<TR><TD CLASS=AWL><b>$Message[39]</b></TD><TD>$_from_p[1]&nbsp;</TD><TD>$p_p[1]&nbsp;%</TD><TD>$_from_h[1]&nbsp;</TD><TD>$p_h[1]&nbsp;%</TD></TR>\n";
-               &tab_end;
-       }       
-
-       # BY SEARCH PHRASES
-       #----------------------------
-       if ($ShowKeyphrasesStats) {
-               my $TotalDifferentKeyphrases=scalar keys %_keyphrases;
-               my $TotalKeyphrases=0; foreach my $key (keys %_keyphrases) { $TotalKeyphrases+=$_keyphrases{$key}; }
-               print "$CENTER<a name=\"SEARCHKEYS\">&nbsp;</a><BR>";
-               $MaxNbOfKeywordsShown = $TotalDifferentKeyphrases if $MaxNbOfKeywordsShown > $TotalDifferentKeyphrases;
-               &tab_head("$Message[43] ($Message[77] $MaxNbOfKeywordsShown)",19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\" onmouseover=\"ShowTooltip(15);\" onmouseout=\"HideTooltip(15);\"><TH>$TotalDifferentKeyphrases $Message[103]</TH><TH bgcolor=\"#$color_s\" width=80>$Message[14]</TH><TH bgcolor=\"#$color_s\" width=80>$Message[15]</TH></TR>\n";
-               $count=0; $rest=0;
-               foreach my $key (sort { $SortDir*$_keyphrases{$a} <=> $SortDir*$_keyphrases{$b} } keys (%_keyphrases)) {
-                       if ($count>=$MaxNbOfKeywordsShown) { $rest+=$_keyphrases{$key}; next; }
-                       if ($_keyphrases{$key}<$MinHitKeyword) { $rest+=$_keyphrases{$key}; next; }
-                       my $p=int($_keyphrases{$key}/$TotalKeyphrases*1000)/10;
-                       my $mot = $key; $mot =~ tr/\+/ /s;      # Showing $key without +
-                       print "<TR><TD CLASS=AWL>".DecodeEncodedString($mot)."</TD><TD>$_keyphrases{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
-                       $count++;
-               }
-               if ($rest > 0) {
-                       my $p;
-                       if ($TotalKeyphrases) { $p=int($rest/$TotalKeyphrases*1000)/10; }
-                       print "<TR><TD CLASS=AWL><font color=blue>$Message[30]</TD><TD>$rest</TD>";
-                       print "<TD>$p&nbsp;%</TD></TR>\n";
-               }
-               &tab_end;
-       }       
-
-       # BY ERRORS
-       #----------------------------
-       if ($ShowHTTPErrorsStats) {
-               print "$CENTER<a name=\"ERRORS\">&nbsp;</a><BR>";
-               &tab_head($Message[32],19);
-               print "<TR bgcolor=\"#$color_TableBGRowTitle\"><TH colspan=2>$Message[32]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[57]</TH><TH bgcolor=\"#$color_h\" width=80>$Message[15]</TH></TR>\n";
-               $count=0;
-               foreach my $key (sort { $SortDir*$_errors_h{$a} <=> $SortDir*$_errors_h{$b} } keys (%_errors_h)) {
-                       my $p=int($_errors_h{$key}/$TotalErrors*1000)/10;
-                       if ($httpcode{$key}) { print "<TR onmouseover=\"ShowTooltip($key);\" onmouseout=\"HideTooltip($key);\">"; }
-                       else { print "<TR>"; }
-                       if ($key == 404) { print "<TD><a href=\"$DirCgi$PROG.$Extension?${LinkParamB}output=notfounderror\">$key</a></TD>"; }
-                       else { print "<TD>$key</TD>"; }
-                       if ($httpcode{$key}) { print "<TD CLASS=AWL>$httpcode{$key}</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
-                       else { print "<TD CLASS=AWL>Unknown error</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
-                       $count++;
+}
+&tab_end;
+
+
+# BY REFERENCE
+#---------------------------
+print "$CENTER<a name=\"REFERER\"></a><BR>";
+$tab_titre="$message[36][$Lang]";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH>$message[37][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+if ($TotalHits > 0) { $_=int($_from_h[0]/$TotalHits*1000)/10; }
+print "<TR><TD CLASS=LEFT><b>$message[38][$Lang]:</b></TD><TD>$_from_h[0]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+if ($TotalHits > 0) { $_=int($_from_h[1]/$TotalHits*1000)/10; }
+print "<TR><TD CLASS=LEFT><b>$message[39][$Lang]:</b></TD><TD>$_from_h[1]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+#------- Referrals by search engine
+if ($TotalHits > 0) { $_=int($_from_h[2]/$TotalHits*1000)/10; }
+print "<TR onmouseover=\"ShowTooltip(13);\" onmouseout=\"HideTooltip(13);\"><TD CLASS=LEFT><b>$message[40][$Lang] :</b><br>\n";
+print "<TABLE>\n";
+foreach $se (@sortsereferrals) {
+       print "<TR><TD CLASS=LEFT>- $SearchEnginesHash{$se} </TD><TD align=right>$_se_referrals_h{\"$se\"}</TD></TR>\n";
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$_from_h[2]&nbsp;</TD><TD valign=top>$_&nbsp;%</TD>\n</TR>\n";
+#------- Referrals by external HTML link
+if ($TotalHits > 0) { $_=(int($_from_h[3]/$TotalHits*1000)/10); }
+print "<TR onmouseover=\"ShowTooltip(14);\" onmouseout=\"HideTooltip(14);\"><TD CLASS=LEFT><b>$message[41][$Lang] :</b><br>\n";
+print "<TABLE>\n";
+$count=0;
+foreach $from (@sortpagerefs) {
+       if (!(($SortDir<0 && $count<$MaxNbOfRefererShown) || ($SortDir>0 && $#sortpagerefs-$MaxNbOfRefererShown < $count))) { last; }
+       if ($_pagesrefs_h{$from}>=$MinHitRefer) {
+
+               # Show source
+               $lien=$from; $lien=substr($lien,0,$MaxLengthOfURL);
+               if ($ShowLinksOnUrl && ($from =~ /^http(s|):\/\//)) {
+                       print "<TR><TD CLASS=LEFT>- <A HREF=\"$from\">$lien</A></TD><TD>$_pagesrefs_h{$from}</TD></TR>\n";
+               } else {
+                       print "<TR><TD CLASS=LEFT>- $lien</TD><TD>$_pagesrefs_h{$from}</TD></TR>\n";
                }
-               &tab_end;
-       }
-       
-       &html_end;
 
+               $count++;
+       }
+}
+print "</TABLE></TD>\n";
+print "<TD valign=top>$_from_h[3]&nbsp;</TD><TD valign=top>$_&nbsp;%</TD>\n</TR>\n";
+
+if ($TotalHits > 0) { $_=(int($_from_h[4]/$TotalHits*1000)/10); }
+print "<TR><TD CLASS=LEFT><b>$message[42][$Lang] :</b></TD><TD>$_from_h[4]&nbsp;</TD><TD>$_&nbsp;%</TD></TR>\n";
+&tab_end;
+
+
+# BY SEARCHWORDS
+#----------------------------
+print "$CENTER<a name=\"SEARCHWORDS\"></a><BR>";
+$tab_titre="TOP $MaxNbOfKeywordsShown $message[55][$Lang] $TotalDifferentKeywords $message[43][$Lang]";
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle onmouseover=\"ShowTooltip(15);\" onmouseout=\"HideTooltip(15);\"><TH>$message[13][$Lang]</TH><TH bgcolor=#$color_s width=40>$message[14][$Lang]</TH><TH bgcolor=#$color_s width=40>$message[15][$Lang]</TH></TR>\n";
+$count=0;
+foreach $key (@sortsearchwords) {
+       if ( $count>=$MaxNbOfKeywordsShown ) { last; }
+       $p=int($_keywords{$key}/$TotalKeywords*1000)/10;
+       $mot = $key; $mot =~ s/\+/ /g;  # Showing $key without +
+       print "<TR><TD CLASS=LEFT>$mot</TD><TD>$_keywords{$key}</TD><TD>$p&nbsp;%</TD></TR>\n";
+       $count++;
 }
-else {
-       print "Lines in file: $NbOfLinesRead, found $NbOfNewLinesProcessed new records, $NbOfLinesCorrupted corrupted records.\n";
+$count=0;$rest=0;
+foreach $key (@sortsearchwords) {
+       if ( $count<$MaxNbOfKeywordsShown ) { $count++; next; }
+       $rest=$rest+$_keywords{$key};
 }
+if ($rest >0) {
+       if ($TotalKeywords > 0) { $p=int($rest/$TotalKeywords*1000)/10; }
+       print "<TR><TD CLASS=LEFT><font color=blue>$message[30][$Lang]</TD><TD>$rest</TD>";
+       print "<TD>$p&nbsp;%</TD></TR>\n";
+       }
+&tab_end;
+
+
+# BY ERRORS
+#----------------------------
+print "$CENTER<a name=\"ERRORS\"></a><BR>";
+$tab_titre=$message[32][$Lang];
+&tab_head;
+print "<TR bgcolor=#$color_TableBGRowTitle><TH colspan=2>$message[32][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[57][$Lang]</TH><TH bgcolor=#$color_h width=40>$message[15][$Lang]</TH></TR>\n";
+foreach $key (@sorterrors) {
+       $p=int($_errors_h{$key}/$TotalErrors*1000)/10;
+       if ($httpcode{$key}) { print "<TR onmouseover=\"ShowTooltip($key);\" onmouseout=\"HideTooltip($key);\">"; }
+       else { print "<TR>"; }
+       if ($key == 404) { print "<TD><a href=\"$DirCgi$PROG.$Extension?action=notfounderror&site=$SiteToAnalyze&year=$YearRequired&month=$MonthRequired&lang=$Lang\">$key</a></TD>"; }
+       else { print "<TD>$key</TD>"; }
+       if ($httpcode{$key}) { print "<TD CLASS=LEFT>$httpcode{$key}</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+       else { print "<TD CLASS=LEFT>Unknown error</TD><TD>$_errors_h{$key}</TD><TD>$p&nbsp;%</TD></TR>\n"; }
+}
+&tab_end;
 
-0;     # Do not remove this line
+&html_end;
 
+0;     # Do not remove this line
index cd32665d5e3183310074b3ee08136c19aabe652d..b35091745d929285497a12925c96edb796a9e747 100644 (file)
 "wdg_validator",
 "webzip",
 "libwww",                              # Must be at end because some browser have both "browser id" and "libwww"
-"staroffice"
+"staroffice","StarOffice"
 );
 
 
 # Browser name list ("browser id in lower case", "browser text")
 #---------------------------------------------------------------
 %BrowsersHashIDLib = (
-# Common web browsers (IE and Netscape must not be in this list)
+"msie","defined_later",
+"netscape","defined_later",
+# Most frequent browsers should be first in this list
 "icab","iCab",
 "go!zilla","Go!Zilla",
 "konqueror","Konqueror",
 "omniweb","OmniWeb",
 "opera","Opera",
 "wget","Wget",
+
 "22acidownload","22AciDownload",
 "aol\\-iweng","AOL-Iweng",
 "amaya","Amaya",
index 2c5f0f8635967aa4194b205b6d8b1fa9b584f2b8..aa8dd9bba3c221b4138f7695549a43b2cc30c2b7 100644 (file)
@@ -1,17 +1,16 @@
 # AWSTATS OPERATING SYSTEMS DATABASE
 #------------------------------------
-# Last update: 2001-11-10
+# Last update: 2001-10-20
 
 
 # OSArrayID
-# This list is used to know in which order to search Operating System IDs.
-# It contains all matching criteria to search for in log fields.
-# Note: OS IDs are in lower case and ' ' and '+' are changed into '_'
-#-------------------------------------------------------------------------
+# Matching criteria to search in log after changing ' ' or '+' into '_' "
+# This searching ID are searched in declare order.
+#-------------------------------------------------------
 @OSArrayID     = (
 # Windows OS family
-"windows_xp","windows_nt_5\.1",                # Must be before windows_nt_5
-"windows_me","win_9x_4\.9",                    # Must be before windows_98
+"windows_nt_5\.1",
+"win_9x_4\.9",                 # Must be before windows_98
 "windows2000","windows_2000","windows_nt_5",
 "winnt","windows_nt","windows-nt","win32",
 "win98","windows_98","windows98",
@@ -53,8 +52,8 @@
 #-------------------------------------------------------
 %OSHashID      = (
 # Windows OS family
-"windows_xp","winxp","windows_nt_5\.1","winxp",
-"windows_me","winme","win_9x_4\.9","winme",
+"windows_nt_5\.1","winxp",
+"win_9x_4\.9","winme",
 "windows2000","win2000","windows_2000","win2000","windows_nt_5","win2000",
 "winnt","winnt","windows_nt","winnt","windows-nt","winnt","win32","winnt",
 "win98","win98","windows_98","win98","windows98","win98",
 
 
 1;
-
-
-# Informations from microsoft for detecting windows version
-#  Windows 95 retail, OEM     4.00.950                     7/11/95
-#  Windows 95 retail SP1      4.00.950A                    7/11/95-12/31/95
-#  OEM Service Release 2      4.00.1111* (4.00.950B)       8/24/96
-#  OEM Service Release 2.1    4.03.1212-1214* (4.00.950B)  8/24/96-8/27/97  
-#  OEM Service Release 2.5    4.03.1214* (4.00.950C)       8/24/96-11/18/97
-#  Windows 98 retail, OEM     4.10.1998                    5/11/98
-#  Windows 98 Second Edition  4.10.2222A                   4/23/99
-#  Windows Me                 4.90.3000 
index 6bf686fdcf95d272aa3a14a0e4efa8244228df86..31c2315b23ca8d3b5de23dac8aa6bfa31c58940e 100644 (file)
 # AWSTATS ROBOTS DATABASE
 #------------------------
-# Last update: 2001-12-02
-
-
-# List of active major robots
-@RobotArrayID_major = (
-"googlebot",
-"tcl",
-"ia_archiver",
-"scooter",
-"fast-Webcrawler",
-"bjaaland",
-"echo",
-"jeeves",
-"voila",
-"voyager",
-"mercator",
-"linkWalker",
-"slurp",
-"wisenutbot",
-"gulliver",
-"myweb",
-"wget",
-"architextspider",
-"webbase",
-"muscatferret",
-"lycos",
-"nomad",
-"appie",
-"weblayers",
-"moget",
-"unlost_web_crawler",
-"antibot",
-"harvest",
-"ferret",
-"jennybot",
-"peternews",
-"htdig"
-);
-
-@RobotArrayID_generic = (
-# Generic robot
-"robot"
-);
-
+# Last update: 2001-10-20
 
 
 # Robot name list ("os id","os clear text")
 #-------------------------------------------------------
-%RobotHashIDLib   = (
-# Robots found at http://www.robotstxt.org/wc/active/all.txt
+# Main list of robots (found at http://info.webcrawler.com/mak/projects/robots/active.html)
+# This command show how to generate tab list from this file: cat robotslist.txt | sed 's/:/ /' | awk ' /robot-id/ { name=tolower($2); } /robot-name/ { print "\""name"\", \""$0"\"," } ' | sed 's/robot-name *//g' > file
 # Rem: To avoid bad detection, some robots id were removed from this list:
 #      - Robots with ID of 2 letters only
 #      - Robot called "webs"
 # Rem: directhit is changed into direct_hit (its real id)
 # Rem: calif is changed into calif[^r] to avoid confusion between tiscalifreenet browser
-"acme.spider","Acme.Spider",
-"ahoythehomepagefinder","Ahoy! The Homepage Finder",
-"alkaline","Alkaline",
-"appie","Walhello appie",
-"arachnophilia","Arachnophilia",
-"architext","ArchitextSpider",
-"aretha","Aretha",
-"ariadne","ARIADNE",
-"arks","arks",
-"aspider","ASpider (Associative Spider)",
-"atn.txt","ATN Worldwide",
-"atomz","Atomz.com Search Robot",
-"auresys","AURESYS",
-"backrub","BackRub",
-"bigbrother","Big Brother",
-"bjaaland","Bjaaland",
-"blackwidow","BlackWidow",
-"blindekuh","Die Blinde Kuh",
-"bloodhound","Bloodhound",
-"brightnet","bright.net caching robot",
-"bspider","BSpider",
-"cactvschemistryspider","CACTVS Chemistry Spider",
-"calif","Calif",
-"cassandra","Cassandra",
-"cgireader","Digimarc Marcspider/CGI",
-"checkbot","Checkbot",
-"churl","churl",
-"cmc","CMC/0.01",
-"collective","Collective",
-"combine","Combine System",
-"conceptbot","Conceptbot",
-"coolbot","CoolBot",
-"core","Web Core / Roots",
-"cosmos","XYLEME Robot",
-"cruiser","Internet Cruiser Robot",
-"cusco","Cusco",
-"cyberspyder","CyberSpyder Link Test",
-"deweb","DeWeb(c) Katalog/Index",
-"dienstspider","DienstSpider",
-"digger","Digger",
-"diibot","Digital Integrity Robot",
-"directhit","Direct Hit Grabber",
-"dnabot","DNAbot",
-"download_express","DownLoad Express",
-"dragonbot","DragonBot",
-"dwcp","DWCP (Dridus' Web Cataloging Project)",
-"e-collector","e-collector",
-"ebiness","EbiNess",
-"eit","EIT Link Verifier Robot",
-"elfinbot","ELFINBOT",
-"emacs","Emacs-w3 Search Engine",
-"emcspider","ananzi",
-"esther","Esther",
-"evliyacelebi","Evliya Celebi",
-"nzexplorer","nzexplorer",
-"fdse","Fluid Dynamics Search Engine robot",
-"felix","Felix IDE",
-"ferret","Wild Ferret Web Hopper #1, #2, #3",
-"fetchrover","FetchRover",
-"fido","fido",
-"finnish","Hämähäkki",
-"fireball","KIT-Fireball",
-"fish","Fish search",
-"fouineur","Fouineur",
-"francoroute","Robot Francoroute",
-"freecrawl","Freecrawl",
-"funnelweb","FunnelWeb",
-"gama","gammaSpider, FocusedCrawler",
-"gazz","gazz",
-"gcreep","GCreep",
-"getbot","GetBot",
-"geturl","GetURL",
-"golem","Golem",
-"googlebot","Googlebot",
-"grapnel","Grapnel/0.01 Experiment",
-"griffon","Griffon",
-"gromit","Gromit",
-"gulliver","Northern Light Gulliver",
-"hambot","HamBot",
-"harvest","Harvest",
-"havindex","havIndex",
-"hometown","Hometown Spider Pro",
-"wired-digital","Wired Digital",
-"htdig","ht://Dig",
-"htmlgobble","HTMLgobble",
-"hyperdecontextualizer","Hyper-Decontextualizer",
-"iajabot","iajaBot",
-"ibm","IBM_Planetwide",
-"iconoclast","Popular Iconoclast",
-"ilse","Ingrid",
-"imagelock","Imagelock",
-"incywincy","IncyWincy",
-"informant","Informant",
-"infoseek","InfoSeek Robot 1.0",
-"infoseeksidewinder","Infoseek Sidewinder",
-"infospider","InfoSpiders",
-"inspectorwww","Inspector Web",
-"intelliagent","IntelliAgent",
-"irobot","I, Robot",
-"iron33","Iron33",
-"israelisearch","Israeli-search",
-"javabee","JavaBee",
-"jbot","JBot Java Web Robot",
-"jcrawler","JCrawler",
-"jeeves","Jeeves",
-"jobo","JoBo Java Web Robot",
-"jobot","Jobot",
-"joebot","JoeBot",
-"jubii","The Jubii Indexing Robot",
-"jumpstation","JumpStation",
-"katipo","Katipo",
-"kdd","KDD-Explorer",
-"kilroy","Kilroy",
-"ko_yappo_robot","KO_Yappo_Robot",
-"labelgrabber.txt","LabelGrabber",
-"larbin","larbin",
-"legs","legs",
-"linkidator","Link Validator",
-"linkscan","LinkScan",
-"linkwalker","LinkWalker",
-"lockon","Lockon",
-"logo_gif","logo.gif Crawler",
-"lycos","Lycos",
-"macworm","Mac WWWWorm",
-"magpie","Magpie",
-"marvin","marvin/infoseek",
-"mattie","Mattie",
-"mediafox","MediaFox",
-"merzscope","MerzScope",
-"meshexplorer","NEC-MeshExplorer",
-"mindcrawler","MindCrawler",
-"moget","moget",
-"momspider","MOMspider",
-"monster","Monster",
-"motor","Motor",
-"muscatferret","Muscat Ferret",
-"mwdsearch","Mwd.Search",
-"myweb","Internet Shinchakubin",
-"netcarta","NetCarta WebMap Engine",
-"netmechanic","NetMechanic",
-"netscoop","NetScoop",
-"newscan-online","newscan-online",
-"nhse","NHSE Web Forager",
-"nomad","Nomad",
-"northstar","The NorthStar Robot",
-"occam","Occam",
-"octopus","HKU WWW Octopus",
-"openfind","Openfind data gatherer",
-"orb_search","Orb Search",
-"packrat","Pack Rat",
-"pageboy","PageBoy",
-"parasite","ParaSite",
-"patric","Patric",
-"pegasus","pegasus",
-"perignator","The Peregrinator",
-"perlcrawler","PerlCrawler 1.0",
-"phantom","Phantom",
-"piltdownman","PiltdownMan",
-"pimptrain","Pimptrain.com's robot",
-"pioneer","Pioneer",
-"pitkow","html_analyzer",
-"pjspider","Portal Juice Spider",
-"pka","PGP Key Agent",
-"plumtreewebaccessor","PlumtreeWebAccessor",
-"poppi","Poppi",
-"portalb","PortalB Spider",
-"puu","GetterroboPlus Puu",
-"python","The Python Robot",
-"raven","Raven Search",
-"rbse","RBSE Spider",
-"resumerobot","Resume Robot",
-"rhcs","RoadHouse Crawling System",
-"roadrunner","Road Runner: The ImageScape Robot",
-"robbie","Robbie the Robot",
-"robi","ComputingSite Robi/1.0",
-"robofox","RoboFox",
-"robozilla","Robozilla",
-"roverbot","Roverbot",
-"rules","RuLeS",
-"safetynetrobot","SafetyNet Robot",
-"scooter","Scooter",
-"search_au","Search.Aus-AU.COM",
-"searchprocess","SearchProcess",
-"senrigan","Senrigan",
-"sgscout","SG-Scout",
-"shaggy","ShagSeeker",
-"shaihulud","Shai'Hulud",
-"sift","Sift",
-"simbot","Simmany Robot Ver1.0",
-"site-valet","Site Valet",
-"sitegrabber","Open Text Index Robot",
-"sitetech","SiteTech-Rover",
-"slcrawler","SLCrawler",
-"slurp","Inktomi Slurp",
-"smartspider","Smart Spider",
-"snooper","Snooper",
-"solbot","Solbot",
-"spanner","Spanner",
-"speedy","Speedy Spider",
-"spider_monkey","spider_monkey",
-"spiderbot","SpiderBot",
-"spiderline","Spiderline Crawler",
-"spiderman","SpiderMan",
-"spiderview","SpiderView(tm)",
-"spry","Spry Wizard Robot",
-"ssearcher","Site Searcher",
-"suke","Suke",
-"suntek","suntek search engine",
-"sven","Sven",
-"tach_bw","TACH Black Widow",
-"tarantula","Tarantula",
-"tarspider","tarspider",
-"tcl","Tcl W3 Robot",
-"techbot","TechBOT",
-"templeton","Templeton",
-"teoma_agent1","TeomaTechnologies",
-"titin","TitIn",
-"titan","TITAN",
-"tkwww","The TkWWW Robot",
-"tlspider","TLSpider",
-"ucsd","UCSD Crawl",
-"udmsearch","UdmSearch",
-"urlck","URL Check",
-"valkyrie","Valkyrie",
-"victoria","Victoria",
-"visionsearch","vision-search",
-"voyager","Voyager",
-"vwbot","VWbot",
-"w3index","The NWI Robot",
-"w3m2","W3M2",
-"wallpaper","WallPaper",
-"wanderer","the World Wide Web Wanderer",
-"wapspider","w\@pSpider by wap4.com",
-"webbandit","WebBandit Web Spider",
-"webcatcher","WebCatcher",
-"webcopy","WebCopy",
-"webfetcher","webfetcher",
-"webfoot","The Webfoot Robot",
-"weblayers","weblayers",
-"weblinker","WebLinker",
-"webmirror","WebMirror",
-"webmoose","The Web Moose",
-"webquest","WebQuest",
-"webreader","Digimarc MarcSpider",
-"webreaper","WebReaper",
-"websnarf","Websnarf",
-"webspider","WebSpider",
-"webvac","WebVac",
-"webwalk","webwalk",
-"webwalker","WebWalker",
-"webwatch","WebWatch",
-"wget","Wget",
-"whatuseek","whatUseek Winona",
-"whowhere","WhoWhere Robot",
-"wmir","w3mir",
-"wolp","WebStolperer",
-"wombat","The Web Wombat",
-"worm","The World Wide Web Worm",
-"wwwc","WWWC Ver 0.2.5",
-"wz101","WebZinger",
-"xget","XGET",
-"nederland.zoek","Nederland.zoek",
-# Other robots reported by users
-"antibot", "Antibot",
-"boris", "Boris",
-"cscrawler","CsCrawler",
-"daviesbot", "DaviesBot",
-"digout4u", "digout4u",
-"echo", "EchO!",
-"ezresult",    "Ezresult",
-"fast-webcrawler", "Fast-Webcrawler",
-"gnodspider","GNOD Spider",
-"ia_archiver", "ia_archiver",
-"jennybot", "JennyBot",
-"justview", "JustView",
-"mercator", "Mercator",
-"perman", "Perman surfer",
-"peternews", "Peternews",
-"redalert", "Red Alert",
-"shoutcast","Shoutcast Directory Service",
-"ultraseek", "Ultraseek",
-"unlost_web_crawler", "Unlost_Web_Crawler",
-"voila", "Voila",
-"webbase", "WebBase",
-"webcompass", "webcompass",
-"wisenutbot","WISENutbot",
-"yandex", "Yandex bot",
-# Other robots can be found at http://www.jafsoft.com/searchengines/webbots.html 
-# Generic root ID
-"robot", "Unknown robot"
-);
+%RobotHashIDLib   = (
+"acme.spider", "Acme.Spider",
+"ahoythehomepagefinder", "Ahoy! The Homepage Finder",
+"alkaline", "Alkaline",
+"appie", "Walhello appie",
+"arachnophilia", "Arachnophilia",
+"architext", "ArchitextSpider",
+"aretha", "Aretha",
+"ariadne", "ARIADNE",
+"aspider", "ASpider (Associative Spider)",
+"atn.txt", "ATN Worldwide",
+"atomz", "Atomz.com Search Robot",
+"auresys", "AURESYS",
+"backrub", "BackRub",
+"bigbrother", "Big Brother",
+"bjaaland", "Bjaaland",
+"blackwidow", "BlackWidow",
+"blindekuh", "Die Blinde Kuh",
+"bloodhound", "Bloodhound",
+"brightnet", "bright.net caching robot",
+"bspider", "BSpider",
+"cactvschemistryspider", "CACTVS Chemistry Spider",
+"calif[^r]", "Calif",
+"cassandra", "Cassandra",
+"cgireader", "Digimarc Marcspider/CGI",
+"checkbot", "Checkbot",
+"churl", "churl",
+"cmc", "CMC/0.01",
+"collective", "Collective",
+"combine", "Combine System",
+"conceptbot", "Conceptbot",
+"core", "Web Core / Roots",
+"cshkust", "CS-HKUST WISE: WWW Index and Search Engine",
+"cusco", "Cusco",
+"cyberspyder", "CyberSpyder Link Test",
+"deweb", "DeWeb(c) Katalog/Index",
+"dienstspider", "DienstSpider",
+"diibot", "Digital Integrity Robot",
+"direct_hit", "Direct Hit Grabber",
+"dnabot", "DNAbot",
+"download_express", "DownLoad Express",
+"dragonbot", "DragonBot",
+"dwcp", "DWCP (Dridus' Web Cataloging Project)",
+"ebiness", "EbiNess",
+"eit", "EIT Link Verifier Robot",
+"emacs", "Emacs-w3 Search Engine",
+"emcspider", "ananzi",
+"esther", "Esther",
+"evliyacelebi", "Evliya Celebi",
+"fdse", "Fluid Dynamics Search Engine robot",
+"felix", "     Felix IDE",
+"ferret", "Wild Ferret Web Hopper #1, #2, #3",
+"fetchrover", "FetchRover",
+"fido", "fido",
+"finnish", "Hämähäkki",
+"fireball", "KIT-Fireball",
+"fish", "Fish search",
+"fouineur", "Fouineur",
+"francoroute", "Robot Francoroute",
+"freecrawl", "Freecrawl",
+"funnelweb", "FunnelWeb",
+"gazz", "gazz",
+"gcreep", "GCreep",
+"getbot", "GetBot",
+"geturl", "GetURL",
+"golem", "Golem",
+"googlebot", "Googlebot",
+"grapnel", "Grapnel/0.01 Experiment",
+"griffon", "Griffon",
+"gromit", "Gromit",
+"gulliver", "Northern Light Gulliver",
+"hambot", "HamBot",
+"harvest", "Harvest",
+"havindex", "havIndex",
+"hometown", "Hometown Spider Pro",
+"wired-digital", "Wired Digital",
+"htdig", "ht://Dig",
+"htmlgobble", "HTMLgobble",
+"hyperdecontextualizer", "Hyper-Decontextualizer",
+"ibm", "IBM_Planetwide",
+"iconoclast", "Popular Iconoclast",
+"ilse", "Ingrid",
+"imagelock", "Imagelock ",
+"incywincy", "IncyWincy",
+"informant", "Informant",
+"infoseek", "InfoSeek Robot 1.0",
+"infoseeksidewinder", "Infoseek Sidewinder",
+"infospider", "InfoSpiders",
+"inspectorwww", "Inspector Web",
+"intelliagent", "IntelliAgent",
+"iron33", "Iron33",
+"israelisearch", "Israeli-search",
+"javabee", "JavaBee",
+"jcrawler", "JCrawler",
+"jeeves", "Jeeves",
+"jobot", "Jobot",
+"joebot", "JoeBot",
+"jubii", "The Jubii Indexing Robot",
+"jumpstation", "JumpStation",
+"katipo", "Katipo",
+"kdd", "KDD-Explorer",
+"kilroy", "Kilroy",
+"ko_yappo_robot", "KO_Yappo_Robot",
+"labelgrabber.txt", "LabelGrabber",
+"larbin", "larbin",
+"legs", "legs",
+"linkscan", "LinkScan",
+"linkwalker", "LinkWalker",
+"lockon", "Lockon",
+"logo_gif", "logo.gif Crawler",
+"lycos", "Lycos",
+"macworm", "Mac WWWWorm",
+"magpie", "Magpie",
+"mediafox", "MediaFox",
+"merzscope", "MerzScope",
+"meshexplorer", "NEC-MeshExplorer",
+"mindcrawler", "MindCrawler",
+"moget", "moget",
+"momspider", "MOMspider",
+"monster", "Monster",
+"motor", "Motor",
+"muscatferret", "Muscat Ferret",
+"mwdsearch", "Mwd.Search",
+"myweb", "Internet Shinchakubin",
+"netcarta", "NetCarta WebMap Engine",
+"netmechanic", "NetMechanic",
+"netscoop", "NetScoop",
+"newscan-online", "newscan-online",
+"nhse", "NHSE Web Forager",
+"nomad", "Nomad",
+"northstar", "The NorthStar Robot",
+"nzexplorer", "nzexplorer",
+"occam", "Occam",
+"octopus", "HKU WWW Octopus",
+"orb_search", "Orb Search",
+"packrat", "Pack Rat",
+"pageboy", "PageBoy",
+"parasite", "ParaSite",
+"patric", "Patric",
+"perignator", "The Peregrinator",
+"perlcrawler", "PerlCrawler 1.0",
+"phantom", "Phantom",
+"piltdownman", "PiltdownMan",
+"pioneer", "Pioneer",
+"pitkow", "html_analyzer",
+"pjspider", "Portal Juice Spider",
+"pka", "PGP Key Agent",
+"plumtreewebaccessor", "PlumtreeWebAccessor",
+"poppi", "Poppi",
+"portalb", "PortalB Spider",
+"puu", "GetterroboPlus Puu",
+"python", "The Python Robot",
+"raven", "Raven Search",
+"rbse", "RBSE Spider",
+"resumerobot", "Resume Robot",
+"rhcs", "RoadHouse Crawling System",
+"roadrunner", "Road Runner: The ImageScape Robot",
+"robbie", "Robbie the Robot",
+"robi", "ComputingSite Robi/1.0",
+"roverbot", "Roverbot",
+"safetynetrobot", "SafetyNet Robot",
+"scooter", "Scooter",
+"search_au", "Search.Aus-AU.COM",
+"searchprocess", "SearchProcess",
+"senrigan", "Senrigan",
+"sgscout", "SG-Scout",
+"shaggy", "ShagSeeker",
+"shaihulud", "Shai'Hulud",
+"sift", "Sift",
+"simbot", "Simmany Robot Ver1.0",
+"site-valet", "Site Valet",
+"sitegrabber", "Open Text Index Robot",
+"sitetech", "SiteTech-Rover",
+"slurp", "Inktomi Slurp",
+"smartspider", "Smart Spider",
+"snooper", "Snooper",
+"solbot", "Solbot",
+"spanner", "Spanner",
+"speedy", "Speedy Spider",
+"spider_monkey", "spider_monkey",
+"spiderbot", "SpiderBot",
+"spiderman", "SpiderMan",
+"spry", "Spry Wizard Robot",
+"ssearcher", "Site Searcher",
+"suke", "Suke",
+"sven", "Sven",
+"tach_bw", "TACH Black Widow",
+"tarantula", "Tarantula",
+"tarspider", "tarspider",
+"tcl", "Tcl W3 Robot",
+"techbot", "TechBOT",
+"templeton", "Templeton",
+"titin", "TitIn",
+"titan", "TITAN",
+"tkwww", "The TkWWW Robot",
+"tlspider", "TLSpider",
+"ucsd", "UCSD Crawl",
+"udmsearch", "UdmSearch",
+"urlck", "URL Check",
+"valkyrie", "Valkyrie",
+"victoria", "Victoria",
+"visionsearch", "vision-search",
+"voyager", "Voyager",
+"vwbot", "VWbot",
+"w3index", "The NWI Robot",
+"w3m2", "W3M2",
+"wanderer", "the World Wide Web Wanderer",
+"webbandit", "WebBandit Web Spider",
+"webcatcher", "WebCatcher",
+"webcopy", "WebCopy",
+"webfetcher", "webfetcher",
+"webfoot", "The Webfoot Robot",
+"weblayers", "Weblayers",
+"weblinker", "WebLinker",
+"webmirror", "WebMirror",
+"webmoose", "The Web Moose",
+"webquest", "WebQuest",
+"webreader", "Digimarc MarcSpider",
+"webreaper", "WebReaper",
+"websnarf", "Websnarf",
+"webspider", "WebSpider",
+"webvac", "WebVac",
+"webwalk", "webwalk",
+"webwalker", "WebWalker",
+"webwatch", "WebWatch",
+"wget", "Wget",
+"whowhere", "WhoWhere Robot",
+"wmir", "w3mir",
+"wolp", "WebStolperer",
+"wombat", "The Web Wombat ",
+"worm", "The World Wide Web Worm",
+"wwwc", "WWWC Ver 0.2.5",
+"wz101", "WebZinger",
+"xget", "XGET",
+"nederland.zoek", "Nederland.zoek",
 
+# Not declared robots
+"antibot", "Antibot (Not referenced robot)",
+"cscrawler","CsCrawler (Not referenced robot)",
+"daviesbot", "DaviesBot (Not referenced robot)",
+"ezresult",    "Ezresult (Not referenced robot)",
+"fast-webcrawler", "Fast-Webcrawler (Not referenced robot)",
+"gnodspider","GNOD Spider (Not referenced robot)",
+"jennybot", "JennyBot (Not referenced robot)",
+"justview", "JustView (Not referenced robot)",
+"mercator", "Mercator (Not referenced robot)",
+"perman surfer", "Perman surfer (Not referenced robot)",
+"redalert", "Red Alert (Not referenced robot)",
+"shoutcast","Shoutcast Directory Service (Not referenced robot)",
+"unlost_web_crawler", "Unlost_Web_Crawler (Not referenced robot)",
+"webbase", "WebBase (Not referenced robot)",
+"wisenutbot","WISENutbot (Not referenced robot)",
+"yandex", "Yandex bot (Not referenced robot)",
+# Supposed to be robots
+"boris", "Boris (Not referenced robot)",
+"digout4u", "digout4u (Not referenced robot)",
+"echo", "EchO! (Not referenced robot)",
+"ia_archiver", "ia_archiver (Not referenced robot)",
+"ultraseek", "Ultraseek (Not referenced robot)",
+"voila", "Voila (Not referenced robot)",
+"webcompass", "webcompass (Not referenced robot)",
+# Generic ID
+"robot", "Unknown robot (Not referenced robot)"
+);
 
 1;
index 9e3f2749a0319fd78481dfb2df6f6eb9da64cf63..1f004e9eee2a119f146f49147b24d6d61498b44f 100644 (file)
@@ -1,9 +1,9 @@
 # AWSTATS SEARCH ENGINES DATABASE
 #--------------------------------
-# Last update: 2001-12-02
+# Last update: 2001-10-20
 
 
-# Search engines names database
+# Search engines names database (update the 10th january 2001)
 # To add a search engine, add a new line:
 # "match_string_in_url_that_identify_engine", "search_engine_name",
 #-------------------------------------------------------
@@ -29,7 +29,7 @@
 "metacrawler\.","MetaCrawler (Metamoteur)",
 "go2net\.com","Go2Net (Metamoteur)",
 "go\.com","Go.com",
-"overture\.com","Overture",            # Replace "goto\.com","Goto.com",
+"goto\.com","Goto.com",
 "euroseek\.","Euroseek",
 "excite\.","Excite",
 "lokace\.", "Lokace",
@@ -46,7 +46,6 @@
 "opasia\.dk","Opasia", "danielsen\.com","Thor (danielsen.com)",        # Minor danish search-engines 
 "ilse\.","Ilse","vindex\.","Vindex\.nl",                                               # Minor dutch search engines
 "splut\.","Splut", "ukplus\.", "UKPlus", "mirago\.", "Mirago", "ukindex\.co\.uk", "UKIndex", "ukdirectory\.","UK Directory", # Minor english search engines
-"haku\.www\.fi","Ihmemaa",                                                                             # Minor finnish search engines
 "nomade\.fr/","Nomade", "ctrouve\.","C'est trouvé", "francite\.","Francité", "\.lbb\.org", "LBB", "rechercher\.libertysurf\.fr", "Libertysurf",        # Minor french search engines
 "fireball\.de","Fireball", "infoseek\.de","Infoseek", "suche\.web\.de","Web.de", "meta\.ger","MetaGer",        # Minor german search engines
 "virgilio\.it","Virgilio",                                                                             # Minor italian search engines
@@ -78,7 +77,6 @@
 "metacrawler\.","general=",
 "go2net\.com","general=",
 "go\.com","qt=",
-"overture\.com","keywords=",
 "euroseek\.","query=",
 "excite\.","search=",
 "spray\.","string=",
 "ilse\.","search_for=", "vindex\.","in=",                                              # Minor dutch search engines
 "splut\.","pattern=", "ukplus\.", "search=", "mirago\.", "txtSearch=",         # Minor english search engines
 "ukindex\.co\.uk", "stext=", "ukdirectory\.","k=",                                                     # Minor english search engines
-"haku\.www\.fi","w=",                                                                                                          # Minor finnish search engines
 "nomade\.fr/","s=", "francite\.","name=",                                                                      # Minor french search engines
 "fireball\.de","q=", "infoseek\.de","qt=", "suche\.web\.de","su=",                     # Minor german search engines
 "sok\.start\.no", "q=",                                                                                        # Minor norvegian search engines
 "evreka\.passagen\.se","q="                                                                            # Minor swedish search engines
 );
 # If no rules are known, this will be used to clean URL of not keyword parameters.
-@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cfg=","cof=","cou=","cp=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hq=","hs=","id=","kl=","lang=","loc=","lr=","matchmode=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","style=","stype=","sum=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=","y=","look=");
-# Never put the following exclusion ("ask=","claus=","general=","kw=","keyword=","keywords=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=","string=","su=","w=") because they are strings that contain keywords we're looking for.
+@WordsToCleanSearchUrl= ("act=","annuaire=","btng=","categoria=","cfg=","cou=","cp=","dd=","domain=","dt=","dw=","exec=","geo=","hc=","height=","hl=","hq=","hs=","id=","kl=","lang=","loc=","lr=","matchmode=","medor=","message=","meta=","mode=","order=","page=","par=","pays=","pg=","pos=","prg=","qc=","refer=","sa=","safe=","sc=","sort=","src=","start=","stype=","sum=","tag=","temp=","theme=","url=","user=","width=","what=","\\.x=","\\.y=","y=","look=");
+# Never put the following exclusion ("ask=","claus=","general=","kw=","keyword=","MT","p=","q=","qr=","qt=","query=","s=","search=","searchText=","string=","su=") because they are strings that contain keywords we're looking for.
 
 
 1;
diff --git a/wwwroot/cgi-bin/lang/awstats-br.txt b/wwwroot/cgi-bin/lang/awstats-br.txt
new file mode 100644 (file)
index 0000000..980aae4
--- /dev/null
@@ -0,0 +1,108 @@
+# Portuguese (Brazilian) message file
+message0=Desconhecido
+message1=Desconhecido (ip não resolvido)
+message2=Outros visitantes
+message3=Ver detalhes
+message4=Dia
+message5=Mês
+message6=Ano
+message7=Estatísticas de
+message8=Primeira visita
+message9=Última visita
+message10=Número de visitas
+message11=Visitantes únicos
+message12=Visita
+message13=Palavra chave
+message14=Pesquisa
+message15=Por cento
+message16=Tráfego
+message17=Domínios/Países
+message18=Visitantes
+message19=Páginas/URL
+message20=Horas
+message21=Browsers
+message22=Erros HTTP
+message23=Referências
+message24=Busca&nbsp;Palavras
+message25=Visitas domínios/países
+message26=hosts
+message27=páginas
+message28=paginas diferentes
+message29=Acesso
+message30=Outras palavras
+message31=Pages not found
+message32=Erros HTTP
+message33=Versões Netscape
+message34=Versões MS Internet Explorer
+message35=Última Atualização
+message36=Conectado a partir de
+message37=Origem
+message38=Endereço direto / Favoritos
+message39=Origem Desconhecida
+message40=Link de um Buscador
+message41=Link de uma página externa (outros sites que não buscadores)
+message42=Link de uma página interna (outras páginas no mesmo site)
+message43=palavras usadas em buscadores 
+message44=Kb
+message45=Endereço IP não resolvido
+message46=SO Desconhecido (Campo Referer)
+message47=URLs solicitadas e não encontradas (HTTP code 404)
+message48=Endereço IP
+message49=Erro&nbsp;Hits
+message50=Browsers Desconhecidos(Campo Referer)
+message51=Buscadores Visitantes
+message52=visitas/visitante
+message53=Buscadores/Spiders visitantes
+message54=Ferramenta de análise de arquivos de log em tempo real para estatísticas avançadas
+message55=de
+message56=Páginas
+message57=Hits
+message58=Versões
+message59=SO
+message60=Jan
+message61=Fev
+message62=Mar
+message63=Abr
+message64=Mai
+message65=Jun
+message66=Jul
+message67=Ago
+message68=Set
+message69=Out
+message70=Nov
+message71=Dez
+message72=Navegação
+message73=Tipos de Arquivos
+message74=Atualiza Agora
+message75=Bytes
+message76=Retorna à página inicial
+message77=Primeiros(as)
+message78=dd mmm yyyy - HH:MM
+message79=Filtro
+message80=Lista completa
+message81=Hosts
+message82=Conhecido(a)(s)
+message83=Robôs
+message84=Dom
+message85=Seg
+message86=Ter
+message87=Qua
+message88=Qui
+message89=Sex
+message90=Sab
+message91=Dias da semana
+message92=Quem
+message93=Quando
+message94=Usuários autenticados
+message95=Min
+message96=Med
+message97=Max
+message98=Compressão Web
+message99=Banda economizada
+message100=Antes da compressão
+message101=Depois da compressão
+message102=Total
+message103=palavras-chave(s) diferente(s)
+message104=Páginas de entrada
+message105=Código
+
index 8908cd20142597fd371d4ebd7619323c640370cf..f7596687a548ddcbe1075fb994a4ec0078175b67 100644 (file)
@@ -73,7 +73,7 @@ message69=
 message70=¤Q¤@¤ë
 message71=¤Q¤G¤ë
 message72=ÂsÄý¾¹²Î­p
-message73=
+message73=¨C¤é²Î­p
 message74=¥ß§Y§ó·s
 message75=¦ì¤¸²Õ
 message76=¦^¨ì¥D­¶
index b5fbbc5efbf9813240426ce0e02254530b631d00..1fc9a03fd3f393d327865f01b33c85e3dd56bff4 100644 (file)
@@ -17,7 +17,7 @@ message13=V
 message14=Hledání
 message15=Procenta
 message16=Traffic
-message17=Domény/zemì
+message17=Domény / zemì
 message18=Náv¹tìvy
 message19=Stránky/URL
 message20=Hodiny
@@ -29,24 +29,24 @@ message25=N
 message26=hosts
 message27=stránek
 message28=rùzné stránky
-message29=Pøístup
+message29=Pøistup
 message30=Jiná slova
-message31=Nenalezené stránky
+message31=Pages not found
 message32=Chybové kódy HTTP 
 message33=Verze Netscape
 message34=Verze MS Internet Explorer
-message35=Poslední aktualizace
+message35=Last Update
 message36=Konekce z
 message37=Pùvod
 message38=Pøímá adresa / Oblíbené (Bookmark)
-message39=Neznámý pùvod
+message39=Odkaz z Newsgroup
 message40=Odkaz z Internetového vyhledávaèe
 message41=Odkaz z jiné stránky (jiné stránky ne¾ vyhledávaèe)
 message42=Odkaz z vlastní stránky (jiná stránka na serveru)
 message43=výrazy pou¾ité ve vyhledávaèi
 message44=Kb
 message45=Nepøelo¾ená IP adresa
-message46=Neznámý OS (polo¾ka Referer)
+message46=Neznámy OS (polo¾ka Referer)
 message47=Po¾adované, ale nenalezené URL (HTTP 404)
 message48=IP Addresa
 message49=Chyba&nbsp;Dotazù
@@ -72,7 +72,6 @@ message68=Z
 message69=Øíj
 message70=Lis
 message71=Pro
-message72=Navigation
-message73=
-message74=Aktualizovat
-message75=Bajtù
\ No newline at end of file
+message72=Czech cz.png
+message73=Daily statistics
+message74=Update now
index a272bc208a9c5313053842b7386b7b795bd2e010..2e7dfc1cb1640efd6d5b0fbbabbe9028e2c96b97 100644 (file)
@@ -1,86 +1,76 @@
 # German message file
 message0=Unbekannt
-message1=Unbekannte (IP konnte nicht aufgel&ouml;st werden )
+message1=IP konnte nicht aufgeloest werden
 message2=Sonstige
-message3=Details anzeigen
+message3=Details
 message4=Tag
 message5=Monat
 message6=Jahr
-message7=Statistik f&uuml;r
-message8=Erster Zugriff
-message9=Letzter Zugriff
-message10=Anzahl der Besuche
-message11=Unterschiedliche Besucher
+message7=Statistik ueber
+message8=Erster Besuch
+message9=Letzter Besuch
+message10=Anzahl der Besucher
+message11=Verschiedene Besucher
 message12=Besuch
-message13=Suchbegriff
-message14=H&auml;ufigkeit
+message13=Suchbegriffe
+message14=Haeufigkeit
 message15=Prozent
-message16=Datenvolumen
-message17=Domains/L&auml;nder
+message16=Traffic
+message17=Laender
 message18=Besucher
-message19=Seiten-URL
-message20=Stunden (Serverzeit)
+message19=Besuchte Seiten
+message20=Durchschn. Tagesverlauf
 message21=Browser
-message22=HTTP Fehlermeldungen
-message23=Verweise
+message22=HTTP Status
+message23=Referrer
 message24=Suchbegriffe
-message25=Domains/L&auml;nder der Besucher
-message26=Rechner
+message25=Laender aus denen die Besucher kamen
+message26=Hosts
 message27=Seiten
 message28=Unterschiedliche Seiten
 message29=Zugriffe
 message30=Weitere Suchbegriffe
-message31=Nicht gefundene Seiten
-message32=HTTP Fehlercodes
+message31=Pages not found
+message32=HTTP Status Meldungen
 message33=Netscape Versionen
-message34=Internet Explorer Versionen
-message35=Zuletzt aktualisiert
+message34=MS Internet Explorer Versionen
+message35=Last Update
 message36=Woher die Besucher kamen
-message37=Herkunft
-message38=Direkter Zugriff/Bookmarks
-message39=Herkunft unbekannt
-message40=Links von einer Internet-Suchmaschine
-message41=Links von einer externen Seite (keine Suchmaschinen)
-message42=Links von einer internen Seite innerhalb der Web Site
+message37=Ursprung
+message38=Direkter Zugriff / Bookmarks
+message39=Link von einer Newsgroup
+message40=Link von einer Suchmaschine
+message41=Link von einer ext. Seite (nicht Suchmaschine!)
+message42=Link von einer Seite innerhalb der Web Site
 message43=Suchbegriffen (Suchmaschinen)
-message44=kB
-message45=Unaufgel&ouml;ste IP Adressen
-message46=Unbekanntes Betriebssystem
-message47=Nicht auffindbare Seiten (Fehler 404)
-message48=IP Adresse
-message49=Fehlerhafte Zugriffe
-message50=Unbekannter Browser
-message51=Zugriffe durch Suchmaschinen
-message52=Besuche/Besucher
-message53=Robots/Spiders (Suchmaschinen)
-message54=Kostenloses Programm zur Echtzeitanalyse f&uuml;r moderne Webstatistiken
+message44=Kb
+message45=Unaufgeloeste IP Adresse
+message46=Unbekanntes Betriebssystem [Referer]
+message47=Nicht auffindbare Seiten [Error 404]
+message48=IP Addresse
+message49=Fehler / Hits
+message50=Unbekannter Browser [Referer]
+message51=Besuche von Robots / Spider
+message52=Besuche / Besucher
+message53=Besuche von Robots / Spider
+message54=Programm zur erweiterten Echtzeitanalyse von Log-Dateien
 message55=von
 message56=Seiten
-message57=Zugriffe
-message58=Versionen
-message59=Betriebssysteme
+message57=Hits
+message58=Ausführungen
+message59=Unbekanntes Betriebssystem
 message60=Jan
 message61=Feb
-message62=M&auml;rz
-message63=Apr
+message62=Mar
+message63=Abr
 message64=Mai
-message65=Juni
+message65=Jun
 message66=Juli
 message67=Aug
 message68=Sep
-message69=Okt
+message69=Oct
 message70=Nov
 message71=Dez
-message72=Navigation
-message73=
-message74=Jetzt aktualisieren
-message75=Bytes
-message76=Zur&uuml;ck zur Hauptseite
-message77=Top
-message78=dd.mm.yyyy - HH:MM
-message79=Filter
-message80=Gesamte Liste
-message81=Rechner
-message82=Bekannte
-message83=Robots
-
+message72=
+message73=Tag statistik
+message74=Update now
index 86004abdb690afabb9662debe3e3b2113d0b298b..d80eb719d90499310e25796c5e365fe9651bda5e 100644 (file)
@@ -34,11 +34,11 @@ message31=Ikke fundne sider
 message32=HTTP Error codes
 message33=Netscape versioner
 message34=IE versioner
-message35=
+message35=Sidst opdateret
 message36=Forbundet til websitet fra
 message37=Oprindelse
 message38=Direkte adgang / Bogmærker
-message39=
+message39=Links fra en nyhedsgruppe
 message40=Links fra en Internet Søge Maskine
 message41=Links fra en ekstern side (andre websites undtagen søge maskiner)
 message42=Links fra en intern side (anden side på samme site)
@@ -72,6 +72,5 @@ message69=Okt
 message70=Nov
 message71=Dec
 message72=
-message73=
-message74=Opdater
-message75=Bytes
\ No newline at end of file
+message73=Dag statistikker
+message74=Opdater
\ No newline at end of file
index 3dcbb483cc9d553a47ecc31120fea8b627d0a76f..99b3b7f1e4f0dc315f5c090d14fb83b542c5dfd7 100644 (file)
@@ -12,14 +12,14 @@ message9=Last visit
 message10=Number of visits
 message11=Unique visitors
 message12=Visit
-message13=different keywords
+message13=Keyword
 message14=Search
 message15=Percent
 message16=Traffic
 message17=Domains/Countries
 message18=Visitors
-message19=Pages-URL
-message20=Hours
+message19=Pages/URL
+message20=Hours (Server time)
 message21=Browsers
 message22=HTTP Errors
 message23=Referers
@@ -28,7 +28,7 @@ message25=Visitors domains/countries
 message26=hosts
 message27=pages
 message28=different pages
-message29=Viewed pages
+message29=Access
 message30=Other words
 message31=Pages not found
 message32=HTTP Error codes
@@ -38,11 +38,11 @@ message35=Last Update
 message36=Connect to site from
 message37=Origin
 message38=Direct address / Bookmarks
-message39=Origin unknown
+message39=Links from a Newsgroup
 message40=Links from an Internet Search Engine
 message41=Links from an external page (other web sites except search engines)
 message42=Links from an internal page (other page on same site)
-message43=Keywords used on search engines
+message43=keywords used on search engines
 message44=Kb
 message45=Unresolved IP Address
 message46=Unknown OS (Referer field)
@@ -71,37 +71,6 @@ message68=Sep
 message69=Oct
 message70=Nov
 message71=Dec
-message72=Navigation
-message73=Files type
+message72=
+message73=Day statistics
 message74=Update now
-message75=Bytes
-message76=Back to main page
-message77=Top
-message78=dd mmm yyyy - HH:MM
-message79=Filter
-message80=Full list
-message81=Hosts
-message82=Known
-message83=Robots
-message84=Sun
-message85=Mon
-message86=Tue
-message87=Wed
-message88=Thu
-message89=Fri
-message90=Sat
-message91=Days of week
-message92=Who
-message93=When
-message94=Authenticated users
-message95=Min
-message96=Average
-message97=Max
-message98=Web compression
-message99=Bandwith saved
-message100=Before compression
-message101=After compression
-message102=Total
-message103=different keyphrases
-message104=Entry pages
-message105=Code
\ No newline at end of file
index 82a5e2fd7b6a739afbde8500c01e676ba5e2936c..64fd04df6e5797741aa903119e22861785d4cfd2 100644 (file)
@@ -1,8 +1,8 @@
 # Spanish message file
 message0=Desconocido
-message1=de dirección IP desconocida
+message1=Dirección IP desconocida
 message2=Otros
-message3=Ver detalles
+message3=Vea detalles
 message4=Día
 message5=Mes
 message6=Año
@@ -14,39 +14,39 @@ message11=Visitantes distintos
 message12=Visita
 message13=Palabra clave (keyword)
 message14=Búsquedas
-message15=Porcentaje
+message15=Porciento
 message16=Tráfico
 message17=Dominios/Países
 message18=Visitantes
 message19=Páginas/URLs
-message20=Visitas por Horas
+message20=Horas
 message21=Navegadores
 message22=Errores
 message23=Enlaces (Links)
 message24=Palabra&nbsp;clave&nbsp;de&nbsp;búsqueda
-message25=Visitas por Dominios/Países
+message25=Dominios/Países de visitantes
 message26=servidores
 message27=páginas
 message28=páginas diferentes
-message29=Accesos
+message29=Acceso
 message30=Otras palabras
-message31=Paginas no encontradas
-message32=Códigos de errores del Protocolo HTTP
+message31=Pages not found
+message32=Códigos de Errores de Protocolo HTTP
 message33=Versiones de Netscape
 message34=Versiones de MS Internet Explorer
-message35=Última actualización
+message35=Last Update
 message36=Enlaces (links) al sitio
-message37=Origen del enlace
-message38=Desde dirección directa o Favoritos
-message39=Origen desconocido
+message37=Origen de enlace
+message38=Dirección directa / Favoritos
+message39=Enlaces desde Newsgroups
 message40=Enlaces desde algún motor de búsqueda
 message41=Enlaces desde páginas externas (exeptuando motores de búsqueda)
 message42=Enlaces desde páginas internas (otras páginas del sitio)
-message43=Palabras clave utilizadas por el motor de búsqueda
+message43=Palabras clave utilizada por el motor de búsqueda
 message44=Kb
 message45=Dirección IP no identificada
 message46=Sistema Operativo desconocido (campo de referencia)
-message47=URLs solicitadas pero no encontadas (código 404 del protocolo HTTP)
+message47=URLs necesarios pero no encontados (código 404 de protocolo HTTP)
 message48=Dirección IP
 message49=Hits&nbsp;erróneos
 message50=Navegadores desconocidos (campo de referencia)
@@ -58,7 +58,7 @@ message55=de
 message56=Páginas
 message57=Hits
 message58=Versiones
-message59=Sistemas Operativos
+message59=Sistema Operativo
 message60=Ene
 message61=Feb
 message62=Mar
@@ -71,37 +71,6 @@ message68=Sep
 message69=Oct
 message70=Nov
 message71=Dic
-message72=Navegación
-message73=Tipo de fichero
-message74=Actualizar ahora
-message75=Bytes
-message76=Volver a la página principal
-message77=Top
-message78=dd mmm yyyy - HH:MM
-message79=Filtro
-message80=Lista completa
-message81=Servidores
-message82=Conocidos
-message83=Robots
-message84=Dom
-message85=Lun
-message86=Mar
-message87=Mie
-message88=Jue
-message89=Vie
-message90=Sab
-message91=Dias de la semana
-message92=Quien
-message93=Cuando
-message94=Usuarios Autentificados
-message95=Min
-message96=Media
-message97=Max
-message98=Compresión Web
-message99=Ancho de banda ahorrado
-message100=Antes de la compresión
-message101=Despues de la compresión
-message102=Total
-message103=diferentes palabras clave
-message104=Pagina de entrada
-message105=Código
\ No newline at end of file
+message72=
+message73=Dia estadísticas
+message74=Update now
index 3cae72e7c5ce0b70ba0a5c84b82ae351581e9cdc..5f7f733b63c6fd0037b8c658ab37b2c3094b976d 100644 (file)
@@ -1,6 +1,6 @@
 # French message file
 message0=Inconnus
-message1=Inconnus (IP non résolue)
+message1=Inconnu (IP non résolue)
 message2=Autres
 message3=Voir détails
 message4=Jour
@@ -12,14 +12,14 @@ message9=Derni
 message10=Visites
 message11=Visiteurs différents
 message12=Visite
-message13=mots clé différents
+message13=Mot clé
 message14=Recherche
 message15=Pourcentage
 message16=Trafic
 message17=Domaines/Pays
 message18=Visiteurs
-message19=Pages-URL
-message20=Heures
+message19=Pages/URL
+message20=Heures (Heures du serveur)
 message21=Navigateurs
 message22=Erreurs HTTP
 message23=Origine/Referrer
@@ -28,7 +28,7 @@ message25=Domaines/pays visiteurs
 message26=des hôtes
 message27=des pages
 message28=pages différentes
-message29=Pages vues
+message29=Accès
 message30=Autres mots
 message31=Pages non trouvées
 message32=Codes Erreurs HTTP
@@ -38,22 +38,22 @@ message35=Derni
 message36=Connexions au site par
 message37=Origine de la connexion
 message38=Adresse directe / Bookmarks
-message39=Origine inconnue
+message39=Lien depuis un Newsgroup
 message40=Lien depuis un moteur de recherche Internet
 message41=Lien depuis une page externe (autres sites, hors moteurs de recherche)
 message42=Lien depuis une page interne (autre page du site)
-message43=Critères de recherches utilisés
+message43=des critères de recherches utilisés
 message44=Ko
-message45=Adresses IP non résolues
+message45=Adresses IP des visiteurs non identifiables (IP non résolue)
 message46=OS non reconnus (champ referer brut)
 message47=URLs du site demandées non trouvées (Code HTTP 404)
 message48=Adresse IP
 message49=Hits&nbsp;en&nbsp;échec
 message50=Navigateurs non reconnus (champ referer brut)
 message51=Robots visiteurs
-message52=visites/visiteur
+message52=visite/visiteur
 message53=Visiteurs Robots/Spiders
-message54=Analyseur de log libre pour statistiques Web avancées
+message54=Analyseur de log gratuit pour statistiques Web avancées
 message55=sur
 message56=Pages
 message57=Hits
@@ -71,37 +71,6 @@ message68=Sep
 message69=Oct
 message70=Nov
 message71=Déc
-message72=Navigation
-message73=Types de fichiers
+message72=
+message73=Statistiques par jour
 message74=Mise à jour immédiate
-message75=Octets
-message76=Retour page principale
-message77=Top
-message78=dd mmm yyyy - HH:MM
-message79=Filtre
-message80=Liste complète
-message81=Hôtes
-message82=Connus
-message83=Robots
-message84=Dim
-message85=Lun
-message86=Mar
-message87=Mer
-message88=Jeu
-message89=Ven
-message90=Sam
-message91=Jours de la semaine
-message92=Qui
-message93=Quand
-message94=Login utilises
-message95=Min
-message96=Moyenne
-message97=Max
-message98=Compression web
-message99=Bande-passante économisée
-message100=Avant compression
-message101=Après compression
-message102=Total
-message103=phrases clés différentes
-message104=Pages d'entrée
-message105=Code
\ No newline at end of file
diff --git a/wwwroot/cgi-bin/lang/awstats-ge.txt b/wwwroot/cgi-bin/lang/awstats-ge.txt
new file mode 100644 (file)
index 0000000..2e7dfc1
--- /dev/null
@@ -0,0 +1,76 @@
+# German message file
+message0=Unbekannt
+message1=IP konnte nicht aufgeloest werden
+message2=Sonstige
+message3=Details
+message4=Tag
+message5=Monat
+message6=Jahr
+message7=Statistik ueber
+message8=Erster Besuch
+message9=Letzter Besuch
+message10=Anzahl der Besucher
+message11=Verschiedene Besucher
+message12=Besuch
+message13=Suchbegriffe
+message14=Haeufigkeit
+message15=Prozent
+message16=Traffic
+message17=Laender
+message18=Besucher
+message19=Besuchte Seiten
+message20=Durchschn. Tagesverlauf
+message21=Browser
+message22=HTTP Status
+message23=Referrer
+message24=Suchbegriffe
+message25=Laender aus denen die Besucher kamen
+message26=Hosts
+message27=Seiten
+message28=Unterschiedliche Seiten
+message29=Zugriffe
+message30=Weitere Suchbegriffe
+message31=Pages not found
+message32=HTTP Status Meldungen
+message33=Netscape Versionen
+message34=MS Internet Explorer Versionen
+message35=Last Update
+message36=Woher die Besucher kamen
+message37=Ursprung
+message38=Direkter Zugriff / Bookmarks
+message39=Link von einer Newsgroup
+message40=Link von einer Suchmaschine
+message41=Link von einer ext. Seite (nicht Suchmaschine!)
+message42=Link von einer Seite innerhalb der Web Site
+message43=Suchbegriffen (Suchmaschinen)
+message44=Kb
+message45=Unaufgeloeste IP Adresse
+message46=Unbekanntes Betriebssystem [Referer]
+message47=Nicht auffindbare Seiten [Error 404]
+message48=IP Addresse
+message49=Fehler / Hits
+message50=Unbekannter Browser [Referer]
+message51=Besuche von Robots / Spider
+message52=Besuche / Besucher
+message53=Besuche von Robots / Spider
+message54=Programm zur erweiterten Echtzeitanalyse von Log-Dateien
+message55=von
+message56=Seiten
+message57=Hits
+message58=Ausführungen
+message59=Unbekanntes Betriebssystem
+message60=Jan
+message61=Feb
+message62=Mar
+message63=Abr
+message64=Mai
+message65=Jun
+message66=Juli
+message67=Aug
+message68=Sep
+message69=Oct
+message70=Nov
+message71=Dez
+message72=
+message73=Tag statistik
+message74=Update now
index e83e65cd928bb333195b84ec6bf4e60783266f62..f217f84a18ffebf2274767ccfc6353a1ab908a01 100644 (file)
@@ -35,11 +35,11 @@ message31=Pages not found
 message32=Êùäéêïß óöáëìÜôùí HTTP
 message33=Åêäüóåéò Netscape
 message34=Åêäüóåéò MS Internet Explorer
-message35=
+message35=Last Update
 message36=Óýíäåóç óôï ôüðï áðü
 message37=ÐñïÝëåõóç
 message38=Åõèýò óýíäåóìïò / ÁãáðçìÝíá
-message39=
+message39=Óýíäåóìïò áðü ÏìÜäá ÓõæçôÞóåùí
 message40=Óýíäåóìïò áðü Ìç÷áíÞ ÁíáæÞôçóçò ôïõ Internet
 message41=Óýíäåóìïò áðü åîùôåñéêÞ óåëßäá (Üëëïé äéêôõáêïß ôüðïé åêôüò ìç÷áíþí áíáæÞôçóçò)
 message42=Óýíäåóìïò áðü åóùôåñéêÞ óåëßäá (Üëëç óåëßäá óôïí ßäéï äéêôõáêü ôüðï)
@@ -73,6 +73,5 @@ message69=
 message70=ÍïÝ
 message71=Äåê
 message72=
-message73=
+message73=Daily statistics
 message74=Update now
-message75=Bytes
\ No newline at end of file
index 6a98b729cf323866dcfa6966640b09db76cb07f7..9982ad043b9ef33c3d6f157bb6daab0b3db3add3 100644 (file)
@@ -1,7 +1,7 @@
-# Hungarian message file (v1.5 - 2001.11.27 - gabor.funk@hunetkft.hu)
+# Hungarian message file (v1.00 - 2001.07.25 - gabor.funk@hunetkft.hu)
 PageCode=iso-8859-2
 message0=Ismeretlen
-message1=ismeretlen (feloldatlan ip)
+message1=Ismeretlen (feloldatlan ip)
 message2=Egyebek
 message3=Részletek
 message4=Nap
@@ -13,23 +13,23 @@ message9=Utols
 message10=Látogatások száma
 message11=Egyedi látogató
 message12=Látogatás
-message13=Különbözõ kulcsszavak
+message13=Kulcsszó
 message14=Keresés
 message15=Százalék
 message16=Forgalom
-message17=Tartományok-Országok
+message17=Tartományok/Országok
 message18=Látogatók
 message19=Oldalak/URL
-message20=Órák
+message20=Órák (szerveridõ)
 message21=Böngészõk
 message22=HTTP hibák
 message23=Hivatkozások
 message24=Keresési&nbsp;kulcsszavak
 message25=Látogatók tartományok/országok szerint
-message26=host
-message27=oldal
-message28=különbözõ oldal
-message29=letöltött oldalak
+message26=host-ok
+message27=oldalak
+message28=különbözõ oldalak
+message29=Hozzáférés
 message30=Egyéb szavak
 message31=Nem talált oldalak
 message32=HTTP hibakódok
@@ -39,11 +39,11 @@ message35=Utols
 message36=Csatlakozások származási helyei
 message37=Eredeti hely
 message38=Direkt elérés / könyvjelzõ
-message39=Ismeretlen eredetû
+message39=Hírcsoportból
 message40=Internet keresõkbõl
 message41=Linkek külsõ oldalakról (a keresõket kivéve)
 message42=Belsõ linkek (oldalon belül)
-message43=Keresõmotorokban használt kulcsszavak
+message43=keresõmotorokban használt kulcsszavak
 message44=Kb
 message45=Feloldatlan IP címek
 message46=Ismeretlen OS (Hivatkozó mezõ)
@@ -72,37 +72,8 @@ message68=Szept
 message69=Okt
 message70=Nov
 message71=Dec
-message72=Navigáció
-message73=Fájltípusok
+message72=Navigation
+message73=Nap statisztikái
 message74=Frissítés
 message75=Bájtok
-message76=Vissza a fõoldalra
-message77=TOP
-message78=yyyy mmm dd - HH:MM
-message79=Szûrõ
-message80=Teljes lista
-message81=Host-ok
-message82=ismert
-message83=Robotok
-message84=V
-message85=H
-message86=K
-message87=Sze
-message88=Cs
-message89=P
-message90=Szo
-message91=Heti bontás
-message92=Ki
-message93=Mikor
-message94=Bejelentkezett felhasználók
-message95=Min
-message96=Átlag
-message97=Max
-message98=Web tömörítés
-message99=Nyert sávszélesség
-message100=Tömörítés elõtt
-message101=Tömörítés után
-message102=Összesen
-message103=különbözõ kifejezés
-message104=Belépõ oldalak
-message105=Kód
\ No newline at end of file
+message76=Utolsó frissítés
\ No newline at end of file
index 95720535b29105a63ce8ad75b753aeb5ecee3461..b4dd7da6167a36d4bc37f623b7ea95aebd4fb26e 100644 (file)
@@ -72,7 +72,7 @@ message69=Okt
 message70=Nov
 message71=Des
 message72=
-message73=
+message73=Statistik Harian
 message74=Update Sekarang
 message75=Bytes
 message76=
\ No newline at end of file
index f47936a6dd75c8d0bba880faefa004ce48b255a3..b899ca179d6d5a35b993d226728ba8ed170e2057 100644 (file)
@@ -1,88 +1,76 @@
 # Italian message file
-# translated 2001-10-25 for version 3.1 by Francesco Potortì
-# with the assistance of the Italian Free Translation Project
-# 
-# Francesco Potorti` <pot@gnu.org>
-# <URL:http://www.linux.it/tp/>
-#
 message0=Sconosciuto
 message1=Sconosciuto (ip non risolto)
 message2=Altri
-message3=Dettaglio
+message3=Vedi dettagli
 message4=Giorno
 message5=Mese
 message6=Anno
 message7=Statistiche di
 message8=Prima visita
 message9=Ultima visita
-message10=Numero di visite
-message11=Visitatori diversi
-message12=Visita
+message10=Visite
+message11=Visitatori diverse
+message12=Visite
 message13=Parole chiave
 message14=Ricerche
-message15=Peso relativo
+message15=Percentuali
 message16=Traffico
-message17=Domini o paesi
+message17=Domini/Nazioni
 message18=Visitatori
-message19=Pagine e indirizzi
-message20=Ore (fuso orario del server)
-message21=Navigatori (browser)
+message19=Pagine/URL
+message20=Ore
+message21=Browsers
 message22=Errori HTTP
-message23=Provenienza
-message24=Ricerche per parole chiave
-message25=Domini o paesi dei visitatori
-message26=origini
-message27=pagine accedute
+message23=Origine/Riferimenti
+message24=Ricerche&nbsp;Parole chiave
+message25=Visitatori per domini/nazioni
+message26=hosts
+message27=pagine
 message28=pagine diverse
 message29=Accessi
 message30=Altre parole
-message31=Pagine non trovate
-message32=Codici di errore HTTP
-message33=Versioni Navigator
-message34=Versioni Internet Explorer
-message35=Ultimo aggiornamento
-message36=Provenienza delle connessioni
-message37=Provenienza
-message38=Accessi diretti o via segnalibro
-message39=Accessi di origine sconosciuta
-message40=Accessi da motore di ricerca
-message41=Accessi da pagina esterna (altri siti eccetto i motori di ricerca)
-message42=Accessi da pagina interna (altra pagina dello stesso sito)
-message43=parole chiave usati dai motori di ricerca
-message44=KiB
+message31=Pages not found
+message32=Codici di errori HTTP
+message33=Netscape versione
+message34=MS Internet Explorer versione
+message35=Last Update
+message36=Connesso al sito da
+message37=Origine
+message38=Indirizzo diretto / segnalibro
+message39=Link da un  Newsgroup
+message40=Link da un motore di ricerca
+message41=Link da una pagina esterna (altri siti eccetto i motori di ricerca)
+message42=Link da una pagina interna (altre pagine dello stesso sito)
+message43=Parole chiave usate dai motori di ricerca
+message44=Kb
 message45=Indirizzi IP non risolti
-message46=Sistemi operativi sconosciuti (campo Provenienza)
-message47=URL richiesta ma non trovata (codice HTTP 404)
+message46=Sistemi operativi non conosciuti (Campo di riferimento)
+message47=Richiesto un URL ma non trovato (HTTP codice 404)
 message48=Indirizzo IP
-message49=Accessi con errore
-message50=Navigatori sconosciuti (campo Provenienza)
-message51=Accessi di robot
-message52=Visite/visitatore
-message53=Accessi di robot e spider
-message54=Analizzatore libero in tempo reale di statistiche di accesso a server web
-message55=su
+message49=Errori&nbsp;Punteggio
+message50=Browser sconosciuti (Campo di riferimento)
+message51=Visite di robots
+message52=visite/visitatori
+message53=Visite di Robots/Spiders
+message54=Analizzatore gratuito in tempo reale dei file di log per statistiche avanzate
+message55=it
 message56=Pagine
-message57=Accessi
+message57=Hits
 message58=Versioni
-message59=Sistemi operativi
-message60=Gen
-message61=Feb
+message59=Sistema Operativo
+message60=Genn
+message61=Febb
 message62=Mar
 message63=Apr
-message64=Mag
+message64=Magg
 message65=Giu
 message66=Lug
 message67=Ago
-message68=Set
-message69=Ott
+message68=Sep
+message69=Oct
 message70=Nov
 message71=Dic
-message72=Navigazione
-message73=Statistiche giornaliere
-message74=Aggiorna
-message75=Byte
-message76=Pagina principale
-message77=Prime
-message78=dd mmm yyyy, ore HH:MM
-message79=Filtro
-message80=Elenco completo
\ No newline at end of file
+message72=
+message73=Giorno statistiche
+message74=Update now
index e6e2a9586c8aae036ba3bf8fc9b9ab0081d69f3f..1e93e24e770a85a8e398b1ebd033229ea1fb518a 100644 (file)
@@ -35,11 +35,11 @@ message31=
 message32=HTTP ¿¡·¯ ÄÚµå
 message33=³Ý½ºÄÉÀÌÇÁ ¹öÀü
 message34=MS ÀÎÅͳݠÀͽºÇ÷η¯ ¹öÀü
-message35=
+message35=Last Update
 message36=Á¢¼Ó »çÀÌÆ®º° Åë°è
 message37=ÁÖ¼Ò
 message38=Á÷Á¢ ÁÖ¼Ò / ºÏ¸¶Å©
-message39=
+message39=´º½ºÅ©·ì¿¡¼­ ¿¬°á
 message40=³»ºÎ °Ë»ö ¿£Áø¿¡¼­ ¿¬°á
 message41=¿ÜºÎÆäÀÌÁö¿¡¼­ ¿¬°á (°Ë»ö¿£ÁøÀ» Á¦¿ÜÇÑ ´Ù¸¥ À¥»çÀÌÆ®)
 message42=³»ºÎÆäÀÌÁö¿¡¼­ ¸µÅ©(°°Àº »çÀÌÆ®ÀÇ ´Ù¸¥ ÆäÀÌÁö)
@@ -73,6 +73,5 @@ message69=10
 message70=11¿ù
 message71=12¿ù
 message72=
-message73=
+message73=ÀÏÀÏ Åë°è
 message74=Update now
-message75=Bytes
\ No newline at end of file
diff --git a/wwwroot/cgi-bin/lang/awstats-lv.txt b/wwwroot/cgi-bin/lang/awstats-lv.txt
new file mode 100644 (file)
index 0000000..8feb6fb
--- /dev/null
@@ -0,0 +1,107 @@
+# Latvieðu valodas ziòojumu fils
+message0=Nezinâms
+message1=Nezinâms (neatpazîts ip)
+message2=Citi
+message3=Apskatît izvçrsti
+message4=Diena
+message5=Mçnesis
+message6=Gads
+message7=Statistika
+message8=Pirmais apmeklçjums
+message9=Pçdçjais apmeklçjums
+message10=Vizîðu skaits
+message11=Unikâlie apmeklçtâji
+message12=Apmeklçjums
+message13=atðíirîgs atslçgvârds
+message14=Meklçt
+message15=Procenti
+message16=Trafiks
+message17=Domaini/Valstis
+message18=Apmeklçtâji
+message19=Lapas-URL
+message20=Stundas
+message21=Pârlûkprogrammas
+message22=HTTP Kïûdas
+message23=Norâdîtâji
+message24=Meklçt&nbsp;Atslçgvârdus
+message25=Apmeklçtâju domaini/valstis
+message26=hosti
+message27=lapas
+message28=atðíirîgas lapas
+message29=Skatîtas lapas
+message30=Citi vârdi
+message31=Neatrastas lapas
+message32=HTTP Kïûdu kodi
+message33=Netscape versijas
+message34=IE versijas
+message35=Pçdçjais jauninâjums
+message36=Pievienoties saitei no
+message37=Orìinâli
+message38=Tieðâ adrese / Grâmatzîmes
+message39=Orìinâls nezinâms
+message40=Norâdes no Interneta Meklçðanas Saitçm
+message41=Norâdes no ârçjâm lapâm (citas web lapas izòemot meklçðanas saites)
+message42=Links from an internal page (cita lapa ðajâ paðâ saitç)
+message43=Atslçgvârdi kas lietoti meklçðanas saitçs
+message44=Kb
+message45=Neatpazîtas IP Addreses
+message46=Nezinâms OS (Norâdes Lauks)
+message47=Pieprasîts bet neatrasts URLs (HTTP kods 404)
+message48=IP Addrese
+message49=Kïuda&nbsp;Ðâvieni
+message50=Nezinâmi pârlûki (Norâdes lauks)
+message51=Apmeklçjuðie roboti
+message52=apmeklçjumi/apmeklçtâji
+message53=Roboti/Zirnekïi apmeklçtâji
+message54=Brîvs reâlâ laika logfailu analizators advancçtai web statistikai
+message55=no
+message56=Lapas
+message57=Ðâvieni
+message58=Versijas
+message59=Operâciju Sistçmas
+message60=Jan
+message61=Feb
+message62=Mar
+message63=Apr
+message64=Mai
+message65=Jûn
+message66=Jûl
+message67=Aug
+message68=Sep
+message69=Okt
+message70=Nov
+message71=Dec
+message72=Navigâcija
+message73=Filu tips
+message74=Atjaunot
+message75=Baiti
+message76=Atpakaï uz galveno lapu
+message77=Augða
+message78=dd mmm yyyy - HH:MM
+message79=Filtrs
+message80=Pilns saraksts
+message81=Hosti
+message82=Zinâms
+message83=Roboti
+message84=Sv
+message85=Pir
+message86=Ot
+message87=Tr
+message88=Ce
+message89=Pkt
+message90=Se
+message91=Nedçïas dienas
+message92=Kas
+message93=Kad
+message94=Autentificçtie lietotâji
+message95=Min
+message96=Vid
+message97=Maks
+message98=Web salîdzinâjums
+message99=Bandwith saved
+message100=Pirms salîdzinâðanas
+message101=Pçc salîdzinâðanas
+message102=Kopâ
+message103=Atðíirîgi atslçgvârdi
+message104=Iejas lapas
+message105=Kods
diff --git a/wwwroot/cgi-bin/lang/awstats-nb.txt b/wwwroot/cgi-bin/lang/awstats-nb.txt
new file mode 100644 (file)
index 0000000..edc4143
--- /dev/null
@@ -0,0 +1,107 @@
+# Norwegian message file, by Axel Wulff Sæther <axel@bigfoot.com>
+PageCode=iso-639-2
+message0=Ukjent
+message1=ukjente (fant ikke vertsnavn)
+message2=Andre
+message3=Vis detaljer
+message4=Dag
+message5=Måned
+message6=År
+message7=Statistikk for
+message8=Første besøk
+message9=Siste besøk
+message10=Antall på besøk
+message11=Unike gjester
+message12=Besøk
+message13=forskjellige søkeord
+message14=Søk
+message15=Prosent
+message16=Trafikk
+message17=Domene/land
+message18=Gjester
+message19=Sider/URL
+message20=Timer (tjenertid)
+message21=Nettlesere
+message22=HTTP-feil
+message23=Referenter
+message24=Søkeord
+message25=Domene/land
+message26=verter
+message27=sider
+message28=forskjellige sider
+message29=Viste sider
+message30=Andre ord
+message31=Manglende sider
+message32=HTTP-feilkoder
+message33=Netscape-versjoner
+message34=IE-versjoner
+message35=Siste oppdatering
+message36=Koplet til siden fra
+message37=Opphav
+message38=Direkteadresse/bokmerke
+message39=Ukjent opphav
+message40=Lenker fra søkemotorer
+message41=Lenker fra eksterne sider
+message42=Lenker fra interne sider
+message43=Søkeord brukt
+message44=Kb
+message45=Ukjent vertsnamn (IP-adresse)
+message46=Ukjent OS (referentfelt)
+message47=Manglende sider (HTTP-feilkode 404)
+message48=IP-adresse
+message49=Feiltreff
+message50=Ukjent nettleser (referentfelt)
+message51=Besøkende robotar
+message52=besøk/gjest
+message53=Robotbesøk
+message54=Gratis logganalysator for avansert webstatistikk
+message55=av
+message56=Sider
+message57=Treff
+message58=Versjoner
+message59=Operativsystem
+message60=Jan
+message61=Feb
+message62=Mar
+message63=Apr
+message64=Mai
+message65=Jun
+message66=Jul
+message67=Aug
+message68=Sep
+message69=Okt
+message70=Nov
+message71=Des
+message72=Navigasjon
+message73=Filtyper
+message74=Oppdater nå
+message75=Byte
+message76=Tilbake til hovedsida
+message77=øverste
+message78=yyyy-mm-dd - HH:MM
+message79=Filter
+message80=Full liste
+message81=Verter
+message82=kjente
+message83=Roboter
+message84=Sø.
+message85=Ma.
+message86=Ti.
+message87=On.
+message88=To.
+message89=Fr.
+message90=Lø.
+message91=Dager
+message92=Hvem
+message93=Når
+message94=Autentiserte brukere
+message95=Min.
+message96=Snitt
+message97=Maks.
+message98=Komprimering
+message99=Byte sendt
+message100=Ikke &nbsp;komprimert
+message101=Komprimert<br>(før/etter)
+message102=Komprimeringsrate
+message103=forskjellige søkeuttrykk
+message104=Kode
\ No newline at end of file
index fc52ade4f71bfc9f5147d224cee55c0798f40b62..ab6611b11ac137beef9151e823152edcd3f5929a 100644 (file)
@@ -1,77 +1,76 @@
 # Dutch message file
-message0=Onbekend
-message1=Onbekend (Onbekend ip)
-message2=Andere
-message3=Bekijk details
-message4=Dag
-message5=Maand
-message6=Jaar
-message7=Statistieken van
-message8=Eerste bezoek
-message9=Laatste bezoek
-message10=Aantal bezoeken
-message11=Unieke bezoekers
-message12=Bezoek
-message13=Trefwoord
-message14=Zoek
-message15=Procent
-message16=Traffic
-message17=Domeinen/Landen
-message18=Bezoekers
-message19=Pagina's/URL
-message20=Uren
-message21=Browsers
-message22=HTTP Foutmeldingen
-message23=Verwijzing
-message24=Zoek&nbsp;trefwoorden
-message25=Bezoekers domeinen/landen
-message26=hosts
-message27=pagina's
-message28=verschillende pagina's
-message29=Toegang
-message30=Andere woorden
-message31=Pages not found
-message32=HTTP foutmelding codes
-message33=Netscape versies
-message34=MS Internet Explorer versies
-message35=
-message36=Verbinding naar site vanaf
-message37=Herkomst
-message38=Direkt adres / Bookmarks
-message39=
-message40=Link vanuit een Internet Zoek Machine
-message41=Link vanuit een externe pagina (andere web sites behalve zoek machines)
-message42=Link vanuit een interne pagina (andere pagina van dezelfde site)
-message43=gebruikte trefwoorden bij zoek machines
-message44=Kb
-message45=niet vertaald  IP Adres
-message46=Onbekend OS (Referer veld)
-message47=Verplicht maar niet gvonden URLs (HTTP code 404)
-message48=IP Adres
-message49=Fout&nbsp;Hits
-message50=Onbekende browsers (Referer veld)
-message51=Bezoekende robots
-message52=bezoeken/bezoeker
-message53=Robots/Spiders bezoekers
-message54=Gratis realtime logbestand analyzer voor geavanceerde web statistieken
-message55=van
-message56=Pagina's
-message57=Hits
-message58=Versies
-message59=OS
-message60=Jan
-message61=Feb
-message62=Mar
-message63=Apr
-message64=May
-message65=Jun
-message66=Jul
-message67=Aug
-message68=Sep
-message69=Oct
-message70=Nov
-message71=Dec
-message72=Navigation
-message73=
-message74=Update now
-message75=Bytes
\ No newline at end of file
+message0][2]=Onbekend
+message1][2]=Onbekend (Onbekend ip)
+message2][2]=Andere
+message3][2]=Bekijk details
+message4][2]=Dag
+message5][2]=Maand
+message6][2]=Jaar
+message7][2]=Statistieken van
+message8][2]=Eerste bezoek
+message9][2]=Laatste bezoek
+message10][2]=Aantal bezoeken
+message11][2]=Unieke bezoekers
+message12][2]=Bezoek
+message13][2]=Trefwoord
+message14][2]=Zoek
+message15][2]=Procent
+message16][2]=Traffic
+message17][2]=Domeinen/Landen
+message18][2]=Bezoekers
+message19][2]=Pagina's/URL
+message20][2]=Uren
+message21][2]=Browsers
+message22][2]=HTTP Foutmeldingen
+message23][2]=Verwijzing
+message24][2]=Zoek&nbsp;trefwoorden
+message25][2]=Bezoekers domeinen/landen
+message26][2]=hosts
+message27][2]=pagina's
+message28][2]=verschillende pagina's
+message29][2]=Toegang
+message30][2]=Andere woorden
+message31][2]=Pages not found
+message32][2]=HTTP foutmelding codes
+message33][2]=Netscape versies
+message34][2]=MS Internet Explorer versies
+message35][2]=Last Update
+message36][2]=Verbinding naar site vanaf
+message37][2]=Herkomst
+message38][2]=Direkt adres / Bookmarks
+message39][2]=Link vanuit een nieuwsgroep
+message40][2]=Link vanuit een Internet Zoek Machine
+message41][2]=Link vanuit een externe pagina (andere web sites behalve zoek machines)
+message42][2]=Link vanuit een interne pagina (andere pagina van dezelfde site)
+message43][2]=gebruikte trefwoorden bij zoek machines
+message44][2]=Kb
+message45][2]=niet vertaald  IP Adres
+message46][2]=Onbekend OS (Referer veld)
+message47][2]=Verplicht maar niet gvonden URLs (HTTP code 404)
+message48][2]=IP Adres
+message49][2]=Fout&nbsp;Hits
+message50][2]=Onbekende browsers (Referer veld)
+message51][2]=Bezoekende robots
+message52][2]=bezoeken/bezoeker
+message53][2]=Robots/Spiders bezoekers
+message54][2]=Gratis realtime logbestand analyzer voor geavanceerde web statistieken
+message55][2]=van
+message56][2]=Pagina's
+message57][2]=Hits
+message58][2]=Versies
+message59][2]=OS
+message60][2]=Jan
+message61][2]=Feb
+message62][2]=Mar
+message63][2]=Apr
+message64][2]=May
+message65][2]=Jun
+message66][2]=Jul
+message67][2]=Aug
+message68][2]=Sep
+message69][2]=Oct
+message70][2]=Nov
+message71][2]=Dec
+message72][2]=
+message73][2]=Dag statistieken
+message74][2]=Update now
index bf33ee4f4ff6cba6e6624d283170ef8ae447d35c..4bff64894e584bbf74f088057bfe9b4428ddb988 100644 (file)
@@ -1,7 +1,7 @@
 # Norwegian Nynorsk message file, by Karl Ove Hufthammer <huftis@bigfoot.com>
-PageCode=iso-8859-1
+PageCode=iso-639
 message0=Ukjent
-message1=ukjente (fann ikkje vertsnamn)
+message1=Ukjent (fann ikkje vertsnamn)
 message2=Andre
 message3=Vis detaljar
 message4=Dag
@@ -13,7 +13,7 @@ message9=Siste bes
 message10=Talet på besøk
 message11=Unike gjestar
 message12=Besøk
-message13=forskjellige søkeord
+message13=Nøkkelord
 message14=Søk
 message15=Prosent
 message16=Trafikk
@@ -25,11 +25,11 @@ message21=Nettlesarar
 message22=HTTP-feil
 message23=Referentar
 message24=Søkeord
-message25=Domene/land
+message25=domene/land
 message26=vertar
 message27=sider
 message28=forskjellige sider
-message29=Viste sider
+message29=Tilgang
 message30=Andre ord
 message31=Manglande sider
 message32=HTTP-feilkodar
@@ -39,12 +39,12 @@ message35=Siste oppdatering
 message36=Kopla til sida frå
 message37=Opphav
 message38=Direkteadresse/bokmerke
-message39=Ukjent opphav
+message39=Lenkjer frå njusgruppe
 message40=Lenkjer frå søkemotorar
 message41=Lenkjer frå eksterne sider
 message42=Lenkjer frå interne sider
-message43=Søkeord brukt
-message44=Kb
+message43=søkeord brukt
+message44=KiB
 message45=Ukjent vertsnamn (IP-adresse)
 message46=Ukjent OS (referentfelt)
 message47=Manglande sider (HTTP-feilkode 404)
@@ -72,36 +72,6 @@ message68=Sep
 message69=Okt
 message70=Nov
 message71=Des
-message72=Navigasjon
-message73=Filtypar
+message72=
+message73=Dagleg statistikk
 message74=Oppdater no
-message75=Byte
-message76=Tilbake til hovudsida
-message77=øvste
-message78=yyyy-mm-dd - HH:MM
-message79=Filter
-message80=Full liste
-message81=Vertar
-message82=kjente
-message83=Robotar
-message84=Sø.
-message85=Må.
-message86=Ty.
-message87=On.
-message88=To.
-message89=Fr.
-message90=La.
-message91=Dagar
-message92=Kven
-message93=Når
-message94=Autentiserte brukarar
-message95=Min.
-message96=Snitt
-message97=Maks.
-message98=Komprimering
-message99=Byte sendt
-message100=Ikkje&nbsp;komprimert
-message101=Komprimert<br>(før/etter)
-message102=Komprimeringsrate
-message103=forskjellige søkeuttrykk
-message104=Kode
\ No newline at end of file
diff --git a/wwwroot/cgi-bin/lang/awstats-no.txt b/wwwroot/cgi-bin/lang/awstats-no.txt
new file mode 100644 (file)
index 0000000..efa5a49
--- /dev/null
@@ -0,0 +1,107 @@
+# Norwegian message file, by Axel Wulff Sæther <axel@bigfoot.com>
+PageCode=iso-8859-1
+message0=Ukjent
+message1=ukjente (fant ikke vertsnavn)
+message2=Andre
+message3=Vis detaljer
+message4=Dag
+message5=Måned
+message6=År
+message7=Statistikk for
+message8=Første besøk
+message9=Siste besøk
+message10=Antall på besøk
+message11=Unike gjester
+message12=Besøk
+message13=forskjellige søkeord
+message14=Søk
+message15=Prosent
+message16=Trafikk
+message17=Domene/land
+message18=Gjester
+message19=Sider/URL
+message20=Timer (tjenertid)
+message21=Nettlesere
+message22=HTTP-feil
+message23=Referenter
+message24=Søkeord
+message25=Domene/land
+message26=verter
+message27=sider
+message28=forskjellige sider
+message29=Viste sider
+message30=Andre ord
+message31=Manglende sider
+message32=HTTP-feilkoder
+message33=Netscape-versjoner
+message34=IE-versjoner
+message35=Siste oppdatering
+message36=Koplet til siden fra
+message37=Opphav
+message38=Direkteadresse/bokmerke
+message39=Ukjent opphav
+message40=Lenker fra søkemotorer
+message41=Lenker fra eksterne sider
+message42=Lenker fra interne sider
+message43=Søkeord brukt
+message44=Kb
+message45=Ukjent vertsnamn (IP-adresse)
+message46=Ukjent OS (referentfelt)
+message47=Manglende sider (HTTP-feilkode 404)
+message48=IP-adresse
+message49=Feiltreff
+message50=Ukjent nettleser (referentfelt)
+message51=Besøkende robotar
+message52=besøk/gjest
+message53=Robotbesøk
+message54=Gratis logganalysator for avansert webstatistikk
+message55=av
+message56=Sider
+message57=Treff
+message58=Versjoner
+message59=Operativsystem
+message60=Jan
+message61=Feb
+message62=Mar
+message63=Apr
+message64=Mai
+message65=Jun
+message66=Jul
+message67=Aug
+message68=Sep
+message69=Okt
+message70=Nov
+message71=Des
+message72=Navigasjon
+message73=Filtyper
+message74=Oppdater nå
+message75=Byte
+message76=Tilbake til hovedsida
+message77=øverste
+message78=yyyy-mm-dd - HH:MM
+message79=Filter
+message80=Full liste
+message81=Verter
+message82=kjente
+message83=Roboter
+message84=Sø.
+message85=Ma.
+message86=Ti.
+message87=On.
+message88=To.
+message89=Fr.
+message90=Lø.
+message91=Dager
+message92=Hvem
+message93=Når
+message94=Autentiserte brukere
+message95=Min.
+message96=Snitt
+message97=Maks.
+message98=Komprimering
+message99=Byte sendt
+message100=Ikke &nbsp;komprimert
+message101=Komprimert<br>(før/etter)
+message102=Komprimeringsrate
+message103=forskjellige søkeuttrykk
+message104=Kode
\ No newline at end of file
index 520355b6d6dd94fe5e274763fa7d8a351758068e..037f163285a33740a1bbbffbe6fc889ebe280608 100644 (file)
@@ -35,11 +35,11 @@ message31=Pages not found
 message32=Kody b³êdów HTTP
 message33=Wersje Netscape'a
 message34=Wersje MS IE
-message35=
+message35=Last Update
 message36=¬ród³a po³±czeñ
 message37=Pochodzenie
 message38=Dostêp bezpo¶redni lub z Ulubionych/Bookmarków
-message39=
+message39=Link z grupy dyskusyjnej
 message40=Link z zagranicznej wyszukiwarki internetowej
 message41=Link zewnêtrzny
 message42=Link wewnêtrzny (z serwera na którym jest strona)
@@ -73,6 +73,5 @@ message69=Pa
 message70=Listopad
 message71=Grudzieñ
 message72=
-message73=
+message73=Dzieñ Statystyki
 message74=Update now
-message75=Bytes
\ No newline at end of file
diff --git a/wwwroot/cgi-bin/lang/awstats-po.txt b/wwwroot/cgi-bin/lang/awstats-po.txt
new file mode 100644 (file)
index 0000000..037f163
--- /dev/null
@@ -0,0 +1,77 @@
+# Polish message file
+PageCode=iso-8859-2
+message0=Nieznany
+message1=Nieznany (brak odwzorowania IP w DNS)
+message2=Inni
+message3=Szczegó³y...
+message4=Dzieñ
+message5=Miesi±c
+message6=Rok
+message7=Statystyki
+message8=Pierwsza wizyta
+message9=Ostatnia wizyta
+message10=Ilo¶æ wizyt
+message11=Unikalnych go¶ci
+message12=wizyt
+message13=S³owo kluczowe
+message14=Szukanych
+message15=Procent
+message16=Traffic
+message17=Domeny/Kraje
+message18=Go¶cie
+message19=Stron/URL-i
+message20=Rozk³ad godzinny
+message21=Przegl±darki
+message22=B³êdy HTTP
+message23=Referenci
+message24=Wyszukiwarki&nbsp;-&nbsp;s³owa&nbsp;kluczowe
+message25=Domeny/narodowo¶æ Internautów
+message26=hosty
+message27=strony
+message28=ró¿nych stron
+message29=Dostêp
+message30=Inne s³owa
+message31=Pages not found
+message32=Kody b³êdów HTTP
+message33=Wersje Netscape'a
+message34=Wersje MS IE
+message35=Last Update
+message36=¬ród³a po³±czeñ
+message37=Pochodzenie
+message38=Dostêp bezpo¶redni lub z Ulubionych/Bookmarków
+message39=Link z grupy dyskusyjnej
+message40=Link z zagranicznej wyszukiwarki internetowej
+message41=Link zewnêtrzny
+message42=Link wewnêtrzny (z serwera na którym jest strona)
+message43=S³owa kluczowe u¿yte w wyszukiwarkach internetowcyh
+message44=Kb
+message45=Nieznany (brak odwzorowania IP w DNS)
+message46=Nieznany system operacyjny
+message47=Nie znaleziony (B³±d HTTP 404)
+message48=Adres IP
+message49=Ilo¶æ&nbsp;b³êdów
+message50=Nieznane przegl±darki
+message51=Roboty sieciowe
+message52=wizyt/go¶ci
+message53=Roboty sieciowe
+message54=Darmowy analizator logów on-line
+message55=z
+message56=Strony
+message57=¯±dania
+message58=Wersje
+message59=Systemy operacyjne
+message60=Styczeñ
+message61=Luty
+message62=Marzec
+message63=Kwiecieñ
+message64=Maj
+message65=Czerwiec
+message66=Lipiec
+message67=Sierpieñ
+message68=Wrzesieñ
+message69=Pa¼dziernik
+message70=Listopad
+message71=Grudzieñ
+message72=
+message73=Dzieñ Statystyki
+message74=Update now
index 4b6f6d19121a32f0a563527da749f9952cd76093..9387e3dc09f3193313e2a8c6ab4ba9071eeb81a5 100644 (file)
@@ -34,11 +34,11 @@ message31=Pages not found
 message32=Erros HTTP
 message33=Versões Netscape
 message34=Versões MS Internet Explorer
-message35=
+message35=Last Update
 message36=Connectado a partir de
 message37=Origem
 message38=Endereço directo / Favoritos
-message39=
+message39=Link de um  Newsgroup
 message40=Link de um Motor de Busca
 message41=Link de uma página externa (outros sites que não motores de busca)
 message42=Link de uma página interna (outras páginas no mesmo site)
@@ -72,6 +72,5 @@ message69=Out
 message70=Nov
 message71=Dez
 message72=
-message73=
+message73=Daily statistics
 message74=Update now
-message75=Bytes
index 08242ff342f44e6b268965fcf25257df5f7de496..767d69246e7974070c95aad03c91c9198a671bb2 100644 (file)
@@ -71,37 +71,9 @@ message68=
 message69=Îêò
 message70=Íîÿ
 message71=Äåê
-message72=Ïîñåòèòåëè
-message73=Òèïû ôàéëîâ
+message72=
+message73=Ñòàòèñòèêà çà äåíü
 message74=Îáíîâèòü
 message75=Bytes
-message76=Âîçâðàò ê ãëàâíîé ñòðàíèöå
-message77=Òîï
-message78=dd mmm yyyy - HH:MM
-message79=Ôèëüòåð
-message80=Âåñü ñïèñîê
-message81=Õîñòû
-message82=Èçâåñòíûå
-message83=Ðîáîòû
-message84=Âñ
-message85=Ïí
-message86=Âò
-message87=Ñð
-message88=×ò
-message89=Ïò
-message90=Ñá
-message91=Äíè íåäåëè
-message92=Êòî
-message93=Êîãäà
-message94=Ïàðîëüíûå ïîñåòèòåëè
-message95=Ìèíèìàëüíî
-message96=Ñðåäíåå
-message97=Ìàêñèìàëüíî
-message98=Ñæàòèå
-message99=Ñîõðàíåííûé îáúåì
-message100=Ïåðåä êîìïðåññèåé
-message101=Ïîñëå êîìïðåñèè
-message102=Èòîã
-message103=Ðàçëè÷íûå êëþ÷åâûå ñëîâà
-message104=Ïðîñìîòðåííûå ñòðàíèöû
-message105=Àäðåñ
\ No newline at end of file
+message76=Ïîñëåäíåå îáíîâëåíèå
+message77=Ïðî÷èå ñàéòû
\ No newline at end of file
index ac0c5320367f28442ea7959e3f950705add41c24..8d68f7f1bcaac3702bf3ed7bdd01f3506ce3545f 100644 (file)
@@ -6,7 +6,7 @@ message3=Visa detaljer
 message4=Dag
 message5=M&aring;nad
 message6=&Aring;r
-message7=Statistik f&ouml;r 
+message7=Statistik av
 message8=F&ouml;rsta bes&ouml;k
 message9=Senaste bes&ouml;k
 message10=Antal bes&ouml;k
@@ -19,7 +19,7 @@ message16=Trafik
 message17=Dom&auml;n/L&auml;nder
 message18=Bes&ouml;kare
 message19=Sidor/URL
-message20=Tidpunkt (Servertid) 
+message20=Timmar (Servertid)
 message21=Webbl&auml;sare
 message22=HTTP Fel
 message23=Refererande sidor
@@ -31,14 +31,14 @@ message28=olika sidor
 message29=Access
 message30=&Ouml;vriga ord
 message31=Sidan hittades inte
-message32=HTTP-Felmeddelanden
+message32=HTTP Felmeddelanden
 message33=Versioner av Netscape 
 message34=Versioner av IE
-message35=Senaste uppdatering 
+message35=Senaste updatering
 message36=Bes&ouml;karna n&aring;dde siten genom
 message37=Ursprung
 message38=Direkt adress / Bokm&auml;rken
-message39=
+message39=L&auml;nkar fr&aring;n nyhetsgrupper
 message40=L&auml;nkar fr&aring;n s&ouml;kmotorer
 message41=L&auml;nkar fr&aring;n externa sidor  (andra webbsidor med undantag f&ouml;r s&ouml;kmotorer)
 message42=L&auml;nkar fr&aring;n interna sidor (annan sida p&aring; samma sajt)
@@ -53,7 +53,7 @@ message50=Ok&auml;nda webbl&auml;sare (Referer-f&auml;lt)
 message51=Bes&ouml;kande webbrobotar/spindlar
 message52=bes&ouml;k/bes&ouml;kare
 message53=Bes&ouml;kande webbrobotar/spindlar
-message54=Gratis logfilsanalysator f&ouml;r avancerad realtids webstatistik
+message54=Fri logfilsanalysator f&ouml;r avancerad webstatistik i realtid
 message55=av
 message56=Sidor
 message57=Tr&auml;ffar
@@ -72,7 +72,7 @@ message69=Okt
 message70=Nov
 message71=Dec
 message72=
-message73=
-message74=Uppdatera nu
+message73=Dagstatistik
+message74=Updatera nu
 message75=Bytes
-message76=
\ No newline at end of file
+message76=Senaste updatering
\ No newline at end of file
diff --git a/wwwroot/cgi-bin/lang/awstats-sp.txt b/wwwroot/cgi-bin/lang/awstats-sp.txt
new file mode 100644 (file)
index 0000000..64fd04d
--- /dev/null
@@ -0,0 +1,76 @@
+# Spanish message file
+message0=Desconocido
+message1=Dirección IP desconocida
+message2=Otros
+message3=Vea detalles
+message4=Día
+message5=Mes
+message6=Año
+message7=Estadísticas del sitio
+message8=Primera visita
+message9=Última visita
+message10=Número de visitas
+message11=Visitantes distintos
+message12=Visita
+message13=Palabra clave (keyword)
+message14=Búsquedas
+message15=Porciento
+message16=Tráfico
+message17=Dominios/Países
+message18=Visitantes
+message19=Páginas/URLs
+message20=Horas
+message21=Navegadores
+message22=Errores
+message23=Enlaces (Links)
+message24=Palabra&nbsp;clave&nbsp;de&nbsp;búsqueda
+message25=Dominios/Países de visitantes
+message26=servidores
+message27=páginas
+message28=páginas diferentes
+message29=Acceso
+message30=Otras palabras
+message31=Pages not found
+message32=Códigos de Errores de Protocolo HTTP
+message33=Versiones de Netscape
+message34=Versiones de MS Internet Explorer
+message35=Last Update
+message36=Enlaces (links) al sitio
+message37=Origen de enlace
+message38=Dirección directa / Favoritos
+message39=Enlaces desde Newsgroups
+message40=Enlaces desde algún motor de búsqueda
+message41=Enlaces desde páginas externas (exeptuando motores de búsqueda)
+message42=Enlaces desde páginas internas (otras páginas del sitio)
+message43=Palabras clave utilizada por el motor de búsqueda
+message44=Kb
+message45=Dirección IP no identificada
+message46=Sistema Operativo desconocido (campo de referencia)
+message47=URLs necesarios pero no encontados (código 404 de protocolo HTTP)
+message48=Dirección IP
+message49=Hits&nbsp;erróneos
+message50=Navegadores desconocidos (campo de referencia)
+message51=Visitas de Robots
+message52=Visitas/Visitante
+message53=Visitas de Robots/Spiders (indexadores)
+message54=Analizador gratuito de 'log' para estadísticas Web avanzadas
+message55=de
+message56=Páginas
+message57=Hits
+message58=Versiones
+message59=Sistema Operativo
+message60=Ene
+message61=Feb
+message62=Mar
+message63=Abr
+message64=May
+message65=Jun
+message66=Jul
+message67=Ago
+message68=Sep
+message69=Oct
+message70=Nov
+message71=Dic
+message72=
+message73=Dia estadísticas
+message74=Update now
index 377937eaa4d15e8e2c4a8cbd774d4541cedb4697..7d40054a0f62ad7d55f2de0753dbe8638e3f41d2 100644 (file)
@@ -1,17 +1,17 @@
        <DIV CLASS="CTooltip" ID="tt1">
-       Ein neuer Besucher wird definiert als jeder neue <b>Besucher</b>, der eine Seite abgerufen hat und der auf Ihre Web Site in den letzten <b>#VisitTimeOut# min.</b> nicht zugegriffen hat.
+       Ein neuer Besucher wird definiert als jeder neue <b>Besucher</b>, der eine Seite aufgerufen hat und der auf Ihre Web Site in den letzten <b>#VisitTimeOut# min.</b> nicht zugegriffen hat.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt2">
        Anzahl der Rechner (<b>IP-Adressen</b>), die Ihre Web Site besuchten und mindestens eine <b>Seite</b> aufgerufen haben.<br>
        Diese Anzahl entspricht der Zahl an <b>unterschiedlichen physikalischen Personen</b>, die Ihre Web Site an irgendeinem Tag besuchten.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt3">
-       Anzahl der insgesamt <b>angezeigten Seiten</b> Ihrer Web Site (Summe aller Zugriffe von allen Besuchern).<br>
-       Diese Zahl unterscheidet sich von den &quot;Hits&quot;, da nur HTML Seiten und keine Grafiken oder andere Dateien gez&auml;hlt werden.
+       Anzahl der insgesamt <b>angezeigten Seiten</b> Ihrer Web Site (Summe aller Besuche von allen Besuchern).<br>
+       Diese Zahl unterscheidet sich von den &quote;Hits&quote;, da nur HTML Seiten und keine Grafiken oder andere Dateien gez&auml;hlt werden.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt4">
        Anzahl der insgesamt <b>angezeigten</b> oder <b>heruntergeladenen Seiten, Grafiken, Dateien</b> Ihrer Web Site.<br>
-       Diese Zahl wird nur als Referenz angegeben, da meistens die Anzahl der angezeigten &quot;Seiten&quot; f&uuml; Marketingzwecke bevorzugt wird.
+       Diese Zahl wird nur als Referenz angegeben, da meistens die Anzahl der angezeigten &quote;Seiten&quote; f&uuml; Marketingzwecke bevorzugt wird.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt5">
        Dieser Wert entspricht der Menge an Daten, die aufgrund aller <b>Seiten</b>, <b>Grafiken</b> und <b>Dateien</b> Ihrer Web Site &uuml;bertragen worden sind.
index a643763d9174c703823f7293ae5f71a6bcc69cbd..d961d97d8b9b853e05938ab979d13e03d023abe1 100644 (file)
        This piece of data is provided as a reference only, since the number of "pages" viewed is often prefered for marketing purposes.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt5">
-       This piece of information refers to the amount of data downloaded by all <b>pages</b>, <b>images</b> and <b>files</b> within your site.<br>
-       Units are in Kb, Mb or Gb (KiloBytes, MegaBytes or GigaBytes)
+       This piece of information refers to the amount of data downloaded by all <b>pages</b>, <b>images</b> and <b>files</b> within your site measured in KBs.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt13">
        #PROG# recognizes each access to your site after a <b>search</b> from the <b>#SearchEnginesArray# most popular Internet Search Engines and Directories</b> (such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
        </DIV>
        <DIV CLASS="CTooltip" ID="tt14">
-       List of all <b>external pages</b> which were used to link (and enter) to your site (Only the <b>#MaxNbOfRefererShown#</b> most often used external pages are shown).
+       List of all <b>external pages</b> which were used to link (or eneter) to your site (Only the <b>#MaxNbOfRefererShown#</b> most often used external pages are shown.
        Links used by the results of the search engines are excluded here because they have already been included on the previous line within this table.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt15">
        (Keywords from the <b>#SearchEnginesArray#</b> most popular Search Engines and Directories are recognized by #PROG#, such as Yahoo, Altavista, Lycos, Google, Voila, etc...).
        </DIV>
        <DIV CLASS="CTooltip" ID="tt16">
-       Robots (sometimes refer to Spiders) are <b>automatic computer visitors</b> used by many search engines that scan your web site to index it and rank it, collect statistics on Internet Web sites and/or see if your site is still online.<br>
+       Robots (sometimes refer to Spiders) are <b>automatic computer visitors</b> used by many search engines that scan your web site to (1) index it and rank it, (2) collect statistics on Internet Web sites and/or (3) see if your site is still online.<br>
        #PROG# is able to recognize up to <b>#RobotArray#</b> robots.
        </DIV>
-       <DIV CLASS="CTooltip" ID="tt17">
-       All time related statistics are based on server time.<br>
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt18">
-       Here, reported data are: <b>average values</b> (calculated from all data between the first and last visit)
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt19">
-       Here, reported data are: <b>cumulative sums</b> (calculated from all data between the first and last visit)
-       </DIV>
 
        <DIV CLASS="CTooltip" ID="tt201"> No description for this error. </DIV>
        <DIV CLASS="CTooltip" ID="tt202"> Request was understood by server but will be processed later. </DIV>
        <DIV CLASS="CTooltip" ID="tt204"> Server has processed the request but there is no document to send. </DIV>
        <DIV CLASS="CTooltip" ID="tt206"> Partial content. </DIV>
-       <DIV CLASS="CTooltip" ID="tt301"> Requested document was moved and is now at another address given in answer. </DIV>
+       <DIV CLASS="CTooltip" ID="tt301"> Requested document was moved and is now at another address given in awnswer. </DIV>
        <DIV CLASS="CTooltip" ID="tt302"> No description for this error. </DIV>
        <DIV CLASS="CTooltip" ID="tt400"> Syntax error, server didn't understand request. </DIV>
        <DIV CLASS="CTooltip" ID="tt401"> Tried to reach an <b>URL where a login/password pair was required</b>.<br>A high number within this item could mean that someone (such as a hacker) is attempting to crack, or enter into your site (hoping to enter a secured area by trying different login/password pairs, for instance). </DIV>
index fad4d861322365004e56000eda8086dd8fbb08b5..4f77b02cc0a3cf8ba33707dabe31aef056ce0568 100644 (file)
@@ -1,9 +1,9 @@
        <DIV CLASS="CTooltip" ID="tt1">
-       Se considera un nueva vista por <b>cada nuevo visitante</b> que consulta una página y que no haya accedido al sitio en los últimos <b>#VisitTimeOut# mins.</b>.
+       Se considera un nueva vista por <b>cada nuevo visitante</b> que consulte una página y que no haya accesado el sitio en los últimos <b>#VisitTimeOut# mins.</b>.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt2">
        Número de Servidores (<b>direcciones IP</b>) que entran a un sitio (y que por lo menos visitan una <b>página</b>).<br>
-       Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accedido al sitio en un día.
+       Esta cifra refleja el número de <b>personas físicas diferentes</b> que hayan accesado al sitio en un día.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt3">
        Número de ocasiones que una <b>página</b> del sitio ha sido <b>vista</b> (La suma de todos los visitantes incluyendo múltiples visitas).<br>
        <DIV CLASS="CTooltip" ID="tt401"> Número de intentos por acceder un <b>URL que exige una combinación usuario/contraseña que ha sido invalida.</b>.<br>Un número de intentos muy elevado pudiera sugerir la posibilidad de que un hacker (o pirata) ha intentado entrar a una zona restringida del sitio (p.e., intentando múltiples combinaciones de usuario/contraseña). </DIV>
        <DIV CLASS="CTooltip" ID="tt403"> Número de intentos por acceder un <b>URL configurado para no ser accesible, aún con una combinación usuario/contraseña</b> (p.e., un URL previamente definido como "no navegable"). </DIV>
        <DIV CLASS="CTooltip" ID="tt404"> Número de intentos por acceder un <b>URL inexistente</b>. Frecuentemente, éstos se refieren ya sea a un enlace (link) inválido o a un error mecanográfico cuando el visitante tecleó el URL equivocado. </DIV>
-       <DIV CLASS="CTooltip" ID="tt408"> El servidor ha tardado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado. </DIV>
+       <DIV CLASS="CTooltip" ID="tt408"> El servidor ha tomado <b>demasiado tiempo</b> para responder a una solicitud. Frecuentemente se debe ya sea a un programa CGI muy lento, el cual tuvo que ser abandonado por el servidor, o bien por un servidor sobre-saturado. </DIV>
        <DIV CLASS="CTooltip" ID="tt500"> Error interno. Este error generalmente es causado por una terminación anormal o prematura de un programa CGI (p.e., un CGI corrompido o dañado). </DIV>
        <DIV CLASS="CTooltip" ID="tt501"> Solicitud desconocida por el servidor. </DIV>
        <DIV CLASS="CTooltip" ID="tt502"> Código retornado por un servidor de protocolo HTTP el cual funge como proxy o puente (gateway) cuando el servidor objetivo no funciona o no interpreta adecuadamente la solicitud del cliente (o visitante). </DIV>
        <DIV CLASS="CTooltip" ID="tt503"> Error interno del servidor. </DIV>
-       <DIV CLASS="CTooltip" ID="tt504"> Pasarela fuera de linea. </DIV>
+       <DIV CLASS="CTooltip" ID="tt504"> Gateway time-out. </DIV>
        <DIV CLASS="CTooltip" ID="tt505"> Versión de protocolo HTTP no soportada. </DIV>
index 3a1fcd81309ddfd0b05428b4cd1f7211e4910221..ac9a0031c59ecde7db2baeb81a667a748e866ddc 100644 (file)
@@ -14,7 +14,7 @@
        Ce compteur est donné à titre indicatif, le compteur "pages" etant préféré.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt5">
-       Nombre d'<b>octets</b> téléchargés lors des visites du site.<br>
+       Nombre de <b>kilo octets</b> téléchargé lors des visites du site.<br>
        Il s agit aussi bien du volume de données du au chargement des <b>pages</b> et <b>images</b> que des <b>fichiers</b> téléchargés.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt13">
        Les robots sont des <b>automates visiteurs</b> scannant le site dans le but de l indexer, d obtenir des statistiques sur les sites Web Internet ou de vérifier sa disponibilié.<br>
        #PROG# reconnait <b>#RobotArray#</b> robots.
        </DIV>
-       <DIV CLASS="CTooltip" ID="tt17">
-       Toutes les statistiques en rapport avec le temps sont basées sur les heures du serveur.<br>
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt18">
-       Ici les données rapportées sont des: <b>valeurs moyennes</b> (calculées à partir des données entre la première et dernière visite)
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt19">
-       Ici les données rapportées sont des: <b>sommes cumulées</b> (calculées à partir des données entre la première et dernière visite)
-       </DIV>
 
        <DIV CLASS="CTooltip" ID="tt201"> Contenu partiel renvoyé. </DIV>
        <DIV CLASS="CTooltip" ID="tt202"> La requête a été enregistrée par le serveur mais sera exécutée plus tard. </DIV>
index e44f20b42dcfb4b934274e1c6c3d11a7388e55e7..30f75afc273a7368b352e976ae68b77be3e30fb1 100644 (file)
@@ -1,61 +1,51 @@
- <DIV CLASS="CTooltip" ID="tt1">
- Új látogatásnak számít minden olyan új <b>beérkezett látogató</b> aki megtekint egy oldalt és a legutolsó látogatása óta eltelt legalább <b>#VisitTimeOut# perc</b>.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt2">
- Azon egyedi számítógépek száma (<b>IP címek</b>) akik az oldalon jártak (és legalább egy <b>oldalt</b> megnéztek).<br>
- Ez az adat a <b>fizikailag különbözõ gépekre</b> vonatkozik ahonnan az oldalt látogatták bármelyik nap.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt3">
- Az <b>oldal</b> összesített <b>találatai</b> (Összes látogató összes látogatása).<br>
- Ez annyiban különbözik a "találatok"-tól, hogy csak a HTML oldalak találatait összesíti, a képeket és egyéb fájlokat nem.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt4">
- <b>Oldalak, képek, fájlok</b> összesített <b>találatai</b> és <b>letöltései</b>.<br>
- Ez az összesítés csak referencia célokat szolgál, hiszen marketing szempontból az "oldalak találatai" adat az érdekesebb.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt5">
- Ez az adat az összes letöltött adatmennyiséget jelzi beleértve az összes <b>oldalt</b>, <b>képet</b> és <b>fájlt</b>
-  kilobájt, megabájt illetve gigabájt-ban (Kb, Mb, Gb).
- </DIV>
- <DIV CLASS="CTooltip" ID="tt13">
- Az #PROG# felismeri, ha az oldalakat a <b>#SearchEnginesArray# legismertebb keresõprogramok egyikén keresztül érték el</b> (például Yahoo, Altavista, Lycos, Google, Voila, stb...).
- </DIV>
- <DIV CLASS="CTooltip" ID="tt14">
- Az olyan <b>külsõ oldalak</b> listája, amely erre a honlapra mutat, vagy rajtuk keresztül érkezett a kérés (Csak a leggyakoribb <b>#MaxNbOfRefererShown#</b> külsõ oldal).
- A keresõkön keresztül érkezett találatok itt nincsenek listázva, azok az elõzõ részben találhatóak.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt15">
- Ebben a táblázatban találhatóak a keresõprogramokban leggyakrabban használt <b>kulcsszavakat</b> amelyeken keresztül ezen honlapot megtalálták.
- (Az #PROG# a <b>#SearchEnginesArray#</b> leggyakoribb keresõmotort ismeri. Például Yahoo, Altavista, Lycos, Google, Voila, stb...).
- </DIV>
- <DIV CLASS="CTooltip" ID="tt16">
- A robot-ok (spider-nek vagy webcrawler-nek is mondják) <b>automatikus számítógép látogatók</b> melyet számos keresõprogram használ arra hogy az oldalt átnézze, index-elje és kategorizálja, statisztikát gyûjtsön a weboldalakról és/vagy megnézze, hogy a honlap még mindig elérhetõ-e.<br>
- Az #PROG# <b>#RobotArray#</b> különbözõ robotot ismer fel.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt17">
- Minden itt feltûntetett idõnek a szerveridõ szolgált alapul.
- </DIV>
- <DIV CLASS="CTooltip" ID="tt18">
- Az itteni adat <b>átlagos érték</b> (az elsõ és az utolsó látogatás közötti idõszakra)
- </DIV>
- <DIV CLASS="CTooltip" ID="tt19">
- Az itteni adat <b>összegzett adat</b> (az elsõ és az utolsó látogatás közötti idõszakra)
- </DIV>
+       <DIV CLASS="CTooltip" ID="tt1">
+       Új látogatásnak számít minden olyan új <b>beérkezett látogató</b> aki megtekint egy oldalt és a legutolsó látogatása óta eltelt legalább <b>#VisitTimeOut# perc</b>.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt2">
+       Azon egyedi számítógépek száma (<b>IP címek</b>) akik az oldalon jártak (és legalább egy <b>oldalt</b> megnéztek).<br>
+       Ez az adat a <b>fizikailag különbözõ gépekre</b> vonatkozik ahonnan az oldalt látogatták bármelyik nap.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt3">
+       Az <b>oldal</b> összesített <b>találatai</b> (Összes látogató összes látogatása).<br>
+       Ez annyiban különbözik a "találatok"-tól, hogy csak a HTML oldalak találatait összesíti, a képeket és egyéb fájlokat nem.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt4">
+       <b>Oldalak, képek, fájlok</b> összesített <b>találatai</b> és <b>letöltései</b>.<br>
+       Ez az összesítés csak referencia célokat szolgál, hiszen marketing szempontból az "oldalak találatai" adat az érdekesebb.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt5">
+       Ez az adat az összes letöltött adatmennyiséget jelzi beleértve az összes <b>oldalt</b>, <b>képet</b> és <b>fájlt</b>.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt13">
+       Az #PROG# felismeri, ha az oldalakat a <b>#SearchEnginesArray# legismertebb keresõprogramok egyikén keresztül érték el</b> (például Yahoo, Altavista, Lycos, Google, Voila, stb...).
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt14">
+       Az olyan <b>külsõ oldalak</b> listája, amely erre a honlapra mutat, vagy rajtuk keresztül érkezett a kérés (Csak a leggyakoribb <b>#MaxNbOfRefererShown#</b> külsõ oldal).
+       A keresõkön keresztül érkezett találatok itt nincsenek listázva, azok az elõzõ részben találhatóak.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt15">
+       Ebben a táblázatban találhatóak a keresõprogramokban leggyakrabban használt <b>kulcsszavakat</b> amelyeken keresztül ezen honlapot megtalálták.
+       (Az #PROG# a <b>#SearchEnginesArray#</b> leggyakoribb keresõmotort ismeri. Például Yahoo, Altavista, Lycos, Google, Voila, stb...).
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt16">
+       A robot-ok (spider-nek vagy webcrawler-nek is mondják) <b>automatikus számítógép látogatók</b> melyet számos keresõprogram használ arra hogy az oldalt átnézze és (1) index-elje és kategorizálja, (2) statisztikát gyûjtsön a weboldalakról és/vagy (3) megnézze, hogy a honlap még mindig mûködik-e.<br>
+       Az #PROG# <b>#RobotArray#</b> különbözõ robotot ismer fel.
+       </DIV>
 
- <DIV CLASS="CTooltip" ID="tt201"> Nincs hibaleírás. </DIV>
- <DIV CLASS="CTooltip" ID="tt202"> A kérést felismerte a szerver, de csak a késõbbiekben feldolgozva végre. </DIV>
- <DIV CLASS="CTooltip" ID="tt204"> A szerver feldolgozta a kérést, de az nem eredményezett kimeneti dokumentumot. </DIV>
- <DIV CLASS="CTooltip" ID="tt206"> Résztartalom. </DIV>
- <DIV CLASS="CTooltip" ID="tt301"> A kért dokumentum helye megváltozott, új cím a válaszban. </DIV>
- <DIV CLASS="CTooltip" ID="tt302"> Nincs hibaleírás. </DIV>
- <DIV CLASS="CTooltip" ID="tt400"> Szintaktikai hiba, a szerver nem értette a kérést. </DIV>
- <DIV CLASS="CTooltip" ID="tt401"> <b>Jelszóvédett tartalom sikertelen elérése</b>.<br>Nagyszámú ilyen hiba jelentheti azt, hogy valaki (egy hacker) megpróbál elérni egy jelszóvédett oldalt felhasználói nevek és jelszavak folyamatos próbálgatásával.</DIV>
- <DIV CLASS="CTooltip" ID="tt403"> <b>Nem tallózható könyvtár (még felhasználó azonosító és jelszó ismeretében sem)</b> (például egy könyvtáron belüli "tallózásra" nem engedélyezett link). </DIV>
- <DIV CLASS="CTooltip" ID="tt404"> <b>Nem létezõ oldal (URL)</b>. Érvénytelen link, mely lehet az oldalon belül, más külsõ oldalon, vagy csak a látogató vétett hibát a beírás közben. </DIV>
- <DIV CLASS="CTooltip" ID="tt408"> A szerver <b>túl sokáig</b> nem válaszolt. Általában lassú CGI program vagy nagyon leterhelt szerver esetén fordul elõ. </DIV>
- <DIV CLASS="CTooltip" ID="tt500"> Belsõ hiba. Általában CGI program abnormális futása után keletkezik (pl. coredump). </DIV>
- <DIV CLASS="CTooltip" ID="tt501"> Ismeretlen kéréstípus. </DIV>
- <DIV CLASS="CTooltip" ID="tt502"> Proxy szerver hibakód, melyet a távoli szerver sikeres válaszának hiányában küld a kérést küldõ kliensnek. </DIV>
- <DIV CLASS="CTooltip" ID="tt503"> Belsõ szerverhiba. </DIV>
- <DIV CLASS="CTooltip" ID="tt504"> Gateway idõtúllépés. </DIV>
- <DIV CLASS="CTooltip" ID="tt505"> Nem támogatott verziójú HTTP kérés. </DIV>
      <DIV CLASS="CTooltip" ID="tt201"> Nincs hibaleírás. </DIV>
      <DIV CLASS="CTooltip" ID="tt202"> A kérést felismerte a szerver, de csak a késõbbiekben feldolgozva végre. </DIV>
      <DIV CLASS="CTooltip" ID="tt204"> A szerver feldolgozta a kérést, de az nem eredményezett kimeneti dokumentumot. </DIV>
      <DIV CLASS="CTooltip" ID="tt206"> Résztartalom. </DIV>
      <DIV CLASS="CTooltip" ID="tt301"> A kért dokumentum helye megváltozott, új cím a válaszban. </DIV>
      <DIV CLASS="CTooltip" ID="tt302"> Nincs hibaleírás. </DIV>
      <DIV CLASS="CTooltip" ID="tt400"> Szintaktikai hiba, a szerver nem értette a kérést. </DIV>
      <DIV CLASS="CTooltip" ID="tt401"> <b>Jelszóvédett tartalom sikertelen elérése</b>.<br>Nagyszámú ilyen hiba jelentheti azt, hogy valaki (egy hacker) megpróbál elérni egy jelszóvédett oldalt felhasználói nevek és jelszavak folyamatos próbálgatásával.</DIV>
      <DIV CLASS="CTooltip" ID="tt403"> <b>Nem tallózható könyvtár (még felhasználó azonosító és jelszó ismeretében sem)</b> (például egy könyvtáron belüli "tallózásra" nem engedélyezett link). </DIV>
      <DIV CLASS="CTooltip" ID="tt404"> <b>Nem létezõ oldal (URL)</b>. Érvénytelen link, mely lehet az oldalon belül, más külsõ oldalon, vagy csak a látogató vétett hibát a beírás közben. </DIV>
      <DIV CLASS="CTooltip" ID="tt408"> A szerver <b>túl sokáig</b> nem válaszolt. Általában lassú CGI program vagy nagyon leterhelt szerver esetén fordul elõ. </DIV>
      <DIV CLASS="CTooltip" ID="tt500"> Belsõ hiba. Általában CGI program abnormális futása után keletkezik (pl. coredump). </DIV>
      <DIV CLASS="CTooltip" ID="tt501"> Ismeretlen kéréstípus. </DIV>
      <DIV CLASS="CTooltip" ID="tt502"> Proxy szerver hibakód, melyet a távoli szerver sikeres válaszának hiányában küld a kérést küldõ kliensnek. </DIV>
      <DIV CLASS="CTooltip" ID="tt503"> Belsõ szerverhiba. </DIV>
      <DIV CLASS="CTooltip" ID="tt504"> Gateway idõtúllépés. </DIV>
      <DIV CLASS="CTooltip" ID="tt505"> Nem támogatott verziójú HTTP kérés. </DIV>
diff --git a/wwwroot/cgi-bin/lang/awstats-tt-nb.txt b/wwwroot/cgi-bin/lang/awstats-tt-nb.txt
new file mode 100644 (file)
index 0000000..8edfeab
--- /dev/null
@@ -0,0 +1,60 @@
+       <div class="CTooltip" id="tt1">
+       Ett nytt besøk er en ny <b>gjest</b> som ikke har vært tilkoplet nettstedet siste <b>#VisitTimeOut# min</b>.
+       </div>
+       <div class="CTooltip" id="tt2">
+       Antall klientverter (<b>IP-adresser</b>) som har besøkt nettstedet, og har sett minst en <b>side</b>).<br>
+       Denne informasjonen gjelder antallet <b>forskjellige personer</b> som har besøkt siden.
+       </div>
+       <div class="CTooltip" id="tt3">
+       Antall ganger en <b>side</b> på nettstedet har blitt <b>vist</b>.<br>
+       Denne informasjonen skiller seg fra «treff» ved å bare telle HTML-sider, og ikke bilder og andre filer.
+       </div>
+       <div class="CTooltip" id="tt4">
+       Antall ganger en <b>side</b>, et <b>bilde</b> eller en <b>fil</b> på nettstedet har blitt <b>vist</b> eller <b>lastet ned</b>.
+       </div>
+       <div class="CTooltip" id="tt5">
+       Denne informasjonen viser hvor mye data som har blitt lastet ned totalt (<b>sider</b>, <b>bilder</b> eller andre <b>filer</b>).<br>
+       Enhetene er KB, MB eller GB (kilobyte, megabyte eller gigabyte)
+       </div>
+       <div class="CTooltip" id="tt13">
+       #PROG# kan se når et besøk på nettstedet ditt kommer fra et <b>søk</b> på de <b>#SearchEnginesArray# mest populære søkemotorene og emnekatalogane</b> (f.eks.&nbsp;Yahoo, Altavista, Lycos, Google og Kvasir).
+       </div>
+       <div class="CTooltip" id="tt14">
+       Liste over alle <b>eksterne sider</b> som har lenker til nettstedet ditt (bare de <b>#MaxNbOfRefererShown#</b> mest brukte eksterne sider blir vist).
+       Lenker fra søkemotorer er ikke inkludert her, siden disse allerede er oppført i forrige del av denne tabellen.
+       </div>
+       <div class="CTooltip" id="tt15">
+       Denne tabellen viser de mest brukte <b>søkeordene</b> brukt til å finna nettstedet ditt i søkemotorer og emnekataloger.
+       (Søkeord fra de <b>#SearchEnginesArray#</b> mest populære søkemotorene og emnekatalogene kan leses av #PROG#, f.eks.&nbsp;Yahoo, Altavista, Lycos, Google, og Kvasir).
+       </div>
+       <div class="CTooltip" id="tt16">
+       Roboter blir brukt av mange søkemotorer som besøker nettstedet ditt for å indeksere og rangere det, samle statistikk om nettsteder, og/eller se om nettstedet fremdeles er tilgjengelig.<br>
+       #PROG# kjenner til <b>#RobotArray#</b> roboter.
+       </div>
+       <div class="CTooltip" ID="tt17">
+       All tidsrelatert statistikk er basert på tjenertid.<br>
+       </div>
+       <div class="CTooltip" id="tt18">
+       Rapporterte tall er <b>gjennomsnittsverdier</b> (regnet ut fra alle data mellom første og siste besøk)
+       </div>
+       <div class="CTooltip" id="tt19">
+       Rapporterte tall er <b>kumulative summer</b> (regnet ut fra alle data mellom første og siste besøk)
+       </div>
+
+       <div class="CTooltip" id="tt201"> Ingen beskrivelse av denne feilen. </div>
+       <div class="CTooltip" id="tt202"> Forespørselen var forstått av tjeneren men vil bli prosessert senere. </div>
+       <div class="CTooltip" id="tt204"> Tjeneren har prosessert forespørselen men har ikke noe innhold å sende. </div>
+       <div class="CTooltip" id="tt206"> Delvis innhold. </div>
+       <div class="CTooltip" id="tt301"> Det forespurte dokumentet er flyttet, og finnes nå på en annen side. Brukeren blir automatisk videresendt til den nye adressen. </div>
+       <div class="CTooltip" id="tt302"> Ingen beskrivelse av denne feilen. </div>
+       <div class="CTooltip" id="tt400"> Syntaksfeil. Tjeneren forsto ikke forespørselen. </div>
+       <div class="CTooltip" id="tt401"> Prøvde å hente en <b>side som var passordbeskyttet</b>.<br>Mange slike feilmeldinger kan bety at noen prøver å bryte seg inn på nettstedet ditt. </div>
+       <div class="CTooltip" id="tt403"> Prøvde å hente en <b>side som er utilgjengelig (selv med passord)</b> (for eksempel en katalog som er definert som ikke lesbar). </div>
+       <div class="CTooltip" id="tt404"> Prøvde å hente en <b>ikke-eksisterende side</b>. Denne feilen betyr oftest at det er en lenke en eller annen plass på nettstedet ditt (eller på en ekstern side) som ikke fungerer, og som må oppdateres. </div>
+       <div class="CTooltip" id="tt408"> Tjeneren har brukt <b>for mye tid</b> på å svare på en forespørsel. Denne feilen gjelder enten et tregt CGI-skript tjenaren måtte avslutte, eller tungt trafikkert tjenar. </div>
+       <div class="CTooltip" id="tt500"> Intern feil. Denne feilen kommer ofte av CGI-skript som har blitt avsluttet unormalt. </div>
+       <div class="CTooltip" id="tt501"> Ukjent forespørsel. </div>
+       <div class="CTooltip" id="tt502"> Kode returnert av ein HTTP-tjener som fungerer som proxy eller systemport når en ekte tjener ikke svarer på forespørselen. </div>
+       <div class="CTooltip" id="tt503"> Intern tjenerfeil. </div>
+       <div class="CTooltip" id="tt504"> Systemport tidsavbrutt. </div>
+       <div class="CTooltip" id="tt505"> Støtter ikke HTTP-versjonen. </div>
index 8b365ef5924f4d3d73583e502ebda4c38889da58..4f75af3dc9a11e968f2f87a794873b031c09e405 100644 (file)
@@ -13,8 +13,7 @@
        Talet på gongar ei <b>side</b>, eit <b>bilde</b> eller ei <b>fil</b> på nettstaden har blitt <b>vist</b> eller <b>lasta ned</b>.
        </div>
        <div class="CTooltip" id="tt5">
-       Denne informasjonen viser kor mykje data som har blitt lasta ned totalt (<b>sider</b>, <b>bilder</b> eller andre <b>filer</b>).<br>
-       Einingane er KB, MB eller GB (kilobyte, megabyte eller gigabyte)
+       Denne informasjonen viser kor mykje data som har blitt lasta ned totalt (<b>sider</b>, <b>bilder</b> eller andre <b>filer</b>) målt i KiB (kibibyte).
        </div>
        <div class="CTooltip" id="tt13">
        #PROG# kan sjå når eit besøk på nettstaden din kjem frå eit <b>søk</b> på dei <b>#SearchEnginesArray# mest populære søkemotorane og emnekatalogane</b> (f.eks.&nbsp;Yahoo, Altavista, Lycos, Google og Kvasir).
        (Søkeord frå dei <b>#SearchEnginesArray#</b> mest populære søkemotorane og emnekatalogane kan lesast av #PROG#, f.eks.&nbsp;Yahoo, Altavista, Lycos, Google, og Kvasir).
        </div>
        <div class="CTooltip" id="tt16">
-       Robotar blir brukt av mange søkemotorar som besøker nettstaden din for å indeksera og rangera han, samla statistikk om nettstader, og/eller sjå om nettstaden framleis er tilgjengeleg.<br>
+       Robotar blir brukt av mange søkemotorar som besøker nettstaden din for å 1) indeksera han, 2) samla statistikk om nettstadar , og/eller 3) sjå om nettstaden framleis eksisterer.<br>
        #PROG# kjenner til <b>#RobotArray#</b> robotar.
        </div>
-       <div class="CTooltip" ID="tt17">
-       All tidsrelatert statistikk er basert på tenartid.<br>
-       </div>
-       <div class="CTooltip" id="tt18">
-       Rapporterte tal er <b>gjennomsnittsverdiar</b> (rekna ut frå all data mellom første og siste besøk)
-       </div>
-       <div class="CTooltip" id="tt19">
-       Rapporterte tal er <b>kumulative summar</b> (rekna ut frå all data mellom første og siste besøk)
-       </div>
 
        <div class="CTooltip" id="tt201"> Inga beskriving av denne feilen. </div>
        <div class="CTooltip" id="tt202"> Førespurnaden vart forstått av tenaren men vil bli prosessert seinare. </div>
@@ -57,4 +47,4 @@
        <div class="CTooltip" id="tt502"> Kode returnert av ein HTTP-tenar som fungerer som proxy eller systemport når ein ekte tenar ikkje svarer på førespurnaden. </div>
        <div class="CTooltip" id="tt503"> Intern tenarfeil. </div>
        <div class="CTooltip" id="tt504"> Systemport tidsavbroten. </div>
-       <div class="CTooltip" id="tt505"> Støttar ikkje HTTP-versjonen. </div>
+       <div class="CTooltip" id="tt505"> HTTP-versjonen er ikkje støtta. </div>
diff --git a/wwwroot/cgi-bin/lang/awstats-tt-no.txt b/wwwroot/cgi-bin/lang/awstats-tt-no.txt
new file mode 100644 (file)
index 0000000..8edfeab
--- /dev/null
@@ -0,0 +1,60 @@
+       <div class="CTooltip" id="tt1">
+       Ett nytt besøk er en ny <b>gjest</b> som ikke har vært tilkoplet nettstedet siste <b>#VisitTimeOut# min</b>.
+       </div>
+       <div class="CTooltip" id="tt2">
+       Antall klientverter (<b>IP-adresser</b>) som har besøkt nettstedet, og har sett minst en <b>side</b>).<br>
+       Denne informasjonen gjelder antallet <b>forskjellige personer</b> som har besøkt siden.
+       </div>
+       <div class="CTooltip" id="tt3">
+       Antall ganger en <b>side</b> på nettstedet har blitt <b>vist</b>.<br>
+       Denne informasjonen skiller seg fra «treff» ved å bare telle HTML-sider, og ikke bilder og andre filer.
+       </div>
+       <div class="CTooltip" id="tt4">
+       Antall ganger en <b>side</b>, et <b>bilde</b> eller en <b>fil</b> på nettstedet har blitt <b>vist</b> eller <b>lastet ned</b>.
+       </div>
+       <div class="CTooltip" id="tt5">
+       Denne informasjonen viser hvor mye data som har blitt lastet ned totalt (<b>sider</b>, <b>bilder</b> eller andre <b>filer</b>).<br>
+       Enhetene er KB, MB eller GB (kilobyte, megabyte eller gigabyte)
+       </div>
+       <div class="CTooltip" id="tt13">
+       #PROG# kan se når et besøk på nettstedet ditt kommer fra et <b>søk</b> på de <b>#SearchEnginesArray# mest populære søkemotorene og emnekatalogane</b> (f.eks.&nbsp;Yahoo, Altavista, Lycos, Google og Kvasir).
+       </div>
+       <div class="CTooltip" id="tt14">
+       Liste over alle <b>eksterne sider</b> som har lenker til nettstedet ditt (bare de <b>#MaxNbOfRefererShown#</b> mest brukte eksterne sider blir vist).
+       Lenker fra søkemotorer er ikke inkludert her, siden disse allerede er oppført i forrige del av denne tabellen.
+       </div>
+       <div class="CTooltip" id="tt15">
+       Denne tabellen viser de mest brukte <b>søkeordene</b> brukt til å finna nettstedet ditt i søkemotorer og emnekataloger.
+       (Søkeord fra de <b>#SearchEnginesArray#</b> mest populære søkemotorene og emnekatalogene kan leses av #PROG#, f.eks.&nbsp;Yahoo, Altavista, Lycos, Google, og Kvasir).
+       </div>
+       <div class="CTooltip" id="tt16">
+       Roboter blir brukt av mange søkemotorer som besøker nettstedet ditt for å indeksere og rangere det, samle statistikk om nettsteder, og/eller se om nettstedet fremdeles er tilgjengelig.<br>
+       #PROG# kjenner til <b>#RobotArray#</b> roboter.
+       </div>
+       <div class="CTooltip" ID="tt17">
+       All tidsrelatert statistikk er basert på tjenertid.<br>
+       </div>
+       <div class="CTooltip" id="tt18">
+       Rapporterte tall er <b>gjennomsnittsverdier</b> (regnet ut fra alle data mellom første og siste besøk)
+       </div>
+       <div class="CTooltip" id="tt19">
+       Rapporterte tall er <b>kumulative summer</b> (regnet ut fra alle data mellom første og siste besøk)
+       </div>
+
+       <div class="CTooltip" id="tt201"> Ingen beskrivelse av denne feilen. </div>
+       <div class="CTooltip" id="tt202"> Forespørselen var forstått av tjeneren men vil bli prosessert senere. </div>
+       <div class="CTooltip" id="tt204"> Tjeneren har prosessert forespørselen men har ikke noe innhold å sende. </div>
+       <div class="CTooltip" id="tt206"> Delvis innhold. </div>
+       <div class="CTooltip" id="tt301"> Det forespurte dokumentet er flyttet, og finnes nå på en annen side. Brukeren blir automatisk videresendt til den nye adressen. </div>
+       <div class="CTooltip" id="tt302"> Ingen beskrivelse av denne feilen. </div>
+       <div class="CTooltip" id="tt400"> Syntaksfeil. Tjeneren forsto ikke forespørselen. </div>
+       <div class="CTooltip" id="tt401"> Prøvde å hente en <b>side som var passordbeskyttet</b>.<br>Mange slike feilmeldinger kan bety at noen prøver å bryte seg inn på nettstedet ditt. </div>
+       <div class="CTooltip" id="tt403"> Prøvde å hente en <b>side som er utilgjengelig (selv med passord)</b> (for eksempel en katalog som er definert som ikke lesbar). </div>
+       <div class="CTooltip" id="tt404"> Prøvde å hente en <b>ikke-eksisterende side</b>. Denne feilen betyr oftest at det er en lenke en eller annen plass på nettstedet ditt (eller på en ekstern side) som ikke fungerer, og som må oppdateres. </div>
+       <div class="CTooltip" id="tt408"> Tjeneren har brukt <b>for mye tid</b> på å svare på en forespørsel. Denne feilen gjelder enten et tregt CGI-skript tjenaren måtte avslutte, eller tungt trafikkert tjenar. </div>
+       <div class="CTooltip" id="tt500"> Intern feil. Denne feilen kommer ofte av CGI-skript som har blitt avsluttet unormalt. </div>
+       <div class="CTooltip" id="tt501"> Ukjent forespørsel. </div>
+       <div class="CTooltip" id="tt502"> Kode returnert av ein HTTP-tjener som fungerer som proxy eller systemport når en ekte tjener ikke svarer på forespørselen. </div>
+       <div class="CTooltip" id="tt503"> Intern tjenerfeil. </div>
+       <div class="CTooltip" id="tt504"> Systemport tidsavbrutt. </div>
+       <div class="CTooltip" id="tt505"> Støtter ikke HTTP-versjonen. </div>
diff --git a/wwwroot/cgi-bin/lang/awstats-tt-se.txt b/wwwroot/cgi-bin/lang/awstats-tt-se.txt
new file mode 100644 (file)
index 0000000..7c61e8a
--- /dev/null
@@ -0,0 +1,61 @@
+       <DIV CLASS="CTooltip" ID="tt1">
+       Ett nytt besök är en <b>besökare</b> (som tittar på en <b>sida</b>) som inte varit inne på sajten på <b>#VisitTimeOut# minuter</b>.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt2">
+       Antal besökare (<b>IP-adresser</b>) som besökte sajten (och som tittade på minst en <b>sida</b>).<br>
+       Detta värde anger antalet <b>olika fysiska personer</b> som nått siten på en dag.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt3">
+       Antal gånger en <b>sida</b> på sajten har besökts (Summa för alla besökare för alla besök).<br>
+       Detta värde skiljer sig från "träffar" genom att det bara räknar HTML-sidor, ej bilder eller andra filer.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt4">
+       Antal gånger en <b>sida, bild eller fil</b> från sajten har <b>besökts</b> eller <b>laddats hem</b> av någon.<br>
+       Detta värde finns bara med som referens eftersom antalet "sidor" som besökts oftast är bättre att titta på ur marknadsföringssynpunkt.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt5">
+       Detta värde visar hur mycket data som har laddats hem genom alla <b>sidor</b>, <b>bilder</b> och <b>filer</b> på hela sajten.<br>
+       Enheterna är Kb, Mb or Gb (KiloByte, MegaByte eller GigaByte)
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt13">
+       #PROG# känner igen när besökare hittar din sajt genom en <b>sökning</b> i de  <b>#SearchEnginesArray# populäraste sökmotorerna och katalogerna</b> (såsom Yahoo, Altavista, Lycos, Google, Voila, osv...).
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt14">
+       En lista på alla <b>externa sidor</b> som länkar till (och besökare använt för att komma till) din sida (Bara de <b>#MaxNbOfRefererShown#</b> mest använda länkarna visas).
+       Länkar i sökresultaten från sökmotorerna tas inte med här eftersom de redan räknats in i föregående rad i tabellen.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt15">
+       Denna tabell visar de vanligaste <b>nyckelorden</b> som använts för att hitta din sajt genom sökmotorer och kataloger.
+       (#PROG# känner igen nyckelord från de <b>#SearchEnginesArray#</b> vanligaste sökmotorerna och katalogerna, såsom Yahoo, Altavista, Lycos, Google, Voila, osv...).
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt16">
+       Robotar (kallas också Spindlar) är <b>automatiska datoriserade besökare</b> som används av många sökmotorer som söker av din webbsajt för att indexera och rangordna den, samla statistik för webbsajter och/eller se om din sajt fortfarande finns kvar.<br>
+       #PROG# känner igen upp till <b>#RobotArray#</b> olika robotar.
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt17">
+       All tidsrelaterad statistik baseras på klockan på webbservern.<br>
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt18">
+       Här visas <b>medelvärden</b> (beräknade för alla besök från det första till det sista)
+       </DIV>
+       <DIV CLASS="CTooltip" ID="tt19">
+       Här visas <b>ackumulerade summor</b> (beräknade för alla besök från det första till det sista)
+       </DIV>
+
+       <DIV CLASS="CTooltip" ID="tt201"> Ingen beskrivning finns för detta fel. </DIV>
+       <DIV CLASS="CTooltip" ID="tt202"> Servern förstod begäran men kommer bearbeta den senare. </DIV>
+       <DIV CLASS="CTooltip" ID="tt204"> Servern har bearbetat begäran men har inte genererat något svar. </DIV>
+       <DIV CLASS="CTooltip" ID="tt206"> Endast en del av innehållet överfördes. </DIV>
+       <DIV CLASS="CTooltip" ID="tt301"> Sidan har flyttats och ny adress finns i svaret. </DIV>
+       <DIV CLASS="CTooltip" ID="tt302"> Ingen beskrivning finns för detta fel. </DIV>
+       <DIV CLASS="CTooltip" ID="tt400"> Syntax fel, servern förstod inte begäran. </DIV>
+       <DIV CLASS="CTooltip" ID="tt401"> Någon försökte komma åt en <b>URL där inloggning krävdes</b>.<br>Ett högt värde här skulle kunna innebära att någon (t.ex. en hacker) försöker bryta sig in i din sajt (t.ex. genom att pröva sig fram tills de hittar rätt lösenord). </DIV>
+       <DIV CLASS="CTooltip" ID="tt403"> Någon försökte komma åt en <b>URL som är inställd så att man inte kommer åt den ens med rätt lösenord</b> (till exempel en katalog som är inställd att inte tillåta bläddring.). </DIV>
+       <DIV CLASS="CTooltip" ID="tt404"> Någon försökte nå en <b>icke existerande URL</b>. Detta betyder ofta att det finns en felaktig länk på din sajt eller att någon stavade fel till en URL. </DIV>
+       <DIV CLASS="CTooltip" ID="tt408"> Servern har tagit <b>för lång tid</b> på sig att besvara en begäran. Detta beror ofta på ett långsamt cgi-skript eller att servern är överbelastad. </DIV>
+       <DIV CLASS="CTooltip" ID="tt500"> Internt fel. Detta fel orsakas ofta av att ett cgi-skript går fel (t.ex. gör en coredump). </DIV>
+       <DIV CLASS="CTooltip" ID="tt501"> Okänd begäran. </DIV>
+       <DIV CLASS="CTooltip" ID="tt502"> Felkod som genereras då en HTTP-server som arbetar som proxy eller gatewayt ine får svar från den verkliga servern som skulle ha svarat på klientens begäran. </DIV>
+       <DIV CLASS="CTooltip" ID="tt503"> Internt serverfel. </DIV>
+       <DIV CLASS="CTooltip" ID="tt504"> Timeout i gateway </DIV>
+       <DIV CLASS="CTooltip" ID="tt505"> HTTP-versionen stöds ej. </DIV>
index 9ff2bc0d6bb6c85784fe6397e3b9de195ac93e2d..e111715853bc2df078778338288dd9cdc2393766 100644 (file)
@@ -14,7 +14,7 @@
        Öi äàíi ìàþòü ÷èñòî ïiçíàâàëüíó öiííiñòü ùîäî ðîáîòè <strong>ñåðâåðà</strong>, áî êiëüêiñòü ïåðåãëÿäiâ <strong>ñòîðiíîê</strong> º íàáàãàòî iëþñòðàòèâíiøîþ ùîäî ëþäñüêî¿ àóäèòîði¿.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt5">
-       Öå ñóìàðíèé îá'ºì äàíèõ, ïåðåäàíèõ ñåðâåðîì âiäâiäóâà÷àì ïðè çàâàíòàæåííi íèìè <strong>ñòîðiíîê</strong>, <strong>çîáðàæåíü</strong> òà iíøèõ <strong>ôàéëiâ</strong>. Âèìiðþºòüñÿ â êiëîáàéòàõ (êÁ), ìåãàáàéòàõ (ÌÁ), ãiãàáàéòàõ (ÃÁ).
+       Öå ñóìàðíèé îá'ºì äàíèõ, ïåðåäàíèõ ñåðâåðîì âiäâiäóâà÷àì ïðè çàâàíòàæåííi íèìè <strong>ñòîðiíîê</strong>, <strong>çîáðàæåíü</strong> òà iíøèõ <strong>ôàéëiâ</strong>. Âèìiðþºòüñÿ â êiëîáàéòàõ.
        </DIV>
        <DIV CLASS="CTooltip" ID="tt13">
        #PROG# âèðiçíÿº êîæåí äîñòóï äî ñàéòó ïiñëÿ <strong>ïîøóêó</strong> ç äîïîìîãîþ <strong>#SearchEnginesArray#</strong> íàéáiëüø ïîïóëÿðíèõ ïîøóêîâèõ ñèñòåì i êàòàëîãiâ (òàêèõ ÿê Altavista, Lycos, Google, Voila, AllTheWeb, òà ií.).
        Â ïîòî÷íié âåðñi¿ #PROG# âìiº ðîçïiçíàâàòè
        <strong>#RobotArray#</strong> ðîáîòiâ.
        </DIV>
-       <DIV CLASS="CTooltip" ID="tt17">
-       Âñÿ ñòàòèñòèêà, ïîâ'ÿçàíà ç ÷àñîì, áàçóºòüñÿ íà ÷àñîâi, 
-       âñòàíîâëåíîìó íà ñåðâåði.<br />
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt18">
-       Òóò ïîêàçóþòüñÿ <strong>ñåðåäíi çíà÷åííÿ</strong> (ðîçðàõîâàíi çà 
-       âñiìà äàíèìè, íàêîïè÷åíèìè ìiæ ïåðøèì i îñòàííiì âiçèòàìè)
-       </DIV>
-       <DIV CLASS="CTooltip" ID="tt19">
-       Òóò ïîêàçóþòüñÿ <strong>ñóêóïíi çíà÷åííÿ</strong> (ðîçðàõîâàíi çà 
-       âñiìà äàíèìè, íàêîïè÷åíèìè ìiæ ïåðøèì i îñòàííiì âiçèòàìè)
-       </DIV>
        
        <DIV CLASS="CTooltip" ID="tt201"> Äëÿ öiº¿ ïîìèëêè íåìຠîïèñàííÿ. </DIV>
        <DIV CLASS="CTooltip" ID="tt202"> Ñåðâåð çðîçóìiâ çàïèò, àëå âèêîíຠéîãî ïiçíiøå. </DIV>
index 0964d34e95b64494364679ce3cd4cdab096a4bfe..752269a4aaf1721b048d6acc436af46f925d7826 100644 (file)
@@ -1,4 +1,4 @@
-# Chinese message file 
+# Chines message file
 PageCode=big5
 message0=µLªk±oª¾
 message1=µLªk±oª¾(¤£¯à¤Ï¸Ñºô°ì¦WºÙ)
@@ -10,8 +10,8 @@ message6=
 message7=²Î­pºô¯¸
 message8=³Ìªì°ÑÆ[¤é´Á
 message9=³Ìªñ°ÑÆ[¤é´Á
-message10=°ÑÆ[¦¸¼Æ
-message11=°ÑÆ[ªÌ
+message10=°ÑÆ[¤H¼Æ
+message11=³æ¤@°ÑÆ[ªÌ
 message12=°ÑÆ[¦¸¼Æ
 message13=ÃöÁä¦r
 message14=·j´M
@@ -57,7 +57,7 @@ message53=
 message54=ºô­¶¬ö¿ý¤ÀªR¨t²Î
 message55=­Ó©ó
 message56=ºô­¶¼Æ
-message57=ÀÉ®×¼Æ
+message57=¦¸¼Æ
 message58=ª©¥»
 message59=§@·~¨t²Î
 message60=¤@¤ë
index 63ef66d37c809f2f553b3bcd4a1a480521b5cdfa..79e6b8fedec738f005294a76907947bfc95253e9 100644 (file)
@@ -1,4 +1,4 @@
-# Ukrainian message file (v1.5 - 05.11.2001 - roman@elsyst.km.ua)
+# Ukrainian message file
 PageCode=windows-1251
 message0=Íåâiäîìèé
 message1=Íåâiäîìèé (íå âäàëîñü ïåðåòâîðèòè IP)
@@ -13,23 +13,23 @@ message9=
 message10=Êiëüêiñòü âiçèòiâ
 message11=Óíiêàëüíèõ âiäâiäóâà÷iâ
 message12=Âiçèò
-message13=ðiçíèõ êëþ÷îâèõ ñëiâ
+message13=Êëþ÷îâå ñëîâî
 message14=Ïîøóê
 message15=Âiäñîòîê
 message16=Ñóìàðíèé òðàôiê
 message17=Äîìåíè/êðà¿íè
 message18=Âiäâiäóâà÷i
-message19=Ñòîðiíêè-URLè
-message20=Ãîäèíè äîáè
+message19=Ñòîðiíêè/URL-è
+message20=Ðîçïîäië ïî ãîäèíàì äîáè
 message21=Ïðîãðàìè ïåðåãëÿäó
 message22=Ïîìèëêè HTTP
 message23=Ïîñèëà÷i
-message24=Ïîøóê:&nbsp;Êëþ÷îâi&nbsp;ñëîâà
+message24=Ïîøóê&nbsp;Êëþ÷îâi&nbsp;ñëîâà
 message25=Äîìåíè/êðà¿íè âiäâiäóâà÷iâ
 message26=õîñòiâ
 message27=ñòîðiíîê
 message28=ðiçíèõ ñòîðiíîê
-message29=Ïåðåãëÿíóòi ñòîðiíêè
+message29=Äîñòóï
 message30=Iíøi ñëîâà
 message31=Íå çíàéäåíi ñòîðiíêè
 message32=Êîäè ïîìèëîê HTTP
@@ -39,12 +39,12 @@ message35=
 message36=Øëÿõè, ÿêèìè âiäâiäóâà÷i ïîòðàïëÿëè íà ñàéò
 message37=Ïîõîäæåííÿ
 message38=Ïðÿìèé äîñòóï / Çàêëàäêè
-message39=Äæåðåëî ïîñèëàíü íå âñòàíîâëåíî
+message39=Ïîñèëàííÿ ç äèñêóñiéíèõ ãðóï
 message40=Ïîñèëàííÿ ç ïîøóêîâèõ ìàøèí
 message41=Ïîñèëàííÿ ç çîâíiøíüî¿ ñòîðiíêè (iíøîãî ñàéòó çà âèíÿòêîì ïîøóêîâèõ ìàøèí)
 message42=Ïîñèëàííÿ ç âíóòðiøíüî¿ ñòîðiíêè (iíøî¿ ñòîðiíêè íà öüîìó æ ñàéòi)
-message43=Êëþ÷îâi ñëîâà, çà ÿêèìè çäiéñíþâàâñÿ ïîøóê íà ïîøóêîâié ìàøèíi
-message44=êÁ
+message43=êëþ÷îâèõ ñëiâ, çà ÿêèìè çäiéñíþâàâñÿ ïîøóê íà ïîøóêîâié ìàøèíi
+message44=Êá
 message45=IP-àäðåñè, ÿêi íå âäàëîñü ïåðåòâîðèòè â iìåíà
 message46=Íåâiäîìà ÎÑ
 message47=Çàïèòàíi, àëå íåçíàéäåíi URL-è (HTTP êîä 404)
@@ -72,37 +72,6 @@ message68=
 message69=Æîâ
 message70=Ëèñ
 message71=Ãðó
-message72=Íàâiãàöiÿ
-message73=Òèïè ôàéëiâ
+message72=
+message73=Ùîäåííà ñòàòèñòèêà
 message74=Îíîâèòè
-message75=Áàéòiâ
-message76=Íàçàä äî ãîëîâíî¿ ñòîðiíêè
-message77=Íàéóæèâàíiøi
-message78=dd mmm yyyy - HH:MM
-message79=Ôiëüòð
-message80=Âåñü ñïèñîê
-message81=Õîñòè
-message82=Âiäîìi
-message83=Ðîáîòè
-message84=Íä
-message85=Ïí
-message86=Ââ
-message87=Ñð
-message88=×ò
-message89=Ïò
-message90=Ñá
-message91=Äíi òèæíÿ
-message92=Õòî
-message93=Êîëè
-message94=Àâòîðèçîâàíi êîðèñòóâà÷i
-message95=Ìií.
-message96= ñåðåäíüîìó
-message97=Ìàêñ.
-message98=Ñòèñíåííÿ
-message99=Çåêîíîìëåíî
-message100=Äî ñòèñíåííÿ
-message101=Ïiñëÿ ñòèñíåííÿ
-message102=Çàãàëîì
-message103=ðiçíèõ ôðàç
-message104=Òî÷êè âõîäæåííÿ
-message105=Êîä
\ No newline at end of file
index 29e0a0dc5474cc0f0797e2bac36bf28b0f0aa075..5662f1c0c4779442df40a1490b32990e9a4e6772 100644 (file)
@@ -4,10 +4,9 @@
 # With Apache for Windows and ActiverPerl, first line may be
 #!c:/program files/activeperl/bin/perl
 #-Description-------------------------------------------
-# Merge several log files into one and replace all IP addresses
-# with resolved DNS host name.
-# This tool is part of AWStats log analyzer but can be use
-# alone for any other log analyzer.
+# Change a log file to make reverse DNS lookup on IPAdresses
+# Merge several log files into one
+# This tool is part of AWStats software
 # See COPYING.TXT file about AWStats GNU General Public License.
 #-------------------------------------------------------
 #use diagnostics;
 #-------------------------------------------------------
 
 # ---------- Init variables (Variable $TmpHashxxx are not initialized) --------
-($ParamFile)=();
+($LogFile)=();
 # ---------- Init arrays --------
 @wordlist = ();
 # ---------- Init hash arrays --------
 %monthnum = ();
 
-$VERSION="1.0 (build 2)";
-$LookupPool=10;
+$VERSION="1.0 (build 1)";
+$Lang="en";
 $NbOfLinesForBenchmark=5000;
 
 # These table is used to make fast reverse DNS lookup for particular IP adresses. You can add your own IP adresses resolutions.
@@ -42,7 +41,7 @@ $NbOfLinesForBenchmark=5000;
 #-------------------------------------------------------
 sub error {
        print "Error: $_[0].\n";
-    exit 1;
+    die;
 }
 
 sub debug {
@@ -65,42 +64,34 @@ sub SkipDNSLookup {
 #-------------------------------------------------------
 # MAIN
 #-------------------------------------------------------
-$QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
-if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
-if ($QueryString =~ /dnslookup/i) { $DNSLookup=1; }
-if ($QueryString =~ /showsteps/i) { $ShowSteps=1; }
-($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
-
 my $cpt=1;
 for (0..@ARGV-1) {
        if ($ARGV[$_] =~ /^-/) { last; }
-       $ParamFile{$cpt}=$ARGV[$_];
+       $LogFile{$cpt}=$ARGV[$_];
        $cpt++;
 }
-if (scalar keys %ParamFile == 0) {
+$QueryString=""; for (0..@ARGV-1) { $QueryString .= "$ARGV[$_] "; }
+if ($QueryString =~ /debug=/i) { $Debug=$QueryString; $Debug =~ s/.*debug=//; $Debug =~ s/&.*//; $Debug =~ s/ .*//; }
+if ($QueryString =~ /dnslookup/i) { $DNSLookup=1; }
+if ($QueryString =~ /-showsteps/i) { $ShowSteps=1; }
+($DIR=$0) =~ s/([^\/\\]*)$//; ($PROG=$1) =~ s/\.([^\.]*)$//; $Extension=$1;
+if (scalar keys %LogFile == 0) {
        print "----- $PROG $VERSION (c) Laurent Destailleur -----\n";
-       print "$PROG allows you to merge several log files into one, sorting all\n";
-       print "records on date. It also makes a fast reverse DNS lookup to replace all IP\n";
-       print "addresses into host names in resulting log file.\n";
+       print "$PROG is a log file merger and fast reverse DNS resolver.\n";
        print "$PROG comes with ABSOLUTELY NO WARRANTY. It's a free software\n";
        print "distributed with a GNU General Public License (See COPYING.txt file).\n";
-       print "$PROG is part of AWStats but can be used alone as a log merger before\n";
-       print "using any other log analyzer.\n";
        print "\n";
-       print "Usage:\n";
-       print "  $PROG.$Extension file1 ... filen [-dnslookup]\n";
-       print "  $PROG.$Extension *.* [-dnslookup]\n";
-       print "Options:\n";
+       print "Syntax: $PROG.$Extension file1 ... filen [-dnslookup]\n";
+       print "  This runs $PROG in command line to open one or several web server\n";
+       print "  log files to merge them (sorted on date) and/or to make a reverse DNS lookup.\n";
+       print "  The result log file is sent on standard output.\n";
+       print "Option:\n";
        print "  -dnslookup  make a reverse DNS lookup on IP adresses (not done by default).\n";
        print "  -showsteps  to add benchmark informations every $NbOfLinesForBenchmark lines processed\n";
        print "\n";
-       print "This runs $PROG in command line to open one or several web server log\n";
-       print "files to merge them (sorted on date) and/or to make a reverse DNS lookup.\n";
-       print "The result log file is sent on standard output.\n";
-       print "\n";
        print "Now supports/detects:\n";
        print "  Automatic detection of log format\n";
-       print "  !!! Multithreaded reverse DNS lookup ($LookupPool parallel request) not yet developped\n";
+       print "  Multithreaded reverse DNS lookup ($LookupPool parallel request)\n";
        print "  No need of extra Perl library\n";
        print "New versions and FAQ at http://awstats.sourceforge.net\n";
        exit 0;
@@ -142,50 +133,17 @@ $NewDNSLookup=$DNSLookup;
 #------------------------------------------
 # PROCESSING CURRENT LOG(s)
 #------------------------------------------
+&debug("Start of processing ".(scalar keys %LogFile)." log file(s)");
 %LogFileToDo=(); %NowNewLinePhase=(); %NbOfLinesRead=(); %NbOfLinesCorrupted=();
 $NbOfNewLinesProcessed=0; $NbOfNewLinesCorrupted=0;
 $logfilechosen=0;
 $starttime=time();
 
-# Define the LogFileToDo list
-my $cpt=1;
-foreach $key (keys %ParamFile) {
-       if ($ParamFile{$key} !~ /\*/ && $ParamFile{$key} !~ /\?/) {
-               &debug("Log file $ParamFile{$key} is added to LogFileToDo.");
-               $LogFileToDo{$cpt}=$ParamFile{$key};
-               $cpt++;
-       }
-       else {
-               my $DirFile=$ParamFile{$key}; $DirFile =~ s/([^\/\\]*)$//;
-               $ParamFile{$key} = $1;
-               if ($DirFile eq "") { $DirFile = "."; }
-               $ParamFile{$key} =~ s/\./\\\./g;
-               $ParamFile{$key} =~ s/\*/\.\*/g;
-               $ParamFile{$key} =~ s/\?/\./g;
-               &debug("Search for file \"$ParamFile{$key}\" into \"$DirFile\"");
-               opendir(DIR,"$DirFile");
-               @filearray = sort readdir DIR;
-               close DIR;
-               foreach $i (0..$#filearray) {
-                       if ("$filearray[$i]" =~ /^$ParamFile{$key}$/ && "$filearray[$i]" ne "." && "$filearray[$i]" ne "..") {
-                               &debug("Log file $filearray[$i] is added to LogFileToDo.");
-                               $LogFileToDo{$cpt}="$DirFile/$filearray[$i]";
-                               $cpt++;
-                       }
-               }
-       }
-}
-
-# If no files to process
-if (scalar keys %LogFileToDo == 0) {
-       error("No input log file found");
-}
-
 # Open all log files
-&debug("Start of processing ".(scalar keys %LogFileToDo)." log file(s)");
-foreach $logfilenb (keys %LogFileToDo) {
-       &debug("Open log file number $logfilenb: \"$LogFileToDo{$logfilenb}\"");
-       open("LOG$logfilenb","$LogFileToDo{$logfilenb}") || error("Couldn't open log file \"$LogFileToDo{$logfilenb}\" : $!");
+foreach $logfilenb (keys %LogFile) {
+       &debug("Open log file number $logfilenb: \"$LogFile{$logfilenb}\"");
+       open("LOG$logfilenb","$LogFile{$logfilenb}") || error("Couldn't open server log file \"$LogFile{$logfilenb}\" : $!");
+       $LogFileToDo{$logfilenb}=$LogFile{$logfilenb};
 }
 
 while (1 == 1)
@@ -298,10 +256,10 @@ while (1 == 1)
 
 
 # Close all log files
-foreach $logfilenb (keys %LogFileToDo) {
+foreach $logfilenb (keys %LogFile) {
        &debug("Close log file number $logfilenb");
        close("LOG$logfilenb");
 }
 
 
-0;     # Do not remove this line
\ No newline at end of file
+0;     # Do not remove this line
diff --git a/wwwroot/icon/browser/adobe.png b/wwwroot/icon/browser/adobe.png
new file mode 100644 (file)
index 0000000..4807cf4
Binary files /dev/null and b/wwwroot/icon/browser/adobe.png differ
diff --git a/wwwroot/icon/browser/amaya.png b/wwwroot/icon/browser/amaya.png
new file mode 100644 (file)
index 0000000..af1308b
Binary files /dev/null and b/wwwroot/icon/browser/amaya.png differ
diff --git a/wwwroot/icon/browser/da.png b/wwwroot/icon/browser/da.png
new file mode 100644 (file)
index 0000000..a6a15f0
Binary files /dev/null and b/wwwroot/icon/browser/da.png differ
diff --git a/wwwroot/icon/browser/dreamcast.png b/wwwroot/icon/browser/dreamcast.png
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/wwwroot/icon/browser/getright.png b/wwwroot/icon/browser/getright.png
new file mode 100644 (file)
index 0000000..20389ee
Binary files /dev/null and b/wwwroot/icon/browser/getright.png differ
diff --git a/wwwroot/icon/browser/gozilla.png b/wwwroot/icon/browser/gozilla.png
new file mode 100644 (file)
index 0000000..b9f1558
Binary files /dev/null and b/wwwroot/icon/browser/gozilla.png differ
diff --git a/wwwroot/icon/browser/icab.png b/wwwroot/icon/browser/icab.png
new file mode 100644 (file)
index 0000000..05c4561
Binary files /dev/null and b/wwwroot/icon/browser/icab.png differ
diff --git a/wwwroot/icon/browser/konqueror.png b/wwwroot/icon/browser/konqueror.png
new file mode 100644 (file)
index 0000000..3fb315d
Binary files /dev/null and b/wwwroot/icon/browser/konqueror.png differ
diff --git a/wwwroot/icon/browser/lynx.png b/wwwroot/icon/browser/lynx.png
new file mode 100644 (file)
index 0000000..c1d4527
Binary files /dev/null and b/wwwroot/icon/browser/lynx.png differ
diff --git a/wwwroot/icon/browser/mediaplayer.png b/wwwroot/icon/browser/mediaplayer.png
new file mode 100644 (file)
index 0000000..0451664
Binary files /dev/null and b/wwwroot/icon/browser/mediaplayer.png differ
diff --git a/wwwroot/icon/browser/msie_large.png b/wwwroot/icon/browser/msie_large.png
new file mode 100644 (file)
index 0000000..0ff2362
Binary files /dev/null and b/wwwroot/icon/browser/msie_large.png differ
diff --git a/wwwroot/icon/browser/netscape_large.png b/wwwroot/icon/browser/netscape_large.png
new file mode 100644 (file)
index 0000000..7bd913a
Binary files /dev/null and b/wwwroot/icon/browser/netscape_large.png differ
diff --git a/wwwroot/icon/browser/notavailable.png b/wwwroot/icon/browser/notavailable.png
new file mode 100644 (file)
index 0000000..11e92b1
Binary files /dev/null and b/wwwroot/icon/browser/notavailable.png differ
diff --git a/wwwroot/icon/browser/omniweb.png b/wwwroot/icon/browser/omniweb.png
new file mode 100644 (file)
index 0000000..a87ad65
Binary files /dev/null and b/wwwroot/icon/browser/omniweb.png differ
diff --git a/wwwroot/icon/browser/opera.png b/wwwroot/icon/browser/opera.png
new file mode 100644 (file)
index 0000000..9e62f14
Binary files /dev/null and b/wwwroot/icon/browser/opera.png differ
diff --git a/wwwroot/icon/browser/pdaphone.png b/wwwroot/icon/browser/pdaphone.png
new file mode 100644 (file)
index 0000000..05ff318
Binary files /dev/null and b/wwwroot/icon/browser/pdaphone.png differ
diff --git a/wwwroot/icon/browser/staroffice.png b/wwwroot/icon/browser/staroffice.png
new file mode 100644 (file)
index 0000000..791d176
Binary files /dev/null and b/wwwroot/icon/browser/staroffice.png differ
diff --git a/wwwroot/icon/browser/teleport.png b/wwwroot/icon/browser/teleport.png
new file mode 100644 (file)
index 0000000..dceba90
Binary files /dev/null and b/wwwroot/icon/browser/teleport.png differ
diff --git a/wwwroot/icon/browser/unknown.png b/wwwroot/icon/browser/unknown.png
new file mode 100644 (file)
index 0000000..895b771
Binary files /dev/null and b/wwwroot/icon/browser/unknown.png differ
diff --git a/wwwroot/icon/browser/webcopier.png b/wwwroot/icon/browser/webcopier.png
new file mode 100644 (file)
index 0000000..e0ce7b6
Binary files /dev/null and b/wwwroot/icon/browser/webcopier.png differ
diff --git a/wwwroot/icon/browser/webtv.png b/wwwroot/icon/browser/webtv.png
new file mode 100644 (file)
index 0000000..07dc458
Binary files /dev/null and b/wwwroot/icon/browser/webtv.png differ
diff --git a/wwwroot/icon/browser/webzip.png b/wwwroot/icon/browser/webzip.png
new file mode 100644 (file)
index 0000000..8a8707f
Binary files /dev/null and b/wwwroot/icon/browser/webzip.png differ
diff --git a/wwwroot/icon/flags/Thumbs.db b/wwwroot/icon/flags/Thumbs.db
new file mode 100644 (file)
index 0000000..f785ce6
Binary files /dev/null and b/wwwroot/icon/flags/Thumbs.db differ
index 92a585c362679641f9fae5d7abe0f05b70b522f3..e361d180c34ee161c6a68337bcf6be48d0b5685a 100644 (file)
Binary files a/wwwroot/icon/flags/ba.png and b/wwwroot/icon/flags/ba.png differ
diff --git a/wwwroot/icon/flags/mo.png b/wwwroot/icon/flags/mo.png
new file mode 100644 (file)
index 0000000..eaba8d9
Binary files /dev/null and b/wwwroot/icon/flags/mo.png differ
index 1ddae295ea9d20f96211d370ac016080b4ea7c3d..8ef65813f97eba3ed675dbac35e6a9c664e2866a 100644 (file)
Binary files a/wwwroot/icon/flags/sn.png and b/wwwroot/icon/flags/sn.png differ
index 71f635a2d17a850276da1bdce75c5ddd5865a95f..6f39351fc6a2041c52b47ef239007c489b08c279 100644 (file)
Binary files a/wwwroot/icon/flags/sv.png and b/wwwroot/icon/flags/sv.png differ