Site tree framework

Christian Egli <[email protected]> 08 Apr 2003 19:22:15 +0200
Newsgroups gmane.comp.cms.wyona.devel
Message-ID <[email protected]>
--=-=-=


A bunch of us had a discussion here at the office about a site tree
framework. 

Here's my digested notes of the discussion plus a chart which
hopefully helps understand the ideas.

LEP Sitetree Framework
======================

Abstract
========

We need a general framework for management of navigation for a publication. 

Motivation
==========

Currently there is no standard way to manage the navigation in
Lenya. Previous attempts have shown their own merrits and drawbacks. A
general and standard approach is needed.

Rationale
=========

The basic problems we're trying to solve are as follows:

1. Maintain the navigation in an easy format independent of the actual
   storage of the documents.

2. Enable moving of documents.

3. Enable querying of doctype independent of request URI.

Navigation
----------

There are a couple of known implementations to choose from: 

1. The existing Lenya tree.xml

2. The forrest site.xml

3. The hashmap way: A sitetree.xml and purlspace.xml combination
   where the purlspace.xml contains all existing documents and
   sitetree.xml contains the navigational hierarchy.

Moving Of Documents
-------------------

The Forrest site.xml solves this quite elegantly: Due to the use of
XPath and some ambiguity the documents can be found almost
independent of their actual location.

With the existing Lenya or the hasmap solution changing of document
location requires editing of the tree.xml or the purlspace.xml
respectively.


Doctype Querying
----------------

For question 3 there are a couple of known approaches:

1. Hashmap
   
   This method uses an action which contains for each request URI a
   mapping to attributes such as doctype, srcfile, xslt, etc.

   - every possible request has to be in the hashmap (even dynamic
     ones).

2. Forrest SourceTypeAction

   Forrest contains an action which for a given request opens the
   source file and determines its doctype based on the dtd
   declaration.

3. URIParametrizer

   The URIParametrizer is a black box (probably an action) which
   internaly issues cocoon requests to different sitemaps which return
   different attributes (doctype, etc.) for a given request URI.

   This amounts to a combination of the hashmap solution with the
   basic cocoon concepts: The request URIs aren't matched against a
   hashmap but are handled by a sitemap instead. The sitemap contains
   normal pipelines and matchers which match on the request. As a
   catch-all there is still the possibility of using a hashmap for
   URIs that didn't match any pipelines.

   Finally a new (internal) request is generated using the parameter
   values. This request is handled by a normal cocoon sitemap as if
   the original request had contained these parameters. 


Backwards Compatibility
=======================

There has not been a previous implementation, so this is a non-issue.

Roadmap
=======

Decide which solution to choose

Reference Implementation
========================

None


--=-=-=
Content-Type: image/png
Content-Disposition: attachment; filename=URIParametrizer.png
Content-Transfer-Encoding: base64
Content-Description: URIParametrizer diagram

