# Licensed to the Apache Software Foundation (ASF) under the terms of ASLv2 (http://www.apache.org/licenses/LICENSE-2.0).

repositoryLocation = http://${org.apache.ace.server}/repository
repositoryCustomer = apache
repositoryName = user
