I'm in the process of moving a.o/events over to events.a.o

If you want to help, here's what remains to be done:

* Identify everything that needs to be copied over. As far as I can tell, what's remaining is:
   * Assets mentioned in http://apache.org/events/README.txt
   * ...

* Draw up complete list of things that need to be redirected because they are referenced numerous places elsewhere
   * Anything mentioned in http://apache.org/events/README.txt
   * Update the information in http://apache.org/events/README.txt so that over time we'll start referencing the new correct locations

* Open Infra ticket requesting the above redirects

* Find credentials for the Apache events calendar - http://community.apache.org/calendars/ - and find people that will keep this updated going forward

