Apache CouchDB
Copyright 2009-2013 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product also includes the following third-party components:

 * jQuery (http://jquery.com/)

   Copyright 2011, John Resig
 
 * jQuery UI (http://jqueryui.com)

   Copyright 2011, Paul Bakaus

 * json2.js (http://www.json.org/)

   Public domain

 * MochiWeb (http://code.google.com/p/mochiweb/)

   Copyright 2007, Mochi Media Coporation

 * ibrowse (http://github.com/cmullaparthi/ibrowse/tree/master)

   Copyright 2009, Chandrashekhar Mullaparthi

 * Erlang OAuth (http://github.com/tim/erlang-oauth/tree/master)

   Copyright 2009, Tim Fletcher <http://tfletcher.com/>

 * ETap (http://github.com/ngerakines/etap/)

   Copyright 2009, Nick Gerakines <nick@gerakines.net>

 * mimeparse.js (http://code.google.com/p/mimeparse/)

   Copyright 2009, Chris Anderson <jchris@apache.org>

 * base64.js

   Copyright 1999, Masanao Izumo <iz@onicos.co.jp>

 * jspec.js (http://visionmedia.github.com/jspec/)

  Copyright 2010 TJ Holowaychuk <tj@vision-media.ca>

 * yajl (http://lloyd.github.com/yajl/)

  Copyright 2010, Lloyd Hilaiel

 * snappy (http://code.google.com/p/snappy/)

  Copyright 2005, Google Inc.

 * snappy-erlang-nif (https://github.com/fdmanana/snappy-erlang-nif)

  Copyright 2011, Filipe David Manana <fdmanana@apache.org>

 * CoffeeScript (http://coffeescript.org/)

  Copyright 2011, Jeremy Ashkenas

 * Sphinx (http://sphinx-doc.org/)
 
   Copyright 2011, the Sphinx team

 * Sizzle (http://sizzlejs.com/)
 
   Copyright 2010, The Dojo Foundation
 
 * Underscore.js 1.4.2 (http://underscorejs.org)

   Copyright 2012, Jeremy Ashkenas
