Diva Canto
d99c8e68a7
It turns out that child agent management has had a bug for a while: there was an inconsistency in the scope between opening and closing child agents in neighboring regions. For opening (in EnableChildAgents), the region's DrawDistance was being used; for closing (in IsOUtsideView) , the viewer's (SP) DrawDistance was being used. This fixes this inconsistency, therefore eliminating bugs observed in TPs between, at least, neighboring varregions.
2014-07-04 10:13:53 -07:00
Justin Clark-Casey (justincc)
4ba396b81c
Temporarily disable new regression test TestLifecycle() until I have a chance to fix it
...
This was working for me locally because it was still picking up all my *.ini config files, which jenkins won't have in its test env
2014-07-03 00:30:42 +01:00
Justin Clark-Casey (justincc)
c3923a1aa6
Re-enabled TestLifecycle regression test logging so I can get some idea of why it's failing on jenkins but not locally
2014-07-03 00:01:47 +01:00
Justin Clark-Casey (justincc)
889194db63
Actually call Close() for shared region modules when the simulator is being shutdown.
...
Adds regression test for this case.
2014-07-02 23:49:25 +01:00
Justin Clark-Casey (justincc)
fe6dab7f13
minor: Change default max phys prim size in code to match OpenSimDefaults.ini
2014-06-28 00:20:09 +01:00
Justin Clark-Casey (justincc)
cd031d129a
minor: change allow script crossings default in code to true in order to match OpenSimDefaults.ini
2014-06-28 00:18:00 +01:00
Justin Clark-Casey (justincc)
5450b1b024
Change assembly versions to 0.8.1
2014-06-17 18:37:15 +01:00
Diva Canto
807fb8339b
Revert "Let HG users be gods too, if they have local permission to be so."
...
HG gods are not safe at this point. It's better to disallow this until
they can be made safe.
This reverts commit e86c765be3
.
2014-06-09 22:00:10 -07:00
Diva Canto
e86c765be3
Let HG users be gods too, if they have local permission to be so.
2014-06-09 21:46:24 -07:00
Robert Adams
0aa0dad478
Send multiple terrain patches per terrain update packet if terrain
...
draw distance optimization is enabled. Makes terrain editting a lot
snappier.
2014-06-01 19:23:49 -07:00
Robert Adams
0300ec45eb
Modifications to debugging printouts. No functional changes.
2014-05-31 12:19:51 -07:00
Robert Adams
22dade6463
varregion: More tweeking to only sending patches within avatar draw distance.
...
Still has problems with child avatars.
2014-05-31 12:19:50 -07:00
Robert Adams
db5a42ffac
varregion: send terrain patches from where the avatar outward if the parameter
...
[Terrain]SendTerrainUpdatesByViewDistance=true.
This tracks which patches have been sent to each client and outputs the
patches as the avatar moves.
2014-05-31 12:19:49 -07:00
Diva Canto
d6f9f690e5
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2014-05-31 08:22:56 -07:00
Justin Clark-Casey (justincc)
bf5320eb26
minor: rename velocidyDiff -> velocityDiff
2014-05-30 22:21:13 +01:00
Justin Clark-Casey (justincc)
3c992b028c
minor: Add some commented out logging to ScenePresence.SendTerseUpdateToAllClients() which is extremely helpful when investigating presence update triggers.
2014-05-30 22:18:07 +01:00
Diva Canto
0eede1467f
Moved these two estate-related interfaces to the projects where they belong.
2014-05-30 13:11:46 -07:00
Diva Canto
e19c830a6c
Fixes a bug where map search results pertaining to varregions would only send the SW-most corner of the varregions; the other areas, when clicked, would result a blue circle, meaning that the viewer didn't know about those areas. This is still not quite right, as all the areas appear to be in the same coordinates, but it's good enough for now.
2014-05-27 10:13:24 -07:00
Oren Hurvitz
33cc847c4a
When saving an OAR in "Publish" mode, also discard Group information
2014-05-26 15:33:13 +01:00
Oren Hurvitz
5aeaa7fcdd
Prevent login to a region if the Telehub or Landing Point are in a banned parcel
2014-05-25 15:37:28 +01:00
Justin Clark-Casey (justincc)
5015b0b485
If one is sitting on a child with an unset camera-eye and so using one set in a root prim, the focus should remain on the root prim.
...
Matches behaviour just tested on the Linden grid.
2014-05-23 01:55:05 +01:00
Justin Clark-Casey (justincc)
c78a8271c4
Add any camera at compensation for sat upon child prims to any existing camera-at value, rather than replace.
2014-05-23 01:38:05 +01:00
Justin Clark-Casey (justincc)
fbed245596
Compensate camera-at and camera-eye for child prim rotation when sitting on child prim with camera-eye set
2014-05-23 01:34:02 +01:00
Justin Clark-Casey (justincc)
3fbaef9275
If the root prim has a camera-at or camera-eye setting and a sat upon child prim does not, use the root prim offsets.
...
This matches behaviour just tested on the Linden Lab grid.
2014-05-22 23:52:28 +01:00
Justin Clark-Casey (justincc)
16bf38e1ab
Fix issue where llSetCameraAtOffset() and llSetCameraEyeOffset() in non-root prims moved camera/focus to wrong position.
...
For non-root prim, eye offsets now need to be made relative to root prim if either camera-at or camera-eye are set.
Probably a regression since November 2013 when all sits were made relative to root prim to match viewer expections (and fix other bugs).
Addresses http://opensimulator.org/mantis/view.php?id=7176
2014-05-22 23:39:22 +01:00
Justin Clark-Casey (justincc)
1b156b7fe8
Add regression test for in-range chat between neighbouring regions from east to west.
2014-05-22 19:18:24 +01:00
Diva Canto
b7c7293c7a
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2014-05-22 10:16:19 -07:00
Diva Canto
f7b2aa0f49
Fixed a problem with detaching attachments in situations where the user's asset server is not the same as the simulator's asset server. Unfortunately this still continues to be wasteful -- new assets are created every time an attachment is detached, but the process of storing the new asset goes through the InventoryAccess module, which does all sorts of checks regarding the users' inventory.
2014-05-22 10:16:01 -07:00
Justin Clark-Casey (justincc)
5b433e101d
minor: Comment out currently unused log setup in TerrainCompressor
2014-05-20 23:59:08 +01:00
Justin Clark-Casey (justincc)
d93275745b
minor: Remove some unused fields in ScenePresence
2014-05-20 23:57:03 +01:00
Justin Clark-Casey (justincc)
32070fa5f4
minor: remove compiler warning in SceneObjectPartInventory
2014-05-20 23:54:49 +01:00
Justin Clark-Casey (justincc)
9479f64778
Fix issue where avatar and script chat could sometimes be heard from anywhere in neighbouring regions.
...
This was due to a silent uint overflow in ScenePresence.UpdateChildAgent() corrupting child agent positions
when the child agent was in a region with a greater x or y map co-ord than the root agent region
Probably introduced in beeec1c
.
This still will not function properly with very high region map co-ords (in the millions) but other parts of the code don't handle this properly anyway.
Looks to address http://opensimulator.org/mantis/view.php?id=7163
2014-05-20 23:52:07 +01:00
Oren Hurvitz
47b84875fd
Tell QueryAccess explicitly whether the user is coming in via Teleport or Cross, because the permission checks are different.
...
Previously we used a heuristic of checking if the entry position is 0 to differentiate between Teleport and Cross, but that doesn't work anymore since we've started providing the precise entry position for cross, too. That's required in order to ensure that the user is allowed to enter the parcel that he's walking into.
2014-05-19 11:19:11 +01:00
Oren Hurvitz
dd30a29ba0
Return more specific error messages if an attempt to enter a region fails due to permissions (in QueryAccess and IsAuthorizedForRegion)
2014-05-19 11:11:30 +01:00
Diva Canto
ab1472e5b7
Don't trigger ItemUploaded when no item has been uploaded.
2014-05-18 23:01:55 -07:00
Diva Canto
922f76a3a7
Don't fetch assets from the server when doing simple inventory operations like copy-paste items in inventory.
2014-05-18 07:49:01 -07:00
Justin Clark-Casey (justincc)
7c12dfe185
On ScenePresence.MakeChildAgent(), reset the m_originRegionID as this is currently being used as a flag to orchestrate destination simulator threads on teleport.
...
If not reset, it's possible that teleports back and forth between simulators may not restart scripts in attachments.
2014-05-14 22:08:06 +01:00
Justin Clark-Casey (justincc)
2f7539a25b
Remove a race where the client's SP.CompleteMovement() thread could attempt to restart attachment scripts before the source simulator's SP.UpdateAgent() thread had added them.
...
This commit changes the order of code so that attachments are re-added before the CompleteMovement() thread is released.
Relates to http://opensimulator.org/mantis/view.php?id=7148
2014-05-14 21:49:29 +01:00
Justin Clark-Casey (justincc)
484aa72ff8
minor: Add some method doc to IMessageTransferModule
2014-05-12 23:49:37 +01:00
Justin Clark-Casey (justincc)
87e2668529
For XmlRpcGroups (Flotsam) module, when MessageOnlineUsersOnly = true, handle notices to offline users directly as known undeliverable messages rather than discarding or attempting delivery.
...
Offline notices can still be controlled with the [Messaging] ForwardOfflineGroupMessages setting.
Looks to address more of http://opensimulator.org/mantis/view.php?id=7037
Only for Flotsam now for testing, but if approach works should be possible with core offline notices as well.
2014-05-12 23:38:48 +01:00
Diva Canto
f4cba27105
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2014-05-07 17:00:12 -07:00
Dev Random
78015bbbdc
Console commands for Estate Mgmt
2014-05-06 18:55:42 +01:00
Vegaslon
0faba7dc33
Fix avatars going to corner of region when they are sitting on a child prim and the prim is deleted.
2014-05-06 17:41:13 +01:00
Oren Hurvitz
614b9e14c4
When moving an item from a prim to a user's inventory, don't delete the item from the prim until it was successfully copied to the user
2014-05-06 07:28:46 +01:00
Oren Hurvitz
eb79c882ea
Show more meaningful error messages when failed to move an item from a prim to a user's inventory.
...
Also, actually show the error to the user in more cases. (Previously, sometimes the operation failed without telling the user anything.)
2014-05-06 07:28:45 +01:00
Oren Hurvitz
1e5cff32fc
Show more meaningful error messages when failed to give an item to another user
2014-05-06 07:28:44 +01:00
Diva Canto
13b2ac1425
Makes it possible to support grids in which all the simulators share all central services of a Robust server EXCEPT assets. In other words, grids where the simulators' assets are kept in one DB and the users' inventory assets
...
are kept on another. When users rez items from inventory or take objects from world, an HG-like asset copy takes place between the 2 servers, the world asset server and the user's asset server. This makes the simulators independent of the central asset server.
Note that this an advanced configuration and requires some security strengthening coming up.
2014-05-04 20:54:42 -07:00
Justin Clark-Casey (justincc)
5fc61942e0
minor: convert back some tabs to spaces that got into ScenePresence via recent patch bc969a6b
2014-04-29 20:15:29 +01:00
Justin Clark-Casey (justincc)
d4eee213a9
Restore terrain height and flying adjustments that were eliminated from non-megaregion paths in ScenePresence.MoveToTarget() by recent patch bc969a6b
2014-04-29 20:05:08 +01:00
Justin Clark-Casey (justincc)
2e216aa056
Add missing [Test] decorator to actually get the basic scene creation test from 2227f51b
to run
2014-04-25 23:35:20 +01:00
Justin Clark-Casey (justincc)
9664273df6
Add basic regression test for creating a var region
2014-04-25 23:34:30 +01:00
Justin Clark-Casey (justincc)
2227f51b29
Add basic sanity regression test for creating a scene.
2014-04-25 23:16:07 +01:00
Justin Clark-Casey (justincc)
904baa6da6
Fix issue where terrain height values > 327 caused chaotic spiked terrain.
...
Per http://wiki.secondlife.com/wiki/Tips_for_Creating_Heightfields_and_Details_on_Terrain_RAW_Files#Notes_for_Creating_Height_Field_Maps_for_Second_Life
terrain heights up to 508 are possible on the LL grid (and were available on previous releases of OpenSimulator).
The obvious way to allow both this and equivalent -z values, is to rewiden the internal terrain height storage from short to int.
The memory tradeoff is most noticeable on the maximum 8192x8192 var region (equiv to 1024 normal regions), where it adds 128mb to resident use (128k on a normal region)
This is still better than the double used in previous releases.
This does not affect physics or data storage since they already use float and double respectively.
This may not be the final solution if we actually want to sacrifice -z, >327 or something else.
Relates to http://opensimulator.org/mantis/view.php?id=7076
2014-04-25 22:56:25 +01:00
Diva Canto
1d9a9e6004
Fixes a long-standing bug related to god-mode change ownership of objects permissive, where the permissions of the children prims' inventory items were not changed. As a consequence, we couldn't control some of the objects imported via HG and OARs even in god mode.
2014-04-24 14:11:42 -07:00
Justin Clark-Casey (justincc)
7a5699224e
Fix regression test break on previous commit 328bc3b
2014-04-23 19:46:58 +01:00
Justin Clark-Casey (justincc)
328bc3b76e
Adjust avatar sit positioning on a target to pretty much exactly match that of the LL grid.
...
This uses an offset of 0.05 on the up vector of the sit orientation, after extensive analysis on
http://opensimulator.org/mantis/view.php?id=7096 and https://wiki.secondlife.com/wiki/Talk:LlSitTarget
This supersedes the previous adjustment in 5b73b9c4
which had been wrongly applied.
The maximum change is about 0.1 with a maximum height avatar.
This patch is all Aleric's work - I am applying manually in order to add these additional notes
2014-04-23 19:19:09 +01:00
Oren Hurvitz
998d7009a6
Eliminated many warnings
2014-04-23 16:37:36 +03:00
Oren Hurvitz
a893fd90cd
Fixed KeyframeMotion to work with very slow movement.
...
Previously, if the movement speed was below 0.05/sec then it didn't work correctly.
Fixes http://opensimulator.org/mantis/view.php?id=7117
2014-04-22 10:19:11 +01:00
lillith_xue
bc969a6b46
Possible solution for #7120 and #7051
...
Signed-off-by: Robert Adams <misterblue@misterblue.com>
2014-04-21 05:58:29 -07:00
Oren Hurvitz
a780e01a54
Fixed: the parcel flag "Allow Scripts from Group" should only check if the parcel has a Group set; it doesn't have to be *deeded* to the group
...
Also some cleanup of the use of Group ID's (with no change to functionality).
2014-04-20 06:23:35 +01:00
Robert Adams
c8914d22eb
BulletSim: reduce the terrain collison margin to be the same as other
...
objects in the world.
This was originally changed in an attempt to make vehicles work better
but the effect was not that large and it causes avatars to float
above the terrain.
2014-04-12 17:37:57 -07:00
Oren Hurvitz
c725ad1577
Fixed: when teleporting between grids, the avatar name wasn't always updated.
...
When an avatar is in their home grid, their name appears as "First Last". In other grids the name appears as "First.Last @grid.example.com". However, viewers have a bug and they don't always show the new name. We use a trick (changing the Group Title briefly) in order to make the viewers show the new name. This is only done after a Hypergrid teleport.
2014-04-09 15:00:54 +01:00
Oren Hurvitz
06e0528d0b
In teleports, pass the source region to the destination (similar to an HTTP referrer)
2014-04-09 09:22:20 +01:00
Oren Hurvitz
85d51e57a9
When sending QueryAccess to a region, also send the user's Home URI
2014-04-07 07:32:36 +01:00
Oren Hurvitz
55cc8044cb
Refactored: use Scene.GetAgentHomeURI() to get the Home URI of a user
2014-04-07 07:26:44 +01:00
Justin Clark-Casey (justincc)
cacbb5c165
Don't re-retrieve sit part in SP.HandleAgentSit() when we already have it (this time with the right code change)
2014-04-05 02:16:14 +01:00
tglion
8b8e1b88ec
fixed object-collision issue after uncheck phantom-flag
...
Signed-off-by: Michael Cerquoni <nebadon2025@gmail.com>
2014-04-04 12:29:44 -04:00
Justin Clark-Casey (justincc)
aec723b955
Fix sp.AbsolutePosition when agent is sitting on a child prim, which in turns fixes llDetectedPos(), llGetLinkPrimitiveParams() and similar functions.
...
Add regression test for this case.
In relation to http://opensimulator.org/mantis/view.php?id=7043
2014-04-03 23:22:57 +01:00
Robert Adams
9406db3047
Fix problem with floating avatar by passing avatar size information
...
to the physics engine.
This operation was accidentally removed while in the middle of improving
the computation of the avatar height. This is a temp fix until the real
solution is added.
2014-04-02 21:52:24 -07:00
Justin Clark-Casey (justincc)
e756457703
Remove redundant part.SitTargetAvatar setting from SP.MakeRootAgent as part.AddSittingAvatar already does this.
2014-04-03 01:21:50 +01:00
Justin Clark-Casey (justincc)
6ac9c9c972
refactor: Use m_sittingAvatars to maintain the list of sitting avatars instead of two independent structures that do exactly the same thing
...
m_sittingAvatars code also already properly handles locking to avoid races.
2014-04-03 01:14:39 +01:00
Justin Clark-Casey (justincc)
5cb4044539
Don't clear avsToCross in SOG.AbsolutePosition.set(), this is unnecessary since the structure is local and never reused after the clear
2014-04-03 00:26:55 +01:00
Justin Clark-Casey (justincc)
e6d0dcd4e8
Fix bug where crossing to a neighbouring region and back again would trigger an exception, and a second recross would stop the user moving until relog
...
Also fixes an issue where sitting avatar counts became inaccurate after any cross.
Part of the problem was due to cloning code using MemberwiseClone() but not resetting certain collection structures.
Adds regression test for this case.
In relation to http://opensimulator.org/mantis/view.php?id=7050
2014-04-03 00:19:53 +01:00
Oren Hurvitz
0301c81b01
Made GetScenePresence() case-insensitive when searching by user name. This makes it easier to use console commands such as "show appearance".
2014-04-02 13:08:31 +01:00
Justin Clark-Casey (justincc)
7bafee28fa
Removing warning from SceneObjectLinkingTests.TestLinkDelink2SceneObjects() by actually checking whether delinked grp3 is not null
2014-04-02 01:26:58 +01:00
Dev Random
43eab5e163
Console command to rename Estate
2014-04-02 01:17:41 +01:00
Justin Clark-Casey (justincc)
7cb1690589
minor: disable logging in recently added scene object crossing tests and remove some unnecessary test config
2014-04-02 01:01:53 +01:00
Justin Clark-Casey (justincc)
0af8886400
Fix problem where moving an object to another region on the same simulator was failing, with the object returning to its original position.
...
Root cause was that PrimLimitsModule was not properly handling the case where the parcel it was asked to check was outside the current region's bounds.
If this is the case, we can abort the check since the receiving region will perform it.
Added a regression test for this case.
2014-04-02 00:58:33 +01:00
Oren Hurvitz
1fe504fee5
Better skipping of "SculptData" when parsing XML
2014-03-28 12:52:06 +03:00
Oren Hurvitz
f360b687d6
Removed "SculptData" from the serialized XML format of prims
2014-03-28 07:51:21 +01:00
Justin Clark-Casey (justincc)
99308d64c6
minor: Add some doc to Scene.Backup() detailing its direct invocation if the indepedent backup thread is not running (e.g. in a regression test)
2014-03-26 00:43:17 +00:00
Oren Hurvitz
e131e73652
Run slow operations in a separate thread, instead of using FireAndForget (which has a 1-minute timeout)
...
Resolves http://opensimulator.org/mantis/view.php?id=6945
2014-03-25 08:01:55 +01:00
Oren Hurvitz
1769e93c42
Fixed parsing of coalesced objects if the XML starts with an XML Declaration ("<xml ...>")
...
Resolves http://opensimulator.org/mantis/view.php?id=6944
2014-03-24 18:18:29 +01:00
Oren Hurvitz
5fd9411143
Refactored Load IAR: created a generic mechanism to modify the SOG's as they are being loaded
...
Resolves http://opensimulator.org/mantis/view.php?id=6942
2014-03-24 18:17:35 +01:00
Oren Hurvitz
89945f8829
Refactored: ExternalRepresentationUtils should be the only place where the "CreatorData" field is calculated, to ensure uniformity
...
Resolves http://opensimulator.org/mantis/view.php?id=6933
2014-03-24 18:00:59 +01:00
Oren Hurvitz
7496d0b0f7
Fixed unit tests for delinking objects
2014-03-24 15:05:39 +02:00
Oren Hurvitz
921f0052f4
Get the full viewer name even if it's (incorrectly) sent in the 'Channel' field
...
Recent versions of Firestorm and Singularity have started sending the viewer name in the 'Channel' field, leaving only their version number in the 'Viewer' field. So we need to search both of these fields for the viewer name.
This resolves http://opensimulator.org/mantis/view.php?id=6952
2014-03-24 12:26:52 +01:00
Oren Hurvitz
773ffcafc3
Removed "hacktastic" code that is no longer needed.
...
We no longer set the object's AbsolutePosition in this place, so the IsAttachment hack doesn't do anything anymore.
This resolves http://opensimulator.org/mantis/view.php?id=6936
2014-03-24 12:05:25 +01:00
Oren Hurvitz
62b3bdf0fc
When linking two groups, and then deleting the combined group: delete *all* of the combined group's prims, including those that came from the second subgroup
...
This fixes http://opensimulator.org/mantis/view.php?id=6175
2014-03-24 11:44:48 +01:00
Justin Clark-Casey (justincc)
ccf18fd2ef
Rename SOG.InSceneBackup to CanBeBackedUp to reflect its actual functionality.
...
It does not indicate that a SOG has been set to be backed up or not. It indicates that a SOG can be backed up in principle.
In practice, this was added by lbsa71 in 2007 and is set to always true, albeit as a virtual property.
2014-03-22 01:36:21 +00:00
Justin Clark-Casey (justincc)
a5800f479e
If an object has it's temporary flag unset after being set, put it back in the persistence list.
...
Effectively uses the patch in http://opensimulator.org/mantis/view.php?id=7060
But also adds a regression test and exposes the necessary property to allow this to work.
2014-03-22 00:29:13 +00:00
Jak Daniels
61353dde80
Allow Region specific static maptiles to be loaded from file.
2014-03-18 22:18:50 -07:00
Justin Clark-Casey (justincc)
beba20846f
When sending group notices through group messaging, allow the agent ID to use for fetching group data to be different from im.fromAgentID
...
This is because xmlrpcgroups currently always checks visibility for the requesting agent ID (unlike Groups v2, which can accept UUID.Zero)
But group notice IMs have a from agent which is the group rather than the sending agent.
Further addresses http://opensimulator.org/mantis/view.php?id=7037
2014-03-12 19:31:04 +00:00
Robert Adams
742f505440
Change terrain update sending to be triggered by frame tick rather
...
than everytime terrain is changed.
The TerrainModule now hooks the frame event and, if terrain has changed,
sends terrain updates to the clients. This polling pattern replaces
the previous push on change pattern and will make it easier to do per
client throttling and per scene presence terrain update ordering.
2014-03-10 22:05:18 -07:00
Oren Hurvitz
0237d9113d
Don't start KeyframeMotion timers until all the regions are ready. This prevents problems in megaregions (prims that think they've crossed over to other regions).
2014-03-11 00:55:58 +00:00
Justin Clark-Casey (justincc)
77e7bbcbf7
Send group notices through the same messaging module mechanism used to send group chat to avoid timeout issues when sending messages to large groups.
...
Only implementing for XmlRpcGroups initially to test.
May require MessageOnlineUsersOnly = true in [Groups] to be effective.
In relation to http://opensimulator.org/mantis/view.php?id=7037
2014-03-11 00:11:18 +00:00
Justin Clark-Casey (justincc)
39ed382ddf
Don't request a terse update after local teleport - this will be done by the main frame loop anyway and has the potential to race that thread.
2014-03-05 00:59:27 +00:00
Justin Clark-Casey (justincc)
c9415fd763
If an avatar is sitting, send out position updates to clients for any change, not just those outside the usual tolerances.
...
This is to allow small adjustments of less than 0.05m in functions such as llSetPrimitiveLinkParams() to work
This is another fix for http://opensimulator.org/mantis/view.php?id=7044
Extends regression test for this case.
2014-03-05 00:38:38 +00:00
Robert Adams
0f03c64a0c
Make Scene.DefaultDrawDistance to be the max of the region size and the
...
user setting. Seems this parameter has many side effects.
2014-02-23 21:56:37 -08:00
Robert Adams
0b213af675
Fix problem of hurricane speed winds. Thanks Vegaslon.
2014-02-22 15:04:28 -08:00