Apache MyFaces Html5 Demo
Copyright 2011 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes software developed at http://code.google.com/p/google-code-prettify/.

Notices for files :
    mother_goose_flv.flv
    mother_goose_h264.mp4
    mother_goose_h264_copy.mp4
    mother_goose_ogg_2.ogv
    mother_goose_thumbnail_small.png

    "Mother Goose: Little Miss Muffet"(1903) is public property.

This product includes software developed by LongTail Video.