<?xml version="1.0" encoding="utf-8"?>
<!--

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.

-->
<project>
  <output>
    <movie version="11"/>
    <movie disabled="False"/>
    <movie height="600"/>
    <movie fps="60"/>
    <movie background="#FFFFFF"/>
    <movie path="bin-debug/RoyaleWebsite.swf"/>
    <movie width="800"/>
    <movie input=""/>
  </output>
  &lt;!-- Other classes to be compiled into your SWF --&gt;
  <classpaths>
    <class path="src/main/royale"/>
  </classpaths>
  <moonshineResourcePaths></moonshineResourcePaths>
  <build>
    <option compilerConstants=""/>
    <option showDeprecationWarnings="True"/>
    <option antBuildPath="build/build.xml"/>
    <option showUnusedTypeSelectorWarnings="True"/>
    <option customSDK=""/>
    <option strict="True"/>
    <option accessible="False"/>
    <option useNetwork="True"/>
    <option locale=""/>
    <option useResourceBundleMetadata="True"/>
    <option benchmark="False"/>
    <option warnings="True"/>
    <option es="False"/>
    <option verboseStackTraces="False"/>
    <option allowSourcePathOverlap="False"/>
    <option loadConfig=""/>
    <option linkReport=""/>
    <option optimize="False"/>
    <option additional="-html-template=src/main/resources/royale-index-template.html"/>
    <option showActionScriptWarnings="True"/>
    <option staticLinkRSL="False"/>
    <option showBindingWarnings="True"/>
  </build>
  <includeLibraries></includeLibraries>
  <libraryPaths></libraryPaths>
  <externalLibraryPaths></externalLibraryPaths>
  <rslPaths></rslPaths>
  <intrinsics>
    <element path="Library/AS3/frameworks/Flex4"/>
  </intrinsics>
  <library></library>
  <compileTargets>
    <compile path="src/main/royale/RoyaleWebsite.mxml"/>
  </compileTargets>
  <hiddenPaths></hiddenPaths>
  <preBuildCommand>null</preBuildCommand>
  <postBuildCommand alwaysRun="False">null</postBuildCommand>
  <options>
    <option defaultBuildTargets=""/>
    <option testMovie=""/>
    <option testMovieCommand=""/>
    <option showHiddenPaths="False"/>
  </options>
  <moonshineRunCustomization>
    <option launchMethod="Simulator"/>
    <option urlToLaunch=""/>
    <option targetPlatform="2"/>
    <option deviceSimulator="null"/>
    <option projectType="2"/>
    <deviceSimulator>null</deviceSimulator>
    <certAndroid>null</certAndroid>
    <certIos>null</certIos>
    <certIosProvisioning>null</certIosProvisioning>
  </moonshineRunCustomization>
</project>