iVBORw0KGgoAAAANSUhEUgAAAjoAAAEyCAIAAAB8ke1nAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4
nO3dT2wdRx3A8X22Ezt5jqmILTey47axS9IIqeoFoRYlNBRhVa040ChWEv6pUZESIZCaShYNag/A
AdETBKSKMyRKBAf+BalqOfBHiJYTNIbETRrXKbUdEZLWxP+yHLZd1ju7s7P/ZnZ2v59D9Px2Z+b3
9r3M783s7NuW67oOAADV1mE6AAAAkpGuAAAWIF0BACzQZTqA4rVardAzVpyfa7Va2eL0X69XPO5P
X6gVSw8XgKbJ2EVWXKjrz5wJdMqTrsQMJHn5kQ1ZcYgANFkNR1cqQkMQyVbvcXCk4hcJ/Zmq5tA+
3vPBrSQPAAiqf7oSJ7uCIwkx5Ui2+tkr8s9UNTtCctIzvhGPBgBYobbpKm6UE8oKoZQj35rYYmLZ
4D46x0/yMR8AVF9t01VwlJO4uKAo8pojl0LoITkaAGCF2qYrnzjPVl5/rVKz2cyhbdYRAIrVuOuu
5PN74tygpCpx3YRk//KGdKliBgBL1fCLduRsm2SZgyNd3SeZS5RvDdWscnmTPCq5uFWFiUeD664A
WKGG6apYTJ0BQBU0bjIQAGAjhg6xuGgXAKqDdAUAsACTgQAAC9QkXaVaca5N09oFgPIkXCYc+Suu
taHtByZMHUaDb1+pTfObUkADJYyuEruDKgxr5GvN47Z6z3vKjkrzzwMaaTck5ycnsXISFdA0NZkM
BADUm9JvBsp/MSHDVn+mKHGxeOKcUoahld+o5FfbJVGpLHCXDOniyqr80Ebkbbc0tCvZQS7bZyN4
mzHm/QB4lNJV3O/3yH8vVbLV22Tqnr9+p6/S42e4M28ceVmVG52EkpZi03nadYREotJiZOWKn5zg
pmyvF0AtmZwMFLvFyO/yxQ6t5CI76+BoTCVmSUecWFYueDQih32Ft5snVxWCFAXAU/8biNiiyqve
GdkAMM7idFX40KoQ2drNfw/J8tolVwGoApOTgaGeMW5ZhM5hhzhRJp5xiduaSL1ssS85T7viea/I
UlyYDKBsCb1taF1W5DKtVEvLIheARRYMFlc/T6O4VRJwaIdUW+UL8+SvN7RJXAooibmkdlWadmLe
o8yfnOCecUstcq5XBGAjY/M8OaeY6jQTaG+7AKCNrekKANAoxkYD/mOSFgAgEUMcAIAF+M1AAIAF
SFcAAAuQrgAAFiBdAQAsQLrSanZ2dmJi4vjx46YDAQDLsDJQq/Pnz+/evfu+++57/fXXTccCADZh
dAUAsADpCgBgAdIVAMACpCsAgAVIVwAAC5CuAAAWIF0BACxAugIAWIB0BQCwAOkKAGAB0hUAwAKk
KwCABUhXAAALkK4AABYgXQEALEC6AgBYgHQFALAA6QoAYIEu0wEAqIlr164dO3bMdBSoLdIVgGIs
Li6ePn3adBSoLdIVgCJt3br1Bz/4gekoGqTVapkOoXQTExMO6QpAsdrttte5AEXxPlEstQAAWIB0
BQCwAOkKAGAB0hUAwAKkKwCABVgZWJbV1dUvf/nLKysrwSdv3LjhOM7s7Ky4dOrjH//417/+dX3x
AYBVSFdl6erquuOOOyIvQLlx44Z4NeVXvvIVLXEBgJWYDCzR5ORkT0+Pyp579+59+OGHy44HAOxF
uirR0NDQkSNHVPZ87rnnyg4GAKxGuirX5ORkd3e3fB+GVtXX+oD8z9DzYvG4HQAkIl2VS2WAxdDK
Cq7ruq7rP/b/Df7pCyUkv6y/g9bQgVogXZVOPsDas2cPQysAeTRkvE66Kt3w8LBkgPX8889rjAU6
NKTvKImlE6elxpl4QOLG67YcPUWkKx3iBlgMrerE702Y7ssjcWa1afxPFJ8r0pUOcQMshlZ1Qveq
h8qqFvGxvKz32H8yccmM+HyocknYcZviYpaTV5stKpWjITmSKu1mQ7rSRBxgMbSqKzJWqdz1Qofa
G394vaS4Q1xZ73HwSbFsKzDKCfXC4ogwFLOkbGLMzvo5vVDlkiFX5qhUjobkSDrCiLCo/w6kK03E
ARYLAi0i9lwGg2mC4HfzuO5YItg7ZysuxhN8MlWdimXjYg6mkwI/eOqvKP8BLCpjka70mZyc3Lhx
o/d4z549+/btMxsPUgl1GcH/kP7sR2jn4A6SeRWI5GOCzBNNNpb1FD5SyRlV/leUAelKn+Hh4c99
7nPeY4ZWNorrQ+OejCwY2QVDUWiWKcMoJ/O7kOdNzFy21EyQJyojn2fSlVZPPfWU4zibN29maAXk
l6c3T1U2z7Am55CopIxV4EBNrKclnHsrJKXp+EX2l1566cc//rGGhqrPu4GI4zjiDUQa68UXX+zr
6zMdBaoiOLMq9nGucMLfm4xyPzjDH6zEEca4cWX9Rt3ASgF50/LK1bfKY44MO7g11UtW3Jp4NOTv
QmLMmelIV9PT0+L9MppscXGRA+L7/ve/bzoEVEhi1yZ2nfnLxlUiaSuxcsWtKqUk+6R9ySpbVY5G
4pEpY4ZQ3/2uHnnkkSeffFJbcyq0nSFEpKeeesofbqKaVldXu7q4Kx4qQd8HcXR0lBkwBH31q181
HQISzM3NfepTnzpx4sTExERnZ6fpcFB18rncnFhqAUBmamrq8OHDH/3oR3/yk5+sra2ZDgeVVupy
QdIVgGRTU1OHDh0iacEg0hUAVSQtGES6ApAOSQtGkK4AZEHSgmYsUYVhFy5cuHbtmukoEG1ubk6+
g5e0vvnNbx49evSBBx7QExWaiXQFwx566CHTISCvN9544/jx46ajQM2RrmDYvffeywU96lzXXVxc
dByn3W5raG51dfXixYsqe3Z0dPT19V2/fr3skNBYpCsY9oc//GFgYMB0FNZYWlp65ZVXHMcZHx/X
0NzVq1eHhobk+/T29h49evT48eO3bt0aGRnREBWaiXQFICM/UXlfOGZmZkxHhDojXQFIrd1uHzt2
zE9UgAakq6Yo6pYzaDgSFUypaLoK3bsl7k9f3D1gxB0Sy1ZT/mRjxctElbXb7aNHjz7zzDMkKhhR
0XTlRN1GLHTvr+AOoT8T77EmKQsghESFKqhuujJFcvNNZ/0P44s/ki+5Yah/e83gfTbjBoWRzyfe
UTQxqsisrD5UFYvL20UNbNiw4ZlnnpmcnPzwhz9sOhY0nY50VXYXVuxdFsXOWhznhbrpyHuSBjcF
h3RxZUOPg7WJI0Ix5sSoJEcpMobEqBLbRQ0MDAx897vfTVWEDwBKYvHoSj5oUCybrXiq+23Li/vx
iGlAT1SKuUoSVc6jAQAqLE5Xkn5Wvawoz1jNVNn84o6h2ahCXNddXV3dsGGD6UAAGFCHX2TPNhaJ
5PXa2W6Imaess/4unCXdizOOJN8bjCpoeXn5O9/5zvDw8MLCgpEAqqNSXyAAnSo6ugqdrTH1X1Tb
aCnx7FR5JOskDUblW15e/t73vnfy5MmrV68aDAOoAdvXQ1U0XTnCmElc6ibpWP2C4vmt4Co78W0T
G/WWEoRWK0SeNpOUDQUsWWEfekZlqzyqVDuI8rSbk5eofvjDH87OzhZYLWC7zF8iC5yIMqK66cqJ
7/4in1c84Z/4Nod2SLWOIK5sXCWSthIrzxxVUcXL+462vLz8wgsvnDx5kkQFwFfpdIWmIVFBG5Wr
IeVTC5IZoFAN4nx7tnad9fNDce2qXDwqibmySFeoBBIVNHMVroYUO3o3cCWl5LxvSe2GikcSoxID
SBtzRZCuYNLu3btfffXV3/zmN6dPn068z7rjOK+99lqGn1dot9v3339/pgDRFBl6bXEyX+z9c87V
p2VX+kmLdAWT3nzzzUcffVR9/8cffzxDKzt37pyamspQEA1n45rkkDplL9IVTNq2bds777zz7rvv
Kv6nGhoa6uhIcbHg8vLyO++8kzU6NFrk77zUuN3qI13BpIsXL87Nzd28efPZZ5/9+c9/vrS0JN//
L3/5y7Zt29Tr/9WvfvXYY4/lixFwnKicoXLuKv+lTjmv4KzT9GAdftUCttuxY8dPf/rTv/3tbxMT
E93d3abDQSOElthFLkloBYQuvozbQX+74jrAuKgim7Zo6Ea6QlWMjY15SevAgQMkLZQt+LtiwR8Y
C10ZGbdb5A5xrZTarth03KbQk/LIK4h0hWoZGxs7deoUSQtACOkKVRRMWhs3bjQdDrCOP41m0Uxa
DZCuUF1e0vr73/9O0kKlJM4BogykK1Sdl7QuXLhw4MCBzs5O0+EAMEPfQvaXXnppYmJCW3ONZdHs
xI0bN9R3HhkZOXXqVHnBAKg4felqenp6enpaW3MAgDrRka4eeeQRvhd7Zmdnn3766aGhoRdeeMF0
LFXR19dnOgQAFtCRrsbGxsbGxjQ0VH3nz59/+umn+/r6Dhw4YDoWALAJSy0AABYgXQEALEC6AgBY
gHQFALAA6QoAYAHSFQDAAqQrAIAFSFcAAAuQrgAAFiBdAQAsQLoCAFiAdAUAsADpCgBgAdIVADRC
q9Wy6PatItIVANgkc8pxXbfYSDQjXQEALKDj9owAUDWtVst1XW+k4j9w1g9BQuMYf5NYyokZu/h7
FtKuv0nerqR4YtkqI10BWXidjukokJ2XKrw3MZhUgu+s2NF7z3hlQ58BxY9EnnZDxSOJUYkBpI25
IkhXQDpWn6xGnAy9dqhIZCJJrLbYbGFX+kmLdAWkE/xejHoz9S4X2G6dshfpCvg/9XMSqD1xpKIn
e5lqt/pYGQj8X/Asgo/OAk5Uzgg9EzkRl/9Sp1TFxY9rnT69DU1X5b2F1FwDkeckTAWDkoSW2EUu
SWgFiJPAkTvob1dcBxgXVWTTFn22mQxUVdI5zMhlrMXWXEblTmDerPCaJc3pbBH1FvwgqTwW/4x8
JnEHDe3GbU27DKRqmpiu0iYe9W8fGWoOXsmhvjg1bc2S4tnScCtw7YgeLHAAGq6hk4GpeCcwNLRS
0nIg675DGadyTgJN5k+j8f1Jp9h0JZkbDW0tr2zo+cSyjsIHSJzMVaw5UYaa1Se788Qs2Zqt5lbW
AVmwwtDjyNbTNlEU+TmJ6sQJU4IrcUzH0iDRk4FiLybfKv8zT1nJtdzZOs2QPFenZ6s5bn/1RtVj
bqU8vVTe0XCi3sHINzcYc1FNZyBplx4qDhO2KFXE6EreR4hbg7NYxZbNMD8m/74TF17+dhVrfv31
11MVV685MmbvaMS9lmw150khflXySsgHAERK567ydB90PYnKHkMUviYiOAmW4fuEwTFTotC0JIDq
aNDKwPJ6yTw1px2PFiVzzTnnCVsfLCmsZsaqZlQAnMjRlfhlPPhn5NbQSYgCy2boDTN8L87frmLN
u3fvljSUKnL1mDNMbCrWLKkhslG/Kv8kWapqATRZ9GSgfGWUka2hqae0M1GJJ0skUQUnvsRONlXN
wXNXoTrF15In5lC04ivKU7Oz/pjE1SMWEfcPPhl6cyUtRh4uAPUWOxko/0Ktf6uY2DJUni2qnCOt
YPHz588XVW1iDaWecczQtOQdTPsYQAM15dxVeZ0dNVff8vLy1NSU6SiKsbKyMjMz4zhOBV/R22+/
bToE1FlT0lWc4DRUsZ04NVfHpUuX7rvvPtNRAMil6enKxhGMjTWb0tPTs337dsdx2u226ViK4bru
4uKiU8lXtLKyMj09bToK1FbT0xXqbdeuXS+++GJnZ+enP/1p07EUY3l5+eWXX3YcZ3x83HQsYVeu
XLnrrrtMR4Ha4iduAQAWIF0BACxAugIAWIB0BQCwAOkKAGAB0hVgE359Co1FugIAWIDrrspy+/bt
n/3sZ6EnZ2dnHce5efPm2bNnQ5sGBgb27t2rKTgA5uT54ZjyfnSm+j9nQ7oqS0dHx49+9CPvis6Q
t956a//+/aEnT548SboCLCK/s4FEnjumFn63VQ01F4XJwBI999xzinsODw8/+eSTpQYDAFYjXZVo
z549+/btU9lzcnKyu7u77HhQAxX//ptB8DZmTsz9zFrrhZ4P7RDXSty91jK0Gyoe166kuErMEorV
FhVVnmMllsrwej2kq3KpDLCGh4ePHDmiIRiggrw5KNd1/cmo4GN/nyB/kzcX5xcXC5bUrt90cGuo
/lBUkQGkjVmlrCTmzFHlOVZujvcohHRVLpUBFkMrwBfZh6YqEtkbxvXOedqVaGU9raWBmHTTKuk9
SkS6Kp18gMXQCkiUOMFV/Xa1ZS95zP7gpvAjqeE9Il2Vbs+ePQ8//HDcVoZWgFxoHklnv2+k3TwU
Y845KZe53ZxIVzo8//zzkc8ztALSEnvYyNMz4j45u+ZUxcVMoHNQGNeothiyvUeJSFc6xA2wGFoB
/rKx4J9Bwckrv5sLnYARd9DfbqgGSVSRTSvmEnnZxJhDAStGZeo9CiFdaSKewWJoBTiBiSln/YKI
YI8WmmUSp5sUp79KbVdsOm5T6MlUE2iJZSUxuwLFmgs/ViqvVES60mTv3r2hARZDK9SMkfkuNAfp
Sp/gAGtoaIifsQBy8iepyJSVVeB7RLrSZ+/evR/72Me8x5OTkz09PWbjAWyXf34JZSvwPSJdaXXs
2DHHcbq6ujhrBQCp6PhF9mvXrr3yyisaGqq+f//7347j9Pb2/vKXvzQdSyX09PQ89thjpqMAYAEd
6Wpqakq8X0aTXb9+nQPiufPOO99++23TUQCwgL77XW3dulXy4w5omlu3bjHEBKBOX7ratWvXmTNn
tDWHivvXv/61bds201EAsAZLLQAAFiBdAQAsQLoCAFiAdAUAsIC+pRYAmmBhYWFiYsJ0FKgh0hWA
Ii0uLp4+fdp0FKgh0hWAYmzduvXUqVOmo0Btka4AFGPz5s0HDhwwHQVqi6UWAAALkK4AABYgXQEA
LGBrump9wFTrjWoXAIyr9FKLUO8cvBml99hU913SrUslr1febqvV4m6qAOqtuukq1AXXfmDRtNcL
AKlUNF3lHC4kDlPkO0i2+pskAx1509lI2vU2BduVvN7Qa3Fd19vkPxD3CdbjbxJLRbYLAEWpaLoS
peoKxfQjdtPBP+U7izXHDX1yjpCCxUMvQdKulzMkxye41U8zoYLB5yVh+Ju8svIDCwAFsnWpRU6K
Y5HIrZI683TWruv6OaDAmcBQVJIIMwQv5lTmMAGUxJrRVSryTjM0UpGPY3JmoMxFChyp5EkhpB8A
FVHDdCV29HFzaHH7J24tXKmtZK5Z8UgCgAYVnQwUp5Uyd5Sp6snTHeeMuaRMUOAEnViP/LQfABSo
uqMr+aozf5M4aycWDC0KyLwsUN5uYsxymV+vWFZxq7+kUFxhERdS6EiyMhCANtVNV06OdQGRp6My
FCxjB0mpPOsgMryuuMMiOVzqVy4DQLEqna4AWGRxcfHXv/616Shgpe7u7scff1y+D+kKWQSvTWaA
Bc/CwsL+/ftNRwEr9ff3z8/Py/chXSELUhTibN68+dFHHzUdBayxtLT0i1/8QmVP0hWAWCsrK9PT
0zt27Ni4caNikf7+/jNnzpQaFepkYWFhYGBAZU/SFYBYrutevnx5ZmZm+/btqZIWUDjSFYBY3qzv
2toaSQvGka4AKPGT1sjIyD333EPSgmakKwAprK2tXbp06cqVK2LS4je6UCrSFYDUJEkLKAnpCrBJ
pUYwftK666677r77btPhoOZIV4CVXn75Zf9xZA6TJDb1/VUusFtbW3vjjTcuXbp0/fr1xJ2BzEhX
QDrnzp3zHoyPjxsMY3l52WDrItd1qxYSakZfulpYWDh79qy25lBxln4TP3funJ+lgo+18cZAHR0d
n/zkJ/0nE3/CWHGr+OTS0tKf//znxKg2bdq0fft25gNRKn3p6h//+Ae/J4Y6GR8fN5KxPHpWN3R0
JNwSr91uj46Obtu2rdVqzczMaAgJjaUjXfX39z/xxBMaGqq+mzdv/va3v92yZctnPvMZ07FUwh13
3GE6hP/zZvm8JOQ/GcpGZicAK6W3t3d0dPTOO++s1OoP1JiOdLVz505+Q8xz/vz53bt3Dw8Pc0Aq
yEtUoQGTZPxkcGhlFonKrMbetpulFsA64nAqMi01M1cVnqjEeqzoiEtNGPIbmkc+oyGqKiBdacW3
0XpoYK7q7e0dGxsbHBws9jPsum6ok619nysnHg2DwVQN6cqAJv9vrIGm5aqSEpUi+VAjeINQ8Wah
cWW9lODv7+8WWXnc88HKxf/RcWUTY5ZLrDZDVCpHQ3IkQ6VSvZy0Epb9AE0TXGfhCMlJ/FNfZCZ0
d3d/4hOfMHiayl0vst9stVpenyv2m5Fl/SFdsJsOlfV38J4Xu+NgzaGYJWUTY3akKSeyuZxRqRwN
yZEM1Sy+nAIxugLWkawM9J6vfYoK0pOlcn43DxbJWdyPJ1Sn+nFQLBsXsxsYdUXGlo36K8p/AF1h
grcopCsgLG6ur1FzgDpJurY8+dLGsh43MNtWYMYyUrZApCutKvKuA1YQO+vMo5xUZZ18w5rMZUtd
ZlJgVKb6Mc5dGVDeJxJ5+HN9jZrus4i28UGeEzA5T96UlAkKPKUk1iOeeyupi2N0BbyPub5CpOqq
guvZxILiCX9/hYIT6CUjz/RIyvqNBlcKyJuWV66+VR5zZNjBralesuLWxKMhfxcSYy4Q6QqAMYld
m9h15i8rX+agWH+2rSqlJPukfckqW1WORuKR0TNjxGQgAMACpCutWGoBoDb8iUQ9PRuTgQaw1AJA
DWjuykhXqL/bt2///ve/Nx1Fkar5iubm5kyHgDojXaH+XNd99913TUdRsAq+ovfee890CKgz0hXq
bNOmTY7jbNmy5f777zcdSzFu3779xz/+saOj48EHHzQdS9hbb71lOgTUGelKq7Q/wIycOjs7Hcfp
6Ojo7e01HUsxbt++7T2o4Ctqt9umQ0CdsTIQAGAB0hUAwAKkKwCABUhXAAALkK60YqkFAGTDykAA
Rfrvf/979uxZ01HAGjdv3lTck3QFoEgLCwv79+83HQVqiHQFoBibNm164oknTEcBK23ZsiVxH9IV
gGL09/efOXPGdBSoLZZaGMBSCwBIi3SlFfe7AoBsSFcAAAuQrgAAFiBdAQAsQLrSil+1AIBsSFcA
AAuQrgAAFiBdAQAsQLoCAFiAdKUVSy0AIBvSFQDAAqQrAIAFSFcAAAuQrgAAFuB+V1qFllqE1lzw
e+2w2szMzMjIiOkoYKX+/v75+Xn5PoyuyrK6urpz586O9e655x7HcS5fvtxqtVqtVnDTkSNHTIcM
ANXF6KosXV1d3/jGN770pS+p7Lxhw4Znn3225IiA1NbW1lZWVnp6etSLjIyMvPnmm+WFhJpZWFgY
GBhQ2ZPRVYkOHTp07733qux5+PDhHTt2lB0PkNbq6urvfve7V1999T//+Y/pWNB0pKsSdXV1nThx
QmU3hlaosoWFhT/96U+vvfYaSQsGka7KdfDgwcQB1uc///nR0VE98QCZzc/Pk7RgEOmqXIkDLIZW
sAtJC6aw1KJ0Bw8e/Na3vnXhwoXIrYcPH2ZoZZdz5875j8fHx43EYPxnJ+fn5+fn5wcGBsbGxj70
oQ+ZDQYNweiqdJIBFkMr65w7d278A8761KVHpS7O80Zaf/3rX2/cuGE6FtQfoysd4gZYhw4dGhsb
MxISsgkOp8bHx/WnK9/U1FTk86nymXznVqu1urqaWMnc3Nzc3Fy73V5eXlZvGkiLdKWDN8D64he/
KD5pKiSIvNwTSkKS6T6Ducp13cuXL5tqPdJ7772X+KsEQB6kK00OHTr07W9/+5///GfwGYZWleIl
Km+6z38y9Kf/pGPuxNWuXbskW9VPayXu6bru6urqpUuXVGprt9sbNmxQbBrIgHSlSWdn54kTJ77w
hS94f3LWqrJCScjLYeKTTkwmK1ur1br77ru1NXfr1q3EdDU4ODg6OtrX1zczM6MnKjQTSy30OXjw
oPebgY7a9VioOLPnrqpgcHDwwQcffOCBB/r6+kzHgvojXenT2dn5ta99zXvM0ApWGxwcfOihh0hU
RlRqdahOpCutPvvZzzqO0263P/KRj5iOBdFCAybJjF8zh1Z+otqyZUv+2lqC/HVqUGqciQck7qSj
LUcvM85dadXZ2ek4Dl9IqyxxZWAVLhM2YnBwcGxsrJAs5XNdt9VqBfvf0J9NIx4Ng8FUDelKq+3b
tzf5v6It5EmoUSnKU0aiUhTqryPvaOo9Gbr3qaSslxL8/f3d4m6XGvl8sHLxP3Vc2cSY5RKrzRCV
ytGQHMlQqVQvJy3SFYBYXV1d+/bt27hxo6kAxFQRfMbrKEMJQHK3bu+Z4JAurmzocbA2cUQYIimb
GLP8JQRjFg9UtqhUjob8SGobH5OugPd5s3xmr6mqmq4uHV1Ezu/moWSQp7gfj5hgFGtTLBsXcygh
FdXvq7+i/AcwMXFmRroC3keKMkU+JshcrY1lPZGDvJzMvqJCkK4AVJTYWWce5aQq6+Qb1mQuW+oy
kwKjMpW9WMgOwA7axgepZv8KLOuUlglyRhUk1hN6hnNXAKouQycVXM8mFheXnAVP7PubIs/0SMr6
jUaudIgsLq9cfas85siwg1tTvWTFrYlHQ/4uJMZcoOamK/E7AkvMAc0S/9NFLo3LWVa+zEGx/mxb
VUpJ9kn7klW2qhyNxCOjp/NsbroSl6+UOnEMAMijuelKhXw5qWRknTg6jtsanKxQKSvuUPgSWACI
JJ/LLRzp6n2R5w8l1/qJIzPvgcp1c/KrAtOWVY8ZAAqkuXtperqKG4uoXFWXePF5qLj8TKb6Gx/X
bp5rG+ttaWnp4sWLpqOov6tXr5oOAXXW9HQluRxP3teXdPF5Inm75KdIt27dIl1pMD8/bzoE1FnT
05VPHOKoZKAyLj5XEdcuU38h3d3dY2NjpqNois2bN5sOAXVGuoomn6BLTE55zk6pV5sq5mbq6ekh
XWlj8Jdw0QTNTVehi+McobuXX3MnX54nX90n2SpesudELaBQrFncAQAs1dx0lXjFXNw+kufV91Gs
OdV1i+r7AIB1+M1AAIAFSFcF86fvWKQHAAVq7mRgSZiLA4AyMLoCALmEbVgAAAAZSURBVFiA0RWA
Il25coWZcJSB0RUAwAL/Ax/5iaYAkzcsAAAAAElFTkSuQmCC
--=-=-=


-- 
Christian Egli       [email protected]   +41 1 272 9161
                     Wyona AG, Hardstrasse 219, CH-8005 Zurich
Open Source CMS      http://www.wyona.org http://www.wyona.com 

--=-=-=--