################################################################################
##
##  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.
##
################################################################################

# flags
nightly = true
# path to falconjx nightly
falcon.server.url = http://apacheflexbuild.cloudapp.net:8080
falcon.md5.server.url = http://apacheflexbuild.cloudapp.net:8080
falcon.folder = job/flex-falcon/lastSuccessfulBuild/artifact/out
falcon.version = 0.8.0
# path to local build
# falcon.server.url = file://Users/xxx/git/flex/master
# falcon.md5.server.url = file://Users/xxx/git/flex/master
# falcon.folder = flex-falcon/out
# falcon.version = 0.8.0
#need this until Installer 3.2 comes out
#jburg.server=http://downloads.sourceforge.net
#jburg.folder=project/jburg
#jburg.filename=jburg-1.10.1.tar.gz
#jburg.md5=76830ee877cac40b981779325b3fa89f
