<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:n="http://www.oxygenxml.com/nvdl"
                version="2.0"
                exclude-result-prefixes="n">
   <xsl:output indent="yes"/>
   <xsl:template match="/">
      <n:dispatch>
         <xsl:variable name="content">
            <xsl:apply-templates mode="mode_d1e1"/>
         </xsl:variable>
         <xsl:apply-templates mode="flatten" select="$content"/>
      </n:dispatch>
   </xsl:template>
   <xsl:function xmlns:xs="http://www.w3.org/2001/XMLSchema" name="n:matches" as="xs:boolean">
      <xsl:param name="uri"/>
      <xsl:param name="ns"/>
      <xsl:param name="wildcard"/>
      <xsl:choose>
         <xsl:when test="$wildcard='' or not(contains($ns, $wildcard))">
            <xsl:value-of select="$uri=$ns"/>
         </xsl:when>
         <xsl:when test="starts-with($ns, $wildcard)">
            <xsl:value-of select="n:matchLax($uri, substring-after($ns, $wildcard), $wildcard)"/>
         </xsl:when>
         <xsl:otherwise>
            <xsl:variable name="constant" select="substring-before($ns, $wildcard)"/>
            <xsl:choose>
               <xsl:when test="starts-with($uri, $constant)">
                  <xsl:value-of select="n:matchLax(substring-after($uri, $constant), substring-after($ns, $wildcard), $wildcard)"/>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:value-of select="false()"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:function>
   <xsl:function xmlns:xs="http://www.w3.org/2001/XMLSchema" name="n:matchLax" as="xs:boolean">
      <xsl:param name="uri"/>
      <xsl:param name="ns"/>
      <xsl:param name="wildcard"/>
      <xsl:choose>
         <xsl:when test="$ns=''">
            <xsl:value-of select="true()"/>
         </xsl:when>
         <xsl:when test="not(contains($ns, $wildcard))">
            <xsl:value-of select="ends-with($uri, $ns)"/>
         </xsl:when>
         <xsl:otherwise>
            <xsl:variable name="constant" select="substring-before($ns, $wildcard)"/>
            <xsl:value-of select="                 if                  (contains($uri, $constant))                  then                  n:matchLax(substring-after($uri, $constant), substring-after($ns, $wildcard), $wildcard)                  else                  false()                 "/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:function>
  <xsl:template mode="mode_d1e1" match="n:section[@ns='http://www.w3.org/1999/xhtml']">
      <n:validate schema="../schemas/xhtml/xhtml.rng">
         <xsl:apply-templates mode="mode_d1e13"/>
      </n:validate>
   </xsl:template>
   <xsl:template match="n:section" mode="mode_d1e1">
      <n:reject>
         <xsl:apply-templates mode="mode_d1e1"/>
      </n:reject>
   </xsl:template>
        <xsl:template mode="mode_d1e13" match="n:section[@ns='http://www.w3.org/2002/xforms']">
      <n:validate schema="../schemas/xforms/XForms-Schema.xsd">
         <xsl:apply-templates mode="mode_d1e13_nsd1e15_validate_d1e20"/>
      </n:validate>
      <xsl:variable name="thisSection" select="generate-id(.)"/>
      <xsl:apply-templates select="//n:section[generate-id(ancestor::n:section[1])=$thisSection]"
                           mode="mode_d1e13_nsd1e15_unwrap_d1e59"/>
   </xsl:template>
   <xsl:template match="n:section" mode="mode_d1e13_nsd1e15_validate_d1e20">
      <xsl:apply-templates mode="mode_d1e25" select="."/>
   </xsl:template>
   <xsl:template match="n:section[generate-id(.) = generate-id(ancestor::n:section[1]//*[local-name()='instance']/n:section)]"
                 mode="mode_d1e13_nsd1e15_validate_d1e20">
      <xsl:apply-templates mode="mode_d1e49" select="."/>
   </xsl:template>
   <xsl:template match="n:section" mode="mode_d1e13_nsd1e15_unwrap_d1e59">
      <xsl:apply-templates mode="mode_d1e64" select="."/>
   </xsl:template>
   <xsl:template match="n:section[generate-id(.) = generate-id(ancestor::n:section[1]//*[local-name()='instance']/n:section)]"
                 mode="mode_d1e13_nsd1e15_unwrap_d1e59">
      <xsl:apply-templates mode="mode_d1e88" select="."/>
   </xsl:template>        
        <xsl:template mode="mode_d1e13"
                 match="n:section[n:matches(@ns, 'http://www.xsmiles.org/*', '*')]">
      <n:allow>
         <xsl:apply-templates mode="mode_d1e13"/>
      </n:allow>
   </xsl:template>
      <xsl:template match="n:section" mode="mode_d1e13">
      <n:reject>
         <xsl:apply-templates mode="mode_d1e13"/>
      </n:reject>
   </xsl:template>
              <xsl:template mode="mode_d1e25" match="n:section[@ns='http://www.w3.org/2002/xforms']">
      <xsl:apply-templates mode="mode_d1e25_nsd1e27_attach_d1e32"/>
   </xsl:template>
              <xsl:template mode="mode_d1e25" match="n:section[@ns='http://www.w3.org/1999/xhtml']">
      <xsl:variable name="thisSection" select="generate-id(.)"/>
      <xsl:apply-templates select="//n:section[generate-id(ancestor::n:section[1])=$thisSection]"
                           mode="mode_d1e25_nsd1e35_unwrap_d1e40"/>
   </xsl:template>
            <xsl:template match="n:section" mode="mode_d1e25">
      <n:reject>
         <xsl:apply-templates mode="mode_d1e25"/>
      </n:reject>
   </xsl:template>
                <xsl:template match="n:section" mode="mode_d1e49">
      <n:allow>
         <xsl:apply-templates mode="mode_d1e49"/>
      </n:allow>
   </xsl:template>
              
                <xsl:template mode="mode_d1e64" match="n:section[@ns='http://www.w3.org/2002/xforms']">
      <xsl:variable name="thisSection" select="generate-id(.)"/>
      <xsl:apply-templates select="//n:section[generate-id(ancestor::n:section[1])=$thisSection]"
                           mode="mode_d1e64_nsd1e66_unwrap_d1e71"/>
   </xsl:template>
              <xsl:template mode="mode_d1e64" match="n:section[@ns='http://www.w3.org/1999/xhtml']">
      <xsl:apply-templates mode="mode_d1e64_nsd1e74_attach_d1e79"/>
   </xsl:template>
            <xsl:template match="n:section" mode="mode_d1e64">
      <n:reject>
         <xsl:apply-templates mode="mode_d1e64"/>
      </n:reject>
   </xsl:template>
                <xsl:template match="n:section" mode="mode_d1e88">
      <xsl:variable name="thisSection" select="generate-id(.)"/>
      <xsl:apply-templates select="//n:section[generate-id(ancestor::n:section[1])=$thisSection]"
                           mode="mode_d1e88_nsd1e90_unwrap_d1e92"/>
   </xsl:template>
   <xsl:template match="*[namespace-uri()!='http://www.oxygenxml.com/nvdl']" mode="#all"
                 priority="-100">
      <xsl:copy>
         <xsl:apply-templates select="@*[namespace-uri()!='http://www.oxygenxml.com/nvdl']" mode="#current"/>
         <xsl:apply-templates select="@n:*" mode="#current"/>
         <xsl:apply-templates mode="#current"/>
      </xsl:copy>
   </xsl:template>
   <xsl:template match="@*[namespace-uri()!='http://www.oxygenxml.com/nvdl']" mode="#all"
                 priority="-100">
      <xsl:copy/>
   </xsl:template>
   <xsl:template match="@n:*" mode="#all" priority="-100"/>
   <xsl:template match="*" mode="flatten">
      <xsl:apply-templates select="//n:*" mode="flatten1"/>
   </xsl:template>
   <xsl:template match="n:*" mode="flatten1">
      <xsl:copy>
         <xsl:copy-of select="@*"/>
         <xsl:apply-templates select="text()|*[namespace-uri()!='http://www.oxygenxml.com/nvdl']"
                              mode="flatten2"/>
      </xsl:copy>
   </xsl:template>
   <xsl:template match="*[namespace-uri()!='http://www.oxygenxml.com/nvdl']" mode="flatten2">
      <xsl:copy>
         <xsl:copy-of select="@*[namespace-uri()!='http://www.oxygenxml.com/nvdl']"/>
         <xsl:apply-templates select="text()|*[namespace-uri()!='http://www.oxygenxml.com/nvdl']"
                              mode="flatten2"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>