Apache Flex Tour De Flex
========================

    The Apache Flex Tour De Flex component explorer provides a sample set of working
  	Apache Flex examples.
  
    For detailed information about Apache Flex Tour De Flex and other Apache Flex
    projects please visit:
    http://flex.apache.org/


Contributing
============

    Apache Flex is for the community and we would like to see more
    community involvement.

    The community can help the Apache Flex project by helping out in the
    following areas.
      - Testing / Fixing bugs. Providing patches.
      - Assisting other users with their requests for help.
      - Helping out with release candidates.
      - Wiki / Documentation.
      - Translations into other languages.
      - Public relations.
      - Examples of code and components.
      
    All contributions are welcome. Continued involvement in the project may
    warrant you being selected as a committer by the Apache Flex PMC.
    
    For more details information please visit:
    https://cwiki.apache.org/confluence/display/FLEX/Helping+Out
    
Mailing Lists
=============

    The two main mailing list are the user list for discussing how to code in
    Flex and any issues you run into and the dev list for discussing ongoing
    development of the SDK.
    
    You can subscribe to the mailing lists by sending an email to:
    users-subscribe@flex.apache.org
    dev-subscribe@flex.apache.org
    
    Note that both mailing lists have are mid-high volume lists.
    
    For those who prefer forums:
    http://s.apache.org/flex-users-forum
    http://s.apache.org/flex-dev-forum
    
Reporting Bugs
==============
   
    The bug base for Apache Flex can be found here:
    https://issues.apache.org/jira/browse/FLEX
    
    You need to set up a JIRA account to submit a bug report but can browse
    and search the bug base without an account.
    https://cwiki.apache.org/confluence/display/FLEX/3.1+JIRA+Account
    
    When reporting an issue the follow information is helpful:
    - OS, browser and Flash Player version or AIR version
    - Screen shots
    - Small sample application showing the issue
    - Steps on how to reproduce the issue
         
    Please search through JIRA before submitting new bugs. It may be that the
    bug you've found has already been reported.

Contributing Code
=================
    
    If you have a bug fix, new component or other code you which to give to
    Apache Flex please open a JIRA ticket and attach the code to it.
    
    A committer will take a look, review and test it and help you get the code
    into the SDK.
    
    If the code is a significant size we may ask you to sign an license
    agreement (ICLA) or software grant.
    

Thanks for using Apache Flex.  Enjoy!

The Apache Flex Project
<http://flex.apache.org>
