diff --git bin/ext/hwi.cmd bin/ext/hwi.cmd deleted file mode 100644 index e081bc5..0000000 --- bin/ext/hwi.cmd +++ /dev/null @@ -1,62 +0,0 @@ -@echo off -@rem Licensed to the Apache Software Foundation (ASF) under one or more -@rem contributor license agreements. See the NOTICE file distributed with -@rem this work for additional information regarding copyright ownership. -@rem The ASF licenses this file to You under the Apache License, Version 2.0 -@rem (the "License"); you may not use this file except in compliance with -@rem the License. You may obtain a copy of the License at -@rem -@rem http://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. - -set CLASS=org.apache.hadoop.hive.hwi.HWIServer -pushd %HIVE_LIB% -for /f %%a IN ('dir /b hive-hwi-*.jar') do ( - set JAR=%HIVE_LIB%\%%a -) -popd - -if [%1]==[hwi_help] goto :hwi_help - -if [%1]==[hwi_catservice] goto :hwi_catservice - -:hwi - @rem set the hwi jar and war files - pushd %HIVE_LIB% - for /f %%a IN ('dir /b hive-hwi-*') do ( - call :ProcessFileName %%a - ) - popd - - @rem hadoop 20 or newer - skip the aux_jars option and hiveconf - call %HIVE_BIN_PATH%\ext\util\execHiveCmd.cmd %CLASS% -goto :EOF - -@rem process the hwi files -:ProcessFileName - set temp=%1 - set temp=%temp:~-3% - - if %temp%==jar set HWI_JAR_FILE=lib\%1 - - if %temp%==war set HWI_WAR_FILE=lib\%1 -goto :EOF - -:hwi_help - echo "Usage ANT_LIB=XXXX hive --service hwi" -goto :EOF - -:hwi_catservice -@echo ^ -@echo ^HWI^ -@echo ^HWI^ -@echo ^Hadoop HWI Service^ -@echo ^%JAVA_HOME%\bin\java^ -@echo ^%JAVA_HEAP_MAX% %HADOOP_OPTS% %AUX_PARAM% -classpath %CLASSPATH% %CLASS% %HIVE_OPTS%^ -@echo ^ -goto :EOF diff --git bin/ext/hwi.sh bin/ext/hwi.sh deleted file mode 100644 index f9cd8ec..0000000 --- bin/ext/hwi.sh +++ /dev/null @@ -1,50 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -THISSERVICE=hwi -export SERVICE_LIST="${SERVICE_LIST}${THISSERVICE} " - -hwi() { - - if $cygwin; then - HIVE_LIB=`cygpath -w "$HIVE_LIB"` - fi - - CLASS=org.apache.hadoop.hive.hwi.HWIServer - # The ls hack forces the * to be expanded which is required because - # System.getenv doesn't do globbing - export HWI_JAR_FILE=$(ls ${HIVE_LIB}/hive-hwi-*.jar) - export HWI_WAR_FILE=$(ls ${HIVE_LIB}/hive-hwi-*.war) - - #hwi requires ant jars - if [ "$ANT_LIB" = "" ] ; then - ANT_LIB=/opt/ant/lib - fi - for f in ${ANT_LIB}/*.jar; do - if [[ ! -f $f ]]; then - continue; - fi - HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$f - done - - export HADOOP_CLASSPATH - - # hadoop 20 or newer - skip the aux_jars option and hiveconf - exec $HADOOP jar ${HWI_JAR_FILE} $CLASS $HIVE_OPTS "$@" -} - -hwi_help(){ - echo "Usage ANT_LIB=XXXX hive --service hwi" -} diff --git bin/hive.cmd bin/hive.cmd index eb20531..a1e4806 100644 --- bin/hive.cmd +++ bin/hive.cmd @@ -343,9 +343,6 @@ goto :EOF set VAR%SERVICE_COUNT%=hiveserver2 set /a SERVICE_COUNT = %SERVICE_COUNT% + 1 - set VAR%SERVICE_COUNT%=hwi - - set /a SERVICE_COUNT = %SERVICE_COUNT% + 1 set VAR%SERVICE_COUNT%=jar set /a SERVICE_COUNT = %SERVICE_COUNT% + 1 diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 7ceb322..7f1f91a 100644 --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -1228,12 +1228,6 @@ private static void populateLlapDaemonVarsSet(Set llapDaemonVarsSetLocal "Read from a binary stream and treat each hive.binary.record.max.length bytes as a record. \n" + "The last record before the end of stream can have less than hive.binary.record.max.length bytes"), - // HWI - HIVEHWILISTENHOST("hive.hwi.listen.host", "0.0.0.0", "This is the host address the Hive Web Interface will listen on"), - HIVEHWILISTENPORT("hive.hwi.listen.port", "9999", "This is the port the Hive Web Interface will listen on"), - HIVEHWIWARFILE("hive.hwi.war.file", "${env:HWI_WAR_FILE}", - "This sets the path to the HWI war file, relative to ${HIVE_HOME}. "), - HIVEHADOOPMAXMEM("hive.mapred.local.mem", 0, "mapper/reducer memory in local mode"), //small table file size diff --git conf/hive-env.sh.template conf/hive-env.sh.template index d621edd..72e78d5 100644 --- conf/hive-env.sh.template +++ conf/hive-env.sh.template @@ -19,7 +19,7 @@ # the Hive installation (so that users do not have to set environment variables # or set command line parameters to get correct behavior). # -# The hive service being invoked (CLI/HWI etc.) is available via the environment +# The hive service being invoked (CLI etc.) is available via the environment # variable SERVICE @@ -41,7 +41,7 @@ # # Larger heap size may be required when running queries over large number of files or partitions. # By default hive shell scripts use a heap size of 256 (MB). Larger heap size would also be -# appropriate for hive server (hwi etc). +# appropriate for hive server. # Set HADOOP_HOME to point to a specific hadoop install directory diff --git hwi/pom.xml hwi/pom.xml deleted file mode 100644 index 4e27be8..0000000 --- hwi/pom.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - 4.0.0 - - org.apache.hive - hive - 2.2.0-SNAPSHOT - ../pom.xml - - - hive-hwi - jar - Hive HWI - - - .. - - - - - - - org.apache.hive - hive-cli - ${project.version} - - - org.apache.hive - hive-common - ${project.version} - - - org.apache.hive - hive-shims - ${project.version} - - - org.apache.hive - hive-exec - ${project.version} - - - - org.eclipse.jetty.aggregate - jetty-all-server - ${jetty.version} - - - org.apache.hadoop - hadoop-common - ${hadoop.version} - true - - - org.apache.hadoop - hadoop-mapreduce-client-common - ${hadoop.version} - true - test - - - org.slf4j - slf4j-log4j12 - - - commmons-logging - commons-logging - - - - - - org.apache.hive - hive-exec - ${project.version} - tests - test - - - - commons-httpclient - commons-httpclient - ${commons-httpclient.version} - test - - - junit - junit - ${junit.version} - test - - - org.apache.hadoop - hadoop-mapreduce-client-core - ${hadoop.version} - true - test - - - - - ${basedir}/src/java - ${basedir}/src/test - - - - org.apache.maven.plugins - maven-war-plugin - - ${basedir}/web - WEB-INF/lib/* - - - - - - diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWIAuth.java hwi/src/java/org/apache/hadoop/hive/hwi/HWIAuth.java deleted file mode 100644 index d4c1c59..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWIAuth.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hive.hwi; - -/** - * Represents an authenticated user. This class is stored in the users session. - * It is also used as a key for the HiveSessionManager - */ -public class HWIAuth implements Comparable { - private String user; - private String[] groups; - - public HWIAuth() { - - } - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String[] getGroups() { - return groups; - } - - public void setGroups(String[] groups) { - this.groups = groups; - } - - /** - * HWIAuth is used in SortedSets(s) the compartTo method is required. - * - * @return chained call to String.compareTo based on user property - */ - public int compareTo(Object obj) { - if (obj == null) { - return -1; - } - if (!(obj instanceof HWIAuth)) { - return -1; - } - HWIAuth o = (HWIAuth) obj; - return o.getUser().compareTo(user); - } - - /** - * HWIAuth is used in Map(s) the hashCode method is required. - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((user == null) ? 0 : user.hashCode()); - return result; - } - - /** - * HWIAuth is used in Map(s) the equals method is required. - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof HWIAuth)) { - return false; - } - HWIAuth other = (HWIAuth) obj; - if (user == null) { - if (other.user != null) { - return false; - } - } else if (!user.equals(other.user)) { - return false; - } - return true; - } - -} diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWIContextListener.java hwi/src/java/org/apache/hadoop/hive/hwi/HWIContextListener.java deleted file mode 100644 index 1f5cb79..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWIContextListener.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hive.hwi; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * After getting a contextInitialized event this component starts an instance of - * the HiveSessionManager. - * - */ -public class HWIContextListener implements javax.servlet.ServletContextListener { - - protected static final Logger l4j = LoggerFactory.getLogger(HWIContextListener.class - .getName()); - - /** - * The Hive Web Interface manages multiple hive sessions. This event is used - * to start a Runnable, HiveSessionManager as a thread inside the servlet - * container. - * - * @param sce - * An event fired by the servlet context on startup - */ - public void contextInitialized(ServletContextEvent sce) { - ServletContext sc = sce.getServletContext(); - HWISessionManager hs = new HWISessionManager(); - l4j.debug("HWISessionManager created."); - Thread t = new Thread(hs); - t.start(); - l4j.debug("HWISessionManager thread started."); - sc.setAttribute("hs", hs); - l4j.debug("HWISessionManager placed in application context."); - } - - /** - * When the Hive Web Interface is closing we locate the Runnable - * HiveSessionManager and set it's internal goOn variable to false. This - * should allow the application to gracefully shutdown. - * - * @param sce - * An event fired by the servlet context on context shutdown - */ - public void contextDestroyed(ServletContextEvent sce) { - ServletContext sc = sce.getServletContext(); - HWISessionManager hs = (HWISessionManager) sc.getAttribute("hs"); - if (hs == null) { - l4j.error("HWISessionManager was not found in context"); - } else { - l4j.error("HWISessionManager goOn set to false. Shutting down."); - hs.setGoOn(false); - } - } -} diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWIException.java hwi/src/java/org/apache/hadoop/hive/hwi/HWIException.java deleted file mode 100644 index 76200d7..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWIException.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hive.hwi; - -/** - * HWIException. - * - */ -public class HWIException extends Exception { - - private static final long serialVersionUID = 1L; - - public HWIException() { - super(); - } - - /** Specify an error String with the Exception. */ - public HWIException(String arg0) { - super(arg0); - } - - /** Wrap an Exception in HWIException. */ - public HWIException(Throwable arg0) { - super(arg0); - } - - /** Specify an error String and wrap an Exception in HWIException. */ - public HWIException(String arg0, Throwable arg1) { - super(arg0, arg1); - } - -} diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWIServer.java hwi/src/java/org/apache/hadoop/hive/hwi/HWIServer.java deleted file mode 100644 index 5680ed9..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWIServer.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hive.hwi; - -import java.io.File; -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.shims.JettyShims; -import org.apache.hadoop.hive.shims.ShimLoader; - -/** - * This is the entry point for HWI. A web server is invoked in the same manner - * as the hive CLI. Rather then opening a command line session a web server is - * started and a web application to work with hive is started. - */ -public class HWIServer { - protected static final Logger l4j = LoggerFactory.getLogger(HWIServer.class.getName()); - - private JettyShims.Server webServer; - private final String[] args; - - /** - * - * @param args - * These are the command line arguments. Usually -hiveconf. - * @throws java.io.IOException - */ - public HWIServer(String[] args) throws IOException { - this.args = args; - } - - /** - * This method initialized the internal Jetty Servlet Engine. It adds the hwi - * context path. - * - * @throws java.io.IOException - * Port already in use, bad bind etc. - */ - public void start() throws IOException { - - HiveConf conf = new HiveConf(this.getClass()); - - String listen = null; - int port = -1; - - listen = conf.getVar(HiveConf.ConfVars.HIVEHWILISTENHOST); - port = conf.getIntVar(HiveConf.ConfVars.HIVEHWILISTENPORT); - - if (listen.equals("")) { - l4j.warn("hive.hwi.listen.host was not specified defaulting to 0.0.0.0"); - listen = "0.0.0.0"; - } - if (port == -1) { - l4j.warn("hive.hwi.listen.port was not specified defaulting to 9999"); - port = 9999; - } - - String hwiWAR = conf.getVar(HiveConf.ConfVars.HIVEHWIWARFILE); - String hivehome = System.getenv().get("HIVE_HOME"); - File hwiWARFile = new File(hivehome, hwiWAR); - if (!hwiWARFile.exists()) { - l4j.error("HWI WAR file not found at " + hwiWARFile.toString()); - System.exit(1); - } - - webServer = ShimLoader.getJettyShims().startServer(listen, port); - webServer.addWar(hwiWARFile.toString(), "/hwi"); - - /* - * The command line args may be used by multiple components. Rather by - * setting these as a system property we avoid having to specifically pass - * them - */ - StringBuilder sb = new StringBuilder(); - for (String arg : args) { - sb.append(arg + " "); - } - System.setProperty("hwi-args", sb.toString()); - - try { - while (true) { - try { - webServer.start(); - webServer.join(); - l4j.debug(" HWI Web Server is started."); - break; - } catch (org.mortbay.util.MultiException ex) { - throw ex; - } - } - } catch (IOException ie) { - throw ie; - } catch (Exception e) { - IOException ie = new IOException("Problem starting HWI server"); - ie.initCause(e); - l4j.error("Parsing hwi.listen.port caused exception ", e); - throw ie; - } - } - - /** - * - * @param args - * as of now no arguments are supported - * @throws java.lang.Exception - * Could be thrown if due to issues with Jetty or bad configuration - * options - * - */ - public static void main(String[] args) throws Exception { - HWIServer hwi = new HWIServer(args); - l4j.info("HWI is starting up"); - hwi.start(); - } - - /** - * Shut down the running HWI Server. - * - * @throws Exception - * Running Thread.stop() can and probably will throw this - */ - public void stop() throws Exception { - l4j.info("HWI is shutting down"); - webServer.stop(); - } - -} diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionItem.java hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionItem.java deleted file mode 100644 index f14608c..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionItem.java +++ /dev/null @@ -1,610 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.hadoop.hive.hwi; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.List; -import java.sql.SQLException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.hadoop.hive.cli.CliSessionState; -import org.apache.hadoop.hive.cli.OptionsProcessor; -import org.apache.hadoop.hive.common.LogUtils; -import org.apache.hadoop.hive.common.LogUtils.LogInitializationException; -import org.apache.hadoop.hive.conf.HiveConf; -import org.apache.hadoop.hive.ql.CommandNeedRetryException; -import org.apache.hadoop.hive.ql.Driver; -import org.apache.hadoop.hive.ql.history.HiveHistoryViewer; -import org.apache.hadoop.hive.ql.processors.CommandProcessor; -import org.apache.hadoop.hive.ql.processors.CommandProcessorFactory; -import org.apache.hadoop.hive.ql.session.SessionState; - -/** - * HWISessionItem can be viewed as a wrapper for a Hive shell. With it the user - * has a session on the web server rather then in a console window. - * - */ -public class HWISessionItem implements Runnable, Comparable { - - protected static final Logger l4j = LoggerFactory.getLogger(HWISessionItem.class - .getName()); - - /** Represents the state a session item can be in. */ - public enum WebSessionItemStatus { - NEW, READY, QUERY_SET, QUERY_RUNNING, DESTROY, KILL_QUERY - }; - - /** The Web Interface sessionName this is used to identify the session. */ - private final String sessionName; - - /** - * Respresents the current status of the session. Used by components to - * determine state. Operations will throw exceptions if the item is not in the - * correct state. - */ - private HWISessionItem.WebSessionItemStatus status; - - private CliSessionState ss; - - /** Standard out from the session will be written to this local file. */ - private String resultFile; - - /** Standard error from the session will be written to this local file. */ - private String errorFile; - - /** - * The results from the Driver. This is used for storing the most result - * results from the driver in memory. - */ - private ArrayList> resultBucket; - - /** Limits the resultBucket to be no greater then this size. */ - private int resultBucketMaxSize; - - /** List of queries that this item should/has operated on. */ - private List queries; - - /** status code results of queries. */ - private List queryRet; - - /** Reference to the configuration. */ - private HiveConf conf; - - /** User privileges. */ - private HWIAuth auth; - - public Thread runnable; - - /** - * Threading SessionState issues require us to capture a reference to the hive - * history file and store it. - */ - private String historyFile; - - /** - * Creates an instance of WebSessionItem, sets status to NEW. - */ - public HWISessionItem(HWIAuth auth, String sessionName) { - this.auth = auth; - this.sessionName = sessionName; - l4j.debug("HWISessionItem created"); - status = WebSessionItemStatus.NEW; - queries = new ArrayList(); - queryRet = new ArrayList(); - resultBucket = new ArrayList>(); - resultBucketMaxSize = 1000; - runnable = new Thread(this); - runnable.start(); - - l4j.debug("Wait for NEW->READY transition"); - synchronized (runnable) { - if (status != WebSessionItemStatus.READY) { - try { - runnable.wait(); - } catch (Exception ex) { - } - } - } - l4j.debug("NEW->READY transition complete"); - } - - /** - * This is the initialization process that is carried out for each - * SessionItem. The goal is to emulate the startup of CLIDriver. - */ - private void itemInit() { - l4j.debug("HWISessionItem itemInit start " + getSessionName()); - OptionsProcessor oproc = new OptionsProcessor(); - - if (System.getProperty("hwi-args") != null) { - String[] parts = System.getProperty("hwi-args").split("\\s+"); - if (!oproc.process_stage1(parts)) { - } - } - - try { - LogUtils.initHiveLog4j(); - } catch (LogInitializationException e) { - l4j.warn("Initialization Error", e); - } - conf = new HiveConf(SessionState.class); - ss = new CliSessionState(conf); - SessionState.start(ss); - queries.add("set hadoop.job.ugi=" + auth.getUser() + "," - + auth.getGroups()[0]); - queries.add("set user.name=" + auth.getUser()); - /* - * HiveHistoryFileName will not be accessible outside this thread. We must - * capture this now. - */ - historyFile = SessionState.get().getHiveHistory().getHistFileName(); - l4j.debug("HWISessionItem itemInit Complete " + getSessionName()); - status = WebSessionItemStatus.READY; - - synchronized (runnable) { - runnable.notifyAll(); - } - } - - /** - * HWISessionItem is a Runnable instance. Calling this method will change the - * status to QUERY_SET and notify(). The run method detects this and then - * continues processing. - */ - public void clientStart() throws HWIException { - if (status == WebSessionItemStatus.QUERY_RUNNING) { - throw new HWIException("Query already running"); - } - status = WebSessionItemStatus.QUERY_SET; - synchronized (runnable) { - runnable.notifyAll(); - } - l4j.debug(getSessionName() + " Query is set to start"); - } - - public void clientKill() throws HWIException { - if (status != WebSessionItemStatus.QUERY_RUNNING) { - throw new HWIException("Can not kill that which is not running."); - } - status = WebSessionItemStatus.KILL_QUERY; - l4j.debug(getSessionName() + " Query is set to KILL_QUERY"); - } - - /** This method clears the private member variables. */ - public void clientRenew() throws HWIException { - throwIfRunning(); - queries = new ArrayList(); - queryRet = new ArrayList(); - resultBucket = new ArrayList>(); - resultFile = null; - errorFile = null; - // this.conf = null; - // this.ss = null; - status = WebSessionItemStatus.NEW; - l4j.debug(getSessionName() + " Query is renewed to start"); - } - - /** - * This is a callback style function used by the HiveSessionManager. The - * HiveSessionManager notices this and attempts to stop the query. - */ - protected void killIt() { - l4j.debug(getSessionName() + " Attempting kill."); - if (runnable != null) { - try { - runnable.join(1000); - l4j.debug(getSessionName() + " Thread join complete"); - } catch (InterruptedException e) { - l4j.error(getSessionName() + " killing session caused exception ", e); - } - } - } - - /** - * Helper function to get configuration variables. - * - * @param wanted - * a ConfVar - * @return Value of the configuration variable. - */ - public String getHiveConfVar(HiveConf.ConfVars wanted) throws HWIException { - String result = null; - try { - result = ss.getConf().getVar(wanted); - } catch (Exception ex) { - throw new HWIException(ex); - } - return result; - } - - public String getHiveConfVar(String s) throws HWIException { - String result = null; - try { - result = conf.get(s); - } catch (Exception ex) { - throw new HWIException(ex); - } - return result; - } - - /* - * mapred.job.tracker could be host:port or just local - * mapred.job.tracker.http.address could be host:port or just host In some - * configurations http.address is set to 0.0.0.0 we are combining the two - * variables to provide a url to the job tracker WUI if it exists. If hadoop - * chose the first available port for the JobTracker HTTP port will can not - * determine it. - */ - public String getJobTrackerURL(String jobid) throws HWIException { - String jt = this.getHiveConfVar("mapred.job.tracker"); - String jth = this.getHiveConfVar("mapred.job.tracker.http.address"); - String[] jtparts = null; - String[] jthttpParts = null; - if (jt.equalsIgnoreCase("local")) { - jtparts = new String[2]; - jtparts[0] = "local"; - jtparts[1] = ""; - } else { - jtparts = jt.split(":"); - } - if (jth.contains(":")) { - jthttpParts = jth.split(":"); - } else { - jthttpParts = new String[2]; - jthttpParts[0] = jth; - jthttpParts[1] = ""; - } - return jtparts[0] + ":" + jthttpParts[1] + "/jobdetails.jsp?jobid=" + jobid - + "&refresh=30"; - } - - @Override - /* - * HWISessionItem uses a wait() notify() system. If the thread detects conf to - * be null, control is transfered to initItem(). A status of QUERY_SET causes - * control to transfer to the runQuery() method. DESTROY will cause the run - * loop to end permanently. - */ - public void run() { - synchronized (runnable) { - while (status != HWISessionItem.WebSessionItemStatus.DESTROY) { - if (status == WebSessionItemStatus.NEW) { - itemInit(); - } - - if (status == WebSessionItemStatus.QUERY_SET) { - runQuery(); - } - - try { - runnable.wait(); - } catch (InterruptedException e) { - l4j.error("in wait() state ", e); - } - } // end while - } // end sync - } // end run - - /** - * runQuery iterates the list of queries executing each query. - */ - public void runQuery() { - FileOutputStream fos = null; - if (getResultFile() != null) { - try { - fos = new FileOutputStream(new File(resultFile)); - ss.out = new PrintStream(fos, true, "UTF-8"); - } catch (java.io.FileNotFoundException fex) { - l4j.error(getSessionName() + " opening resultfile " + resultFile, fex); - } catch (java.io.UnsupportedEncodingException uex) { - l4j.error(getSessionName() + " opening resultfile " + resultFile, uex); - } - } else { - l4j.debug(getSessionName() + " Output file was not specified"); - } - l4j.debug(getSessionName() + " state is now QUERY_RUNNING."); - status = WebSessionItemStatus.QUERY_RUNNING; - - // expect one return per query - queryRet = new ArrayList(queries.size()); - for (int i = 0; i < queries.size(); i++) { - String cmd = queries.get(i); - String cmd_trimmed = cmd.trim(); - String[] tokens = cmd_trimmed.split("\\s+"); - String cmd_1 = cmd_trimmed.substring(tokens[0].length()).trim(); - CommandProcessor proc = null; - try { - proc = CommandProcessorFactory.get(tokens[0]); - } catch (SQLException e) { - l4j.error(getSessionName() + " error processing " + cmd, e); - } - if (proc != null) { - if (proc instanceof Driver) { - Driver qp = (Driver) proc; - qp.setTryCount(Integer.MAX_VALUE); - try { - queryRet.add(Integer.valueOf(qp.run(cmd).getResponseCode())); - ArrayList res = new ArrayList(); - try { - while (qp.getResults(res)) { - ArrayList resCopy = new ArrayList(); - resCopy.addAll(res); - resultBucket.add(resCopy); - if (resultBucket.size() > resultBucketMaxSize) { - resultBucket.remove(0); - } - for (String row : res) { - if (ss != null) { - if (ss.out != null) { - ss.out.println(row); - } - } else { - throw new RuntimeException("ss was null"); - } - } - res.clear(); - } - - } catch (IOException ex) { - l4j.error(getSessionName() + " getting results " + getResultFile() - + " caused exception.", ex); - } - } catch (CommandNeedRetryException e) { - // this should never happen since we Driver.setTryCount(Integer.MAX_VALUE) - l4j.error(getSessionName() + " Exception when executing", e); - } finally { - qp.close(); - } - } else { - try { - queryRet.add(Integer.valueOf(proc.run(cmd_1).getResponseCode())); - } catch (CommandNeedRetryException e) { - // this should never happen if there is no bug - l4j.error(getSessionName() + " Exception when executing", e); - } - } - } else { - // processor was null - l4j.error(getSessionName() - + " query processor was not found for query " + cmd); - } - } // end for - - // cleanup - try { - if (fos != null) { - fos.close(); - } - } catch (IOException ex) { - l4j.error(getSessionName() + " closing result file " + getResultFile() - + " caused exception.", ex); - } - status = WebSessionItemStatus.READY; - l4j.debug(getSessionName() + " state is now READY"); - synchronized (runnable) { - runnable.notifyAll(); - } - } - - /** - * This is a chained call to SessionState.setIsSilent(). Use this if you do - * not want the result file to have information status - */ - public void setSSIsSilent(boolean silent) throws HWIException { - if (ss == null) { - throw new HWIException("Session State is null"); - } - ss.setIsSilent(silent); - } - - /** - * This is a chained call to SessionState.getIsSilent(). - */ - public boolean getSSIsSilent() throws HWIException { - if (ss == null) { - throw new HWIException("Session State is null"); - } - return ss.getIsSilent(); - } - - /** to support sorting/Set. */ - public int compareTo(HWISessionItem other) { - if (other == null) { - return -1; - } - return getSessionName().compareTo(other.getSessionName()); - } - - /** - * - * @return the HiveHistoryViewer for the session - * @throws HWIException - */ - public HiveHistoryViewer getHistoryViewer() throws HWIException { - if (ss == null) { - throw new HWIException("Session state was null"); - } - /* - * we can not call this.ss.get().getHiveHistory().getHistFileName() directly - * as this call is made from a a Jetty thread and will return null - */ - HiveHistoryViewer hv = new HiveHistoryViewer(historyFile); - return hv; - } - - /** - * Uses the sessionName property to compare to sessions. - * - * @return true if sessionNames are equal false otherwise - */ - @Override - public boolean equals(Object other) { - if (other == null) { - return false; - } - if (!(other instanceof HWISessionItem)) { - return false; - } - HWISessionItem o = (HWISessionItem) other; - if (getSessionName().equals(o.getSessionName())) { - return true; - } else { - return false; - } - } - - public String getResultFile() { - return resultFile; - } - - public void setResultFile(String resultFile) { - this.resultFile = resultFile; - } - - /** - * The session name is an identifier to recognize the session. - * - * @return the session's name - */ - public String getSessionName() { - return sessionName; - } - - /** - * Used to represent to the user and other components what state the - * HWISessionItem is in. Certain commands can only be run when the application - * is in certain states. - * - * @return the current status of the session - */ - public WebSessionItemStatus getStatus() { - return status; - } - - /** - * Currently unused. - * - * @return a String with the full path to the error file. - */ - public String getErrorFile() { - return errorFile; - } - - /** - * Currently unused. - * - * @param errorFile - * the full path to the file for results. - */ - public void setErrorFile(String errorFile) { - this.errorFile = errorFile; - } - - /** - * @return the auth - */ - public HWIAuth getAuth() { - return auth; - } - - /** - * @param auth - * the auth to set - */ - protected void setAuth(HWIAuth auth) { - this.auth = auth; - } - - /** Returns an unmodifiable list of queries. */ - public List getQueries() { - return java.util.Collections.unmodifiableList(queries); - } - - /** - * Adds a new query to the execution list. - * - * @param query - * query to be added to the list - */ - public void addQuery(String query) throws HWIException { - throwIfRunning(); - queries.add(query); - } - - /** - * Removes a query from the execution list. - * - * @param item - * the 0 based index of the item to be removed - */ - public void removeQuery(int item) throws HWIException { - throwIfRunning(); - queries.remove(item); - } - - public void clearQueries() throws HWIException { - throwIfRunning(); - queries.clear(); - } - - /** returns the value for resultBucketMaxSize. */ - public int getResultBucketMaxSize() { - return resultBucketMaxSize; - } - - /** - * sets the value for resultBucketMaxSize. - * - * @param size - * the new size - */ - public void setResultBucketMaxSize(int size) { - resultBucketMaxSize = size; - } - - /** gets the value for resultBucket. */ - public ArrayList> getResultBucket() { - return resultBucket; - } - - /** - * The HWISessionItem stores the result of each query in an array. - * - * @return unmodifiable list of return codes - */ - public List getQueryRet() { - return java.util.Collections.unmodifiableList(queryRet); - } - - /** - * If the ItemStatus is QueryRunning most of the configuration is in a read - * only state. - */ - private void throwIfRunning() throws HWIException { - if (status == WebSessionItemStatus.QUERY_RUNNING) { - throw new HWIException("Query already running"); - } - } - -} diff --git hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionManager.java hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionManager.java deleted file mode 100644 index d6030ec..0000000 --- hwi/src/java/org/apache/hadoop/hive/hwi/HWISessionManager.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hive.hwi; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * HiveSessionManager is a Runnable started inside a web application context. - * It's basic function is to hold a collection of SessionItem(s). It also works - * as a facade, as jsp clients can not create a Hive Session directly. Hive - * Sessions are long lived, unlike a traditional Query and Block system clients - * set up the query to be started with an instance of this class. - * - */ -public class HWISessionManager implements Runnable { - - protected static final Logger l4j = LoggerFactory.getLogger(HWISessionManager.class - .getName()); - - private boolean goOn; - private TreeMap> items; - - protected HWISessionManager() { - goOn = true; - items = new TreeMap>(); - } - - /** - * This method scans the SessionItem collection. If a SessionItem is in the - * QUERY_SET state that signals that its thread should be started. If the - * SessionItem is in the DESTROY state it should be cleaned up and removed - * from the collection. Currently we are using a sleep. A wait/notify could be - * implemented. Queries will run for a long time, a one second wait on start - * will not be noticed. - * - */ - public void run() { - l4j.debug("Entered run() thread has started"); - while (goOn) { - l4j.debug("locking items"); - synchronized (items) { - - for (HWIAuth a : items.keySet()) { - for (HWISessionItem i : items.get(a)) { - if (i.getStatus() == HWISessionItem.WebSessionItemStatus.DESTROY) { - items.get(a).remove(i); - } - if (i.getStatus() == HWISessionItem.WebSessionItemStatus.KILL_QUERY) { - l4j.debug("Killing item: " + i.getSessionName()); - i.killIt(); - l4j.debug("Killed item: " + i.getSessionName()); - items.get(a).remove(i); - } - } - } - - } // end sync - try { - Thread.sleep(100); - } catch (InterruptedException ex) { - l4j.error("Could not sleep ", ex); - } - } // end while - l4j.debug("goOn is false. Loop has ended."); - // Cleanup used here to stop all threads - synchronized (items) { - for (HWIAuth a : items.keySet()) { - for (HWISessionItem i : items.get(a)) { - try { - if (i.getStatus() == HWISessionItem.WebSessionItemStatus.QUERY_RUNNING) { - l4j.debug(i.getSessionName() + "Joining "); - i.runnable.join(1000); - l4j.debug(i.getSessionName() + "Joined "); - } - } catch (InterruptedException ex) { - l4j.error(i.getSessionName() + "while joining ", ex); - } - } - } - } - } // end run - - protected boolean isGoOn() { - return goOn; - } - - protected void setGoOn(boolean goOn) { - this.goOn = goOn; - } - - protected TreeMap> getItems() { - return items; - } - - protected void setItems(TreeMap> items) { - this.items = items; - } - - // client methods called from JSP - /** - * Rather then return the actual items we return a list copies. This enforces - * our HWISessionManager by preventing the ability of the client(jsp) to - * create SessionItems. - * - * @return A set of SessionItems this framework manages - */ - public ArrayList findAllSessionItems() { - ArrayList otherItems = new ArrayList(); - for (HWIAuth a : items.keySet()) { - otherItems.addAll(items.get(a)); - } - return otherItems; - } - - /** - * Here we handle creating the SessionItem, we do this for the JSP client - * because we need to set parameters the client is not aware of. One such - * parameter is the command line arguments the server was started with. - * - * @param a - * Authenticated user - * @param sessionName - * Represents the session name - * @return a new SessionItem or null if a session with that name already - * exists - */ - public HWISessionItem createSession(HWIAuth a, String sessionName) { - - l4j.debug("Creating session: " + sessionName); - - HWISessionItem si = null; - - synchronized (items) { - if (findSessionItemByName(a, sessionName) == null) { - l4j.debug("Initializing session: " + sessionName + " a for " - + a.getUser()); - si = new HWISessionItem(a, sessionName); - - if (!items.containsKey(a)) { - l4j.debug("SessionList is empty " + a.getUser()); - TreeSet list = new TreeSet(); - list.add(si); - items.put(a, list); - l4j.debug("Item added " + si.getSessionName() + " for user " - + a.getUser()); - } else { - items.get(a).add(si); - l4j.debug("Item added " + si.getSessionName() + " for user " - + a.getUser()); - } - - } else { - l4j.debug("Creating session: " + sessionName + " already exists " - + a.getUser()); - } - } - return si; - } - - /** - * Helper method useful when you know the session name you wish to reference. - * - * @param sessionname - * @return A SessionItem matching the sessionname or null if it does not - * exists - */ - public HWISessionItem findSessionItemByName(HWIAuth auth, String sessionname) { - Collection sessForUser = items.get(auth); - if (sessForUser == null) { - return null; - } - for (HWISessionItem si : sessForUser) { - if (si.getSessionName().equals(sessionname)) { - return si; - } - } - return null; - } - - /** - * Used to list all users that have at least one session. - * - * @return keySet of items all users that have any sessions - */ - public Set findAllUsersWithSessions() { - return items.keySet(); - } - - /** - * Used to list all the sessions of a user. - * - * @param auth - * the user being enquired about - * @return all the sessions of that user - */ - public Set findAllSessionsForUser(HWIAuth auth) { - return items.get(auth); - } - -} diff --git hwi/src/test/org/apache/hadoop/hive/hwi/TestHWIServer.java hwi/src/test/org/apache/hadoop/hive/hwi/TestHWIServer.java deleted file mode 100644 index 8c99eef..0000000 --- hwi/src/test/org/apache/hadoop/hive/hwi/TestHWIServer.java +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.hadoop.hive.hwi; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Properties; - -import junit.framework.TestCase; - -import org.apache.hadoop.hive.shims.JettyShims; -import org.apache.hadoop.hive.shims.ShimLoader; - -/** - * TestHWIServer. - * - */ -public class TestHWIServer extends TestCase { - - public TestHWIServer(String name) { - super(name); - - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - - } - - @Override - protected void tearDown() throws Exception { - super.tearDown(); - - } - - public final void testServerInit() throws Exception { - StringBuilder warFile = new StringBuilder("../build/hwi/hive-hwi-"); - Properties props = new Properties(); - - // try retrieve version from build.properties file - try { - props.load(new FileInputStream("../build.properties")); - warFile.append(props.getProperty("version")).append(".war"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - JettyShims.Server webServer; - webServer = ShimLoader.getJettyShims().startServer("0.0.0.0", 9999); - assertNotNull(webServer); - webServer.addWar(warFile.toString(), "/hwi"); - webServer.start(); - // webServer.join(); - webServer.stop(); - assert (true); - } - -} diff --git hwi/web/WEB-INF/web.xml hwi/web/WEB-INF/web.xml deleted file mode 100644 index a480b29..0000000 --- hwi/web/WEB-INF/web.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - Used to manage Hive Sessions - org.apache.hadoop.hive.hwi.HWIContextListener - - - - - 30 - - - - index.jsp - - diff --git hwi/web/authorize.jsp hwi/web/authorize.jsp deleted file mode 100644 index e29f4d4..0000000 --- hwi/web/authorize.jsp +++ /dev/null @@ -1,88 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<%@page errorPage="error_page.jsp"%> -<% - HWIAuth auth = (HWIAuth) session.getAttribute("auth"); - if (auth == null) { - auth = new HWIAuth(); - auth.setUser(""); - auth.setGroups(new String[] { "" }); - session.setAttribute("auth", auth); - } -%> -<% - String user = request.getParameter("user"); - String groups = request.getParameter("groups"); - if (user != null) { - auth.setUser(user); - auth.setGroups(groups.split("\\s+")); - session.setAttribute("auth", auth); - } -%> - - -Authorize - - - - -
-
-
- -
-
- - <% - if (request.getParameter("user") != null) { - %> -
-

Authorization is complete.

-
- <% - } - %> -
-
- Change User Info -
- -
- -
-
- -
- -
- -
-
-
-
- -
-
-
-
-
- - diff --git hwi/web/css/bootstrap.min.css hwi/web/css/bootstrap.min.css deleted file mode 100644 index 2a0a120..0000000 --- hwi/web/css/bootstrap.min.css +++ /dev/null @@ -1,706 +0,0 @@ -/*! - * Bootstrap v2.0.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} -.clearfix:after{clear:both;} -.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} -.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} -.row:after{clear:both;} -[class*="span"]{float:left;margin-left:20px;} -.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.span12{width:940px;} -.span11{width:860px;} -.span10{width:780px;} -.span9{width:700px;} -.span8{width:620px;} -.span7{width:540px;} -.span6{width:460px;} -.span5{width:380px;} -.span4{width:300px;} -.span3{width:220px;} -.span2{width:140px;} -.span1{width:60px;} -.offset12{margin-left:980px;} -.offset11{margin-left:900px;} -.offset10{margin-left:820px;} -.offset9{margin-left:740px;} -.offset8{margin-left:660px;} -.offset7{margin-left:580px;} -.offset6{margin-left:500px;} -.offset5{margin-left:420px;} -.offset4{margin-left:340px;} -.offset3{margin-left:260px;} -.offset2{margin-left:180px;} -.offset1{margin-left:100px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} -.row-fluid:after{clear:both;} -.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} -.row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid > .span12{width:99.99999998999999%;} -.row-fluid > .span11{width:91.489361693%;} -.row-fluid > .span10{width:82.97872339599999%;} -.row-fluid > .span9{width:74.468085099%;} -.row-fluid > .span8{width:65.95744680199999%;} -.row-fluid > .span7{width:57.446808505%;} -.row-fluid > .span6{width:48.93617020799999%;} -.row-fluid > .span5{width:40.425531911%;} -.row-fluid > .span4{width:31.914893614%;} -.row-fluid > .span3{width:23.404255317%;} -.row-fluid > .span2{width:14.89361702%;} -.row-fluid > .span1{width:6.382978723%;} -.container{margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} -.container:after{clear:both;} -.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} -.container-fluid:after{clear:both;} -p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} -.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} -h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} -h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} -h4,h5,h6{line-height:18px;} -h4{font-size:14px;}h4 small{font-size:12px;} -h5{font-size:12px;} -h6{font-size:11px;color:#999999;text-transform:uppercase;} -.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} -.page-header h1{line-height:1;} -ul,ol{padding:0;margin:0 0 9px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;} -ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} -dl{margin-bottom:18px;} -dt,dd{line-height:18px;} -dt{font-weight:bold;line-height:17px;} -dd{margin-left:9px;} -.dl-horizontal dt{float:left;clear:left;width:120px;text-align:right;} -.dl-horizontal dd{margin-left:130px;} -hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} -strong{font-weight:bold;} -em{font-style:italic;} -.muted{color:#999999;} -abbr[title]{border-bottom:1px dotted #ddd;cursor:help;} -abbr.initialism{font-size:90%;text-transform:uppercase;} -blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} -blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} -small{font-size:100%;} -cite{font-style:normal;} -code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;color:inherit;background-color:transparent;border:0;} -.pre-scrollable{max-height:340px;overflow-y:scroll;} -.label{padding:1px 4px 2px;font-size:10.998px;font-weight:bold;line-height:13px;color:#ffffff;vertical-align:middle;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.label:hover{color:#ffffff;text-decoration:none;} -.label-important{background-color:#b94a48;} -.label-important:hover{background-color:#953b39;} -.label-warning{background-color:#f89406;} -.label-warning:hover{background-color:#c67605;} -.label-success{background-color:#468847;} -.label-success:hover{background-color:#356635;} -.label-info{background-color:#3a87ad;} -.label-info:hover{background-color:#2d6987;} -.label-inverse{background-color:#333333;} -.label-inverse:hover{background-color:#1a1a1a;} -.badge{padding:1px 9px 2px;font-size:12.025px;font-weight:bold;white-space:nowrap;color:#ffffff;background-color:#999999;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} -.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} -.badge-error{background-color:#b94a48;} -.badge-error:hover{background-color:#953b39;} -.badge-warning{background-color:#f89406;} -.badge-warning:hover{background-color:#c67605;} -.badge-success{background-color:#468847;} -.badge-success:hover{background-color:#356635;} -.badge-info{background-color:#3a87ad;} -.badge-info:hover{background-color:#2d6987;} -.badge-inverse{background-color:#333333;} -.badge-inverse:hover{background-color:#1a1a1a;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;background-color:transparent;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} -.table th{font-weight:bold;} -.table thead th{vertical-align:bottom;} -.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} -.table tbody+tbody{border-top:2px solid #dddddd;} -.table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #dddddd;border-left:0;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} -.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} -table .span1{float:none;width:44px;margin-left:0;} -table .span2{float:none;width:124px;margin-left:0;} -table .span3{float:none;width:204px;margin-left:0;} -table .span4{float:none;width:284px;margin-left:0;} -table .span5{float:none;width:364px;margin-left:0;} -table .span6{float:none;width:444px;margin-left:0;} -table .span7{float:none;width:524px;margin-left:0;} -table .span8{float:none;width:604px;margin-left:0;} -table .span9{float:none;width:684px;margin-left:0;} -table .span10{float:none;width:764px;margin-left:0;} -table .span11{float:none;width:844px;margin-left:0;} -table .span12{float:none;width:924px;margin-left:0;} -table .span13{float:none;width:1004px;margin-left:0;} -table .span14{float:none;width:1084px;margin-left:0;} -table .span15{float:none;width:1164px;margin-left:0;} -table .span16{float:none;width:1244px;margin-left:0;} -table .span17{float:none;width:1324px;margin-left:0;} -table .span18{float:none;width:1404px;margin-left:0;} -table .span19{float:none;width:1484px;margin-left:0;} -table .span20{float:none;width:1564px;margin-left:0;} -table .span21{float:none;width:1644px;margin-left:0;} -table .span22{float:none;width:1724px;margin-left:0;} -table .span23{float:none;width:1804px;margin-left:0;} -table .span24{float:none;width:1884px;margin-left:0;} -form{margin:0 0 18px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} -label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} -input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.uneditable-textarea{width:auto;height:auto;} -label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} -input[type="image"]{border:0;} -input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} -select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} -input[type="file"]{line-height:18px \9;} -select{width:220px;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -textarea{height:auto;} -input[type="hidden"]{display:none;} -.radio,.checkbox{padding-left:18px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} -input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input,textarea,.uneditable-input{margin-left:0;} -input.span12, textarea.span12, .uneditable-input.span12{width:930px;} -input.span11, textarea.span11, .uneditable-input.span11{width:850px;} -input.span10, textarea.span10, .uneditable-input.span10{width:770px;} -input.span9, textarea.span9, .uneditable-input.span9{width:690px;} -input.span8, textarea.span8, .uneditable-input.span8{width:610px;} -input.span7, textarea.span7, .uneditable-input.span7{width:530px;} -input.span6, textarea.span6, .uneditable-input.span6{width:450px;} -input.span5, textarea.span5, .uneditable-input.span5{width:370px;} -input.span4, textarea.span4, .uneditable-input.span4{width:290px;} -input.span3, textarea.span3, .uneditable-input.span3{width:210px;} -input.span2, textarea.span2, .uneditable-input.span2{width:130px;} -input.span1, textarea.span1, .uneditable-input.span1{width:50px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#eeeeee;border-color:#ddd;cursor:not-allowed;} -.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#eeeeee;border-top:1px solid #ddd;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";} -.form-actions:after{clear:both;} -.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#999999;} -::-webkit-input-placeholder{color:#999999;} -.help-block,.help-inline{color:#555555;} -.help-block{display:block;margin-bottom:9px;} -.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{*margin-left:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} -.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;} -.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} -.input-append input,.input-append select .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} -.input-append .add-on,.input-append .btn{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;} -.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} -.form-search label,.form-inline label{display:inline-block;} -.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} -.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} -.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px;} -.control-group{margin-bottom:9px;} -legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;*display:inline-block;*margin-left:0;*padding-left:20px;} -.form-horizontal .help-block{margin-top:9px;margin-bottom:0;} -.form-horizontal .form-actions{padding-left:160px;} -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} -.btn:active,.btn.active{background-color:#cccccc \9;} -.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large [class^="icon-"]{margin-top:1px;} -.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small [class^="icon-"]{margin-top:-1px;} -.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#0074cc;background-image:-moz-linear-gradient(top, #0088cc, #0055cc);background-image:-ms-linear-gradient(top, #0088cc, #0055cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));background-image:-webkit-linear-gradient(top, #0088cc, #0055cc);background-image:-o-linear-gradient(top, #0088cc, #0055cc);background-image:linear-gradient(top, #0088cc, #0055cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);border-color:#0055cc #0055cc #003580;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0055cc;} -.btn-primary:active,.btn-primary.active{background-color:#004099 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;} -.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} -button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} -button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} -button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} -[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url("../img/glyphicons-halflings-white.png");} -.icon-glass{background-position:0 0;} -.icon-music{background-position:-24px 0;} -.icon-search{background-position:-48px 0;} -.icon-envelope{background-position:-72px 0;} -.icon-heart{background-position:-96px 0;} -.icon-star{background-position:-120px 0;} -.icon-star-empty{background-position:-144px 0;} -.icon-user{background-position:-168px 0;} -.icon-film{background-position:-192px 0;} -.icon-th-large{background-position:-216px 0;} -.icon-th{background-position:-240px 0;} -.icon-th-list{background-position:-264px 0;} -.icon-ok{background-position:-288px 0;} -.icon-remove{background-position:-312px 0;} -.icon-zoom-in{background-position:-336px 0;} -.icon-zoom-out{background-position:-360px 0;} -.icon-off{background-position:-384px 0;} -.icon-signal{background-position:-408px 0;} -.icon-cog{background-position:-432px 0;} -.icon-trash{background-position:-456px 0;} -.icon-home{background-position:0 -24px;} -.icon-file{background-position:-24px -24px;} -.icon-time{background-position:-48px -24px;} -.icon-road{background-position:-72px -24px;} -.icon-download-alt{background-position:-96px -24px;} -.icon-download{background-position:-120px -24px;} -.icon-upload{background-position:-144px -24px;} -.icon-inbox{background-position:-168px -24px;} -.icon-play-circle{background-position:-192px -24px;} -.icon-repeat{background-position:-216px -24px;} -.icon-refresh{background-position:-240px -24px;} -.icon-list-alt{background-position:-264px -24px;} -.icon-lock{background-position:-287px -24px;} -.icon-flag{background-position:-312px -24px;} -.icon-headphones{background-position:-336px -24px;} -.icon-volume-off{background-position:-360px -24px;} -.icon-volume-down{background-position:-384px -24px;} -.icon-volume-up{background-position:-408px -24px;} -.icon-qrcode{background-position:-432px -24px;} -.icon-barcode{background-position:-456px -24px;} -.icon-tag{background-position:0 -48px;} -.icon-tags{background-position:-25px -48px;} -.icon-book{background-position:-48px -48px;} -.icon-bookmark{background-position:-72px -48px;} -.icon-print{background-position:-96px -48px;} -.icon-camera{background-position:-120px -48px;} -.icon-font{background-position:-144px -48px;} -.icon-bold{background-position:-167px -48px;} -.icon-italic{background-position:-192px -48px;} -.icon-text-height{background-position:-216px -48px;} -.icon-text-width{background-position:-240px -48px;} -.icon-align-left{background-position:-264px -48px;} -.icon-align-center{background-position:-288px -48px;} -.icon-align-right{background-position:-312px -48px;} -.icon-align-justify{background-position:-336px -48px;} -.icon-list{background-position:-360px -48px;} -.icon-indent-left{background-position:-384px -48px;} -.icon-indent-right{background-position:-408px -48px;} -.icon-facetime-video{background-position:-432px -48px;} -.icon-picture{background-position:-456px -48px;} -.icon-pencil{background-position:0 -72px;} -.icon-map-marker{background-position:-24px -72px;} -.icon-adjust{background-position:-48px -72px;} -.icon-tint{background-position:-72px -72px;} -.icon-edit{background-position:-96px -72px;} -.icon-share{background-position:-120px -72px;} -.icon-check{background-position:-144px -72px;} -.icon-move{background-position:-168px -72px;} -.icon-step-backward{background-position:-192px -72px;} -.icon-fast-backward{background-position:-216px -72px;} -.icon-backward{background-position:-240px -72px;} -.icon-play{background-position:-264px -72px;} -.icon-pause{background-position:-288px -72px;} -.icon-stop{background-position:-312px -72px;} -.icon-forward{background-position:-336px -72px;} -.icon-fast-forward{background-position:-360px -72px;} -.icon-step-forward{background-position:-384px -72px;} -.icon-eject{background-position:-408px -72px;} -.icon-chevron-left{background-position:-432px -72px;} -.icon-chevron-right{background-position:-456px -72px;} -.icon-plus-sign{background-position:0 -96px;} -.icon-minus-sign{background-position:-24px -96px;} -.icon-remove-sign{background-position:-48px -96px;} -.icon-ok-sign{background-position:-72px -96px;} -.icon-question-sign{background-position:-96px -96px;} -.icon-info-sign{background-position:-120px -96px;} -.icon-screenshot{background-position:-144px -96px;} -.icon-remove-circle{background-position:-168px -96px;} -.icon-ok-circle{background-position:-192px -96px;} -.icon-ban-circle{background-position:-216px -96px;} -.icon-arrow-left{background-position:-240px -96px;} -.icon-arrow-right{background-position:-264px -96px;} -.icon-arrow-up{background-position:-289px -96px;} -.icon-arrow-down{background-position:-312px -96px;} -.icon-share-alt{background-position:-336px -96px;} -.icon-resize-full{background-position:-360px -96px;} -.icon-resize-small{background-position:-384px -96px;} -.icon-plus{background-position:-408px -96px;} -.icon-minus{background-position:-433px -96px;} -.icon-asterisk{background-position:-456px -96px;} -.icon-exclamation-sign{background-position:0 -120px;} -.icon-gift{background-position:-24px -120px;} -.icon-leaf{background-position:-48px -120px;} -.icon-fire{background-position:-72px -120px;} -.icon-eye-open{background-position:-96px -120px;} -.icon-eye-close{background-position:-120px -120px;} -.icon-warning-sign{background-position:-144px -120px;} -.icon-plane{background-position:-168px -120px;} -.icon-calendar{background-position:-192px -120px;} -.icon-random{background-position:-216px -120px;} -.icon-comment{background-position:-240px -120px;} -.icon-magnet{background-position:-264px -120px;} -.icon-chevron-up{background-position:-288px -120px;} -.icon-chevron-down{background-position:-313px -119px;} -.icon-retweet{background-position:-336px -120px;} -.icon-shopping-cart{background-position:-360px -120px;} -.icon-folder-close{background-position:-384px -120px;} -.icon-folder-open{background-position:-408px -120px;} -.icon-resize-vertical{background-position:-432px -119px;} -.icon-resize-horizontal{background-position:-456px -118px;} -.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} -.btn-group:after{clear:both;} -.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} -.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:3px;*padding-bottom:3px;} -.btn-group .btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:1px;*padding-bottom:1px;} -.btn-group .btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;} -.btn-group .btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;} -.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn .caret{margin-top:7px;margin-left:0;} -.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-mini .caret{margin-top:5px;} -.btn-small .caret{margin-top:6px;} -.btn-large .caret{margin-top:6px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.nav{margin-left:0;margin-bottom:18px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} -.nav li+.nav-header{margin-top:9px;} -.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list>li>a{padding:3px 15px;} -.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"]{margin-right:2px;} -.nav-list .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} -.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;} -.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} -.tabbable:after{clear:both;} -.tab-content{display:table;width:100%;} -.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below .nav-tabs{border-top:1px solid #ddd;} -.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} -.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;} -.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.navbar .container{width:auto;} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} -.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} -.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.nav-collapse.collapse{height:auto;} -.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;} -.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;} -.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} -.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} -.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.navbar-fixed-top{top:0;} -.navbar-fixed-bottom{bottom:0;} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;} -.navbar .nav>li{display:block;float:left;} -.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} -.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} -.navbar .nav.pull-right{margin-left:10px;margin-right:0;} -.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} -.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} -.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} -.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu,.navbar .nav .dropdown-menu.pull-right{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before,.navbar .nav .dropdown-menu.pull-right:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after,.navbar .nav .dropdown-menu.pull-right:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#999999;} -.breadcrumb .active a{color:#333333;} -.pagination{height:36px;margin:18px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} -.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} -.pagination .active a{color:#999999;cursor:default;} -.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} -.pager:after{clear:both;} -.pager li{display:inline;} -.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager a:hover{text-decoration:none;background-color:#f5f5f5;} -.pager .next a{float:right;} -.pager .previous a{float:left;} -.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} -.thumbnails:after{clear:both;} -.thumbnails>li{float:left;margin:0 0 18px 20px;} -.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;} -.alert-heading{color:inherit;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} -.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} -.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} -.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} -.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);} -.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;} -.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} -.popover.right{margin-left:5px;} -.popover.bottom{margin-top:5px;} -.popover.left{margin-left:-5px;} -.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} -.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} -.modal-open .dropdown-menu{z-index:2050;} -.modal-open .dropdown.open{*z-index:2050;} -.modal-open .popover{z-index:2060;} -.modal-open .tooltip{z-index:2070;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{overflow-y:auto;max-height:400px;padding:15px;} -.modal-form{margin-bottom:0;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} -.modal-footer:after{clear:both;} -.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} -.modal-footer .btn-group .btn+.btn{margin-left:-1px;} -.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;} -.dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;} -.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} -.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.dropdown.open .dropdown-menu{display:block;} -.pull-right .dropdown-menu{left:auto;right:0;} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} -.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion{margin-bottom:18px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:18px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel .item>img{display:block;line-height:1;} -.carousel .active,.carousel .next,.carousel .prev{display:block;} -.carousel .active{left:0;} -.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} -.carousel .next{left:100%;} -.carousel .prev{left:-100%;} -.carousel .next.left,.carousel .prev.right{left:0;} -.carousel .active.left{left:-100%;} -.carousel .active.right{left:100%;} -.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} -.hidden{display:none;visibility:hidden;} -.visible-phone{display:none;} -.visible-tablet{display:none;} -.visible-desktop{display:block;} -.hidden-phone{display:block;} -.hidden-tablet{display:block;} -.hidden-desktop{display:none;} -@media (max-width:767px){.visible-phone{display:block;} .hidden-phone{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (min-width:768px) and (max-width:979px){.visible-tablet{display:block;} .hidden-tablet{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top{margin-left:-20px;margin-right:-20px;} .container{width:auto;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;} .thumbnails [class*="span"]{width:auto;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:99.999999993%;} .row-fluid > .span11{width:91.436464082%;} .row-fluid > .span10{width:82.87292817100001%;} .row-fluid > .span9{width:74.30939226%;} .row-fluid > .span8{width:65.74585634900001%;} .row-fluid > .span7{width:57.182320438000005%;} .row-fluid > .span6{width:48.618784527%;} .row-fluid > .span5{width:40.055248616%;} .row-fluid > .span4{width:31.491712705%;} .row-fluid > .span3{width:22.928176794%;} .row-fluid > .span2{width:14.364640883%;} .row-fluid > .span1{width:5.801104972%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:714px;} input.span11, textarea.span11, .uneditable-input.span11{width:652px;} input.span10, textarea.span10, .uneditable-input.span10{width:590px;} input.span9, textarea.span9, .uneditable-input.span9{width:528px;} input.span8, textarea.span8, .uneditable-input.span8{width:466px;} input.span7, textarea.span7, .uneditable-input.span7{width:404px;} input.span6, textarea.span6, .uneditable-input.span6{width:342px;} input.span5, textarea.span5, .uneditable-input.span5{width:280px;} input.span4, textarea.span4, .uneditable-input.span4{width:218px;} input.span3, textarea.span3, .uneditable-input.span3{width:156px;} input.span2, textarea.span2, .uneditable-input.span2{width:94px;} input.span1, textarea.span1, .uneditable-input.span1{width:32px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:100%;} .row-fluid > .span11{width:91.45299145300001%;} .row-fluid > .span10{width:82.905982906%;} .row-fluid > .span9{width:74.358974359%;} .row-fluid > .span8{width:65.81196581200001%;} .row-fluid > .span7{width:57.264957265%;} .row-fluid > .span6{width:48.717948718%;} .row-fluid > .span5{width:40.170940171000005%;} .row-fluid > .span4{width:31.623931624%;} .row-fluid > .span3{width:23.076923077%;} .row-fluid > .span2{width:14.529914530000001%;} .row-fluid > .span1{width:5.982905983%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:1160px;} input.span11, textarea.span11, .uneditable-input.span11{width:1060px;} input.span10, textarea.span10, .uneditable-input.span10{width:960px;} input.span9, textarea.span9, .uneditable-input.span9{width:860px;} input.span8, textarea.span8, .uneditable-input.span8{width:760px;} input.span7, textarea.span7, .uneditable-input.span7{width:660px;} input.span6, textarea.span6, .uneditable-input.span6{width:560px;} input.span5, textarea.span5, .uneditable-input.span5{width:460px;} input.span4, textarea.span4, .uneditable-input.span4{width:360px;} input.span3, textarea.span3, .uneditable-input.span3{width:260px;} input.span2, textarea.span2, .uneditable-input.span2{width:160px;} input.span1, textarea.span1, .uneditable-input.span1{width:60px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git hwi/web/diagnostics.jsp hwi/web/diagnostics.jsp deleted file mode 100644 index 50ce186..0000000 --- hwi/web/diagnostics.jsp +++ /dev/null @@ -1,84 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page contentType="text/html" pageEncoding="UTF-8"%> -<%@page errorPage="error_page.jsp"%> -<%@page import="java.util.*"%> - - - - - -Diagnostics - - - - -
-
-
- -
- -
- -

System.getProperties()

- - - - - - - - - <% - Properties p = System.getProperties(); - for (Object o : p.keySet()) {%> - - - - - <% }%> - -
NameValue
<%=o%><%=p.getProperty(((String) o))%>
- -

System.getenv()

- - - - - - - - - <% - Map env = System.getenv(); - for (String key : env.keySet() ) {%> - - - - - <% }%> - -
NameValue
<%=key%><%=env.get(key)%>
- - -
-
-
- - diff --git hwi/web/error_page.jsp hwi/web/error_page.jsp deleted file mode 100644 index b004826..0000000 --- hwi/web/error_page.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<%@page isErrorPage="true"%> - - - -Hive Web Interface - - - - -
-
-
- -
- -
-

Hive Web Interface

-
-

<%= exception.getClass().getName() %>

- <%=exception.getMessage() %> -
- -

Stacktrace

-
-          <% for (StackTraceElement e: exception.getStackTrace() ) { %>
-          	File: <%= e.getFileName() %> Line:<%= e.getLineNumber() %> method: <%= e.getMethodName() %>
-          	class: <%=e.getClassName() %>
-          <% }  %>
-          
-
- -
- -
- - - diff --git hwi/web/img/glyphicons-halflings-white.png hwi/web/img/glyphicons-halflings-white.png deleted file mode 100644 index a20760b..0000000 Binary files hwi/web/img/glyphicons-halflings-white.png and /dev/null differ diff --git hwi/web/img/glyphicons-halflings.png hwi/web/img/glyphicons-halflings.png deleted file mode 100644 index 92d4445..0000000 Binary files hwi/web/img/glyphicons-halflings.png and /dev/null differ diff --git hwi/web/index.jsp hwi/web/index.jsp deleted file mode 100644 index 125a371..0000000 --- hwi/web/index.jsp +++ /dev/null @@ -1,48 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - -<%@page errorPage="error_page.jsp"%> -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> - - -Hive Web Interface - - - - -
-
-
- -
-
-

Hive Web Interface

-

The Hive Web Interface (HWI) offers an alternative to the - command line interface (CLI). Once authenticated users can start - HWIWebSessions. A HWIWebSession lives on the server users can - submit queries and return later to view the status of the query and - view any results it produced.

-
-
-
-
- - diff --git hwi/web/left_navigation.jsp hwi/web/left_navigation.jsp deleted file mode 100644 index 3cf647c..0000000 --- hwi/web/left_navigation.jsp +++ /dev/null @@ -1,31 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -
- -
diff --git hwi/web/navbar.jsp hwi/web/navbar.jsp deleted file mode 100644 index ed230c3..0000000 --- hwi/web/navbar.jsp +++ /dev/null @@ -1,33 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> - diff --git hwi/web/session_create.jsp hwi/web/session_create.jsp deleted file mode 100644 index 8f66574..0000000 --- hwi/web/session_create.jsp +++ /dev/null @@ -1,84 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<%@ page errorPage="error_page.jsp"%> -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> - -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> - -<% String sessionName=request.getParameter("sessionName"); %> -<% String message = null; %> - -<% - if (sessionName != null){ - if (sessionName.equals("")){ - message="This is not a valid session name"; - } else { - HWISessionItem item= hs.findSessionItemByName(auth, sessionName); - if (item!=null){ - message="This name is already in use"; - } else { - hs.createSession(auth,sessionName); - RequestDispatcher rd = application.getRequestDispatcher("/session_manage.jsp"); - rd.forward(request,response); - } - } - } - - if (sessionName == null){ - sessionName=""; - } -%> - - - -Hive Web Interface-Create a Hive Session - - - - -
-
-
- -
-
-
-
- Create a Hive Session -
- -
- -
-
-
- -
- -
-
- -
-
-
- - diff --git hwi/web/session_diagnostics.jsp hwi/web/session_diagnostics.jsp deleted file mode 100644 index 4ea0241..0000000 --- hwi/web/session_diagnostics.jsp +++ /dev/null @@ -1,77 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page contentType="text/html" pageEncoding="UTF-8"%> -<%@page errorPage="error_page.jsp"%> -<%@page import="org.apache.hadoop.hive.hwi.*"%> -<%@page import="org.apache.hadoop.hive.conf.*"%> -<%@page import="java.util.*"%> - -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% if (hs == null) { %> - - - -<% } %> - -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> -<% String sessionName = request.getParameter("sessionName"); %> -<% HWISessionItem si = hs.findSessionItemByName(auth,sessionName); %> - - - - -Session Diagnostics - - - - -
-
-
- -
-
-

Session Diagnostics

- - <% if (si!=null) { %> - - - - - - - - - <% for (HiveConf.ConfVars var : HiveConf.ConfVars.values() ){ %> - - - - - <% } %> - - -
Var NameVar Value
<%=var.name()%><%=si.getHiveConfVar(var)%>
- <% } %> - -
-
-
- - diff --git hwi/web/session_history.jsp hwi/web/session_history.jsp deleted file mode 100644 index ff7446d..0000000 --- hwi/web/session_history.jsp +++ /dev/null @@ -1,125 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page contentType="text/html" pageEncoding="UTF-8"%> -<%@page errorPage="error_page.jsp"%> -<%@page import="org.apache.hadoop.hive.hwi.*"%> -<%@page import="org.apache.hadoop.hive.conf.*"%> -<%@page import="org.apache.hadoop.hive.ql.history.*"%> -<%@page import="org.apache.hadoop.hive.ql.history.HiveHistory.*"%> -<%@page import="java.util.*"%> - -<% - HWISessionManager hs = (HWISessionManager) application - .getAttribute("hs"); -%> -<% - if (hs == null) { -%> - - - -<% - } -%> - -<% - HWIAuth auth = (HWIAuth) session.getAttribute("auth"); -%> -<% - if (auth == null) { -%> - -<% - } -%> -<% - String sessionName = request.getParameter("sessionName"); -%> -<% - HWISessionItem si = hs.findSessionItemByName(auth, sessionName); -%> -<% - HiveHistoryViewer hv = si.getHistoryViewer(); -%> - - - - -Session History - - - - -
-
-
- -
-
-

Hive History

- SessionID: - <%=hv.getSessionId()%>
- <% - for (String jobKey : hv.getJobInfoMap().keySet()) { - %> - <%=jobKey%>
-
    - <% - QueryInfo qi = hv.getJobInfoMap().get(jobKey); - %> - <% - for (String qiKey : qi.hm.keySet()) { - %> -
  • <%=qiKey%> <%=qi.hm.get(qiKey)%>
  • - <% - } - %> -
- <% - } - %> -

- <% - for (String taskKey : hv.getTaskInfoMap().keySet()) { - %> - <%=taskKey%>
-
    - <% - TaskInfo ti = hv.getTaskInfoMap().get(taskKey); - %> - <% - for (String tiKey : ti.hm.keySet()) { - %> -
  • <%=tiKey%> <%=ti.hm.get(tiKey)%> <% - if (tiKey.equalsIgnoreCase("TASK_HADOOP_ID")) { - %> - <%=ti.hm.get(tiKey)%> - <% - } - %> <% - } - %>
  • - <% - } - %> -
- -
-
-
- - diff --git hwi/web/session_kill.jsp hwi/web/session_kill.jsp deleted file mode 100644 index 63b24fc..0000000 --- hwi/web/session_kill.jsp +++ /dev/null @@ -1,65 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<%@ page errorPage="error_page.jsp"%> -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% String sessionName=request.getParameter("sessionName"); %> -<% String message=null; %> -<% - if (request.getParameter("confirm")!=null){ - HWISessionItem i = hs.findSessionItemByName(auth,sessionName); - i.clientKill(); - message="Query will be killed"; - } -%> - - - -Hive Web Interface - - - - -
-
-
- -
-
- <% if (message!=null){ %><%=message%> - <% } %> -
-
-
- Killing session <%=sessionName%> - - Are you sure you want to kill this session? -
-
-
- -
- -
- - - diff --git hwi/web/session_list.jsp hwi/web/session_list.jsp deleted file mode 100644 index 33660f7..0000000 --- hwi/web/session_list.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@ page import="org.apache.hadoop.hive.hwi.*"%> -<%@page errorPage="error_page.jsp"%> -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% if (hs == null) { %> - - - -<% } %> - -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> - - - -Session List - - - - -
-
-
- -
-
- -

Session List

- - - - - - - - - - - <% if ( hs.findAllSessionsForUser(auth)!=null){ %> - <% for (HWISessionItem item: hs.findAllSessionsForUser(auth) ){ %> - - - - - - <% } %> - <% } %> - -
NameStatusAction
<%=item.getSessionName()%><%=item.getStatus()%>Manager
-
-
-
- - - diff --git hwi/web/session_manage.jsp hwi/web/session_manage.jsp deleted file mode 100644 index ef65289..0000000 --- hwi/web/session_manage.jsp +++ /dev/null @@ -1,197 +0,0 @@ -<%-- -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ ---%> -<%@page import="org.apache.hadoop.hive.hwi.*" %> -<%@page errorPage="error_page.jsp" %> -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs");; %> - -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> -<% String sessionName=request.getParameter("sessionName"); %> -<% HWISessionItem sess = hs.findSessionItemByName(auth,sessionName); %> -<% String message=null; %> -<% - String errorFile=request.getParameter("errorFile"); - String resultFile=request.getParameter("resultFile"); - String query = request.getParameter("query"); - String silent = request.getParameter("silent"); - String start = request.getParameter("start"); -%> -<% - if (request.getParameter("start")!=null ){ - if ( sess.getStatus()==HWISessionItem.WebSessionItemStatus.READY){ - sess.setErrorFile(errorFile); - sess.setResultFile(resultFile); - sess.clearQueries(); - for (String q : query.split(";") ){ - sess.addQuery(q); - } - if (query.length()==0){ - message="You did not specify a query"; - start="NO"; - } - if (silent.equalsIgnoreCase("YES") ) - sess.setSSIsSilent(true); - else - sess.setSSIsSilent(false); - - message="Changes accepted."; - if (start.equalsIgnoreCase("YES") ){ - sess.clientStart(); - message="Session is set to start."; - } - } - } -%> - - - -Manage Session <%=sessionName%> - - - - -
-
-
- -
-
-

- Manage Session - <%=sessionName%>

- - <% if (message != null) { %> -
<%=message %>
- <% } %> - - <% if (sess.getStatus()==HWISessionItem.WebSessionItemStatus.QUERY_RUNNING) { %> -
Session is in QUERY_RUNNING - state. Changes are not possible!
- <% } %> - - <% if (sess.getStatus()==HWISessionItem.WebSessionItemStatus.QUERY_RUNNING){ %> - <%-- - View JobTracker: View Job
- Kill Command: <%= sess.getKillCommand() %> - Session Kill: <%=sessionName%>
- --%> - <% } %> - - - -
- - -
- Session Details -
- -
- "> - <% if (sess.getResultFile()!=null) { %> - View - File - <% } %> -
-
- -
- -
- "> -
-
- -
- -
- -
-
- - -
- -
- -
-
- -
- -
- -
-
- -
- -

Query Return Codes

-

- <% for (int i=0; i< sess.getQueryRet().size();++i ){ %> - <%=i%> - : - <%=sess.getQueryRet().get(i)%>
- <% } %> -

- - <% if (sess.getStatus()!=HWISessionItem.WebSessionItemStatus.QUERY_RUNNING) { %> -
- -
- - <% } %> -
-
-
-
- - diff --git hwi/web/session_remove.jsp hwi/web/session_remove.jsp deleted file mode 100644 index 5395b0e..0000000 --- hwi/web/session_remove.jsp +++ /dev/null @@ -1,67 +0,0 @@ -<%-- -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ ---%> -<%@ page import="org.apache.hadoop.hive.hwi.*" %> -<%@ page errorPage="error_page.jsp" %> -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% String sessionName=request.getParameter("sessionName"); %> -<% String message=null; %> -<% - if (request.getParameter("confirm")!=null){ - HWISessionItem i = hs.findSessionItemByName(auth,sessionName); - if (i.getStatus() != HWISessionItem.WebSessionItemStatus.QUERY_RUNNING ){ - hs.findAllSessionsForUser(auth).remove(i); - message="Session removed"; - } else { - message="Session could not be removed"; - } - } -%> - - - -Hive Web Interface - - - - -
-
-
- -
-
-

Hive Web Interface

- <% if (message!=null){ %><%=message%> - <% } %> -
-
- - Are you sure you want to remove this session? -
-
-
-
- - diff --git hwi/web/session_result.jsp hwi/web/session_result.jsp deleted file mode 100644 index 12d5574..0000000 --- hwi/web/session_result.jsp +++ /dev/null @@ -1,72 +0,0 @@ -<%-- - /** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ ---%> -<%@page contentType="text/html" pageEncoding="UTF-8" %> -<%@page errorPage="error_page.jsp" %> -<%@page import="org.apache.hadoop.hive.hwi.*" %> -<%@page import="org.apache.hadoop.hive.conf.*" %> -<%@page import="java.util.*" %> - -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% if (hs == null) { %> - - - -<% } %> - -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% if (auth==null) { %> - -<% } %> -<% String sessionName = request.getParameter("sessionName"); %> -<% HWISessionItem si = hs.findSessionItemByName(auth,sessionName); %> - - - - - Session Result Bucket - - - - -
-
-
- -
-
-

Session Result Bucket

- - <% if (si!=null) { %> - - - <% for (List rows : si.getResultBucket() ) { %> - <% for (String row : rows ) { %> - - <% } %> - <% } %> - -
<%=row%>
- <% } %> - -
-
-
- - diff --git hwi/web/show_database.jsp hwi/web/show_database.jsp deleted file mode 100644 index 4532168..0000000 --- hwi/web/show_database.jsp +++ /dev/null @@ -1,71 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page errorPage="error_page.jsp" %> -<%@page import="org.apache.hadoop.hive.metastore.*, -org.apache.hadoop.hive.metastore.api.*, -org.apache.hadoop.hive.conf.HiveConf, -org.apache.hadoop.hive.ql.session.SessionState, -java.util.*, -org.apache.hadoop.hive.ql.*, -org.apache.hadoop.hive.cli.*" %> -<%@page contentType="text/html" pageEncoding="UTF-8"%> -<% - HiveConf hiveConf = new HiveConf(SessionState.class); - HiveMetaStoreClient client = new HiveMetaStoreClient(hiveConf); - String db = request.getParameter("db"); - Database db2 = client.getDatabase(db); - List tables = client.getAllTables(db); - client.close(); -%> - - - - -HWI Hive Web Interface - - - - -
-
-
- -
-
-

<%= db%> - Table List -

- Name: - <%= db2.getName()%>
Description: - <%= db2.getDescription()%>
- - - - <% for (String table : tables){ %> - - - - <% } %> - -
<%=table%>
- -
-
-
- - diff --git hwi/web/show_databases.jsp hwi/web/show_databases.jsp deleted file mode 100644 index 75b4679..0000000 --- hwi/web/show_databases.jsp +++ /dev/null @@ -1,62 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page import="org.apache.hadoop.hive.metastore.*, -org.apache.hadoop.hive.metastore.api.*, -org.apache.hadoop.hive.conf.HiveConf, -org.apache.hadoop.hive.ql.session.SessionState, -java.util.*, -org.apache.hadoop.hive.ql.*, -org.apache.hadoop.hive.cli.*" %> -<%@page errorPage="error_page.jsp" %> -<% - HiveConf hiveConf = new HiveConf(SessionState.class); - HiveMetaStoreClient client = new HiveMetaStoreClient(hiveConf); - List dbs = client.getAllDatabases(); - client.close(); -%> - - - - -HWI Hive Web Interface-Schema Browser - - - - -
-
-
- -
-
- -

Database List

- - - <% for (String db : dbs) { %> - - - - <% } %> - -
<%=db%> -
-
-
-
- - diff --git hwi/web/show_table.jsp hwi/web/show_table.jsp deleted file mode 100644 index 674afb7..0000000 --- hwi/web/show_table.jsp +++ /dev/null @@ -1,184 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page contentType="text/html" pageEncoding="UTF-8"%> -<%@page errorPage="error_page.jsp" %> -<%@page import="java.util.*" %> - -<%@page import="org.apache.hadoop.hive.metastore.*, -org.apache.hadoop.hive.metastore.api.*, -org.apache.hadoop.hive.conf.HiveConf, -org.apache.hadoop.hive.ql.session.SessionState, -java.util.*, -org.apache.hadoop.hive.ql.*, -org.apache.hadoop.hive.cli.*" %> -<% - String db= request.getParameter("db"); - String table= request.getParameter("table"); - - HiveConf hiveConf = new HiveConf(SessionState.class); - HiveMetaStoreClient client = new HiveMetaStoreClient(hiveConf); - org.apache.hadoop.hive.metastore.api.Table t = client.getTable(db, table); - StorageDescriptor sd = t.getSd(); - List bcols = sd.getBucketCols(); - List fsc = sd.getCols(); - List ord = sd.getSortCols(); - Partition p = null;//How do we get this info? -%> - - - - -HWI Hive Web Interface-Schema Browser - - - - -
-
-
- -
-
-

<%=table%>

- ColsSize: - <%= sd.getColsSize()%> -
Input Format: - <%= sd.getInputFormat() %>
Output Format: - <%= sd.getOutputFormat() %>
Is Compressed?: - <%= sd.isCompressed() %>
Location: - <%= sd.getLocation() %> -
Number Of Buckets: - <%= sd.getNumBuckets() %>
- -

Field Schema

- - - - - - - - - - <% for (FieldSchema fs: fsc ) {%> - - - - - - <% } %> - -
NameTypeComment
<%=fs.getName() %><%=fs.getType() %><%=fs.getComment() %>
- - - - - - - - - <% for (String col: bcols ) {%> - - - - <% } %> - -
Bucket Columns
<%=col%>
- -

Sort Columns

- - - - - - - - - <% for (Order o: ord ) {%> - - - - - <% } %> - -
ColumnOrder
<%= o.getCol() %><%= o.getOrder() %>
- -

Parameters

- - - - - - - - - <% for ( String key: sd.getParameters().keySet() ){ %> - - - - - <% } %> - -
NameValue
<%=key%><%=sd.getParameters().get(key)%>
- -

SerDe Info

- <% SerDeInfo si = sd.getSerdeInfo(); %> - Name:<%= si.getName() %>
Lib: - <%= si.getSerializationLib() %>
- - - - - - - - - <% for (String key: si.getParameters().keySet() ) { %> - - - - - <% } %> - -
Namevalue
<%= key %><%= si.getParameters().get(key) %>
- -

Partition Information

- - - - - - - - - - <% for (FieldSchema fieldSchema: t.getPartitionKeys() ){ %> - - - - - - <% } %> - -
NameTypeComment
<%= fieldSchema.getName() %><%= fieldSchema.getType() %><%= fieldSchema.getComment() %>
- -
-
-
- - -<% client.close(); %> diff --git hwi/web/view_file.jsp hwi/web/view_file.jsp deleted file mode 100644 index f2a2d43..0000000 --- hwi/web/view_file.jsp +++ /dev/null @@ -1,79 +0,0 @@ -<%-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---%> -<%@page errorPage="error_page.jsp" %> -<%@ page import="org.apache.hadoop.hive.hwi.*,java.io.*" %> -<% HWIAuth auth = (HWIAuth) session.getAttribute("auth"); %> -<% HWISessionManager hs = (HWISessionManager) application.getAttribute("hs"); %> -<% if (auth==null) { %> - -<% } %> -<% String sessionName=request.getParameter("sessionName"); %> -<% HWISessionItem sess = hs.findSessionItemByName(auth,sessionName); %> -<% int start=0; - if (request.getParameter("start")!=null){ - start = Integer.parseInt( request.getParameter("start") ); - } -%> -<% int bsize=1024; - if (request.getParameter("bsize")!=null){ - bsize = Integer.parseInt( request.getParameter("bsize") ); - } -%> - - - -Hive Web Interface - - - - -
-
-
- -
-
-

Hive Web Interface

-

<%=sess.getResultFile() %>

-
-					<%   
-			  File f = new File(   sess.getResultFile()  ); 
-			  BufferedReader br = new BufferedReader( new FileReader(f) );
-			  br.skip(start*bsize);
-			  
-			  char [] c = new char [bsize] ;
-			  int cread=-1;
-			  
-			  if( ( cread=br.read(c)) != -1 ){
-			   out.println( c ); 
-			  }
-			  br.close();	  
-			%>
-          
- <% long numberOfBlocks = f.length()/ (long)bsize;%> - This file contains - <%=numberOfBlocks%> - of - <%=bsize%> - blocks. Next - Block -
-
-
- - diff --git packaging/pom.xml packaging/pom.xml index 7a53856..bfe3637 100644 --- packaging/pom.xml +++ packaging/pom.xml @@ -215,11 +215,6 @@ org.apache.hive - hive-hwi - ${project.version} - - - org.apache.hive hive-accumulo-handler ${project.version} diff --git packaging/src/main/assembly/src.xml packaging/src/main/assembly/src.xml index a204033..e6af8b1 100644 --- packaging/src/main/assembly/src.xml +++ packaging/src/main/assembly/src.xml @@ -73,7 +73,6 @@ hbase-handler/**/* hcatalog/**/* hplsql/**/* - hwi/**/* itests/**/* jdbc/**/* contrib/**/* diff --git pom.xml pom.xml index 0a55c7c..c2e9ac3 100644 --- pom.xml +++ pom.xml @@ -41,7 +41,6 @@ hbase-handler hcatalog hplsql - hwi jdbc metastore orc