<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="main.css" rel="stylesheet" type="text/css" />
</head>
<body leftmargin="10" topmargin="10">
<font size="2">
<p>This section contains samples created using the latest version of the Flex 4 SDK Beta 2 build to date. More samples will continue
to be added weekly while Flex 4 is under continued development. 
</p>
<p>
Note: due to the fact that Flex 4 is still under
development, sample code could break due to API changes. For the latest nightly build of the Flex 4 SDK and Documentation
see this link:

<a target="_new" href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4">Download Flex 4</a>
</p>

<p>

Other useful Flex 4 links out are listed below:
<UL>
<li><a target="_new" href="http://labs.adobe.com/technologies/flex4sdk/">Adobe Labs - Flex 4 SDK Info</a>
<li><a target="_new" href="http://labs.adobe.com/technologies/flashbuilder4/tutorials/">Flex 4 Tutorials and Videos</a>
<li><a target="_new" href="http://www.adobe.com/devnet/flex/articles/flex4sdk_whatsnew.html/">Matt Chotin's 'What's new in Flex 4' article</a>
<li><a target="_new" href="http://blog.flexexamples.com/">Adobe QA - Peter DeHaan's Flex Examples Blog</a>
<li><a target="_new" href="http://butterfliesandbugs.wordpress.com/">Adobe QA - Joan Lafferty's Blog</a>
<li><a target="_new" href="http://devgirl.wordpress.com/2009/09/04/flex-4-resources-samples-and-links/">About these Samples and More Flex 4 Links - Holly Schinsky's Blog</a>

</UL>

</p>
<p>
Additional Note: These samples are best viewed in the AIR version of Tour de Flex. In Web mode we recommend using the expand 
button in the top right corner to expand the illustration to the full window. Sizing issues are currently being worked on.
</p>
</body>
</html>