Valentin Lorentz
59ae6f987d
ircdb: Honor ignoreDefaultAllow for unknown users too.
2014-02-27 19:05:19 +00:00
Valentin Lorentz
8fd834beb7
Fix precedence of commands by removing Utilities from the list of important plugins.
2014-02-22 00:03:58 +00:00
Valentin Lorentz
d1aa36126d
Add Utilities as a default plugin.
2014-02-21 23:55:41 +00:00
Valentin Lorentz
5d301b653f
Merge remote-tracking branch 'origin/speed-up-2to3' into testing
...
Conflicts:
locales/fr.po
plugins/Misc/plugin.py
sandbox/check_trans.py
src/i18n.py
2014-02-02 22:28:19 +01:00
Valentin Lorentz
4fe74ed397
Merge branch 'aka-sqlite3' into speed-up-2to3
2014-02-02 22:15:43 +01:00
Valentin Lorentz
0d4784cf4a
Fix compatibility with Python 2.6 (does not support the set syntax).
2014-01-26 21:49:28 +01:00
Valentin Lorentz
aea86d432f
Fix previous commit.
2014-01-26 21:34:24 +01:00
Valentin Lorentz
c872cd793f
Fix compatibility with Pypy (does not support __closure__ attribute for functions).
2014-01-26 21:19:28 +01:00
Valentin Lorentz
a7f750d273
Fix compatibility with Python 2.6 (does not support the set syntax).
2014-01-26 21:14:21 +01:00
Valentin Lorentz
eaed281de7
Fix compatibility with Python 2.6 (does not support the set syntax).
2014-01-26 21:13:06 +01:00
Valentin Lorentz
121991eff9
Fix case of i18n.InternationalizedFunction.
2014-01-26 20:45:28 +01:00
Valentin Lorentz
9b365d1ed8
Fix case of i18n.InternationalizedString.
2014-01-26 20:45:28 +01:00
Valentin Lorentz
f3e292d518
Fix memory leak in i18n by using weak references to plugin classes and methods.
2014-01-26 20:45:28 +01:00
Valentin Lorentz
489ec1b065
i18n: Move the pot files parsing to a separate function.
2014-01-26 20:45:27 +01:00
Valentin Lorentz
6a8b7889ea
Remove unnecessary call to i18n.reloadLocalesIfRequired.
2014-01-26 20:45:27 +01:00
Valentin Lorentz
3e35113e02
Fix internationalization of docstrings of wrap()ed commands.
2014-01-26 20:45:27 +01:00
Valentin Lorentz
e1f9d68870
Switch comments of callbacks.PluginRegexp's attributes to docstrings (for Sphinx).
2014-01-26 20:45:27 +01:00
Valentin Lorentz
a5e06e1b57
Update documentation of ircdb.checkCapability (used in the Sphinx doc).
2014-01-26 20:45:27 +01:00
Valentin Lorentz
8d1201aa43
Fix case of i18n.InternationalizedFunction.
2014-01-22 11:04:08 +01:00
Valentin Lorentz
5c08281543
Fix case of i18n.InternationalizedString.
2014-01-22 10:54:40 +01:00
Valentin Lorentz
974a64de44
Fix memory leak in i18n by using weak references to plugin classes and methods.
2014-01-22 10:51:01 +01:00
Valentin Lorentz
80aa419035
Add file minisix.py (forgot to add it in previous commits).
2014-01-21 22:41:50 +01:00
Valentin Lorentz
1874440cc8
i18n: Move the pot files parsing to a separate function.
2014-01-21 22:39:48 +01:00
Valentin Lorentz
35c7b52e14
Remove unnecessary call to i18n.reloadLocalesIfRequired.
2014-01-21 16:36:45 +01:00
Valentin Lorentz
3af1e3f42d
Fix internationalization of docstrings of wrap()ed commands.
2014-01-21 16:33:35 +01:00
Valentin Lorentz
f27484d2bb
Switch comments of callbacks.PluginRegexp's attributes to docstrings (for Sphinx).
2014-01-21 13:43:52 +01:00
Valentin Lorentz
06fdaa792f
Continue accelerating the 2to3 step (remove fix_map).
2014-01-21 10:57:38 +01:00
Valentin Lorentz
1fbdedc7e0
Continue accelerating the 2to3 step (remove fix_funcattrs, fix_itertools, and fix_itertools_imports).
2014-01-21 10:50:55 +01:00
Valentin Lorentz
35a62b4e77
Continue accelerating the 2to3 step (remove fix_ws_comma, fix_xreadlines, and fix_zip).
2014-01-21 10:40:18 +01:00
Valentin Lorentz
ca419f6485
Continue accelerating the 2to3 step (remove fix_reduce, fix_renames, fix_repr, fix_set_literal, fix_standarderror, fix_sys_exc, fix_throw, and fix_tuple_params).
2014-01-20 16:04:53 +01:00
Valentin Lorentz
bb7db3ab21
Continue accelerating the 2to3 step (remove fix_except).
2014-01-20 15:49:15 +01:00
Valentin Lorentz
2fda69b4d6
Continue accelerating the 2to3 step (remove fix_raise).
2014-01-20 15:43:55 +01:00
Valentin Lorentz
c1c23f66f4
Continue accelerating the 2to3 step (remove fix_print).
2014-01-20 15:31:09 +01:00
Valentin Lorentz
529b8f8d99
Continue accelerating the 2to3 step (remove fix_nonzero, fix_operator, and fix_paren).
2014-01-20 15:19:06 +01:00
Valentin Lorentz
d1649a44ac
Continue accelerating the 2to3 step (remove fix_idioms, fix_imports2, fix_input, fix_intern, fix_isinstance, fix_ne, fix_next, and fix_raw_input).
2014-01-20 15:13:01 +01:00
Valentin Lorentz
4652c9ce51
Start accelerating the 2to3 step (remove fix_apply, fix_buffer, fix_callable, fix_exec, fix_execfile, fix_exitfunc, fix_filter, fix_funcattrs, fix_future, fix_getcwdu, and fix_has_key).
2014-01-20 14:49:47 +01:00
Valentin Lorentz
566e841977
Update documentation of ircdb.checkCapability (used in the Sphinx doc).
2014-01-20 11:35:28 +01:00
Valentin Lorentz
26dbe5ce81
Merge branch 'master' into testing
2014-01-07 09:37:13 +00:00
Valentin Lorentz
caba0d388e
Merge pull request #536 from ddan39/addshortopts
...
add short options to getopts. single letter options will work with both - or --
2014-01-07 01:36:05 -08:00
Dan
54196be509
add short options to getopts. single letter options will work with both - or --
2014-01-06 23:03:25 +01:00
Valentin Lorentz
5694f2499d
Merge pull request #535 from bnrubin/master
...
log: Add support for Logging's 'extra' keyword argument
2014-01-06 07:54:11 -08:00
Benjamin Rubin
1093cfb01f
log: Add support for Logging's 'extra' keyword argument
2014-01-05 17:15:00 -05:00
Valentin Lorentz
b44a08d2bd
Fix previous merge (again).
2014-01-03 17:48:30 +00:00
Valentin Lorentz
4a9d3ccd3e
Fix previous merge.
2014-01-03 17:15:32 +00:00
nyuszika7h
0934f1075b
Merge branch 'testing' into fix/fd-leak
2014-01-03 17:45:53 +01:00
nyuszika7h
0e480b4e52
Fix file descriptor leaks
2014-01-03 17:44:01 +01:00
Valentin Lorentz
38d78a4213
httpserver: add method 'doHook' to callbacks.
2014-01-02 17:20:15 +00:00
Valentin Lorentz
233571e4b5
Add arguments ignoreChannelOp and ignoreDefaultAllow to ircdb.checkCapability.
2013-12-27 15:04:32 +00:00
Valentin Lorentz
0ecdb87aef
Fix crash in sending queued messages if SocketDriver.irc is None.
2013-12-27 13:15:45 +00:00
Valentin Lorentz
89fb4fb3b2
Fix stack frames display for objects without __dict__ attribute.
2013-12-25 16:08:07 +00:00
Valentin Lorentz
84cad71cf5
Fix inspection of the stack if the 'self' object has no __dict__.
2013-12-15 19:30:20 +00:00
Valentin Lorentz
01278dc56c
Aka: Fix 'factorial-complexity' recursion and command overriding.
2013-12-11 16:01:01 +00:00
Valentin Lorentz
c774013e1f
Socket: Only call self.irc.feedMsg if self.irc is not None (ie. a reconnect is not in progress).
2013-12-05 12:37:00 +00:00
Valentin Lorentz
f894983b55
Add inspection of self.* in debug locals dump.
2013-12-05 12:35:56 +00:00
Valentin Lorentz
583b1baf64
Socket: Fix commit 4c24f30
.
2013-12-03 05:44:50 +00:00
Valentin Lorentz
9a83b741ea
Socket: Only display the missing cert file warning if a cert file path is given.
2013-11-27 16:44:15 +00:00
Valentin Lorentz
4c24f30504
Socket: Check if certertificate file exists before using it.
2013-11-27 07:26:09 +00:00
Valentin Lorentz
b673cdb037
Merge branch 'testing' of github.com:ProgVal/Limnoria into testing
2013-11-26 16:59:05 +01:00
Valentin Lorentz
aea77d64e7
callbacks.py: Pass a reference to the plugin to pre-command callbacks.
2013-11-26 16:57:33 +01:00
Valentin Lorentz
42b8a0676c
utils/web.py: Attempt to fix handling of RSS feeds using broken entity references.
2013-11-26 15:15:07 +00:00
Valentin Lorentz
ff5d83e7e6
ircutils: Add 'I' to _plusRequireArguments and _minusRequireArguments.
2013-11-25 20:44:52 +00:00
Valentin Lorentz
e65a722b2f
Add certfp support. Closes GH-468.
2013-11-10 11:45:01 +01:00
Valentin Lorentz
9d2c43d2f4
Socket: Trigger reconnect if socket file number has been set to -1.
2013-11-09 15:47:36 +00:00
Valentin Lorentz
0876bb345c
Fix import of supybot.gpg if gnupg is not available.
2013-11-02 06:17:51 +00:00
Valentin Lorentz
3f150e12e7
gpg: Disable use of incompatible library 'gnupg'.
2013-10-29 17:09:41 +01:00
James McCoy
bf48d521f2
Use generic setuptools instead of requiring distribute
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-10-10 20:37:12 -04:00
James McCoy
56a6799deb
commands: Consolidate state.channel checks into getChannel
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-10-10 18:54:50 -04:00
Valentin Lorentz
677f7fdd6f
irclib: Prevent crash if 324 or 329 is not received after any other post-join messages.
2013-10-10 14:10:06 +00:00
Valentin Lorentz
359d3c633d
registry: Make subvalues inherit privacy. Closes GH-519.
2013-10-06 14:26:03 +00:00
Valentin Lorentz
657b76d174
Fix merge.
2013-09-22 20:29:52 +02:00
Valentin Lorentz
990b911c06
Merge remote-tracking branch 'supybot/master' into testing
...
Conflicts:
src/callbacks.py
src/ircdb.py
2013-09-22 20:16:20 +02:00
James McCoy
6361b1e856
ircdb: Deduplicate hostmasks in IrcUser.addAuth
...
If addAuth is called with a hostmask that already exists (exactly, not
just equivalent patterns) in self.auth, remove the entry for the old
authentication. This essentially updates the timeout for the hostmask.
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-09-22 11:13:52 -04:00
Valentin Lorentz
4e2962b39e
Fix error when writing hostmask-collision error message.
2013-09-17 13:32:52 +00:00
James McCoy
4bc549c1ed
Prevent exception when replying with a genericNoCapability error
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-31 23:04:38 -04:00
Valentin Lorentz
01a6ed6540
Fix use of rsplit for IPv6 addresses.
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-26 21:37:12 -04:00
Valentin Lorentz
40675ffdfa
Merge remote-tracking branch 'supybot/master' into testing
...
Conflicts:
plugins/Admin/plugin.py
plugins/BadWords/config.py
plugins/Filter/plugin.py
plugins/Google/plugin.py
plugins/Math/plugin.py
plugins/Misc/plugin.py
plugins/Note/plugin.py
plugins/RSS/plugin.py
plugins/Seen/test.py
plugins/ShrinkUrl/config.py
plugins/ShrinkUrl/plugin.py
plugins/ShrinkUrl/test.py
plugins/Status/plugin.py
plugins/String/config.py
plugins/String/plugin.py
plugins/Time/plugin.py
plugins/Todo/plugin.py
plugins/Web/plugin.py
plugins/__init__.py
scripts/supybot-botchk
setup.py
src/__init__.py
src/callbacks.py
src/commands.py
src/conf.py
src/drivers/Socket.py
src/ircdb.py
src/irclib.py
src/ircutils.py
src/questions.py
src/registry.py
src/schedule.py
src/test.py
src/utils/file.py
src/utils/gen.py
src/utils/net.py
src/utils/web.py
src/world.py
2013-08-24 11:28:29 +02:00
James McCoy
ea7f1f8419
Socket: Match the expected API of reconnect
...
driver.reconnect(wait=True) should flag a driver to reconnect, but not
immediately. The Socket driver lost its handling of this flag in
8730832e
.
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-24 00:29:16 -04:00
James McCoy
e7d0bfd2d0
commands: Handle OverflowError in _int
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-23 23:36:44 -04:00
James McCoy
333067c151
Provide a default help message for commands without help.
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-23 22:57:13 -04:00
James McCoy
e421722960
Fix crash if a custom error message is provided to somethingWithoutSpaces
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-23 22:06:07 -04:00
Valentin Lorentz
960e1da61c
commands.py: Fix error message of getSomethingWithoutSpaces.
...
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-23 00:29:11 -04:00
James McCoy
5b329df6f0
Socket: Try all resolved addresses before scheduling a reconnect
...
Instead of assuming the first address returned from getaddrinfo can be
reached, try each one in turn until a connection is established.
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-22 23:43:09 -04:00
James McCoy
88e4f73777
getSocket: Use returned family to create the socket
...
The existing code was parsing the passed in host to determine what type
of socket family to create. getaddrinfo already provides this for us,
so there's no need to perform our own, potentially buggy, parsing.
Signed-off-by: James McCoy <jamessan@users.sourceforge.net>
2013-08-22 23:40:28 -04:00
Valentin Lorentz
e3acc03fd6
Another fix for b46a0dd6a2
.
2013-08-17 19:27:52 +02:00
Valentin Lorentz
f3ecc33678
Fix commit b46a0dd
(breaks tests for Alias and Aka).
2013-08-17 17:08:55 +02:00
Kill Your TV
b46a0dd6a2
Unicode fixes for python 2.x
...
These changes have been tested with Python 3.2.3 and Python 2.7.5.
2013-08-17 14:12:10 +00:00
Valentin Lorentz
dd37f8dd3f
Socket: Forward DNS queries via the socks proxy (if any).
2013-08-17 15:47:39 +02:00
Valentin Lorentz
b375e7dfb2
commands.py: Fix crash if a custom error message is provided to somethingWithoutSpaces (bug introduced in 29dc1438a0
).
2013-08-15 22:25:36 +02:00
Valentin Lorentz
8d7b06efd1
utils.str.format: Replace %u with '' instead of '<>' if URL is empty.
2013-08-13 19:19:54 +00:00
Valentin Lorentz
3a5c4c3ddd
Add class attribute callbacks.Commands.pre_command_callbacks.
2013-08-12 21:48:56 +02:00
Valentin Lorentz
ebde072f39
Add explicit/helpful error message about how to solve the multiprocessing 'Permission denied' issue.
2013-08-12 19:08:31 +02:00
Valentin Lorentz
1e050d7fa8
utils/str.py: Use already existing function utils.gen.timeElapsed instead of redundant one.
2013-08-11 12:08:01 +02:00
Valentin Lorentz
8b4b45ecf0
utils/str.py: Add the %T (Time delta) argument type.
2013-08-11 12:03:41 +02:00
Valentin Lorentz
1ee8bc3480
Fix bug that caused commands like '@google google google google translate' to be valid. Closes GH-19.
2013-08-10 15:22:47 +02:00
Valentin Lorentz
c23f25545f
Fix core tests for Python 3 (actually imported + fixes).
2013-08-10 15:18:04 +02:00
Valentin Lorentz
536ec37037
commands.py: raise the exception instead of returning is if --disable-multiprocessing is given.
2013-08-09 17:48:53 +02:00
Valentin Lorentz
573d4a0158
Silence errors in Socket driver if connecting failed (name resolution, ...).
2013-08-09 12:59:42 +02:00
Valentin Lorentz
9288b16cd2
Fix 918b8a3c01
on Windows.
2013-08-09 12:21:24 +02:00
Valentin Lorentz
918b8a3c01
commands.py: Add heap_size argument to process().
2013-08-09 12:16:24 +02:00
Valentin Lorentz
6a4750015e
schedule: Add the 'count' argument.
2013-08-04 09:16:07 +02:00
Valentin Lorentz
7c30936ee1
Merge branch 'aka' into testing
2013-08-01 10:48:42 +02:00
Valentin Lorentz
b4eb4bfd65
Remove randomly failing assertions (race condition with environnements cleaning?)
2013-07-28 16:56:22 +02:00
Valentin Lorentz
eb15e1934c
Fix typo in conf.py.
2013-07-26 09:23:57 +00:00
Valentin Lorentz
329187c78c
Add sqlalchemy as a valid database backend.
2013-07-23 20:58:43 +02:00
Valentin Lorentz
29dc1438a0
commands.py: Fix error message of getSomethingWithoutSpaces.
2013-07-16 20:20:08 +00:00
Valentin Lorentz
21144f7c9c
Don't send JOIN on connection if there is no channels to join.
2013-07-14 09:44:34 +02:00
Valentin Lorentz
38bab185a9
Remove Python2.4-specific code.
2013-07-13 17:28:21 +02:00
Valentin Lorentz
9bfec720f5
Fix traceback if bot is kicked immediately after joining a channel.
2013-07-13 12:01:53 +02:00
Valentin Lorentz
4a265a6ce9
Enhance representation of InsensitivePreservingDict objects.
2013-07-13 11:20:02 +02:00
Valentin Lorentz
f22f0bb4b6
Make log.firewall display the callback name in any case.
2013-07-11 10:07:11 +02:00
Valentin Lorentz
771b739af7
utils.web.getEncoding: use <meta charset /> if available.
2013-07-09 12:40:42 +00:00
Valentin Lorentz
b4402b28ed
utils.web: Rename get_encoding to getEncoding for consistency.
2013-07-09 12:05:51 +00:00
Valentin Lorentz
d4df5de91d
utils.web: Add function get_encoding.
2013-07-09 12:02:25 +00:00
Valentin Lorentz
addb754c68
registry.py: Use %r instead of %s in for formating __nonExistentEntry errors.
2013-07-08 22:51:16 +02:00
Valentin Lorentz
4fffdbccd2
httpserver: Firewall do* methods.
2013-07-07 13:26:13 +02:00
Valentin Lorentz
eff7d5e671
Fix httpserver for Python 3.
2013-07-07 13:24:26 +02:00
Valentin Lorentz
0514a64209
Fix use of rsplit for IPv6 addresses.
2013-07-02 13:18:57 +02:00
Valentin Lorentz
ed193e7cc7
io.StringIO has no attribute 'reset'.
2013-06-29 23:19:38 +02:00
Valentin Lorentz
46b89cfc0e
Fix crash when --daemon is given (Python 3).
2013-06-29 13:58:41 +02:00
Valentin Lorentz
dce3c97fe4
Socket: Only catch select.error if it is an interupted system call.
2013-06-29 13:44:42 +02:00
Valentin Lorentz
75654a4544
Socket: Prevent crash caused when a signal is received while using select. Closes GH-477.
2013-06-29 12:40:45 +02:00
Carsten Teibes
7129dc2697
Switch to charade, which is better maintained and works under 2 and 3
2013-06-27 19:36:44 +02:00
Milos Petkovic
be6116f958
Reset network uptime on reconnection as well
2013-06-17 08:09:16 +02:00
Valentin Lorentz
774158f2ec
utils/web.py: Fix compatibility with Python 3.
2013-06-17 04:10:29 +00:00
Valentin Lorentz
cca1e6dba5
utils/web.py: Add some 'try' statements to make decoding as error-permissive as possible.
2013-06-13 17:22:33 +00:00
Valentin Lorentz
2eec980c8e
utils/web.py: Python 3 should use decode() only if it is a bytes object.
2013-06-13 04:22:20 +00:00
Valentin Lorentz
a82ad9cb1a
utils/web.py: Properly import chardet.
2013-06-12 17:38:50 +00:00
Valentin Lorentz
e24ab4501d
Fix bug with Python 3.3 (?)
2013-06-06 05:49:25 +00:00
Valentin Lorentz
43563bcc1c
core & Factoids: Allow commands to disable doc-availability checks for programmatically setting it.
2013-06-01 17:13:55 +02:00
Valentin Lorentz
f82a7c7e17
Issue error message at plugin load if a command has no docstring.
2013-06-01 16:35:47 +02:00
Valentin Lorentz
8aba15807d
Socket: Assert 'irc' is not None.
2013-06-01 12:08:12 +02:00
Valentin Lorentz
74db03177f
httpserver: Explicitely define the charset.
2013-06-01 10:32:36 +02:00
Valentin Lorentz
1a71fa2d81
httpserver: Fix Content-type of default.css which caused the stylesheet not to be applied.
2013-06-01 10:11:54 +02:00
Valentin Lorentz
792df99688
httpserver: Fix design.
2013-05-31 17:55:56 +02:00
Valentin Lorentz
b2d5544ccf
httpserver: Fix restarting the server once a plugin has been unloaded and loaded back.
2013-05-31 17:55:35 +02:00
Valentin Lorentz
2016983d35
Add supybot.utils.net.getAddressFromHostname() and improve Socket driver to try successively all IP addresses.
2013-05-31 17:21:10 +02:00
Valentin Lorentz
9ea1019970
httpserver: Fix issue with Python 2 if no favicon is set.
2013-05-31 16:12:49 +02:00
Valentin Lorentz
cefd91d4f1
Fix encoding issues with Alias containing non-ascii characters.
2013-05-31 15:42:57 +02:00
Valentin Lorentz
ad25f17639
RSS: Add Python 3 support.
2013-05-29 15:16:23 +02:00
Valentin Lorentz
2d4914bc99
Merge branch 'gpgauth' into testing
...
Conflicts:
src/ircdb.py
2013-05-24 17:20:27 +02:00
Valentin Lorentz
ba6e2fff6f
ircmsgs.IrcMsg: Display args in case of AssertionError.
2013-05-21 19:38:55 +02:00
Valentin Lorentz
c56f26b91d
Wrap now internationalizes docstrings.
2013-05-20 17:52:41 +02:00
Valentin Lorentz
66025cf7e4
New syntax for wrap(). Now supports being used as a Python decorator with arguments.
...
For example, in Admin, "join = wrap(join, ['validChannel', additional('something')])" could become "@wrap(['validChannel', additional('something')])".
2013-05-20 17:40:04 +02:00
Valentin Lorentz
9e1cf727e3
Network: Add @whowas. Closes GH-227.
2013-05-18 14:46:58 +02:00
Valentin Lorentz
6493be1f13
httpserver: Add doctype.
2013-05-17 20:13:46 +02:00
Valentin Lorentz
1090c4623f
Factoids: Add supybot.plugins.Factoids.requireVoice. Closes GH-378.
2013-05-17 17:47:43 +02:00
Valentin Lorentz
ed62c9efb1
commands.py: Rename 'isGranted' to 'haveHalfop+' and add 'haveVoice+'.
2013-05-17 17:36:11 +02:00
Valentin Lorentz
f42023bf19
Fix SupyTestCase.assert* with Python 2.6.
2013-05-15 18:52:56 +02:00
Valentin Lorentz
04b7d9eeda
Fix compatibility with Python 3.3.1.
2013-05-14 19:59:19 +02:00
Valentin Lorentz
6ffcf122a7
Remove code specific to Python 2.{3,4,5}.
2013-05-13 15:27:26 +02:00