<?xml version="1.0" encoding="utf-8"?>
<config>
<!-- 
 * 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.
-->
  <input>
    <events>
      <link next="pause.jsp?resumeURI=login.jsp">
        <grammar mode="voice" version="1.0" root="pause">
          <rule id="pause" scope="public">
            <one-of>
             <item>pause</item>
            </one-of>
          </rule>
        </grammar>
      </link>
    </events>
    <property-list>
      <property name="incompletetimeout"  value="1s"/>
      <property name="completetimeout"  value="1s"/>
    </property-list>
    <prompt-list>
      <prompt>
       What is the M L S number you are interested in?
      </prompt>
    </prompt-list>
    <help-list>
      <help>
        <prompt>You need to specify a value like 1 2 3 4.</prompt>
      </help>
    </help-list>
    <noinput-list>
      <noinput count="1">
        <prompt>
         I did not hear you speak the M L S number.
        </prompt>
      </noinput>
      <noinput count="2">
        <prompt>
          Could you please repeat the M L S number?
        </prompt>
      </noinput>
      <noinput count="3">
        <prompt>I appear to be having trouble hearing you. 
          Waiting for you to speak the M L S number. </prompt>
      </noinput>
    </noinput-list>
    <nomatch-list>
      <nomatch>
        <prompt>I am sorry. I didn't understand you. Please repeat the 
          M L S number.</prompt>
      </nomatch>
    </nomatch-list>
  </input>
  <confirm>
    <property-list>
      <property name="incompletetimeout" value="1s"/>
      <property name="completetimeout" value="1s"/>
    </property-list>
    <prompt-list>
        <prompt>I think you said #{model.utterance}. Is that
      right? </prompt>
    </prompt-list>
    <help-list>
      <help>
        <prompt>
         To accept the M L S number, say yes.
         To change your mind, say no.
         </prompt>
      </help>
    </help-list>
    <noinput-list>
      <noinput>
        <prompt>
          Is #{model.utterance} an acceptable mls number?
          Please say yes or no.
        </prompt>
      </noinput>
    </noinput-list>
    <nomatch-list>
      <nomatch>
        <prompt>If #{model.utterance} is acceptable, say yes. Otherwise,
          say no.</prompt>
      </nomatch>
    </nomatch-list>
    <reject>
      <prompt>OK, lets try again.</prompt>
    </reject>
  </confirm>
  <validate>
    <handler errorCode="635463">
      <prompt>
       I'm sorry, but there is no default or initial value available.
      </prompt>
    </handler>
    <handler errorCode="1">
      <prompt>
        That's an invalid value.
        Please specify a shorter M L S number
       </prompt>
    </handler>
    <handler errorCode="2">
      <prompt>That's an invalid value.
              Please specify a longer M L S number.
      </prompt>
    </handler>
    <handler errorCode="3">
     <prompt>
      That is an invalid M L S number.
      </prompt>
    </handler>
  </validate>
  <echo>
    <property-list>
      <property name="universals" value="all"/>
    </property-list>
    <prompt-list>
      <prompt>OK, #{model.utterance}. Got it.</prompt>
    </prompt-list>
  </echo>
</config>
