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

# Company ID
COMPANY_ID=COMID

# Audio File Indicator
AUDIT_FILE_INDICATOR=2

# Ship From Country
SF_COUNTRY_CODE=US

# Ship From State/Province
SF_STATE_PROVINCE=CA

# Ship From City
SF_CITY=Brisbane

# Ship From Zip/Postal Code
SF_POSTAL=94005

# Point-of-Origin Country Code
POO_COUNTRY_CODE=US

# Point-of-Origin State/Province
POO_STATE_PROVINCE=CA

# Point-of-Origin City
POO_CITY=Brisbane

# Point-of-Origin Zip/Postal Code
POO_POSTAL=94005

# Point-of-Acceptance Country Code
POA_COUNTRY_CODE=US

# Point-of-Acceptance State/Province
POA_STATE_PROVINCE=CA

# Point-of-Acceptance City
POA_CITY=Brisbane

# Point-of-Acceptance Zip/Postal Code
POA_POSTAL=94005
