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

#price.length=0
#infoString.length=0
#dateFormat=EEE, d MMM yyyy HH:mm:ss z
${CENTER}${DOUBLE_HEIGHT}${BOLD}Company XYZ
${CENTER}${BOLD}7 E. 8th St. #308
${CENTER}${BOLD}New York, NY 10003
${CENTER}${BOLD}212.655.3052

${CENTER}Sale: ${orderId} Tx: ${transactionId} Dr: ${drawerNo} Clerk: ${userId}
${CENTER}${dateStamp}

${CENTER}${cardNumber} - ${expireDate}
${CENTER}${nameOnCard}
${CENTER}${authInfoString}


${CENTER}${BOLD}Amount: $${amount}




${CENTER}X___________________________________________



${CENTER}${DOUBLE_HEIGHT}${BOLD}STORE COPY

[ORDER BARCODE]
