import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public class __2F_INCLUDES_TESTS_2F_jsp_include_test_2E_jsp extends javax.servlet.http.HttpServlet{
 String argh = "argh"; 

 public String globalIncludedString = "included";

 protected String with_space = "withspace";

public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
		throws java.io.IOException, javax.servlet.ServletException {
javax.servlet.jsp.PageContext pageContext = null;
javax.servlet.http.HttpSession session = null;
javax.servlet.ServletContext application = null;
javax.servlet.ServletConfig config = null;
javax.servlet.jsp.JspWriter out = null;
Object page = null;

try {
 String localIncludedString = globalIncludedString;
for(int i=0; i<5; i++) {
out.print(""+
i
);
}
javax.swing.JButton BEAN_includedBean = new javax.swing.JButton();
 int include_include_int = 5; 
javax.swing.JButton includesUseBean = new javax.swing.JButton();
{ // <gifts:gift>
} // </gifts:gift>
out.print(""+
   
);
 } catch (java.lang.Exception e) {} 
}}